-
Notifications
You must be signed in to change notification settings - Fork 16
/
configure_cmake.sh
executable file
·167 lines (151 loc) · 5.23 KB
/
configure_cmake.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
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
163
164
165
166
#!/bin/sh
# Convenience wrapper for easily viewing/setting options that
# the project's CMake scripts will recognize
set -e
command="$0 $*"
# check for `cmake` command
type cmake > /dev/null 2>&1 || {
echo "\
This package requires CMake, please install it first, then you may
use this configure script to access CMake equivalent functionality.\
" >&2;
exit 1;
}
usage="\
Usage: $0 [OPTION]... [VAR=VALUE]...
--builddir= The build directory
--generator= run cmake --help for a list of generators
--prefix= Snort++ installation prefix
Optional Features:
--build-type=[Debug|Release|RelWithDebInfo|MinSizeRel]
set cmake build type (defaults to RelWithDebInfo if neither
CFLAGS nor CXXFLAGS are set)
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-code-coverage Whether to enable code coverage support
--enable-debug enable debugging options (bugreports and developers
only)
--disable-gdb disable gdb debugging information
--enable-address-sanitizer
enable address sanitizer support
--enable-thread-sanitizer
enable thread sanitizer support
--enable-ub-sanitizer
enable undefined behavior sanitizer support
"
sourcedir="$( cd "$( dirname "$0" )" && pwd )"
# Function to append a CMake cache entry definition to the
# CMakeCacheEntries variable
# $1 is the cache entry variable name
# $2 is the cache entry variable type
# $3 is the cache entry variable value
append_cache_entry () {
CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3"
}
# set defaults
builddir=build
prefix=/usr/local/snort
CMakeCacheEntries=""
append_cache_entry CMAKE_INSTALL_PREFIX PATH $prefix
build_type=""
[ -z "$CFLAGS" ] && [ -z "$CXXFLAGS" ] && build_type="RelWithDebInfo"
# parse arguments
while [ $# -ne 0 ]; do
case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
case "$1" in
--help|-h)
echo "${usage}" 1>&2
exit 1
;;
--builddir=*)
builddir=$optarg
;;
--define=*)
CMakeCacheEntries="$CMakeCacheEntries -D$optarg"
;;
--generator=*)
CMakeGenerator="$optarg"
;;
--prefix=*)
prefix=$optarg
append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg
;;
--enable-code-coverage)
append_cache_entry ENABLE_CODE_COVERAGE BOOL true
;;
--disable-code-coverage)
append_cache_entry ENABLE_CODE_COVERAGE BOOL false
;;
--enable-debug)
append_cache_entry ENABLE_DEBUG BOOL true
;;
--disable-debug)
append_cache_entry ENABLE_DEBUG BOOL false
;;
--enable-gdb)
append_cache_entry ENABLE_GDB BOOL true
;;
--disable-gdb)
append_cache_entry ENABLE_GDB BOOL false
;;
--enable-address-sanitizer)
append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL true
;;
--disable-address-sanitizer)
append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL false
;;
--enable-thread-sanitizer)
append_cache_entry ENABLE_THREAD_SANITIZER BOOL true
;;
--disable-thread-sanitizer)
append_cache_entry ENABLE_THREAD_SANITIZER BOOL false
;;
--enable-ub-sanitizer)
append_cache_entry ENABLE_UB_SANITIZER BOOL true
;;
--disable-ub-sanitizer)
append_cache_entry ENABLE_UB_SANITIZER BOOL false
;;
--build-type=*)
if [ $optarg = "Debug" ] || [ $optarg = "Release" ] ||
[ $optarg = "RelWithDebInfo" ] || [ $optarg = "MinSizeRel" ]; then
build_type=$optarg
else
echo "Invalid build type '$optarg'. Try $0 --help to see available build types."
exit 1
fi
;;
*)
echo "Invalid option '$1'. Try $0 --help to see available options."
exit 1
;;
esac
shift
done
if [ -d $builddir ]; then
# If build directory exists, check if it has a CMake cache
if [ -f $builddir/CMakeCache.txt ]; then
# If the CMake cache exists, delete it so that this configuration
# is not tainted by a previous one
rm -f $builddir/CMakeCache.txt
fi
else
# Create build directory
mkdir -p $builddir
fi
echo "Build Directory : $builddir"
echo "Source Directory: $sourcedir"
cd $builddir
[ "$CMakeGenerator" ] && gen="-G $CMakeGenerator"
cmake $gen \
-DCMAKE_CXX_FLAGS:STRING="$CXXFLAGS $CPPFLAGS" \
-DCMAKE_C_FLAGS:STRING="$CFLAGS $CPPFLAGS" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_BUILD_TYPE:STRING=$build_type \
$CMakeCacheEntries $sourcedir
echo "# This is the command used to configure this build" > config.status
echo $command >> config.status
chmod u+x config.status