blob: bf50748c9b11b3490e8dcf17983a27906e1781f2 [file] [log] [blame]
#!/bin/bash
# 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.
if [[ $# -eq 0 || "$1" = "--help" ]]; then
echo "Use this script to create an Cordova App Harness project"
echo "Usage: $0 NewDirName [--allplugins]>"
echo 'Options via variables:'
echo ' PLATFORMS="android ios"'
echo ' PLUGIN_SEARCH_PATH="path1:path2:path3"'
echo ' APP_ID="org.apache.AppHarness"'
echo ' APP_NAME="CordovaAppHarness"'
exit 1
fi
if [[ "Darwin" = $(uname -s) ]]; then
PLATFORMS="${PLATFORMS-android ios}"
else
PLATFORMS="${PLATFORMS-android}"
fi
APP_ID=${APP_ID-org.apache.appharness}
APP_NAME=${APP_NAME-CordovaAppHarness}
APP_VERSION=$(cd "$AH_PATH" && node -e "console.log(require('./package').version)")
DIR_NAME="${1}"
AH_PATH="$(cd $(dirname $0) && pwd)"
extra_search_path="$PLUGIN_SEARCH_PATH"
PLUGIN_SEARCH_PATH=""
PLUGIN_REGISTRY_FLAG=""
if [[ -n "$DISABLE_PLUGIN_REGISTRY" ]]; then
PLUGIN_REGISTRY_FLAG=--noregistry
fi
CORDOVA="$AH_PATH/node_modules/cordova/bin/cordova"
ALL_DEPS=$(cd "$AH_PATH" && node -e "console.log(Object.keys(require('./package').devDependencies).join(' '))")
for dep in $ALL_DEPS; do
if [[ ! -e "$AH_PATH/node_modules/$dep" ]]; then
echo "Missing dependency: $dep"
echo 'Running: npm install'
(cd "$AH_PATH" && npm install)
break
fi
done
function ResolveSymlinks() {
local found_path="$1"
if [[ -n "$found_path" ]]; then
node -e "console.log(require('fs').realpathSync('$found_path'))"
fi
}
function AddSearchPathIfExists() {
if [[ -d "$1" ]]; then
if [[ -n "$PLUGIN_SEARCH_PATH" ]]; then
PLUGIN_SEARCH_PATH="$PLUGIN_SEARCH_PATH:$1"
else
PLUGIN_SEARCH_PATH="$1"
fi
fi
}
# Use coho to find Cordova plugins
COHO_PATH=$(ResolveSymlinks $(which coho))
if [[ -n "$COHO_PATH" ]]; then
echo "Using locally installed cordova plugins."
CDV_PATH="$(dirname $(dirname "$COHO_PATH"))"
AddSearchPathIfExists "$CDV_PATH"
AddSearchPathIfExists "$CDV_PATH/cordova-plugins"
fi
# Use cca to find Chrome plugins
CCA_PATH=$(ResolveSymlinks $(which cca))
if [[ -n "$CCA_PATH" ]]; then
CCA_PATH="$(dirname $(dirname "$CCA_PATH"))"
AddSearchPathIfExists "$CCA_PATH/chrome-cordova/plugins"
fi
if [[ -n "$extra_search_path" ]]; then
PLUGIN_SEARCH_PATH="${extra_search_path}:$PLUGIN_SEARCH_PATH"
fi
rm -rf "$DIR_NAME"
set -x
"$CORDOVA" create "$DIR_NAME" "$APP_ID" "$APP_NAME" --link-to "$AH_PATH/www" || exit 1
set +x
cd "$DIR_NAME"
cp "$AH_PATH/template-overrides/config.xml" . || exit 1
perl -i -pe "s/{ID}/$APP_ID/g" config.xml || exit 1
perl -i -pe "s/{NAME}/$APP_NAME/g" config.xml || exit 1
perl -i -pe "s/{VERSION}/$APP_VERSION/g" config.xml || exit 1
set -x
$CORDOVA platform add $PLATFORMS --link || exit 1
set +x
if [[ "$PLATFORMS" = *android* ]]; then
echo 'var fs = require("fs");
var fname = "platforms/android/src/org/apache/appharness/CordovaAppHarness.java";
if (!fs.existsSync(fname)) {
fname = "platforms/android/src/org/apache/appharness/MainActivity.java";
}
var tname = "'$AH_PATH'/template-overrides/Activity.java";
var orig = fs.readFileSync(fname, "utf8");
var templ = fs.readFileSync(tname, "utf8");
var newData = orig.replace(/}\s*$/, templ + "\n}\n").replace(/import.*?$/m, "import org.apache.appharness.AppHarnessUI;\n$&");
fs.writeFileSync(fname, newData);
' | node || exit $?
fi
mkdir -p hooks/after_prepare
cp "$AH_PATH"/template-overrides/after-hook.js hooks/after_prepare
echo Installing plugins.
set -x
# org.apache.cordova.device isn't used directly, but is convenient to test mobilespec.
"$CORDOVA" plugin add\
"$AH_PATH/UrlRemap" \
"$AH_PATH/AppHarnessUI" \
cordova-plugin-file \
cordova-plugin-file-transfer \
cordova-plugin-device \
cordova-plugin-network-information \
cordova-plugin-whitelist \
cordova-plugin-chrome-apps-runtime \
cordova-plugin-chrome-apps-sockets-tcp \
cordova-plugin-chrome-apps-sockets-tcpserver \
cordova-plugin-chrome-apps-system-network \
cordova-plugin-zip \
--link \
--searchpath="$PLUGIN_SEARCH_PATH" \
$PLUGIN_REGISTRY_FLAG || exit $?
if [[ "$PLATFORMS" = *android* ]]; then
if [[ -e plugins/cordova-plugin-file/src/android/build-extras.gradle ]]; then
cp plugins/cordova-plugin-file/src/android/build-extras.gradle platforms/android/build-extras.gradle
fi
fi
if [[ "$2" = "--allplugins" ]]; then
"$CORDOVA" plugin add \
cordova-plugin-battery-status \
cordova-plugin-camera \
cordova-plugin-contacts \
cordova-plugin-device-motion \
cordova-plugin-device-orientation \
cordova-plugin-device \
cordova-plugin-dialogs \
cordova-plugin-file-transfer \
cordova-plugin-file \
cordova-plugin-geolocation \
cordova-plugin-globalization \
cordova-plugin-inappbrowser \
cordova-plugin-media \
cordova-plugin-media-capture \
cordova-plugin-splashscreen \
cordova-plugin-statusbar \
cordova-plugin-vibration \
--link \
--searchpath="$PLUGIN_SEARCH_PATH" \
$PLUGIN_REGISTRY_FLAG || exit $?
fi
# To enable barcode scanning:
# $CORDOVA plugin add https://github.com/wildabeast/BarcodeScanner.git # Optional
"$CORDOVA" prepare || exit $?
ln -s "$CORDOVA" .
set +x
echo "Project successfully created at:"
pwd