X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpkgconfiggenerator.cpp;fp=source%2Fpkgconfiggenerator.cpp;h=708a9130ed63e6c158df084dbba9b01ae29b2369;hb=338eefb513953ae55e8e3614c009c242ba8ad74e;hp=0000000000000000000000000000000000000000;hpb=dc00ddd224634c86f0a470f1f6f534be5d3e64a3;p=builder.git diff --git a/source/pkgconfiggenerator.cpp b/source/pkgconfiggenerator.cpp new file mode 100644 index 0000000..708a913 --- /dev/null +++ b/source/pkgconfiggenerator.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include "builder.h" +#include "pkgconfig.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 &) const +{ + throw logic_error("Not implemented"); +} + +Task *PkgConfigGenerator::run(const Target &target) const +{ + const PkgConfig &pkgc = dynamic_cast(target); + Worker *worker = new Worker(pkgc); + return new InternalTask(worker); +} + + +PkgConfigGenerator::Worker::Worker(const PkgConfig &t): + target(t) +{ + launch(); +} + +void PkgConfigGenerator::Worker::main() +{ + Builder &builder = target.get_package()->get_builder(); + const SourcePackage &spkg = dynamic_cast(*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, "Name: %s\n", spkg.get_name()); + 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()) + IO::print(out, " %s", (*i)->get_name()); + out.put('\n'); + + const BuildInfo &binfo = spkg.get_exported_binfo(); + 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) + IO::print(out, " -l%s", *i); + for(StringList::const_iterator i=binfo.ldflags.begin(); i!=binfo.ldflags.end(); ++i) + IO::print(out, " %s", *i); + 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); + out.put('\n'); +}