[llvm] r348106 - [gn build] Slightly simplify write_cmake_config.

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 2 14:25:26 PST 2018


Author: nico
Date: Sun Dec  2 14:25:25 2018
New Revision: 348106

URL: http://llvm.org/viewvc/llvm-project?rev=348106&view=rev
Log:
[gn build] Slightly simplify write_cmake_config.

Before, the script had a bunch of special cases for #cmakedefine and
#cmakedefine01 and then did general variable substitution. Now, the script
always does general variable substitution for all lines and handles the special
cases afterwards.

This has no observable effect for the inputs we use, but is easier to explain
and slightly easier to implement.

Also mention to link to CMake's configure_file() in the docstring.

(The new behavior doesn't quite match CMake on lines like #cmakedefine ${FOO},
but nobody does that.)

Differential Revision: https://reviews.llvm.org/D55171

Modified:
    llvm/trunk/utils/gn/build/write_cmake_config.py

Modified: llvm/trunk/utils/gn/build/write_cmake_config.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/build/write_cmake_config.py?rev=348106&r1=348105&r2=348106&view=diff
==============================================================================
--- llvm/trunk/utils/gn/build/write_cmake_config.py (original)
+++ llvm/trunk/utils/gn/build/write_cmake_config.py Sun Dec  2 14:25:25 2018
@@ -1,10 +1,17 @@
 #!/usr/bin/env python
-"""Processes a foo.h.cmake file and writes foo.h.
+"""Emulates the bits of CMake's configure_file() function needed in LLVM.
+
+The CMake build uses configure_file() for several things.  This emulates that
+function for the GN build.  In the GN build, this runs at build time, instead
+of at generator time.
 
 Takes a list of KEY=VALUE pairs (where VALUE can be empty).
 
-Handles these types of lines (note that FOO= sets the value of FOO to the empty
-string, which is falsy, but FOO=0 sets it to '0' which is truthy):
+On each line, replaces ${KEY} with VALUE.
+
+After that, also handles these special cases (note that FOO= sets the value of
+FOO to the empty string, which is falsy, but FOO=0 sets it to '0' which is
+truthy):
 
 1.) #cmakedefine01 FOO
     Checks if key FOO is set to a truthy value, and depending on that prints
@@ -13,29 +20,15 @@ string, which is falsy, but FOO=0 sets i
         #define FOO 1
         #define FOO 0
 
-2.) #cmakedefine FOO
+2.) #cmakedefine FOO [...]
     Checks if key FOO is set to a truthy in value, and depending on that prints
     one of the following two lines:
 
-        #define FOO
+        #define FOO [...]
         /* #undef FOO */
 
-3.) #cmakedefine FOO asdf${BAR}jkl
-    Checks if key FOO is set to a truthy values, and if so replaces all
-    variable references in `asdf${BAR}jkl` with their value and prints that
-    (else it prints the same undef line as the previous form):
-
-        #define FOO asdfBAR_VALjkl
-        /* #undef FOO */
-
-4.) #define FOO asdf{BAR}jkl
-    Always gets its variable values filled in, independent of FOO's value being
-    set:
-
-        #define FOO asdfBAR_VALjkl
-
 Fails if any of the KEY=VALUE arguments aren't needed for processing the
-.h.cmake file, or if the .h.cmake file has unreplaces ${VAR} references after
+.h.cmake file, or if the .h.cmake file has unreplaced ${VAR} references after
 processing all values.
 """
 
@@ -70,9 +63,10 @@ def main():
         def repl(m):
             unused_values.discard(m.group(1))
             return values[m.group(1)]
+        in_line = var_re.sub(repl, in_line)
         if in_line.startswith('#cmakedefine01 '):
             _, var = in_line.split()
-            out_lines.append('#define %s %d\n' % (var, 1 if values[var] else 0))
+            in_line = '#define %s %d\n' % (var, 1 if values[var] else 0)
             unused_values.discard(var)
         elif in_line.startswith('#cmakedefine '):
             _, var = in_line.split(None, 1)
@@ -81,14 +75,11 @@ def main():
             except:
                 var, val = var.rstrip(), '\n'
             if values[var]:
-                out_lines.append('#define %s %s' % (var,
-                                                    var_re.sub(repl, val)))
+                in_line = '#define %s %s' % (var, val)
             else:
-                out_lines.append('/* #undef %s */\n' % var)
+                in_line = '/* #undef %s */\n' % var
             unused_values.discard(var)
-        else:
-            # In particular, handles `#define FOO ${FOO}` lines.
-            out_lines.append(var_re.sub(repl, in_line))
+        out_lines.append(in_line)
 
     if unused_values:
         print >>sys.stderr, 'Unused --values args:'




More information about the llvm-commits mailing list