Upgrade gflags to master
Merge commit 'cb7bb2b58469b0ba5132fbcf4893b2ca76dead1c' into master
Change-Id: Id6b07c15b3bef794984d6f326d6596f043d1dde5
diff --git a/third_party/gflags/bazel/gflags.bzl b/third_party/gflags/bazel/gflags.bzl
new file mode 100644
index 0000000..5f2d20d
--- /dev/null
+++ b/third_party/gflags/bazel/gflags.bzl
@@ -0,0 +1,104 @@
+# ------------------------------------------------------------------------------
+# Add native rules to configure source files
+def gflags_sources(namespace=["google", "gflags"]):
+ native.genrule(
+ name = "gflags_declare_h",
+ srcs = ["src/gflags_declare.h.in"],
+ outs = ["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_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.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_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 = [
+ "src/config.h",
+ "src/gflags.cc",
+ "src/gflags_completions.cc",
+ "src/gflags_reporting.cc",
+ "src/mutex.h",
+ "src/util.h",
+ ] + select({
+ ":x64_windows": [
+ "src/windows_port.cc",
+ "src/windows_port.h",
+ ],
+ "//conditions:default": [],
+ })
+ return [hdrs, srcs]
+
+# ------------------------------------------------------------------------------
+# Add native rule to build gflags library
+def gflags_library(hdrs=[], srcs=[], threads=1):
+ name = "gflags"
+ copts = [
+ "-DGFLAGS_BAZEL_BUILD",
+ "-DGFLAGS_INTTYPES_FORMAT_C99",
+ "-DGFLAGS_IS_A_DLL=0",
+ # macros otherwise defined by CMake configured defines.h file
+ "-DHAVE_STDINT_H",
+ "-DHAVE_SYS_TYPES_H",
+ "-DHAVE_INTTYPES_H",
+ "-DHAVE_SYS_STAT_H",
+ "-DHAVE_STRTOLL",
+ "-DHAVE_STRTOQ",
+ "-DHAVE_RWLOCK",
+ "-Wno-format-nonliteral",
+ ] + select({
+ ":x64_windows": [
+ "-DOS_WINDOWS",
+ ],
+ "//conditions:default": [
+ "-DHAVE_UNISTD_H",
+ "-DHAVE_FNMATCH_H",
+ "-DHAVE_PTHREAD",
+ ],
+ })
+ linkopts = []
+ if threads:
+ linkopts += select({
+ ":x64_windows": [],
+ "//conditions:default": ["-lpthread"],
+ })
+ else:
+ name += "_nothreads"
+ copts += ["-DNO_THREADS"]
+ native.cc_library(
+ name = name,
+ hdrs = hdrs,
+ srcs = srcs,
+ copts = copts,
+ linkopts = linkopts,
+ visibility = ["//visibility:public"],
+ include_prefix = 'gflags'
+ )