[libcxx-commits] [PATCH] D111179: [libc++] Pickle substitutions to pass them to dsl.sh.py
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Oct 5 13:51:28 PDT 2021
ldionne updated this revision to Diff 377345.
ldionne retitled this revision from "[libc++] Print the decoded version of substitutions in dsl.sh.py" to "[libc++] Pickle substitutions to pass them to dsl.sh.py".
ldionne edited the summary of this revision.
ldionne added a comment.
Pickle substitutions
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111179/new/
https://reviews.llvm.org/D111179
Files:
libcxx/test/libcxx/selftest/dsl/dsl.sh.py
libcxx/test/libcxx/selftest/dsl/lit.local.cfg
Index: libcxx/test/libcxx/selftest/dsl/lit.local.cfg
===================================================================
--- libcxx/test/libcxx/selftest/dsl/lit.local.cfg
+++ libcxx/test/libcxx/selftest/dsl/lit.local.cfg
@@ -5,16 +5,14 @@
# substituting the directory. This way, the test itself can populate %T as it
# sees fit, and %{exec} will respect it.
#
-# To solve this problem, we add base64 encoded versions of substitutions just
-# in this directory. We then base64-decode them from the tests when we need to.
-# Another option would be to have a way to prevent expansion in Lit itself.
-import base64
-import lit.util
+# To solve this problem, we pickle the substitutions and base64 encode that
+# to pass it to the test, and we decode and unpickle the substitutions from
+# within the test.
+import base64, lit.util, pickle
base64Encode = lambda s: lit.util.to_string(base64.b64encode(lit.util.to_bytes(s)))
-escaped = [(k.replace('%{', '%{escaped_'), base64Encode(v)) for (k, v) in config.substitutions]
-config.substitutions.extend(escaped)
+escapedSubstitutions = base64Encode(pickle.dumps(config.substitutions))
+config.substitutions.append(('%{substitutions}', escapedSubstitutions))
# The tests in this directory need to run Python
-import pipes
-import sys
+import pipes, sys
config.substitutions.append(('%{python}', pipes.quote(sys.executable)))
Index: libcxx/test/libcxx/selftest/dsl/dsl.sh.py
===================================================================
--- libcxx/test/libcxx/selftest/dsl/dsl.sh.py
+++ libcxx/test/libcxx/selftest/dsl/dsl.sh.py
@@ -10,18 +10,12 @@
# Note: We prepend arguments with 'x' to avoid thinking there are too few
# arguments in case an argument is an empty string.
-# RUN: %{python} %s x%S \
-# RUN: x%T \
-# RUN: x%{escaped_exec} \
-# RUN: x%{escaped_cxx} \
-# RUN: x%{escaped_flags} \
-# RUN: x%{escaped_compile_flags} \
-# RUN: x%{escaped_link_flags}
-# END.
+# RUN: %{python} %s x%S x%T x%{substitutions}
import base64
import copy
import os
+import pickle
import platform
import subprocess
import sys
@@ -40,9 +34,14 @@
# Steal some parameters from the config running this test so that we can
# bootstrap our own TestingConfig.
args = list(map(lambda s: s[1:], sys.argv[1:8])) # Remove the leading 'x'
-SOURCE_ROOT, EXEC_PATH, EXEC, CXX, FLAGS, COMPILE_FLAGS, LINK_FLAGS = args
+SOURCE_ROOT, EXEC_PATH, SUBSTITUTIONS = args
sys.argv[1:8] = []
+# Decode the substitutions.
+SUBSTITUTIONS = pickle.loads(base64.b64decode(SUBSTITUTIONS))
+for s, sub in SUBSTITUTIONS:
+ print("Substitution '{}' is '{}'".format(s, sub))
+
class SetupConfigs(unittest.TestCase):
"""
Base class for the tests below -- it creates a fake TestingConfig.
@@ -69,14 +68,7 @@
self.config.test_source_root = SOURCE_ROOT
self.config.test_exec_root = EXEC_PATH
self.config.recursiveExpansionLimit = 10
- base64Decode = lambda s: lit.util.to_string(base64.b64decode(s))
- self.config.substitutions = [
- ('%{cxx}', base64Decode(CXX)),
- ('%{flags}', base64Decode(FLAGS)),
- ('%{compile_flags}', base64Decode(COMPILE_FLAGS)),
- ('%{link_flags}', base64Decode(LINK_FLAGS)),
- ('%{exec}', base64Decode(EXEC))
- ]
+ self.config.substitutions = copy.deepcopy(SUBSTITUTIONS)
def getSubstitution(self, substitution):
"""
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111179.377345.patch
Type: text/x-patch
Size: 3493 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20211005/d8a993f8/attachment-0001.bin>
More information about the libcxx-commits
mailing list