From 3c51106fadc20be78cd3a39852064a505fcd62ae Mon Sep 17 00:00:00 2001 From: Tristan Labelle Date: Fri, 9 Jun 2023 16:41:05 -0400 Subject: [PATCH 1/4] Fix tests on Windows CI with vs2022 --- .../Dependencies/one-way-merge-module-fine.swift | 4 +++- .../prefer-local-module-to-sdk-framework.swift | 14 +++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/test/Driver/Dependencies/one-way-merge-module-fine.swift b/test/Driver/Dependencies/one-way-merge-module-fine.swift index 0dddf0e783adf..951ed09b9af5d 100644 --- a/test/Driver/Dependencies/one-way-merge-module-fine.swift +++ b/test/Driver/Dependencies/one-way-merge-module-fine.swift @@ -12,7 +12,9 @@ // CHECK-FIRST-DAG: Produced master.swiftmodule // swift-driver checks existence of all outputs -// RUN: touch -t 201401240006 %t/{main,other,master}.swift{module,doc,sourceinfo} +// RUN: touch -t 201401240006 %t/*.swiftmodule +// RUN: touch -t 201401240006 %t/*.swiftdoc +// RUN: touch -t 201401240006 %t/*.swiftsourceinfo // RUN: cd %t && %swiftc_driver -driver-use-frontend-path "%{python.unquoted};%S/Inputs/update-dependencies.py;%swift-dependency-tool" -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -emit-module-path %t/master.swiftmodule -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-SECOND %s diff --git a/test/ModuleInterface/ModuleCache/prefer-local-module-to-sdk-framework.swift b/test/ModuleInterface/ModuleCache/prefer-local-module-to-sdk-framework.swift index 817263c769088..9c6e7a2cb59a7 100644 --- a/test/ModuleInterface/ModuleCache/prefer-local-module-to-sdk-framework.swift +++ b/test/ModuleInterface/ModuleCache/prefer-local-module-to-sdk-framework.swift @@ -1,26 +1,26 @@ -// RUN: %empty-directory(%t/BuildDir/Lib.framework/Modules/Lib.swiftmodule) -// RUN: %empty-directory(%t/SecondBuildDir/Lib.framework/Modules/Lib.swiftmodule) +// RUN: %empty-directory(%t/Build1/Lib.framework/Modules/Lib.swiftmodule) +// RUN: %empty-directory(%t/Build2/Lib.framework/Modules/Lib.swiftmodule) // RUN: %empty-directory(%t/ModuleCache) // RUN: echo 'public func showsUpInBothPlaces() {}' > %t/Lib.swift // 1. Create a .swiftinterface file containing just one API, and put it inside a second build dir (without a .swiftmodule) -// RUN: %target-swift-frontend -typecheck %t/Lib.swift -emit-module-interface-path %t/SecondBuildDir/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name -module-name Lib +// RUN: %target-swift-frontend -typecheck %t/Lib.swift -emit-module-interface-path %t/Build2/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name -module-name Lib // 2. Add a new API to the module, and compile just the serialized version in the build dir. // RUN: echo 'public func onlyInTheCompiledModule() {}' >> %t/Lib.swift -// RUN: %target-swift-frontend -emit-module %t/Lib.swift -o %t/BuildDir/Lib.framework/Modules/Lib.swiftmodule/%target-swiftmodule-name -emit-module-interface-path %t/BuildDir/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name -module-name Lib +// RUN: %target-swift-frontend -emit-module %t/Lib.swift -o %t/Build1/Lib.framework/Modules/Lib.swiftmodule/%target-swiftmodule-name -emit-module-interface-path %t/Build1/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name -module-name Lib // 3. Make sure when we compile this test file, we can access both APIs since we'll // load the compiled .swiftmodule instead of the .swiftinterface in the SDK. -// RUN: %target-swift-frontend -typecheck %s -F %t/BuildDir -F %t/SecondBuildDir -module-cache-path %t/ModuleCache +// RUN: %target-swift-frontend -typecheck %s -F %t/Build1 -F %t/Build2 -module-cache-path %t/ModuleCache // 4. Make sure we didn't compile any .swiftinterfaces into the module cache. // RUN: ls %t/ModuleCache | not grep 'swiftmodule' // 5. This should also work if the swiftinterface isn't present in the first build dir. -// RUN: rm %t/BuildDir/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name -// RUN: %target-swift-frontend -typecheck %s -F %t/BuildDir -F %t/SecondBuildDir -module-cache-path %t/ModuleCache +// RUN: rm %t/Build1/Lib.framework/Modules/Lib.swiftmodule/%target-swiftinterface-name +// RUN: %target-swift-frontend -typecheck %s -F %t/Build1 -F %t/Build2 -module-cache-path %t/ModuleCache // 6. Make sure we /still/ didn't compile any .swiftinterfaces into the module cache. // RUN: ls %t/ModuleCache | not grep 'swiftmodule' From 6308cd08343cf8c2cad518a2c869b60f9b1e61b2 Mon Sep 17 00:00:00 2001 From: Tristan Labelle Date: Mon, 12 Jun 2023 14:21:34 -0400 Subject: [PATCH 2/4] Migrate test to touch.py --- test/Driver/Dependencies/Inputs/touch.py | 9 ++++++--- test/Driver/Dependencies/one-way-merge-module-fine.swift | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/test/Driver/Dependencies/Inputs/touch.py b/test/Driver/Dependencies/Inputs/touch.py index 3537ee2d8ad18..fec6ac5bfd98d 100755 --- a/test/Driver/Dependencies/Inputs/touch.py +++ b/test/Driver/Dependencies/Inputs/touch.py @@ -15,6 +15,7 @@ # # ---------------------------------------------------------------------------- +import glob import os import sys @@ -23,6 +24,8 @@ # Update the output file mtime, or create it if necessary. # From http://stackoverflow.com/a/1160227. -for outputFile in sys.argv[2:]: - with open(outputFile, 'a'): - os.utime(outputFile, (timeVal, timeVal)) +for filePathPattern in sys.argv[2:]: + # Support glob patterns if the shell did not expand them (like cmd.exe) + for filePath in glob.glob(filePathPattern): + with open(filePath, 'a'): + os.utime(filePath, (timeVal, timeVal)) diff --git a/test/Driver/Dependencies/one-way-merge-module-fine.swift b/test/Driver/Dependencies/one-way-merge-module-fine.swift index 951ed09b9af5d..265355e2fc94a 100644 --- a/test/Driver/Dependencies/one-way-merge-module-fine.swift +++ b/test/Driver/Dependencies/one-way-merge-module-fine.swift @@ -2,7 +2,7 @@ // RUN: %empty-directory(%t) // RUN: cp -r %S/Inputs/one-way-fine/* %t -// RUN: touch -t 201401240005 %t/* +// RUN: %{python} %S/Inputs/touch.py 201401240005 %t/* // RUN: cd %t && %swiftc_driver -driver-use-frontend-path "%{python.unquoted};%S/Inputs/update-dependencies.py;%swift-dependency-tool" -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -emit-module-path %t/master.swiftmodule -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s @@ -12,9 +12,9 @@ // CHECK-FIRST-DAG: Produced master.swiftmodule // swift-driver checks existence of all outputs -// RUN: touch -t 201401240006 %t/*.swiftmodule -// RUN: touch -t 201401240006 %t/*.swiftdoc -// RUN: touch -t 201401240006 %t/*.swiftsourceinfo +// RUN: %{python} %S/Inputs/touch.py 201401240006 %t/*.swiftmodule +// RUN: %{python} %S/Inputs/touch.py 201401240006 %t/*.swiftdoc +// RUN: %{python} %S/Inputs/touch.py 201401240006 %t/*.swiftsourceinfo // RUN: cd %t && %swiftc_driver -driver-use-frontend-path "%{python.unquoted};%S/Inputs/update-dependencies.py;%swift-dependency-tool" -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -emit-module-path %t/master.swiftmodule -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-SECOND %s From 0d5aa7fcbea03fe383cfdd653fb951fe84e052eb Mon Sep 17 00:00:00 2001 From: Tristan Labelle Date: Mon, 12 Jun 2023 14:27:03 -0400 Subject: [PATCH 3/4] Fix non-glob paths in touch.py --- test/Driver/Dependencies/Inputs/touch.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/Driver/Dependencies/Inputs/touch.py b/test/Driver/Dependencies/Inputs/touch.py index fec6ac5bfd98d..ad517391b13a3 100755 --- a/test/Driver/Dependencies/Inputs/touch.py +++ b/test/Driver/Dependencies/Inputs/touch.py @@ -26,6 +26,12 @@ # From http://stackoverflow.com/a/1160227. for filePathPattern in sys.argv[2:]: # Support glob patterns if the shell did not expand them (like cmd.exe) - for filePath in glob.glob(filePathPattern): + if glob.escape(filePathPattern) == filePathPattern: + # Not a glob pattern. We should touch that specific file. + filePaths = [ filePathPattern ] + else: + filePaths = glob.glob(filePathPattern) + + for filePath in filePaths: with open(filePath, 'a'): os.utime(filePath, (timeVal, timeVal)) From 11f34b7ec93cb56cd7b5b87f49f9bd37f0053da1 Mon Sep 17 00:00:00 2001 From: Tristan Labelle Date: Tue, 13 Jun 2023 10:28:42 -0400 Subject: [PATCH 4/4] Fix linting error --- test/Driver/Dependencies/Inputs/touch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Driver/Dependencies/Inputs/touch.py b/test/Driver/Dependencies/Inputs/touch.py index ad517391b13a3..85b0908984cec 100755 --- a/test/Driver/Dependencies/Inputs/touch.py +++ b/test/Driver/Dependencies/Inputs/touch.py @@ -28,7 +28,7 @@ # Support glob patterns if the shell did not expand them (like cmd.exe) if glob.escape(filePathPattern) == filePathPattern: # Not a glob pattern. We should touch that specific file. - filePaths = [ filePathPattern ] + filePaths = [filePathPattern] else: filePaths = glob.glob(filePathPattern)