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