]> git.tdb.fi Git - builder.git/blob - source/tarball.cpp
Add tarball building
[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 "package.h"
11 #include "tar.h"
12 #include "tarball.h"
13
14 using namespace std;
15
16 TarBall::TarBall(Builder &b, const Package &p, const string &ev):
17         Target(b, &p, create_target_name(p, ev))
18 {
19         buildable=true;
20 }
21
22 void TarBall::find_depends()
23 {
24         const TargetMap &targets=builder.get_targets();
25         for(TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
26                 if(i->second->get_package()==package && i->second!=this && !i->second->get_buildable())
27                         add_depend(i->second);
28
29         const PathList &tar_files=package->get_tar_files();
30         for(PathList::const_iterator i=tar_files.begin(); i!=tar_files.end(); ++i)
31         {
32                 Target *tgt=builder.get_target(i->str());
33                 if(!tgt)
34                         tgt=new File(builder, i->str());
35                 add_depend(tgt);
36         }
37
38         deps_ready=true;
39 }
40
41 Action *TarBall::build()
42 {
43         return Target::build(new Tar(builder, *this));
44 }
45
46 string TarBall::create_target_name(const Package &pkg, const string &extra_ver)
47 {
48         string basename=pkg.get_name()+"-"+pkg.get_version();
49         if(!extra_ver.empty())
50                 basename+="-"+extra_ver;
51         basename+=".tar";
52
53         return (pkg.get_source()/basename).str();
54 }