@@ -16,6 +16,14 @@ import TSCBasic
16
16
import XCTest
17
17
import TestUtilities
18
18
19
+ private var testInputsPath : AbsolutePath = {
20
+ var root : AbsolutePath = AbsolutePath ( #file)
21
+ while root. basename != " Tests " {
22
+ root = root. parentDirectory
23
+ }
24
+ return root. parentDirectory. appending ( component: " TestInputs " )
25
+ } ( )
26
+
19
27
/// Check that an explicit module build job contains expected inputs and options
20
28
private func checkExplicitModuleBuildJob( job: Job ,
21
29
pcmArgs: [ String ] ,
@@ -305,18 +313,21 @@ final class ExplicitModuleBuildTests: XCTestCase {
305
313
$0 <<< " import G; "
306
314
}
307
315
308
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
309
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
310
- let testInputsPath = packageRootPath + " /TestInputs "
311
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
312
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
316
+ let cHeadersPath : String =
317
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
318
+ . appending ( component: " CHeaders " )
319
+ . pathString
320
+ let swiftModuleInterfacesPath : String =
321
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
322
+ . appending ( component: " Swift " )
323
+ . pathString
313
324
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
314
325
var driver = try Driver ( args: [ " swiftc " ,
315
326
" -target " , " x86_64-apple-macosx11.0 " ,
316
- " -I " , cHeadersPath,
317
- " -I " , swiftModuleInterfacesPath,
327
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
328
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
318
329
" -explicit-module-build " ,
319
- main. pathString] + sdkArgumentsForTesting)
330
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting)
320
331
321
332
let jobs = try driver. planBuild ( )
322
333
// Figure out which Triples to use.
@@ -453,18 +464,21 @@ final class ExplicitModuleBuildTests: XCTestCase {
453
464
$0 <<< " import C \n "
454
465
}
455
466
456
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
457
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
458
- let testInputsPath = packageRootPath + " /TestInputs "
459
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
460
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
467
+ let cHeadersPath : String =
468
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
469
+ . appending ( component: " CHeaders " )
470
+ . pathString
471
+ let swiftModuleInterfacesPath : String =
472
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
473
+ . appending ( component: " Swift " )
474
+ . pathString
461
475
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
462
476
var driver = try Driver ( args: [ " swift " ,
463
477
" -target " , " x86_64-apple-macosx11.0 " ,
464
- " -I " , cHeadersPath,
465
- " -I " , swiftModuleInterfacesPath,
478
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
479
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
466
480
" -explicit-module-build " ,
467
- main. pathString] + sdkArgumentsForTesting)
481
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting)
468
482
469
483
let jobs = try driver. planBuild ( )
470
484
@@ -585,22 +599,25 @@ final class ExplicitModuleBuildTests: XCTestCase {
585
599
$0 <<< " import G; "
586
600
}
587
601
588
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
589
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
590
- let testInputsPath = packageRootPath + " /TestInputs "
591
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
592
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
602
+ let cHeadersPath : String =
603
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
604
+ . appending ( component: " CHeaders " )
605
+ . pathString
606
+ let swiftModuleInterfacesPath : String =
607
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
608
+ . appending ( component: " Swift " )
609
+ . pathString
593
610
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
594
611
var driver = try Driver ( args: [ " swiftc " ,
595
- " -I " , cHeadersPath,
596
- " -I " , swiftModuleInterfacesPath,
612
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
613
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
597
614
" -explicit-module-build " ,
598
- " -working-directory " , path. pathString,
615
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
599
616
// TODO: clang targets need to be taught
600
617
// how to work with explicit modules
601
618
// properly.
602
619
" -disable-clang-target " ,
603
- main. pathString] + sdkArgumentsForTesting,
620
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
604
621
env: ProcessEnv . vars)
605
622
let jobs = try driver. planBuild ( )
606
623
try driver. run ( jobs: jobs)
@@ -624,6 +641,26 @@ final class ExplicitModuleBuildTests: XCTestCase {
624
641
. appending ( component: " lib " )
625
642
. appending ( component: " swift " )
626
643
return ( stdLibPath, stdLibPath. appending ( component: " shims " ) )
644
+ } else if driver. targetTriple. isWindows {
645
+ if let sdkroot = try driver. toolchain. defaultSDKPath ( driver. targetTriple) {
646
+ return ( sdkroot
647
+ . appending ( component: " usr " )
648
+ . appending ( component: " lib " )
649
+ . appending ( component: " swift " ) ,
650
+ sdkroot
651
+ . appending ( component: " usr " )
652
+ . appending ( component: " lib " )
653
+ . appending ( component: " swift " )
654
+ . appending ( component: " shims " ) )
655
+ }
656
+ return ( toolchainRootPath
657
+ . appending ( component: " lib " )
658
+ . appending ( component: " swift " )
659
+ . appending ( component: driver. targetTriple. osNameUnversioned) ,
660
+ toolchainRootPath
661
+ . appending ( component: " lib " )
662
+ . appending ( component: " swift " )
663
+ . appending ( component: " shims " ) )
627
664
} else {
628
665
return ( toolchainRootPath. appending ( component: " lib " )
629
666
. appending ( component: " swift " )
@@ -675,19 +712,22 @@ final class ExplicitModuleBuildTests: XCTestCase {
675
712
$0 <<< " import E; "
676
713
$0 <<< " import G; "
677
714
}
678
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
679
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
680
- let testInputsPath = packageRootPath + " /TestInputs "
681
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
682
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
715
+ let cHeadersPath : String =
716
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
717
+ . appending ( component: " CHeaders " )
718
+ . pathString
719
+ let swiftModuleInterfacesPath : String =
720
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
721
+ . appending ( component: " Swift " )
722
+ . pathString
683
723
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
684
724
let scannerCommand = [ " -scan-dependencies " ,
685
725
" -import-prescan " ,
686
- " -I " , cHeadersPath,
687
- " -I " , swiftModuleInterfacesPath,
688
- " -I " , stdLibPath. description,
689
- " -I " , shimsPath. description,
690
- main. pathString] + sdkArgumentsForTesting
726
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
727
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
728
+ " -I " , stdLibPath. description. nativePathString ( ) . escaped ( ) ,
729
+ " -I " , shimsPath. description. nativePathString ( ) . escaped ( ) ,
730
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting
691
731
692
732
let imports =
693
733
try ! dependencyOracle. getImports ( workingDirectory: path,
@@ -710,8 +750,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
710
750
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
711
751
var driver = try Driver ( args: [ " swiftc " ,
712
752
" -explicit-module-build " ,
713
- " -working-directory " , path. pathString,
714
- main. pathString] + lotsOfInputs + sdkArgumentsForTesting,
753
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
754
+ main. pathString. escaped ( ) ] + lotsOfInputs + sdkArgumentsForTesting,
715
755
env: ProcessEnv . vars)
716
756
let scannerJob = try driver. dependencyScanningJob ( )
717
757
@@ -749,20 +789,24 @@ final class ExplicitModuleBuildTests: XCTestCase {
749
789
$0 <<< " import E; "
750
790
$0 <<< " import G; "
751
791
}
752
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
753
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
754
- let testInputsPath = packageRootPath + " /TestInputs "
755
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
756
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
792
+
793
+ let cHeadersPath : String =
794
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
795
+ . appending ( component: " CHeaders " )
796
+ . pathString
797
+ let swiftModuleInterfacesPath : String =
798
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
799
+ . appending ( component: " Swift " )
800
+ . pathString
757
801
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
758
802
var driver = try Driver ( args: [ " swiftc " ,
759
- " -I " , cHeadersPath,
760
- " -I " , swiftModuleInterfacesPath,
803
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
804
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
761
805
" -import-objc-header " ,
762
806
" -explicit-module-build " ,
763
- " -working-directory " , path. pathString,
807
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
764
808
" -disable-clang-target " ,
765
- main. pathString] + sdkArgumentsForTesting,
809
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
766
810
env: ProcessEnv . vars)
767
811
let resolver = try ArgsResolver ( fileSystem: localFileSystem)
768
812
var scannerCommand = try driver. dependencyScannerInvocationCommand ( ) . 1 . map { try resolver. resolve ( $0) }
@@ -785,6 +829,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
785
829
if hostTriple. isMacOSX,
786
830
hostTriple. version ( for: . macOS) >= Triple . Version ( 11 , 0 , 0 ) {
787
831
expectedNumberOfDependencies = 11
832
+ } else if driver. targetTriple. isWindows {
833
+ expectedNumberOfDependencies = 13
788
834
} else {
789
835
expectedNumberOfDependencies = 12
790
836
}
@@ -833,19 +879,23 @@ final class ExplicitModuleBuildTests: XCTestCase {
833
879
$0 <<< " import E; "
834
880
$0 <<< " import G; "
835
881
}
836
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
837
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
838
- let testInputsPath = packageRootPath + " /TestInputs "
839
- let cHeadersPath : String = testInputsPath + " /ExplicitModuleBuilds/CHeaders "
840
- let swiftModuleInterfacesPath : String = testInputsPath + " /ExplicitModuleBuilds/Swift "
882
+
883
+ let cHeadersPath : String =
884
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
885
+ . appending ( component: " CHeaders " )
886
+ . pathString
887
+ let swiftModuleInterfacesPath : String =
888
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
889
+ . appending ( component: " Swift " )
890
+ . pathString
841
891
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
842
892
var driver = try Driver ( args: [ " swiftc " ,
843
- " -I " , cHeadersPath,
844
- " -I " , swiftModuleInterfacesPath,
893
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
894
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
845
895
" -explicit-module-build " ,
846
- " -working-directory " , path. pathString,
896
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
847
897
" -disable-clang-target " ,
848
- main. pathString] + sdkArgumentsForTesting,
898
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
849
899
env: ProcessEnv . vars)
850
900
let resolver = try ArgsResolver ( fileSystem: localFileSystem)
851
901
var scannerCommand = try driver. dependencyScannerInvocationCommand ( ) . 1 . map { try resolver. resolve ( $0) }
@@ -960,10 +1010,9 @@ final class ExplicitModuleBuildTests: XCTestCase {
960
1010
job. outputs [ 0 ] . file. basenameWithoutExt == basenameWithoutExt
961
1011
}
962
1012
}
963
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
964
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
965
- let testInputsPath = packageRootPath + " /TestInputs "
966
- let mockSDKPath : String = testInputsPath + " /mock-sdk.sdk "
1013
+
1014
+ let mockSDKPath : String =
1015
+ testInputsPath. appending ( component: " mock-sdk.sdk " ) . pathString
967
1016
let diagnosticEnging = DiagnosticsEngine ( )
968
1017
let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, diagnosticEnging)
969
1018
let interfaceMap = try collector. collectSwiftInterfaceMap ( )
@@ -1137,11 +1186,10 @@ final class ExplicitModuleBuildTests: XCTestCase {
1137
1186
XCTAssertTrue ( current. file != baseline. file)
1138
1187
XCTAssertTrue ( current. file. basename == baseline. file. basename)
1139
1188
}
1140
- let packageRootPath = URL ( fileURLWithPath: #file) . pathComponents
1141
- . prefix ( while: { $0 != " Tests " } ) . joined ( separator: " / " ) . dropFirst ( )
1142
- let testInputsPath = packageRootPath + " /TestInputs "
1143
- let mockSDKPath : String = testInputsPath + " /mock-sdk.sdk "
1144
- let baselineABIPath : String = testInputsPath + " /ABIBaselines "
1189
+ let mockSDKPath : String =
1190
+ testInputsPath. appending ( component: " mock-sdk.sdk " ) . pathString
1191
+ let baselineABIPath : String =
1192
+ testInputsPath. appending ( component: " ABIBaselines " ) . pathString
1145
1193
let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, DiagnosticsEngine ( ) )
1146
1194
let interfaceMap = try collector. collectSwiftInterfaceMap ( )
1147
1195
try withTemporaryDirectory { path in
0 commit comments