using namespace std;
using namespace Msp;
-PackageRef::PackageRef(Builder &b, const string &n):
- builder(b),
- name(n),
- package(0)
-{ }
-
-Package *PackageRef::resolve()
-{
- if(!package)
- package=builder.get_package(name);
- return package;
-}
-
Package::Package(Builder &b, const string &n, const Path::Path &s):
builder(b),
name(n),
}
if(strtobool(config.get_option("debug").value))
+ {
build_info.cflags.push_back("-ggdb");
+ build_info.defines.push_back("DEBUG");
+ }
build_info.unique();
export_binfo.unique();
void Package::process_options(const RawOptionMap &opts)
{
- config.process(opts);
+ if(config.process(opts))
+ config.save(source/".options.cache");
}
Package *Package::create(Builder &b, const string &name)
{
list<string> argv;
argv.push_back("pkg-config");
+ argv.push_back("--silence-errors");
argv.push_back("--cflags");
argv.push_back("--libs");
argv.push_back(name);
vector<string> info=split(run_command(argv));
if(info.empty())
- return 0;
+ {
+ if(name=="opengl")
+ info.push_back("-lGL");
+ else if(name=="pthread")
+ info.push_back("-lpthread");
+ else if(name=="gmpxx")
+ info.push_back("-lgmpxx");
+ else
+ return 0;
+ }
Package *pkg=new Package(b, name, info);
return pkg;
config.add_option("includedir", "$prefix/lib", "Library installation directory");
if(flags&DATA)
config.add_option("includedir", "$prefix/share", "Data installation directory");*/
+
+ config.load(source/".options.cache");
}
unsigned Package::get_install_flags()
add("require", &Loader::require);
add("program", &Loader::program);
add("library", &Loader::library);
+ add("headers", &Loader::headers);
+ add("build_info", &Loader::build_info);
}
Package::Loader::~Loader()
pkg.requires.push_back(PackageRef(pkg.builder, n));
}
-void Package::Loader::program(const std::string &n)
+void Package::Loader::program(const string &n)
{
Component prog(pkg, Component::PROGRAM, n);
load_sub(prog);
pkg.components.push_back(prog);
}
-void Package::Loader::library(const std::string &n)
+void Package::Loader::library(const string &n)
{
Component prog(pkg, Component::LIBRARY, n);
load_sub(prog);
pkg.components.push_back(prog);
}
+
+void Package::Loader::headers(const string &n)
+{
+ Component prog(pkg, Component::HEADERS, n);
+ load_sub(prog);
+ pkg.components.push_back(prog);
+}
+
+void Package::Loader::build_info()
+{
+ load_sub(pkg.build_info);
+}