From: Zhongming Qu Date: Thu, 14 Dec 2017 08:51:26 +0000 (-0800) Subject: Hide certain header files from the cc_library(). X-Git-Tag: accepted/tizen/5.0/unified/20181102.024921~19^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e6e2e1372aeb3f6ac6ca5f4a3d72bad8dce3c724;hp=004fc8cb8ed91d263670f7a96ba36cf32edaad8c;p=platform%2Fupstream%2Fglog.git Hide certain header files from the cc_library(). This commit addresses a few issues: 1. No longer leak config.h in a way similar to https://github.com/gflags/gflags/issues/233 The solution of prefixing the path by 'glog_internal' is modified from https://github.com/gflags/gflags/issues/234 2. No longer expose internal headers. 3. Replace PACKAGE_NAME with native.package_name() 4. Uers can choose namespaces via the newly added 'namespace' keyword. 5. Replace glob with explicitly listing of files. 6. Make the genrules more compact using pythonic list construction. --- diff --git a/BUILD b/BUILD index ae99505..37fb27b 100644 --- a/BUILD +++ b/BUILD @@ -1,146 +1,5 @@ licenses(['notice']) -namespace = 'google' -with_gflags = 1 -with_libunwind = 1 +load(':bazel/glog.bzl', 'glog_library') -cc_library( - name = 'glog', - visibility = [ '//visibility:public' ], - srcs = glob([ - 'src/base/commandlineflags.h', - 'src/base/googleinit.h', - 'src/demangle.cc', - 'src/logging.cc', - 'src/raw_logging.cc', - 'src/signalhandler.cc', - 'src/stacktrace_*-inl.h', - 'src/symbolize.cc', - 'src/utilities.cc', - 'src/vlog_is_on.cc', - ]), - hdrs = [ - 'src/base/mutex.h', - 'src/demangle.h', - 'src/stacktrace.h', - 'src/symbolize.h', - 'src/utilities.h', - 'src/glog/log_severity.h', - ], - includes = [ - 'src', - ], - copts = [ - # Disable warnings that exists in glog. - '-Wno-invalid-noreturn', - '-Wno-sign-compare', - '-Wno-unused-const-variable', - '-Wno-unused-function', - '-Wno-unused-local-typedefs', - '-Wno-unused-variable', - # Inject a C++ namespace. - "-D_START_GOOGLE_NAMESPACE_='namespace %s {'" % namespace, - "-D_END_GOOGLE_NAMESPACE_='}'", - "-DGOOGLE_NAMESPACE='%s'" % namespace, - # Allows src/base/mutex.h to include pthread.h. - '-DHAVE_PTHREAD', - # Allows src/logging.cc to determine the host name. - '-DHAVE_SYS_UTSNAME_H', - # For src/utilities.cc. - '-DHAVE_SYS_SYSCALL_H', - '-DHAVE_SYS_TIME_H', - '-DHAVE_STDINT_H', - '-DHAVE_STRING_H', - # Enable dumping stacktrace upon sigaction. - '-DHAVE_SIGACTION', - # For logging.cc. - '-DHAVE_PREAD', - ] + ([ - # Use gflags to parse CLI arguments. - # NOTE: These parenthesis are necessary. - '-DHAVE_LIB_GFLAGS', - ] if with_gflags else []) + ([ - # Use linunwind to get stacktrace. - '-DHAVE_LIB_UNWIND', - ] if with_libunwind else []), - deps = [ - ':internal_headers', - ] + ([ - '//third_party/gflags', - ] if with_gflags else []) + ([ - '//third_party/libunwind', - ] if with_libunwind else []), -) - - -cc_library( - name = 'internal_headers', - hdrs = [ - ':config_h', - ':logging_h', - ':raw_logging_h', - ':stl_logging_h', - ':vlog_is_on_h', - ], - includes = [ - PACKAGE_NAME, - ] if PACKAGE_NAME else [], -) - - -genrule( - name = 'gen_sh', - outs = [ - 'gen.sh', - ], - cmd = r'''\ -#!/bin/sh -cat > $@ <<"EOF" -sed -e 's/@ac_cv_have_unistd_h@/1/g' \ - -e 's/@ac_cv_have_stdint_h@/1/g' \ - -e 's/@ac_cv_have_systypes_h@/1/g' \ - -e 's/@ac_cv_have_libgflags_h@/1/g' \ - -e 's/@ac_cv_have_uint16_t@/1/g' \ - -e 's/@ac_cv_have___builtin_expect@/1/g' \ - -e 's/@ac_cv_have_.*@/0/g' \ - -e 's/@ac_google_start_namespace@/namespace google {/g' \ - -e 's/@ac_google_end_namespace@/}/g' \ - -e 's/@ac_google_namespace@/google/g' \ - -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \ - -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \ - -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g' -EOF -''', -) - - -genrule( - name = 'config_h', - srcs = [ - 'src/config.h.cmake.in', - ], - outs = [ - '/'.join([PACKAGE_NAME, 'config.h']) if PACKAGE_NAME else 'config.h', - ], - cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)", -) - - -[genrule( - name = '%s_h' % f, - srcs = [ - 'src/glog/%s.h.in' % f, - ], - outs = [ - '/'.join([PACKAGE_NAME, 'glog/%s.h' % f]) \ - if PACKAGE_NAME else 'glog/%s.h' % f, - ], - cmd = '$(location :gen_sh) < $(<) > $(@)', - tools = [':gen_sh'], -) for f in [ - 'vlog_is_on', - 'stl_logging', - 'raw_logging', - 'logging', - ] -] +glog_library() diff --git a/bazel/glog.bzl b/bazel/glog.bzl index ff2a268..37e5320 100644 --- a/bazel/glog.bzl +++ b/bazel/glog.bzl @@ -1,94 +1,96 @@ # Implement a macro glog_library() that the BUILD file can load. -# By default, glog is built with gflags support. You can change this behavior by using -# glog_library(with_gflags=0) + +# By default, glog is built with gflags support. You can change this behavior +# by using glog_library(with_gflags=0) # # This file is inspired by the following sample BUILD files: # https://github.com/google/glog/issues/61 # https://github.com/google/glog/files/393474/BUILD.txt -def glog_library(with_gflags=1): +def glog_library(namespace='google', with_gflags=1): + if native.repository_name() != '@': + gendir = '$(GENDIR)/external/' + native.repository_name().lstrip('@') + else: + gendir = '$(GENDIR)' + native.cc_library( name = 'glog', visibility = [ '//visibility:public' ], srcs = [ + ':config_h', 'src/base/commandlineflags.h', 'src/base/googleinit.h', + 'src/base/mutex.h', 'src/demangle.cc', + 'src/demangle.h', 'src/logging.cc', 'src/raw_logging.cc', 'src/signalhandler.cc', + 'src/stacktrace.h', + 'src/stacktrace_generic-inl.h', + 'src/stacktrace_libunwind-inl.h', + 'src/stacktrace_powerpc-inl.h', + 'src/stacktrace_windows-inl.h', + 'src/stacktrace_x86-inl.h', + 'src/stacktrace_x86_64-inl.h', 'src/symbolize.cc', + 'src/symbolize.h', 'src/utilities.cc', + 'src/utilities.h', 'src/vlog_is_on.cc', ], hdrs = [ - 'src/base/mutex.h', - 'src/demangle.h', - 'src/stacktrace.h', - 'src/symbolize.h', - 'src/utilities.h', + ':logging_h', + ':raw_logging_h', + ':stl_logging_h', + ':vlog_is_on_h', 'src/glog/log_severity.h', ], - includes = [ - 'src', + textual_hdrs = [ ], + strip_include_prefix = 'src', copts = [ - # Disable warnings that exists in glog + # Disable warnings that exists in glog. '-Wno-sign-compare', + '-Wno-unused-function', '-Wno-unused-local-typedefs', - ## Inject google namespace as 'google' - "-D_START_GOOGLE_NAMESPACE_='namespace google {'", + '-Wno-unused-variable', + # Inject a C++ namespace. + "-D_START_GOOGLE_NAMESPACE_='namespace %s {'" % namespace, "-D_END_GOOGLE_NAMESPACE_='}'", - "-DGOOGLE_NAMESPACE='google'", + "-DGOOGLE_NAMESPACE='%s'" % namespace, # Allows src/base/mutex.h to include pthread.h. '-DHAVE_PTHREAD', # Allows src/logging.cc to determine the host name. '-DHAVE_SYS_UTSNAME_H', - # System header files enabler for src/utilities.cc - # Enable system calls from syscall.h + # For src/utilities.cc. '-DHAVE_SYS_SYSCALL_H', - # Enable system calls from sys/time.h '-DHAVE_SYS_TIME_H', '-DHAVE_STDINT_H', '-DHAVE_STRING_H', - # For logging.cc + # Enable dumping stacktrace upon sigaction. + '-DHAVE_SIGACTION', + # For logging.cc. '-DHAVE_PREAD', + + # Include generated header files. + '-I%s/glog_internal' % gendir, ] + [ - '-DHAVE_LIB_GFLAGS' + # Use gflags to parse CLI arguments. + '-DHAVE_LIB_GFLAGS', + ] if with_gflags else [], + deps = [ + '@com_github_gflags_gflags//:gflags', ] if with_gflags else [], - deps = [ ':internal_headers' ] + \ - [ '//external:gflags' ] if with_gflags else [], ) - internal_headers = [ - ':config_h', - ':logging_h', - ':raw_logging_h', - ':stl_logging_h', - ':vlog_is_on_h', - ] - - if PACKAGE_NAME: - native.cc_library( - name = 'internal_headers', - hdrs = internal_headers, - includes = [ - PACKAGE_NAME, - ], - ) - else: - native.cc_library( - name = 'internal_headers', - hdrs = internal_headers, - ) - native.genrule( name = 'gen_sh', outs = [ 'gen.sh', ], - cmd = ''' -#! /bin/sh + cmd = r'''\ +#!/bin/sh cat > $@ <<"EOF" sed -e 's/@ac_cv_have_unistd_h@/1/g' \ -e 's/@ac_cv_have_stdint_h@/1/g' \ @@ -103,7 +105,9 @@ sed -e 's/@ac_cv_have_unistd_h@/1/g' \ -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \ -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \ -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g' -EOF''') +EOF +''', + ) native.genrule( name = 'config_h', @@ -111,55 +115,25 @@ EOF''') 'src/config.h.cmake.in', ], outs = [ - '/'.join([PACKAGE_NAME, 'config.h']) if PACKAGE_NAME else 'config.h', + 'glog_internal/src/config.h', ], - cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)", + cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $< > $@", ) - native.genrule( - name = 'logging_h', + [native.genrule( + name = '%s_h' % f, srcs = [ - 'src/glog/logging.h.in', + 'src/glog/%s.h.in' % f, ], outs = [ - '/'.join([PACKAGE_NAME, 'glog/logging.h']) if PACKAGE_NAME else 'glog/logging.h', + 'src/glog/%s.h' % f, ], - cmd = '$(location :gen_sh) < $(<) > $(@)', + cmd = '$(location :gen_sh) < $< > $@', tools = [':gen_sh'], - ) - - native.genrule( - name = 'raw_logging_h', - srcs = [ - 'src/glog/raw_logging.h.in', - ], - outs = [ - '/'.join([PACKAGE_NAME, 'glog/raw_logging.h']) if PACKAGE_NAME else 'glog/raw_logging.h', - ], - cmd = '$(location :gen_sh) < $(<) > $(@)', - tools = [':gen_sh'], - ) - - native.genrule( - name = 'stl_logging_h', - srcs = [ - 'src/glog/stl_logging.h.in', - ], - outs = [ - '/'.join([PACKAGE_NAME, 'glog/stl_logging.h']) if PACKAGE_NAME else 'glog/stl_logging.h', - ], - cmd = '$(location :gen_sh) < $(<) > $(@)', - tools = [':gen_sh'], - ) - - native.genrule( - name = 'vlog_is_on_h', - srcs = [ - 'src/glog/vlog_is_on.h.in', - ], - outs = [ - '/'.join([PACKAGE_NAME, 'glog/vlog_is_on.h']) if PACKAGE_NAME else 'glog/vlog_is_on.h', - ], - cmd = '$(location :gen_sh) < $(<) > $(@)', - tools = [':gen_sh'], - ) + ) for f in [ + 'vlog_is_on', + 'stl_logging', + 'raw_logging', + 'logging', + ] + ]