aboutsummaryrefslogtreecommitdiff
path: root/bazel
diff options
context:
space:
mode:
authorAndreas Schuh <andreas.schuh.84@gmail.com>2016-11-25 13:47:29 +0000
committerAndreas Schuh <andreas.schuh.84@gmail.com>2016-11-25 17:18:01 +0000
commit37e2867335a680f8478cb8bd811b598e069c56c1 (patch)
tree5ccec940fa758d64bc5da3555dd370e850cf52ff /bazel
parent8f2c22a03f40da83f48d8e7c799d551c8005a8b6 (diff)
downloadgflags-37e2867335a680f8478cb8bd811b598e069c56c1.tar.gz
enh: Refactored Bazel BUILD rules
Diffstat (limited to 'bazel')
-rw-r--r--bazel/gflags.bzl92
1 files changed, 92 insertions, 0 deletions
diff --git a/bazel/gflags.bzl b/bazel/gflags.bzl
new file mode 100644
index 0000000..6a89f88
--- /dev/null
+++ b/bazel/gflags.bzl
@@ -0,0 +1,92 @@
+# ------------------------------------------------------------------------------
+# Add native rules to configure source files
+def gflags_sources(namespace=["google", "gflags"]):
+ native.genrule(
+ name = "config_h",
+ srcs = ["src/config.h.in"],
+ outs = ["config.h"],
+ cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)"
+ )
+ native.genrule(
+ name = "gflags_declare_h",
+ srcs = ["src/gflags_declare.h.in"],
+ outs = ["gflags/gflags_declare.h"],
+ cmd = ("awk '{ " +
+ "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " +
+ "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " +
+ "gsub(/@([A-Z0-9_]+)@/, \"0\"); " +
+ "print; }' $(<) > $(@)")
+ )
+ gflags_ns_h_files = []
+ for ns in namespace[1:]:
+ gflags_ns_h_file = "gflags_{}.h".format(ns)
+ native.genrule(
+ name = gflags_ns_h_file.replace('.', '_'),
+ srcs = ["src/gflags_ns.h.in"],
+ outs = ["gflags/" + gflags_ns_h_file],
+ cmd = ("awk '{ " +
+ "gsub(/@ns@/, \"" + ns + "\"); " +
+ "gsub(/@NS@/, \"" + ns.upper() + "\"); " +
+ "print; }' $(<) > $(@)")
+ )
+ gflags_ns_h_files.append(gflags_ns_h_file)
+ native.genrule(
+ name = "gflags_h",
+ srcs = ["src/gflags.h.in"],
+ outs = ["gflags/gflags.h"],
+ cmd = ("awk '{ " +
+ "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " +
+ "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + '\n'.join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " +
+ "print; }' $(<) > $(@)")
+ )
+ native.genrule(
+ name = "gflags_completions_h",
+ srcs = ["src/gflags_completions.h.in"],
+ outs = ["gflags/gflags_completions.h"],
+ cmd = "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $(<) > $(@)"
+ )
+ hdrs = [":gflags_h", ":gflags_declare_h", ":gflags_completions_h"]
+ hdrs.extend([':' + hdr.replace('.', '_') for hdr in gflags_ns_h_files])
+ srcs = [
+ ":config_h",
+ "src/gflags.cc",
+ "src/gflags_completions.cc",
+ "src/gflags_reporting.cc",
+ "src/mutex.h",
+ "src/util.h"
+ ]
+ return [hdrs, srcs]
+
+# ------------------------------------------------------------------------------
+# Add native rule to build gflags library
+def gflags_library(hdrs=[], srcs=[], threads=1):
+ name = "gflags"
+ copts = [
+ "-DHAVE_STDINT_H",
+ "-DHAVE_SYS_TYPES_H",
+ "-DHAVE_INTTYPES_H",
+ "-DHAVE_SYS_STAT_H",
+ "-DHAVE_UNISTD_H",
+ "-DHAVE_FNMATCH_H",
+ "-DHAVE_STRTOLL",
+ "-DHAVE_STRTOQ",
+ "-DHAVE_PTHREAD",
+ "-DHAVE_RWLOCK",
+ "-DGFLAGS_INTTYPES_FORMAT_C99",
+ "-DGFLAGS_IS_A_DLL=0",
+ ]
+ linkopts = []
+ if threads:
+ linkopts.append("-lpthread")
+ else:
+ name += "_nothreads"
+ copts.append("-DNO_THREADS")
+ native.cc_library(
+ name = name,
+ hdrs = hdrs,
+ srcs = srcs,
+ includes = ["$(GENDIR)"],
+ copts = copts,
+ linkopts = linkopts,
+ visibility = ["//visibility:public"]
+ )