aboutsummaryrefslogtreecommitdiff
path: root/.travis_scripts/cmake_builder.sh
blob: f3d4e46b6081daef13de6a7a315ccecbd84052b2 (plain)
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
#!/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