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'
+    )