Hide certain header files from the cc_library().
[platform/upstream/glog.git] / bazel / glog.bzl
1 # Implement a macro glog_library() that the BUILD file can load.
2
3 # By default, glog is built with gflags support.  You can change this behavior
4 # by using glog_library(with_gflags=0)
5 #
6 # This file is inspired by the following sample BUILD files:
7 #       https://github.com/google/glog/issues/61
8 #       https://github.com/google/glog/files/393474/BUILD.txt
9
10 def glog_library(namespace='google', with_gflags=1):
11     if native.repository_name() != '@':
12         gendir = '$(GENDIR)/external/' + native.repository_name().lstrip('@')
13     else:
14         gendir = '$(GENDIR)'
15
16     native.cc_library(
17         name = 'glog',
18         visibility = [ '//visibility:public' ],
19         srcs = [
20             ':config_h',
21             'src/base/commandlineflags.h',
22             'src/base/googleinit.h',
23             'src/base/mutex.h',
24             'src/demangle.cc',
25             'src/demangle.h',
26             'src/logging.cc',
27             'src/raw_logging.cc',
28             'src/signalhandler.cc',
29             'src/stacktrace.h',
30             'src/stacktrace_generic-inl.h',
31             'src/stacktrace_libunwind-inl.h',
32             'src/stacktrace_powerpc-inl.h',
33             'src/stacktrace_windows-inl.h',
34             'src/stacktrace_x86-inl.h',
35             'src/stacktrace_x86_64-inl.h',
36             'src/symbolize.cc',
37             'src/symbolize.h',
38             'src/utilities.cc',
39             'src/utilities.h',
40             'src/vlog_is_on.cc',
41         ],
42         hdrs = [
43             ':logging_h',
44             ':raw_logging_h',
45             ':stl_logging_h',
46             ':vlog_is_on_h',
47             'src/glog/log_severity.h',
48         ],
49         textual_hdrs = [
50         ],
51         strip_include_prefix = 'src',
52         copts = [
53             # Disable warnings that exists in glog.
54             '-Wno-sign-compare',
55             '-Wno-unused-function',
56             '-Wno-unused-local-typedefs',
57             '-Wno-unused-variable',
58             # Inject a C++ namespace.
59             "-D_START_GOOGLE_NAMESPACE_='namespace %s {'" % namespace,
60             "-D_END_GOOGLE_NAMESPACE_='}'",
61             "-DGOOGLE_NAMESPACE='%s'" % namespace,
62             # Allows src/base/mutex.h to include pthread.h.
63             '-DHAVE_PTHREAD',
64             # Allows src/logging.cc to determine the host name.
65             '-DHAVE_SYS_UTSNAME_H',
66             # For src/utilities.cc.
67             '-DHAVE_SYS_SYSCALL_H',
68             '-DHAVE_SYS_TIME_H',
69             '-DHAVE_STDINT_H',
70             '-DHAVE_STRING_H',
71             # Enable dumping stacktrace upon sigaction.
72             '-DHAVE_SIGACTION',
73             # For logging.cc.
74             '-DHAVE_PREAD',
75
76             # Include generated header files.
77             '-I%s/glog_internal' % gendir,
78         ] + [
79             # Use gflags to parse CLI arguments.
80             '-DHAVE_LIB_GFLAGS',
81         ] if with_gflags else [],
82         deps = [
83             '@com_github_gflags_gflags//:gflags',
84         ] if with_gflags else [],
85     )
86
87     native.genrule(
88         name = 'gen_sh',
89         outs = [
90             'gen.sh',
91         ],
92         cmd = r'''\
93 #!/bin/sh
94 cat > $@ <<"EOF"
95 sed -e 's/@ac_cv_have_unistd_h@/1/g' \
96     -e 's/@ac_cv_have_stdint_h@/1/g' \
97     -e 's/@ac_cv_have_systypes_h@/1/g' \
98     -e 's/@ac_cv_have_libgflags_h@/1/g' \
99     -e 's/@ac_cv_have_uint16_t@/1/g' \
100     -e 's/@ac_cv_have___builtin_expect@/1/g' \
101     -e 's/@ac_cv_have_.*@/0/g' \
102     -e 's/@ac_google_start_namespace@/namespace google {/g' \
103     -e 's/@ac_google_end_namespace@/}/g' \
104     -e 's/@ac_google_namespace@/google/g' \
105     -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \
106     -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \
107     -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g'
108 EOF
109 ''',
110     )
111
112     native.genrule(
113         name = 'config_h',
114         srcs = [
115             'src/config.h.cmake.in',
116         ],
117         outs = [
118             'glog_internal/src/config.h',
119         ],
120         cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $< > $@",
121     )
122
123     [native.genrule(
124         name = '%s_h' % f,
125         srcs = [
126             'src/glog/%s.h.in' % f,
127         ],
128         outs = [
129             'src/glog/%s.h' % f,
130         ],
131         cmd = '$(location :gen_sh) < $< > $@',
132         tools = [':gen_sh'],
133     ) for f in [
134             'vlog_is_on',
135             'stl_logging',
136             'raw_logging',
137             'logging',
138         ]
139     ]