]> git.tdb.fi Git - builder.git/blobdiff - source/package.h
Add a field for a human-readable name for packages
[builder.git] / source / package.h
index a2563bf3004d36027a6e5c37611a75dad545bb13..01a43a0fb8453c0fbd1eedfae560b745717a9d7c 100644 (file)
@@ -1,23 +1,15 @@
-/* $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/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
 #include "buildinfo.h"
+#include "config.h"
 
 class Builder;
 class 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
@@ -26,41 +18,57 @@ packages and the builderrc file for binary packages with no pkg-config support.
 class Package
 {
 public:
-       class Loader: public Msp::DataFile::Loader
+       class Loader: public Msp::DataFile::ObjectLoader<Package>
        {
        public:
                Loader(Package &);
-               Package &get_object() { return pkg; }
-       protected:
-               Package &pkg;
-
+       private:
+               void if_arch(const std::string &);
                void require(const std::string &);
        };
 
-       const std::string   &get_name() const           { return name; }
-       Builder             &get_builder() const        { return builder; }
-       const PackageList   &get_requires() const       { return requires; }
-       const BuildInfo     &get_exported_binfo() const { return export_binfo; }
+       typedef std::list<Package *> Requirements;
 
-       /// 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;
+       Builder &builder;
 
-       std::string   name;
+       std::string name;
+       std::string label;
 
-       PackageList   requires;
-       BuildInfo     export_binfo;
-       bool          conf_done;
+       Requirements requires;
+       BuildInfo export_binfo;
+       bool prepared;
+       std::list<std::string> problems;
 
-       bool          use_pkgconfig;
+       bool use_pkgconfig;
 
        Package(Builder &, const std::string &);
-       virtual void do_configure(const StringMap &, unsigned) { }
-       virtual void create_build_info() { }
+public:
+       virtual ~Package() { }
+
+       Builder &get_builder() const { return builder; }
+       const std::string &get_name() const { return name; }
+       const std::string &get_label() const { return label; }
+       const Requirements &get_required_packages() const { return requires; }
+
+       const BuildInfo &get_exported_build_info() const { return export_binfo; }
+
+       /// Indicates whether or not this package supports pkg-config
+       bool uses_pkgconfig() const { return use_pkgconfig; }
+
+       /** Prepares the package for building.  Recursively prepares all required
+       packages, populates build info and creates targets. */
+       void prepare();
+
+protected:
+       virtual void do_prepare() { }
+
+public:
+       bool is_prepared() const { return prepared; }
+
+       const std::list<std::string> &get_problems() const { return problems; }
+
+       virtual void save_caches() { }
 };
 
 #endif