]> git.tdb.fi Git - builder.git/blobdiff - source/sharedlibrary.h
Use default member initializers and constructor delegation
[builder.git] / source / sharedlibrary.h
index 92427d583f497fbd097195b9ec3a94ab95560c0d..564b2102004d714da37d3042dd682cf37e488b95 100644 (file)
@@ -1,27 +1,39 @@
-/* $Id$
-
-This file is part of builder
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef SHAREDLIB_H_
 #define SHAREDLIB_H_
 
-#include "executable.h"
+#include "binary.h"
+
+class ImportLibrary;
 
 /**
-Represents a shared library.  Mainly exists to give extra information to the
-user.
+Represents a shared library.  It has two special properties: libname and
+soname.  Libname is the name used by the linker.  Soname is the canonical
+filename of the library, including version number.  If the owning package has
+no version, soname will be empty.
+
+A SharedLibrary can also store a pointer to the associated ImportLibrary, for
+platforms that need one.
 */
-class SharedLibrary: public Executable
+class SharedLibrary: public Binary
 {
-public:
-       SharedLibrary(Builder &, const Component &, const std::list<ObjectFile *> &);
-       const char        *get_type() const    { return "SharedLibrary"; }
-       const std::string &get_libname() const { return libname; }
 private:
        std::string libname;
+       std::string soname;
+       ImportLibrary *import_lib = 0;
+
+public:
+       SharedLibrary(Builder &, const Msp::FS::Path &);
+       SharedLibrary(Builder &, const Component &, const std::vector<ObjectFile *> &);
+private:
+       static std::string generate_filename(const Component &);
+
+public:
+       const char *get_type() const override { return "SharedLibrary"; }
+       const std::string &get_libname() const { return libname; }
+       const std::string &get_soname() const { return soname; }
+
+       void set_import_library(ImportLibrary *);
+       ImportLibrary *get_import_library() const { return import_lib; }
 };
 
 #endif