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