]> git.tdb.fi Git - builder.git/blobdiff - source/staticlibrary.cpp
Use build info to store static library dependencies
[builder.git] / source / staticlibrary.cpp
index 9a35677efcd3891d1a61e097e15e57016fbd6529..5ff84770021f4b67af5b64e0c505f14f7e586a62 100644 (file)
@@ -1,33 +1,41 @@
-/* $Id$
-
-This file is part of builder
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#include "archive.h"
+#include "builder.h"
 #include "component.h"
 #include "objectfile.h"
 #include "sourcepackage.h"
 #include "staticlibrary.h"
 
 using namespace std;
+using namespace Msp;
 
-StaticLibrary::StaticLibrary(Builder &b, const Component &c, const std::list<ObjectFile *> &objs):
-       Target(b, &c.get_package(), generate_target_name(c)),
-       comp(c)
+StaticLibrary::StaticLibrary(Builder &b, const FS::Path &p):
+       FileTarget(b, p)
+{ }
+
+StaticLibrary::StaticLibrary(Builder &b, const Component &c, const list<ObjectFile *> &objs):
+       FileTarget(b, c.get_package(), c.get_package().get_output_directory()/generate_filename(c))
 {
-       buildable=true;
+       component = &c;
        for(list<ObjectFile *>::const_iterator i=objs.begin(); i!=objs.end(); ++i)
-               add_depend(*i);
+               add_dependency(**i);
+
+       install_location = "lib";
+       nested_build_sig = true;
+       arch_in_build_sig = true;
+}
+
+string StaticLibrary::generate_filename(const Component &comp)
+{
+       const Architecture &arch = comp.get_package().get_builder().get_current_arch();
+       return arch.get_static_library_patterns().front().apply(comp.get_name());
 }
 
-Action *StaticLibrary::create_action()
+void StaticLibrary::add_required_library(const string &lib)
 {
-       return new Archive(builder, *this);
+       build_info.libs.push_back(lib);
 }
 
-string StaticLibrary::generate_target_name(const Component &c)
+void StaticLibrary::collect_build_info(BuildInfo &binfo) const
 {
-       return (c.get_package().get_out_dir()/("lib"+c.get_name()+".a")).str();
+       Target::collect_build_info(binfo);
+       binfo.update_from(build_info);
 }