X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilder.cpp;h=38a71390ac5b5130a940da0f9c707ec24fa99b29;hb=921fc49488a68442fb8794e1a0284a3bf1e7b91b;hp=ccfb407276ee1a619b1bf85e1869a7acd75eab0a;hpb=f1de8cfebfc1d052835fd0c61fde7a4a53650c00;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index ccfb407..38a7139 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -579,7 +579,7 @@ int Builder::create_targets() exe=new Executable(*this, *j, objs); add_target(exe); - if(i->second==default_pkg) + if(i->second==default_pkg && j->get_default()) { def_tgt->add_depend(exe); if(slib) def_tgt->add_depend(slib); @@ -649,7 +649,7 @@ int Builder::create_targets() // Make the cmdline target depend on all targets mentioned on the command line Target *cmdline=new VirtualTarget(*this, "cmdline"); add_target(cmdline); - world->add_depend(cmdline); + bool build_world=false; for(list::iterator i=cmdline_targets.begin(); i!=cmdline_targets.end(); ++i) { Target *tgt=get_target(*i); @@ -660,10 +660,21 @@ int Builder::create_targets() cerr<<"I don't know anything about "<<*i<<'\n'; return -1; } + if(tgt==world) + build_world=true; cmdline->add_depend(tgt); } - world->prepare(); + /* If world is to be built, prepare cmdline. If not, add cmdline to world + and prepare world. I don't really like this, but it keeps the graph + acyclic. */ + if(build_world) + cmdline->prepare(); + else + { + world->add_depend(cmdline); + world->prepare(); + } return 0; }