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