194 lines
7.7 KiB
JavaScript
194 lines
7.7 KiB
JavaScript
/*
|
|
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.
|
|
*/
|
|
|
|
/*
|
|
* create a cordova/android project
|
|
*
|
|
* USAGE
|
|
* ./update [path]
|
|
*/
|
|
|
|
var fso = WScript.CreateObject('Scripting.FileSystemObject');
|
|
|
|
function read(filename) {
|
|
var fso=WScript.CreateObject("Scripting.FileSystemObject");
|
|
var f=fso.OpenTextFile(filename, 1);
|
|
var s=f.ReadAll();
|
|
f.Close();
|
|
return s;
|
|
}
|
|
|
|
function checkTargets(targets) {
|
|
if(!targets) {
|
|
WScript.Echo("You do not have any android targets setup. Please create at least one target with the `android` command");
|
|
WScript.Quit(69);
|
|
}
|
|
}
|
|
|
|
function setTarget() {
|
|
var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/id:\s\d+/g);
|
|
checkTargets(targets);
|
|
return targets[targets.length - 1].replace(/id: /, ""); // TODO: give users the option to set their target
|
|
}
|
|
|
|
function setApiLevel() {
|
|
var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/API level:\s\d+/g);
|
|
checkTargets(targets);
|
|
return targets[targets.length - 1].replace(/API level: /, "");
|
|
}
|
|
|
|
function write(filename, contents) {
|
|
var fso=WScript.CreateObject("Scripting.FileSystemObject");
|
|
var f=fso.OpenTextFile(filename, 2, true);
|
|
f.Write(contents);
|
|
f.Close();
|
|
}
|
|
|
|
function replaceInFile(filename, regexp, replacement) {
|
|
write(filename, read(filename).replace(regexp, replacement));
|
|
}
|
|
|
|
function exec(command) {
|
|
var oShell=shell.Exec(command);
|
|
while (oShell.Status == 0) {
|
|
if(!oShell.StdOut.AtEndOfStream) {
|
|
var line = oShell.StdOut.ReadLine();
|
|
// XXX: Change to verbose mode
|
|
// WScript.StdOut.WriteLine(line);
|
|
}
|
|
WScript.sleep(100);
|
|
}
|
|
}
|
|
|
|
function createAppInfoJar() {
|
|
if(!fso.FileExists(ROOT+"\\bin\\templates\\cordova\\appinfo.jar")) {
|
|
WScript.Echo("Creating appinfo.jar...");
|
|
var cur = shell.CurrentDirectory;
|
|
shell.CurrentDirectory = ROOT+"\\bin\\templates\\cordova\\ApplicationInfo";
|
|
exec("javac ApplicationInfo.java");
|
|
exec("jar -cfe ..\\appinfo.jar ApplicationInfo ApplicationInfo.class");
|
|
shell.CurrentDirectory = cur;
|
|
}
|
|
}
|
|
|
|
function cleanup() {
|
|
if(fso.FileExists(ROOT + '\\framework\\cordova-'+VERSION+'.jar')) {
|
|
fso.DeleteFile(ROOT + '\\framework\\cordova-'+VERSION+'.jar');
|
|
}
|
|
if(fso.FileExists(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js')) {
|
|
fso.DeleteFile(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js');
|
|
}
|
|
}
|
|
|
|
function downloadCommonsCodec() {
|
|
if (!fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.7.jar')) {
|
|
// We need the .jar
|
|
var url = 'http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip';
|
|
var libsPath = ROOT + '\\framework\\libs';
|
|
var savePath = libsPath + '\\commons-codec-1.7-bin.zip';
|
|
if (!fso.FileExists(savePath)) {
|
|
if(!fso.FolderExists(ROOT + '\\framework\\libs')) {
|
|
fso.CreateFolder(libsPath);
|
|
}
|
|
// We need the zip to get the jar
|
|
var xhr = WScript.CreateObject('MSXML2.XMLHTTP');
|
|
xhr.open('GET', url, false);
|
|
xhr.send();
|
|
if (xhr.status == 200) {
|
|
var stream = WScript.CreateObject('ADODB.Stream');
|
|
stream.Open();
|
|
stream.Type = 1;
|
|
stream.Write(xhr.ResponseBody);
|
|
stream.Position = 0;
|
|
stream.SaveToFile(savePath);
|
|
stream.Close();
|
|
} else {
|
|
WScript.Echo('Could not retrieve the commons-codec. Please download it yourself and put into the framework/libs directory. This process may fail now. Sorry.');
|
|
}
|
|
}
|
|
var app = WScript.CreateObject('Shell.Application');
|
|
var source = app.NameSpace(savePath).Items();
|
|
var target = app.NameSpace(ROOT + '\\framework\\libs');
|
|
target.CopyHere(source, 256);
|
|
|
|
// Move the jar into libs
|
|
fso.MoveFile(ROOT + '\\framework\\libs\\commons-codec-1.7\\commons-codec-1.7.jar', ROOT + '\\framework\\libs\\commons-codec-1.7.jar');
|
|
|
|
// Clean up
|
|
fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.7-bin.zip');
|
|
fso.DeleteFolder(ROOT + '\\framework\\libs\\commons-codec-1.7', true);
|
|
}
|
|
}
|
|
|
|
var args = WScript.Arguments, PROJECT_PATH="example",
|
|
shell=WScript.CreateObject("WScript.Shell");
|
|
|
|
// working dir
|
|
var ROOT = WScript.ScriptFullName.split('\\bin\\update.js').join('');
|
|
|
|
if (args.Count() == 1) {
|
|
PROJECT_PATH=args(0);
|
|
}
|
|
|
|
if(!fso.FolderExists(PROJECT_PATH)) {
|
|
WScript.Echo("Project doesn't exist!");
|
|
WScript.Quit(1);
|
|
}
|
|
|
|
var TARGET=setTarget();
|
|
var API_LEVEL=setApiLevel();
|
|
var VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,'');
|
|
|
|
// build from source. distro should have these files
|
|
if (!fso.FileExists(ROOT+'\\cordova-'+VERSION+'.jar') &&
|
|
!fso.FileExists(ROOT+'\\cordova-'+VERSION+'.js')) {
|
|
WScript.Echo("Building jar and js files...");
|
|
// update the cordova framework project to a target that exists on this machine
|
|
exec('android.bat update project --target '+TARGET+' --path '+ROOT+'\\framework');
|
|
// pull down commons codec if necessary
|
|
downloadCommonsCodec();
|
|
exec('ant.bat -f \"'+ ROOT +'\\framework\\build.xml\" jar');
|
|
}
|
|
|
|
// check if we have the source or the distro files
|
|
WScript.Echo("Copying js, jar & config.xml files...");
|
|
if(fso.FolderExists(ROOT + '\\framework')) {
|
|
exec('%comspec% /c copy "'+ROOT+'"\\framework\\assets\\www\\cordova-'+VERSION+'.js '+PROJECT_PATH+'\\assets\\www\\cordova-'+VERSION+'.js /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\framework\\cordova-'+VERSION+'.jar '+PROJECT_PATH+'\\libs\\cordova-'+VERSION+'.jar /Y');
|
|
} else {
|
|
// copy in cordova.js
|
|
exec('%comspec% /c copy "'+ROOT+'"\\cordova-'+VERSION+'.js '+PROJECT_PATH+'\\assets\\www\\cordova-'+VERSION+'.js /Y');
|
|
// copy in cordova.jar
|
|
exec('%comspec% /c copy "'+ROOT+'"\\cordova-'+VERSION+'.jar '+PROJECT_PATH+'\\libs\\cordova-'+VERSION+'.jar /Y');
|
|
// copy in xml
|
|
}
|
|
|
|
// update cordova scripts
|
|
createAppInfoJar();
|
|
WScript.Echo("Copying cordova command tools...");
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\appinfo.jar ' + PROJECT_PATH + '\\cordova\\appinfo.jar /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\cordova.js ' + PROJECT_PATH + '\\cordova\\cordova.js /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\cordova.bat ' + PROJECT_PATH + '\\cordova\\cordova.bat /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\clean.bat ' + PROJECT_PATH + '\\cordova\\clean.bat /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\build.bat ' + PROJECT_PATH + '\\cordova\\build.bat /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\log.bat ' + PROJECT_PATH + '\\cordova\\log.bat /Y');
|
|
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\cordova\\run.bat ' + PROJECT_PATH + '\\cordova\\run.bat /Y');
|
|
|
|
cleanup();
|