aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/smtk2ssrf-build.sh
blob: 701932abbce2e47b8404841a09204fb0dd5bd9ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/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 <<"