diff --git a/source/rock/frontend/drivers/Driver.ooc b/source/rock/frontend/drivers/Driver.ooc index 502fd923..711e611a 100644 --- a/source/rock/frontend/drivers/Driver.ooc +++ b/source/rock/frontend/drivers/Driver.ooc @@ -95,8 +95,7 @@ Driver: abstract class { flagsDone addAll(useDef getLibs()) - for(pkg in useDef getPkgs()) { - info := PkgConfigFrontend getInfo(pkg) + applyInfo := func (info: PkgInfo) { for(cflag in info cflags) { if(!flagsDone contains?(cflag)) { flagsDone add(cflag) @@ -119,6 +118,19 @@ Driver: abstract class { } } + for(pkg in useDef getPkgs()) { + info := PkgConfigFrontend getInfo(pkg) + applyInfo(info) + } + + for(pkg in useDef getCustomPkgs()) { + info := PkgConfigFrontend getCustomInfo( + pkg utilName, pkg names, + pkg cflagArgs, pkg libsArgs + ) + applyInfo(info) + } + for(includePath in useDef getIncludePaths()) { ipath := "-I" + includePath if(!flagsDone contains?(ipath)) { diff --git a/source/rock/frontend/pkgconfig/PkgConfigFrontend.ooc b/source/rock/frontend/pkgconfig/PkgConfigFrontend.ooc index e5d8593b..3fb1b4c4 100644 --- a/source/rock/frontend/pkgconfig/PkgConfigFrontend.ooc +++ b/source/rock/frontend/pkgconfig/PkgConfigFrontend.ooc @@ -34,22 +34,33 @@ PkgConfigFrontend: class { cflagArgs: ArrayList, libsArgs: ArrayList) -> PkgInfo { utilPath := ShellUtils findExecutable(utilName, true) getPath() - cflagslist := [utilPath] as ArrayList - cflagslist addAll(pkgs) - cflagslist addAll(cflagArgs) - cflags := _shell(cflagslist) + cflags := "" + + for (cflagArg in cflagArgs) { + cflagslist := [utilPath] as ArrayList + cflagslist addAll(pkgs) + cflagslist add(cflagArg) + result := _shell(cflagslist) + if(!cflags) { + Exception new("Error while running `%s`" format(cflagslist join(" "))) throw() + } - if(cflags == null) { - Exception new("Error while running `%s`" format(cflagslist join(" "))) throw() + cflags += result + cflags += " " } - libslist := [utilPath] as ArrayList - libslist addAll(pkgs) - libslist addAll(libsArgs) - libs := _shell(libslist) - - if(libs == null) { - Exception new("Error while running `%s`" format(libslist join(" "))) throw() + libs := "" + + for (libsArg in libsArgs) { + libslist := [utilPath] as ArrayList + libslist addAll(pkgs) + libslist add(libsArg) + result := _shell(libslist) + if(result == null) { + Exception new("Error while running `%s`" format(libslist join(" "))) throw() + } + libs += result + libs += " " } PkgInfo new(pkgs join(" "), libs, cflags) diff --git a/source/rock/frontend/pkgconfig/PkgInfo.ooc b/source/rock/frontend/pkgconfig/PkgInfo.ooc index 3ff63294..28e58bb7 100644 --- a/source/rock/frontend/pkgconfig/PkgInfo.ooc +++ b/source/rock/frontend/pkgconfig/PkgInfo.ooc @@ -34,6 +34,7 @@ PkgInfo: class { init: func (=name, =libsString, =cflagsString) { extractTokens("-L", libsString, libPaths) extractTokens("-l", libsString, libraries) + "For %s, collected libraries: %s" printfln(name, libraries join(", ")) extractTokens("-I", cflagsString, includePaths) extractTokens("", cflagsString, cflags) } diff --git a/source/rock/middle/UseDef.ooc b/source/rock/middle/UseDef.ooc index 3a7d11b8..633a330f 100644 --- a/source/rock/middle/UseDef.ooc +++ b/source/rock/middle/UseDef.ooc @@ -124,15 +124,16 @@ UseDef: class { parseCustomPkg: func (value: String) -> CustomPkg { vals := value split(',') pkg := CustomPkg new(vals[0]) - pkg names addAll(vals[1] split(' ')) + pkg names addAll(vals[1] trim() split(' ')) if (vals size >= 4) { - pkg cflagArgs addAll(vals[2] split(' ')) - pkg libsArgs addAll(vals[3] split(' ')) + pkg cflagArgs addAll(vals[2] trim() split(' ')) + pkg libsArgs addAll(vals[3] trim() split(' ')) } else { // If 3rd and 4th argument aren't present, assume pkgconfig-like behavior pkg cflagArgs add("--cflags") pkg libsArgs add("--libs") } + pkg } read: func (=file, params: BuildParams) {