-#include <iostream>
+/* $Id$
+
+This file is part of builder
+Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include <msp/path/utils.h>
+#include <msp/strings/formatter.h>
#include "builder.h"
#include "component.h"
#include "executable.h"
#include "link.h"
#include "objectfile.h"
#include "package.h"
+#include "sharedlibrary.h"
#include "staticlibrary.h"
using namespace std;
*/
void Executable::find_depends()
{
- LibMode libmode=package->get_library_mode();
+ LibMode libmode=comp.get_package().get_library_mode();
+ if(dynamic_cast<SharedLibrary *>(this))
+ libmode=DYNAMIC;
list<const Component *> queue;
list<Target *> dep_libs;
queue.erase(queue.begin());
const StringList &libpath=c->get_build_info().libpath;
- const string &arch=c->get_package().get_arch();
const list<string> &libs=c->get_build_info().libs;
for(StringList::const_iterator i=libs.begin(); i!=libs.end(); ++i)
{
- Target *lib=builder.get_library(*i, arch, libpath, libmode);
+ Target *lib=builder.get_library(*i, libpath, libmode);
if(lib)
{
dep_libs.push_back(lib);
queue.push_back(&stlib->get_component());
}
else
- cout<<"Couldn't find library "<<*i<<" for "<<name<<'\n';
- //XXX Throw an exception here or something
+ builder.problem(comp.get_package().get_name(), format("Couldn't find library %s for %s", *i, basename(name)));
}
}
*/
string Executable::generate_target_name(const Component &c)
{
- string prefix,suffix;
- const string &arch=c.get_package().get_arch();
+ const SourcePackage &pkg=c.get_package();
+ string prefix, suffix;
+ const string &arch=pkg.get_builder().get_current_arch().get_name();
if(c.get_type()==Component::LIBRARY)
{
suffix=".exe";
}
- return (c.get_package().get_out_dir()/(prefix+c.get_name()+suffix)).str();
+ return (pkg.get_out_dir()/(prefix+c.get_name()+suffix)).str();
}