2015-12-20 14:03:05 +00:00
#!/bin/bash
2016-03-07 01:49:35 +00:00
#
# show what you are doing and stop when things break
2016-03-06 14:41:11 +00:00
set -x
2016-03-06 23:10:54 +00:00
set -e
2015-12-20 14:03:05 +00:00
2018-05-10 15:55:09 +00:00
doVersion = $1
2018-04-24 05:07:44 +00:00
DEBUGRELEASE = "Release"
ARCHS = "armv7 arm64 x86_64"
TARGET = "iphoneos"
TARGET2 = "Device"
# deal with all the command line arguments
while [ [ $# -gt 0 ] ] ; do
arg = " $1 "
case $arg in
-debug)
# build for debugging
DEBUGRELEASE = "Debug"
; ;
-simulator)
# build for the simulator instead of for a device
ARCHS = "x86_64"
TARGET = "iphonesimulator"
TARGET2 = "simulator"
; ;
2018-06-10 08:16:23 +00:00
-all)
# build both debug and release for all devices
DEBUGRELEASE = "All"
; ;
2018-04-24 05:07:44 +00:00
*)
echo " Unknown command line argument $arg "
; ;
esac
shift
done
2018-04-23 16:27:04 +00:00
2016-03-07 01:49:35 +00:00
# set up easy to use variables with the important paths
2015-12-20 21:53:53 +00:00
TOP = $( pwd )
2016-03-06 14:41:11 +00:00
SUBSURFACE_SOURCE = ${ TOP } /../../../subsurface
2018-06-08 14:24:16 +00:00
pushd ${ SUBSURFACE_SOURCE } /..
SSRF_CLONE = $( pwd )
popd
2018-06-08 15:52:11 +00:00
# prepare build dir
mkdir -p build-ios
2015-12-20 21:53:53 +00:00
IOS_QT = ${ TOP } /Qt
2017-12-06 12:46:10 +00:00
QT_VERSION = $( cd ${ IOS_QT } ; ls -d [ 1-9] * | awk -F. '{ printf("%02d.%02d.%02d\n", $1,$2,$3); }' | sort -n | tail -1 | sed -e 's/\.0/\./g;s/^0//' )
2017-12-06 03:38:42 +00:00
if [ -z $QT_VERSION ] ; then
echo "Couldn't determine Qt version; giving up"
exit 1
fi
2015-12-20 21:53:53 +00:00
2016-03-07 01:49:35 +00:00
# set up the Subsurface versions by hand
2017-11-29 05:45:58 +00:00
GITVERSION = $( git describe --abbrev= 12)
CANONICALVERSION = $( git describe --abbrev= 12 | sed -e 's/-g.*$// ; s/^v//' | sed -e 's/-/./' )
2016-03-07 01:49:35 +00:00
MOBILEVERSION = $( grep MOBILE ../../cmake/Modules/version.cmake | cut -d\" -f 2)
2018-05-20 10:57:14 +00:00
echo " #define GIT_VERSION_STRING \" $GITVERSION \" " > ssrf-version.h
echo " #define CANONICAL_VERSION_STRING \" $CANONICALVERSION \" " >> ssrf-version.h
echo " #define MOBILE_VERSION_STRING \" $MOBILEVERSION \" " >> ssrf-version.h
2016-03-07 01:49:35 +00:00
2018-05-10 15:55:09 +00:00
BUNDLE = org.subsurface-divelog.subsurface-mobile
if [ " ${ IOS_BUNDLE_PRODUCT_IDENTIFIER } " != "" ] ; then
2018-05-11 06:01:02 +00:00
BUNDLE = ${ IOS_BUNDLE_PRODUCT_IDENTIFIER }
2018-05-10 15:55:09 +00:00
fi
2016-03-14 13:59:04 +00:00
# create Info.plist with the correct versions
2018-05-10 15:55:09 +00:00
cat Info.plist.in | sed " s/@MOBILE_VERSION@/ $MOBILEVERSION /;s/@CANONICAL_VERSION@/ $CANONICALVERSION /;s/@PRODUCT_BUNDLE_IDENTIFIER@/ $BUNDLE / " > Info.plist
2016-03-14 13:59:04 +00:00
2018-05-10 15:55:09 +00:00
if [ " $doVersion " = "version" ] ; then
2017-11-30 05:53:11 +00:00
exit 0
fi
2016-03-07 01:49:35 +00:00
# Build Subsurface-mobile by default
SUBSURFACE_MOBILE = 1
2016-08-14 22:48:48 +00:00
pushd ${ SUBSURFACE_SOURCE }
bash scripts/mobilecomponents.sh
popd
2016-03-07 01:49:35 +00:00
# now build all the dependencies for the three relevant architectures (x86_64 is for the simulator)
2018-06-06 11:53:22 +00:00
# get all 3rd part libraries
2018-06-08 14:24:16 +00:00
../../scripts/get-dep-lib.sh ios ${ SSRF_CLONE }
2018-06-06 11:53:22 +00:00
2018-04-24 05:07:44 +00:00
for ARCH in $ARCHS ; do
2016-03-07 01:49:35 +00:00
2018-06-08 14:24:16 +00:00
echo next building for $ARCH
2016-03-07 01:49:35 +00:00
2018-06-08 15:52:11 +00:00
INSTALL_ROOT = $TOP /build-ios/install-root-$ARCH
2016-03-07 01:49:35 +00:00
mkdir -p $INSTALL_ROOT /lib $INSTALL_ROOT /bin $INSTALL_ROOT /include
PKG_CONFIG_LIBDIR = $INSTALL_ROOT /lib/pkgconfig
declare -x PKG_CONFIG_PATH = $PKG_CONFIG_LIBDIR
declare -x PREFIX = $INSTALL_ROOT
if [ " $ARCH " = "x86_64" ] ; then
declare -x SDK_NAME = "iphonesimulator"
declare -x TOOLCHAIN_FILE = " ${ TOP } /iPhoneSimulatorCMakeToolchain "
declare -x IOS_PLATFORM = SIMULATOR64
declare -x BUILDCHAIN = x86_64-apple-darwin
2016-03-06 23:10:54 +00:00
else
2016-03-07 01:49:35 +00:00
declare -x SDK_NAME = "iphoneos"
declare -x TOOLCHAIN_FILE = " ${ TOP } /iPhoneDeviceCMakeToolchain "
declare -x IOS_PLATFORM = OS
declare -x BUILDCHAIN = arm-apple-darwin
fi
declare -x ARCH_NAME = $ARCH
declare -x SDK = $SDK_NAME
declare -x SDK_DIR = ` xcrun --sdk $SDK_NAME --show-sdk-path`
declare -x PLATFORM_DIR = ` xcrun --sdk $SDK_NAME --show-sdk-platform-path`
declare -x CC = ` xcrun -sdk $SDK_NAME -find clang`
declare -x CXX = ` xcrun -sdk $SDK_NAME -find clang++`
declare -x LD = ` xcrun -sdk $SDK_NAME -find ld`
2017-04-08 00:07:21 +00:00
declare -x CFLAGS = " -arch $ARCH_NAME -isysroot $SDK_DIR -miphoneos-version-min=6.0 -I $SDK_DIR /usr/include -fembed-bitcode "
2016-03-07 01:49:35 +00:00
declare -x CXXFLAGS = " $CFLAGS "
2018-05-08 15:27:29 +00:00
declare -x LDFLAGS = " $CFLAGS -lsqlite3 -lpthread -lc++ -L $SDK_DIR /usr/lib -fembed-bitcode "
2016-03-07 01:49:35 +00:00
# openssl build stuff.
export DEVELOPER = $( xcode-select --print-path) \
export IPHONEOS_SDK_VERSION = $( xcrun --sdk iphoneos --show-sdk-version)
export IPHONEOS_DEPLOYMENT_VERSION = "6.0"
export IPHONEOS_PLATFORM = $( xcrun --sdk iphoneos --show-sdk-platform-path)
export IPHONEOS_SDK = $( xcrun --sdk iphoneos --show-sdk-path)
export IPHONESIMULATOR_PLATFORM = $( xcrun --sdk iphonesimulator --show-sdk-platform-path)
export IPHONESIMULATOR_SDK = $( xcrun --sdk iphonesimulator --show-sdk-path)
export OSX_SDK_VERSION = $( xcrun --sdk macosx --show-sdk-version)
export OSX_DEPLOYMENT_VERSION = "10.8"
export OSX_PLATFORM = $( xcrun --sdk macosx --show-sdk-platform-path)
export OSX_SDK = $( xcrun --sdk macosx --show-sdk-path)
target = $ARCH
hosttarget = $ARCH
2018-05-09 04:53:11 +00:00
# libxslt have too old config.sub
2018-06-08 14:24:16 +00:00
pushd ${ SSRF_CLONE } /libxslt
2018-05-09 04:53:11 +00:00
autoreconf --install
popd
2016-03-07 01:49:35 +00:00
if [ ! -e $PKG_CONFIG_LIBDIR /libxslt.pc ] ; then
2018-06-08 15:52:11 +00:00
mkdir -p build-ios/libxslt-build-$ARCH_NAME
pushd build-ios/libxslt-build-$ARCH_NAME
2018-06-08 14:24:16 +00:00
${ SSRF_CLONE } /libxslt/configure --host= ${ BUILDCHAIN } --prefix= ${ PREFIX } --without-python --without-crypto --enable-static --disable-shared
2016-03-07 01:49:35 +00:00
make
make install
popd
fi
if [ ! -e $PKG_CONFIG_LIBDIR /libzip.pc ] ; then
2018-08-06 00:31:55 +00:00
pushd ${ SSRF_CLONE } /libzip
# don't waste time on building command line tools, examples, manual, and regression tests - and don't build the BZIP2 support we don't need
sed -i.bak 's/ADD_SUBDIRECTORY(src)//;s/ADD_SUBDIRECTORY(examples)//;s/ADD_SUBDIRECTORY(man)//;s/ADD_SUBDIRECTORY(regress)//;s/FIND_PACKAGE(BZip2)/# FIND_PACKAGE(BZip2)/' CMakeLists.txt
2018-06-08 15:52:11 +00:00
mkdir -p build-ios/libzip-build-$ARCH_NAME
pushd build-ios/libzip-build-$ARCH_NAME
2018-08-04 21:36:58 +00:00
cmake -DBUILD_SHARED_LIBS= "OFF" \
-DCMAKE_TOOLCHAIN_FILE= " $TOOLCHAIN_FILE " \
-DCMAKE_INSTALL_PREFIX= ${ PREFIX } \
-DCMAKE_PREFIX_PATH= ${ PREFIX } \
${ SSRF_CLONE } /libzip
2018-08-06 00:31:55 +00:00
# quiet the super noise warnings
sed -i.bak 's/C_FLAGS = /C_FLAGS = -Wno-nullability-completeness -Wno-expansion-to-defined /' lib/CMakeFiles/zip.dir/flags.make
2016-03-07 01:49:35 +00:00
make
make install
popd
2018-08-06 00:31:55 +00:00
mv CMakeLists.txt.bak CMakeLists.txt
popd
2016-03-07 01:49:35 +00:00
fi
2018-06-08 14:24:16 +00:00
pushd ${ SSRF_CLONE } /libgit2
2018-05-09 04:53:11 +00:00
# libgit2 with -Wall on iOS creates megabytes of warnings...
sed -i.bak 's/ADD_C_FLAG_IF_SUPPORTED(-W/# ADD_C_FLAG_IF_SUPPORTED(-W/' CMakeLists.txt
popd
2016-03-07 01:49:35 +00:00
if [ ! -e $PKG_CONFIG_LIBDIR /libgit2.pc ] ; then
2018-06-08 15:52:11 +00:00
mkdir -p build-ios/libgit2-build-$ARCH
pushd build-ios/libgit2-build-$ARCH
2018-06-08 14:24:16 +00:00
cmake ${ SSRF_CLONE } /libgit2 \
2016-03-07 01:49:35 +00:00
-G "Unix Makefiles" \
-DBUILD_SHARED_LIBS= "OFF" \
-DCMAKE_TOOLCHAIN_FILE= " $TOOLCHAIN_FILE " \
-DSHA1_TYPE= builtin \
-DBUILD_CLAR= OFF \
-DCMAKE_INSTALL_PREFIX= ${ PREFIX } \
-DCMAKE_PREFIX_PATH= ${ PREFIX } \
-DCURL= OFF \
2017-10-11 12:17:40 +00:00
-DUSE_SSH= OFF \
2018-06-08 14:24:16 +00:00
${ SSRF_CLONE } /libgit2/
2018-04-23 13:14:39 +00:00
sed -i.bak 's/C_FLAGS = /C_FLAGS = -Wno-nullability-completeness -Wno-expansion-to-defined /' CMakeFiles/git2.dir/flags.make
2016-03-07 01:49:35 +00:00
make
make install
# Patch away pkg-config dependency to zlib, its there, i promise
perl -pi -e 's/^(Requires.private:.*)zlib(.*)$/$1 $2/' $PKG_CONFIG_LIBDIR /libgit2.pc
popd
2016-03-06 23:10:54 +00:00
fi
2015-12-20 21:53:53 +00:00
2016-03-06 14:41:11 +00:00
# build libdivecomputer
2017-12-04 20:53:43 +00:00
if [ ! -d ../../libdivecomputer/src ] ; then
pushd ../..
git submodule init
2018-05-13 11:09:40 +00:00
git submodule update --recursive
2018-05-08 09:23:56 +00:00
popd
fi
if [ ! -f ../../libdivecomputer/configure ] ; then
pushd ../../libdivecomputer
2017-12-03 20:58:56 +00:00
autoreconf --install
2016-03-07 01:49:35 +00:00
autoreconf --install
2017-12-03 20:58:56 +00:00
popd
2016-03-07 01:49:35 +00:00
fi
2018-06-08 15:52:11 +00:00
if [ ! -f build-ios/libdivecomputer-${ ARCH } .SHA ] ; then
echo "" > build-ios/libdivecomputer-${ ARCH } .SHA
2018-02-12 20:02:14 +00:00
fi
CURRENT_SHA = $( cd ../../libdivecomputer ; git describe)
2018-06-08 15:52:11 +00:00
PREVIOUS_SHA = $( cat build-ios/libdivecomputer-${ ARCH } .SHA)
2018-02-12 20:02:14 +00:00
if [ ! " $CURRENT_SHA " = " $PREVIOUS_SHA " ] ; then
2018-06-08 15:52:11 +00:00
echo $CURRENT_SHA > build-ios/libdivecomputer-${ ARCH } .SHA
mkdir -p build-ios/libdivecomputer-build-$ARCH
pushd build-ios/libdivecomputer-build-$ARCH
../../../../libdivecomputer/configure --host= ${ BUILDCHAIN } --prefix= ${ PREFIX } --enable-static --disable-shared --enable-examples= no --without-libusb --without-hidapi --enable-ble
2016-03-07 01:49:35 +00:00
make
make install
popd
fi
2018-03-13 01:25:12 +00:00
2016-03-07 01:49:35 +00:00
done
2018-04-06 16:38:15 +00:00
# build googlemaps
2018-06-08 15:52:11 +00:00
mkdir -p build-ios/googlemaps-build
pushd build-ios/googlemaps-build
2018-06-08 14:24:16 +00:00
${ IOS_QT } /${ QT_VERSION } /ios/bin/qmake ${ SSRF_CLONE } /googlemaps/googlemaps.pro CONFIG += release
2018-04-06 16:38:15 +00:00
make
popd
2018-04-24 05:07:44 +00:00
# now combine the libraries into fat libraries
2016-08-14 22:48:48 +00:00
rm -rf install-root
2018-06-08 15:52:11 +00:00
cp -a build-ios/install-root-x86_64 install-root
2018-04-27 18:47:28 +00:00
if [ " $TARGET " = "iphoneos" ] ; then
2018-04-24 05:07:44 +00:00
pushd install-root/lib
for LIB in $( find . -type f -name \* .a) ; do
2018-06-08 15:52:11 +00:00
lipo ../../build-ios/install-root-armv7/lib/$LIB ../../build-ios/install-root-arm64/lib/$LIB ../../build-ios/install-root-x86_64/lib/$LIB -create -output $LIB
2018-04-24 05:07:44 +00:00
done
popd
fi
2016-05-04 20:55:14 +00:00
pushd ${ SUBSURFACE_SOURCE } /translations
SRCS = $( ls *.ts | grep -v source )
popd
2018-06-08 15:52:11 +00:00
mkdir -p build-ios/translations
2016-05-04 20:55:14 +00:00
for src in $SRCS ; do
2018-06-08 15:52:11 +00:00
${ IOS_QT } /${ QT_VERSION } /ios/bin/lrelease ${ SUBSURFACE_SOURCE } /translations/$src -qm build-ios/translations/${ src /.ts/.qm }
2016-05-04 20:55:14 +00:00
done
2017-11-29 14:45:47 +00:00
# in order to be able to use xcode without going through Qt Creator
# call qmake directly
2018-04-24 05:07:44 +00:00
2018-06-10 08:16:23 +00:00
if [ " $DEBUGRELEASE " = "All" ] ; then
BUILD_LOOP = "Debug Release"
else
BUILD_LOOP = $DEBUGRELEASE
fi
for BUILD_NOW in $BUILD_LOOP ; do
echo " Building for $BUILD_NOW "
if [ " $BUILD_NOW " = = "Debug" ] ; then
DRCONFIG = "qml_debug"
else
DRCONFIG = "release"
fi
BUILDX = build-Subsurface-mobile-Qt_$( echo ${ QT_VERSION } | tr . _) _for_iOS-${ BUILD_NOW }
mkdir -p ${ BUILDX }
pushd ${ BUILDX }
${ IOS_QT } /${ QT_VERSION } /ios/bin/qmake ../Subsurface-mobile.pro \
-spec macx-ios-clang CONFIG += $TARGET CONFIG += $TARGET2 CONFIG += $DRCONFIG
2018-04-24 05:07:44 +00:00
2018-06-10 08:16:23 +00:00
make qmake_all
popd
done