generate_copts.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 """Generate Abseil compile compile option configs.
3 
4 Usage: <path_to_absl>/copts/generate_copts.py
5 
6 The configs are generated from copts.py.
7 """
8 
9 from os import path
10 import sys
11 from copts import COPT_VARS
12 
13 
14 # Helper functions
16  return [
17  "GENERATED! DO NOT MANUALLY EDIT THIS FILE.", "",
18  "(1) Edit absl/copts/copts.py.",
19  "(2) Run `python <path_to_absl>/copts/generate_copts.py`."
20  ]
21 
22 
23 def flatten(*lists):
24  return [item for sublist in lists for item in sublist]
25 
26 
27 def relative_filename(filename):
28  return path.join(path.dirname(__file__), filename)
29 
30 
31 # Style classes. These contain all the syntactic styling needed to generate a
32 # copt file for different build tools.
33 class CMakeStyle(object):
34  """Style object for CMake copts file."""
35 
36  def separator(self):
37  return ""
38 
39  def list_introducer(self, name):
40  return "list(APPEND " + name
41 
42  def list_closer(self):
43  return ")\n"
44 
45  def docstring(self):
46  return "\n".join((("# " + line).strip() for line in file_header_lines()))
47 
48  def filename(self):
49  return "GENERATED_AbseilCopts.cmake"
50 
51 
52 class StarlarkStyle(object):
53  """Style object for Starlark copts file."""
54 
55  def separator(self):
56  return ","
57 
58  def list_introducer(self, name):
59  return name + " = ["
60 
61  def list_closer(self):
62  return "]\n"
63 
64  def docstring(self):
65  docstring_quotes = "\"\"\""
66  return docstring_quotes + "\n".join(
67  flatten(file_header_lines(), [docstring_quotes]))
68 
69  def filename(self):
70  return "GENERATED_copts.bzl"
71 
72 
73 def copt_list(name, arg_list, style):
74  """Copt file generation."""
75 
76  make_line = lambda s: " \"" + s + "\"" + style.separator()
77  external_str_list = [make_line(s) for s in arg_list]
78 
79  return "\n".join(
80  flatten(
81  [style.list_introducer(name)],
82  external_str_list,
83  [style.list_closer()]))
84 
85 
86 def generate_copt_file(style):
87  """Creates a generated copt file using the given style object.
88 
89  Args:
90  style: either StarlarkStyle() or CMakeStyle()
91  """
92  with open(relative_filename(style.filename()), "w") as f:
93  f.write(style.docstring())
94  f.write("\n")
95  for var_name, arg_list in sorted(COPT_VARS.items()):
96  f.write("\n")
97  f.write(copt_list(var_name, arg_list, style))
98 
99 
100 def main(argv):
101  if len(argv) > 1:
102  raise RuntimeError("generate_copts needs no command line args")
103 
106 
107 
108 if __name__ == "__main__":
109  main(sys.argv)
def list_introducer(self, name)
def flatten(lists)
def file_header_lines()
def generate_copt_file(style)
def copt_list(name, arg_list, style)
def list_introducer(self, name)
def relative_filename(filename)


abseil_cpp
Author(s):
autogenerated on Mon Feb 28 2022 21:31:18