You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by za...@apache.org on 2014/12/15 14:33:00 UTC

[11/37] cordova-ubuntu git commit: Separated ubuntu.js in multiple tasks files for better maintainability. Use template folder for storing project assets and tasks. Deleted unecessary package.json. Various improvements.

Separated ubuntu.js in multiple tasks files for better maintainability. Use template folder for storing project assets and tasks. Deleted unecessary package.json. Various improvements.


Project: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/commit/4894ac2f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/tree/4894ac2f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/diff/4894ac2f

Branch: refs/heads/master
Commit: 4894ac2f9d7b83ff94d895badfef4f5d93b9b02a
Parents: eb7c05c
Author: Jean-Francois Moy <je...@gmail.com>
Authored: Wed Oct 29 11:56:03 2014 +0000
Committer: Jean-Francois Moy <je...@gmail.com>
Committed: Wed Oct 29 11:56:03 2014 +0000

----------------------------------------------------------------------
 bin/build/build                                |  32 -
 bin/build/clean                                |  28 -
 bin/build/lib/msg.js                           |  25 -
 bin/build/lib/templates/changelog              |   7 -
 bin/build/lib/templates/compat                 |   1 -
 bin/build/lib/templates/control                |  17 -
 bin/build/lib/templates/cordova.desktop        |   7 -
 bin/build/lib/templates/install                |   3 -
 bin/build/lib/templates/rules                  |  27 -
 bin/build/lib/ubuntu.js                        | 610 --------------------
 bin/build/run                                  |  32 -
 bin/build/version                              |  25 -
 bin/check_reqs                                 |  14 +-
 bin/create                                     |  57 +-
 bin/lib/check_reqs.js                          |  92 +++
 bin/lib/create.js                              |  63 ++
 bin/lib/update.js                              |  69 +++
 bin/package.json                               |  37 --
 bin/templates/project/cordova/build            |  33 ++
 bin/templates/project/cordova/clean            |  27 +
 bin/templates/project/cordova/defaults.xml     |  33 ++
 bin/templates/project/cordova/lib/build.js     | 352 +++++++++++
 bin/templates/project/cordova/lib/constants.js |  33 ++
 bin/templates/project/cordova/lib/device.js    |  72 +++
 bin/templates/project/cordova/lib/msg.js       |  25 +
 bin/templates/project/cordova/lib/run.js       | 137 +++++
 bin/templates/project/cordova/lib/utils.js     |  72 +++
 bin/templates/project/cordova/run              |  33 ++
 bin/templates/project/cordova/version          |  25 +
 bin/templates/project/misc/changelog           |   7 +
 bin/templates/project/misc/compat              |   1 +
 bin/templates/project/misc/control             |  17 +
 bin/templates/project/misc/cordova.desktop     |   7 +
 bin/templates/project/misc/install             |   3 +
 bin/templates/project/misc/rules               |  27 +
 bin/update                                     |  41 +-
 package.json                                   |  30 +-
 37 files changed, 1175 insertions(+), 946 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/build
----------------------------------------------------------------------
diff --git a/bin/build/build b/bin/build/build
deleted file mode 100755
index e40d98e..0000000
--- a/bin/build/build
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var path = require('path');
-var platform = require('./lib/ubuntu');
-
-var root = path.resolve();
-var www = path.join(root, 'www');
-
-var argv = require('optimist').string(['framework']).argv;
-
-platform.check_reqs(root).then(function () {
-    return platform.build(root, platform.ALL, false, undefined, argv.framework, false);
-}).done();

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/clean
----------------------------------------------------------------------
diff --git a/bin/build/clean b/bin/build/clean
deleted file mode 100755
index 4f1f27a..0000000
--- a/bin/build/clean
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-var path = require('path');
-var args = process.argv;
-var ROOT = path.join(__dirname, '..');
-var shell = require('shelljs');
-var fs    = require('fs');
-var et    = require('elementtree');
-
-throw new Error('unimplemented');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/msg.js
----------------------------------------------------------------------
diff --git a/bin/build/lib/msg.js b/bin/build/lib/msg.js
deleted file mode 100644
index 6125aa5..0000000
--- a/bin/build/lib/msg.js
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-module.exports = {
-    UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE: 'UbuntuTouch device is not attached',
-    EMULATOR_IS_NOT_RUNNING: 'UbuntuTouch emulator is not running'
-};

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/changelog
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/changelog b/bin/build/lib/templates/changelog
deleted file mode 100644
index ec94655..0000000
--- a/bin/build/lib/templates/changelog
+++ /dev/null
@@ -1,7 +0,0 @@
-{PACKAGE_NAME} ({PACKAGE_VERSION}) trusty; urgency=medium
-
-  [ {MAINTAINER_NAME} ]
-  * upstream release
-
- -- {MAINTAINER_NAME} <{MAINTAINER_EMAIL}>  Thu, 30 Aug 2014 06:06:06 +0000
-

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/compat
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/compat b/bin/build/lib/templates/compat
deleted file mode 100644
index ec63514..0000000
--- a/bin/build/lib/templates/compat
+++ /dev/null
@@ -1 +0,0 @@
-9

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/control
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/control b/bin/build/lib/templates/control
deleted file mode 100644
index 51fb082..0000000
--- a/bin/build/lib/templates/control
+++ /dev/null
@@ -1,17 +0,0 @@
-Source: {PACKAGE_NAME}
-Section: devel
-Priority: optional
-Maintainer: {MAINTAINER_NAME} <{MAINTAINER_EMAIL}>
-Build-Depends: ubuntu-sdk,
-         qtfeedback5-dev,
-         qtmultimedia5-dev,
-         qtpim5-dev,
-         libqt5sensors5-dev,
-         qtsystems5-dev,
-         qtlocation5-dev,
-         libicu-dev
-
-Package: {PACKAGE_NAME}
-Architecture: any
-Description: {PACKAGE_DESCRIPTION}
-Depends: ubuntu-sdk-libs

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/cordova.desktop
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/cordova.desktop b/bin/build/lib/templates/cordova.desktop
deleted file mode 100644
index dee2f44..0000000
--- a/bin/build/lib/templates/cordova.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-[Desktop Entry]
-Name={PACKAGE_TITLE}
-Exec=/opt/{PACKAGE_NAME}/cordova-ubuntu
-Terminal=false
-Type=Application
-X-Ubuntu-Touch=true
-Icon={PACKAGE_ICON}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/install
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/install b/bin/build/lib/templates/install
deleted file mode 100644
index c3e51ca..0000000
--- a/bin/build/lib/templates/install
+++ /dev/null
@@ -1,3 +0,0 @@
-/opt/{PACKAGE_NAME}
-/usr/share/applications/*
-

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/templates/rules
----------------------------------------------------------------------
diff --git a/bin/build/lib/templates/rules b/bin/build/lib/templates/rules
deleted file mode 100755
index 27bc587..0000000
--- a/bin/build/lib/templates/rules
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/make -f
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
-export CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
-export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed
-export QT_SELECT := qt5
-
-DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
-
-# -----------------------------------
-
-%:
-	dh $@ --fail-missing
-
-override_dh_auto_configure:
-	dh_auto_configure -- -DCMAKE_INSTALL_PREFIX=/opt/{PACKAGE_NAME}
-
-override_dh_auto_install:
-	dh_auto_install --destdir=debian/tmp
-	cp -R $(CURDIR)/www/* $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/www
-	cp -R $(CURDIR)/debian/config.xml $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/
-	cp -R $(CURDIR)/qml/* $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/qml
-	mkdir -p $(CURDIR)/debian/tmp/usr/share/applications/
-	cp -R $(CURDIR)/debian/cordova.desktop $(CURDIR)/debian/tmp/usr/share/applications/{PACKAGE_NAME}.desktop

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/lib/ubuntu.js
----------------------------------------------------------------------
diff --git a/bin/build/lib/ubuntu.js b/bin/build/lib/ubuntu.js
deleted file mode 100644
index fad368c..0000000
--- a/bin/build/lib/ubuntu.js
+++ /dev/null
@@ -1,610 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var shell = require('shelljs');
-var path = require('path');
-var fs = require('fs');
-var msg = require('./msg');
-var assert = require('assert');
-var colors = require('colors');
-var Q = require("q");
-var os = require("os");
-
-var DEFAULT_FRAMEWORK = "ubuntu-sdk-14.04";
-
-function exec(cmd, silent) {
-    console.log(cmd.green);
-
-    var res = shell.exec(cmd, { silent: silent });
-    if (res.code !== 0) {
-        console.error(cmd.green + " " + "FAILED".underline.red);
-        process.exit(1);
-    }
-
-    return res;
-}
-
-function execAsync(cmd) {
-    var deferred = Q.defer();
-
-    console.log(cmd.green);
-
-    shell.exec(cmd, { async: true }, function (code, output) {
-        var res = { code: code, output: output };
-        if (res.code !== 0) {
-            console.error(cmd.green + " " + "FAILED".underline.red);
-            process.exit(1);
-        }
-        deferred.resolve(res);
-    });
-
-    return deferred.promise;
-}
-
-
-function cp(source, dest) {
-    console.log(('cp -Rf ' + source + ' ' + dest).green);
-
-    if (shell.cp('-r', source, dest) === null) {
-        console.error("FAILED".underline.red);
-        process.exit(1);
-    }
-}
-
-function pushd(dir) {
-    console.log(('pushd ' + dir).green);
-    shell.pushd(dir);
-}
-
-function popd(dir) {
-    console.log(('popd').green);
-    shell.popd();
-}
-
-function cpuCount() {
-    return os.cpus().length;
-}
-
-function additionalDependencies(ubuntuDir) {
-    var files = [];
-    try {
-        files = fs.readdirSync(path.join(ubuntuDir, 'configs')).filter(function(s) {
-            return s[0] != '.';
-        });
-    } catch (e) {}
-    var deb = [];
-    for (var i = 0; i < files.length; i++) {
-        var config = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'configs', files[i])));
-        if (config.deb)
-            deb = deb.concat(config.deb);
-    }
-    return deb;
-}
-
-function checkChrootEnv(ubuntuDir, architecture, framework) {
-    var deps = "cmake libicu-dev:ARCH pkg-config qtbase5-dev:ARCH qtchooser qtdeclarative5-dev:ARCH qtfeedback5-dev:ARCH qtlocation5-dev:ARCH qtmultimedia5-dev:ARCH qtpim5-dev:ARCH libqt5sensors5-dev:ARCH qtsystems5-dev:ARCH ";
-    deps += additionalDependencies(ubuntuDir).join(' ');
-    deps = deps.replace(/ARCH/g, architecture);
-
-    var cmd = "click chroot -a" + architecture + " -f " + framework + " run dpkg-query -Wf'${db:Status-abbrev}' " + deps;
-    console.log(cmd.green);
-    res = shell.exec(cmd);
-
-    if (res.code !== 0 || res.output.indexOf('un') !== -1) {
-        console.error(("Error: missing " + architecture + " chroot").red);
-        console.error(("run:\nsudo click chroot -a" + architecture + " -f " + framework + " create").red);
-        console.error(("sudo click chroot -a" + architecture + " -f " + framework + " install " + deps).red);
-        process.exit(2);
-    }
-}
-
-function checkEnv(ubuntuDir) {
-    var deps = additionalDependencies(ubuntuDir).join(' ');
-    deps = deps.replace(/:ARCH/g, '');
-
-    if (!deps.length)
-        return;
-
-    var cmd = "dpkg-query -Wf'${db:Status-abbrev}' " + deps;
-    console.log(cmd.green);
-    res = shell.exec(cmd);
-
-    if (res.code !== 0 || res.output.indexOf('un') !== -1) {
-        console.error(("Error: missing packages" + deps).red);
-        process.exit(2);
-    }
-}
-
-module.exports.createProject = function(projectPath, ROOT) {
-    if (fs.existsSync(projectPath)) {
-        console.error('Project already exists! Delete and recreate');
-        process.exit(2);
-    }
-
-    shell.mkdir(projectPath);
-    shell.cp('-r', path.join(ROOT, '*'), path.join(projectPath, 'build'));
-    shell.mkdir(path.join(projectPath, 'native'));
-    shell.cp('-r', path.join(ROOT, 'bin/build/*'), path.join(projectPath, 'cordova'));
-    shell.cp('-r', path.join(ROOT, 'bin/check_reqs'), path.join(projectPath, 'cordova'));
-
-    shell.cp('-r', path.join(ROOT, 'bin/node_modules'), path.join(projectPath, 'cordova'));
-
-    shell.cp('-r', path.join(ROOT, 'xml/config.xml'), projectPath);
-
-    shell.mkdir(path.join(projectPath, 'www'));
-    shell.cp(path.join(ROOT, 'www/cordova.js'), path.join(projectPath, 'www'));
-
-    shell.cd(projectPath);
-}
-
-module.exports.updateProject = function(projectPath, ROOT) {
-    if (!fs.existsSync(projectPath)) {
-        console.error('Project does not exist!');
-        process.exit(2);
-    }
-
-    shell.rm('-r', path.join(projectPath, 'www'));
-    shell.mkdir(path.join(projectPath, 'www'));
-    shell.cp(path.join(ROOT, 'www/cordova.js'), path.join(projectPath, 'www'));
-
-    shell.rm('-r', path.join(projectPath, 'cordova'));
-    shell.cp('-r', path.join(ROOT, 'bin/build/*'), path.join(projectPath, 'cordova'));
-    shell.cp('-r', path.join(ROOT, 'bin/check_reqs'), path.join(projectPath, 'cordova'));
-    shell.cp('-r', path.join(ROOT, 'bin/node_modules'), path.join(projectPath, 'cordova'));
-
-    var tmp = path.join(projectPath, 'tmp');
-    shell.mkdir(tmp);
-
-    var pluginsDir = path.join(projectPath, 'build', 'src', 'plugins');
-    var coreplugins = path.join(projectPath, 'build', 'src', 'coreplugins.cpp');
-    shell.mv(coreplugins, tmp);
-    shell.mv(pluginsDir, tmp);
-    shell.rm('-r', path.join(projectPath, 'build'));
-
-    shell.cp('-r', path.join(ROOT, '*'), path.join(projectPath, 'build'));
-
-    shell.rm('-r', coreplugins);
-    shell.rm('-r', pluginsDir);
-    shell.mv(path.join(tmp, 'plugins'), path.join(projectPath, 'build', 'src'));
-    shell.mv(path.join(tmp, 'coreplugins.cpp'), path.join(projectPath, 'build', 'src'));
-
-    shell.rm('-r', tmp);
-    console.log('project updated'.green);
-}
-
-function checkClickPackage(prefixDir) {
-    pushd(prefixDir);
-
-    // 13.10 missing click-reviewers-tools package
-    // FIXME: remove this check after EOL
-    if (fs.existsSync('/usr/bin/click-run-checks')) {
-        var cmd = '/usr/bin/click-run-checks *.click';
-        console.log(cmd.green);
-        var output = shell.exec(cmd, { silent: true }).output;
-        var json = '[', b = 0;
-        for (var i = 0; i < output.length; i++) {
-            if (output[i] == '{') {
-                if (json.length > 1 && !b)
-                    json += ', ';
-                b++;
-            } else if (output[i] == '}') {
-                b--;
-                if (b == 0)
-                    json += '} ';
-            }
-            if (b > 0) {
-                json += output[i];
-            }
-        }
-        json += ']';
-        var out = JSON.parse(json);
-        for (var i = 0; i < out.length; i++) {
-            if (out[i].warn) {
-                for (var m in out[i].warn) {
-                    if (out[i].warn[m].text) {
-                        console.warn(out[i].warn[m].text.yellow);
-                        if (out[i].warn[m].link)
-                            console.warn(out[i].warn[m].link);
-                    }
-                }
-            }
-        }
-        for (var i = 0; i < out.length; i++) {
-            if (out[i].error) {
-                for (var m in out[i].error) {
-                    if (out[i].error[m].text) {
-                        console.warn(out[i].error[m].text.yellow);
-                        if (out[i].error[m].link)
-                            console.warn(out[i].error[m].link);
-                    }
-                }
-            }
-        }
-    }
-
-    popd();
-}
-
-function additionalBuildDependencies(ubuntuDir) {
-    var files = [];
-    try {
-        files = fs.readdirSync(path.join(ubuntuDir, 'configs')).filter(function(s) {
-            return s[0] != '.';
-        });
-    } catch (e) {}
-
-    var pkgConfig = [];
-    for (var i = 0; i < files.length; i++) {
-        var config = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'configs', files[i])));
-        if (config.pkgConfig)
-            pkgConfig = pkgConfig.concat(config.pkgConfig);
-    }
-
-    return pkgConfig;
-}
-
-function buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug) {
-    assert.ok(architecture && architecture.match(/^[a-z0-9_]+$/));
-
-    var archDir = path.join(ubuntuDir, framework, architecture);
-    var prefixDir = path.join(archDir, 'prefix');
-
-    if (!fs.existsSync(archDir))
-        shell.mkdir('-p', archDir);
-
-    if (nobuild && fs.existsSync(path.join(prefixDir, 'cordova-ubuntu'))) {
-        return Q();
-    }
-
-    checkChrootEnv(ubuntuDir, architecture, framework);
-
-    shell.rm('-rf', path.join(archDir, 'build'));
-
-    shell.rm('-rf', prefixDir);
-    shell.mkdir(path.join(archDir, 'build'));
-    shell.mkdir(prefixDir);
-
-    pushd(path.join(archDir, 'build'));
-
-    var buildType = '"Debug"';
-    if (!debug)
-        buildType = '"Release"';
-
-    var cmakeCmd = 'click chroot -a' + architecture + ' -f ' + framework + ' run cmake ' + campoDir
-              + ' -DCMAKE_INSTALL_PREFIX="' + prefixDir + '"' + ' -DCMAKE_BUILD_TYPE=' + buildType;
-
-    if (framework == 'ubuntu-sdk-13.10')
-        cmakeCmd += ' -DCMAKE_TOOLCHAIN_FILE=/etc/dpkg-cross/cmake/CMakeCross.txt';
-
-    var deps = additionalBuildDependencies(ubuntuDir).join(' ').replace(/ARCH/g, architecture);
-    if (deps.length)
-        cmakeCmd += ' -DADDITIONAL_DEPENDECIES="' + deps + '"';
-
-    return execAsync(cmakeCmd).then(function () {
-        if (architecture != "i386")
-            exec('find . -name AutomocInfo.cmake | xargs sed -i \'s;AM_QT_MOC_EXECUTABLE .*;AM_QT_MOC_EXECUTABLE "/usr/lib/\'$(dpkg-architecture -qDEB_BUILD_MULTIARCH)\'/qt5/bin/moc");\'');
-        return execAsync('click chroot -a' + architecture + ' -f ' + framework + ' run make -j ' + cpuCount());
-    }).then(function () {
-        return execAsync('click chroot -a' + architecture + ' -f ' + framework + ' run make install');
-    }).then(function () {
-        cp(path.join(ubuntuDir, 'www', '*'), path.join(prefixDir, 'www'));
-        cp(path.join(ubuntuDir, 'qml', '*'), path.join(prefixDir, 'qml'));
-        cp(path.join(ubuntuDir, 'cordova.desktop'), prefixDir);
-        cp(path.join(ubuntuDir, 'config.xml'), prefixDir);
-
-        var content = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
-        content.architecture = architecture;
-        content.framework = framework;
-        fs.writeFileSync(path.join(prefixDir, 'manifest.json'), JSON.stringify(content));
-
-        content = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'apparmor.json'), {encoding: "utf8"}));
-        if (framework == 'ubuntu-sdk-13.10')
-            content.policy_version = 1;
-        else
-            content.policy_version = 1.1;
-        fs.writeFileSync(path.join(prefixDir, 'apparmor.json'), JSON.stringify(content));
-
-        pushd(prefixDir);
-
-        return execAsync('click build .');
-    }).then(function () {
-        checkClickPackage(prefixDir);
-        popd();
-
-        popd();
-    });
-}
-
-function fillTemplate(source, dest, obj) {
-    var content = fs.readFileSync(source, {encoding: "utf8"});
-    for (var prop in obj) {
-        content = content.replace(new RegExp('{' + prop + '}', 'g'), obj[prop])
-    }
-
-    fs.writeFileSync(dest, content);
-}
-
-function buildNative(campoDir, ubuntuDir, nobuild, debug) {
-    var nativeDir = path.join(ubuntuDir, 'native');
-    var prefixDir = path.join(nativeDir, 'prefix');
-
-    if (nobuild && fs.existsSync(path.join(prefixDir, 'cordova-ubuntu'))) {
-        return Q();
-    }
-
-    checkEnv(ubuntuDir);
-
-    shell.rm('-rf', prefixDir);
-
-    shell.mkdir('-p', path.join(nativeDir, 'build'));
-    shell.mkdir(prefixDir);
-
-    pushd(path.join(nativeDir, 'build'));
-
-    var buildType = '"Debug"';
-    if (!debug)
-        buildType = '"Release"';
-
-    var cmakeCmd = 'cmake ' + campoDir + ' -DCMAKE_INSTALL_PREFIX="' + prefixDir + '"'
-        + ' -DCMAKE_BUILD_TYPE=' + buildType;
-
-    var deps = additionalBuildDependencies(ubuntuDir).join(' ').replace(/ARCH/g, '');
-    if (deps.length)
-        cmakeCmd += ' -DADDITIONAL_DEPENDECIES="' + deps + '"';
-
-    var debDir;
-    return execAsync(cmakeCmd).then(function () {
-        return execAsync('make -j ' + cpuCount() + '; make install');
-    }).then(function () {
-        cp(path.join(ubuntuDir, 'config.xml'), prefixDir);
-        cp(path.join(ubuntuDir, 'www', '*'), path.join(prefixDir, 'www'));
-        cp(path.join(ubuntuDir, 'qml', '*'), path.join(prefixDir, 'qml'));
-
-        popd();
-
-        var manifest = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
-
-        assert(manifest.name.length);
-        assert(manifest.name.indexOf(' ') == -1);
-
-        debDir = path.join(nativeDir, manifest.name);
-
-        shell.rm('-rf', debDir);
-
-        shell.mkdir('-p', path.join(debDir, 'debian'));
-        cp(path.join(campoDir, '*'), debDir);
-
-        cp(path.join(ubuntuDir, 'config.xml'), path.join(debDir, 'debian'));
-        cp(path.join(ubuntuDir, 'www', '*'), path.join(debDir, 'www'));
-        cp(path.join(ubuntuDir, 'qml', '*'), path.join(debDir, 'qml'));
-
-        var destDir = path.join('/opt', manifest.name);
-
-        var icon = fs.readFileSync(path.join(ubuntuDir, 'cordova.desktop'), {encoding: "utf8"}).match(/^Icon=(.+)$/m);
-        icon = icon ? '/opt/' + manifest.name + '/' + icon[1] : 'qmlscene';
-
-        var maintainerEmail = manifest.maintainer.match('<.+>$');
-        maintainerEmail = maintainerEmail?maintainerEmail[0]:'';
-        var maintainerName = manifest.maintainer.replace(maintainerEmail, '').trim();
-        maintainerEmail = maintainerEmail.replace('<', '').replace('>', '');
-
-        var props = { PACKAGE_NAME: manifest.name,
-                      PACKAGE_TITLE: manifest.title,
-                      PACKAGE_VERSION: manifest.version,
-                      MAINTAINER_NAME: maintainerName,
-                      MAINTAINER_EMAIL: maintainerEmail,
-                      PACKAGE_DESCRIPTION: manifest.description,
-                      PACKAGE_ICON: icon };
-        var templateDir = path.join(campoDir, 'bin', 'build', 'lib', 'templates');
-        var templates = [{source: path.join(templateDir, 'changelog'), dest: path.join(debDir, 'debian', 'changelog')},
-                         {source: path.join(templateDir, 'compat'), dest: path.join(debDir, 'debian', 'compat')},
-                         {source: path.join(templateDir, 'control'), dest: path.join(debDir, 'debian', 'control')},
-                         {source: path.join(templateDir, 'rules'), dest: path.join(debDir, 'debian', 'rules')},
-                         {source: path.join(templateDir, 'cordova.desktop'), dest: path.join(debDir, 'debian', 'cordova.desktop')},
-                         {source: path.join(templateDir, 'install'), dest: path.join(debDir, 'debian', manifest.name + '.install')}];
-        for (var i = 0; i < templates.length; i++) {
-            fillTemplate(templates[i].source, templates[i].dest, props);
-        }
-
-        console.error('In order to build debian package, execute'.yellow);
-        console.error(('cd ' + debDir + '; ' + 'debuild').yellow);
-    });
-}
-
-module.exports.ALL = 2;
-module.exports.PHONE = 0;
-module.exports.DESKTOP = 1;
-
-module.exports.build = function(rootDir, target, nobuild, architecture, framework, debug) {
-    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
-    var campoDir = path.join(ubuntuDir, 'build');
-
-    if (!architecture)
-        architecture = 'armhf';
-    if (!framework)
-        framework = DEFAULT_FRAMEWORK;
-
-    assert.ok(fs.existsSync(ubuntuDir));
-    assert.ok(fs.existsSync(campoDir));
-
-    if (target === module.exports.PHONE)
-        return buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug);
-    if (target === module.exports.DESKTOP)
-        return buildNative(campoDir, ubuntuDir, nobuild, debug);
-    if (target === module.exports.ALL) {
-        return buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug).then(function () {
-            return buildNative(campoDir, ubuntuDir, nobuild);
-        });
-    }
-}
-
-function runNative(rootDir, debug) {
-    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
-    var nativeDir = path.join(ubuntuDir, 'native');
-
-    pushd(path.join(nativeDir, 'prefix'));
-
-    var cmd = 'QTWEBKIT_INSPECTOR_SERVER=9222 ./cordova-ubuntu www/';
-    if (debug) {
-        cmd = "DEBUG=1 " + cmd;
-        console.error('Debug enabled. Try pointing a WebKit browser to http://127.0.0.1:9222'.yellow);
-    }
-
-    return execAsync(cmd).then(function () {
-        popd();
-    });
-}
-
-function deviceList() {
-    var res = exec('adb devices');
-
-    var response = res.output.split('\n');
-    var deviceList = [];
-
-    for (var i = 1; i < response.length; i++) {
-        if (response[i].match(/\w+\tdevice/)) {
-            deviceList.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
-        }
-    }
-
-    return deviceList;
-}
-
-function adbExec(target, command) {
-    assert.ok(target && command);
-    return exec('adb -s ' + target + ' ' + command);
-}
-
-function adbExecAsync(target, command) {
-    assert.ok(target && command);
-    return execAsync('adb -s ' + target + ' ' + command);
-}
-
-function isDeviceAttached(target) {
-    var res = adbExec(target, 'get-state');
-
-    if (res.output.indexOf('device') == -1)
-        return false;
-
-    res = adbExec(target, 'shell uname -a');
-    if (res.output.indexOf('ubuntu-phablet') == -1)
-        return false;
-
-    return true;
-}
-
-function getDeviceArch(target) {
-    var out = adbExec(target, 'shell "dpkg --print-architecture 2>/dev/null"').output.split('\r\n');
-
-    assert.ok(out.length == 2 && out[0].indexOf(' ') == -1);
-
-    return out[0];
-}
-
-function runOnDevice(rootDir, debug, target, architecture, framework) {
-    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
-
-    if (!isDeviceAttached(target)) {
-        console.error(msg.UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE.red)
-        process.exit(1);
-    }
-
-    var archDir = path.join(ubuntuDir, framework, architecture);
-    var prefixDir = path.join(archDir, 'prefix');
-
-    pushd(prefixDir);
-
-    var manifest = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
-    var appId = manifest.name;
-
-    var names = shell.ls().filter(function (name) {
-        return name.indexOf(appId) == 0 && name.indexOf('.click');
-    });
-
-    assert.ok(names.length == 1);
-
-    adbExec(target, 'shell "ps -A -eo pid,cmd | grep cordova-ubuntu | awk \'{ print \\$1 }\' | xargs kill -9"')
-
-    if (debug)
-        adbExec(target, 'forward --remove-all');
-
-    adbExec(target, 'push ' + names[0] + ' /home/phablet');
-    adbExec(target, 'shell "cd /home/phablet/; pkcon install-local ' + names[0] + ' -p --allow-untrusted -y"');
-
-    if (debug) {
-        console.error('Debug enabled. Try pointing a WebKit browser to http://127.0.0.1:9222');
-
-        adbExec(target, 'forward tcp:9222 tcp:9222');
-    }
-
-    console.log('have fun!'.rainbow);
-
-    return adbExecAsync(target, 'shell bash -c "ubuntu-app-launch  \\`ubuntu-app-triplet ' + appId + '\\`"').then(function () {
-        popd();
-    });
-}
-
-module.exports.run = function(rootDir, desktop, debug, target, nobuild, emulator, framework) {
-    if (desktop && !emulator) {
-        return module.exports.build(rootDir, module.exports.DESKTOP, nobuild, null, null, debug).then(function () {
-            return runNative(rootDir, debug);
-        });
-    }
-
-    if (!framework)
-        framework = DEFAULT_FRAMEWORK;
-
-    if (!target) {
-        var devices = deviceList();
-
-        if (!devices.length) {
-            console.error(msg.UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE.red)
-            process.exit(1);
-        }
-
-        if (emulator) {
-            devices = devices.filter(function (name) {
-                return name.match(/^emulator-/);
-            });
-            if (!devices.length) {
-                console.error(msg.EMULATOR_IS_NOT_RUNNING.red)
-                process.exit(1);
-            }
-        }
-
-        target = devices[0];
-
-        if (devices.length > 1) {
-            console.warn('you can specify target with --target <device id>'.yellow);
-            console.warn(('running on ' + target).yellow);
-        }
-    }
-    var arch = getDeviceArch(target);
-
-    return module.exports.build(rootDir, module.exports.PHONE, nobuild, arch, framework, debug).then(function () {
-        return runOnDevice(rootDir, debug, target, arch, framework);
-    });
-}
-
-module.exports.check_reqs = function(rootDir) {
-    var checkReqs = path.join(rootDir, 'platforms', 'ubuntu', 'cordova', 'check_reqs');
-    return execAsync(checkReqs);
-}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/run
----------------------------------------------------------------------
diff --git a/bin/build/run b/bin/build/run
deleted file mode 100755
index 8a1d9ca..0000000
--- a/bin/build/run
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-var path = require('path');
-var platform = require('./lib/ubuntu');
-
-var root = path.resolve();
-var www = path.join(root, 'www');
-
-var argv = require('optimist').boolean(['device', 'emulator', 'debug', 'nobuild']).string(['target', 'framework']).argv;
-
-platform.check_reqs(root).then(function () {
-    return platform.run(root, !argv.device, argv.debug, argv.target, argv.nobuild, argv.emulator, argv.framework);
-}).done();
-

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/build/version
----------------------------------------------------------------------
diff --git a/bin/build/version b/bin/build/version
deleted file mode 100755
index 26dabe2..0000000
--- a/bin/build/version
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env node
-
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-// Coho updates this line:
-var VERSION = "3.7.0-dev";
-
-console.log(VERSION);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/check_reqs
----------------------------------------------------------------------
diff --git a/bin/check_reqs b/bin/check_reqs
index 56b5a6e..676f105 100755
--- a/bin/check_reqs
+++ b/bin/check_reqs
@@ -2,7 +2,7 @@
 
 /*
  *
- * Copyright 2013 Canonical Ltd.
+ * Copyright 2014 Canonical Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,14 +19,4 @@
  *
 */
 
-var exec = require('child_process').exec;
-
-var deps = "cmake libicu-dev pkg-config devscripts qtbase5-dev qtchooser qtdeclarative5-dev qtfeedback5-dev qtlocation5-dev qtmultimedia5-dev qtpim5-dev libqt5sensors5-dev qtsystems5-dev";
-
-exec("dpkg-query -Wf'${db:Status-abbrev}\\n' click " + deps, function(error, stdout, stderr) {
-    if (error || stdout.indexOf('un') !== -1) {
-        console.error("Error: missing dependency " + deps);
-        process.exit(2);
-    }
-});
-
+require('./lib/check_reqs').check_reqs();

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/create
----------------------------------------------------------------------
diff --git a/bin/create b/bin/create
index cb75109..29c41d4 100755
--- a/bin/create
+++ b/bin/create
@@ -2,7 +2,7 @@
 
 /*
  *
- * Copyright 2013 Canonical Ltd.
+ * Copyright 2014 Canonical Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,56 +20,19 @@
 */
 var path = require('path');
 var args = process.argv;
-var ROOT = path.join(__dirname, '..');
-var fs    = require('fs');
 
-function help() {
+var check_reqs = require('./lib/check_reqs').check_reqs;
+
+
+if (args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
+                       args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
     console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'bin', 'create')) + ' <path_to_new_project> <package_name> <project_name>');
     console.log('    <path_to_new_project>: Path to your new Cordova Ubuntu project');
     console.log('    <package_name>: Package name');
     console.log('    <project_name>: Project name');
-    process.exit(0);
-}
-
-function create(projectPath) {
-    function create_project() {
-        require('./build/lib/ubuntu').createProject(projectPath, ROOT);
-    }
-
-    try {
-        require.resolve("shelljs");
-        require.resolve("elementtree");
-        require.resolve("colors");
-        require.resolve("optimist");
-        require.resolve("q");
-        create_project();
-    } catch(e) {
-        console.log('Shelljs module was not found, running \'npm install\'.....');
-        var exec = require('child_process').exec;
-        var cwd = process.cwd();
-
-        var block = true;
-        exec('npm install', {cwd: __dirname}, function (error, stdout, stderr) {
-            block = false;
-            if (error !== null) {
-                console.error('ERROR : running \'npm install\' is npm installed? ' + error);
-                console.error(stderr);
-                process.exit(error.code);
-            }
-        });
-        function wait() {
-            if (block)
-                setTimeout(wait, 1500);
-            else
-                create_project();
-        };
-        setTimeout(wait, 1500);
-    }
-}
-
-if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
-                       args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
-    help();
+    process.exit(1);
 } else {
-    create(args[2]);
+    check_reqs(function () {
+        require('./lib/create').createProject(args[2], args[3], args[4], args[5]);
+    });
 }

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
new file mode 100644
index 0000000..1853828
--- /dev/null
+++ b/bin/lib/check_reqs.js
@@ -0,0 +1,92 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var exec = require('child_process').exec;
+
+var DEPENDENCIES = [
+	'click',
+	'cmake', 
+	'libicu-dev', 
+	'pkg-config', 
+	'devscripts', 
+	'qtbase5-dev', 
+	'qtchooser', 
+	'qtdeclarative5-dev', 
+	'qtfeedback5-dev', 
+	'qtlocation5-dev', 
+	'qtmultimedia5-dev', 
+	'qtpim5-dev', 
+	'libqt5sensors5-dev', 
+	'qtsystems5-dev'
+];
+
+exports.check_reqs = function (callback) {
+	if (!checkNodeDependencies()) {
+        installNodeDependencies(checkUbuntuDependencies.bind(null, callback));
+    } else {
+        checkUbuntuDependencies(callback);
+    }
+};
+
+function checkUbuntuDependencies(callback) {
+	var deps = DEPENDENCIES.join(' ');
+	exec("dpkg-query -Wf'${db:Status-abbrev}\\n'" + deps, function (error, stdout, stderr) {
+	    if (error !== null) {
+	    	console.error('Error: missing dependency ' + deps);
+        	process.exit(1);
+	    }
+        callback();
+	});
+}
+
+function checkNodeDependencies() {
+    try {
+        require.resolve("shelljs");
+        require.resolve("colors");
+        require.resolve("optimist");
+        require.resolve("q");
+    } catch(e) {
+        // One or more dependencies are missing, need installation.
+        return false;
+    }
+
+    return true;
+}
+
+function installNodeDependencies(callback) {
+    var block = true;
+    exec('npm install', {cwd: __dirname}, function (error, stdout, stderr) {
+        block = false;
+        if (error !== null) {
+            console.error('ERROR : running \'npm install\' is npm installed? ' + error);
+            console.error(stderr);
+            process.exit(error.code);
+        }
+    });
+    function wait() {
+        if (block) {
+            setTimeout(wait, 1500);
+        } else {
+            callback();
+        }
+    };
+    setTimeout(wait, 1500);
+}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
new file mode 100644
index 0000000..ad03cd8
--- /dev/null
+++ b/bin/lib/create.js
@@ -0,0 +1,63 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var shell = require('shelljs'),
+	// child_process = require('child_process'),
+	path = require('path'),
+	fs = require('fs'),
+	check_reqs = require('./check_reqs').check_reqs,
+	ROOT = path.join(__dirname, '..', '..');
+
+exports.createProject = function(projectPath, packageName, projectName) {
+    if (fs.existsSync(projectPath)) {
+        console.error('Project already exists! Delete and recreate');
+        process.exit(1);
+    }
+
+    console.log('Creating a Cordova Project:\n', 
+        'Project Path: ' + projectPath + '\n',
+        'Package Name: ' + packageName + '\n',
+        'Project Name: ' + projectName + '\n'
+        );
+
+	shell.mkdir(projectPath);
+
+	shell.cp('-r', path.join(ROOT, '*'), path.join(projectPath, 'build'));
+
+	shell.mkdir(path.join(projectPath, 'native'));
+
+	// Copy the necessary node_modules for building and running the project.
+	shell.cp('-r', path.join(ROOT, 'node_modules'), path.join(projectPath, 'cordova'));
+
+	// Checking requirements task needs to be copied as well.
+	shell.cp('-r', path.join(ROOT, 'bin/check_reqs'), path.join(projectPath, 'cordova'));
+	shell.cp('-r', path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(projectPath, 'cordova', 'lib'));
+
+	// Copy the default template including the defaults.xml for the Ubuntu platform.
+	shell.cp('-r', path.join(ROOT, 'bin', 'templates', 'project', 'cordova'), projectPath);
+
+	shell.mkdir(path.join(projectPath, 'www'));
+	shell.cp(path.join(ROOT, 'www', 'cordova.js'), path.join(projectPath, 'www'));
+
+    shell.cp('-r', path.join(ROOT, 'xml/config.xml'), projectPath);
+} 
+
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/lib/update.js
----------------------------------------------------------------------
diff --git a/bin/lib/update.js b/bin/lib/update.js
new file mode 100644
index 0000000..f7b288f
--- /dev/null
+++ b/bin/lib/update.js
@@ -0,0 +1,69 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var shell = require('shelljs'),
+	// child_process = require('child_process'),
+	path = require('path'),
+	fs = require('fs'),
+	check_reqs = require('./check_reqs'),
+	ROOT = path.join(__dirname, '..', '..');
+
+exports.updateProject = function(projectPath) {
+    if (!fs.existsSync(projectPath)) {
+        console.error('Project does not exist!');
+        process.exit(1);
+    }
+
+    shell.rm('-r', path.join(projectPath, 'www'));
+    shell.mkdir(path.join(projectPath, 'www'));
+    shell.cp(path.join(ROOT, 'www', 'cordova.js'), path.join(projectPath, 'www'));
+
+    shell.rm('-r', path.join(projectPath, 'cordova'));
+
+    // Copy the necessary node modules.
+    shell.cp('-r', path.join(ROOT, 'node_modules'), path.join(projectPath, 'cordova'));
+
+    // Checking requirements needs to be copied as well.
+    shell.cp('-r', path.join(ROOT, 'bin/check_reqs'), path.join(projectPath, 'cordova'));
+    shell.cp('-r', path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(projectPath, 'cordova', 'lib'));
+
+    // Copy the default template including the defaults.xml for the Ubuntu platform.
+    shell.cp('-r', path.join(ROOT, 'bin', 'templates', 'project', 'cordova'), projectPath);
+
+    var tmp = path.join(projectPath, 'tmp');
+    shell.mkdir(tmp);
+
+    var pluginsDir = path.join(projectPath, 'build', 'src', 'plugins');
+    var coreplugins = path.join(projectPath, 'build', 'src', 'coreplugins.cpp');
+    shell.mv(coreplugins, tmp);
+    shell.mv(pluginsDir, tmp);
+    shell.rm('-r', path.join(projectPath, 'build'));
+
+    shell.cp('-r', path.join(ROOT, '*'), path.join(projectPath, 'build'));
+
+    shell.rm('-r', coreplugins);
+    shell.rm('-r', pluginsDir);
+    shell.mv(path.join(tmp, 'plugins'), path.join(projectPath, 'build', 'src'));
+    shell.mv(path.join(tmp, 'coreplugins.cpp'), path.join(projectPath, 'build', 'src'));
+
+    shell.rm('-r', tmp);
+    console.log('project updated'.green);
+}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/package.json
----------------------------------------------------------------------
diff --git a/bin/package.json b/bin/package.json
deleted file mode 100644
index bb2dc7a..0000000
--- a/bin/package.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-    "name": "cordova-ubuntu",
-    "description": "Cordova tooling for the Ubuntu platform.",
-    "version": "0.0.0",
-    "homepage": "https://launchpad.net/cordova-ubuntu/",
-    "repository": {
-        "type": "git",
-        "url": "https://git-wip-us.apache.org/repos/asf?p=cordova-ubuntu.git"
-    },
-    "keywords": [
-        "cli",
-        "cordova",
-        "ubuntu",
-        "tooling"
-    ],
-    "engineStrict": "true",
-    "engines": {
-        "node": ">=0.10.0"
-    },
-    "dependencies": {
-        "q": "2.0.*",
-        "shelljs": "0.2.6",
-        "elementtree": "*",
-        "colors": "0.6.2",
-        "optimist": "0.6.0"
-    },
-    "devDependencies": {
-    },
-    "optionalDependencies": {
-    },
-    "author": {
-        "name": "Maxim Ermilov",
-        "email": "maxim.ermilov@canonical.com"
-    },
-    "contributors": [
-    ]
-}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/build
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/build b/bin/templates/project/cordova/build
new file mode 100755
index 0000000..ed571ff
--- /dev/null
+++ b/bin/templates/project/cordova/build
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var path = require('path');
+var build = require('./lib/build').build;
+var check_reqs = require('./lib/check_reqs').check_reqs;
+var PLATFORMS = require('./lib/constants').PLATFORM_TYPES;
+
+var root = path.resolve();
+var www = path.join(root, 'www');
+
+check_reqs(function () {
+    var argv = require('optimist').string(['framework']).argv;
+    return build(root, PLATFORMS.ALL, false, undefined, argv.framework, false);
+});

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/clean
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/clean b/bin/templates/project/cordova/clean
new file mode 100755
index 0000000..2057443
--- /dev/null
+++ b/bin/templates/project/cordova/clean
@@ -0,0 +1,27 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+var path = require('path');
+var args = process.argv;
+var ROOT = path.join(__dirname, '..');
+var shell = require('shelljs');
+var fs    = require('fs');
+
+throw new Error('unimplemented');

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/defaults.xml
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/defaults.xml b/bin/templates/project/cordova/defaults.xml
new file mode 100644
index 0000000..41fc654
--- /dev/null
+++ b/bin/templates/project/cordova/defaults.xml
@@ -0,0 +1,33 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-->
+<widget id="io.cordova.hellocordova" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+
+      <preference name="loglevel" value="DEBUG" />
+      <!--
+        <preference name="splashscreen" value="resourceName" />
+        <preference name="backgroundColor" value="0xFFF" />
+        <preference name="loadUrlTimeoutValue" value="20000" />
+        <preference name="InAppBrowserStorageEnabled" value="true" />
+        <preference name="disallowOverscroll" value="true" />
+      -->
+      <!-- <icon src="icon.png" /> -->
+
+</widget>
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/build.js b/bin/templates/project/cordova/lib/build.js
new file mode 100644
index 0000000..ba4a7e9
--- /dev/null
+++ b/bin/templates/project/cordova/lib/build.js
@@ -0,0 +1,352 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+var assert = require('assert');
+var colors = require('colors');
+var fs = require('fs');
+var os = require('os');
+var Q = require('q');
+var path = require('path');
+var shell = require('shelljs');
+
+var Constants = require('./constants');
+var Utils = require('./utils');
+
+var PLATFORMS = Constants.PLATFORM_TYPES;
+
+module.exports.build = function(rootDir, target, nobuild, architecture, framework, debug) {
+    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
+    var campoDir = path.join(ubuntuDir, 'build');
+
+    if (!architecture)
+        architecture = Constants.DEFAULT_ARCH;
+    if (!framework)
+        framework = Constants.DEFAULT_FRAMEWORK;
+    assert.ok(fs.existsSync(ubuntuDir));
+    assert.ok(fs.existsSync(campoDir));
+
+    if (target === PLATFORMS.PHONE)
+        return buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug);
+    if (target === PLATFORMS.DESKTOP)
+        return buildNative(campoDir, ubuntuDir, nobuild, debug);
+    if (target === PLATFORMS.ALL) {
+        return buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug).then(function () {
+            return buildNative(campoDir, ubuntuDir, nobuild);
+        });
+    }
+};
+
+function buildClickPackage(campoDir, ubuntuDir, nobuild, architecture, framework, debug) {
+    assert.ok(architecture && architecture.match(/^[a-z0-9_]+$/));
+
+    var archDir = path.join(ubuntuDir, framework, architecture);
+    var prefixDir = path.join(archDir, 'prefix');
+
+    if (!fs.existsSync(archDir))
+        shell.mkdir('-p', archDir);
+
+    if (nobuild && fs.existsSync(path.join(prefixDir, 'cordova-ubuntu'))) {
+        return Q();
+    }
+
+    checkChrootEnv(ubuntuDir, architecture, framework);
+
+    shell.rm('-rf', path.join(archDir, 'build'));
+
+    shell.rm('-rf', prefixDir);
+    shell.mkdir(path.join(archDir, 'build'));
+    shell.mkdir(prefixDir);
+
+    shell.pushd(path.join(archDir, 'build'));
+
+    var buildType = '"Debug"';
+    if (!debug)
+        buildType = '"Release"';
+
+    var cmakeCmd = 'click chroot -a ' + architecture + ' -f ' + framework + ' run cmake ' + campoDir
+              + ' -DCMAKE_INSTALL_PREFIX="' + prefixDir + '"' + ' -DCMAKE_BUILD_TYPE=' + buildType;
+
+    if (framework == 'ubuntu-sdk-13.10')
+        cmakeCmd += ' -DCMAKE_TOOLCHAIN_FILE=/etc/dpkg-cross/cmake/CMakeCross.txt';
+
+    var deps = additionalBuildDependencies(ubuntuDir).join(' ').replace(/ARCH/g, architecture);
+    if (deps.length)
+        cmakeCmd += ' -DADDITIONAL_DEPENDECIES="' + deps + '"';
+
+    return Utils.execAsync(cmakeCmd).then(function () {
+        if (architecture != "i386")
+            Utils.execSync('find . -name AutomocInfo.cmake | xargs sed -i \'s;AM_QT_MOC_EXECUTABLE .*;AM_QT_MOC_EXECUTABLE "/usr/lib/\'$(dpkg-architecture -qDEB_BUILD_MULTIARCH)\'/qt5/bin/moc");\'');
+        return Utils.execAsync('click chroot -a ' + architecture + ' -f ' + framework + ' run make -j ' + cpuCount());
+    }).then(function () {
+        return Utils.execAsync('click chroot -a ' + architecture + ' -f ' + framework + ' run make install');
+    }).then(function () {
+        Utils.cp(path.join(ubuntuDir, 'www', '*'), path.join(prefixDir, 'www'));
+        Utils.cp(path.join(ubuntuDir, 'qml', '*'), path.join(prefixDir, 'qml'));
+        Utils.cp(path.join(ubuntuDir, 'cordova.desktop'), prefixDir);
+        Utils.cp(path.join(ubuntuDir, 'config.xml'), prefixDir);
+
+        var content = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
+        content.architecture = architecture;
+        content.framework = framework;
+        fs.writeFileSync(path.join(prefixDir, 'manifest.json'), JSON.stringify(content));
+
+        content = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'apparmor.json'), {encoding: "utf8"}));
+        if (framework == 'ubuntu-sdk-13.10')
+            content.policy_version = 1;
+        else
+            content.policy_version = 1.1;
+        fs.writeFileSync(path.join(prefixDir, 'apparmor.json'), JSON.stringify(content));
+
+        shell.pushd(prefixDir);
+
+        return Utils.execAsync('click build .');
+    }).then(function () {
+        checkClickPackage(prefixDir);
+        Utils.popd();
+
+        Utils.popd();
+    });
+}
+
+function buildNative(campoDir, ubuntuDir, nobuild, debug) {
+    var nativeDir = path.join(ubuntuDir, 'native');
+    var prefixDir = path.join(nativeDir, 'prefix');
+
+    if (nobuild && fs.existsSync(path.join(prefixDir, 'cordova-ubuntu'))) {
+        return Q();
+    }
+
+    checkEnv(ubuntuDir);
+
+    shell.rm('-rf', prefixDir);
+
+    shell.mkdir('-p', path.join(nativeDir, 'build'));
+    shell.mkdir(prefixDir);
+
+    shell.pushd(path.join(nativeDir, 'build'));
+
+    var buildType = '"Debug"';
+    if (!debug)
+        buildType = '"Release"';
+
+    var cmakeCmd = 'cmake ' + campoDir + ' -DCMAKE_INSTALL_PREFIX="' + prefixDir + '"'
+        + ' -DCMAKE_BUILD_TYPE=' + buildType;
+
+    var deps = additionalBuildDependencies(ubuntuDir).join(' ').replace(/ARCH/g, '');
+    if (deps.length)
+        cmakeCmd += ' -DADDITIONAL_DEPENDECIES="' + deps + '"';
+
+    var debDir;
+    return Utils.execAsync(cmakeCmd).then(function () {
+        return Utils.execAsync('make -j ' + cpuCount() + '; make install');
+    }).then(function () {
+        Utils.cp(path.join(ubuntuDir, 'config.xml'), prefixDir);
+        Utils.cp(path.join(ubuntuDir, 'www', '*'), path.join(prefixDir, 'www'));
+        Utils.cp(path.join(ubuntuDir, 'qml', '*'), path.join(prefixDir, 'qml'));
+
+        Utils.popd();
+
+        var manifest = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
+
+        assert(manifest.name.length);
+        assert(manifest.name.indexOf(' ') == -1);
+
+        debDir = path.join(nativeDir, manifest.name);
+
+        shell.rm('-rf', debDir);
+
+        shell.mkdir('-p', path.join(debDir, 'debian'));
+        Utils.cp(path.join(campoDir, '*'), debDir);
+
+        Utils.cp(path.join(ubuntuDir, 'config.xml'), path.join(debDir, 'debian'));
+        Utils.cp(path.join(ubuntuDir, 'www', '*'), path.join(debDir, 'www'));
+        Utils.cp(path.join(ubuntuDir, 'qml', '*'), path.join(debDir, 'qml'));
+
+        var destDir = path.join('/opt', manifest.name);
+
+        var icon = fs.readFileSync(path.join(ubuntuDir, 'cordova.desktop'), {encoding: "utf8"}).match(/^Icon=(.+)$/m);
+        icon = icon ? '/opt/' + manifest.name + '/' + icon[1] : 'qmlscene';
+
+        var maintainerEmail = manifest.maintainer.match('<.+>$');
+        maintainerEmail = maintainerEmail?maintainerEmail[0]:'';
+        var maintainerName = manifest.maintainer.replace(maintainerEmail, '').trim();
+        maintainerEmail = maintainerEmail.replace('<', '').replace('>', '');
+
+        var props = { PACKAGE_NAME: manifest.name,
+                      PACKAGE_TITLE: manifest.title,
+                      PACKAGE_VERSION: manifest.version,
+                      MAINTAINER_NAME: maintainerName,
+                      MAINTAINER_EMAIL: maintainerEmail,
+                      PACKAGE_DESCRIPTION: manifest.description,
+                      PACKAGE_ICON: icon };
+        var templateDir = path.join(campoDir, 'bin', 'templates', 'project', 'misc');
+        var templates = [{source: path.join(templateDir, 'changelog'), dest: path.join(debDir, 'debian', 'changelog')},
+                         {source: path.join(templateDir, 'compat'), dest: path.join(debDir, 'debian', 'compat')},
+                         {source: path.join(templateDir, 'control'), dest: path.join(debDir, 'debian', 'control')},
+                         {source: path.join(templateDir, 'rules'), dest: path.join(debDir, 'debian', 'rules')},
+                         {source: path.join(templateDir, 'cordova.desktop'), dest: path.join(debDir, 'debian', 'cordova.desktop')},
+                         {source: path.join(templateDir, 'install'), dest: path.join(debDir, 'debian', manifest.name + '.install')}];
+        for (var i = 0; i < templates.length; i++) {
+            fillTemplate(templates[i].source, templates[i].dest, props);
+        }
+        console.error('In order to build debian package, execute'.yellow);
+        console.error(('cd ' + debDir + '; ' + 'debuild').yellow);
+    });
+};
+
+/**
+*   Generates a file from a template source, injecting the values contained in the
+*   provided js object.
+*/
+function fillTemplate(source, dest, obj) {
+    var content = fs.readFileSync(source, {encoding: "utf8"});
+    for (var prop in obj) {
+        content = content.replace(new RegExp('{' + prop + '}', 'g'), obj[prop])
+    }
+
+    fs.writeFileSync(dest, content);
+}
+
+function additionalBuildDependencies(ubuntuDir) {
+    var files = [];
+    try {
+        files = fs.readdirSync(path.join(ubuntuDir, 'configs')).filter(function(s) {
+            return s[0] != '.';
+        });
+    } catch (e) {}
+
+    var pkgConfig = [];
+    for (var i = 0; i < files.length; i++) {
+        var config = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'configs', files[i])));
+        if (config.pkgConfig)
+            pkgConfig = pkgConfig.concat(config.pkgConfig);
+    }
+
+    return pkgConfig;
+}
+
+function checkClickPackage(prefixDir) {
+    shell.pushd(prefixDir);
+
+    // 13.10 missing click-reviewers-tools package
+    // FIXME: remove this check after EOL
+    if (fs.existsSync('/usr/bin/click-run-checks')) {
+        var cmd = '/usr/bin/click-run-checks *.click';
+        console.log(cmd.green);
+        var output = shell.exec(cmd, { silent: true }).output;
+        var json = '[', b = 0;
+        for (var i = 0; i < output.length; i++) {
+            if (output[i] == '{') {
+                if (json.length > 1 && !b)
+                    json += ', ';
+                b++;
+            } else if (output[i] == '}') {
+                b--;
+                if (b == 0)
+                    json += '} ';
+            }
+            if (b > 0) {
+                json += output[i];
+            }
+        }
+        json += ']';
+        var out = JSON.parse(json);
+        for (var i = 0; i < out.length; i++) {
+            if (out[i].warn) {
+                for (var m in out[i].warn) {
+                    if (out[i].warn[m].text) {
+                        console.warn(out[i].warn[m].text.yellow);
+                        if (out[i].warn[m].link)
+                            console.warn(out[i].warn[m].link);
+                    }
+                }
+            }
+        }
+        for (var i = 0; i < out.length; i++) {
+            if (out[i].error) {
+                for (var m in out[i].error) {
+                    if (out[i].error[m].text) {
+                        console.warn(out[i].error[m].text.yellow);
+                        if (out[i].error[m].link)
+                            console.warn(out[i].error[m].link);
+                    }
+                }
+            }
+        }
+    }
+
+    Utils.popd();
+}
+
+function cpuCount() {
+    return os.cpus().length;
+}
+
+function checkEnv(ubuntuDir) {
+    var deps = additionalDependencies(ubuntuDir).join(' ');
+    deps = deps.replace(/:ARCH/g, '');
+
+    if (!deps.length)
+        return;
+
+    var cmd = "dpkg-query -Wf'${db:Status-abbrev}' " + deps;
+    console.log(cmd.green);
+    res = shell.exec(cmd);
+
+    if (res.code !== 0 || res.output.indexOf('un') !== -1) {
+        console.error(("Error: missing packages" + deps).red);
+        process.exit(1);
+    }
+}
+
+function checkChrootEnv(ubuntuDir, architecture, framework) {
+    var deps = "cmake libicu-dev:ARCH pkg-config qtbase5-dev:ARCH qtchooser qtdeclarative5-dev:ARCH qtfeedback5-dev:ARCH qtlocation5-dev:ARCH qtmultimedia5-dev:ARCH qtpim5-dev:ARCH libqt5sensors5-dev:ARCH qtsystems5-dev:ARCH ";
+    deps += additionalDependencies(ubuntuDir).join(' ');
+    deps = deps.replace(/ARCH/g, architecture);
+
+    var cmd = "click chroot -a " + architecture + " -f " + framework + " run dpkg-query -Wf'${db:Status-abbrev}' " + deps;
+    console.log(cmd.green);
+    res = shell.exec(cmd);
+
+    if (res.code !== 0 || res.output.indexOf('un') !== -1) {
+        console.error(("Error: missing " + architecture + " chroot").red);
+        console.error(("run:\nsudo click chroot -a " + architecture + " -f " + framework + " create").red);
+        console.error(("sudo click chroot -a " + architecture + " -f " + framework + " install " + deps).red);
+        process.exit(1);
+    }
+}
+
+function additionalDependencies(ubuntuDir) {
+    var files = [];
+    try {
+        files = fs.readdirSync(path.join(ubuntuDir, 'configs')).filter(function(s) {
+            return s[0] != '.';
+        });
+    } catch (e) {}
+    var deb = [];
+    for (var i = 0; i < files.length; i++) {
+        var config = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'configs', files[i])));
+        if (config.deb)
+            deb = deb.concat(config.deb);
+    }
+    return deb;
+}
+
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/constants.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/constants.js b/bin/templates/project/cordova/lib/constants.js
new file mode 100644
index 0000000..a12155b
--- /dev/null
+++ b/bin/templates/project/cordova/lib/constants.js
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+module.exports = {
+    'DEFAULT_FRAMEWORK': 'ubuntu-sdk-14.04',
+    'DEFAULT_ARCH': 'armhf',
+    'PLATFORM_TYPES': {
+        'PHONE': 0,
+        'DESKTOP': 1,
+        'ALL': 2
+    },
+    'MSG': {
+        'UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE': 'UbuntuTouch device is not attached',
+        'EMULATOR_IS_NOT_RUNNING': 'UbuntuTouch emulator is not running'
+    }
+};

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/device.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/device.js b/bin/templates/project/cordova/lib/device.js
new file mode 100644
index 0000000..7ca1c81
--- /dev/null
+++ b/bin/templates/project/cordova/lib/device.js
@@ -0,0 +1,72 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var assert = require('assert');
+var Utils = require('./utils');
+
+module.exports.list = function () {
+    var res = Utils.execSync('adb devices');
+
+    var response = res.output.split('\n');
+    var deviceList = [];
+
+    for (var i = 1; i < response.length; i++) {
+        if (response[i].match(/\w+\tdevice/)) {
+            deviceList.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
+        }
+    }
+
+    return deviceList;
+};
+
+module.exports.isAttached = function (target) {
+    var res = adbExec(target, 'get-state');
+
+    if (res.output.indexOf('device') == -1)
+        return false;
+
+    res = adbExec(target, 'shell uname -a');
+    if (res.output.indexOf('ubuntu-phablet') == -1)
+        return false;
+
+    return true;
+};
+
+module.exports.arch = function (target) {
+    var out = adbExec(target, 'shell "dpkg --print-architecture 2>/dev/null"').output.split('\r\n');
+
+    assert.ok(out.length == 2 && out[0].indexOf(' ') == -1);
+
+    return out[0];
+};
+
+function adbExec(target, command, options) {
+    assert.ok(target && command);
+    return Utils.exec('adb -s ' + target + ' ' + command);
+}
+
+function adbExecAsync(target, command) {
+    assert.ok(target && command);
+    return Utils.execAsync('adb -s ' + target + ' ' + command);
+}
+
+module.exports.adbExec = adbExec;
+module.exports.adbExecAsync = adbExecAsync;

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/msg.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/msg.js b/bin/templates/project/cordova/lib/msg.js
new file mode 100644
index 0000000..6125aa5
--- /dev/null
+++ b/bin/templates/project/cordova/lib/msg.js
@@ -0,0 +1,25 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+module.exports = {
+    UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE: 'UbuntuTouch device is not attached',
+    EMULATOR_IS_NOT_RUNNING: 'UbuntuTouch emulator is not running'
+};

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/run.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/run.js b/bin/templates/project/cordova/lib/run.js
new file mode 100644
index 0000000..0418fce
--- /dev/null
+++ b/bin/templates/project/cordova/lib/run.js
@@ -0,0 +1,137 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+var assert = require('assert');
+var colors = require('colors');
+var fs = require('fs');
+var path = require('path');
+var shell = require('shelljs');
+
+var build = require('./build').build;
+
+var Devices = require('./device');
+var Constants = require('./constants');
+var Utils = require('./utils');
+
+var PLATFORMS = Constants.PLATFORM_TYPES; 
+var MSG = Constants.MSG;
+
+module.exports.run = function(rootDir, desktop, debug, target, nobuild, emulator, framework) {
+    if (desktop && !emulator) {
+        return build(rootDir, PLATFORMS.DESKTOP, nobuild, null, null, debug).then(function () {
+            return runNative(rootDir, debug);
+        });
+    }
+
+    if (!framework)
+        framework = Constants.DEFAULT_FRAMEWORK;
+
+    if (!target) {
+        var devices = Devices.list();
+
+        if (!devices.length) {
+            console.error(MSG.UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE.red)
+            process.exit(1);
+        }
+
+        if (emulator) {
+            devices = devices.filter(function (name) {
+                return name.match(/^emulator-/);
+            });
+            if (!devices.length) {
+                console.error(MSG.EMULATOR_IS_NOT_RUNNING.red)
+                process.exit(1);
+            }
+        }
+
+        target = devices[0];
+
+        if (devices.length > 1) {
+            console.warn('you can specify target with --target <device id>'.yellow);
+            console.warn(('running on ' + target).yellow);
+        }
+    }
+    var arch = Devices.arch(target);
+
+    return build(rootDir, PLATFORMS.PHONE, nobuild, arch, framework, debug).then(function () {
+        return runOnDevice(rootDir, debug, target, arch, framework);
+    });
+};
+
+function runNative(rootDir, debug) {
+    console.log('Running Cordova'.green);
+    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
+    var nativeDir = path.join(ubuntuDir, 'native');
+
+    Utils.pushd(path.join(nativeDir, 'prefix'));
+
+    var cmd = 'QTWEBKIT_INSPECTOR_SERVER=9222 ./cordova-ubuntu www/';
+    if (debug) {
+        cmd = "DEBUG=1 " + cmd;
+        console.error('Debug enabled. Try pointing a WebKit browser to http://127.0.0.1:9222'.yellow);
+    }
+
+    return Utils.execAsync(cmd).then(function () {
+        Utils.popd();
+    });
+}
+
+function runOnDevice(rootDir, debug, target, architecture, framework) {
+    var ubuntuDir = path.join(rootDir, 'platforms', 'ubuntu');
+
+    if (!isDeviceAttached(target)) {
+        console.error(MSG.UBUNTU_TOUCH_DEVICE_NOT_AVALIABLE.red)
+        process.exit(1);
+    }
+
+    var archDir = path.join(ubuntuDir, framework, architecture);
+    var prefixDir = path.join(archDir, 'prefix');
+
+    Utils.pushd(prefixDir);
+
+    var manifest = JSON.parse(fs.readFileSync(path.join(ubuntuDir, 'manifest.json'), {encoding: "utf8"}));
+    var appId = manifest.name;
+
+    var names = shell.ls().filter(function (name) {
+        return name.indexOf(appId) == 0 && name.indexOf('.click');
+    });
+
+    assert.ok(names.length == 1);
+
+    adbExec(target, 'shell "ps -A -eo pid,cmd | grep cordova-ubuntu | awk \'{ print \\$1 }\' | xargs kill -9"')
+
+    if (debug)
+        adbExec(target, 'forward --remove-all');
+
+    adbExec(target, 'push ' + names[0] + ' /home/phablet');
+    adbExec(target, 'shell "cd /home/phablet/; pkcon install-local ' + names[0] + ' -p --allow-untrusted -y"');
+
+    if (debug) {
+        console.error('Debug enabled. Try pointing a WebKit browser to http://127.0.0.1:9222');
+
+        adbExec(target, 'forward tcp:9222 tcp:9222');
+    }
+
+    console.log('have fun!'.rainbow);
+
+    return adbExecAsync(target, 'shell bash -c "ubuntu-app-launch  \\`ubuntu-app-triplet ' + appId + '\\`"').then(function () {
+        Utils.popd();
+    });
+}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/lib/utils.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/lib/utils.js b/bin/templates/project/cordova/lib/utils.js
new file mode 100644
index 0000000..60e99c4
--- /dev/null
+++ b/bin/templates/project/cordova/lib/utils.js
@@ -0,0 +1,72 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2014 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+var Q = require('q');
+var colors = require('colors');
+var shell = require('shelljs');
+
+module.exports.cp = function(source, dest) {
+    console.log(('cp -Rf ' + source + ' ' + dest).green);
+
+    if (shell.cp('-r', source, dest) === null) {
+        console.error("FAILED".underline.red);
+        process.exit(1);
+    }
+};
+
+module.exports.pushd = function(dir) {
+    console.log(('pushd ' + dir).green);
+    shell.pushd(dir);
+};
+
+module.exports.popd = function(dir) {
+    console.log(('popd').green);
+    shell.popd();
+};
+
+module.exports.execSync = function(cmd, silent) {
+    console.log(cmd.green);
+
+    var res = shell.exec(cmd, { silent: silent });
+    if (res.code !== 0) {
+        console.error(cmd.green + " " + "FAILED".underline.red);
+        process.exit(1);
+    }
+
+    return res;
+};
+
+module.exports.execAsync = function (cmd) {
+    var deferred = Q.defer();
+
+    console.log(cmd.green);
+
+    shell.exec(cmd, { async: true }, function (code, output) {
+        var res = { code: code, output: output };
+        if (res.code !== 0) {
+            console.error(cmd.green + " " + "FAILED".underline.red);
+            process.exit(1);
+        }
+        deferred.resolve(res);
+    });
+
+    return deferred.promise;
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/run
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/run b/bin/templates/project/cordova/run
new file mode 100755
index 0000000..2668dda
--- /dev/null
+++ b/bin/templates/project/cordova/run
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+var path = require('path');
+var check_reqs = require('./lib/check_reqs').check_reqs;
+var PLATFORMS = require('./lib/constants').PLATFORM_TYPES;
+var run = require('./lib/run').run;
+
+var root = path.resolve();
+var www = path.join(root, 'www');
+
+check_reqs(function () {
+    var argv = require('optimist').boolean(['device', 'emulator', 'debug', 'nobuild']).string(['target', 'framework']).argv;
+    return run(root, !argv.device, argv.debug, argv.target, argv.nobuild, argv.emulator, argv.framework);
+});

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/cordova/version
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/version b/bin/templates/project/cordova/version
new file mode 100755
index 0000000..26dabe2
--- /dev/null
+++ b/bin/templates/project/cordova/version
@@ -0,0 +1,25 @@
+#!/usr/bin/env node
+
+/*
+ *
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+// Coho updates this line:
+var VERSION = "3.7.0-dev";
+
+console.log(VERSION);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/changelog
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/changelog b/bin/templates/project/misc/changelog
new file mode 100644
index 0000000..ec94655
--- /dev/null
+++ b/bin/templates/project/misc/changelog
@@ -0,0 +1,7 @@
+{PACKAGE_NAME} ({PACKAGE_VERSION}) trusty; urgency=medium
+
+  [ {MAINTAINER_NAME} ]
+  * upstream release
+
+ -- {MAINTAINER_NAME} <{MAINTAINER_EMAIL}>  Thu, 30 Aug 2014 06:06:06 +0000
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/compat
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/compat b/bin/templates/project/misc/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/bin/templates/project/misc/compat
@@ -0,0 +1 @@
+9

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/control
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/control b/bin/templates/project/misc/control
new file mode 100644
index 0000000..51fb082
--- /dev/null
+++ b/bin/templates/project/misc/control
@@ -0,0 +1,17 @@
+Source: {PACKAGE_NAME}
+Section: devel
+Priority: optional
+Maintainer: {MAINTAINER_NAME} <{MAINTAINER_EMAIL}>
+Build-Depends: ubuntu-sdk,
+         qtfeedback5-dev,
+         qtmultimedia5-dev,
+         qtpim5-dev,
+         libqt5sensors5-dev,
+         qtsystems5-dev,
+         qtlocation5-dev,
+         libicu-dev
+
+Package: {PACKAGE_NAME}
+Architecture: any
+Description: {PACKAGE_DESCRIPTION}
+Depends: ubuntu-sdk-libs

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/cordova.desktop
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/cordova.desktop b/bin/templates/project/misc/cordova.desktop
new file mode 100644
index 0000000..dee2f44
--- /dev/null
+++ b/bin/templates/project/misc/cordova.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name={PACKAGE_TITLE}
+Exec=/opt/{PACKAGE_NAME}/cordova-ubuntu
+Terminal=false
+Type=Application
+X-Ubuntu-Touch=true
+Icon={PACKAGE_ICON}

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/install
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/install b/bin/templates/project/misc/install
new file mode 100644
index 0000000..c3e51ca
--- /dev/null
+++ b/bin/templates/project/misc/install
@@ -0,0 +1,3 @@
+/opt/{PACKAGE_NAME}
+/usr/share/applications/*
+

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/templates/project/misc/rules
----------------------------------------------------------------------
diff --git a/bin/templates/project/misc/rules b/bin/templates/project/misc/rules
new file mode 100755
index 0000000..27bc587
--- /dev/null
+++ b/bin/templates/project/misc/rules
@@ -0,0 +1,27 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
+export CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
+export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed
+export QT_SELECT := qt5
+
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
+# -----------------------------------
+
+%:
+	dh $@ --fail-missing
+
+override_dh_auto_configure:
+	dh_auto_configure -- -DCMAKE_INSTALL_PREFIX=/opt/{PACKAGE_NAME}
+
+override_dh_auto_install:
+	dh_auto_install --destdir=debian/tmp
+	cp -R $(CURDIR)/www/* $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/www
+	cp -R $(CURDIR)/debian/config.xml $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/
+	cp -R $(CURDIR)/qml/* $(CURDIR)/debian/tmp/opt/{PACKAGE_NAME}/qml
+	mkdir -p $(CURDIR)/debian/tmp/usr/share/applications/
+	cp -R $(CURDIR)/debian/cordova.desktop $(CURDIR)/debian/tmp/usr/share/applications/{PACKAGE_NAME}.desktop

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/bin/update
----------------------------------------------------------------------
diff --git a/bin/update b/bin/update
index 636396c..e5f9bbe 100755
--- a/bin/update
+++ b/bin/update
@@ -20,42 +20,15 @@
 */
 var path = require('path');
 var args = process.argv;
-var ROOT = path.join(__dirname, '..');
 var fs    = require('fs');
 
-function installDependecies(cb) {
-    console.log('running \'npm install\'.....');
-    var exec = require('child_process').exec;
-    var cwd = process.cwd();
-
-    var block = true;
-    exec('npm install', {cwd: __dirname}, function (error, stdout, stderr) {
-        block = false;
-        if (error !== null) {
-            console.error('ERROR : running \'npm install\' is npm installed? ' + error);
-            console.error(stderr);
-            process.exit(error.code);
-        }
-    });
-    function wait() {
-        if (block)
-            setTimeout(wait, 1500);
-        else
-            cb();
-    };
-    setTimeout(wait, 1500);
-}
-
-
-function updateProject(projectPath, ROOT) {
-    installDependecies(function () {
-        var currentVersion = fs.readFileSync(path.join(projectPath, 'build', 'VERSION'), {encoding: "utf8"});
-        var version = fs.readFileSync(path.join(ROOT, 'VERSION'), {encoding: "utf8"});
-        if (version == currentVersion)
-            return;
+var ROOT = path.join(__dirname, '..');
+var projectPath = args[2];
 
-        require('./build/lib/ubuntu').updateProject(projectPath, ROOT);
+var currentVersion = fs.readFileSync(path.join(projectPath, 'build', 'VERSION'), {encoding: "utf8"});
+var version = fs.readFileSync(path.join(ROOT, 'VERSION'), {encoding: "utf8"});
+if (version !== currentVersion) {
+    check_reqs(function () {
+        require('./lib/update').updateProject(projectPath, ROOT);
     });
 }
-
-updateProject(args[2], ROOT);

http://git-wip-us.apache.org/repos/asf/cordova-ubuntu/blob/4894ac2f/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index cf6842d..4a36966 100644
--- a/package.json
+++ b/package.json
@@ -1,17 +1,43 @@
 {
     "name": "cordova-ubuntu",
     "version": "3.7.0-dev",
-    "description": "cordova-ubuntu release",
+    "description": "Cordova tooling for the Ubuntu platform.",
     "main": "bin/create",
     "repository": {
         "type": "git",
         "url": "https://git-wip-us.apache.org/repos/asf/cordova-ubuntu.git"
     },
+    "engineStrict": "true",
+    "engines": {
+        "node": ">=0.10.0"
+    },
+    "dependencies": {
+        "colors": "0.6.2",
+        "optimist": "0.6.0",
+        "q": "2.0.*",
+        "shelljs": "0.2.6"
+    },
+    "bundledDependencies": [
+        "colors",
+        "optimist",
+        "q",
+        "shelljs"
+    ],
     "keywords": [
         "ubuntu",
         "cordova",
         "apache"
     ],
     "author": "Apache Software Foundation",
+    "contributors": [
+        {
+            "name": "Maxim Ermilov",
+            "email": "maxim.ermilov@canonical.com"
+        },
+        {
+            "name": "Jean-Francois Moy",
+            "email": "jean-francois.moy@canonical.com"
+        }
+    ],
     "license": "Apache Version 2.0"
-}
\ No newline at end of file
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org