]> git.tdb.fi Git - builder.git/blobdiff - source/tarball.cpp
Add tarball building
[builder.git] / source / tarball.cpp
diff --git a/source/tarball.cpp b/source/tarball.cpp
new file mode 100644 (file)
index 0000000..348272f
--- /dev/null
@@ -0,0 +1,54 @@
+/* $Id$
+
+This file is part of builder
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include "builder.h"
+#include "file.h"
+#include "package.h"
+#include "tar.h"
+#include "tarball.h"
+
+using namespace std;
+
+TarBall::TarBall(Builder &b, const Package &p, const string &ev):
+       Target(b, &p, create_target_name(p, ev))
+{
+       buildable=true;
+}
+
+void TarBall::find_depends()
+{
+       const TargetMap &targets=builder.get_targets();
+       for(TargetMap::const_iterator i=targets.begin(); i!=targets.end(); ++i)
+               if(i->second->get_package()==package && i->second!=this && !i->second->get_buildable())
+                       add_depend(i->second);
+
+       const PathList &tar_files=package->get_tar_files();
+       for(PathList::const_iterator i=tar_files.begin(); i!=tar_files.end(); ++i)
+       {
+               Target *tgt=builder.get_target(i->str());
+               if(!tgt)
+                       tgt=new File(builder, i->str());
+               add_depend(tgt);
+       }
+
+       deps_ready=true;
+}
+
+Action *TarBall::build()
+{
+       return Target::build(new Tar(builder, *this));
+}
+
+string TarBall::create_target_name(const Package &pkg, const string &extra_ver)
+{
+       string basename=pkg.get_name()+"-"+pkg.get_version();
+       if(!extra_ver.empty())
+               basename+="-"+extra_ver;
+       basename+=".tar";
+
+       return (pkg.get_source()/basename).str();
+}