Add workaround for Bazel build on macOS
[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         strip_include_prefix = 'src',
50         copts = [
51             # Disable warnings that exists in glog.
52             '-Wno-sign-compare',
53             '-Wno-unused-function',
54             '-Wno-unused-local-typedefs',
55             '-Wno-unused-variable',
56             "-DGLOG_BAZEL_BUILD",
57             # Inject a C++ namespace.
58             "-DGOOGLE_NAMESPACE='%s'" % namespace,
59             # Allows src/base/mutex.h to include pthread.h.
60             '-DHAVE_PTHREAD',
61             # Allows src/logging.cc to determine the host name.
62             '-DHAVE_SYS_UTSNAME_H',
63             # For src/utilities.cc.
64             '-DHAVE_SYS_SYSCALL_H',
65             '-DHAVE_SYS_TIME_H',
66             '-DHAVE_STDINT_H',
67             '-DHAVE_STRING_H',
68             # Enable dumping stacktrace upon sigaction.
69             '-DHAVE_SIGACTION',
70             # For logging.cc.
71             '-DHAVE_PREAD',
72
73             # Include generated header files.
74             '-I%s/glog_internal' % gendir,
75         ] + [
76             # Use gflags to parse CLI arguments.
77             '-DHAVE_LIB_GFLAGS',
78         ] if with_gflags else [],
79         deps = [
80             '@com_github_gflags_gflags//:gflags',
81         ] if with_gflags else [],
82     )
83
84     native.genrule(
85         name = 'gen_sh',
86         outs = [
87             'gen.sh',
88         ],
89         cmd = r'''\
90 #!/bin/sh
91 cat > $@ <<"EOF"
92 sed -e 's/@ac_cv_have_unistd_h@/1/g' \
93     -e 's/@ac_cv_have_stdint_h@/1/g' \
94     -e 's/@ac_cv_have_systypes_h@/1/g' \
95     -e 's/@ac_cv_have_libgflags_h@/1/g' \
96     -e 's/@ac_cv_have_uint16_t@/1/g' \
97     -e 's/@ac_cv_have___builtin_expect@/1/g' \
98     -e 's/@ac_cv_have_.*@/0/g' \
99     -e 's/@ac_google_start_namespace@/namespace google {/g' \
100     -e 's/@ac_google_end_namespace@/}/g' \
101     -e 's/@ac_google_namespace@/google/g' \
102     -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \
103     -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \
104     -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g'
105 EOF
106 ''',
107     )
108
109     native.genrule(
110         name = 'config_h',
111         srcs = [
112             'src/config.h.cmake.in',
113         ],
114         outs = [
115             'glog_internal/config.h',
116         ],
117         cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $< > $@",
118     )
119
120     [native.genrule(
121         name = '%s_h' % f,
122         srcs = [
123             'src/glog/%s.h.in' % f,
124         ],
125         outs = [
126             'src/glog/%s.h' % f,
127         ],
128         cmd = '$(location :gen_sh) < $< > $@',
129         tools = [':gen_sh'],
130     ) for f in [
131             'vlog_is_on',
132             'stl_logging',
133             'raw_logging',
134             'logging',
135         ]
136     ]