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/strings", 70 "//absl/synchronization", 71 ], 72) 73 74cc_library( 75 name = "config", 76 srcs = [ 77 "usage_config.cc", 78 ], 79 hdrs = [ 80 "config.h", 81 "usage_config.h", 82 ], 83 copts = ABSL_DEFAULT_COPTS, 84 linkopts = ABSL_DEFAULT_LINKOPTS, 85 deps = [ 86 ":path_util", 87 ":program_name", 88 "//absl/base:config", 89 "//absl/base:core_headers", 90 "//absl/strings", 91 "//absl/synchronization", 92 ], 93) 94 95cc_library( 96 name = "marshalling", 97 srcs = [ 98 "marshalling.cc", 99 ], 100 hdrs = [ 101 "marshalling.h", 102 ], 103 copts = ABSL_DEFAULT_COPTS, 104 linkopts = ABSL_DEFAULT_LINKOPTS, 105 deps = [ 106 "//absl/base:config", 107 "//absl/base:core_headers", 108 "//absl/base:log_severity", 109 "//absl/numeric:int128", 110 "//absl/strings", 111 "//absl/strings:str_format", 112 "//absl/types:optional", 113 ], 114) 115 116cc_library( 117 name = "commandlineflag_internal", 118 srcs = [ 119 "internal/commandlineflag.cc", 120 ], 121 hdrs = [ 122 "internal/commandlineflag.h", 123 ], 124 copts = ABSL_DEFAULT_COPTS, 125 linkopts = ABSL_DEFAULT_LINKOPTS, 126 visibility = [ 127 "//visibility:private", 128 ], 129 deps = [ 130 "//absl/base:config", 131 "//absl/base:fast_type_id", 132 ], 133) 134 135cc_library( 136 name = "commandlineflag", 137 srcs = [ 138 "commandlineflag.cc", 139 ], 140 hdrs = [ 141 "commandlineflag.h", 142 ], 143 copts = ABSL_DEFAULT_COPTS, 144 linkopts = ABSL_DEFAULT_LINKOPTS, 145 deps = [ 146 ":commandlineflag_internal", 147 "//absl/base:config", 148 "//absl/base:fast_type_id", 149 "//absl/strings", 150 "//absl/types:optional", 151 ], 152) 153 154cc_library( 155 name = "private_handle_accessor", 156 srcs = [ 157 "internal/private_handle_accessor.cc", 158 ], 159 hdrs = [ 160 "internal/private_handle_accessor.h", 161 ], 162 copts = ABSL_DEFAULT_COPTS, 163 linkopts = ABSL_DEFAULT_LINKOPTS, 164 visibility = [ 165 "//absl/flags:__pkg__", 166 ], 167 deps = [ 168 ":commandlineflag", 169 ":commandlineflag_internal", 170 "//absl/base:config", 171 "//absl/strings", 172 ], 173) 174 175cc_library( 176 name = "reflection", 177 srcs = [ 178 "reflection.cc", 179 ], 180 hdrs = [ 181 "internal/registry.h", 182 "reflection.h", 183 ], 184 copts = ABSL_DEFAULT_COPTS, 185 linkopts = ABSL_DEFAULT_LINKOPTS, 186 deps = [ 187 ":commandlineflag", 188 ":commandlineflag_internal", 189 ":config", 190 ":private_handle_accessor", 191 "//absl/base:config", 192 "//absl/base:core_headers", 193 "//absl/base:no_destructor", 194 "//absl/container:flat_hash_map", 195 "//absl/strings", 196 "//absl/synchronization", 197 ], 198) 199 200cc_library( 201 name = "flag_internal", 202 srcs = [ 203 "internal/flag.cc", 204 ], 205 hdrs = [ 206 "internal/flag.h", 207 "internal/sequence_lock.h", 208 ], 209 copts = ABSL_DEFAULT_COPTS, 210 linkopts = ABSL_DEFAULT_LINKOPTS, 211 visibility = ["//absl/base:__subpackages__"], 212 deps = [ 213 ":commandlineflag", 214 ":commandlineflag_internal", 215 ":config", 216 ":marshalling", 217 ":reflection", 218 "//absl/base", 219 "//absl/base:config", 220 "//absl/base:core_headers", 221 "//absl/base:dynamic_annotations", 222 "//absl/memory", 223 "//absl/meta:type_traits", 224 "//absl/strings", 225 "//absl/synchronization", 226 "//absl/utility", 227 ], 228) 229 230cc_library( 231 name = "flag", 232 srcs = [ 233 "flag.cc", 234 "internal/flag_msvc.inc", 235 ], 236 hdrs = [ 237 "declare.h", 238 "flag.h", 239 ], 240 copts = ABSL_DEFAULT_COPTS, 241 linkopts = ABSL_DEFAULT_LINKOPTS, 242 deps = [ 243 ":config", 244 ":flag_internal", 245 ":reflection", 246 "//absl/base", 247 "//absl/base:config", 248 "//absl/base:core_headers", 249 "//absl/strings", 250 ], 251) 252 253cc_library( 254 name = "usage_internal", 255 srcs = [ 256 "internal/usage.cc", 257 ], 258 hdrs = [ 259 "internal/usage.h", 260 ], 261 copts = ABSL_DEFAULT_COPTS, 262 linkopts = ABSL_DEFAULT_LINKOPTS, 263 visibility = [ 264 "//absl/flags:__pkg__", 265 ], 266 deps = [ 267 ":commandlineflag", 268 ":config", 269 ":flag", 270 ":flag_internal", 271 ":path_util", 272 ":private_handle_accessor", 273 ":program_name", 274 ":reflection", 275 "//absl/base:config", 276 "//absl/base:core_headers", 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/strings", 326 "//absl/synchronization", 327 ], 328) 329 330############################################################################ 331# Unit tests in alphabetical order. 332 333cc_test( 334 name = "commandlineflag_test", 335 size = "small", 336 srcs = [ 337 "commandlineflag_test.cc", 338 ], 339 copts = ABSL_TEST_COPTS, 340 linkopts = ABSL_DEFAULT_LINKOPTS, 341 tags = [ 342 "no_test:os:android", 343 "no_test:os:ios", 344 "no_test_android", 345 "no_test_ios", 346 "no_test_wasm", 347 ], 348 deps = [ 349 ":commandlineflag", 350 ":commandlineflag_internal", 351 ":config", 352 ":flag", 353 ":private_handle_accessor", 354 ":reflection", 355 "//absl/memory", 356 "//absl/strings", 357 "@com_google_googletest//:gtest", 358 "@com_google_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 "@com_google_googletest//:gtest", 373 "@com_google_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 ":reflection", 399 "//absl/base:core_headers", 400 "//absl/base:malloc_internal", 401 "//absl/numeric:int128", 402 "//absl/strings", 403 "//absl/time", 404 "@com_google_googletest//:gtest", 405 "@com_google_googletest//:gtest_main", 406 ], 407) 408 409cc_binary( 410 name = "flag_benchmark", 411 testonly = 1, 412 srcs = [ 413 "flag_benchmark.cc", 414 ], 415 copts = ABSL_TEST_COPTS, 416 linkopts = select({ 417 "//conditions:default": [], 418 }) + ABSL_DEFAULT_LINKOPTS, 419 tags = ["benchmark"], 420 visibility = ["//visibility:private"], 421 deps = [ 422 "flag_benchmark.lds", 423 ":flag", 424 ":marshalling", 425 ":parse", 426 ":reflection", 427 "//absl/strings", 428 "//absl/time", 429 "//absl/types:optional", 430 "@com_github_google_benchmark//:benchmark_main", 431 ], 432) 433 434cc_test( 435 name = "marshalling_test", 436 size = "small", 437 srcs = [ 438 "marshalling_test.cc", 439 ], 440 copts = ABSL_TEST_COPTS, 441 linkopts = ABSL_DEFAULT_LINKOPTS, 442 deps = [ 443 ":marshalling", 444 "@com_google_googletest//:gtest", 445 "@com_google_googletest//:gtest_main", 446 ], 447) 448 449cc_test( 450 name = "parse_test", 451 size = "small", 452 srcs = [ 453 "parse_test.cc", 454 ], 455 copts = ABSL_TEST_COPTS, 456 linkopts = ABSL_DEFAULT_LINKOPTS, 457 tags = [ 458 "no_test:os:android", 459 "no_test:os:ios", 460 "no_test_android", 461 "no_test_ios", 462 "no_test_wasm", 463 ], 464 deps = [ 465 ":flag", 466 ":parse", 467 ":reflection", 468 ":usage_internal", 469 "//absl/base:scoped_set_env", 470 "//absl/log", 471 "//absl/strings", 472 "//absl/types:span", 473 "@com_google_googletest//:gtest", 474 "@com_google_googletest//:gtest_main", 475 ], 476) 477 478cc_test( 479 name = "path_util_test", 480 size = "small", 481 srcs = [ 482 "internal/path_util_test.cc", 483 ], 484 copts = ABSL_TEST_COPTS, 485 linkopts = ABSL_DEFAULT_LINKOPTS, 486 deps = [ 487 ":path_util", 488 "@com_google_googletest//:gtest", 489 "@com_google_googletest//:gtest_main", 490 ], 491) 492 493cc_test( 494 name = "program_name_test", 495 size = "small", 496 srcs = [ 497 "internal/program_name_test.cc", 498 ], 499 copts = ABSL_TEST_COPTS, 500 linkopts = ABSL_DEFAULT_LINKOPTS, 501 tags = ["no_test_wasm"], 502 deps = [ 503 ":program_name", 504 "//absl/strings", 505 "@com_google_googletest//:gtest", 506 "@com_google_googletest//:gtest_main", 507 ], 508) 509 510cc_test( 511 name = "reflection_test", 512 size = "small", 513 srcs = [ 514 "reflection_test.cc", 515 ], 516 copts = ABSL_TEST_COPTS, 517 linkopts = ABSL_DEFAULT_LINKOPTS, 518 tags = [ 519 "no_test:os:android", 520 "no_test:os:ios", 521 "no_test_android", 522 "no_test_ios", 523 "no_test_wasm", 524 ], 525 deps = [ 526 ":commandlineflag_internal", 527 ":flag", 528 ":marshalling", 529 ":reflection", 530 ":usage_internal", 531 "//absl/memory", 532 "//absl/strings", 533 "@com_google_googletest//:gtest", 534 "@com_google_googletest//:gtest_main", 535 ], 536) 537 538cc_test( 539 name = "sequence_lock_test", 540 size = "small", 541 timeout = "moderate", 542 srcs = [ 543 "internal/sequence_lock_test.cc", 544 ], 545 copts = ABSL_TEST_COPTS, 546 linkopts = ABSL_DEFAULT_LINKOPTS, 547 shard_count = 31, 548 tags = ["no_test_wasm"], 549 deps = [ 550 ":flag_internal", 551 "//absl/base", 552 "//absl/container:fixed_array", 553 "//absl/time", 554 "@com_google_googletest//:gtest", 555 "@com_google_googletest//:gtest_main", 556 ], 557) 558 559cc_test( 560 name = "usage_config_test", 561 size = "small", 562 srcs = [ 563 "usage_config_test.cc", 564 ], 565 copts = ABSL_TEST_COPTS, 566 linkopts = ABSL_DEFAULT_LINKOPTS, 567 deps = [ 568 ":config", 569 ":path_util", 570 ":program_name", 571 "//absl/strings", 572 "@com_google_googletest//:gtest", 573 "@com_google_googletest//:gtest_main", 574 ], 575) 576 577cc_test( 578 name = "usage_test", 579 size = "small", 580 srcs = [ 581 "internal/usage_test.cc", 582 ], 583 copts = ABSL_TEST_COPTS, 584 linkopts = ABSL_DEFAULT_LINKOPTS, 585 tags = [ 586 "no_test:os:android", 587 "no_test:os:ios", 588 "no_test_android", 589 "no_test_ios", 590 "no_test_wasm", 591 ], 592 deps = [ 593 ":config", 594 ":flag", 595 ":parse", 596 ":path_util", 597 ":program_name", 598 ":reflection", 599 ":usage", 600 ":usage_internal", 601 "//absl/strings", 602 "@com_google_googletest//:gtest", 603 ], 604) 605