From c964411764071ff9f89daeb4216283752f217057 Mon Sep 17 00:00:00 2001 From: Ramon Asuncion Date: Mon, 29 Sep 2025 19:35:06 -0700 Subject: [PATCH 1/4] Rework lit.cfg regex to avoid basename subshell in substituion Changed %target-build-swift-dylib\(([^)]+)\) to %target-build-swift-dylib\(([^)]+?)([^/()]+)\) Group 1 now captures the "prefix" and group 2 captures the final word Captured the basename directly in the regex instead of using a subshell since Lit's internal shell does not support --- test/lit.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/lit.cfg b/test/lit.cfg index 344a12183c8a5..b4831d86878e0 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -1665,8 +1665,8 @@ if run_vendor == 'apple': config.target_build_swift_dylib = SubstituteCaptures( f"{escape_for_substitute_captures(config.target_build_swift)}" - r" -parse-as-library -emit-library -o '\1'" - r" -Xlinker -install_name -Xlinker @executable_path/$(basename '\1')" + r" -parse-as-library -emit-library -o '\1\2'" + r" -Xlinker -install_name -Xlinker @executable_path/\2" ) config.target_add_rpath = SubstituteCaptures(r'-Xlinker -rpath -Xlinker \1') @@ -2938,7 +2938,7 @@ config.substitutions.append(('%target-run-stdlib-swift', config.target_run_stdli config.substitutions.append(('%target-repl-run-simple-swift', subst_target_repl_run_simple_swift)) config.substitutions.append(('%target-run', config.target_run)) config.substitutions.append(('%target-jit-run', subst_target_jit_run)) -config.substitutions.append(('%target-build-swift-dylib\(([^)]+)\)', config.target_build_swift_dylib)) +config.substitutions.append(('%target-build-swift-dylib\(([^)]+?)([^/()]+)\)', config.target_build_swift_dylib)) config.substitutions.append(('%target-codesign', config.target_codesign)) config.substitutions.append(('%target-build-swift', config.target_build_swift)) config.substitutions.append(('%target-clang', config.target_clang)) From dc879cc25ec78d538fd62036b1640019ecb8bcb5 Mon Sep 17 00:00:00 2001 From: Ramon Asuncion Date: Tue, 30 Sep 2025 06:35:28 -0700 Subject: [PATCH 2/4] Update %target-build-swift-dylib regex to handle backslashes Supports Windows-style paths --- test/lit.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lit.cfg b/test/lit.cfg index b4831d86878e0..c7883415d19ca 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -2938,7 +2938,7 @@ config.substitutions.append(('%target-run-stdlib-swift', config.target_run_stdli config.substitutions.append(('%target-repl-run-simple-swift', subst_target_repl_run_simple_swift)) config.substitutions.append(('%target-run', config.target_run)) config.substitutions.append(('%target-jit-run', subst_target_jit_run)) -config.substitutions.append(('%target-build-swift-dylib\(([^)]+?)([^/()]+)\)', config.target_build_swift_dylib)) +config.substitutions.append(('%target-build-swift-dylib\(([^)]+?)([^/\\()]+)\)', config.target_build_swift_dylib)) config.substitutions.append(('%target-codesign', config.target_codesign)) config.substitutions.append(('%target-build-swift', config.target_build_swift)) config.substitutions.append(('%target-clang', config.target_clang)) From c85f8b7eb11708dd3de9771ac8063099530de2dc Mon Sep 17 00:00:00 2001 From: Ramon Asuncion Date: Tue, 30 Sep 2025 06:37:53 -0700 Subject: [PATCH 3/4] Add comments explaining regex capture groups in lit.cfg --- test/lit.cfg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/lit.cfg b/test/lit.cfg index c7883415d19ca..2245d64d39f3e 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -2938,6 +2938,9 @@ config.substitutions.append(('%target-run-stdlib-swift', config.target_run_stdli config.substitutions.append(('%target-repl-run-simple-swift', subst_target_repl_run_simple_swift)) config.substitutions.append(('%target-run', config.target_run)) config.substitutions.append(('%target-jit-run', subst_target_jit_run)) +# Capture groups: +# \1 = path before the file name (non-greedy) +# \2 = file name (last component, no slashes or parentheses) config.substitutions.append(('%target-build-swift-dylib\(([^)]+?)([^/\\()]+)\)', config.target_build_swift_dylib)) config.substitutions.append(('%target-codesign', config.target_codesign)) config.substitutions.append(('%target-build-swift', config.target_build_swift)) From 3a21c45e1b1da5381ca98d0bbd1eb39f3b18b58f Mon Sep 17 00:00:00 2001 From: Ramon Asuncion Date: Tue, 30 Sep 2025 09:18:30 -0700 Subject: [PATCH 4/4] Fix output path substitution in %target-build-swift-dylib --- test/lit.cfg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/lit.cfg b/test/lit.cfg index 2245d64d39f3e..8cac70321fcce 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -1764,7 +1764,7 @@ elif run_os in ['windows-msvc']: subst_target_swift_frontend_mock_sdk_after = '' config.target_build_swift_dylib = \ - SubstituteCaptures(r"%s -parse-as-library -emit-library -o \1" % ( + SubstituteCaptures(r"%s -parse-as-library -emit-library -o \1\2" % ( escape_for_substitute_captures(config.target_build_swift))) config.target_add_rpath = r'' @@ -1902,7 +1902,7 @@ elif (run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'openbsd', 'windows- config.target_codesign = "echo" config.target_build_swift_dylib = SubstituteCaptures( f"{escape_for_substitute_captures(config.target_build_swift)}" - r" -parse-as-library -emit-library -o '\1'" + r" -parse-as-library -emit-library -o '\1\2'" ) config.target_add_rpath = SubstituteCaptures(r'-Xlinker -rpath -Xlinker \1') config.target_swift_frontend = ( @@ -1996,7 +1996,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android': config.target_codesign = "echo" config.target_build_swift_dylib = SubstituteCaptures( f"{escape_for_substitute_captures(config.target_build_swift)}" - r" -parse-as-library -emit-library -o '\1'" + r" -parse-as-library -emit-library -o '\1\2'" ) config.target_add_rpath = SubstituteCaptures(r'-Xlinker -rpath -Xlinker \1') config.target_swift_frontend = ' '.join([ @@ -2083,7 +2083,7 @@ elif kIsWASI: config.target_codesign = "echo" config.target_build_swift_dylib = SubstituteCaptures( f"{escape_for_substitute_captures(config.target_build_swift)}" - r" -parse-as-library -emit-library -static -o '\1'" + r" -parse-as-library -emit-library -static -o '\1\2'" ) config.target_add_rpath = '' config.target_swift_frontend = ' '.join([ @@ -2167,7 +2167,7 @@ elif config.external_embedded_platform: config.target_codesign = "echo" config.target_build_swift_dylib = SubstituteCaptures( f"{escape_for_substitute_captures(config.target_build_swift)}" - r" -parse-as-library -emit-library -static -o '\1'" + r" -parse-as-library -emit-library -static -o '\1\2'" ) config.target_add_rpath = '' config.target_swift_frontend = ' '.join([