]> git.tdb.fi Git - builder.git/blobdiff - source/package.h
Revamp problem reporting system to be more useful
[builder.git] / source / package.h
index eee157234f6df23b6ec4acbc912bd4bc22e53dee..4620cf475f51d3d99b5d251b274a760a92a4fb97 100644 (file)
@@ -1,87 +1,67 @@
+/* $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 "config.h"
 
 class Builder;
 class Package;
 
-class PackageRef
-{
-public:
-       PackageRef(Builder &, const std::string &);
-       const std::string &get_name() const { return name; }
-       Package *get_package() const { return package; }
-       Package *resolve();
-private:
-       Builder     &builder;
-       std::string name;
-       Package     *package;
-};
+typedef std::list<Package *> PackageList;
 
+/**
+A package is a distributable piece of software.  Package information may be
+obtained in several ways: Build files of source packages, pkg-config for binary
+packages and the builderrc file for binary packages with no pkg-config support.
+*/
 class Package
 {
 public:
-       class Loader: public Msp::Parser::Loader
+       class Loader: public Msp::DataFile::Loader
        {
        public:
                Loader(Package &);
                Package &get_object() { return pkg; }
-               ~Loader();
-       private:
+       protected:
                Package &pkg;
-               
+
                void require(const std::string &);
-               void program(const std::string &);
-               void library(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> &);
-       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; }
+       Builder             &get_builder() const        { return builder; }
+       const PackageList   &get_requires() const       { return requires; }
+       PackageList         collect_requires();
        const BuildInfo     &get_exported_binfo() const { return export_binfo; }
-       void                resolve_refs();
-       void                create_build_info();
-       void                process_options(const RawOptionMap &);
 
-       static Package *create(Builder &, const std::string &);
-private:
-       enum InstallFlags
-       {
-               INCLUDE=1,
-               BIN=2,
-               LIB=4,
-               DATA=8
-       };
-       
+       /// Indicates whether or not this package supports pkg-config
+       bool get_use_pkgconfig() const { return use_pkgconfig; }
+
+       void                configure(const StringMap &, unsigned);
+       virtual ~Package() { }
+protected:
        Builder       &builder;
+
        std::string   name;
-       std::string   version;
-       std::string   description;
-       std::list<PackageRef> requires;
-       BuildInfo     build_info;
+
+       PackageList   requires;
        BuildInfo     export_binfo;
-       Msp::Path::Path source;
-       bool          buildable;
-       ComponentList components;
-       Config        config;
-       bool          build_info_ready;
+       bool          conf_done;
+
+       bool          use_pkgconfig;
 
-       void init_buildable();
-       unsigned get_install_flags();
+       Package(Builder &, const std::string &);
+       virtual void do_configure(const StringMap &, unsigned) { }
+       virtual void create_build_info() { }
 };
 
 #endif