[PATCH 11/12] android: Rework build.sh

Anton Lundin glance at acc.umu.se
Mon Feb 6 06:55:41 PST 2017


This reworks build.sh for proper argument parsing and variable quoting.

Signed-off-by: Anton Lundin <glance at acc.umu.se>
---
 android-mobile/AndroidManifest.xml |   4 +-
 packaging/android/build.sh         | 136 ++++++++++++++++++++-----------------
 2 files changed, 77 insertions(+), 63 deletions(-)

diff --git a/android-mobile/AndroidManifest.xml b/android-mobile/AndroidManifest.xml
index 244d917..ba3f1e2 100644
--- a/android-mobile/AndroidManifest.xml
+++ b/android-mobile/AndroidManifest.xml
@@ -2,8 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.subsurfacedivelog.mobile"
     android:installLocation="auto"
-    android:versionCode=@BUILD_NR@
-    android:versionName=@SUBSURFACE_MOBILE_VERSION@ >
+    android:versionCode="@BUILD_NR@"
+    android:versionName="@SUBSURFACE_MOBILE_VERSION@" >
 
     <application
         android:name="org.qtproject.qt5.android.bindings.QtApplication"
diff --git a/packaging/android/build.sh b/packaging/android/build.sh
index e271af2..d1b069d 100644
--- a/packaging/android/build.sh
+++ b/packaging/android/build.sh
@@ -21,7 +21,7 @@
 #
 # Or just set QT5_ANDROID, ANDROID_SDK_ROOT and ANDROID_NDK_ROOT to where ever you have them.
 #
-set -e
+set -eu
 PLATFORM=$(uname)
 # (trick to get the absolute path, either if we're called with a
 # absolute path or a relative path)
@@ -29,29 +29,50 @@ pushd "$(dirname "$0")/../../"
 export SUBSURFACE_SOURCE=$PWD
 popd
 
+# Set build defaults
 # is this a release or debug build
 BUILD_TYPE=Debug
-if [ "$1" = "release" ] || [ "$1" = "Release" ] ; then
-	shift
-	BUILD_TYPE=Release
-fi
-if [ "$1" = "debug" ] || [ "$1" = "Debug" ] ; then
-	# this is the default - still need to eat the argument if given
-	shift
-fi
-
-if [ "$1" = "-buildnr" ] ; then
-	shift
-	BUILD_NR="\"$1\""
-	shift
-else
-	BUILD_NR="\"0\""
-fi
+# Build-nr in the android manifest.
+BUILD_NR=0
+# Should we build the desktop ui or the mobile ui?
+SUBSURFACE_DESKTOP=OFF
+# Which arch should we build for?
+ARCH=arm
+
+while [ "$#" -gt 0 ] ; do
+	case "$1" in
+		Release|release)
+			shift
+			BUILD_TYPE=Release
+			;;
+		Debug|debug)
+			# this is the default - still need to eat the argument if given
+			BUILD_TYPE=Debug
+			shift
+			;;
+		-buildnr)
+			shift
+			BUILD_NR=$1
+			shift
+			;;
+		desktop)
+			SUBSURFACE_DESKTOP=ON
+			shift
+			;;
+		arm|x86)
+			ARCH=$1
+			shift
+		;;
+	esac
+done
+
+# Its needed by all sub-cmds
+export ARCH
 
 # Configure where we can find things here
 export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT-$SUBSURFACE_SOURCE/../android-ndk-r13b}
 
-if [ ! -z "$QT5_ANDROID" ] ; then
+if [ -n "${QT5_ANDROID+X}" ] ; then
 	echo "Using Qt5 in $QT5_ANDROID"
 elif [ -d "$SUBSURFACE_SOURCE/../Qt/5.8" ] ; then
 	export QT5_ANDROID=$SUBSURFACE_SOURCE/../Qt/5.8
@@ -84,27 +105,19 @@ LIBUSB_VERSION=1.0.20
 OPENSSL_VERSION=1.0.2h
 LIBFTDI_VERSION=1.3
 
-# arm or x86
-if [ "$1" = "arm" ] || [ "$1" = "x86" ] ; then
-	export ARCH=$1
-	shift
-else
-	export ARCH=arm
-fi
-
 if [ "$ARCH" = "arm" ] ; then
-	QT_ARCH="armv7"
+	QT_ARCH=armv7
 	BUILDCHAIN=arm-linux-androideabi
-	OPENSSL_MACHINE="armv7"
+	OPENSSL_MACHINE=armv7
 elif [ "$ARCH" = "x86" ] ; then
 	QT_ARCH=$ARCH
 	BUILDCHAIN=i686-linux-android
-	OPENSSL_MACHINE="i686"
+	OPENSSL_MACHINE=i686
 fi
 export QT5_ANDROID_BIN=${QT5_ANDROID}/android_${QT_ARCH}/bin
 
-if [ ! -e ndk-$ARCH ] ; then
-	"$ANDROID_NDK_ROOT/build/tools/make_standalone_toolchain.py" --arch=$ARCH --install-dir=ndk-$ARCH --api=16
+if [ ! -e ndk-"$ARCH" ] ; then
+	"$ANDROID_NDK_ROOT/build/tools/make_standalone_toolchain.py" --arch="$ARCH" --install-dir=ndk-"$ARCH" --api=16
 fi
 export BUILDROOT=$PWD
 export PATH=${BUILDROOT}/ndk-$ARCH/bin:$PATH
@@ -114,9 +127,9 @@ export CC=${BUILDROOT}/ndk-$ARCH/bin/${BUILDCHAIN}-gcc
 export CXX=${BUILDROOT}/ndk-$ARCH/bin/${BUILDCHAIN}-g++
 # autoconf seems to get lost without this
 export SYSROOT=${BUILDROOT}/ndk-$ARCH/sysroot
-export CFLAGS="--sysroot=${SYSROOT}"
-export CPPFLAGS="--sysroot=${SYSROOT}"
-export CXXFLAGS="--sysroot=${SYSROOT}"
+export CFLAGS=--sysroot=${SYSROOT}
+export CPPFLAGS=--sysroot=${SYSROOT}
+export CXXFLAGS=--sysroot=${SYSROOT}
 # Junk needed for qt-android-cmake
 export ANDROID_STANDALONE_TOOLCHAIN=${BUILDROOT}/ndk-$ARCH
 if [ "$PLATFORM" = "Darwin" ] ; then
@@ -133,8 +146,8 @@ if [ ! -e sqlite-autoconf-${SQLITE_VERSION} ] ; then
 	tar -zxf sqlite-autoconf-${SQLITE_VERSION}.tar.gz
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/sqlite3.pc" ] ; then
-	mkdir -p sqlite-build-$ARCH
-	pushd sqlite-build-$ARCH
+	mkdir -p sqlite-build-"$ARCH"
+	pushd sqlite-build-"$ARCH"
 	../sqlite-autoconf-${SQLITE_VERSION}/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --enable-static --disable-shared
 	make
 	make install
@@ -148,8 +161,8 @@ if [ ! -e libxml2-${LIBXML2_VERSION} ] ; then
 	tar -zxf libxml2-${LIBXML2_VERSION}.tar.gz
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libxml-2.0.pc" ] ; then
-	mkdir -p libxml2-build-$ARCH
-	pushd libxml2-build-$ARCH
+	mkdir -p libxml2-build-"$ARCH"
+	pushd libxml2-build-"$ARCH"
 	../libxml2-${LIBXML2_VERSION}/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --without-python --without-iconv --enable-static --disable-shared
 	perl -pi -e 's/runtest\$\(EXEEXT\)//' Makefile
 	perl -pi -e 's/testrecurse\$\(EXEEXT\)//' Makefile
@@ -167,8 +180,8 @@ if [ ! -e libxslt-${LIBXSLT_VERSION} ] ; then
 	cp libxml2-${LIBXML2_VERSION}/config.sub libxslt-${LIBXSLT_VERSION}
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libxslt.pc" ] ; then
-	mkdir -p libxslt-build-$ARCH
-	pushd libxslt-build-$ARCH
+	mkdir -p libxslt-build-"$ARCH"
+	pushd libxslt-build-"$ARCH"
 	../libxslt-${LIBXSLT_VERSION}/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --with-libxml-prefix="$PREFIX" --without-python --without-crypto --enable-static --disable-shared
 	make
 	make install
@@ -182,8 +195,8 @@ if [ ! -e libzip-${LIBZIP_VERSION} ] ; then
 	tar -zxf libzip-${LIBZIP_VERSION}.tar.gz
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libzip.pc" ] ; then
-	mkdir -p libzip-build-$ARCH
-	pushd libzip-build-$ARCH
+	mkdir -p libzip-build-"$ARCH"
+	pushd libzip-build-"$ARCH"
 	../libzip-${LIBZIP_VERSION}/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --enable-static --disable-shared
 	make
 	make install
@@ -193,16 +206,16 @@ fi
 if [ ! -e openssl-${OPENSSL_VERSION}.tar.gz ] ; then
 	wget -O openssl-${OPENSSL_VERSION}.tar.gz http://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
 fi
-if [ ! -e openssl-build-$ARCH ] ; then
+if [ ! -e openssl-build-"$ARCH" ] ; then
 	tar -zxf openssl-${OPENSSL_VERSION}.tar.gz
-	mv openssl-${OPENSSL_VERSION} openssl-build-$ARCH
+	mv openssl-${OPENSSL_VERSION} openssl-build-"$ARCH"
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libssl.pc" ] ; then
-	pushd openssl-build-$ARCH
+	pushd openssl-build-"$ARCH"
 	perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org
 	# Use env to make all these temporary, so they don't pollute later builds.
 	env SYSTEM=android \
-		CROSS_COMPILE="${BUILDCHAIN}-" \
+		CROSS_COMPILE=${BUILDCHAIN}- \
 		MACHINE=$OPENSSL_MACHINE \
 		HOSTCC=gcc \
 		CC=gcc \
@@ -226,8 +239,8 @@ fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libgit2.pc" ] ; then
 	# We don't want to find the HTTP_Parser package of the build host by mistake
 	perl -pi -e 's/FIND_PACKAGE\(HTTP_Parser\)/#FIND_PACKAGE(HTTP_Parser)/' libgit2-${LIBGIT2_VERSION}/CMakeLists.txt
-	mkdir -p libgit2-build-$ARCH
-	pushd libgit2-build-$ARCH
+	mkdir -p libgit2-build-"$ARCH"
+	pushd libgit2-build-"$ARCH"
 	cmake -DCMAKE_SYSTEM_NAME=Android -DSHA1_TYPE=builtin \
 		-DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF \
 		-DCMAKE_INSTALL_PREFIX="$PREFIX" \
@@ -264,8 +277,8 @@ if [ ! -e libusb-${LIBUSB_VERSION}/configure ] ; then
 	popd
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libusb-1.0.pc" ] ; then
-	mkdir -p libusb-build-$ARCH
-	pushd libusb-build-$ARCH
+	mkdir -p libusb-build-"$ARCH"
+	pushd libusb-build-"$ARCH"
 	../libusb-${LIBUSB_VERSION}/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --enable-static --disable-shared --disable-udev --enable-system-log
 	# --enable-debug-log
 	make
@@ -280,8 +293,8 @@ if [ ! -e libftdi1-${LIBFTDI_VERSION} ] ; then
 	tar -jxf libftdi1-${LIBFTDI_VERSION}.tar.bz2
 fi
 if [ ! -e "$PKG_CONFIG_LIBDIR/libftdi1.pc" ] && [ "$PLATFORM" != "Darwin" ] ; then
-	mkdir -p libftdi1-build-$ARCH
-	pushd libftdi1-build-$ARCH
+	mkdir -p libftdi1-build-"$ARCH"
+	pushd libftdi1-build-"$ARCH"
 	cmake ../libftdi1-${LIBFTDI_VERSION} -DCMAKE_C_COMPILER="$CC" -DCMAKE_INSTALL_PREFIX="$PREFIX" -DCMAKE_PREFIX_PATH="$PREFIX" -DSTATICLIBS=ON -DPYTHON_BINDINGS=OFF -DDOCUMENTATION=OFF -DFTDIPP=OFF -DBUILD_TESTS=OFF -DEXAMPLES=OFF -DFTDI_EEPROM=OFF
 	make
 	make install
@@ -293,8 +306,8 @@ if [ -e "$PREFIX/lib/libftdi1.so" ] ; then
 fi
 
 if [ ! -e "$PKG_CONFIG_LIBDIR/libdivecomputer.pc" ] ; then
-	mkdir -p libdivecomputer-build-$ARCH
-	pushd libdivecomputer-build-$ARCH
+	mkdir -p libdivecomputer-build-"$ARCH"
+	pushd libdivecomputer-build-"$ARCH"
 	"$SUBSURFACE_SOURCE"/../libdivecomputer/configure --host=${BUILDCHAIN} --prefix="$PREFIX" --enable-static --disable-shared --enable-examples=no
 	make
 	make install
@@ -314,7 +327,7 @@ fi
 if [ "$SUBSURFACE_DESKTOP" = "ON" ] ; then
 	SUBSURFACE_MOBILE=
 else
-	SUBSURFACE_MOBILE="ON"
+	SUBSURFACE_MOBILE=ON
 fi
 
 if [ "$SUBSURFACE_MOBILE" = "ON" ] ; then
@@ -324,12 +337,13 @@ if [ "$SUBSURFACE_MOBILE" = "ON" ] ; then
 fi
 
 if [ ! -z "$SUBSURFACE_MOBILE" ] ; then
-	mkdir -p subsurface-mobile-build-$ARCH
-	cd subsurface-mobile-build-$ARCH
-	MOBILE_CMAKE="-DSUBSURFACE_TARGET_EXECUTABLE=MobileExecutable"
+	mkdir -p subsurface-mobile-build-"$ARCH"
+	cd subsurface-mobile-build-"$ARCH"
+	MOBILE_CMAKE=-DSUBSURFACE_TARGET_EXECUTABLE=MobileExecutable
 else
-	mkdir -p subsurface-build-$ARCH
-	cd subsurface-build-$ARCH
+	MOBILE_CMAKE=""
+	mkdir -p subsurface-build-"$ARCH"
+	cd subsurface-build-"$ARCH"
 fi
 
 # something in the qt-android-cmake-thingies mangles your path, so thats why we need to hard-code ant and pkg-config here.
@@ -375,7 +389,7 @@ if [ ! -z "$SUBSURFACE_MOBILE" ] ; then
 
 	rm -rf android-mobile
 	cp -a "$SUBSURFACE_SOURCE/android-mobile" .
-	sed -i -e "s/@SUBSURFACE_MOBILE_VERSION@/\"$SUBSURFACE_MOBILE_VERSION\"/;s/@BUILD_NR@/$BUILD_NR/" android-mobile/AndroidManifest.xml
+	sed -i -e "s/@SUBSURFACE_MOBILE_VERSION@/$SUBSURFACE_MOBILE_VERSION/;s/@BUILD_NR@/$BUILD_NR/" android-mobile/AndroidManifest.xml
 else
 	SUBSURFACE_VERSION=$(grep CANONICAL_VERSION_STRING ssrf-version.h | awk '{ print $3 }' | tr -d \")
 
-- 
2.9.3



More information about the subsurface mailing list