]> git.tdb.fi Git - builder.git/blobdiff - source/package.h
Add DependencyCache to speed up build preparation
[builder.git] / source / package.h
index 52338ccb501d2c38db1d4141bdcca65a53b10bc5..90ee6bc510abc941262d884146c6d053db32f522 100644 (file)
@@ -1,12 +1,22 @@
+/* $Id$
+
+This file is part of builder
+Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
 #ifndef PACKAGE_H_
 #define PACKAGE_H_
 
 #include <list>
 #include <string>
-#include <msp/parser/loader.h>
+#include <msp/datafile/loader.h>
 #include "buildinfo.h"
 #include "component.h"
+#include "condition.h"
 #include "config.h"
+#include "dependencycache.h"
+#include "feature.h"
 #include "packageref.h"
 
 class Builder;
@@ -17,8 +27,7 @@ typedef std::list<Package *> PackageList;
 /**
 A package is a distributable piece of software.  They consist of one or more
 Components and may depend on other packages.  Packages also have configuration
-to determine where files are installed and which features to include (features
-NYI).
+to determine where files are installed and which features to include.
 */
 class Package
 {
@@ -32,7 +41,7 @@ public:
        };
 
        /// Loads a package from a file.
-       class Loader: public Msp::Parser::Loader
+       class Loader: public Msp::DataFile::Loader
        {
        public:
                Loader(Package &);
@@ -41,10 +50,14 @@ public:
                Package &pkg;
                
                void require(const std::string &);
+               void feature(const std::string &, 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 tar_file(const std::string &);
        };
 
        Package(Builder &, const std::string &, const Msp::Path::Path &);
@@ -53,6 +66,9 @@ public:
        const std::string   &get_version() const        { return version; }
        const std::string   &get_description() const    { return description; }
        const Msp::Path::Path &get_source() const       { return source; }
+       Msp::Path::Path     get_temp_dir() const;
+       Msp::Path::Path     get_out_dir() const;
+       Msp::Path::Path     get_prefix() const          { return config.get_option("prefix").value; }
        const ComponentList &get_components() const     { return components; }
        bool                get_buildable() const       { return buildable; }
        const Config        &get_config() const         { return config; }
@@ -63,8 +79,12 @@ public:
        bool                get_need_path() const       { return need_path; }
        unsigned            get_install_flags();
        bool                get_use_pkgconfig() const   { return use_pkgconfig; }
+       const std::string   &get_arch() const           { return config.get_option("arch").value; }
+       LibMode             get_library_mode() const;
+       const PathList      &get_tar_files() const      { return tar_files; }
+       DependencyCache     &get_deps_cache() const     { return deps_cache; }
        void                resolve_refs();
-       void                configure(const RawOptionMap &, unsigned);
+       void                configure(const StringMap &, unsigned);
 
        static Package *create(Builder &, const std::string &);
 private:
@@ -78,11 +98,15 @@ private:
        Msp::Path::Path source;
        PkgRefList    requires;
        PackageList   all_reqs;
+       FeatureList   features;
        BuildInfo     build_info;
        BuildInfo     export_binfo;
+       ConditionList conditions;
        ComponentList components;
        Config        config;
        bool          conf_done;
+       mutable DependencyCache deps_cache;
+       PathList      tar_files;
 
        bool          use_pkgconfig;
        bool          need_path;