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 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
#!/bin/sh
# Convenience wrapper for easily viewing/setting options that
# the project's CMake scripts will recognize
set -e
command="$0 $*"
usage="\
Usage: $0 [OPTION]... [VAR=VALUE]...
Build Options:
--cmake=PATH custom path to a CMake binary
--generator=GENERATOR CMake generator to use (see 'cmake --help')
--build-dir=DIR place build files in directory [build]
--build-type=TYPE set CMake build type [RelWithDebInfo]:
- Debug: optimizations off, debug symbols + flags
- MinSizeRel: size optimizations, debugging off
- Release: optimizations on, debugging off
- RelWithDebInfo: optimizations on,
debug symbols on, debug flags off
--ccache use ccache to speed up recompilation (requires
ccache installation and CMake 3.10+)
--enable-debug compile in debugging mode (like --build-type=Debug)
--enable-static build static libraries (in addition to shared)
--enable-static-only only build static libraries, not shared
--with-log-level=LVL build embedded CAF with debugging output. Levels:
ERROR, WARNING, INFO, DEBUG, TRACE
--sanitizers=LIST comma-separated list of sanitizer names to enable
Installation Directories:
--prefix=PREFIX installation directory [/usr/local]
--libdir=DIR installation directory for static and dynamic
libraries [PREFIX/lib]
--python-home=PATH explicit installation method for optional Python
bindings [PATH/lib/python], the path tracks
--prefix if that option is used.
--python-prefix=PATH explicit install directory for Python bindings
[PATH/lib/python<Python Version>/site-packages]
Optional Features:
--disable-python don't try to build python bindings
--disable-docs don't try to build local documentation
--disable-tests don't try to build unit tests
--enable-rocksdb try to find and a RocksDB installation and use it
--with-rocksdb=PATH path to RocksDB installation, implies --enable-rocksdb
--with-python=PATH path to Python executable
--with-python-config=PATH
path to python-config executable
--with-zeek=PATH path to Zeek executable for interoperability tests
Required Packages in Non-Standard Locations:
--with-caf=PATH path to C++ Actor Framework installation
--with-openssl=PATH path to OpenSSL install root
Influential Environment Variables (only on first invocation
per build directory):
CC C compiler command
CFLAGS C compiler flags
CXX C++ compiler command
CXXFLAGS C++ compiler flags
"
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
CMakeCacheEntries=""
append_cache_entry CMAKE_INSTALL_PREFIX PATH $prefix
append_cache_entry BROKER_DISABLE_DOCS BOOL false
# 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
;;
--cmake=*)
CMakeCommand=$optarg
;;
--generator=*)
CMakeGenerator="$optarg"
;;
--ccache)
append_cache_entry ENABLE_CCACHE BOOL true
;;
--build-dir=*)
builddir=$optarg
;;
# backwards compatibility
--builddir=*)
builddir=$optarg
;;
--prefix=*)
append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg
append_cache_entry CMAKE_INSTALL_LIBDIR PATH $optarg/lib
append_cache_entry BROKER_PYTHON_HOME PATH $optarg
;;
--libdir=*)
append_cache_entry CMAKE_INSTALL_LIBDIR PATH $optarg
;;
--python-home=*)
append_cache_entry BROKER_PYTHON_HOME PATH $optarg
;;
--python-prefix=*)
append_cache_entry BROKER_PYTHON_PREFIX PATH $optarg
;;
--build-type=*)
append_cache_entry CMAKE_BUILD_TYPE STRING $optarg
;;
--enable-debug)
append_cache_entry ENABLE_DEBUG BOOL true
;;
--enable-static)
append_cache_entry ENABLE_STATIC BOOL true
;;
--sanitizers=*)
append_cache_entry BROKER_SANITIZERS STRING $optarg
;;
--enable-static-only)
append_cache_entry ENABLE_STATIC_ONLY BOOL true
;;
--with-log-level=*)
append_cache_entry CAF_LOG_LEVEL STRING $optarg
;;
--disable-python)
append_cache_entry DISABLE_PYTHON_BINDINGS BOOL true
;;
--disable-docs)
append_cache_entry BROKER_DISABLE_DOCS BOOL true
;;
--disable-tests)
append_cache_entry BROKER_DISABLE_TESTS BOOL true
;;
--with-caf=*)
append_cache_entry CAF_ROOT_DIR PATH $optarg
;;
--with-openssl=*)
append_cache_entry OPENSSL_ROOT_DIR PATH $optarg
;;
--enable-rocksdb)
append_cache_entry BROKER_ENABLE_ROCKSDB BOOL true
;;
--with-rocksdb=*)
append_cache_entry BROKER_ENABLE_ROCKSDB BOOL true
append_cache_entry ROCKSDB_ROOT_DIR PATH $optarg
;;
--with-python=*)
append_cache_entry PYTHON_EXECUTABLE PATH $optarg
;;
--with-python-config=*)
append_cache_entry PYTHON_CONFIG PATH $optarg
;;
--with-zeek=*)
append_cache_entry ZEEK_EXECUTABLE PATH $optarg
;;
*)
echo "Invalid option '$1'. Try $0 --help to see available options."
exit 1
;;
esac
shift
done
if [ -z "$CMakeCommand" ]; then
# prefer cmake3 over "regular" cmake (cmake == cmake2 on RHEL)
if command -v cmake3 >/dev/null 2>&1 ; then
CMakeCommand="cmake3"
elif command -v cmake >/dev/null 2>&1 ; then
CMakeCommand="cmake"
else
echo "This package requires CMake, please install it first."
echo "Then you may use this script to configure the CMake build."
echo "Note: pass --cmake=PATH to use cmake in non-standard locations."
exit 1;
fi
fi
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
if [ -n "$CMakeGenerator" ]; then
"$CMakeCommand" -G "$CMakeGenerator" $CMakeCacheEntries $sourcedir
else
"$CMakeCommand" $CMakeCacheEntries $sourcedir
fi
printf "#!/bin/sh\n\n" > config.status
printf "# Switch to the source of this build directory.\n" >> config.status
printf "cd \"$sourcedir\"\n\n" >> config.status
printf "# Invoke the command to configure this build.\n" >> config.status
if [ -n "$CC" ]; then
printf 'CC="%s" ' "$CC" >> config.status
fi
if [ -n "$CXX" ]; then
printf 'CXX="%s" ' "$CXX" >> config.status
fi
if [ -n "$CXXFLAGS" ]; then
printf 'CXXFLAGS="%s" ' "$CXXFLAGS" >> config.status
fi
printf "$command\n" $@ >> config.status
chmod u+x config.status
|