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