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