@@ -102,12 +102,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
102102    /// Alternative path to search for pkg-config `.pc` files.
103103    private  let  pkgConfigDirectories :  [ AbsolutePath ] 
104104
105-     /// Map of dependency package identities by root packages that depend on them.
106-     private  let  dependenciesByRootPackageIdentity :  [ PackageIdentity :  [ PackageIdentity ] ] 
107- 
108-     /// Map of  root package identities by target names which are declared in them.
109-     private  let  rootPackageIdentityByTargetName :  [ String :  PackageIdentity ] 
110- 
111105    public  init ( 
112106        productsBuildParameters:  BuildParameters , 
113107        toolsBuildParameters:  BuildParameters , 
@@ -117,8 +111,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
117111        scratchDirectory:  AbsolutePath , 
118112        additionalFileRules:  [ FileRuleDescription ] , 
119113        pkgConfigDirectories:  [ AbsolutePath ] , 
120-         dependenciesByRootPackageIdentity:  [ PackageIdentity :  [ PackageIdentity ] ] , 
121-         targetsByRootPackageIdentity:  [ PackageIdentity :  [ String ] ] , 
122114        outputStream:  OutputByteStream , 
123115        logLevel:  Basics . Diagnostic . Severity , 
124116        fileSystem:  Basics . FileSystem , 
@@ -139,8 +131,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
139131        self . pluginConfiguration =  pluginConfiguration
140132        self . scratchDirectory =  scratchDirectory
141133        self . pkgConfigDirectories =  pkgConfigDirectories
142-         self . dependenciesByRootPackageIdentity =  dependenciesByRootPackageIdentity
143-         self . rootPackageIdentityByTargetName =  ( try ?   Dictionary < String ,  PackageIdentity > ( throwingUniqueKeysWithValues:  targetsByRootPackageIdentity. lazy. flatMap  {  e in  e. value. map  {  ( $0,  e. key)  }  } ) )  ??  [ : ] 
144134        self . outputStream =  outputStream
145135        self . logLevel =  logLevel
146136        self . fileSystem =  fileSystem
@@ -260,81 +250,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
260250        } 
261251    } 
262252
263-     private  static  var  didEmitUnexpressedDependencies   =  false 
264- 
265-     private  func  detectUnexpressedDependencies( )  { 
266-         return  self . detectUnexpressedDependencies ( 
267-             // Note: once we switch from the toolchain global metadata, we will have to ensure we can match the right metadata used during the build.
268-             availableLibraries:  self . productsBuildParameters. toolchain. providedLibraries, 
269-             targetDependencyMap:  self . buildDescription. targetDependencyMap
270-         ) 
271-     } 
272- 
273-     // TODO: Currently this function will only match frameworks.
274-     func  detectUnexpressedDependencies( 
275-         availableLibraries:  [ ProvidedLibrary ] , 
276-         targetDependencyMap:  [ String :  [ String ] ] ? 
277-     )  { 
278-         // Ensure we only emit these once, regardless of how many builds are being done.
279-         guard  !Self. didEmitUnexpressedDependencies else  { 
280-             return 
281-         } 
282-         Self . didEmitUnexpressedDependencies =  true 
283- 
284-         let  availableFrameworks  =  Dictionary < String ,  PackageIdentity > ( uniqueKeysWithValues:  availableLibraries. compactMap  { 
285-             if  let  identity =  Set ( $0. metadata. identities. map ( \. identity) ) . spm_only { 
286-                 return  ( " \( $0. metadata. productName) .framework " ,  identity) 
287-             }  else  { 
288-                 return  nil 
289-             } 
290-         } ) 
291- 
292-         targetDependencyMap? . keys. forEach  {  targetName in 
293-             let  c99name  =  targetName. spm_mangledToC99ExtendedIdentifier ( ) 
294-             // Since we're analysing post-facto, we don't know which parameters are the correct ones.
295-             let  possibleTempsPaths  =  [ productsBuildParameters,  toolsBuildParameters] . map  { 
296-                 $0. buildPath. appending ( component:  " \( c99name) .build " ) 
297-             } 
298- 
299-             let  usedSDKDependencies :  [ String ]  =  Set ( possibleTempsPaths) . flatMap  {  possibleTempsPath in 
300-                 guard  let  contents =  try ?   self . fileSystem. readFileContents ( 
301-                     possibleTempsPath. appending ( component:  " \( c99name) .d " ) 
302-                 )  else  { 
303-                     return  [ String] ( ) 
304-                 } 
305- 
306-                 // FIXME: We need a real makefile deps parser here...
307-                 let  deps  =  contents. description. split ( whereSeparator:  {  $0. isWhitespace } ) 
308-                 return  deps. filter  { 
309-                     !$0. hasPrefix ( possibleTempsPath. parentDirectory. pathString) 
310-                 } . compactMap  { 
311-                     try ?   AbsolutePath ( validating:  String ( $0) ) 
312-                 } . compactMap  { 
313-                     return  $0. components. first ( where:  {  $0. hasSuffix ( " .framework " )  } ) 
314-                 } 
315-             } 
316- 
317-             let  dependencies :  [ PackageIdentity ] 
318-             if  let  rootPackageIdentity =  self . rootPackageIdentityByTargetName [ targetName]  { 
319-                 dependencies =  self . dependenciesByRootPackageIdentity [ rootPackageIdentity]  ??  [ ] 
320-             }  else  { 
321-                 dependencies =  [ ] 
322-             } 
323- 
324-             Set ( usedSDKDependencies) . forEach  { 
325-                 if  availableFrameworks. keys. contains ( $0)  { 
326-                     if  let  availableFrameworkPackageIdentity =  availableFrameworks [ $0] ,  !dependencies. contains ( 
327-                         availableFrameworkPackageIdentity
328-                     )  { 
329-                         observabilityScope. emit ( 
330-                             warning:  " target ' \( targetName) ' has an unexpressed depedency on ' \( availableFrameworkPackageIdentity) ' " 
331-                         ) 
332-                     } 
333-                 } 
334-             } 
335-         } 
336-     } 
337- 
338253    /// Perform a build using the given build description and subset.
339254    public  func  build( subset:  BuildSubset )  throws  { 
340255        guard  !self . productsBuildParameters. shouldSkipBuilding else  { 
@@ -373,8 +288,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
373288
374289        let  duration  =  buildStartTime. distance ( to:  . now( ) ) 
375290
376-         self . detectUnexpressedDependencies ( ) 
377- 
378291        let  subsetDescriptor :  String ? 
379292        switch  subset { 
380293        case  . product( let  productName,  _) : 
@@ -615,8 +528,6 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
615528                scratchDirectory:  pluginsBuildParameters. dataPath, 
616529                additionalFileRules:  self . additionalFileRules, 
617530                pkgConfigDirectories:  self . pkgConfigDirectories, 
618-                 dependenciesByRootPackageIdentity:  [ : ] , 
619-                 targetsByRootPackageIdentity:  [ : ] , 
620531                outputStream:  self . outputStream, 
621532                logLevel:  self . logLevel, 
622533                fileSystem:  self . fileSystem, 
0 commit comments