]> git.tdb.fi Git - builder.git/blobdiff - source/builder.cpp
Code reorganizing and cleanup
[builder.git] / source / builder.cpp
index 0b1d1bf55163b3a8c44d2a767bcb4e790a0b7b7a..5a1d624390fa45250bab4451b3196693d5d46dc9 100644 (file)
@@ -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<std::string> 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<PackageRef> &requires=default_pkg->get_requires();
-       for(list<PackageRef>::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<<", ";