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("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") 18load( 19 "//absl:copts/configure_copts.bzl", 20 "ABSL_DEFAULT_COPTS", 21 "ABSL_DEFAULT_LINKOPTS", 22 "ABSL_TEST_COPTS", 23) 24 25package(default_visibility = ["//visibility:public"]) 26 27licenses(["notice"]) 28 29cc_library( 30 name = "path_util", 31 hdrs = [ 32 "internal/path_util.h", 33 ], 34 copts = ABSL_DEFAULT_COPTS, 35 linkopts = ABSL_DEFAULT_LINKOPTS, 36 visibility = [ 37 "//absl/flags:__pkg__", 38 ], 39 deps = [ 40 "//absl/base:config", 41 "//absl/strings", 42 ], 43) 44 45cc_library( 46 name = "program_name", 47 srcs = [ 48 "internal/program_name.cc", 49 ], 50 hdrs = [ 51 "internal/program_name.h", 52 ], 53 copts = ABSL_DEFAULT_COPTS, 54 linkopts = ABSL_DEFAULT_LINKOPTS, 55 visibility = [ 56 "//absl/flags:__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 ], 105) 106 107cc_library( 108 name = "commandlineflag_internal", 109 srcs = [ 110 "internal/commandlineflag.cc", 111 ], 112 hdrs = [ 113 "internal/commandlineflag.h", 114 ], 115 copts = ABSL_DEFAULT_COPTS, 116 linkopts = ABSL_DEFAULT_LINKOPTS, 117 deps = [ 118 "//absl/base:config", 119 "//absl/base:fast_type_id", 120 ], 121) 122 123cc_library( 124 name = "commandlineflag", 125 srcs = [ 126 "commandlineflag.cc", 127 ], 128 hdrs = [ 129 "commandlineflag.h", 130 ], 131 copts = ABSL_DEFAULT_COPTS, 132 linkopts = ABSL_DEFAULT_LINKOPTS, 133 deps = [ 134 ":commandlineflag_internal", 135 "//absl/base:config", 136 "//absl/base:fast_type_id", 137 "//absl/strings", 138 "//absl/types:optional", 139 ], 140) 141 142cc_library( 143 name = "private_handle_accessor", 144 srcs = [ 145 "internal/private_handle_accessor.cc", 146 ], 147 hdrs = [ 148 "internal/private_handle_accessor.h", 149 ], 150 copts = ABSL_DEFAULT_COPTS, 151 linkopts = ABSL_DEFAULT_LINKOPTS, 152 visibility = [ 153 "//absl/flags:__pkg__", 154 ], 155 deps = [ 156 ":commandlineflag", 157 ":commandlineflag_internal", 158 "//absl/base:config", 159 "//absl/strings", 160 ], 161) 162 163cc_library( 164 name = "reflection", 165 srcs = [ 166 "reflection.cc", 167 ], 168 hdrs = [ 169 "internal/registry.h", 170 "reflection.h", 171 ], 172 copts = ABSL_DEFAULT_COPTS, 173 linkopts = ABSL_DEFAULT_LINKOPTS, 174 deps = [ 175 ":commandlineflag", 176 ":commandlineflag_internal", 177 ":config", 178 ":private_handle_accessor", 179 "//absl/base:config", 180 "//absl/base:core_headers", 181 "//absl/container:flat_hash_map", 182 "//absl/strings", 183 "//absl/synchronization", 184 ], 185) 186 187cc_library( 188 name = "flag_internal", 189 srcs = [ 190 "internal/flag.cc", 191 ], 192 hdrs = [ 193 "internal/flag.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 ], 220 hdrs = [ 221 "declare.h", 222 "flag.h", 223 ], 224 copts = ABSL_DEFAULT_COPTS, 225 linkopts = ABSL_DEFAULT_LINKOPTS, 226 deps = [ 227 ":config", 228 ":flag_internal", 229 ":reflection", 230 "//absl/base", 231 "//absl/base:config", 232 "//absl/base:core_headers", 233 "//absl/strings", 234 ], 235) 236 237cc_library( 238 name = "usage_internal", 239 srcs = [ 240 "internal/usage.cc", 241 ], 242 hdrs = [ 243 "internal/usage.h", 244 ], 245 copts = ABSL_DEFAULT_COPTS, 246 linkopts = ABSL_DEFAULT_LINKOPTS, 247 visibility = [ 248 "//absl/flags:__pkg__", 249 ], 250 deps = [ 251 ":commandlineflag", 252 ":config", 253 ":flag", 254 ":flag_internal", 255 ":path_util", 256 ":private_handle_accessor", 257 ":program_name", 258 ":reflection", 259 "//absl/base:config", 260 "//absl/base:core_headers", 261 "//absl/strings", 262 ], 263) 264 265cc_library( 266 name = "usage", 267 srcs = [ 268 "usage.cc", 269 ], 270 hdrs = [ 271 "usage.h", 272 ], 273 copts = ABSL_DEFAULT_COPTS, 274 linkopts = ABSL_DEFAULT_LINKOPTS, 275 deps = [ 276 ":usage_internal", 277 "//absl/base:config", 278 "//absl/base:core_headers", 279 "//absl/strings", 280 "//absl/synchronization", 281 ], 282) 283 284cc_library( 285 name = "parse", 286 srcs = ["parse.cc"], 287 hdrs = [ 288 "internal/parse.h", 289 "parse.h", 290 ], 291 copts = ABSL_DEFAULT_COPTS, 292 linkopts = ABSL_DEFAULT_LINKOPTS, 293 deps = [ 294 ":commandlineflag", 295 ":commandlineflag_internal", 296 ":config", 297 ":flag", 298 ":flag_internal", 299 ":private_handle_accessor", 300 ":program_name", 301 ":reflection", 302 ":usage", 303 ":usage_internal", 304 "//absl/base:config", 305 "//absl/base:core_headers", 306 "//absl/strings", 307 "//absl/synchronization", 308 ], 309) 310 311############################################################################ 312# Unit tests in alphabetical order. 313 314cc_test( 315 name = "commandlineflag_test", 316 size = "small", 317 srcs = [ 318 "commandlineflag_test.cc", 319 ], 320 copts = ABSL_TEST_COPTS, 321 linkopts = ABSL_DEFAULT_LINKOPTS, 322 deps = [ 323 ":commandlineflag", 324 ":commandlineflag_internal", 325 ":config", 326 ":flag", 327 ":private_handle_accessor", 328 ":reflection", 329 "//absl/memory", 330 "//absl/strings", 331 "@com_google_googletest//:gtest_main", 332 ], 333) 334 335cc_test( 336 name = "config_test", 337 size = "small", 338 srcs = [ 339 "config_test.cc", 340 ], 341 copts = ABSL_TEST_COPTS, 342 linkopts = ABSL_DEFAULT_LINKOPTS, 343 deps = [ 344 ":config", 345 "@com_google_googletest//:gtest_main", 346 ], 347) 348 349cc_test( 350 name = "flag_test", 351 size = "small", 352 srcs = [ 353 "flag_test.cc", 354 "flag_test_defs.cc", 355 ], 356 copts = ABSL_TEST_COPTS, 357 linkopts = ABSL_DEFAULT_LINKOPTS, 358 deps = [ 359 ":config", 360 ":flag", 361 ":flag_internal", 362 ":marshalling", 363 ":reflection", 364 "//absl/base:core_headers", 365 "//absl/base:malloc_internal", 366 "//absl/strings", 367 "//absl/time", 368 "@com_google_googletest//:gtest_main", 369 ], 370) 371 372cc_binary( 373 name = "flag_benchmark", 374 testonly = 1, 375 srcs = [ 376 "flag_benchmark.cc", 377 ], 378 copts = ABSL_TEST_COPTS, 379 tags = ["benchmark"], 380 visibility = ["//visibility:private"], 381 deps = [ 382 ":flag", 383 ":marshalling", 384 ":parse", 385 ":reflection", 386 "//absl/strings", 387 "//absl/time", 388 "//absl/types:optional", 389 "@com_github_google_benchmark//:benchmark_main", 390 ], 391) 392 393cc_test( 394 name = "marshalling_test", 395 size = "small", 396 srcs = [ 397 "marshalling_test.cc", 398 ], 399 copts = ABSL_TEST_COPTS, 400 linkopts = ABSL_DEFAULT_LINKOPTS, 401 deps = [ 402 ":marshalling", 403 "@com_google_googletest//:gtest_main", 404 ], 405) 406 407cc_test( 408 name = "parse_test", 409 size = "small", 410 srcs = [ 411 "parse_test.cc", 412 ], 413 copts = ABSL_TEST_COPTS, 414 linkopts = ABSL_DEFAULT_LINKOPTS, 415 deps = [ 416 ":flag", 417 ":parse", 418 ":reflection", 419 ":usage_internal", 420 "//absl/base:raw_logging_internal", 421 "//absl/base:scoped_set_env", 422 "//absl/strings", 423 "//absl/types:span", 424 "@com_google_googletest//:gtest_main", 425 ], 426) 427 428cc_test( 429 name = "path_util_test", 430 size = "small", 431 srcs = [ 432 "internal/path_util_test.cc", 433 ], 434 copts = ABSL_TEST_COPTS, 435 linkopts = ABSL_DEFAULT_LINKOPTS, 436 deps = [ 437 ":path_util", 438 "@com_google_googletest//:gtest_main", 439 ], 440) 441 442cc_test( 443 name = "program_name_test", 444 size = "small", 445 srcs = [ 446 "internal/program_name_test.cc", 447 ], 448 copts = ABSL_TEST_COPTS, 449 linkopts = ABSL_DEFAULT_LINKOPTS, 450 deps = [ 451 ":program_name", 452 "//absl/strings", 453 "@com_google_googletest//:gtest_main", 454 ], 455) 456 457cc_test( 458 name = "reflection_test", 459 size = "small", 460 srcs = [ 461 "reflection_test.cc", 462 ], 463 copts = ABSL_TEST_COPTS, 464 linkopts = ABSL_DEFAULT_LINKOPTS, 465 deps = [ 466 ":commandlineflag_internal", 467 ":flag", 468 ":marshalling", 469 ":reflection", 470 ":usage_internal", 471 "//absl/memory", 472 "//absl/strings", 473 "@com_google_googletest//:gtest_main", 474 ], 475) 476 477cc_test( 478 name = "usage_config_test", 479 size = "small", 480 srcs = [ 481 "usage_config_test.cc", 482 ], 483 copts = ABSL_TEST_COPTS, 484 linkopts = ABSL_DEFAULT_LINKOPTS, 485 deps = [ 486 ":config", 487 ":path_util", 488 ":program_name", 489 "//absl/strings", 490 "@com_google_googletest//:gtest_main", 491 ], 492) 493 494cc_test( 495 name = "usage_test", 496 size = "small", 497 srcs = [ 498 "internal/usage_test.cc", 499 ], 500 copts = ABSL_TEST_COPTS, 501 linkopts = ABSL_DEFAULT_LINKOPTS, 502 deps = [ 503 ":config", 504 ":flag", 505 ":parse", 506 ":path_util", 507 ":program_name", 508 ":reflection", 509 ":usage", 510 ":usage_internal", 511 "//absl/strings", 512 "@com_google_googletest//:gtest", 513 ], 514) 515