@@ -240,7 +240,7 @@ final class SwiftDriverTests: XCTestCase {
240240 // Test the combination of -c and -o includes the base output path.
241241 do {
242242 var driver = try Driver ( args: [ " swiftc " , " -c " , " foo.swift " , " -o " , " /some/output/path/bar.o " ] )
243- let plannedJobs = try driver. planBuild ( )
243+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
244244 XCTAssertEqual ( plannedJobs. count, 1 )
245245 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
246246 XCTAssertTrue ( plannedJobs [ 0 ] . commandLine. contains ( . path( try VirtualPath ( path: " /some/output/path/bar.o " ) ) ) )
@@ -410,7 +410,7 @@ final class SwiftDriverTests: XCTestCase {
410410
411411 func testStandardCompileJobs( ) throws {
412412 var driver1 = try Driver ( args: [ " swiftc " , " foo.swift " , " bar.swift " , " -module-name " , " Test " ] )
413- let plannedJobs = try driver1. planBuild ( )
413+ let plannedJobs = try driver1. planBuild ( ) . removingAutolinkExtractJobs ( )
414414 XCTAssertEqual ( plannedJobs. count, 3 )
415415 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 1 )
416416 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. first!. file, VirtualPath . temporary ( RelativePath ( " foo.o " ) ) )
@@ -1129,7 +1129,7 @@ final class SwiftDriverTests: XCTestCase {
11291129 func testBatchModeCompiles( ) throws {
11301130 do {
11311131 var driver1 = try Driver ( args: [ " swiftc " , " foo1.swift " , " bar1.swift " , " foo2.swift " , " bar2.swift " , " foo3.swift " , " bar3.swift " , " foo4.swift " , " bar4.swift " , " foo5.swift " , " bar5.swift " , " wibble.swift " , " -module-name " , " Test " , " -enable-batch-mode " , " -driver-batch-count " , " 3 " ] )
1132- let plannedJobs = try driver1. planBuild ( )
1132+ let plannedJobs = try driver1. planBuild ( ) . removingAutolinkExtractJobs ( )
11331133 XCTAssertEqual ( plannedJobs. count, 4 )
11341134 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 4 )
11351135 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. first!. file, VirtualPath . temporary ( RelativePath ( " foo1.o " ) ) )
@@ -1145,7 +1145,7 @@ final class SwiftDriverTests: XCTestCase {
11451145 // Test 1 partition results in 1 job
11461146 do {
11471147 var driver = try Driver ( args: [ " swiftc " , " -toolchain-stdlib-rpath " , " -module-cache-path " , " /tmp/clang-module-cache " , " -swift-version " , " 4 " , " -Xfrontend " , " -ignore-module-source-info " , " -module-name " , " batch " , " -enable-batch-mode " , " -j " , " 1 " , " -c " , " main.swift " , " lib.swift " ] )
1148- let plannedJobs = try driver. planBuild ( )
1148+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
11491149 XCTAssertEqual ( plannedJobs. count, 1 )
11501150 var count = 0
11511151 for arg in plannedJobs [ 0 ] . commandLine where arg == . flag( " -primary-file " ) {
@@ -1176,7 +1176,7 @@ final class SwiftDriverTests: XCTestCase {
11761176 " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " ,
11771177 " -module-name " , " Test " , " -num-threads " , " 4 "
11781178 ] )
1179- let plannedJobs = try driver1. planBuild ( )
1179+ let plannedJobs = try driver1. planBuild ( ) . removingAutolinkExtractJobs ( )
11801180 XCTAssertEqual ( plannedJobs. count, 2 )
11811181 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
11821182 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 3 )
@@ -1191,7 +1191,7 @@ final class SwiftDriverTests: XCTestCase {
11911191 // emit-module
11921192 do {
11931193 var driver = try Driver ( args: [ " swiftc " , " -module-name=ThisModule " , " -wmo " , " -num-threads " , " 4 " , " main.swift " , " multi-threaded.swift " , " -emit-module " , " -o " , " test.swiftmodule " ] )
1194- let plannedJobs = try driver. planBuild ( )
1194+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
11951195 XCTAssertEqual ( plannedJobs. count, 1 )
11961196 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
11971197 XCTAssertEqual ( plannedJobs [ 0 ] . inputs. count, 2 )
@@ -1218,7 +1218,7 @@ final class SwiftDriverTests: XCTestCase {
12181218 " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " , " -module-name " , " Test " ,
12191219 " -num-threads " , " 4 " , " -output-file-map " , file. path. pathString, " -emit-module-interface "
12201220 ] )
1221- let plannedJobs = try driver1. planBuild ( )
1221+ let plannedJobs = try driver1. planBuild ( ) . removingAutolinkExtractJobs ( )
12221222 XCTAssertEqual ( plannedJobs. count, 2 )
12231223 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
12241224 XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 4 )
@@ -1310,52 +1310,49 @@ final class SwiftDriverTests: XCTestCase {
13101310 }
13111311
13121312 func testModuleWrapJob( ) throws {
1313+ // FIXME: These tests will fail when run on macOS, because
1314+ // swift-autolink-extract is not present
1315+ #if os(Linux)
13131316 do {
13141317 var driver = try Driver ( args: [ " swiftc " , " -target " , " x86_64-unknown-linux-gnu " , " -g " , " foo.swift " ] )
13151318 let plannedJobs = try driver. planBuild ( )
1316- XCTAssertEqual ( plannedJobs. count, 4 )
1317- // FIXME: There should also be an autolink-extract job. It looks like our
1318- // triple parsing code is not detecting the object file format correctly.
1319- XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . moduleWrap, . link] )
1320- XCTAssertEqual ( plannedJobs [ 2 ] . inputs. count, 1 )
1321- XCTAssertEqual ( plannedJobs [ 2 ] . inputs. count, 1 )
1322- XCTAssertTrue ( plannedJobs [ 2 ] . commandLine. contains ( subsequence: [ " -target " , " x86_64-unknown-linux-gnu " ] ) )
1323- XCTAssertTrue ( plannedJobs [ 1 ] . outputs. contains ( plannedJobs [ 2 ] . inputs. first!) )
1324- XCTAssertTrue ( plannedJobs [ 3 ] . inputs. contains ( plannedJobs [ 2 ] . outputs. first!) )
1325- }
1326-
1327- // dsymutil won't be found on other platforms
1328- #if os(macOS)
1329- do {
1330- var driver = try Driver ( args: [ " swiftc " , " -target " , " x86_64-apple-macosx10.15 " , " -g " , " foo.swift " ] )
1331- let plannedJobs = try driver. planBuild ( )
1332- XCTAssertEqual ( plannedJobs. count, 4 )
1333- // No module wrapping with Mach-O.
1334- // FIXME: There should also be an autolink-extract job. It looks like our
1335- // triple parsing code is not detecting the object file format correctly.
1336- XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . link, . generateDSYM] )
1319+ XCTAssertEqual ( plannedJobs. count, 5 )
1320+ XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . autolinkExtract, . moduleWrap, . link] )
1321+ XCTAssertEqual ( plannedJobs [ 3 ] . inputs. count, 1 )
1322+ XCTAssertEqual ( plannedJobs [ 3 ] . inputs. count, 1 )
1323+ XCTAssertTrue ( plannedJobs [ 3 ] . commandLine. contains ( subsequence: [ " -target " , " x86_64-unknown-linux-gnu " ] ) )
1324+ XCTAssertTrue ( plannedJobs [ 1 ] . outputs. contains ( plannedJobs [ 3 ] . inputs. first!) )
1325+ XCTAssertTrue ( plannedJobs [ 4 ] . inputs. contains ( plannedJobs [ 3 ] . outputs. first!) )
13371326 }
1338- #endif
13391327
13401328 do {
13411329 var driver = try Driver ( args: [ " swiftc " , " -target " , " x86_64-unknown-linux-gnu " , " foo.swift " ] )
13421330 let plannedJobs = try driver. planBuild ( )
1343- XCTAssertEqual ( plannedJobs. count, 2 )
1331+ XCTAssertEqual ( plannedJobs. count, 3 )
13441332 // No merge module/module wrap jobs.
1345- // FIXME: There should also be an autolink-extract job. It looks like our
1346- // triple parsing code is not detecting the object file format correctly.
1347- XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . link] )
1333+ XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . autolinkExtract, . link] )
13481334 }
13491335
13501336 do {
13511337 var driver = try Driver ( args: [ " swiftc " , " -target " , " x86_64-unknown-linux-gnu " , " -gdwarf-types " , " foo.swift " ] )
13521338 let plannedJobs = try driver. planBuild ( )
1353- XCTAssertEqual ( plannedJobs. count, 3 )
1339+ XCTAssertEqual ( plannedJobs. count, 4 )
13541340 // Merge module, but no module wrapping.
1341+ XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . autolinkExtract, . link] )
1342+ }
1343+ #endif
1344+ // dsymutil won't be found on other platforms
1345+ #if os(macOS)
1346+ do {
1347+ var driver = try Driver ( args: [ " swiftc " , " -target " , " x86_64-apple-macosx10.15 " , " -g " , " foo.swift " ] )
1348+ let plannedJobs = try driver. planBuild ( )
1349+ XCTAssertEqual ( plannedJobs. count, 4 )
1350+ // No module wrapping with Mach-O.
13551351 // FIXME: There should also be an autolink-extract job. It looks like our
13561352 // triple parsing code is not detecting the object file format correctly.
1357- XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . link] )
1353+ XCTAssertEqual ( plannedJobs. map { $0. kind } , [ . compile, . mergeModule, . link, . generateDSYM ] )
13581354 }
1355+ #endif
13591356 }
13601357
13611358 func testRepl( ) throws {
@@ -1751,7 +1748,7 @@ final class SwiftDriverTests: XCTestCase {
17511748 do {
17521749 // No dSYM generation (no -g)
17531750 var driver = try Driver ( args: commonArgs)
1754- let plannedJobs = try driver. planBuild ( )
1751+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
17551752
17561753 XCTAssertEqual ( plannedJobs. count, 3 )
17571754 XCTAssertFalse ( plannedJobs. contains { $0. kind == . generateDSYM } )
@@ -1760,7 +1757,7 @@ final class SwiftDriverTests: XCTestCase {
17601757 do {
17611758 // No dSYM generation (-gnone)
17621759 var driver = try Driver ( args: commonArgs + [ " -gnone " ] )
1763- let plannedJobs = try driver. planBuild ( )
1760+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
17641761
17651762 XCTAssertEqual ( plannedJobs. count, 3 )
17661763 XCTAssertFalse ( plannedJobs. contains { $0. kind == . generateDSYM } )
@@ -1778,7 +1775,7 @@ final class SwiftDriverTests: XCTestCase {
17781775 XCTAssertEqual ( plannedJobs. count, 5 )
17791776 XCTAssertEqual ( generateDSYMJob. outputs. last? . file, try VirtualPath ( path: " Test.dSYM " ) )
17801777 } else {
1781- XCTAssertEqual ( plannedJobs. count, 5 )
1778+ XCTAssertEqual ( plannedJobs. count, 6 )
17821779 XCTAssertFalse ( plannedJobs. map { $0. kind } . contains ( . generateDSYM) )
17831780 }
17841781
@@ -1795,23 +1792,23 @@ final class SwiftDriverTests: XCTestCase {
17951792 // No dSYM generation (no -g), therefore no verification
17961793 try assertDriverDiagnostics ( args: commonArgs) { driver, verifier in
17971794 verifier. expect ( . warning( " ignoring '-verify-debug-info'; no debug info is being generated " ) )
1798- let plannedJobs = try driver. planBuild ( )
1795+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
17991796 XCTAssertEqual ( plannedJobs. count, 3 )
18001797 XCTAssertFalse ( plannedJobs. contains { $0. kind == . verifyDebugInfo } )
18011798 }
18021799
18031800 // No dSYM generation (-gnone), therefore no verification
18041801 try assertDriverDiagnostics ( args: commonArgs + [ " -gnone " ] ) { driver, verifier in
18051802 verifier. expect ( . warning( " ignoring '-verify-debug-info'; no debug info is being generated " ) )
1806- let plannedJobs = try driver. planBuild ( )
1803+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
18071804 XCTAssertEqual ( plannedJobs. count, 3 )
18081805 XCTAssertFalse ( plannedJobs. contains { $0. kind == . verifyDebugInfo } )
18091806 }
18101807
18111808 do {
18121809 // dSYM generation and verification (-g + -verify-debug-info)
18131810 var driver = try Driver ( args: commonArgs + [ " -g " ] )
1814- let plannedJobs = try driver. planBuild ( )
1811+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
18151812
18161813 let verifyDebugInfoJob = plannedJobs. last!
18171814 let cmd = verifyDebugInfoJob. commandLine
@@ -1841,6 +1838,36 @@ final class SwiftDriverTests: XCTestCase {
18411838 serializer. writeDOT ( to: & output)
18421839
18431840 let dynamicLinker = driver. targetTriple. isDarwin ? " ld " : " clang "
1841+ #if os(Linux)
1842+ XCTAssertEqual ( output,
1843+ """
1844+ digraph Jobs {
1845+ " compile (swift-frontend) " [style=bold];
1846+ " test.swift " [fontsize=12];
1847+ " test.swift " -> " compile (swift-frontend) " [color=blue];
1848+ " test.o " [fontsize=12];
1849+ " compile (swift-frontend) " -> " test.o " [color=green];
1850+ " test.swiftmodule " [fontsize=12];
1851+ " compile (swift-frontend) " -> " test.swiftmodule " [color=green];
1852+ " test.swiftdoc " [fontsize=12];
1853+ " compile (swift-frontend) " -> " test.swiftdoc " [color=green];
1854+ " mergeModule (swift-frontend) " [style=bold];
1855+ " test.swiftmodule " -> " mergeModule (swift-frontend) " [color=blue];
1856+ " mergeModule (swift-frontend) " -> " test.swiftmodule " [color=green];
1857+ " mergeModule (swift-frontend) " -> " test.swiftdoc " [color=green];
1858+ " autolinkExtract (swift-autolink-extract) " [style=bold];
1859+ " test.o " -> " autolinkExtract (swift-autolink-extract) " [color=blue];
1860+ " test.autolink " [fontsize=12];
1861+ " autolinkExtract (swift-autolink-extract) " -> " test.autolink " [color=green];
1862+ " link (clang) " [style=bold];
1863+ " test.o " -> " link (clang) " [color=blue];
1864+ " test.autolink " -> " link (clang) " [color=blue];
1865+ " test " [fontsize=12];
1866+ " link (clang) " -> " test " [color=green];
1867+ }
1868+
1869+ """ )
1870+ #else
18441871 XCTAssertEqual ( output,
18451872 """
18461873 digraph Jobs {
@@ -1864,6 +1891,7 @@ final class SwiftDriverTests: XCTestCase {
18641891 }
18651892
18661893 """ )
1894+ #endif
18671895 }
18681896
18691897 func testRegressions( ) throws {
@@ -2142,7 +2170,7 @@ final class SwiftDriverTests: XCTestCase {
21422170
21432171 do {
21442172 var driver = try Driver ( args: [ " swiftc " , " -c " , " -embed-bitcode " , " -import-objc-header " , " TestInputHeader.h " , " -pch-output-dir " , " /pch " , " foo.swift " ] )
2145- let plannedJobs = try driver. planBuild ( )
2173+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
21462174 XCTAssertEqual ( plannedJobs. count, 3 )
21472175
21482176 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . generatePCH)
@@ -2323,7 +2351,7 @@ final class SwiftDriverTests: XCTestCase {
23232351 func testEmbedBitcode( ) throws {
23242352 do {
23252353 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " embed-bitcode.swift " ] )
2326- let plannedJobs = try driver. planBuild ( )
2354+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
23272355 XCTAssertEqual ( plannedJobs. count, 3 )
23282356
23292357 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2345,7 +2373,7 @@ final class SwiftDriverTests: XCTestCase {
23452373
23462374 do {
23472375 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " main.swift " , " hi.swift " ] )
2348- let plannedJobs = try driver. planBuild ( )
2376+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
23492377 XCTAssertEqual ( plannedJobs. count, 5 )
23502378
23512379 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2379,7 +2407,7 @@ final class SwiftDriverTests: XCTestCase {
23792407
23802408 do {
23812409 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " -c " , " -emit-module " , " embed-bitcode.swift " ] )
2382- let plannedJobs = try driver. planBuild ( )
2410+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
23832411 XCTAssertEqual ( plannedJobs. count, 3 )
23842412
23852413 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2408,7 +2436,7 @@ final class SwiftDriverTests: XCTestCase {
24082436
24092437 do {
24102438 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " -wmo " , " embed-bitcode.swift " ] )
2411- let plannedJobs = try driver. planBuild ( )
2439+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
24122440 XCTAssertEqual ( plannedJobs. count, 3 )
24132441
24142442 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2430,7 +2458,7 @@ final class SwiftDriverTests: XCTestCase {
24302458
24312459 do {
24322460 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " -c " , " -parse-as-library " , " -emit-module " , " embed-bitcode.swift " , " empty.swift " , " -module-name " , " ABC " ] )
2433- let plannedJobs = try driver. planBuild ( )
2461+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
24342462 XCTAssertEqual ( plannedJobs. count, 5 )
24352463
24362464 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2465,7 +2493,7 @@ final class SwiftDriverTests: XCTestCase {
24652493
24662494 do {
24672495 var driver = try Driver ( args: [ " swiftc " , " -embed-bitcode " , " -c " , " -parse-as-library " , " -emit-module " , " -whole-module-optimization " , " embed-bitcode.swift " , " -parse-stdlib " , " -module-name " , " Swift " ] )
2468- let plannedJobs = try driver. planBuild ( )
2496+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
24692497 XCTAssertEqual ( plannedJobs. count, 2 )
24702498
24712499 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -2647,7 +2675,7 @@ final class SwiftDriverTests: XCTestCase {
26472675 func testVFSOverlay( ) throws {
26482676 do {
26492677 var driver = try Driver ( args: [ " swiftc " , " -c " , " -vfsoverlay " , " overlay.yaml " , " foo.swift " ] )
2650- let plannedJobs = try driver. planBuild ( )
2678+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
26512679 XCTAssertEqual ( plannedJobs. count, 1 )
26522680 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
26532681 XCTAssert ( plannedJobs [ 0 ] . commandLine. contains ( subsequence: [ . flag( " -vfsoverlay " ) , . path( . relative( RelativePath ( " overlay.yaml " ) ) ) ] ) )
@@ -2656,7 +2684,7 @@ final class SwiftDriverTests: XCTestCase {
26562684 // Verify that the overlays are passed to the frontend in the same order.
26572685 do {
26582686 var driver = try Driver ( args: [ " swiftc " , " -c " , " -vfsoverlay " , " overlay1.yaml " , " -vfsoverlay " , " overlay2.yaml " , " -vfsoverlay " , " overlay3.yaml " , " foo.swift " ] )
2659- let plannedJobs = try driver. planBuild ( )
2687+ let plannedJobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
26602688 XCTAssertEqual ( plannedJobs. count, 1 )
26612689 XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
26622690 XCTAssert ( plannedJobs [ 0 ] . commandLine. contains ( subsequence: [ . flag( " -vfsoverlay " ) , . path( . relative( RelativePath ( " overlay1.yaml " ) ) ) , . flag( " -vfsoverlay " ) , . path( . relative( RelativePath ( " overlay2.yaml " ) ) ) , . flag( " -vfsoverlay " ) , . path( . relative( RelativePath ( " overlay3.yaml " ) ) ) ] ) )
@@ -2761,3 +2789,13 @@ fileprivate extension Array where Element: Equatable {
27612789 return false
27622790 }
27632791}
2792+
2793+ fileprivate extension Array where Element == Job {
2794+ // Utility to drop autolink-extract jobs, which helps avoid introducing
2795+ // platform-specific conditionals in tests unrelated to autolinking.
2796+ func removingAutolinkExtractJobs( ) -> Self {
2797+ var filtered = self
2798+ filtered. removeAll ( where: { $0. kind == . autolinkExtract } )
2799+ return filtered
2800+ }
2801+ }
0 commit comments