1#
2# Copyright 2019 The Abseil Authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17load(
18    "//absl:copts/configure_copts.bzl",
19    "ABSL_DEFAULT_COPTS",
20    "ABSL_DEFAULT_LINKOPTS",
21    "ABSL_TEST_COPTS",
22)
23
24package(default_visibility = ["//visibility:public"])
25
26licenses(["notice"])
27
28cc_library(
29    name = "path_util",
30    hdrs = [
31        "internal/path_util.h",
32    ],
33    copts = ABSL_DEFAULT_COPTS,
34    linkopts = ABSL_DEFAULT_LINKOPTS,
35    visibility = [
36        "//absl/flags:__pkg__",
37    ],
38    deps = [
39        "//absl/base:config",
40        "//absl/strings",
41    ],
42)
43
44cc_library(
45    name = "program_name",
46    srcs = [
47        "internal/program_name.cc",
48    ],
49    hdrs = [
50        "internal/program_name.h",
51    ],
52    copts = ABSL_DEFAULT_COPTS,
53    linkopts = ABSL_DEFAULT_LINKOPTS,
54    visibility = [
55        "//absl/flags:__pkg__",
56        "//absl/log:__pkg__",
57    ],
58    deps = [
59        ":path_util",
60        "//absl/base:config",
61        "//absl/base:core_headers",
62        "//absl/strings",
63        "//absl/synchronization",
64    ],
65)
66
67cc_library(
68    name = "config",
69    srcs = [
70        "usage_config.cc",
71    ],
72    hdrs = [
73        "config.h",
74        "usage_config.h",
75    ],
76    copts = ABSL_DEFAULT_COPTS,
77    linkopts = ABSL_DEFAULT_LINKOPTS,
78    deps = [
79        ":path_util",
80        ":program_name",
81        "//absl/base:config",
82        "//absl/base:core_headers",
83        "//absl/strings",
84        "//absl/synchronization",
85    ],
86)
87
88cc_library(
89    name = "marshalling",
90    srcs = [
91        "marshalling.cc",
92    ],
93    hdrs = [
94        "marshalling.h",
95    ],
96    copts = ABSL_DEFAULT_COPTS,
97    linkopts = ABSL_DEFAULT_LINKOPTS,
98    deps = [
99        "//absl/base:config",
100        "//absl/base:core_headers",
101        "//absl/base:log_severity",
102        "//absl/strings",
103        "//absl/strings:str_format",
104        "//absl/types:optional",
105    ],
106)
107
108cc_library(
109    name = "commandlineflag_internal",
110    srcs = [
111        "internal/commandlineflag.cc",
112    ],
113    hdrs = [
114        "internal/commandlineflag.h",
115    ],
116    copts = ABSL_DEFAULT_COPTS,
117    linkopts = ABSL_DEFAULT_LINKOPTS,
118    visibility = [
119        "//visibility:private",
120    ],
121    deps = [
122        "//absl/base:config",
123        "//absl/base:fast_type_id",
124    ],
125)
126
127cc_library(
128    name = "commandlineflag",
129    srcs = [
130        "commandlineflag.cc",
131    ],
132    hdrs = [
133        "commandlineflag.h",
134    ],
135    copts = ABSL_DEFAULT_COPTS,
136    linkopts = ABSL_DEFAULT_LINKOPTS,
137    deps = [
138        ":commandlineflag_internal",
139        "//absl/base:config",
140        "//absl/base:fast_type_id",
141        "//absl/strings",
142        "//absl/types:optional",
143    ],
144)
145
146cc_library(
147    name = "private_handle_accessor",
148    srcs = [
149        "internal/private_handle_accessor.cc",
150    ],
151    hdrs = [
152        "internal/private_handle_accessor.h",
153    ],
154    copts = ABSL_DEFAULT_COPTS,
155    linkopts = ABSL_DEFAULT_LINKOPTS,
156    visibility = [
157        "//absl/flags:__pkg__",
158    ],
159    deps = [
160        ":commandlineflag",
161        ":commandlineflag_internal",
162        "//absl/base:config",
163        "//absl/strings",
164    ],
165)
166
167cc_library(
168    name = "reflection",
169    srcs = [
170        "reflection.cc",
171    ],
172    hdrs = [
173        "internal/registry.h",
174        "reflection.h",
175    ],
176    copts = ABSL_DEFAULT_COPTS,
177    linkopts = ABSL_DEFAULT_LINKOPTS,
178    deps = [
179        ":commandlineflag",
180        ":commandlineflag_internal",
181        ":config",
182        ":private_handle_accessor",
183        "//absl/base:config",
184        "//absl/base:core_headers",
185        "//absl/container:flat_hash_map",
186        "//absl/strings",
187        "//absl/synchronization",
188    ],
189)
190
191cc_library(
192    name = "flag_internal",
193    srcs = [
194        "internal/flag.cc",
195    ],
196    hdrs = [
197        "internal/flag.h",
198        "internal/sequence_lock.h",
199    ],
200    copts = ABSL_DEFAULT_COPTS,
201    linkopts = ABSL_DEFAULT_LINKOPTS,
202    visibility = ["//absl/base:__subpackages__"],
203    deps = [
204        ":commandlineflag",
205        ":commandlineflag_internal",
206        ":config",
207        ":marshalling",
208        ":reflection",
209        "//absl/base",
210        "//absl/base:config",
211        "//absl/base:core_headers",
212        "//absl/base:dynamic_annotations",
213        "//absl/memory",
214        "//absl/meta:type_traits",
215        "//absl/strings",
216        "//absl/synchronization",
217        "//absl/utility",
218    ],
219)
220
221cc_library(
222    name = "flag",
223    srcs = [
224        "flag.cc",
225        "internal/flag_msvc.inc",
226    ],
227    hdrs = [
228        "declare.h",
229        "flag.h",
230    ],
231    copts = ABSL_DEFAULT_COPTS,
232    linkopts = ABSL_DEFAULT_LINKOPTS,
233    deps = [
234        ":config",
235        ":flag_internal",
236        ":reflection",
237        "//absl/base",
238        "//absl/base:config",
239        "//absl/base:core_headers",
240        "//absl/strings",
241    ],
242)
243
244cc_library(
245    name = "usage_internal",
246    srcs = [
247        "internal/usage.cc",
248    ],
249    hdrs = [
250        "internal/usage.h",
251    ],
252    copts = ABSL_DEFAULT_COPTS,
253    linkopts = ABSL_DEFAULT_LINKOPTS,
254    visibility = [
255        "//absl/flags:__pkg__",
256    ],
257    deps = [
258        ":commandlineflag",
259        ":config",
260        ":flag",
261        ":flag_internal",
262        ":path_util",
263        ":private_handle_accessor",
264        ":program_name",
265        ":reflection",
266        "//absl/base:config",
267        "//absl/base:core_headers",
268        "//absl/container:flat_hash_map",
269        "//absl/strings",
270    ],
271)
272
273cc_library(
274    name = "usage",
275    srcs = [
276        "usage.cc",
277    ],
278    hdrs = [
279        "usage.h",
280    ],
281    copts = ABSL_DEFAULT_COPTS,
282    linkopts = ABSL_DEFAULT_LINKOPTS,
283    deps = [
284        ":usage_internal",
285        "//absl/base:config",
286        "//absl/base:core_headers",
287        "//absl/strings",
288        "//absl/synchronization",
289    ],
290)
291
292cc_library(
293    name = "parse",
294    srcs = ["parse.cc"],
295    hdrs = [
296        "internal/parse.h",
297        "parse.h",
298    ],
299    copts = ABSL_DEFAULT_COPTS,
300    linkopts = ABSL_DEFAULT_LINKOPTS,
301    deps = [
302        ":commandlineflag",
303        ":commandlineflag_internal",
304        ":config",
305        ":flag",
306        ":flag_internal",
307        ":private_handle_accessor",
308        ":program_name",
309        ":reflection",
310        ":usage",
311        ":usage_internal",
312        "//absl/algorithm:container",
313        "//absl/base:config",
314        "//absl/base:core_headers",
315        "//absl/strings",
316        "//absl/synchronization",
317    ],
318)
319
320############################################################################
321# Unit tests in alphabetical order.
322
323cc_test(
324    name = "commandlineflag_test",
325    size = "small",
326    srcs = [
327        "commandlineflag_test.cc",
328    ],
329    copts = ABSL_TEST_COPTS,
330    linkopts = ABSL_DEFAULT_LINKOPTS,
331    tags = [
332        "no_test:os:android",
333        "no_test:os:ios",
334        "no_test_android",
335        "no_test_ios",
336        "no_test_wasm",
337    ],
338    deps = [
339        ":commandlineflag",
340        ":commandlineflag_internal",
341        ":config",
342        ":flag",
343        ":private_handle_accessor",
344        ":reflection",
345        "//absl/memory",
346        "//absl/strings",
347        "@com_google_googletest//:gtest_main",
348    ],
349)
350
351cc_test(
352    name = "config_test",
353    size = "small",
354    srcs = [
355        "config_test.cc",
356    ],
357    copts = ABSL_TEST_COPTS,
358    linkopts = ABSL_DEFAULT_LINKOPTS,
359    deps = [
360        ":config",
361        "@com_google_googletest//:gtest_main",
362    ],
363)
364
365cc_test(
366    name = "flag_test",
367    size = "small",
368    srcs = [
369        "flag_test.cc",
370        "flag_test_defs.cc",
371    ],
372    copts = ABSL_TEST_COPTS,
373    linkopts = ABSL_DEFAULT_LINKOPTS,
374    tags = [
375        "no_test:os:android",
376        "no_test:os:ios",
377        "no_test_android",
378        "no_test_ios",
379        "no_test_wasm",
380    ],
381    deps = [
382        ":config",
383        ":flag",
384        ":flag_internal",
385        ":marshalling",
386        ":reflection",
387        "//absl/base:core_headers",
388        "//absl/base:malloc_internal",
389        "//absl/strings",
390        "//absl/time",
391        "@com_google_googletest//:gtest_main",
392    ],
393)
394
395cc_binary(
396    name = "flag_benchmark",
397    testonly = 1,
398    srcs = [
399        "flag_benchmark.cc",
400    ],
401    copts = ABSL_TEST_COPTS,
402    linkopts = select({
403        "//conditions:default": [],
404    }) + ABSL_DEFAULT_LINKOPTS,
405    tags = ["benchmark"],
406    visibility = ["//visibility:private"],
407    deps = [
408        "flag_benchmark.lds",
409        ":flag",
410        ":marshalling",
411        ":parse",
412        ":reflection",
413        "//absl/strings",
414        "//absl/time",
415        "//absl/types:optional",
416        "@com_github_google_benchmark//:benchmark_main",
417    ],
418)
419
420cc_test(
421    name = "marshalling_test",
422    size = "small",
423    srcs = [
424        "marshalling_test.cc",
425    ],
426    copts = ABSL_TEST_COPTS,
427    linkopts = ABSL_DEFAULT_LINKOPTS,
428    deps = [
429        ":marshalling",
430        "@com_google_googletest//:gtest_main",
431    ],
432)
433
434cc_test(
435    name = "parse_test",
436    size = "small",
437    srcs = [
438        "parse_test.cc",
439    ],
440    copts = ABSL_TEST_COPTS,
441    linkopts = ABSL_DEFAULT_LINKOPTS,
442    tags = [
443        "no_test:os:android",
444        "no_test:os:ios",
445        "no_test_android",
446        "no_test_ios",
447        "no_test_wasm",
448    ],
449    deps = [
450        ":flag",
451        ":parse",
452        ":reflection",
453        ":usage_internal",
454        "//absl/base:raw_logging_internal",
455        "//absl/base:scoped_set_env",
456        "//absl/strings",
457        "//absl/types:span",
458        "@com_google_googletest//:gtest_main",
459    ],
460)
461
462cc_test(
463    name = "path_util_test",
464    size = "small",
465    srcs = [
466        "internal/path_util_test.cc",
467    ],
468    copts = ABSL_TEST_COPTS,
469    linkopts = ABSL_DEFAULT_LINKOPTS,
470    deps = [
471        ":path_util",
472        "@com_google_googletest//:gtest_main",
473    ],
474)
475
476cc_test(
477    name = "program_name_test",
478    size = "small",
479    srcs = [
480        "internal/program_name_test.cc",
481    ],
482    copts = ABSL_TEST_COPTS,
483    linkopts = ABSL_DEFAULT_LINKOPTS,
484    tags = ["no_test_wasm"],
485    deps = [
486        ":program_name",
487        "//absl/strings",
488        "@com_google_googletest//:gtest_main",
489    ],
490)
491
492cc_test(
493    name = "reflection_test",
494    size = "small",
495    srcs = [
496        "reflection_test.cc",
497    ],
498    copts = ABSL_TEST_COPTS,
499    linkopts = ABSL_DEFAULT_LINKOPTS,
500    tags = [
501        "no_test:os:android",
502        "no_test:os:ios",
503        "no_test_android",
504        "no_test_ios",
505        "no_test_wasm",
506    ],
507    deps = [
508        ":commandlineflag_internal",
509        ":flag",
510        ":marshalling",
511        ":reflection",
512        ":usage_internal",
513        "//absl/memory",
514        "//absl/strings",
515        "@com_google_googletest//:gtest_main",
516    ],
517)
518
519cc_test(
520    name = "sequence_lock_test",
521    size = "small",
522    timeout = "moderate",
523    srcs = [
524        "internal/sequence_lock_test.cc",
525    ],
526    copts = ABSL_TEST_COPTS,
527    linkopts = ABSL_DEFAULT_LINKOPTS,
528    shard_count = 31,
529    tags = ["no_test_wasm"],
530    deps = [
531        ":flag_internal",
532        "//absl/base",
533        "//absl/container:fixed_array",
534        "//absl/time",
535        "@com_google_googletest//:gtest_main",
536    ],
537)
538
539cc_test(
540    name = "usage_config_test",
541    size = "small",
542    srcs = [
543        "usage_config_test.cc",
544    ],
545    copts = ABSL_TEST_COPTS,
546    linkopts = ABSL_DEFAULT_LINKOPTS,
547    deps = [
548        ":config",
549        ":path_util",
550        ":program_name",
551        "//absl/strings",
552        "@com_google_googletest//:gtest_main",
553    ],
554)
555
556cc_test(
557    name = "usage_test",
558    size = "small",
559    srcs = [
560        "internal/usage_test.cc",
561    ],
562    copts = ABSL_TEST_COPTS,
563    linkopts = ABSL_DEFAULT_LINKOPTS,
564    tags = [
565        "no_test:os:android",
566        "no_test:os:ios",
567        "no_test_android",
568        "no_test_ios",
569        "no_test_wasm",
570    ],
571    deps = [
572        ":config",
573        ":flag",
574        ":parse",
575        ":path_util",
576        ":program_name",
577        ":reflection",
578        ":usage",
579        ":usage_internal",
580        "//absl/strings",
581        "@com_google_googletest//:gtest",
582    ],
583)
584