summaryrefslogtreecommitdiff
path: root/bazel
diff options
context:
space:
mode:
authorZhongming Qu <qzmfranklin@gmail.com>2017-12-14 00:51:26 -0800
committerZhongming Qu <qzmfranklin@gmail.com>2017-12-14 00:58:33 -0800
commite6e2e1372aeb3f6ac6ca5f4a3d72bad8dce3c724 (patch)
tree8bc674c8d9618ab5092aaf1ec6a0cc0e94cec367 /bazel
parent004fc8cb8ed91d263670f7a96ba36cf32edaad8c (diff)
downloadglog-e6e2e1372aeb3f6ac6ca5f4a3d72bad8dce3c724.tar.gz
glog-e6e2e1372aeb3f6ac6ca5f4a3d72bad8dce3c724.tar.bz2
glog-e6e2e1372aeb3f6ac6ca5f4a3d72bad8dce3c724.zip
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.
Diffstat (limited to 'bazel')
-rw-r--r--bazel/glog.bzl154
1 files changed, 64 insertions, 90 deletions
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',
+ ]
+ ]