#include <msp/core/application.h>
#include <msp/datafile/loader.h>
#include <msp/path/path.h>
+#include "architecture.h"
#include "config.h"
#include "misc.h"
+#include "problem.h"
#include "target.h"
class Analyzer;
class Config;
class Package;
+class SourcePackage;
/**
The main application class. Controls and owns everything. Rules the world.
bool get_dry_run() const { return dry_run; }
bool get_build_all() const { return build_all; }
Package *get_package(const std::string &);
- Package *get_default_package() const { return default_pkg; }
+ SourcePackage *get_main_package() const { return main_pkg; }
Target *get_target(const std::string &) const;
const TargetMap &get_targets() const { return targets; }
- Target *get_header(const std::string &, const std::string &, const std::string &, const StringList &);
- Target *get_library(const std::string &, const std::string &, const StringList &, LibMode);
- const Msp::Path::Path &get_cwd() const { return cwd; }
- const std::string &get_arch_prefix(const std::string &) const;
- std::string get_tool(const std::string &, const std::string &);
+ Target *get_header(const std::string &, const std::string &, const StringList &);
+ Target *get_library(const std::string &, const StringList &, LibMode);
+ const Msp::Path &get_cwd() const { return cwd; }
+ const Architecture &get_architecture(const std::string &) const;
+ const Architecture &get_current_arch() const;
+ const std::string &get_prefix() const { return prefix; }
void apply_profile_template(Config &, const std::string &) const;
void add_target(Target *);
+ void problem(const std::string &, const std::string &);
int main();
~Builder();
class Loader: public Msp::DataFile::Loader
{
public:
- Loader(Builder &, const Msp::Path::Path &);
+ Loader(Builder &, const Msp::Path &);
private:
Builder &bld;
- Msp::Path::Path src;
+ Msp::Path src;
+ void architecture(const std::string &);
+ void binpkg(const std::string &);
+ void profile(const std::string &);
void package(const std::string &);
};
+ class ProfileLoader: public Msp::DataFile::Loader
+ {
+ public:
+ ProfileLoader(StringMap &);
+ private:
+ StringMap &profile;
+
+ void option(const std::string &, const std::string &);
+ };
+
typedef std::list<Package *> PackageList;
typedef std::map<std::string, Package *> PackageMap;
- typedef std::map<std::string, StringMap> ToolMap;
typedef std::map<std::string, StringMap> ProfileTemplateMap;
StringList cmdline_targets;
StringMap cmdline_options;
- Msp::Path::Path cwd;
+ Msp::Path cwd;
PackageMap packages;
- PackageList new_pkgs;
- Package *default_pkg;
+ SourcePackage *main_pkg;
TargetMap targets;
TargetList new_tgts;
TargetMap includes;
TargetMap libraries;
- ToolMap tools; //< arch, tool name -> program name
- StringMap archs; //< arch -> prefix
+ ArchMap archs;
ProfileTemplateMap profile_tmpl;
+ ProblemList problems;
Analyzer *analyzer;
bool build;
unsigned clean;
bool dry_run;
bool help;
unsigned verbose;
- bool chrome;
+ bool show_progress;
std::string build_file;
unsigned jobs;
StringList what_if;
bool conf_only;
bool build_all;
bool create_makefile;
+ std::string current_arch;
+ std::string prefix;
- int load_build_file(const Msp::Path::Path &);
+ int load_build_file(const Msp::Path &);
int create_targets();
- Target *get_header(const Msp::Path::Path &);
- Target *get_library(const std::string &, const std::string &, const Msp::Path::Path &, LibMode);
+ Target *get_header(const Msp::Path &);
+ Target *get_library(const std::string &, const Msp::Path &, LibMode);
void update_hash(std::string &, const std::string &);
int do_build();
int do_clean();