commit:     6d87191d729e19343fdf66df33b2786a9f0cb68a
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Fri Jun  4 00:00:00 2021 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Fri Jun  4 19:48:06 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6d87191d

dev-cpp/glog: Version bump (0.5.0).

Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 dev-cpp/glog/Manifest                              |   1 +
 ...g-0.5.0-IsGoogleLoggingInitialized_public.patch | 106 +++++++++++++
 .../glog-0.5.0-vmodule_levels_changeability.patch  | 171 +++++++++++++++++++++
 dev-cpp/glog/glog-0.5.0.ebuild                     |  57 +++++++
 4 files changed, 335 insertions(+)

diff --git a/dev-cpp/glog/Manifest b/dev-cpp/glog/Manifest
index 70b9824bb8d..7c483d27446 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 00000000000..a19ebdcf0fa
--- /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 00000000000..f9b90c1521a
--- /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 00000000000..4df075626ad
--- /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
+}

Reply via email to