1*44844408SAndroid Build Coastguard Worker#!/usr/bin/env sh 2*44844408SAndroid Build Coastguard Worker# This script can be used on the command line directly to configure several 3*44844408SAndroid Build Coastguard Worker# different build environments. 4*44844408SAndroid Build Coastguard Worker# This is called by `.travis.yml` via Travis CI. 5*44844408SAndroid Build Coastguard Worker# Travis supplies $TRAVIS_OS_NAME. 6*44844408SAndroid Build Coastguard Worker# http://docs.travis-ci.com/user/multi-os/ 7*44844408SAndroid Build Coastguard Worker# Our .travis.yml also defines: 8*44844408SAndroid Build Coastguard Worker 9*44844408SAndroid Build Coastguard Worker# - BUILD_TYPE=Release/Debug 10*44844408SAndroid Build Coastguard Worker# - LIB_TYPE=static/shared 11*44844408SAndroid Build Coastguard Worker# 12*44844408SAndroid Build Coastguard Worker# Optional environmental variables 13*44844408SAndroid Build Coastguard Worker# - DESTDIR <- used for setting the install prefix 14*44844408SAndroid Build Coastguard Worker# - BUILD_TOOL=["Unix Makefile"|"Ninja"] 15*44844408SAndroid Build Coastguard Worker# - BUILDNAME <- how to identify this build on the dashboard 16*44844408SAndroid Build Coastguard Worker# - DO_MemCheck <- if set, try to use valgrind 17*44844408SAndroid Build Coastguard Worker# - DO_Coverage <- if set, try to do dashboard coverage testing 18*44844408SAndroid Build Coastguard Worker# 19*44844408SAndroid Build Coastguard Worker 20*44844408SAndroid Build Coastguard Workerenv_set=1 21*44844408SAndroid Build Coastguard Workerif ${BUILD_TYPE+false}; then 22*44844408SAndroid Build Coastguard Worker echo "BUILD_TYPE not set in environment." 23*44844408SAndroid Build Coastguard Worker env_set=0 24*44844408SAndroid Build Coastguard Workerfi 25*44844408SAndroid Build Coastguard Workerif ${LIB_TYPE+false}; then 26*44844408SAndroid Build Coastguard Worker echo "LIB_TYPE not set in environment." 27*44844408SAndroid Build Coastguard Worker env_set=0 28*44844408SAndroid Build Coastguard Workerfi 29*44844408SAndroid Build Coastguard Workerif ${CXX+false}; then 30*44844408SAndroid Build Coastguard Worker echo "CXX not set in environment." 31*44844408SAndroid Build Coastguard Worker env_set=0 32*44844408SAndroid Build Coastguard Workerfi 33*44844408SAndroid Build Coastguard Worker 34*44844408SAndroid Build Coastguard Worker 35*44844408SAndroid Build Coastguard Workerif [ ${env_set} -eq 0 ]; then 36*44844408SAndroid Build Coastguard Worker echo "USAGE: CXX=$(which clang++) BUILD_TYPE=[Release|Debug] LIB_TYPE=[static|shared] $0" 37*44844408SAndroid Build Coastguard Worker echo "" 38*44844408SAndroid Build Coastguard Worker echo "Examples:" 39*44844408SAndroid Build Coastguard Worker echo " CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0" 40*44844408SAndroid Build Coastguard Worker echo " CXX=$(which clang++) BUILD_TYPE=Debug LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0" 41*44844408SAndroid Build Coastguard Worker echo " CXX=$(which clang++) BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0" 42*44844408SAndroid Build Coastguard Worker echo " CXX=$(which clang++) BUILD_TYPE=Debug LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0" 43*44844408SAndroid Build Coastguard Worker 44*44844408SAndroid Build Coastguard Worker echo " CXX=$(which g++) BUILD_TYPE=Release LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0" 45*44844408SAndroid Build Coastguard Worker echo " CXX=$(which g++) BUILD_TYPE=Debug LIB_TYPE=shared DESTDIR=/tmp/cmake_json_cpp $0" 46*44844408SAndroid Build Coastguard Worker echo " CXX=$(which g++) BUILD_TYPE=Release LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0" 47*44844408SAndroid Build Coastguard Worker echo " CXX=$(which g++) BUILD_TYPE=Debug LIB_TYPE=static DESTDIR=/tmp/cmake_json_cpp $0" 48*44844408SAndroid Build Coastguard Worker 49*44844408SAndroid Build Coastguard Worker exit -1 50*44844408SAndroid Build Coastguard Workerfi 51*44844408SAndroid Build Coastguard Worker 52*44844408SAndroid Build Coastguard Workerif ${DESTDIR+false}; then 53*44844408SAndroid Build Coastguard Worker DESTDIR="/usr/local" 54*44844408SAndroid Build Coastguard Workerfi 55*44844408SAndroid Build Coastguard Worker 56*44844408SAndroid Build Coastguard Worker# -e: fail on error 57*44844408SAndroid Build Coastguard Worker# -v: show commands 58*44844408SAndroid Build Coastguard Worker# -x: show expanded commands 59*44844408SAndroid Build Coastguard Workerset -vex 60*44844408SAndroid Build Coastguard Worker 61*44844408SAndroid Build Coastguard Workerenv | sort 62*44844408SAndroid Build Coastguard Worker 63*44844408SAndroid Build Coastguard Workerwhich cmake 64*44844408SAndroid Build Coastguard Workercmake --version 65*44844408SAndroid Build Coastguard Worker 66*44844408SAndroid Build Coastguard Workerecho ${CXX} 67*44844408SAndroid Build Coastguard Worker${CXX} --version 68*44844408SAndroid Build Coastguard Worker_COMPILER_NAME=`basename ${CXX}` 69*44844408SAndroid Build Coastguard Workerif [ "${LIB_TYPE}" = "shared" ]; then 70*44844408SAndroid Build Coastguard Worker _CMAKE_BUILD_SHARED_LIBS=ON 71*44844408SAndroid Build Coastguard Workerelse 72*44844408SAndroid Build Coastguard Worker _CMAKE_BUILD_SHARED_LIBS=OFF 73*44844408SAndroid Build Coastguard Workerfi 74*44844408SAndroid Build Coastguard Worker 75*44844408SAndroid Build Coastguard WorkerCTEST_TESTING_OPTION="-D ExperimentalTest" 76*44844408SAndroid Build Coastguard Worker# - DO_MemCheck <- if set, try to use valgrind 77*44844408SAndroid Build Coastguard Workerif ! ${DO_MemCheck+false}; then 78*44844408SAndroid Build Coastguard Worker valgrind --version 79*44844408SAndroid Build Coastguard Worker CTEST_TESTING_OPTION="-D ExperimentalMemCheck" 80*44844408SAndroid Build Coastguard Workerelse 81*44844408SAndroid Build Coastguard Worker# - DO_Coverage <- if set, try to do dashboard coverage testing 82*44844408SAndroid Build Coastguard Worker if ! ${DO_Coverage+false}; then 83*44844408SAndroid Build Coastguard Worker export CXXFLAGS="-fprofile-arcs -ftest-coverage" 84*44844408SAndroid Build Coastguard Worker export LDFLAGS="-fprofile-arcs -ftest-coverage" 85*44844408SAndroid Build Coastguard Worker CTEST_TESTING_OPTION="-D ExperimentalTest -D ExperimentalCoverage" 86*44844408SAndroid Build Coastguard Worker #gcov --version 87*44844408SAndroid Build Coastguard Worker fi 88*44844408SAndroid Build Coastguard Workerfi 89*44844408SAndroid Build Coastguard Worker 90*44844408SAndroid Build Coastguard Worker# Ninja = Generates build.ninja files. 91*44844408SAndroid Build Coastguard Workerif ${BUILD_TOOL+false}; then 92*44844408SAndroid Build Coastguard Worker BUILD_TOOL="Ninja" 93*44844408SAndroid Build Coastguard Worker export _BUILD_EXE=ninja 94*44844408SAndroid Build Coastguard Worker which ninja 95*44844408SAndroid Build Coastguard Worker ninja --version 96*44844408SAndroid Build Coastguard Workerelse 97*44844408SAndroid Build Coastguard Worker# Unix Makefiles = Generates standard UNIX makefiles. 98*44844408SAndroid Build Coastguard Worker export _BUILD_EXE=make 99*44844408SAndroid Build Coastguard Workerfi 100*44844408SAndroid Build Coastguard Worker 101*44844408SAndroid Build Coastguard Worker_BUILD_DIR_NAME="build-cmake_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}" 102*44844408SAndroid Build Coastguard Workermkdir -p ${_BUILD_DIR_NAME} 103*44844408SAndroid Build Coastguard Workercd "${_BUILD_DIR_NAME}" 104*44844408SAndroid Build Coastguard Worker if ${BUILDNAME+false}; then 105*44844408SAndroid Build Coastguard Worker _HOSTNAME=`hostname -s` 106*44844408SAndroid Build Coastguard Worker BUILDNAME="${_HOSTNAME}_${BUILD_TYPE}_${LIB_TYPE}_${_COMPILER_NAME}_${_BUILD_EXE}" 107*44844408SAndroid Build Coastguard Worker fi 108*44844408SAndroid Build Coastguard Worker cmake \ 109*44844408SAndroid Build Coastguard Worker -G "${BUILD_TOOL}" \ 110*44844408SAndroid Build Coastguard Worker -DBUILDNAME:STRING="${BUILDNAME}" \ 111*44844408SAndroid Build Coastguard Worker -DCMAKE_CXX_COMPILER:PATH=${CXX} \ 112*44844408SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE:STRING=${BUILD_TYPE} \ 113*44844408SAndroid Build Coastguard Worker -DBUILD_SHARED_LIBS:BOOL=${_CMAKE_BUILD_SHARED_LIBS} \ 114*44844408SAndroid Build Coastguard Worker -DCMAKE_INSTALL_PREFIX:PATH=${DESTDIR} \ 115*44844408SAndroid Build Coastguard Worker ../ 116*44844408SAndroid Build Coastguard Worker 117*44844408SAndroid Build Coastguard Worker ctest -C ${BUILD_TYPE} -D ExperimentalStart -D ExperimentalConfigure -D ExperimentalBuild ${CTEST_TESTING_OPTION} -D ExperimentalSubmit 118*44844408SAndroid Build Coastguard Worker # Final step is to verify that installation succeeds 119*44844408SAndroid Build Coastguard Worker cmake --build . --config ${BUILD_TYPE} --target install 120*44844408SAndroid Build Coastguard Worker 121*44844408SAndroid Build Coastguard Worker if [ "${DESTDIR}" != "/usr/local" ]; then 122*44844408SAndroid Build Coastguard Worker ${_BUILD_EXE} install 123*44844408SAndroid Build Coastguard Worker fi 124*44844408SAndroid Build Coastguard Workercd - 125*44844408SAndroid Build Coastguard Worker 126*44844408SAndroid Build Coastguard Workerif ${CLEANUP+false}; then 127*44844408SAndroid Build Coastguard Worker echo "Skipping cleanup: build directory will persist." 128*44844408SAndroid Build Coastguard Workerelse 129*44844408SAndroid Build Coastguard Worker rm -r "${_BUILD_DIR_NAME}" 130*44844408SAndroid Build Coastguard Workerfi 131