cmake_builder.sh 4 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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"]
Jordan Bayles's avatar
Jordan Bayles committed
15
#   - BUILDNAME <- how to identify this build on the dashboard
16
#   - DO_MemCheck <- if set, try to use valgrind
Jordan Bayles's avatar
Jordan Bayles committed
17
18
#   - DO_Coverage <- if set, try to do dashboard coverage testing
#
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

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 [ "${BUILD_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
Jordan Bayles's avatar
Jordan Bayles committed
81
#   - DO_Coverage <- if set, try to do dashboard coverage testing
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
  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
Jordan Bayles's avatar
Jordan Bayles committed
120

121
122
123
124
125
126
  if [ "${DESTDIR}" != "/usr/local" ]; then
     ${_BUILD_EXE} install
  fi
cd -

if ${CLEANUP+false}; then
Jordan Bayles's avatar
Jordan Bayles committed
127
  echo "Skipping cleanup: build directory will persist."
128
129
130
else
  rm -r "${_BUILD_DIR_NAME}"
fi