# ------------------------------------------------------------------------------ # 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"] )