X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpackagemanager.cpp;h=730f02271e32a5261c95829b89b51604c1296bef;hb=30aa066f674421268abc6c79bf828e005ac50031;hp=01c9e09c1959de54b6408fcd71e46cbce173c7fa;hpb=4ce2beaa6d1cab7ed8063bbe1472e13a4280ebc0;p=builder.git diff --git a/source/packagemanager.cpp b/source/packagemanager.cpp index 01c9e09..730f022 100644 --- a/source/packagemanager.cpp +++ b/source/packagemanager.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -17,7 +18,8 @@ using namespace Msp; PackageManager::PackageManager(Builder &b): builder(b), - no_externals(false) + no_externals(false), + env_set(false) { pkg_path.push_back(builder.get_cwd()/"."); pkg_path.push_back(builder.get_cwd()/".."); @@ -87,6 +89,29 @@ Package *PackageManager::find_package(const string &name) string PackageManager::run_pkgconfig(const string &pkg, const string &what) { + if(!env_set) + { + const FS::Path &prefix = builder.get_prefix(); + if(prefix.str()!="/usr") + { + FS::Path pcdir = prefix/"lib/pkgconfig"; + if(const char *pcp = getenv("PKG_CONFIG_PATH")) + { + vector path = split(pcp, ':'); + bool found = false; + for(vector::const_iterator i=path.begin(); (!found && i!=path.end()); ++i) + found = (*i==pcdir.str()); + if(!found) + { + path.push_back(pcdir.str()); + setenv("PKG_CONFIG_PATH", join(path.begin(), path.end(), ":").c_str(), true); + } + } + else + setenv("PKG_CONFIG_PATH", pcdir.str().c_str(), true); + } + } + ExternalTask::Arguments argv; argv.push_back("pkg-config"); if(what=="cflags" || what=="libs")