@@ -16,32 +16,52 @@ enum PkgConfigError: ErrorProtocol {
16
16
}
17
17
18
18
struct PkgConfig {
19
- static let searchPaths = [ " /usr/local/lib/pkgconfig " ,
19
+ private static let searchPaths = [ " /usr/local/lib/pkgconfig " ,
20
20
" /usr/local/share/pkgconfig " ,
21
21
" /usr/lib/pkgconfig " ,
22
22
" /usr/share/pkgconfig " ,
23
23
]
24
24
25
25
let name : String
26
26
let pcFile : String
27
- var cFlags = [ String] ( )
28
- var libs = [ String] ( )
29
- private var parser : PkgConfigParser
27
+ let cFlags : [ String ]
28
+ let libs : [ String ]
30
29
31
30
init ( name: String ) throws {
32
31
self . name = name
33
32
self . pcFile = try PkgConfig . locatePCFile ( name: name)
34
- parser = PkgConfigParser ( pcFile: pcFile)
33
+
34
+ var parser = PkgConfigParser ( pcFile: pcFile)
35
+ try parser. parse ( )
36
+
37
+ var cFlags = [ String] ( )
38
+ var libs = [ String] ( )
39
+
40
+ // FIXME: handle spaces in paths.
41
+ cFlags += parser. cFlags. characters. split ( separator: " " ) . map ( String . init)
42
+ libs += parser. libs. characters. split ( separator: " " ) . map ( String . init)
43
+
44
+ // If parser found dependencies in pc file, get their flags too.
45
+ if ( !parser. dependencies. isEmpty) {
46
+ for dep in parser. dependencies {
47
+ let pkg = try PkgConfig ( name: dep)
48
+ cFlags += pkg. cFlags
49
+ libs += pkg. libs
50
+ }
51
+ }
52
+
53
+ self . cFlags = cFlags
54
+ self . libs = libs
35
55
}
36
56
37
- static var envSearchPaths : [ String ] {
57
+ private static var envSearchPaths : [ String ] {
38
58
if let configPath = getenv ( " PKG_CONFIG_PATH " ) {
39
59
return configPath. characters. split ( separator: " : " ) . map ( String . init)
40
60
}
41
61
return [ ]
42
62
}
43
63
44
- static func locatePCFile( name: String ) throws -> String {
64
+ private static func locatePCFile( name: String ) throws -> String {
45
65
for path in ( searchPaths + envSearchPaths) {
46
66
let pcFile = Path . join ( path, " \( name) .pc " )
47
67
if pcFile. isFile {
@@ -50,39 +70,14 @@ struct PkgConfig {
50
70
}
51
71
throw PkgConfigError . CouldNotFindConfigFile
52
72
}
53
-
54
- mutating func load( ) throws {
55
- cFlags = [ String] ( )
56
- libs = [ String] ( )
57
- try parser. parse ( )
58
- if let cFlags = parser. cFlags {
59
- // FIXME: handle spaces in paths.
60
- self . cFlags += cFlags. characters. split ( separator: " " ) . map ( String . init)
61
- }
62
- if let libs = parser. libs {
63
- // FIXME: handle spaces in paths.
64
- self . libs += libs. characters. split ( separator: " " ) . map ( String . init)
65
- }
66
-
67
- if ( parser. dependencies. isEmpty) {
68
- return
69
- }
70
-
71
- for dep in parser. dependencies {
72
- var pkg = try PkgConfig ( name: dep)
73
- try pkg. load ( )
74
- self . cFlags += pkg. cFlags
75
- self . libs += pkg. libs
76
- }
77
- }
78
73
}
79
74
80
75
private struct PkgConfigParser {
81
76
let pcFile : String
82
77
var variables = [ String: String] ( )
83
78
var dependencies = [ String] ( )
84
- var cFlags : String ?
85
- var libs : String ?
79
+ var cFlags = " "
80
+ var libs = " "
86
81
87
82
init ( pcFile: String ) {
88
83
self . pcFile = pcFile
0 commit comments