@@ -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,24 @@ 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 ( compnent: " CHeaders " )
605
+ . pathString
606
+ let swiftModuleInterfacesPath : String =
607
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
608
+ . appending ( component: " Swift " )
593
609
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
594
610
var driver = try Driver ( args: [ " swiftc " ,
595
- " -I " , cHeadersPath,
596
- " -I " , swiftModuleInterfacesPath,
611
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
612
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
597
613
" -explicit-module-build " ,
598
- " -working-directory " , path. pathString,
614
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
599
615
// TODO: clang targets need to be taught
600
616
// how to work with explicit modules
601
617
// properly.
602
618
" -disable-clang-target " ,
603
- main. pathString] + sdkArgumentsForTesting,
619
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
604
620
env: ProcessEnv . vars)
605
621
let jobs = try driver. planBuild ( )
606
622
try driver. run ( jobs: jobs)
@@ -624,6 +640,26 @@ final class ExplicitModuleBuildTests: XCTestCase {
624
640
. appending ( component: " lib " )
625
641
. appending ( component: " swift " )
626
642
return ( stdLibPath, stdLibPath. appending ( component: " shims " ) )
643
+ } else if driver. targetTriple. isWindows {
644
+ if let sdkroot = try driver. toolchain. defaultSDKPath ( driver. targetTriple) {
645
+ return ( sdkroot
646
+ . appending ( component: " usr " )
647
+ . appending ( component: " lib " )
648
+ . appending ( component: " swift " ) ,
649
+ sdkroot
650
+ . appending ( component: " usr " )
651
+ . appending ( component: " lib " )
652
+ . appending ( component: " swift " )
653
+ . appending ( component: " shims " ) )
654
+ }
655
+ return ( toolchainRootPath
656
+ . appending ( component: " lib " )
657
+ . appending ( component: " swift " )
658
+ . appending ( component: driver. targetTriple. osNameUnversioned) ,
659
+ toolchainRootPath
660
+ . appending ( component: " lib " )
661
+ . appending ( component: " swift " )
662
+ . appending ( component: " shims " ) )
627
663
} else {
628
664
return ( toolchainRootPath. appending ( component: " lib " )
629
665
. appending ( component: " swift " )
@@ -675,19 +711,22 @@ final class ExplicitModuleBuildTests: XCTestCase {
675
711
$0 <<< " import E; "
676
712
$0 <<< " import G; "
677
713
}
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 "
714
+ let cHeadersPath : String =
715
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
716
+ . appending ( component: " CHeaders " )
717
+ . pathString
718
+ let swiftModuleInterfacesPath : String =
719
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
720
+ . appending ( component: " Swift " )
721
+ . pathString
683
722
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
684
723
let scannerCommand = [ " -scan-dependencies " ,
685
724
" -import-prescan " ,
686
- " -I " , cHeadersPath,
687
- " -I " , swiftModuleInterfacesPath,
688
- " -I " , stdLibPath. description,
689
- " -I " , shimsPath. description,
690
- main. pathString] + sdkArgumentsForTesting
725
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
726
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
727
+ " -I " , stdLibPath. description. nativePathString ( ) . escaped ( ) ,
728
+ " -I " , shimsPath. description. nativePathString ( ) . escaped ( ) ,
729
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting
691
730
692
731
let imports =
693
732
try ! dependencyOracle. getImports ( workingDirectory: path,
@@ -710,8 +749,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
710
749
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
711
750
var driver = try Driver ( args: [ " swiftc " ,
712
751
" -explicit-module-build " ,
713
- " -working-directory " , path. pathString,
714
- main. pathString] + lotsOfInputs + sdkArgumentsForTesting,
752
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
753
+ main. pathString. escaped ( ) ] + lotsOfInputs + sdkArgumentsForTesting,
715
754
env: ProcessEnv . vars)
716
755
let scannerJob = try driver. dependencyScanningJob ( )
717
756
@@ -749,20 +788,24 @@ final class ExplicitModuleBuildTests: XCTestCase {
749
788
$0 <<< " import E; "
750
789
$0 <<< " import G; "
751
790
}
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 "
791
+
792
+ let cHeadersPath : String =
793
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
794
+ . appending ( component: " CHeaders " )
795
+ . pathString
796
+ let swiftModuleInterfacesPath : String =
797
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
798
+ . appending ( component: " Swift " )
799
+ . pathString
757
800
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
758
801
var driver = try Driver ( args: [ " swiftc " ,
759
- " -I " , cHeadersPath,
760
- " -I " , swiftModuleInterfacesPath,
802
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
803
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
761
804
" -import-objc-header " ,
762
805
" -explicit-module-build " ,
763
- " -working-directory " , path. pathString,
806
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
764
807
" -disable-clang-target " ,
765
- main. pathString] + sdkArgumentsForTesting,
808
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
766
809
env: ProcessEnv . vars)
767
810
let resolver = try ArgsResolver ( fileSystem: localFileSystem)
768
811
var scannerCommand = try driver. dependencyScannerInvocationCommand ( ) . 1 . map { try resolver. resolve ( $0) }
@@ -785,6 +828,8 @@ final class ExplicitModuleBuildTests: XCTestCase {
785
828
if hostTriple. isMacOSX,
786
829
hostTriple. version ( for: . macOS) >= Triple . Version ( 11 , 0 , 0 ) {
787
830
expectedNumberOfDependencies = 11
831
+ } else if driver. targetTriple. isWindows {
832
+ expectedNumberOfDependencies = 13
788
833
} else {
789
834
expectedNumberOfDependencies = 12
790
835
}
@@ -833,19 +878,23 @@ final class ExplicitModuleBuildTests: XCTestCase {
833
878
$0 <<< " import E; "
834
879
$0 <<< " import G; "
835
880
}
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 "
881
+
882
+ let cHeadersPath : String =
883
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
884
+ . appending ( component: " CHeaders " )
885
+ . pathString
886
+ let swiftModuleInterfacesPath : String =
887
+ testInputsPath. appending ( component: " ExplicitModuleBuilds " )
888
+ . appending ( component: " Swift " )
889
+ . pathString
841
890
let sdkArgumentsForTesting = ( try ? Driver . sdkArgumentsForTesting ( ) ) ?? [ ]
842
891
var driver = try Driver ( args: [ " swiftc " ,
843
- " -I " , cHeadersPath,
844
- " -I " , swiftModuleInterfacesPath,
892
+ " -I " , cHeadersPath. nativePathString ( ) . escaped ( ) ,
893
+ " -I " , swiftModuleInterfacesPath. nativePathString ( ) . escaped ( ) ,
845
894
" -explicit-module-build " ,
846
- " -working-directory " , path. pathString,
895
+ " -working-directory " , path. pathString. nativePathString ( ) . escaped ( ) ,
847
896
" -disable-clang-target " ,
848
- main. pathString] + sdkArgumentsForTesting,
897
+ main. pathString. escaped ( ) ] + sdkArgumentsForTesting,
849
898
env: ProcessEnv . vars)
850
899
let resolver = try ArgsResolver ( fileSystem: localFileSystem)
851
900
var scannerCommand = try driver. dependencyScannerInvocationCommand ( ) . 1 . map { try resolver. resolve ( $0) }
@@ -960,10 +1009,9 @@ final class ExplicitModuleBuildTests: XCTestCase {
960
1009
job. outputs [ 0 ] . file. basenameWithoutExt == basenameWithoutExt
961
1010
}
962
1011
}
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 "
1012
+
1013
+ let mockSDKPath : String =
1014
+ testInputsPath. appending ( component: " mock-sdk.sdk " ) . pathString
967
1015
let diagnosticEnging = DiagnosticsEngine ( )
968
1016
let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, diagnosticEnging)
969
1017
let interfaceMap = try collector. collectSwiftInterfaceMap ( )
@@ -1137,11 +1185,10 @@ final class ExplicitModuleBuildTests: XCTestCase {
1137
1185
XCTAssertTrue ( current. file != baseline. file)
1138
1186
XCTAssertTrue ( current. file. basename == baseline. file. basename)
1139
1187
}
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 "
1188
+ let mockSDKPath : String =
1189
+ testInputsPath. appending ( component: " mock-sdk.sdk " ) . pathString
1190
+ let baselineABIPath : String =
1191
+ testInputsPath. appending ( component: " ABIBaselines " ) . pathString
1145
1192
let collector = try SDKPrebuiltModuleInputsCollector ( VirtualPath ( path: mockSDKPath) . absolutePath!, DiagnosticsEngine ( ) )
1146
1193
let interfaceMap = try collector. collectSwiftInterfaceMap ( )
1147
1194
try withTemporaryDirectory { path in
0 commit comments