subsurface/scripts/smtk2ssrf-build.sh
Salvador Cuñat c6d85838b5 smtk2ssrf-build.sh: Build a stripped version of subsurface
Till now we have been building against a previous built of subsurface.
This was handy and fast, but there is a huge drawback in this approach
because we were including a lot of unneeded dependencies (e.g. marble
or serial-ftdi), some of which are, indeed, optional.

With this patch, a stripped down version of susbsurface is built and
used to link in smtk2ssrf.

The bad news are that this - almost unusable - version of subsurface
overrides any preexisting binary, so the user has to rebuild.

Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2017-10-29 17:08:36 +01:00

162 lines
5 KiB
Bash
Executable file

#!/bin/bash
# This script is meant to run from src directory in the same fashion than
# subsurface/scripts/build.sh
#
# Flags: -t (--tag) A git valid tag, commit, etc in subsurface tree
# -j (--jobs) Desired build parallelism, integer.
# -b (--build) Cmake build type, valid values Debug or Release
# Examples:
# $ ./subsurface/scripts/build-smtk2ssrf.sh
# No flags, will build a Release version, with -j4 parallelism in the
# last set git tree position. This should be the usual use form.
# $ ./subsurface/scripts/build-smtk2ssrf.sh -j 2 -t v4.6.5 -b Debug
# Will build a Debug version of smtk2ssrf from the tag v4.6.5 (proved it
# exists) with -j2 parallelism.
#
# Default build parallelism
#
JOBS="-j4"
# Default subsurface git tag: none, assume last manually selected
# or set in build.sh
#
SSRF_TAG=""
# Default build type Release
#
RELEASE=Release
BASEDIR="$(pwd)"
INSTALL_ROOT="$BASEDIR"/install-root
SSRF_PATH="$BASEDIR"/subsurface
# Display an error message if we need to bail out
#
function aborting() {
echo "----> $1. Aborting."
exit 1
}
# check for arguments and set options if any
#
while [ $# -gt 0 ]; do
case $1 in
-t|--tag) SSRF_TAG="$2"
shift;;
-j|--jobs) JOBS=-j"$2"
shift;;
-b|--build) RELEASE="$2"
shift;;
esac
shift
done
echo ">> Building smtk2ssrf <<"
# Check if we are in a sane environment
#
[[ ! -d "$SSRF_PATH" ]] && aborting "Please start from the source root directory" || echo "--> Building from $BASEDIR"
# Ensure cmake and pkg-config have the corrects paths set
#
export CMAKE_PREFIX_PATH="$BASEDIR/install-root:$CMAKE_PREFIX_PATH"
export PKG_CONFIG_PATH="$BASEDIR/install-root/lib/pkgconfig"
# Check if we have glib-2.0 installed. This is a dependency for
# mdbtools.
#
pkg-config --exists glib-2.0
[[ $? -ne 0 ]] && aborting "Glib-2.0 not installed" || \
echo "----> Glib-2.0 exists: $(pkg-config --print-provides glib-2.0)"
# Mdbtools
#
# Check if mdbtools devel package is avaliable, if it is not, download
# and build it.
#
pkg-config --exists libmdb
if [ $? -ne 0 ]; then
echo "----> Downloading/Updating mdbtools "
if [ -d "$BASEDIR"/mdbtools ]; then
cd "$BASEDIR"/mdbtools || aborting "Couldn't cd into $BASEDIR/mdbtools"
git pull --rebase
else
git clone https://github.com/brianb/mdbtools.git "$BASEDIR"/mdbtools
fi
[[ $? -ne 0 ]] && aborting "Problem downloading/updating mdbtools"
echo "----> Building mdbtools ..."
echo "----> This will display a lot of errors and warnings"
cd "$BASEDIR"/mdbtools || aborting "Couldn't cd into $BASEDIR/mdbtools"
autoreconf -i -f
./configure --prefix "$INSTALL_ROOT" --disable-man --disable-gmdb2 >/dev/null
make "$JOBS">/dev/null || aborting "Building mdbtools failed"
make install
else
echo "----> Mdbtools already installed: $(pkg-config --print-provides libmdb)"
fi
# Build bare metal Subsurface.
# We are going to modify some of the building parameters of Subsurface so
# will get a copy of the cmake cache to restore them after building smtk2ssrf.
cd "$SSRF_PATH" || aborting "Couldn't cd into $SSRF_PATH"
echo "----> Saving a copy of $SSRF_PATH/build/CMakeCache.txt"
cp -vf "$SSRF_PATH/build/CMakeCache.txt" "$SSRF_PATH/build/CMakeCache.txt.bak"
if [ ! "$SSRF_TAG" == "" ]; then
PREV_GIT="$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d')"
PREV_GIT=${PREV_GIT##*\ }; PREV_GIT=${PREV_GIT%)}
git checkout "$SSRF_TAG" || STATUS=1
fi
# abort if git checkout failed
if [ ! -z "$STATUS" ] && [ "$STATUS" -eq 1 ]; then
mv -f "$SSRF_PATH/build/CMakeCache.txt.bak" "$SSRF_PATH/build/CMakeCache.txt"
aborting "Couldn't checkout $SSRF_TAG. Is it correct?"
fi
cmake -DBTSUPPORT=OFF \
-DCMAKE_BUILD_TYPE="$RELEASE" \
-DFBSUPPORT=OFF \
-DFORCE_LIBSSH=OFF \
-DFTDISUPPORT=OFF \
-DMAKE_TESTS=OFF \
-DNO_DOCS=ON \
-DNO_MARBLE=ON \
-DNO_PRINTING=ON \
-DNO_USERMANUAL=ON \
-DUSE_WEBENGINE=OFF \
-DSUBSURFACE_TARGET_EXECUTABLE=DesktopExecutable \
build
cd build || aborting "Couldn't cd into $SSRF_PATH/build directory"
make clean
make "$JOBS" || STATUS=1
# Restore initial state of subsurface building system:
echo "----> Restoring Subsurface tree state"
[[ ! -z $PREV_GIT ]] && echo "------> Restoring git branch to - $PREV_GIT -" && \
git checkout "$PREV_GIT" >/dev/null
echo "------> Restoring cmake cache" && \
mv -f "$SSRF_PATH/build/CMakeCache.txt.bak" "$SSRF_PATH/build/CMakeCache.txt"
cmake .
echo "----> Restored. Rebuild subsurface if needed"
# Abort if failed to build subsurface
[[ ! -z $STATUS ]] && [[ $STATUS -eq 1 ]] && aborting "Couldn't build Subsurface"
# We are done. Move on
#
echo "----> Building smtk2ssrf SmartTrak divelogs importer"
cd "$SSRF_PATH"/smtk-import || aborting "Couldnt cd into $SSRF_PATH/smtk-import"
mkdir -p build
cd build || aborting "Couldn't cd into $SSRF_PATH/smtk-import/build"
cmake -DCMAKE_BUILD_TYPE="$RELEASE" .. || aborting "Cmake incomplete"
make "$JOBS" || aborting "Failed to build smtk2ssrf"
echo ">> Building smtk2ssrf completed <<"
echo ">> Executable placed in $SSRF_PATH/smtk-import/build <<"
echo ">> To install system-wide, move there and run sudo make install <<"