]> git.tdb.fi Git - builder.git/blobdiff - source/packagemanager.cpp
Let PackageManager take care of PKG_CONFIG_PATH
[builder.git] / source / packagemanager.cpp
index 01c9e09c1959de54b6408fcd71e46cbce173c7fa..730f02271e32a5261c95829b89b51604c1296bef 100644 (file)
@@ -1,3 +1,4 @@
+#include <cstdlib>
 #include <msp/fs/dir.h>
 #include <msp/fs/stat.h>
 #include <msp/fs/utils.h>
@@ -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<string> path = split(pcp, ':');
+                               bool found = false;
+                               for(vector<string>::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")