[PATCH] D55171: [gn build] Slightly simplify write_cmake_config.

Nico Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 1 17:03:32 PST 2018


thakis created this revision.
thakis added a reviewer: phosek.
Herald added a subscriber: mgorny.

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.)


https://reviews.llvm.org/D55171

Files:
  llvm/utils/gn/build/write_cmake_config.py


Index: llvm/utils/gn/build/write_cmake_config.py
===================================================================
--- llvm/utils/gn/build/write_cmake_config.py
+++ llvm/utils/gn/build/write_cmake_config.py
@@ -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 @@
         #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 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 @@
             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:'


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55171.176273.patch
Type: text/x-patch
Size: 3427 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181202/bb1f7fc6/attachment.bin>


More information about the llvm-commits mailing list