]> git.tdb.fi Git - builder.git/blobdiff - source/sourcepackage.h
Flexible way to specify install locations for components
[builder.git] / source / sourcepackage.h
index b8750ee393f3d0946818297c58301840edd5f54e..b09ccf2a704f993cd8d873e0b28c2e198cf5149f 100644 (file)
@@ -1,13 +1,7 @@
-/* $Id$
-
-This file is part of builder
-Copyright © 2007-2009  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef SOURCEPACKAGE_H_
 #define SOURCEPACKAGE_H_
 
+#include <stdexcept>
 #include <string>
 #include "buildinfo.h"
 #include "component.h"
@@ -19,6 +13,13 @@ Distributed under the LGPL
 
 class Builder;
 
+class bad_expansion: public std::runtime_error
+{
+public:
+       bad_expansion(const std::string &w): std::runtime_error(w) { }
+       virtual ~bad_expansion() throw() { }
+};
+
 /**
 A package that can be built by Builder.
 */
@@ -27,10 +28,10 @@ class SourcePackage: public Package
 public:
        enum InstallFlags
        {
-               INCLUDE=1,
-               BIN=2,
-               LIB=4,
-               DATA=8
+               INCLUDE = 1,
+               BIN = 2,
+               LIB = 4,
+               DATA = 8
        };
 
        class Loader: public Package::Loader
@@ -39,13 +40,13 @@ public:
                Loader(Package &);
                SourcePackage &get_object() { return static_cast<SourcePackage &>(pkg); }
        private:
+               virtual void finish();
                void feature(const std::string &, const std::string &);
+               template<Component::Type>
+               void component(const std::string &);
                void condition(const std::string &);
-               void program(const std::string &);
-               void library(const std::string &);
-               void module(const std::string &);
-               void headers(const std::string &);
                void build_info();
+               void tarball(const std::string &);
                void tar_file(const std::string &);
        };
 
@@ -54,15 +55,12 @@ private:
        std::string description;
 
        Msp::FS::Path source;
-       PackageList base_reqs;
        FeatureList features;
        BuildInfo build_info;
        ConditionList conditions;
        ComponentList components;
        Config config;
-       bool conf_done;
        mutable DependencyCache deps_cache;
-       PathList tar_files;
 
 public:
        SourcePackage(Builder &, const std::string &, const Msp::FS::Path &);
@@ -83,8 +81,8 @@ public:
        unsigned get_install_flags();
 
        LibMode get_library_mode() const;
-       const PathList &get_tar_files() const { return tar_files; }
        DependencyCache &get_deps_cache() const { return deps_cache; }
+       std::string expand_string(const std::string &) const;
 private:
        virtual void do_configure(const StringMap &, unsigned);
 
@@ -94,6 +92,8 @@ private:
        /** Fills in build info based on configuration.  All required packages must be
        configured when this is called. */
        virtual void create_build_info();
+
+       virtual void create_targets();
 };
 
 #endif