]> git.tdb.fi Git - builder.git/blobdiff - source/builder.cpp
Make tools capable of reporting a system-wide path used to locate input files
[builder.git] / source / builder.cpp
index b3e096848f5de0db856a644450f2482ca90e20bc..e8f8927d580ea0e2739aadf1bd32b055f420e1a5 100644 (file)
 #include "binarypackage.h"
 #include "builder.h"
 #include "copy.h"
+#include "externaltask.h"
 #include "gnuarchiver.h"
 #include "gnuccompiler.h"
 #include "gnucxxcompiler.h"
 #include "gnulinker.h"
 #include "installedfile.h"
-#include "misc.h"
 #include "package.h"
 #include "pkgconfigfile.h"
 #include "pkgconfiggenerator.h"
@@ -125,14 +125,6 @@ Builder::Builder(int argc, char **argv):
 
        cwd = FS::getcwd();
 
-       toolchain.add_tool(new GnuCCompiler(*this));
-       toolchain.add_tool(new GnuCxxCompiler(*this));
-       toolchain.add_tool(new GnuLinker(*this));
-       toolchain.add_tool(new GnuArchiver(*this));
-       toolchain.add_tool(new Copy(*this));
-       toolchain.add_tool(new Tar(*this));
-       toolchain.add_tool(new PkgConfigGenerator(*this));
-
        load_build_file((FS::get_sys_data_dir(argv[0], "builder")/"builderrc").str());
        load_build_file((FS::get_user_data_dir("builder")/"rc").str());
 
@@ -151,6 +143,14 @@ Builder::Builder(int argc, char **argv):
                        }
        }
 
+       toolchain.add_tool(new GnuCCompiler(*this));
+       toolchain.add_tool(new GnuCxxCompiler(*this));
+       toolchain.add_tool(new GnuLinker(*this));
+       toolchain.add_tool(new GnuArchiver(*this));
+       toolchain.add_tool(new Copy(*this));
+       toolchain.add_tool(new Tar(*this));
+       toolchain.add_tool(new PkgConfigGenerator(*this));
+
        if(prfx.empty())
        {
                if(current_arch->is_native())
@@ -305,7 +305,7 @@ int Builder::main()
 
 string Builder::run_pkgconfig(const string &pkg, const string &what)
 {
-       list<string> argv;
+       ExternalTask::Arguments argv;
        argv.push_back("pkg-config");
        if(what=="cflags" || what=="libs")
                argv.push_back("--"+what);
@@ -321,12 +321,17 @@ string Builder::run_pkgconfig(const string &pkg, const string &what)
        if(verbose>=4)
                IO::print("Running %s\n", join(argv.begin(), argv.end()));
 
-       int status;
-       string res = run_command(argv, &status);
-       if(status)
+       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 res;
+       return task.get_output();
 }
 
 Package *Builder::get_package(const string &name)