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 hdrs = [ 233 "declare.h", 234 "flag.h", 235 ], 236 copts = ABSL_DEFAULT_COPTS, 237 linkopts = ABSL_DEFAULT_LINKOPTS, 238 deps = [ 239 ":commandlineflag", 240 ":config", 241 ":flag_internal", 242 ":reflection", 243 "//absl/base:config", 244 "//absl/base:core_headers", 245 "//absl/strings", 246 ], 247) 248 249cc_library( 250 name = "usage_internal", 251 srcs = [ 252 "internal/usage.cc", 253 ], 254 hdrs = [ 255 "internal/usage.h", 256 ], 257 copts = ABSL_DEFAULT_COPTS, 258 linkopts = ABSL_DEFAULT_LINKOPTS, 259 visibility = [ 260 "//absl/flags:__pkg__", 261 ], 262 deps = [ 263 ":commandlineflag", 264 ":config", 265 ":flag", 266 ":flag_internal", 267 ":path_util", 268 ":private_handle_accessor", 269 ":program_name", 270 ":reflection", 271 "//absl/base:config", 272 "//absl/base:core_headers", 273 "//absl/strings", 274 "//absl/synchronization", 275 ], 276) 277 278cc_library( 279 name = "usage", 280 srcs = [ 281 "usage.cc", 282 ], 283 hdrs = [ 284 "usage.h", 285 ], 286 copts = ABSL_DEFAULT_COPTS, 287 linkopts = ABSL_DEFAULT_LINKOPTS, 288 deps = [ 289 ":usage_internal", 290 "//absl/base:config", 291 "//absl/base:core_headers", 292 "//absl/base:raw_logging_internal", 293 "//absl/strings", 294 "//absl/synchronization", 295 ], 296) 297 298cc_library( 299 name = "parse", 300 srcs = ["parse.cc"], 301 hdrs = [ 302 "internal/parse.h", 303 "parse.h", 304 ], 305 copts = ABSL_DEFAULT_COPTS, 306 linkopts = ABSL_DEFAULT_LINKOPTS, 307 deps = [ 308 ":commandlineflag", 309 ":commandlineflag_internal", 310 ":config", 311 ":flag", 312 ":flag_internal", 313 ":private_handle_accessor", 314 ":program_name", 315 ":reflection", 316 ":usage", 317 ":usage_internal", 318 "//absl/algorithm:container", 319 "//absl/base:config", 320 "//absl/base:core_headers", 321 "//absl/strings", 322 "//absl/synchronization", 323 ], 324) 325 326############################################################################ 327# Unit tests in alphabetical order. 328 329cc_test( 330 name = "commandlineflag_test", 331 size = "small", 332 srcs = [ 333 "commandlineflag_test.cc", 334 ], 335 copts = ABSL_TEST_COPTS, 336 linkopts = ABSL_DEFAULT_LINKOPTS, 337 tags = [ 338 "no_test:os:android", 339 "no_test:os:ios", 340 "no_test_android", 341 "no_test_ios", 342 "no_test_wasm", 343 ], 344 deps = [ 345 ":commandlineflag", 346 ":config", 347 ":flag", 348 ":private_handle_accessor", 349 ":reflection", 350 "//absl/memory", 351 "//absl/strings", 352 "@com_google_googletest//:gtest", 353 "@com_google_googletest//:gtest_main", 354 ], 355) 356 357cc_test( 358 name = "config_test", 359 size = "small", 360 srcs = [ 361 "config_test.cc", 362 ], 363 copts = ABSL_TEST_COPTS, 364 linkopts = ABSL_DEFAULT_LINKOPTS, 365 deps = [ 366 ":config", 367 "@com_google_googletest//:gtest", 368 "@com_google_googletest//:gtest_main", 369 ], 370) 371 372cc_test( 373 name = "flag_test", 374 size = "small", 375 srcs = [ 376 "flag_test.cc", 377 "flag_test_defs.cc", 378 ], 379 copts = ABSL_TEST_COPTS, 380 linkopts = ABSL_DEFAULT_LINKOPTS, 381 tags = [ 382 "no_test:os:android", 383 "no_test:os:ios", 384 "no_test_android", 385 "no_test_ios", 386 "no_test_wasm", 387 ], 388 deps = [ 389 ":config", 390 ":flag", 391 ":flag_internal", 392 ":marshalling", 393 ":parse", 394 ":reflection", 395 "//absl/base:core_headers", 396 "//absl/base:malloc_internal", 397 "//absl/base:raw_logging_internal", 398 "//absl/numeric:int128", 399 "//absl/strings", 400 "//absl/time", 401 "//absl/types:optional", 402 "@com_google_googletest//:gtest", 403 "@com_google_googletest//:gtest_main", 404 ], 405) 406 407cc_binary( 408 name = "flag_benchmark", 409 testonly = True, 410 srcs = [ 411 "flag_benchmark.cc", 412 ], 413 copts = ABSL_TEST_COPTS, 414 linkopts = select({ 415 "//conditions:default": [], 416 }) + ABSL_DEFAULT_LINKOPTS, 417 tags = ["benchmark"], 418 visibility = ["//visibility:private"], 419 deps = [ 420 "flag_benchmark.lds", 421 ":flag", 422 ":marshalling", 423 ":parse", 424 ":reflection", 425 "//absl/strings", 426 "//absl/time", 427 "//absl/types:optional", 428 "@com_github_google_benchmark//:benchmark_main", 429 ], 430) 431 432cc_test( 433 name = "marshalling_test", 434 size = "small", 435 srcs = [ 436 "marshalling_test.cc", 437 ], 438 copts = ABSL_TEST_COPTS, 439 linkopts = ABSL_DEFAULT_LINKOPTS, 440 deps = [ 441 ":marshalling", 442 "@com_google_googletest//:gtest", 443 "@com_google_googletest//:gtest_main", 444 ], 445) 446 447cc_test( 448 name = "parse_test", 449 size = "small", 450 timeout = "moderate", 451 srcs = [ 452 "parse_test.cc", 453 ], 454 copts = ABSL_TEST_COPTS, 455 linkopts = ABSL_DEFAULT_LINKOPTS, 456 tags = [ 457 "no_test:os:android", 458 "no_test:os:ios", 459 "no_test_android", 460 "no_test_ios", 461 "no_test_wasm", 462 ], 463 deps = [ 464 ":config", 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 ":config", 527 ":flag", 528 ":reflection", 529 "//absl/memory", 530 "//absl/strings", 531 "@com_google_googletest//:gtest", 532 "@com_google_googletest//:gtest_main", 533 ], 534) 535 536cc_test( 537 name = "sequence_lock_test", 538 size = "small", 539 timeout = "moderate", 540 srcs = [ 541 "internal/sequence_lock_test.cc", 542 ], 543 copts = ABSL_TEST_COPTS, 544 linkopts = ABSL_DEFAULT_LINKOPTS, 545 shard_count = 31, 546 tags = ["no_test_wasm"], 547 deps = [ 548 ":flag_internal", 549 "//absl/base", 550 "//absl/container:fixed_array", 551 "//absl/time", 552 "@com_google_googletest//:gtest", 553 "@com_google_googletest//:gtest_main", 554 ], 555) 556 557cc_test( 558 name = "usage_config_test", 559 size = "small", 560 srcs = [ 561 "usage_config_test.cc", 562 ], 563 copts = ABSL_TEST_COPTS, 564 linkopts = ABSL_DEFAULT_LINKOPTS, 565 deps = [ 566 ":config", 567 ":path_util", 568 ":program_name", 569 "//absl/strings", 570 "@com_google_googletest//:gtest", 571 "@com_google_googletest//:gtest_main", 572 ], 573) 574 575cc_test( 576 name = "usage_test", 577 size = "small", 578 srcs = [ 579 "internal/usage_test.cc", 580 ], 581 copts = ABSL_TEST_COPTS, 582 linkopts = ABSL_DEFAULT_LINKOPTS, 583 tags = [ 584 "no_test:os:android", 585 "no_test:os:ios", 586 "no_test_android", 587 "no_test_ios", 588 "no_test_wasm", 589 ], 590 deps = [ 591 ":config", 592 ":flag", 593 ":parse", 594 ":path_util", 595 ":program_name", 596 ":reflection", 597 ":usage", 598 ":usage_internal", 599 "//absl/strings", 600 "@com_google_googletest//:gtest", 601 ], 602) 603