diff options
Diffstat (limited to 'dev-cpp')
-rw-r--r-- | dev-cpp/glog/Manifest | 1 | ||||
-rw-r--r-- | dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch | 106 | ||||
-rw-r--r-- | dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch | 171 | ||||
-rw-r--r-- | dev-cpp/glog/glog-0.5.0.ebuild | 57 |
4 files changed, 335 insertions, 0 deletions
diff --git a/dev-cpp/glog/Manifest b/dev-cpp/glog/Manifest index 70b9824bb8dc..7c483d274465 100644 --- a/dev-cpp/glog/Manifest +++ b/dev-cpp/glog/Manifest @@ -1,2 +1,3 @@ DIST glog-0.3.4.tar.gz 522508 BLAKE2B 4a188d5998005b29afc52f2ea548f33e06a68da993bb74960e5aedb214ec52ef9e9fc39efb1a34f38f217b92df7db064ff01d58df36c3e4ad789becc97335ec2 SHA512 139525b546a9eccacc9bebf7cc3053ba52229e9488485ad45344c3d3134ca819d3b571250c0e3a6d84097009c8be89b0f4fa16ef5ec838ffcc237ae11c3a034c DIST glog-0.4.0.tar.gz 200955 BLAKE2B 083da6117af3e85697724942bfcb5a7831d447666945b06b149d8d324231b10923887bd8c507e8027136d12bffd30a657cb225df8c449f234381e3876f132953 SHA512 b585f1819ade2075f6b61dc5aaca5c3f9d25601dba2bd08b6c49b96ac5f79db23c6b7f2042df003f7130497dd7241fcaa8b107d1f97385cb66ce52d3c554b176 +DIST glog-0.5.0.tar.gz 183346 BLAKE2B 9109a9a4bd3c74ba5d4c1d9ed44ffe0e16d5d3b9b12bf9dd5d31c6e728292ea50f39b4e1b96d55fbb35653a448af4dc8a978e266a2b0f34261c5108099e90845 SHA512 445e4338f3d81cd0b065f2da9c6ce343c243263ca144cea424ef97531a4e9e09c06ffd6942ac01c5213a8003c75cfbbede3c4028d12f0134f23ff29314769c1a diff --git a/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch b/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch new file mode 100644 index 000000000000..a19ebdcf0fac --- /dev/null +++ b/dev-cpp/glog/files/glog-0.5.0-IsGoogleLoggingInitialized_public.patch @@ -0,0 +1,106 @@ +https://github.com/google/glog/issues/125 +https://github.com/google/glog/pull/651 +https://github.com/google/glog/commit/81e0d616edeb73cbd06d6c40bc4f90593ac0c5d1 + +--- /src/glog/logging.h.in ++++ /src/glog/logging.h.in +@@ -594,6 +594,9 @@ + void* prefix_callback_data = NULL); + #endif + ++// Check if google's logging library has been initialized. ++GOOGLE_GLOG_DLL_DECL bool IsGoogleLoggingInitialized(); ++ + // Shutdown google's logging library. + GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging(); + +--- /src/logging_custom_prefix_unittest.cc ++++ /src/logging_custom_prefix_unittest.cc +@@ -221,11 +221,15 @@ + LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors" + const string early_stderr = GetCapturedTestStderr(); + ++ EXPECT_FALSE(IsGoogleLoggingInitialized()); ++ + // Setting a custom prefix generator (it will use the default format so that + // the golden outputs can be reused): + string prefix_attacher_data = "good data"; + InitGoogleLogging(argv[0], &PrefixAttacher, static_cast<void*>(&prefix_attacher_data)); + ++ EXPECT_TRUE(IsGoogleLoggingInitialized()); ++ + RunSpecifiedBenchmarks(); + + FLAGS_logtostderr = true; +@@ -992,8 +996,10 @@ + base::SetLogger(GLOG_INFO, + new RecordDeletionLogger(&custom_logger_deleted, + base::GetLogger(GLOG_INFO))); ++ EXPECT_TRUE(IsGoogleLoggingInitialized()); + ShutdownGoogleLogging(); + EXPECT_TRUE(custom_logger_deleted); ++ EXPECT_FALSE(IsGoogleLoggingInitialized()); + } + + _START_GOOGLE_NAMESPACE_ +--- /src/logging_unittest.cc ++++ /src/logging_unittest.cc +@@ -197,8 +197,12 @@ + LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors" + const string early_stderr = GetCapturedTestStderr(); + ++ EXPECT_FALSE(IsGoogleLoggingInitialized()); ++ + InitGoogleLogging(argv[0]); + ++ EXPECT_TRUE(IsGoogleLoggingInitialized()); ++ + RunSpecifiedBenchmarks(); + + FLAGS_logtostderr = true; +@@ -965,8 +969,10 @@ + base::SetLogger(GLOG_INFO, + new RecordDeletionLogger(&custom_logger_deleted, + base::GetLogger(GLOG_INFO))); ++ EXPECT_TRUE(IsGoogleLoggingInitialized()); + ShutdownGoogleLogging(); + EXPECT_TRUE(custom_logger_deleted); ++ EXPECT_FALSE(IsGoogleLoggingInitialized()); + } + + _START_GOOGLE_NAMESPACE_ +--- /src/utilities.cc ++++ /src/utilities.cc +@@ -62,6 +62,10 @@ + + static const char* g_program_invocation_short_name = NULL; + ++bool IsGoogleLoggingInitialized() { ++ return g_program_invocation_short_name != NULL; ++} ++ + _END_GOOGLE_NAMESPACE_ + + // The following APIs are all internal. +@@ -176,10 +180,6 @@ + } + } + +-bool IsGoogleLoggingInitialized() { +- return g_program_invocation_short_name != NULL; +-} +- + #ifdef OS_WINDOWS + struct timeval { + long tv_sec, tv_usec; +--- /src/utilities.h ++++ /src/utilities.h +@@ -163,8 +163,6 @@ + + const char* ProgramInvocationShortName(); + +-bool IsGoogleLoggingInitialized(); +- + int64 CycleClock_Now(); + + int64 UsecToCycles(int64 usec); diff --git a/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch b/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch new file mode 100644 index 000000000000..f9b90c1521aa --- /dev/null +++ b/dev-cpp/glog/files/glog-0.5.0-vmodule_levels_changeability.patch @@ -0,0 +1,171 @@ +https://github.com/google/glog/issues/649 +https://github.com/google/glog/pull/650 +https://github.com/google/glog/commit/86fea1ab254c463cbb72e5ce8bcc6855bc4e1e9c + +--- /src/glog/vlog_is_on.h.in ++++ /src/glog/vlog_is_on.h.in +@@ -81,10 +81,10 @@ + // parsing of --vmodule flag and/or SetVLOGLevel calls. + #define VLOG_IS_ON(verboselevel) \ + __extension__ \ +- ({ static @ac_google_namespace@::int32* vlocal__ = NULL; \ ++ ({ static @ac_google_namespace@::SiteFlag vlocal__{NULL, NULL, 0, NULL}; \ + @ac_google_namespace@::int32 verbose_level__ = (verboselevel); \ +- (vlocal__ == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \ +- __FILE__, verbose_level__) : *vlocal__ >= verbose_level__); \ ++ (vlocal__.level == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \ ++ __FILE__, verbose_level__) : *vlocal__.level >= verbose_level__); \ + }) + #else + // GNU extensions not available, so we do not support --vmodule. +@@ -105,6 +105,13 @@ + + // Various declarations needed for VLOG_IS_ON above: ========================= + ++struct SiteFlag { ++ @ac_google_namespace@::int32* level; ++ const char* base_name; ++ size_t base_len; ++ SiteFlag* next; ++}; ++ + // Helper routine which determines the logging info for a particalur VLOG site. + // site_flag is the address of the site-local pointer to the controlling + // verbosity level +@@ -114,7 +121,7 @@ + // We will return the return value for VLOG_IS_ON + // and if possible set *site_flag appropriately. + extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__( +- @ac_google_namespace@::int32** site_flag, ++ @ac_google_namespace@::SiteFlag* site_flag, + @ac_google_namespace@::int32* site_default, + const char* fname, + @ac_google_namespace@::int32 verbose_level); +--- /src/logging_unittest.cc ++++ /src/logging_unittest.cc +@@ -98,6 +98,7 @@ + static void TestRawLogging(); + static void LogWithLevels(int v, int severity, bool err, bool alsoerr); + static void TestLoggingLevels(); ++static void TestVLogModule(); + static void TestLogString(); + static void TestLogSink(); + static void TestLogToString(); +@@ -223,6 +224,7 @@ + TestLogging(true); + TestRawLogging(); + TestLoggingLevels(); ++ TestVLogModule(); + TestLogString(); + TestLogSink(); + TestLogToString(); +@@ -453,6 +455,24 @@ + LogWithLevels(1, GLOG_FATAL, false, true); + } + ++int TestVlogHelper() { ++ if (VLOG_IS_ON(1)) { ++ return 1; ++ } ++ return 0; ++} ++ ++void TestVLogModule() { ++ int c = TestVlogHelper(); ++ EXPECT_EQ(0, c); ++ ++#if defined(__GNUC__) ++ EXPECT_EQ(0, SetVLOGLevel("logging_unittest", 1)); ++ c = TestVlogHelper(); ++ EXPECT_EQ(1, c); ++#endif ++} ++ + TEST(DeathRawCHECK, logging) { + ASSERT_DEATH(RAW_CHECK(false, "failure 1"), + "RAW: Check false failed: failure 1"); +--- /src/vlog_is_on.cc ++++ /src/vlog_is_on.cc +@@ -125,6 +125,8 @@ + // Pointer to head of the VModuleInfo list. + // It's a map from module pattern to logging level for those module(s). + static VModuleInfo* vmodule_list = 0; ++static SiteFlag* cached_site_list = 0; ++ + // Boolean initialization flag. + static bool inited_vmodule = false; + +@@ -190,6 +192,23 @@ + info->vlog_level = log_level; + info->next = vmodule_list; + vmodule_list = info; ++ ++ SiteFlag** item_ptr = &cached_site_list; ++ SiteFlag* item = cached_site_list; ++ ++ // We traverse the list fully because the pattern can match several items ++ // from the list. ++ while (item) { ++ if (SafeFNMatch_(module_pattern, pattern_len, item->base_name, ++ item->base_len)) { ++ // Redirect the cached value to its module override. ++ item->level = &info->vlog_level; ++ *item_ptr = item->next; // Remove the item from the list. ++ } else { ++ item_ptr = &item->next; ++ } ++ item = *item_ptr; ++ } + } + } + RAW_VLOG(1, "Set VLOG level for \"%s\" to %d", module_pattern, log_level); +@@ -198,7 +217,7 @@ + + // NOTE: Individual VLOG statements cache the integer log level pointers. + // NOTE: This function must not allocate memory or require any locks. +-bool InitVLOG3__(int32** site_flag, int32* site_default, ++bool InitVLOG3__(SiteFlag* site_flag, int32* level_default, + const char* fname, int32 verbose_level) { + MutexLock l(&vmodule_lock); + bool read_vmodule_flag = inited_vmodule; +@@ -211,10 +230,17 @@ + int old_errno = errno; + + // site_default normally points to FLAGS_v +- int32* site_flag_value = site_default; ++ int32* site_flag_value = level_default; + + // Get basename for file + const char* base = strrchr(fname, '/'); ++ ++#ifdef _WIN32 ++ if (!base) { ++ base = strrchr(fname, '\\'); ++ } ++#endif ++ + base = base ? (base+1) : fname; + const char* base_end = strchr(base, '.'); + size_t base_length = base_end ? size_t(base_end - base) : strlen(base); +@@ -244,7 +270,20 @@ + ANNOTATE_BENIGN_RACE(site_flag, + "*site_flag may be written by several threads," + " but the value will be the same"); +- if (read_vmodule_flag) *site_flag = site_flag_value; ++ if (read_vmodule_flag) { ++ site_flag->level = site_flag_value; ++ // If VLOG flag has been cached to the default site pointer, ++ // we want to add to the cached list in order to invalidate in case ++ // SetVModule is called afterwards with new modules. ++ // The performance penalty here is neglible, because InitVLOG3__ is called ++ // once per site. ++ if (site_flag_value == level_default && !site_flag->base_name) { ++ site_flag->base_name = base; ++ site_flag->base_len = base_length; ++ site_flag->next = cached_site_list; ++ cached_site_list = site_flag; ++ } ++ } + + // restore the errno in case something recoverable went wrong during + // the initialization of the VLOG mechanism (see above note "protect the..") diff --git a/dev-cpp/glog/glog-0.5.0.ebuild b/dev-cpp/glog/glog-0.5.0.ebuild new file mode 100644 index 000000000000..4df075626adc --- /dev/null +++ b/dev-cpp/glog/glog-0.5.0.ebuild @@ -0,0 +1,57 @@ +# Copyright 2011-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI="7" +CMAKE_ECLASS="cmake" + +inherit cmake-multilib + +if [[ "${PV}" == "9999" ]]; then + inherit git-r3 + + EGIT_REPO_URI="https://github.com/google/glog" +fi + +DESCRIPTION="Google Logging library" +HOMEPAGE="https://github.com/google/glog" +if [[ "${PV}" == "9999" ]]; then + SRC_URI="" +else + SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" +fi + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc64 ~s390 ~x86 ~amd64-linux ~x86-linux" +IUSE="gflags +libunwind llvm-libunwind test" +RESTRICT="!test? ( test )" + +RDEPEND="gflags? ( dev-cpp/gflags:0=[${MULTILIB_USEDEP}] ) + libunwind? ( + llvm-libunwind? ( sys-libs/llvm-libunwind:0=[${MULTILIB_USEDEP}] ) + !llvm-libunwind? ( sys-libs/libunwind:0=[${MULTILIB_USEDEP}] ) + )" +DEPEND="${RDEPEND} + test? ( >=dev-cpp/gtest-1.8.0[${MULTILIB_USEDEP}] )" + +PATCHES=( + "${FILESDIR}/${P}-IsGoogleLoggingInitialized_public.patch" + "${FILESDIR}/${P}-vmodule_levels_changeability.patch" +) + +src_configure() { + local mycmakeargs=( + -DBUILD_TESTING=$(usex test ON OFF) + -DWITH_CUSTOM_PREFIX=ON + -DWITH_GFLAGS=$(usex gflags ON OFF) + -DWITH_GTEST=$(usex test ON OFF) + -DWITH_UNWIND=$(usex libunwind ON OFF) + ) + if use libunwind; then + mycmakeargs+=( + -DUnwind_PLATFORM_LIBRARY="${ESYSROOT}/usr/$(get_libdir)/libunwind.so" + ) + fi + + cmake-multilib_src_configure +} |