Home | History | Annotate | Download | only in bazel
      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