forked from xsacha/SpatiaLiteCpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
134 lines (118 loc) · 3.46 KB
/
build.sh
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
#!/bin/bash
set -eu
# ----------------------------------------------------------------------
# FILE: build.sh
# DESCRIPTION: Script to build SpatiaLiteC++ on a Linux system.
# REQUIREMENTS: CMake, lcov, genhtml
# ----------------------------------------------------------------------
# Default argument values
SELF=$0
BUILDCOV=OFF
BUILDDIST=OFF
BUILDDOC=OFF
BUILDDYN=OFF
BUILDEXS=OFF
BUILDTEST=OFF
BUILDMODE=Release
BUILDDIR=build/linux
CMAKEARGS=
GENERATOR="Unix Makefiles"
# Define directories
SRCDIR=$(readlink -f $(dirname ${BASH_SOURCE[0]}))
DOCSDIR=$SRCDIR/docs/api
RESDIR=$SRCDIR/docs/resources
DOXYCSS=customdoxygen.css
# Display usage
__usage()
{
echo "Usage: $0 [-h] [-a] [-b] [-c <string>] [-d] [-e] [-g <cmake generator>]"
echo " [-m <Release|Debug>] [-o <directory>] [-t] [-x]"
echo " -h = Display this usage"
echo " -a = Build API documentation"
echo " -b = Build release distributions"
echo " -c = Additional CMake arguments. Get concatenated and passed to CMake."
echo " -d = Build dynamic library otherwise static"
echo " -e = Build examples project"
echo " -g = Build generator (Default: \"$GENERATOR\")"
echo " -m = Build mode (Default: $BUILDMODE)"
echo " -o = Build directory (Default: $BUILDDIR)"
echo " -t = Build test project (will build examples and Debug mode)"
echo " -x = Build test coverage (will build tests)"
}
# Parse arguments
USERDIR=
while getopts :habc:deg:m:o:tx flag ; do
case $flag in
h) __usage; exit 0; ;;
a) BUILDDOC=ON; ;;
b) BUILDDIST=ON; ;;
c) CMAKEARGS="$CMAKEARGS $OPTARG"; ;;
d) BUILDDYN=ON; ;;
e) BUILDEXS=ON; ;;
g) GENERATOR=$OPTARG; ;;
m) BUILDMODE=$OPTARG; ;;
o) USERDIR=$OPTARG; ;;
t) BUILDTEST=ON; ;;
x) BUILDCOV=ON; ;;
*) echo "Invalid option: -$OPTARG" >&2; exit 1; ;;
esac
done
shift $((OPTIND-1))
# Build documentation
if [ "$BUILDDOC" == "ON" ]; then
if [ -d "$DOCSDIR" ]; then
rm -rf $DOCSDIR
fi
mkdir $DOCSDIR
#cp -r $RESDIR/* $DOCSDIR/
doxygen Doxyfile
#cp $RESDIR/$DOXYCSS $DOCSDIR/$DOXYCSS
exit 0
fi
if [ "$BUILDDIST" == "ON" ]; then
./$SELF -o "build/linux-static" -m Debug
./$SELF -o "build/linux-static" -m Release
./$SELF -o "build/linux-shared" -m Debug -d
./$SELF -o "build/linux-shared" -m Release -d
exit 0
fi
if [ "$BUILDCOV" == "ON" ]; then
BUILDTEST=ON
fi
if [ "$BUILDTEST" == "ON" ]; then
BUILDEXS=ON
BUILDMODE=Debug
fi
# Add build mode as subfolder unless user gave explicit directory
if [[ -n "$USERDIR" ]]; then
BUILDDIR=$USERDIR
fi
BUILDDIR=$BUILDDIR/$BUILDMODE
# Generate, build, and install
mkdir -p $BUILDDIR
pushd $BUILDDIR
cmake -DSPATIALITECPP_BUILD_DYNAMIC=$BUILDDYN \
-DSPATIALITECPP_BUILD_EXAMPLES=$BUILDEXS \
-DSPATIALITECPP_BUILD_TEST=$BUILDTEST \
-DCMAKE_BUILD_TYPE=$BUILDMODE \
-G"$GENERATOR" \
$CMAKEARGS \
$SRCDIR
TARGET=package
if [ "$BUILDTEST" == "ON" ]; then
TARGET=install
fi
cmake --build . \
--config $BUILDMODE \
--target $TARGET
# Run coverage
if [ $? -eq 0 ] && [ "$BUILDCOV" == "ON" ]; then
pushd test
ctest
popd
lcov --capture --directory src -base-directory $SRCDIR --no-external --output-file coverage.info.tmp
lcov --remove coverage.info.tmp $SRCDIR/ext/\* --output-file coverage.info
genhtml coverage.info --output-directory coverage
rm coverage.info*
fi
popd