234 lines
8.1 KiB
Bash
Executable File
234 lines
8.1 KiB
Bash
Executable File
#!/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-static build static libraries (in addition to shared)
|
|
--enable-static-only only build static libraries, not shared
|
|
--with-log-level=LVL enable debugging output via the CAF logger.
|
|
Levels: ERROR, WARNING, INFO, DEBUG, TRACE
|
|
--with-clang-tidy run with clang-tidy (requires CMake >= 3.7.2)
|
|
--sanitizers=LIST comma-separated list of sanitizer names to enable
|
|
|
|
Installation Directories:
|
|
--prefix=PREFIX installation directory [/usr/local]
|
|
--libdir=PATH 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 (on by default):
|
|
--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
|
|
--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
|
|
|
|
Optional Features (off by default):
|
|
--enable-micro-benchmarks
|
|
build micro benchmarks (requires Google Benchmark)
|
|
|
|
Required Packages in Non-Standard Locations:
|
|
--with-openssl=PATH path to OpenSSL install root
|
|
|
|
Advanced Options (for developers):
|
|
-D PARAM passes a parameter directly to CMake
|
|
|
|
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
|
|
;;
|
|
-D)
|
|
shift
|
|
if [ $# -eq 0 ]; then
|
|
echo "Error: -D requires an argument."
|
|
exit 1
|
|
fi
|
|
CMakeCacheEntries="$CMakeCacheEntries -D $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 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-static)
|
|
append_cache_entry ENABLE_STATIC BOOL true
|
|
;;
|
|
--with-clang-tidy)
|
|
append_cache_entry BROKER_ENABLE_TIDY 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-openssl=*)
|
|
append_cache_entry OPENSSL_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
|
|
;;
|
|
--enable-micro-benchmarks)
|
|
append_cache_entry BROKER_ENABLE_MICRO_BENCHMARKS BOOL true
|
|
;;
|
|
*)
|
|
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
|