]> git.tdb.fi Git - builder.git/blobdiff - source/jarsigner.cpp
A bunch of new tools and targets to build Android packages
[builder.git] / source / jarsigner.cpp
diff --git a/source/jarsigner.cpp b/source/jarsigner.cpp
new file mode 100644 (file)
index 0000000..b8c9a50
--- /dev/null
@@ -0,0 +1,43 @@
+#include <cstdlib>
+#include <msp/fs/utils.h>
+#include "component.h"
+#include "externaltask.h"
+#include "filetarget.h"
+#include "jarsigner.h"
+#include "sourcepackage.h"
+
+using namespace std;
+using namespace Msp;
+
+JarSigner::JarSigner(Builder &b):
+       Tool(b, "JSGN")
+{
+       set_command("jarsigner");
+}
+
+Target *JarSigner::create_target(const list<Target *> &, const string &)
+{
+       throw logic_error("not implemented");
+}
+
+Task *JarSigner::run(const Target &tgt) const
+{
+       const FileTarget &file = dynamic_cast<const FileTarget &>(tgt);
+
+       ExternalTask::Arguments argv;
+       argv.push_back(executable->get_path().str());
+
+       // TODO Make this generic
+       FS::Path home_dir = getenv("HOME");
+       argv.push_back("-keystore");
+       argv.push_back((home_dir/".android"/"debug.keystore").str());
+       argv.push_back("-storepass");
+       argv.push_back("android");
+
+       FS::Path work_dir = file.get_component()->get_package().get_source_directory();
+
+       argv.push_back(FS::relative(file.get_path(), work_dir).str());
+       argv.push_back("androiddebugkey");
+
+       return new ExternalTask(argv, work_dir);
+}