Release v2.2.0
[platform/upstream/gflags.git] / bazel / gflags.bzl
1 # ------------------------------------------------------------------------------
2 # Add native rules to configure source files
3 def gflags_sources(namespace=["google", "gflags"]):
4     native.genrule(
5         name = "config_h",
6         srcs = ["src/config.h.in"],
7         outs = ["config.h"],
8         cmd  = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)"
9     )
10     native.genrule(
11         name = "gflags_declare_h",
12         srcs = ["src/gflags_declare.h.in"],
13         outs = ["gflags/gflags_declare.h"],
14         cmd  = ("awk '{ " +
15                 "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " +
16                 "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " +
17                 "gsub(/@([A-Z0-9_]+)@/, \"0\"); " +
18                 "print; }' $(<) > $(@)")
19     )
20     gflags_ns_h_files = []
21     for ns in namespace[1:]:
22         gflags_ns_h_file = "gflags_{}.h".format(ns)
23         native.genrule(
24             name = gflags_ns_h_file.replace('.', '_'),
25             srcs = ["src/gflags_ns.h.in"],
26             outs = ["gflags/" + gflags_ns_h_file],
27             cmd  = ("awk '{ " +
28                     "gsub(/@ns@/, \"" + ns + "\"); " +
29                     "gsub(/@NS@/, \"" + ns.upper() + "\"); " +
30                     "print; }' $(<) > $(@)")
31         )
32         gflags_ns_h_files.append(gflags_ns_h_file)
33     native.genrule(
34         name = "gflags_h",
35         srcs = ["src/gflags.h.in"],
36         outs = ["gflags/gflags.h"],
37         cmd  = ("awk '{ " +
38                 "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " +
39                 "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + '\n'.join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " +
40                 "print; }' $(<) > $(@)")
41     )
42     native.genrule(
43         name = "gflags_completions_h",
44         srcs = ["src/gflags_completions.h.in"],
45         outs = ["gflags/gflags_completions.h"],
46         cmd  = "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $(<) > $(@)"
47     )
48     hdrs = [":gflags_h", ":gflags_declare_h", ":gflags_completions_h"]
49     hdrs.extend([':' + hdr.replace('.', '_') for hdr in gflags_ns_h_files])
50     srcs = [
51         ":config_h",
52         "src/gflags.cc",
53         "src/gflags_completions.cc",
54         "src/gflags_reporting.cc",
55         "src/mutex.h",
56         "src/util.h"
57     ]
58     return [hdrs, srcs]
59
60 # ------------------------------------------------------------------------------
61 # Add native rule to build gflags library
62 def gflags_library(hdrs=[], srcs=[], threads=1):
63     name = "gflags"
64     copts = [
65         "-DHAVE_STDINT_H",
66         "-DHAVE_SYS_TYPES_H",
67         "-DHAVE_INTTYPES_H",
68         "-DHAVE_SYS_STAT_H",
69         "-DHAVE_UNISTD_H",
70         "-DHAVE_FNMATCH_H",
71         "-DHAVE_STRTOLL",
72         "-DHAVE_STRTOQ",
73         "-DHAVE_PTHREAD",
74         "-DHAVE_RWLOCK",
75         "-DGFLAGS_INTTYPES_FORMAT_C99",
76         "-DGFLAGS_IS_A_DLL=0",
77     ]
78     linkopts = []
79     if threads:
80         linkopts.append("-lpthread")
81     else:
82         name += "_nothreads"
83         copts.append("-DNO_THREADS")
84     native.cc_library(
85         name       = name,
86         hdrs       = hdrs,
87         srcs       = srcs,
88         includes   = ["$(GENDIR)"],
89         copts      = copts,
90         linkopts   = linkopts,
91         visibility = ["//visibility:public"]
92     )