X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=5a1d624390fa45250bab4451b3196693d5d46dc9;hb=1a46151c99a406123c4ddfc797a7841baf3e4cc2;hp=0b1d1bf55163b3a8c44d2a767bcb4e790a0b7b7a;hpb=63adab21a6f229f434b41eb59c5718fdc3c37b15;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index 0b1d1bf..5a1d624 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -18,6 +18,8 @@ #include "misc.h" #include "objectfile.h" #include "package.h" +#include "sharedlibrary.h" +#include "staticlibrary.h" #include "systemlibrary.h" #include "virtualtarget.h" @@ -25,12 +27,12 @@ using namespace std; using namespace Msp; Builder::Builder(int argc, char **argv): + analyzer(0), + do_build(true), verbose(1), + chrome(false), build_file("Build"), - do_build(true), - analyzer(0), - jobs(1), - chrome(false) + jobs(1) { GetOpt getopt; getopt.add_option(GetOpt::Option('a', "analyze", GetOpt::REQUIRED)); @@ -254,7 +256,7 @@ int Builder::main() return 0; } - std::list missing; + StringList missing; for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) if(!i->second) missing.push_back(i->first); @@ -443,12 +445,28 @@ int Builder::create_targets() if(build_exe) { - Executable *exe=new Executable(*this, *j, objs); + Executable *exe=0; + StaticLibrary *slib=0; + if(j->get_type()==Component::LIBRARY) + { + exe=new SharedLibrary(*this, *j, objs); + slib=new StaticLibrary(*this, *j, objs); + add_target(slib); + } + else + exe=new Executable(*this, *j, objs); + add_target(exe); if(i->second==default_pkg) + { def_tgt->add_depend(exe); + if(slib) def_tgt->add_depend(slib); + } else + { world->add_depend(exe); + if(slib) world->add_depend(slib); + } if(j->get_install()) { @@ -462,6 +480,13 @@ int Builder::create_targets() Install *inst=new Install(*this, *i->second, *exe, (inst_base/inst_dir/Path::basename(exe->get_name())).str()); add_target(inst); install->add_depend(inst); + + if(slib) + { + inst=new Install(*this, *i->second, *slib, (inst_base/inst_dir/Path::basename(slib->get_name())).str()); + add_target(inst); + install->add_depend(inst); + } } } } @@ -614,8 +639,8 @@ void Builder::package_help() const Config::OptionMap &options=config.get_options(); cout<<"Required packages:\n "; - const list &requires=default_pkg->get_requires(); - for(list::const_iterator i=requires.begin(); i!=requires.end(); ++i) + const PkgRefList &requires=default_pkg->get_requires(); + for(PkgRefList::const_iterator i=requires.begin(); i!=requires.end(); ++i) { if(i!=requires.begin()) cout<<", ";