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