diff --git a/bootstrap.sh b/bootstrap.sh index e4f444b..39e31b7 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -20,7 +20,7 @@ DEFAULT_PROJECT_NAME=${PROJECT_PATH##*/} configure=0 build=0 docker=0 -buildtarget="distcheck" +buildtarget="" overwrite=0 rebuild=0 rebuildfiles=() @@ -28,8 +28,9 @@ while test $# -gt 0; do case "$1" in (--configure|-c) configure=1;; (--docker|-d) docker=1;; - (--build|-b) configure=1; build=1;; - (--target|-t) shift; configure=1; build=1; buildtarget="$1";; + (--build|-b) configure=1; build=1; buildtarget+=" distcheck";; + (--target|-t) shift; configure=1; build=1; buildtarget+=" $1";; + (--clean) shift; configure=1; build=1; buildtarget+=" maintainer-clean";; (--overwrite|-o) overwrite=1;; (--rebuild|-r) rebuild=1;; (--rebuild-file|-f) shift; rebuildfiles+=("$1");; diff --git a/build-in-docker.conf b/build-in-docker.conf new file mode 100644 index 0000000..b731674 --- /dev/null +++ b/build-in-docker.conf @@ -0,0 +1,5 @@ +repos="ppa:cordova-ubuntu/ppa" +if test -n "${ANDROID_HOME}"; then + envs="-e ANDROID_HOME=${ANDROID_HOME}" + dirs="-v ${ANDROID_HOME}:${ANDROID_HOME}:ro" +fi diff --git a/build-in-docker.sh b/build-in-docker.sh index bb07c16..b9a583d 100755 --- a/build-in-docker.sh +++ b/build-in-docker.sh @@ -1,20 +1,90 @@ -#! /bin/bash -ex +#! /bin/bash -e # build and test everything in a fresh docker installation +img="ubuntu:latest" +repos="" +keys="" +envs="" +dirs="-v $(pwd):/workdir" +targets="all check distcheck" +if test -e ./build-in-docker.conf; then + # you can preconfigure the variables in file build-in-docker.conf + # if you do so, add the file to EXTRA_DIST in makefile.am + source ./build-in-docker.conf +fi +while test $# -gt 0; do + case "$1" in + (-h|--help) + echo "$0 [OPTIONS]" + echo + echo "OPTIONS:" + echo " -h, --help show this help" + echo " -i --image use given docker image instead of ${img}" + echo " -t --targets targets specify build targets, default: ${targets}" + echo " -r --repo add given apt repository" + echo " -k --key add public key from url" + echo " -e --env = set environment variable in docker" + echo " -d --dir access given directory read only" + echo + echo "EXAMPLE:" + echo + echo "$0 -i mwaeckerlin/ubuntu:trusty-i386 \\" + echo " -t deb \\" + echo " -e ANDROID_HOME=/opt/local/android \\" + echo " -d /opt/local/android \\" + echo " -r universe \\" + echo " -r https://dev.marc.waeckerlin.org/repository \\" + echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey" + echo + exit 0 + ;; + (-i|--image) shift; + img="$1" + ;; + (-t|--targets) shift; + targets="$1" + ;; + (-r|--repo) shift; + repos+=" $1" + ;; + (-k|--key) shift; + keys+=" $1" + ;; + (-e|--env) shift; + envs+=" -e $1" + ;; + (-d|--dirs) shift; + dirs+=" -v $1:$1:ro" + ;; + (*) + echo "**** ERROR: unknown option '$1', try --help" 1>&2 + exit 1 + ;; + esac + if test $# -eq 0; then + echo "**** ERROR: missing value, try --help" 2>61 + exit 1 + fi + shift +done + +set -x -DOCKER_ID=$(docker run -d -v $(pwd):/workdir -w /workdir ubuntu sleep infinity) +DOCKER_ID=$(docker run -d ${dirs} ${envs} -w /workdir $img sleep infinity) trap "docker rm -f ${DOCKER_ID}" INT TERM EXIT docker exec ${DOCKER_ID} apt-get install -y software-properties-common apt-transport-https dpkg-dev -docker exec ${DOCKER_ID} apt-add-repository universe -docker exec ${DOCKER_ID} apt-add-repository https://dev.marc.waeckerlin.org/repository -wget -O- https://dev.marc.waeckerlin.org/repository/PublicKey \ - | docker exec -i ${DOCKER_ID} apt-key add - -if test -n "$*"; then - for p in $*; do - docker exec ${DOCKER_ID} apt-add-repository $p +if test -n "${repos}"; then + for repo in ${repos}; do + docker exec ${DOCKER_ID} apt-add-repository ${repo} + done +fi +if test -n "${keys}"; then + for key in ${keys}; do + wget -O- ${key} \ + | docker exec -i ${DOCKER_ID} apt-key add - done fi docker exec ${DOCKER_ID} apt-get update docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh docker exec -u $(id -u) ${DOCKER_ID} svn upgrade || true -docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "all check distcheck" +docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "${targets}" diff --git a/configure.ac b/configure.ac index c3e0009..6663916 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,12 @@ AC_PATH_PROG(ANDROID, [android], [0], [${PATH}${PATH_SEPARATOR}${ANDROID_HOME}/tools]) AC_PATH_PROG(CORDOVA, [cordova], [0], [${PATH}${PATH_SEPARATOR}$(pwd)/node_modules/cordova/bin]) +if test ${CORDOVA} = 0; then + AC_MSG_WARN([cordova is missing, on ubuntu install cordova-cli from repository ppa:cordova-ubuntu/ppa]) +fi +if test ${ANDROID} = 0; then + AC_MSG_WARN([android sdk is missing, set variable ANDROID_HOME after installation]) +fi AM_CONDITIONAL(HAVE_CORDOVA, [test ${CORDOVA} != 0 -a ${ANDROID} != 0]) AX_SUBST(CORDOVA) diff --git a/makefile.am b/makefile.am index d12b856..a6a41e3 100644 --- a/makefile.am +++ b/makefile.am @@ -8,6 +8,11 @@ SUBDIRS = scripts doc html cordova test +EXTRA_DIST = build-in-docker.conf + doc_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog +maintainer-clean-local: + -rm -rf node_modules + MAINTAINERCLEANFILES = makefile.in