X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpackagemanager.cpp;h=ac1851d73c2ac3573b8e91afa46e4e8d9b68bdcb;hb=edb6076ccae6347acb84868563144a63e6ceba02;hp=68189205abb8022ba1f272c0a066e4b1a210fa1f;hpb=519f2006e8b33e9b14fdc985766ab4e4e869544b;p=builder.git diff --git a/source/packagemanager.cpp b/source/packagemanager.cpp index 6818920..ac1851d 100644 --- a/source/packagemanager.cpp +++ b/source/packagemanager.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -17,10 +18,11 @@ 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()/".."); + pkg_path.push_back(builder.get_work_directory()/"."); + pkg_path.push_back(builder.get_work_directory()/".."); } PackageManager::~PackageManager() @@ -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") @@ -102,17 +127,7 @@ string PackageManager::run_pkgconfig(const string &pkg, const string &what) builder.get_logger().log("auxcommands", format("Running %s", join(argv.begin(), argv.end()))); - ExternalTask task(argv); - task.set_stdout(ExternalTask::CAPTURE); - task.set_stderr(ExternalTask::IGNORE); - task.start(); - Task::Status status; - while((status=task.check())==Task::RUNNING) - Time::sleep(10*Time::msec); - if(status==Task::ERROR) - throw runtime_error(format("pkg-config for package %s failed", pkg)); - - return task.get_output(); + return ExternalTask::run_and_capture_output(argv); } FS::Path PackageManager::get_package_location(const string &name) @@ -133,6 +148,7 @@ FS::Path PackageManager::get_package_location(const string &name) { for(list::const_iterator i=pkg_path.begin(); i!=pkg_path.end(); ++i) { + builder.get_logger().log("files", format("Traversing %s", *i)); list files = list_files(*i); for(list::const_iterator j=files.begin(); j!=files.end(); ++j) {