void repository::builder::build(const entry &package) { try { BUNSAN_LOG_DEBUG << "Starting \"" << package << "\" " << __func__; const tempfile build_dir_ = local_system_().tempdir_for_build(); const boost::filesystem::path build_dir = build_dir_.path(); const boost::filesystem::path src = build_dir / m_config.name.dir.get_source(); const boost::filesystem::path build = build_dir / m_config.name.dir.get_build(); const boost::filesystem::path installation = build_dir / m_config.name.dir.get_installation(); // create/clean directories boost::filesystem::create_directory(src); boost::filesystem::create_directory(build); boost::filesystem::create_directory(installation); // unpack source snapshot snapshot_; unpack_source(package, src, snapshot_); get_builder()->install(build_dir / m_config.name.dir.get_source(), build_dir / m_config.name.dir.get_build(), build_dir / m_config.name.dir.get_installation()); cache_().pack_build(package, build_dir / m_config.name.dir.get_installation()); write_snapshot(cache_().build_snapshot_path(package), snapshot_); } catch (std::exception &) { BOOST_THROW_EXCEPTION(builder_build_error() << builder_build_error::package(package) << enable_nested_current()); } }
repository::builder::builder(repository &self, const build_config &config) : m_self(self), m_config(config) { for (const auto builder_cfg : config.builders) { if (m_builders.find(builder_cfg.first) != m_builders.end()) BOOST_THROW_EXCEPTION( invalid_configuration_duplicate_builder_error() << invalid_configuration_duplicate_builder_error::builder( builder_cfg.first)); const auto builder = builder_cfg.second.instance_optional(local_system_().resolver()); if (!builder) BOOST_THROW_EXCEPTION( invalid_configuration_builder_error() << invalid_configuration_builder_error::builder(builder_cfg.first) << invalid_configuration_builder_error::utility_type( builder_cfg.second.type)); m_builders[builder_cfg.first] = builder; } m_builder = get_builder(distributor_().format().builder); }
std::string const& namespace_alias() const { return get_builder().options_.namespace_alias_; }