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