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.
This commit is contained in:
parent
004fc8cb8e
commit
e6e2e1372a
145
BUILD
145
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()
|
||||
|
||||
178
bazel/glog.bzl
178
bazel/glog.bzl
@ -1,85 +1,87 @@
|
||||
# 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',
|
||||
'src/glog/log_severity.h',
|
||||
],
|
||||
includes = [
|
||||
'src',
|
||||
],
|
||||
copts = [
|
||||
# Disable warnings that exists in glog
|
||||
'-Wno-sign-compare',
|
||||
'-Wno-unused-local-typedefs',
|
||||
## Inject google namespace as 'google'
|
||||
"-D_START_GOOGLE_NAMESPACE_='namespace google {'",
|
||||
"-D_END_GOOGLE_NAMESPACE_='}'",
|
||||
"-DGOOGLE_NAMESPACE='google'",
|
||||
# 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
|
||||
'-DHAVE_SYS_SYSCALL_H',
|
||||
# Enable system calls from sys/time.h
|
||||
'-DHAVE_SYS_TIME_H',
|
||||
'-DHAVE_STDINT_H',
|
||||
'-DHAVE_STRING_H',
|
||||
# For logging.cc
|
||||
'-DHAVE_PREAD',
|
||||
] + [
|
||||
'-DHAVE_LIB_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,
|
||||
'src/glog/log_severity.h',
|
||||
],
|
||||
)
|
||||
else:
|
||||
native.cc_library(
|
||||
name = 'internal_headers',
|
||||
hdrs = internal_headers,
|
||||
textual_hdrs = [
|
||||
],
|
||||
strip_include_prefix = 'src',
|
||||
copts = [
|
||||
# Disable warnings that exists in glog.
|
||||
'-Wno-sign-compare',
|
||||
'-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',
|
||||
|
||||
# Include generated header files.
|
||||
'-I%s/glog_internal' % gendir,
|
||||
] + [
|
||||
# Use gflags to parse CLI arguments.
|
||||
'-DHAVE_LIB_GFLAGS',
|
||||
] if with_gflags else [],
|
||||
deps = [
|
||||
'@com_github_gflags_gflags//:gflags',
|
||||
] if with_gflags else [],
|
||||
)
|
||||
|
||||
native.genrule(
|
||||
@ -87,7 +89,7 @@ def glog_library(with_gflags=1):
|
||||
outs = [
|
||||
'gen.sh',
|
||||
],
|
||||
cmd = '''
|
||||
cmd = r'''\
|
||||
#!/bin/sh
|
||||
cat > $@ <<"EOF"
|
||||
sed -e 's/@ac_cv_have_unistd_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',
|
||||
]
|
||||
]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user