dev-cpp/glog: Sync with gentoo

It's from gentoo commit 38b155fa1bf907617067c98eb4ba3a5d0790eb1a.
This commit is contained in:
Krzesimir Nowak 2021-11-05 21:04:58 +01:00
parent 325dd923ef
commit 8697f4a1cf
15 changed files with 510 additions and 461 deletions

View File

@ -1,3 +1,2 @@
DIST glog-0.3.3.tar.gz 509676 BLAKE2B 21d8893ff535c0e8c1de27214f535aaea99727128d80f421da096969c19504da6a296054db2931232b4fd372446f96189464e4000f44c5720152085aa9976978 SHA512 95418ff0857415a0fbc15caeb22a13f3b6736618adcc3c30e054626f1397bc58399c45f68784c70b1f5dc594ebc6ea66e386896beab5c20be72dd53b25f5a4ac
DIST glog-0.3.4.tar.gz 522508 BLAKE2B 4a188d5998005b29afc52f2ea548f33e06a68da993bb74960e5aedb214ec52ef9e9fc39efb1a34f38f217b92df7db064ff01d58df36c3e4ad789becc97335ec2 SHA512 139525b546a9eccacc9bebf7cc3053ba52229e9488485ad45344c3d3134ca819d3b571250c0e3a6d84097009c8be89b0f4fa16ef5ec838ffcc237ae11c3a034c
DIST glog-0.3.5.tar.gz 532275 BLAKE2B a455f3ff8fc7cf2861a4351a0305db9455bb79977e57c49b6269b3fa2c147cd9627bfaf4c7aaa04fe4a49158d79abeb5b985813fe8c473d6005e915335c0d693 SHA512 a54a3b8b4b7660d7558ba5168c659bc3c8323c30908a4f6a4bbc6f9cd899350f3243aabc720daebfdeb799b276b51ba1eaa1a0f83149c4e1a038d552ada1ed72
DIST glog-0.4.0.tar.gz 200955 BLAKE2B 083da6117af3e85697724942bfcb5a7831d447666945b06b149d8d324231b10923887bd8c507e8027136d12bffd30a657cb225df8c449f234381e3876f132953 SHA512 b585f1819ade2075f6b61dc5aaca5c3f9d25601dba2bd08b6c49b96ac5f79db23c6b7f2042df003f7130497dd7241fcaa8b107d1f97385cb66ce52d3c554b176
DIST glog-0.5.0.tar.gz 183346 BLAKE2B 9109a9a4bd3c74ba5d4c1d9ed44ffe0e16d5d3b9b12bf9dd5d31c6e728292ea50f39b4e1b96d55fbb35653a448af4dc8a978e266a2b0f34261c5108099e90845 SHA512 445e4338f3d81cd0b065f2da9c6ce343c243263ca144cea424ef97531a4e9e09c06ffd6942ac01c5213a8003c75cfbbede3c4028d12f0134f23ff29314769c1a

View File

@ -1,56 +0,0 @@
http://code.google.com/p/google-glog/issues/detail?id=130
make the code work with all gcc targets
--- a/src/symbolize_unittest.cc
+++ b/src/symbolize_unittest.cc
@@ -60,9 +60,7 @@ using namespace GOOGLE_NAMESPACE;
# endif // __i386__
# else
# endif // __GNUC__ >= 4
-# if defined(__i386__) || defined(__x86_64__)
-# define TEST_X86_32_AND_64 1
-# endif // defined(__i386__) || defined(__x86_64__)
+# define TEST_WITH_LABEL_ADDRESSES
#endif
// A wrapper function for Symbolize() to make the unit test simple.
@@ -289,22 +287,24 @@ TEST(Symbolize, SymbolizeWithDemanglingStackConsumption) {
extern "C" {
inline void* always_inline inline_func() {
register void *pc = NULL;
-#ifdef TEST_X86_32_AND_64
- __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
+#ifdef TEST_WITH_LABEL_ADDRESSES
+ pc = &&curr_pc;
+ curr_pc:
#endif
return pc;
}
void* ATTRIBUTE_NOINLINE non_inline_func() {
register void *pc = NULL;
-#ifdef TEST_X86_32_AND_64
- __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
+#ifdef TEST_WITH_LABEL_ADDRESSES
+ pc = &&curr_pc;
+ curr_pc:
#endif
return pc;
}
void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
-#if defined(TEST_X86_32_AND_64) && defined(HAVE_ATTRIBUTE_NOINLINE)
+#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ATTRIBUTE_NOINLINE)
void *pc = non_inline_func();
const char *symbol = TrySymbolize(pc);
CHECK(symbol != NULL);
@@ -314,7 +314,7 @@ void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() {
}
void ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() {
-#if defined(TEST_X86_32_AND_64) && defined(HAVE_ALWAYS_INLINE)
+#if defined(TEST_WITH_LABEL_ADDRESSES) && defined(HAVE_ALWAYS_INLINE)
void *pc = inline_func(); // Must be inlined.
const char *symbol = TrySymbolize(pc);
CHECK(symbol != NULL);

View File

@ -1,142 +0,0 @@
--- a/configure.ac
+++ b/configure.ac
@@ -11,7 +11,7 @@
AC_CONFIG_SRCDIR(README)
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
-AM_CONFIG_HEADER(src/config.h)
+AC_CONFIG_HEADERS([src/config.h])
AC_LANG(C++)
@@ -21,7 +21,7 @@
AC_PROG_CXX
AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc
-AC_PROG_LIBTOOL
+LT_INIT
AC_SUBST(LIBTOOL_DEPS)
# Check whether some low-level functions/files are available
@@ -128,32 +128,48 @@
fi
# Check if there is google-gflags library installed.
-SAVE_CFLAGS="$CFLAGS"
-SAVE_LIBS="$LIBS"
-AC_ARG_WITH(gflags, AS_HELP_STRING[--with-gflags=GFLAGS_DIR],
- GFLAGS_CFLAGS="-I${with_gflags}/include"
- GFLAGS_LIBS="-L${with_gflags}/lib -lgflags"
- CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
- LIBS="$LIBS $GFLAGS_LIBS"
-)
-AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
-if test x"$ac_cv_have_libgflags" = x"1"; then
- AC_DEFINE(HAVE_LIB_GFLAGS, 1, [define if you have google gflags library])
- if test x"$GFLAGS_LIBS" = x""; then
- GFLAGS_LIBS="-lgflags"
- fi
-else
- GFLAGS_CFLAGS=
- GFLAGS_LIBS=
-fi
-CFLAGS="$SAVE_CFLAGS"
-LIBS="$SAVE_LIBS"
+AC_ARG_ENABLE([gflags],
+ AS_HELP_STRING([--enable-gflags], [Enable google-gflags]))
+
+ac_cv_have_libgflags=0
+AS_IF([test "x$enable_gflags" != "xno"], [
+ SAVE_CFLAGS="$CFLAGS"
+ SAVE_LIBS="$LIBS"
+ AC_ARG_WITH([gflags], AS_HELP_STRING([--with-gflags=GFLAGS_DIR]),[
+ GFLAGS_CFLAGS="-I${with_gflags}/include"
+ GFLAGS_LIBS="-L${with_gflags}/lib -lgflags"
+ CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
+ LIBS="$LIBS $GFLAGS_LIBS"
+ ])
+
+ AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
+ CFLAGS="$SAVE_CFLAGS"
+ LIBS="$SAVE_LIBS"
+])
+
+AS_IF([test "x$ac_cv_have_libgflags" = "x1"], [
+ AC_DEFINE([HAVE_LIB_GFLAGS], [1], [define if you have google gflags library])
+ AS_IF([test "x$GFLAGS_LIBS" = "x"], [
+ GFLAGS_LIBS="-lgflags"
+ ])
+], [
+ GFLAGS_CFLAGS=
+ GFLAGS_LIBS=
+])
# TODO(hamaji): Use official m4 macros provided by testing libraries
# once the m4 macro of Google Mocking becomes ready.
# Check if there is Google Test library installed.
-AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes")
-AC_CHECK_LIB(gtest, main, have_gtest_lib="yes")
+AC_ARG_ENABLE([gtest-config],
+ AS_HELP_STRING([--enable-gtest-config], [Enable looking for gtest-config]))
+
+AS_IF([test "x$enable_gtest_config" != "xno"], [
+ AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes")
+ AC_CHECK_LIB(gtest, main, have_gtest_lib="yes")
+], [
+ have_gtest_lib="no"
+])
+
if test x"$GTEST_CONFIG" = "xyes" -a x"$have_gtest_lib" = "xyes"; then
GTEST_CFLAGS=`gtest-config --cppflags --cxxflags`
GTEST_LIBS=`gtest-config --ldflags --libs`
@@ -178,17 +194,13 @@
AM_CONDITIONAL(HAVE_GMOCK, test x"$GMOCK_CONFIG" = "xyes")
# We want to link in libunwind if it exists
-UNWIND_LIBS=
-# Unfortunately, we need to check the header file in addition to the
-# lib file to check if libunwind is available since libunwind-0.98
-# doesn't install all necessary header files.
-if test x"$ac_cv_have_libunwind_h" = x"1"; then
- AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind)
-fi
-AC_SUBST(UNWIND_LIBS)
-if test x"$UNWIND_LIBS" != x""; then
- AC_DEFINE(HAVE_LIB_UNWIND, 1, [define if you have libunwind])
-fi
+AC_ARG_ENABLE([unwind],
+ AS_HELP_STRING([--enable-unwind], [Enable libunwind]))
+
+AS_IF([test "x$enable_unwind" != "xno"], [
+ PKG_CHECK_MODULES([UNWIND], [libunwind > 0.98])
+ AC_DEFINE([HAVE_LIB_UNWIND], [1], [define if you have libunwind])
+])
# We'd like to use read/write locks in several places in the code.
# See if our pthreads support extends to that. Note: for linux, it
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,12 +40,11 @@
nodist_gloginclude_HEADERS = src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h
noinst_HEADERS = src/glog/logging.h.in src/glog/raw_logging.h.in src/glog/vlog_is_on.h.in src/glog/stl_logging.h.in
-docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
## This is for HTML and other documentation you want to install.
## Add your documentation files (in doc/) in addition to these
## top-level boilerplate files. Also add a TODO file if you have one.
-dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README.windows \
- doc/designstyle.css doc/glog.html
+dist_doc_DATA = AUTHORS ChangeLog INSTALL NEWS README
+dist_html_DATA = doc/designstyle.css doc/glog.html
## The libraries (.so's) you want to install
lib_LTLIBRARIES =
@@ -215,7 +214,7 @@
## This should always include $(TESTS), but may also include other
## binaries that you compile but don't want automatically installed.
-noinst_PROGRAMS = $(TESTS) $(TEST_BINARIES)
+check_PROGRAMS = $(TESTS) $(TEST_BINARIES)
rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec
@cd packages && ./rpm.sh ${PACKAGE} ${VERSION}

View File

@ -1,56 +0,0 @@
From b1639e3014996fbc7635870e013559c54e7e3b2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Mart=C3=ADnez=20Moreno?= <ender@debian.org>
Date: Thu, 13 Aug 2015 09:31:26 -0700
Subject: [PATCH] Fix ABI demangling for the GCC 5.x case.
When glog is compiled with gcc-5.2 in cxx11 ABI mode, it barfs about unmangled symbols. This patches it getting inspiration from binutils and demangle.cc itself, although it may be totally wrong or maybe have to use ParseAbiTag in more places. I haven't read the spec for the symbols, though.
This patch makes the demangle unit test pass correctly.
---
src/demangle.cc | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/src/demangle.cc b/src/demangle.cc
index e858181..0f0c831 100644
--- a/src/demangle.cc
+++ b/src/demangle.cc
@@ -439,6 +439,7 @@ static bool ParseExprPrimary(State *state);
static bool ParseLocalName(State *state);
static bool ParseDiscriminator(State *state);
static bool ParseSubstitution(State *state);
+static bool ParseAbiTag(State *state);
// Implementation note: the following code is a straightforward
// translation of the Itanium C++ ABI defined in BNF with a couple of
@@ -567,6 +568,8 @@ static bool ParseNestedName(State *state) {
static bool ParsePrefix(State *state) {
bool has_something = false;
while (true) {
+ if (ParseAbiTag(state))
+ continue;
MaybeAppendSeparator(state);
if (ParseTemplateParam(state) ||
ParseSubstitution(state) ||
@@ -585,6 +588,22 @@ static bool ParsePrefix(State *state) {
return true;
}
+// <abi-tag> ::= B <source-name>
+static bool ParseAbiTag(State *state) {
+ State copy = *state;
+
+ Append(state, "[", 1);
+ if (ParseOneCharToken(state, 'B') &&
+ ParseSourceName(state))
+ {
+ Append(state, "]", 1);
+ return true;
+ }
+
+ *state = copy;
+ return false;
+}
+
// <unqualified-name> ::= <operator-name>
// ::= <ctor-dtor-name>
// ::= <source-name>

View File

@ -0,0 +1,99 @@
Index: b/src/googletest.h
===================================================================
--- a/src/googletest.h
+++ b/src/googletest.h
@@ -437,6 +437,18 @@ static inline void StringReplace(string*
}
}
+static inline void IntReplace(string* str,
+ const string& oldsub,
+ int newsub) {
+ size_t pos = str->find(oldsub);
+ if (pos != string::npos) {
+ std::ostringstream ss;
+ ss << newsub;
+ const std::string x = ss.str();
+ str->replace(pos, oldsub.size(), x.c_str());
+ }
+}
+
static inline string Munge(const string& filename) {
FILE* fp = fopen(filename.c_str(), "rb");
CHECK(fp != NULL) << filename << ": couldn't open";
@@ -452,9 +464,13 @@ static inline string Munge(const string&
StringReplace(&line, "__SUCCESS__", StrError(0));
StringReplace(&line, "__ENOENT__", StrError(ENOENT));
+ IntReplace(&line, "__ENOENT_NUM__", ENOENT);
StringReplace(&line, "__EINTR__", StrError(EINTR));
+ IntReplace(&line, "__EINTR_NUM__", EINTR);
StringReplace(&line, "__ENXIO__", StrError(ENXIO));
+ IntReplace(&line, "__ENXIO_NUM__", ENXIO);
StringReplace(&line, "__ENOEXEC__", StrError(ENOEXEC));
+ IntReplace(&line, "__ENOEXEC_NUM__", ENOEXEC);
result += line + "\n";
}
fclose(fp);
Index: b/src/logging_unittest.cc
===================================================================
--- a/src/logging_unittest.cc
+++ b/src/logging_unittest.cc
@@ -238,6 +238,17 @@ int main(int argc, char **argv) {
return 0;
}
+static int errnoForIteration(int i) {
+ switch (i) {
+ case 0: return 0;
+ case 2: return ENOENT;
+ case 4: return EINTR;
+ case 6: return ENXIO;
+ case 8: return ENOEXEC;
+ }
+ return -1;
+}
+
void TestLogging(bool check_counts) {
int64 base_num_infos = LogMessage::num_messages(GLOG_INFO);
int64 base_num_warning = LogMessage::num_messages(GLOG_WARNING);
@@ -246,7 +257,7 @@ void TestLogging(bool check_counts) {
LOG(INFO) << string("foo ") << "bar " << 10 << ' ' << 3.4;
for ( int i = 0; i < 10; ++i ) {
int old_errno = errno;
- errno = i;
+ errno = errnoForIteration(i);
PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER;
errno = old_errno;
Index: b/src/logging_unittest.err
===================================================================
--- a/src/logging_unittest.err
+++ b/src/logging_unittest.err
@@ -51,21 +51,21 @@ WDATE TIME__ THREADID logging_unittest.c
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 1
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 1
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 2
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [2]
+EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [__ENOENT_NUM__]
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 3
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 3
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 4
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 4
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [4]
+EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [__EINTR_NUM__]
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 5
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 5
WDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 6
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 6
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [6]
+EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [__ENXIO_NUM__]
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 7
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 7
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 8
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [8]
+EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [__ENOEXEC_NUM__]
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 9
IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 9
EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 10

View File

@ -0,0 +1,19 @@
Index: google-glog-0.3.2/src/signalhandler_unittest.sh
===================================================================
--- google-glog-0.3.2.orig/src/signalhandler_unittest.sh 2013-03-13 13:49:37.820188111 -0400
+++ google-glog-0.3.2/src/signalhandler_unittest.sh 2013-03-13 14:07:11.980204520 -0400
@@ -65,10 +65,10 @@
exit 0
fi
-# The PC cannot be obtained in signal handlers on PowerPC correctly.
-# We just skip the test for PowerPC.
-if [ x`uname -p` = x"powerpc" ]; then
- echo "PASS (We don't test the signal handler on PowerPC.)"
+# This test only works correctly on i386 and amd64.
+# We just skip the test when not on those platforms.
+if [ x`uname -m` != x"x86_64" -a x`uname -m` != x"i686" ]; then
+ echo "PASS (We only test the signal handler on i386 or amd64.)"
exit 0
fi

View File

@ -0,0 +1,35 @@
Description: fix FTBFS on x32
Author: Guillaume Morin <guillaume@morinfr.org>
Forwarded: no
Last-Update: 2019-08-05
---
--- google-glog-0.3.4.orig/src/symbolize_unittest.cc
+++ google-glog-0.3.4/src/symbolize_unittest.cc
@@ -313,8 +313,12 @@ extern "C" {
inline void* always_inline inline_func() {
void *pc = NULL;
#ifdef TEST_X86_32_AND_64
+#if __x86_64__ || (__x86_64__ && __ILP32__)
+ __asm__ __volatile__("call 1f; 1: popq %q0" : "=r"(pc));
+#else
__asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
#endif
+#endif
return pc;
}
@@ -322,8 +326,12 @@ void* ATTRIBUTE_NOINLINE non_inline_func
void* ATTRIBUTE_NOINLINE non_inline_func() {
void *pc = NULL;
#ifdef TEST_X86_32_AND_64
+#if __x86_64__ || (__x86_64__ && __ILP32__)
+ __asm__ __volatile__("call 1f; 1: popq %q0" : "=r"(pc));
+#else
__asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc));
#endif
+#endif
return pc;
}

View File

@ -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);

View File

@ -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..")

View File

@ -1,67 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="4"
inherit eutils multilib-minimal
DESCRIPTION="Google's C++ logging library"
HOMEPAGE="https://github.com/google/glog"
SRC_URI="https://google-glog.googlecode.com/files/${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ppc64 ~s390 ~sh ~sparc x86 ~amd64-linux ~x86-linux"
IUSE="gflags static-libs unwind test"
RDEPEND="gflags? ( >=dev-cpp/gflags-2.0-r1[${MULTILIB_USEDEP}] )
unwind? ( sys-libs/libunwind )"
DEPEND="${RDEPEND}
test? (
>=dev-cpp/gmock-1.7.0-r1[${MULTILIB_USEDEP}]
>=dev-cpp/gtest-1.6.0-r2[${MULTILIB_USEDEP}]
)"
src_prepare() {
epatch "${FILESDIR}"/${PN}-0.3.2-avoid-inline-asm.patch
# Fix the --dodcdir flag:
# https://code.google.com/p/google-glog/issues/detail?id=193
sed -i \
-e '/^docdir =/s:=.*:= @docdir@:' \
Makefile.in || die
}
multilib_src_configure() {
use test || export ac_cv_prog_GTEST_CONFIG=no
ECONF_SOURCE=${S} \
ac_cv_lib_gflags_main=$(usex gflags) \
ac_cv_lib_unwind_backtrace=$(usex unwind) \
econf \
--docdir="\$(datarootdir)/doc/${PF}" \
--htmldir='$(docdir)/html' \
$(use_enable static-libs static)
}
_emake() {
# The tests always get built ... disable them when unused.
emake $(usex test '' noinst_PROGRAMS=) "$@"
}
multilib_src_compile() {
_emake
}
multilib_src_install() {
_emake install DESTDIR="${D}"
}
multilib_src_install_all() {
# Punt docs we don't care about (NEWS is 0 bytes).
rm "${ED}"/usr/share/doc/${PF}/{COPYING,NEWS,README.windows} || die
# --htmldir doesn't work (yet):
# https://code.google.com/p/google-glog/issues/detail?id=144
dohtml "${ED}"/usr/share/doc/${PF}/*
rm "${ED}"/usr/share/doc/${PF}/*.{html,css}
use static-libs || find "${ED}" -name '*.la' -delete
}

View File

@ -1,50 +0,0 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=6
inherit autotools multilib-minimal
DESCRIPTION="Google's C++ logging library"
HOMEPAGE="https://github.com/google/glog"
SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux"
IUSE="gflags static-libs test unwind"
RDEPEND="
gflags? ( >=dev-cpp/gflags-2.0-r1[${MULTILIB_USEDEP}] )
unwind? ( sys-libs/libunwind[${MULTILIB_USEDEP}] )"
DEPEND="${RDEPEND}
test? (
>=dev-cpp/gmock-1.7.0-r1[${MULTILIB_USEDEP}]
>=dev-cpp/gtest-1.6.0-r2[${MULTILIB_USEDEP}]
)"
PATCHES=(
"${FILESDIR}"/${PN}-0.3.2-avoid-inline-asm.patch
"${FILESDIR}"/${PN}-0.3.4-fix-build-system.patch
"${FILESDIR}"/${PN}-0.3.4-fix-gcc5-demangling.patch
)
src_prepare() {
default
eautoreconf
}
multilib_src_configure() {
ECONF_SOURCE="${S}" econf \
$(use_enable gflags) \
$(use_enable static-libs static) \
$(use_enable test gtest-config) \
$(use_enable unwind)
}
multilib_src_install_all() {
einstalldocs
# package provides .pc files
find "${D}" -name '*.la' -delete || die
}

View File

@ -1,68 +0,0 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
inherit eutils multilib-minimal
DESCRIPTION="Google's C++ logging library"
HOMEPAGE="https://github.com/google/glog"
SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux"
IUSE="gflags static-libs unwind test"
RDEPEND="gflags? ( >=dev-cpp/gflags-2.0-r1[${MULTILIB_USEDEP}] )
unwind? ( sys-libs/libunwind )"
DEPEND="${RDEPEND}
test? (
>=dev-cpp/gmock-1.7.0-r1[${MULTILIB_USEDEP}]
>=dev-cpp/gtest-1.6.0-r2[${MULTILIB_USEDEP}]
)"
src_prepare() {
epatch "${FILESDIR}"/${PN}-0.3.2-avoid-inline-asm.patch
# Fix the --dodcdir flag:
# https://code.google.com/p/google-glog/issues/detail?id=193
sed -i \
-e '/^docdir =/s:=.*:= @docdir@:' \
Makefile.in || die
}
multilib_src_configure() {
use test || export ac_cv_prog_GTEST_CONFIG=no
ECONF_SOURCE=${S} \
ac_cv_lib_gflags_main=$(usex gflags) \
ac_cv_lib_unwind_backtrace=$(usex unwind) \
econf \
--docdir="\$(datarootdir)/doc/${PF}" \
--htmldir='$(docdir)/html' \
$(use_enable static-libs static)
}
_emake() {
# The tests always get built ... disable them when unused.
emake $(usex test '' noinst_PROGRAMS=) "$@"
}
multilib_src_compile() {
_emake
}
multilib_src_install() {
_emake install DESTDIR="${D}"
}
multilib_src_install_all() {
# Punt docs we don't care about (NEWS is 0 bytes).
rm "${ED}"/usr/share/doc/${PF}/{COPYING,NEWS,README.windows} || die
# --htmldir doesn't work (yet):
# https://code.google.com/p/google-glog/issues/detail?id=144
dohtml "${ED}"/usr/share/doc/${PF}/*
rm "${ED}"/usr/share/doc/${PF}/*.{html,css}
use static-libs || find "${ED}" -name '*.la' -delete
}

View File

@ -1,7 +1,7 @@
# Copyright 1999-2018 Gentoo Foundation
# Copyright 2011-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="6"
EAPI="7"
inherit autotools multilib-minimal
@ -11,19 +11,20 @@ SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux"
IUSE="gflags static-libs test unwind"
# -sparc as libunwind is not ported on sparc
KEYWORDS="amd64 arm arm64 ~hppa ~ia64 ~mips ppc ppc64 ~s390 -sparc x86 ~amd64-linux ~x86-linux"
IUSE="gflags static-libs test"
RESTRICT="test"
RDEPEND="
gflags? ( >=dev-cpp/gflags-2.0-r1[${MULTILIB_USEDEP}] )
unwind? ( sys-libs/libunwind[${MULTILIB_USEDEP}] )"
RDEPEND="sys-libs/libunwind[${MULTILIB_USEDEP}]
gflags? ( dev-cpp/gflags[${MULTILIB_USEDEP}] )"
DEPEND="${RDEPEND}
test? ( >=dev-cpp/gtest-1.8.0[${MULTILIB_USEDEP}] )"
PATCHES=(
"${FILESDIR}"/${PN}-0.3.2-avoid-inline-asm.patch
"${FILESDIR}"/${PN}-0.3.4-fix-build-system.patch
"${FILESDIR}"/${PN}-0.3.4-fix-gcc5-demangling.patch
"${FILESDIR}"/${PN}-0.4.0-fix-x32-build.patch
"${FILESDIR}"/${PN}-0.4.0-errnos.patch
"${FILESDIR}"/${PN}-0.4.0-fix-test-on-ports.patch
)
src_prepare() {
@ -33,10 +34,8 @@ src_prepare() {
multilib_src_configure() {
ECONF_SOURCE="${S}" econf \
$(use_enable gflags) \
$(use_enable static-libs static) \
$(use_enable test gtest-config) \
$(use_enable unwind)
ac_cv_lib_gflags_main="$(usex gflags)"
}
multilib_src_install_all() {

View File

@ -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
}

View File

@ -1,16 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>cpp@gentoo.org</email>
<name>Gentoo C++ Project</name>
<maintainer type="person" proxied="yes">
<email>arfrever.fta@gmail.com</email>
<name>Arfrever Frehtes Taifersar Arahesis</name>
</maintainer>
<maintainer type="person" proxied="proxy">
<email>floppym@gentoo.org</email>
<name>Mike Gilbert</name>
</maintainer>
<use>
<flag name="gflags">Use <pkg>dev-cpp/gflags</pkg> for flag parsing</flag>
<flag name="unwind">Use <pkg>sys-libs/libunwind</pkg> for stack unwinding instead of glibc/gcc (may be more reliable on x86_64)</flag>
<flag name="libunwind">Use libunwind library (<pkg>sys-libs/libunwind</pkg> or <pkg>sys-libs/llvm-libunwind</pkg>) instead of built-in fallback implementation for stack unwinding</flag>
</use>
<upstream>
<remote-id type="google-code">google-glog</remote-id>
<remote-id type="github">google/glog</remote-id>
</upstream>
</pkgmetadata>