diff options
Diffstat (limited to 'absl/flags')
-rw-r--r-- | absl/flags/BUILD.bazel | 14 | ||||
-rw-r--r-- | absl/flags/CMakeLists.txt | 12 | ||||
-rw-r--r-- | absl/flags/config.h | 34 | ||||
-rw-r--r-- | absl/flags/config_test.cc | 61 | ||||
-rw-r--r-- | absl/flags/internal/registry.cc | 18 |
5 files changed, 103 insertions, 36 deletions
diff --git a/absl/flags/BUILD.bazel b/absl/flags/BUILD.bazel index 2d868b0ab8bb..bb1a7aacde64 100644 --- a/absl/flags/BUILD.bazel +++ b/absl/flags/BUILD.bazel @@ -220,6 +220,20 @@ cc_test( ) cc_test( + name = "config_test", + size = "small", + srcs = [ + "config_test.cc", + ], + copts = ABSL_TEST_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + deps = [ + ":config", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( name = "flag_test", size = "small", srcs = [ diff --git a/absl/flags/CMakeLists.txt b/absl/flags/CMakeLists.txt index 284d6279b19a..9e0b441b350c 100644 --- a/absl/flags/CMakeLists.txt +++ b/absl/flags/CMakeLists.txt @@ -203,6 +203,18 @@ absl_cc_test( absl_cc_test( NAME + flags_config_test + SRCS + "config_test.cc" + COPTS + ${ABSL_TEST_COPTS} + DEPS + absl::flags_config + gtest_main +) + +absl_cc_test( + NAME flags_flag_test SRCS "flag_test.cc" diff --git a/absl/flags/config.h b/absl/flags/config.h index a734af4688de..a9fd97ad0f37 100644 --- a/absl/flags/config.h +++ b/absl/flags/config.h @@ -17,38 +17,32 @@ #define ABSL_FLAGS_CONFIG_H_ // Determine if we should strip string literals from the Flag objects. +// By default we strip string literals on mobile platforms. #if !defined(ABSL_FLAGS_STRIP_NAMES) -// Non-mobile linux platforms don't strip string literals. -#if (defined(__linux__) || defined(__Fuchsia__)) && !defined(__ANDROID__) -#define ABSL_FLAGS_STRIP_NAMES 0 +#if defined(__ANDROID__) +#define ABSL_FLAGS_STRIP_NAMES 1 -// So do Macs (not iOS or embedded Apple platforms). #elif defined(__APPLE__) #include <TargetConditionals.h> -#if !TARGET_OS_IPHONE && !TARGET_OS_EMBEDDED -#define ABSL_FLAGS_STRIP_NAMES 0 +#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE +#define ABSL_FLAGS_STRIP_NAMES 1 +#elif defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED +#define ABSL_FLAGS_STRIP_NAMES 1 +#endif // TARGET_OS_* #endif -// And Windows. -#elif defined(_WIN32) -#define ABSL_FLAGS_STRIP_NAMES 0 +#endif // !defined(ABSL_FLAGS_STRIP_NAMES) -// And Myriad. -#elif defined(__myriad2__) +#if !defined(ABSL_FLAGS_STRIP_NAMES) +// If ABSL_FLAGS_STRIP_NAMES wasn't set on the command line or above, +// the default is not to strip. #define ABSL_FLAGS_STRIP_NAMES 0 - #endif -#endif // !defined(ABSL_FLAGS_STRIP_NAMES) -#if ABSL_FLAGS_STRIP_NAMES #if !defined(ABSL_FLAGS_STRIP_HELP) -#define ABSL_FLAGS_STRIP_HELP 1 -#endif -#else -#if !defined(ABSL_FLAGS_STRIP_HELP) -#define ABSL_FLAGS_STRIP_HELP 0 -#endif +// By default, if we strip names, we also strip help. +#define ABSL_FLAGS_STRIP_HELP ABSL_FLAGS_STRIP_NAMES #endif #endif // ABSL_FLAGS_CONFIG_H_ diff --git a/absl/flags/config_test.cc b/absl/flags/config_test.cc new file mode 100644 index 000000000000..638998667e70 --- /dev/null +++ b/absl/flags/config_test.cc @@ -0,0 +1,61 @@ +// Copyright 2019 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/flags/config.h" + +#ifdef __APPLE__ +#include <TargetConditionals.h> +#endif + +#include "gtest/gtest.h" + +#ifndef ABSL_FLAGS_STRIP_NAMES +#error ABSL_FLAGS_STRIP_NAMES is not defined +#endif + +#ifndef ABSL_FLAGS_STRIP_HELP +#error ABSL_FLAGS_STRIP_HELP is not defined +#endif + +namespace { + +// Test that ABSL_FLAGS_STRIP_NAMES and ABSL_FLAGS_STRIP_HELP are configured how +// we expect them to be configured by default. If you override this +// configuration, this test will fail, but the code should still be safe to use. +TEST(FlagsConfigTest, Test) { +#if defined(__ANDROID__) + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 1); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 1); +#elif defined(__myriad2__) + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 0); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 0); +#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 1); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 1); +#elif defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 1); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 1); +#elif defined(__APPLE__) + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 0); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 0); +#elif defined(_WIN32) + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 0); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 0); +#elif defined(__linux__) + EXPECT_EQ(ABSL_FLAGS_STRIP_NAMES, 0); + EXPECT_EQ(ABSL_FLAGS_STRIP_HELP, 0); +#endif +} + +} // namespace diff --git a/absl/flags/internal/registry.cc b/absl/flags/internal/registry.cc index 435c5b0be330..e52cbb683b9e 100644 --- a/absl/flags/internal/registry.cc +++ b/absl/flags/internal/registry.cc @@ -15,7 +15,6 @@ #include "absl/flags/internal/registry.h" -#include "absl/base/call_once.h" #include "absl/base/dynamic_annotations.h" #include "absl/base/internal/raw_logging.h" #include "absl/flags/config.h" @@ -151,12 +150,6 @@ class FlagRegistry { FlagPtrMap flag_ptr_map_; - static FlagRegistry* global_registry_; // a singleton registry - - static absl::once_flag global_registry_once_; - - static void InitGlobalRegistry(); - absl::Mutex lock_; // Disallow @@ -164,16 +157,9 @@ class FlagRegistry { FlagRegistry& operator=(const FlagRegistry&); }; -// Get the singleton FlagRegistry object -FlagRegistry* FlagRegistry::global_registry_ = nullptr; -absl::once_flag FlagRegistry::global_registry_once_; - -void FlagRegistry::InitGlobalRegistry() { global_registry_ = new FlagRegistry; } - FlagRegistry* FlagRegistry::GlobalRegistry() { - absl::call_once(global_registry_once_, &InitGlobalRegistry); - - return global_registry_; + static FlagRegistry* global_registry = new FlagRegistry; + return global_registry; } namespace { |