X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpkgconfiggenerator.cpp;h=a6178a7328c5e66fa5ad22df0bc0686013e0367b;hb=d1eb133ab529cdae131be7b150209f03189248f3;hp=677ef9bed27032cae00389f38a0e57b9db2559eb;hpb=9e28243c9687608ec3c32954b4031490296ae877;p=builder.git diff --git a/source/pkgconfiggenerator.cpp b/source/pkgconfiggenerator.cpp index 677ef9b..a6178a7 100644 --- a/source/pkgconfiggenerator.cpp +++ b/source/pkgconfiggenerator.cpp @@ -2,18 +2,14 @@ #include #include #include "builder.h" +#include "internaltask.h" #include "pkgconfigfile.h" #include "pkgconfiggenerator.h" using namespace std; using namespace Msp; -PkgConfigGenerator::PkgConfigGenerator(Builder &b): - Tool(b, "PCG") -{ -} - -Target *PkgConfigGenerator::create_target(const list &, const string &) +Target *PkgConfigGenerator::create_target(const vector &, const string &) { throw logic_error("Not implemented"); } @@ -21,59 +17,52 @@ Target *PkgConfigGenerator::create_target(const list &, const string & Task *PkgConfigGenerator::run(const Target &target) const { const PkgConfigFile &pkgc = dynamic_cast(target); - Worker *worker = new Worker(pkgc); - return new InternalTask(worker); + return new InternalTask([&pkgc]{ return _run(pkgc); }); } - -PkgConfigGenerator::Worker::Worker(const PkgConfigFile &t): - target(t) -{ } - -void PkgConfigGenerator::Worker::main() +bool PkgConfigGenerator::_run(const PkgConfigFile &pkgc) { - Builder &builder = target.get_package()->get_builder(); - const SourcePackage &spkg = *target.get_package(); + Builder &builder = pkgc.get_package()->get_builder(); + const SourcePackage &spkg = *pkgc.get_package(); - IO::BufferedFile out(target.get_path().str(), IO::M_WRITE); + IO::BufferedFile out(pkgc.get_path().str(), IO::M_WRITE); IO::print(out, "prefix=%s\n", builder.get_prefix().str()); IO::print(out, "source=%s\n\n", spkg.get_source_directory()); - IO::print(out, "Name: %s\n", spkg.get_name()); + IO::print(out, "Name: %s\n", spkg.get_label()); IO::print(out, "Description: %s\n", spkg.get_description()); IO::print(out, "Version: %s\n", spkg.get_version()); IO::print(out, "Requires:"); - const Package::Requirements &reqs = spkg.get_required_packages(); - for(Package::Requirements::const_iterator i=reqs.begin(); i!=reqs.end(); ++i) - if((*i)->get_use_pkgconfig()) - IO::print(out, " %s", (*i)->get_name()); + for(const Package *r: spkg.get_required_packages()) + if(r->uses_pkgconfig()) + IO::print(out, " %s", r->get_name()); out.put('\n'); const BuildInfo &binfo = spkg.get_exported_build_info(); IO::print(out, "Libs:"); - for(BuildInfo::PathList::const_iterator i=binfo.libpath.begin(); i!=binfo.libpath.end(); ++i) - IO::print(out, " -L%s", prefixify(*i, builder.get_prefix())); - for(BuildInfo::WordList::const_iterator i=binfo.libs.begin(); i!=binfo.libs.end(); ++i) - IO::print(out, " -l%s", *i); + for(const FS::Path &p: binfo.libpath) + IO::print(out, " -L%s", prefixify(p, builder.get_prefix())); + for(const string &l: binfo.libs) + IO::print(out, " -l%s", l); if(binfo.threads) out.write("-pthread"); out.put('\n'); IO::print(out, "Cflags:"); - for(BuildInfo::PathList::const_iterator i=binfo.incpath.begin(); i!=binfo.incpath.end(); ++i) - IO::print(out, " -I%s", prefixify(*i, builder.get_prefix())); - for(BuildInfo::DefineMap::const_iterator i=binfo.defines.begin(); i!=binfo.defines.end(); ++i) - if(i->second.empty()) - IO::print(out, " -D%s", i->first); + for(const FS::Path &p: binfo.incpath) + IO::print(out, " -I%s", prefixify(p, builder.get_prefix())); + for(const auto &kvp: binfo.defines) + if(kvp.second.empty()) + IO::print(out, " -D%s", kvp.first); else - IO::print(out, " -D%s=%s", i->first, i->second); + IO::print(out, " -D%s=%s", kvp.first, kvp.second); out.put('\n'); - status = Task::SUCCESS; + return true; } -string PkgConfigGenerator::Worker::prefixify(const FS::Path &path, const FS::Path &prefix) +string PkgConfigGenerator::prefixify(const FS::Path &path, const FS::Path &prefix) { if(FS::descendant_depth(path, prefix)>=0) {