X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpkgconfiggenerator.cpp;h=949a4df589747e7da8b64ec0cc39f53544ba8db0;hb=62106ed7cef9b8ef6f07aaf491f8250f7e8d9398;hp=708a9130ed63e6c158df084dbba9b01ae29b2369;hpb=338eefb513953ae55e8e3614c009c242ba8ad74e;p=builder.git diff --git a/source/pkgconfiggenerator.cpp b/source/pkgconfiggenerator.cpp index 708a913..949a4df 100644 --- a/source/pkgconfiggenerator.cpp +++ b/source/pkgconfiggenerator.cpp @@ -2,7 +2,7 @@ #include #include #include "builder.h" -#include "pkgconfig.h" +#include "pkgconfigfile.h" #include "pkgconfiggenerator.h" using namespace std; @@ -13,61 +13,73 @@ PkgConfigGenerator::PkgConfigGenerator(Builder &b): { } -Target *PkgConfigGenerator::create_target(const list &, const string &) const +Target *PkgConfigGenerator::create_target(const list &, const string &) { throw logic_error("Not implemented"); } Task *PkgConfigGenerator::run(const Target &target) const { - const PkgConfig &pkgc = dynamic_cast(target); + const PkgConfigFile &pkgc = dynamic_cast(target); Worker *worker = new Worker(pkgc); return new InternalTask(worker); } -PkgConfigGenerator::Worker::Worker(const PkgConfig &t): +PkgConfigGenerator::Worker::Worker(const PkgConfigFile &t): target(t) -{ - launch(); -} +{ } void PkgConfigGenerator::Worker::main() { Builder &builder = target.get_package()->get_builder(); - const SourcePackage &spkg = dynamic_cast(*target.get_package()); + const SourcePackage &spkg = *target.get_package(); IO::BufferedFile out(target.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()); + 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 PackageList &reqs = spkg.get_requires(); - for(PackageList::const_iterator i=reqs.begin(); i!=reqs.end(); ++i) - if((*i)->get_use_pkgconfig()) + const Package::Requirements &reqs = spkg.get_required_packages(); + for(Package::Requirements::const_iterator i=reqs.begin(); i!=reqs.end(); ++i) + if((*i)->uses_pkgconfig()) IO::print(out, " %s", (*i)->get_name()); out.put('\n'); - const BuildInfo &binfo = spkg.get_exported_binfo(); + const BuildInfo &binfo = spkg.get_exported_build_info(); IO::print(out, "Libs:"); - for(StringList::const_iterator i=binfo.libpath.begin(); i!=binfo.libpath.end(); ++i) - IO::print(out, " -L%s", FS::relative(*i, builder.get_prefix()).str()); - for(StringList::const_iterator i=binfo.libs.begin(); i!=binfo.libs.end(); ++i) + 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(StringList::const_iterator i=binfo.ldflags.begin(); i!=binfo.ldflags.end(); ++i) - IO::print(out, " %s", *i); + if(binfo.threads) + out.write("-pthread"); out.put('\n'); IO::print(out, "Cflags:"); - for(StringList::const_iterator i=binfo.incpath.begin(); i!=binfo.incpath.end(); ++i) - IO::print(out, " -I%s", FS::relative(*i, builder.get_prefix()).str()); - for(StringList::const_iterator i=binfo.defines.begin(); i!=binfo.defines.end(); ++i) - IO::print(out, " -D%s", *i); - for(StringList::const_iterator i=binfo.cflags.begin(); i!=binfo.cflags.end(); ++i) - IO::print(out, " %s", *i); + 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); + else + IO::print(out, " -D%s=%s", i->first, i->second); out.put('\n'); + + status = Task::SUCCESS; +} + +string PkgConfigGenerator::Worker::prefixify(const FS::Path &path, const FS::Path &prefix) +{ + if(FS::descendant_depth(path, prefix)>=0) + { + FS::Path rel_path = FS::relative(path, prefix); + return "${prefix}"+rel_path.str().substr(1); + } + else + return path.str(); }