]> git.tdb.fi Git - builder.git/blob - source/tarball.cpp
Include libmode in library lookup hash
[builder.git] / source / tarball.cpp
1 /* $Id$
2
3 This file is part of builder
4 Copyright © 2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "builder.h"
9 #include "file.h"
10 #include "sourcepackage.h"
11 #include "tar.h"
12 #include "tarball.h"
13
14 using namespace std;
15
16 TarBall::TarBall(Builder &b, const SourcePackage &p, const string &ev):
17         Target(b, &p, create_target_name(p, ev))
18 {
19         buildable=true;
20 }
21
22 const SourcePackage *TarBall::get_package() const
23 {
24         return static_cast<const SourcePackage *>(package);
25 }
26
27 void TarBall::find_depends()
28 {
29         const SourcePackage *spkg=dynamic_cast<const SourcePackage *>(package);
30
31         const TargetMap &targets=builder.get_targets();
32         for(TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
33                 if(i->second->get_package()==package && i->second!=this && !i->second->get_buildable())
34                         add_depend(i->second);
35
36         const PathList &tar_files=spkg->get_tar_files();
37         for(PathList::const_iterator i=tar_files.begin(); i!=tar_files.end(); ++i)
38         {
39                 Target *tgt=builder.get_target(i->str());
40                 if(!tgt)
41                         tgt=new File(builder, i->str());
42                 add_depend(tgt);
43         }
44
45         deps_ready=true;
46 }
47
48 Action *TarBall::create_action()
49 {
50         return new Tar(builder, *this);
51 }
52
53 string TarBall::create_target_name(const SourcePackage &pkg, const string &extra_ver)
54 {
55         string basename=pkg.get_name()+"-"+pkg.get_version();
56         if(!extra_ver.empty())
57                 basename+="-"+extra_ver;
58         basename+=".tar";
59
60         return (pkg.get_source()/basename).str();
61 }