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