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/algorithm:container", 313 "//absl/base:config", 314 "//absl/base:core_headers", 315 "//absl/strings", 316 "//absl/synchronization", 317 ], 318) 319 320############################################################################ 321# Unit tests in alphabetical order. 322 323cc_test( 324 name = "commandlineflag_test", 325 size = "small", 326 srcs = [ 327 "commandlineflag_test.cc", 328 ], 329 copts = ABSL_TEST_COPTS, 330 linkopts = ABSL_DEFAULT_LINKOPTS, 331 tags = [ 332 "no_test:os:android", 333 "no_test:os:ios", 334 "no_test_android", 335 "no_test_ios", 336 "no_test_wasm", 337 ], 338 deps = [ 339 ":commandlineflag", 340 ":commandlineflag_internal", 341 ":config", 342 ":flag", 343 ":private_handle_accessor", 344 ":reflection", 345 "//absl/memory", 346 "//absl/strings", 347 "@com_google_googletest//:gtest_main", 348 ], 349) 350 351cc_test( 352 name = "config_test", 353 size = "small", 354 srcs = [ 355 "config_test.cc", 356 ], 357 copts = ABSL_TEST_COPTS, 358 linkopts = ABSL_DEFAULT_LINKOPTS, 359 deps = [ 360 ":config", 361 "@com_google_googletest//:gtest_main", 362 ], 363) 364 365cc_test( 366 name = "flag_test", 367 size = "small", 368 srcs = [ 369 "flag_test.cc", 370 "flag_test_defs.cc", 371 ], 372 copts = ABSL_TEST_COPTS, 373 linkopts = ABSL_DEFAULT_LINKOPTS, 374 tags = [ 375 "no_test:os:android", 376 "no_test:os:ios", 377 "no_test_android", 378 "no_test_ios", 379 "no_test_wasm", 380 ], 381 deps = [ 382 ":config", 383 ":flag", 384 ":flag_internal", 385 ":marshalling", 386 ":reflection", 387 "//absl/base:core_headers", 388 "//absl/base:malloc_internal", 389 "//absl/strings", 390 "//absl/time", 391 "@com_google_googletest//:gtest_main", 392 ], 393) 394 395cc_binary( 396 name = "flag_benchmark", 397 testonly = 1, 398 srcs = [ 399 "flag_benchmark.cc", 400 ], 401 copts = ABSL_TEST_COPTS, 402 linkopts = select({ 403 "//conditions:default": [], 404 }) + ABSL_DEFAULT_LINKOPTS, 405 tags = ["benchmark"], 406 visibility = ["//visibility:private"], 407 deps = [ 408 "flag_benchmark.lds", 409 ":flag", 410 ":marshalling", 411 ":parse", 412 ":reflection", 413 "//absl/strings", 414 "//absl/time", 415 "//absl/types:optional", 416 "@com_github_google_benchmark//:benchmark_main", 417 ], 418) 419 420cc_test( 421 name = "marshalling_test", 422 size = "small", 423 srcs = [ 424 "marshalling_test.cc", 425 ], 426 copts = ABSL_TEST_COPTS, 427 linkopts = ABSL_DEFAULT_LINKOPTS, 428 deps = [ 429 ":marshalling", 430 "@com_google_googletest//:gtest_main", 431 ], 432) 433 434cc_test( 435 name = "parse_test", 436 size = "small", 437 srcs = [ 438 "parse_test.cc", 439 ], 440 copts = ABSL_TEST_COPTS, 441 linkopts = ABSL_DEFAULT_LINKOPTS, 442 tags = [ 443 "no_test:os:android", 444 "no_test:os:ios", 445 "no_test_android", 446 "no_test_ios", 447 "no_test_wasm", 448 ], 449 deps = [ 450 ":flag", 451 ":parse", 452 ":reflection", 453 ":usage_internal", 454 "//absl/base:raw_logging_internal", 455 "//absl/base:scoped_set_env", 456 "//absl/strings", 457 "//absl/types:span", 458 "@com_google_googletest//:gtest_main", 459 ], 460) 461 462cc_test( 463 name = "path_util_test", 464 size = "small", 465 srcs = [ 466 "internal/path_util_test.cc", 467 ], 468 copts = ABSL_TEST_COPTS, 469 linkopts = ABSL_DEFAULT_LINKOPTS, 470 deps = [ 471 ":path_util", 472 "@com_google_googletest//:gtest_main", 473 ], 474) 475 476cc_test( 477 name = "program_name_test", 478 size = "small", 479 srcs = [ 480 "internal/program_name_test.cc", 481 ], 482 copts = ABSL_TEST_COPTS, 483 linkopts = ABSL_DEFAULT_LINKOPTS, 484 tags = ["no_test_wasm"], 485 deps = [ 486 ":program_name", 487 "//absl/strings", 488 "@com_google_googletest//:gtest_main", 489 ], 490) 491 492cc_test( 493 name = "reflection_test", 494 size = "small", 495 srcs = [ 496 "reflection_test.cc", 497 ], 498 copts = ABSL_TEST_COPTS, 499 linkopts = ABSL_DEFAULT_LINKOPTS, 500 tags = [ 501 "no_test:os:android", 502 "no_test:os:ios", 503 "no_test_android", 504 "no_test_ios", 505 "no_test_wasm", 506 ], 507 deps = [ 508 ":commandlineflag_internal", 509 ":flag", 510 ":marshalling", 511 ":reflection", 512 ":usage_internal", 513 "//absl/memory", 514 "//absl/strings", 515 "@com_google_googletest//:gtest_main", 516 ], 517) 518 519cc_test( 520 name = "sequence_lock_test", 521 size = "small", 522 timeout = "moderate", 523 srcs = [ 524 "internal/sequence_lock_test.cc", 525 ], 526 copts = ABSL_TEST_COPTS, 527 linkopts = ABSL_DEFAULT_LINKOPTS, 528 shard_count = 31, 529 tags = ["no_test_wasm"], 530 deps = [ 531 ":flag_internal", 532 "//absl/base", 533 "//absl/container:fixed_array", 534 "//absl/time", 535 "@com_google_googletest//:gtest_main", 536 ], 537) 538 539cc_test( 540 name = "usage_config_test", 541 size = "small", 542 srcs = [ 543 "usage_config_test.cc", 544 ], 545 copts = ABSL_TEST_COPTS, 546 linkopts = ABSL_DEFAULT_LINKOPTS, 547 deps = [ 548 ":config", 549 ":path_util", 550 ":program_name", 551 "//absl/strings", 552 "@com_google_googletest//:gtest_main", 553 ], 554) 555 556cc_test( 557 name = "usage_test", 558 size = "small", 559 srcs = [ 560 "internal/usage_test.cc", 561 ], 562 copts = ABSL_TEST_COPTS, 563 linkopts = ABSL_DEFAULT_LINKOPTS, 564 tags = [ 565 "no_test:os:android", 566 "no_test:os:ios", 567 "no_test_android", 568 "no_test_ios", 569 "no_test_wasm", 570 ], 571 deps = [ 572 ":config", 573 ":flag", 574 ":parse", 575 ":path_util", 576 ":program_name", 577 ":reflection", 578 ":usage", 579 ":usage_internal", 580 "//absl/strings", 581 "@com_google_googletest//:gtest", 582 ], 583) 584