]> git.tdb.fi Git - builder.git/blobdiff - source/package.h
Adjust requires to library changes
[builder.git] / source / package.h
index a1a9859136f7f262543f232391e480e6de2e915e..75ef358f2c2d675150a10fa04cc546e590f6be5c 100644 (file)
 #include <msp/parser/loader.h>
 #include "buildinfo.h"
 #include "component.h"
+#include "condition.h"
 #include "config.h"
+#include "feature.h"
 #include "packageref.h"
 
 class Builder;
+class Package;
 
+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).
+*/
 class Package
 {
 public:
+       enum InstallFlags
+       {
+               INCLUDE=1,
+               BIN=2,
+               LIB=4,
+               DATA=8
+       };
+
+       /// Loads a package from a file.
        class Loader: public Msp::Parser::Loader
        {
        public:
                Loader(Package &);
                Package &get_object() { return pkg; }
-               ~Loader();
        private:
                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();
        };
 
        Package(Builder &, const std::string &, const Msp::Path::Path &);
-       Package(Builder &, const std::string &, const std::vector<std::string> &);
        void                set_path(const Msp::Path::Path &);
-       const std::string   &get_name() const       { return name; }
-       const Msp::Path::Path &get_source() const   { return source; }
-       const ComponentList &get_components() const { return components; }
-       bool                get_buildable() const   { return buildable; }
-       const Config        &get_config() const     { return config; }
-       const std::list<PackageRef> &get_requires() const { return requires; }
-       const BuildInfo     &get_build_info() const { return build_info; }
+       const std::string   &get_name() const           { return name; }
+       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; }
+       const PkgRefList    &get_requires() const       { return requires; }
+       const BuildInfo     &get_build_info() const     { return build_info; }
        const BuildInfo     &get_exported_binfo() const { return export_binfo; }
-       Builder             &get_builder() const    { return builder; }
-       bool                get_need_path() const   { return need_path; }
+       Builder             &get_builder() const        { return builder; }
+       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;
        void                resolve_refs();
-       void                create_build_info();
-       void                process_options(const RawOptionMap &);
+       void                configure(const StringMap &, unsigned);
 
        static Package *create(Builder &, const std::string &);
 private:
-       enum InstallFlags
-       {
-               INCLUDE=1,
-               BIN=2,
-               LIB=4,
-               DATA=8
-       };
-       
        Builder       &builder;
+       
        std::string   name;
        std::string   version;
        std::string   description;
-       std::list<PackageRef> requires;
+       
+       bool          buildable;
+       Msp::Path::Path source;
+       PkgRefList    requires;
+       PackageList   all_reqs;
+       FeatureList   features;
        BuildInfo     build_info;
        BuildInfo     export_binfo;
-       Msp::Path::Path source;
-       bool          buildable;
+       ConditionList conditions;
        ComponentList components;
        Config        config;
-       bool          build_info_ready;
+       bool          conf_done;
+
+       bool          use_pkgconfig;
        bool          need_path;
        Msp::Path::Path path;
 
-       void init_buildable();
-       unsigned get_install_flags();
+       Package(Builder &, const std::string &, const std::vector<std::string> &);
+       void     init_config();
+       void     create_build_info();
 };
 
 #endif