131 lines
4.0 KiB
Bash
131 lines
4.0 KiB
Bash
|
#!/usr/bin/env sh
|
||
|
# This script can be used on the command line directly to configure several
|
||
|
# different build environments.
|
||
|
# This is called by `.travis.yml` via Travis CI.
|
||
|
# Travis supplies $TRAVIS_OS_NAME.
|
||
|
# http://docs.travis-ci.com/user/multi-os/
|
||
|
# Our .travis.yml also defines:
|
||
|
|
||
|
# - BUILD_TYPE=Release/Debug
|
||
|
# - LIB_TYPE=static/shared
|
||
|
#
|
||
|
# Optional environmental variables
|
||
|
# - DESTDIR <- used for setting the install prefix
|
||
|
# - BUILD_TOOL=["Unix Makefile"|"Ninja"]
|
||
|
# - BUILDNAME <- how to identify this build on the dashboard
|
||
|
# - DO_MemCheck <- if set, try to use valgrind
|
||
|
# - DO_Coverage <- if set, try to do dashboard coverage testing
|
||
|
#
|
||
|
|
||
|
env_set=1
|
||
|
if ${BUILD_TYPE+false}; then
|
||
|
echo "BUILD_TYPE not set in environment."
|
||
|
env_set=0
|
||
|
fi
|
||
|
if ${LIB_TYPE+false}; then
|
||
|
echo "LIB_TYPE not set in environment."
|
||
|
env_set=0
|
||
|
fi
|
||
|
if ${CXX+false}; then
|
||
|
echo "CXX not set in environment."
|
||
|
env_set=0
|
||
|
fi
|
||
|
|
||
|
|
||
|
if [ ${env_set} -eq 0 ]; then
|
||
|
echo "USAGE: CXX=$(which clang++) BUILD_TYPE=[Release|Debug] LIB_TYPE=[static|shared] $0"
|
||
|
echo ""
|
||
|
echo "Examples:"
|
||
|
echo " CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which clang++) BUILD_TYPE=Debug LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which clang++) BUILD_TYPE=Debug LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
|
||
|
echo " CXX=$(which g++) BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which g++) BUILD_TYPE=Debug LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which g++) BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
echo " CXX=$(which g++) BUILD_TYPE=Debug LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0"
|
||
|
|
||
|
exit -1
|
||
|
fi
|
||
|
|
||
|
if ${DESTDIR+false}; then
|
||
|
DESTDIR="/usr/local"
|
||
|
fi
|
||
|
|
||
|
# -e: fail on error
|
||
|
# -v: show commands
|
||
|
# -x: show expanded commands
|
||
|
set -vex
|
||
|
|
||
|
env | sort
|
||
|
|
||
|
which cmake
|
||
|
cmake --version
|
||
|
|
||
|
echo ${CXX}
|
||
|
${CXX} --version
|
||
|
_COMPILER_NAME=`basename ${CXX}`
|
||
|
if [ "${LIB_TYPE}" = "shared" ]; then
|
||
|
_CMAKE_BUILD_SHARED_LIBS=ON
|
||
|
else
|
||
|
_CMAKE_BUILD_SHARED_LIBS=OFF
|
||
|
fi
|
||
|
|
||
|
CTEST_TESTING_OPTION="-D ExperimentalTest"
|
||
|
# - DO_MemCheck <- if set, try to use valgrind
|
||
|
if ! ${DO_MemCheck+false}; then
|
||
|
valgrind --version
|
||
|
CTEST_TESTING_OPTION="-D ExperimentalMemCheck"
|
||
|
else
|
||
|
# - DO_Coverage <- if set, try to do dashboard coverage testing
|
||
|
if ! ${DO_Coverage+false}; then
|
||
|
export CXXFLAGS="-fprofile-arcs -ftest-coverage"
|
||
|
export LDFLAGS="-fprofile-arcs -ftest-coverage"
|
||
|
CTEST_TESTING_OPTION="-D ExperimentalTest -D ExperimentalCoverage"
|
||
|
#gcov --version
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Ninja = Generates build.ninja files.
|
||
|
if ${BUILD_TOOL+false}; then
|
||
|
BUILD_TOOL="Ninja"
|
||
|
export _BUILD_EXE=ninja
|
||
|
which ninja
|
||
|
ninja --version
|
||
|
else
|
||
|
# Unix Makefiles = Generates standard UNIX makefiles.
|
||
|
export _BUILD_EXE=make
|
||
|
fi
|
||
|
|
||
|
_BUILD_DIR_NAME="build-cmake_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}"
|
||
|
mkdir -p ${_BUILD_DIR_NAME}
|
||
|
cd "${_BUILD_DIR_NAME}"
|
||
|
if ${BUILDNAME+false}; then
|
||
|
_HOSTNAME=`hostname -s`
|
||
|
BUILDNAME="${_HOSTNAME}_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}"
|
||
|
fi
|
||
|
cmake \
|
||
|
-G "${BUILD_TOOL}" \
|
||
|
-DBUILDNAME:STRING="${BUILDNAME}" \
|
||
|
-DCMAKE_CXX_COMPILER:PATH=${CXX} \
|
||
|
-DCMAKE_BUILD_TYPE:STRING=${BUILD_TYPE} \
|
||
|
-DBUILD_SHARED_LIBS:BOOL=${_CMAKE_BUILD_SHARED_LIBS} \
|
||
|
-DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR} \
|
||
|
../
|
||
|
|
||
|
ctest -C ${BUILD_TYPE} -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild ${CTEST_TESTING_OPTION} -D ExperimentalSubmit
|
||
|
# Final step is to verify that installation succeeds
|
||
|
cmake --build . --config ${BUILD_TYPE} --target install
|
||
|
|
||
|
if [ "${DESTDIR}" != "/usr/local" ]; then
|
||
|
${_BUILD_EXE} install
|
||
|
fi
|
||
|
cd -
|
||
|
|
||
|
if ${CLEANUP+false}; then
|
||
|
echo "Skipping cleanup: build directory will persist."
|
||
|
else
|
||
|
rm -r "${_BUILD_DIR_NAME}"
|
||
|
fi
|