void Component::prepare()
{
- for(PackageList::const_iterator i=requires.begin(); i!=requires.end(); ++i)
+ for(Package::Requirements::const_iterator i=requires.begin(); i!=requires.end(); ++i)
(*i)->prepare();
}
{
BuildInfo final_build_info;
- const PackageList &pkg_reqs = package.get_required_packages();
- PackageList direct_reqs = requires;
+ const Package::Requirements &pkg_reqs = package.get_required_packages();
+ Package::Requirements direct_reqs = requires;
direct_reqs.insert(direct_reqs.end(), pkg_reqs.begin(), pkg_reqs.end());
- PackageList all_reqs = direct_reqs;
- for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
+ Package::Requirements all_reqs = direct_reqs;
+ for(Package::Requirements::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
{
BuildInfo::UpdateLevel level = BuildInfo::CHAINED;
if(find(direct_reqs.begin(), direct_reqs.end(), *i)!=direct_reqs.end())
level = BuildInfo::DEPENDENCY;
final_build_info.update_from((*i)->get_exported_build_info(), level);
- const PackageList &reqs = (*i)->get_required_packages();
- for(PackageList::const_iterator j=reqs.begin(); j!=reqs.end(); ++j)
+ const Package::Requirements &reqs = (*i)->get_required_packages();
+ for(Package::Requirements::const_iterator j=reqs.begin(); j!=reqs.end(); ++j)
if(find(all_reqs.begin(), all_reqs.end(), *j)==all_reqs.end())
all_reqs.push_back(*j);
}
if(build_info.libmode<BuildInfo::DYNAMIC)
{
- for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
+ for(Package::Requirements::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
{
const BuildInfo &ebi = (*i)->get_exported_build_info();
build_info.libpath.insert(build_info.libpath.end(), ebi.libpath.begin(), ebi.libpath.end());
Builder &builder = package.get_builder();
const Toolchain &toolchain = builder.get_toolchain();
- PathList source_filenames = collect_source_files();
+ SourceList source_filenames = collect_source_files();
list<Target *> inst_list;
string inst_loc;
if(type==TARBALL)
{
- //const Tool &tar = toolchain.get_tool("TAR");
-
- string tarname = name;
- if(name=="@src")
- {
- tarname = package.get_name()+"-"+package.get_version();
- source_filenames.push_back(package.get_source_directory()/"Build");
- }
+ const Tool &tar = toolchain.get_tool("TAR");
list<Target *> files;
- for(PathList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
+ for(SourceList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
{
FileTarget *file = builder.get_vfs().get_target(*i);
if(!file)
- file = new File(builder, *i);
+ file = new File(builder, package, *i);
files.push_back(file);
}
+ string tarname = name;
if(name=="@src")
{
+ tarname = package.get_name()+"-"+package.get_version();
+ files.insert(files.begin(), &package.get_build_file());
+
const Builder::TargetMap &targets = builder.get_targets();
for(Builder::TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
if(i->second->get_package()==&package && !i->second->is_buildable())
- files.push_back(i->second);
+ if(find(files.begin(), files.end(), i->second)==files.end())
+ files.push_back(i->second);
}
- /* XXX The source files don't have a package at the moment, so we can't
- create the tarball target until things get fixed up a bit */
- /*Target *result = tar.create_target(files, tarname);
+ Target *result = tar.create_target(files, tarname);
- Target *tarballs_tgt = builder.get_target("tarballs");
- tarballs_tgt->add_dependency(*result);*/
+ builder.get_target("tarballs")->add_dependency(*result);
return;
}
else if(type==INSTALL)
{
inst_loc = name;
- for(PathList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
+ for(SourceList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
{
FileTarget *ft;
if(Target *tgt = builder.get_vfs().get_target(*i))
if(type==PROGRAM || type==LIBRARY || type==MODULE)
{
list<Target *> objs;
- for(PathList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
+ for(SourceList::const_iterator i=source_filenames.begin(); i!=source_filenames.end(); ++i)
{
string ext = FS::extpart(FS::basename(*i));
const Tool *tool = toolchain.get_tool_for_suffix(ext, true);
if(tool)
{
Target *src = tool->create_source(*this, *i);
+ if(!src)
+ continue;
+
if(tool->accepts_suffix(ext))
{
Target *obj = tool->create_target(*src);
objs.push_back(obj);
}
- if(type==LIBRARY && install && !dynamic_cast<FileTarget *>(src)->get_install_location().empty())
+ if(type==LIBRARY && install && dynamic_cast<FileTarget *>(src)->is_installable())
inst_list.push_back(src);
}
}
}
}
-PathList Component::collect_source_files() const
+Component::SourceList Component::collect_source_files() const
{
- PathList files;
- for(StringList::const_iterator i=sources.begin(); i!=sources.end(); ++i)
+ SourceList files;
+ for(SourceList::const_iterator i=sources.begin(); i!=sources.end(); ++i)
{
FS::Path path(*i);
if(FS::is_dir(path))