]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #!/bin/bash |
2 | # | |
3 | # Ceph distributed storage system | |
4 | # | |
5 | # Copyright (C) 2014 Red Hat <contact@redhat.com> | |
6 | # | |
7 | # Author: Loic Dachary <loic@dachary.org> | |
8 | # | |
9 | # This library is free software; you can redistribute it and/or | |
10 | # modify it under the terms of the GNU Lesser General Public | |
11 | # License as published by the Free Software Foundation; either | |
12 | # version 2.1 of the License, or (at your option) any later version. | |
13 | # | |
14 | ||
15 | # | |
f64942e4 | 16 | # To just look at what this script will do, run it like this: |
7c673cae | 17 | # |
f64942e4 AA |
18 | # $ DRY_RUN=echo ./run-make-check.sh |
19 | # | |
20 | ||
21 | set -e | |
22 | ||
23 | trap clean_up_after_myself EXIT | |
24 | ||
25 | ORIGINAL_CCACHE_CONF="$HOME/.ccache/ccache.conf" | |
26 | SAVED_CCACHE_CONF="$HOME/.run-make-check-saved-ccache-conf" | |
27 | ||
28 | function save_ccache_conf() { | |
29 | test -f $ORIGINAL_CCACHE_CONF && cp $ORIGINAL_CCACHE_CONF $SAVED_CCACHE_CONF || true | |
30 | } | |
31 | ||
32 | function restore_ccache_conf() { | |
33 | test -f $SAVED_CCACHE_CONF && mv $SAVED_CCACHE_CONF $ORIGINAL_CCACHE_CONF || true | |
34 | } | |
35 | ||
36 | function clean_up_after_myself() { | |
37 | rm -fr ${CEPH_BUILD_VIRTUALENV:-/tmp}/*virtualenv* | |
38 | restore_ccache_conf | |
39 | } | |
40 | ||
7c673cae FG |
41 | function get_processors() { |
42 | if test -n "$NPROC" ; then | |
43 | echo $NPROC | |
44 | else | |
45 | if test $(nproc) -ge 2 ; then | |
46 | expr $(nproc) / 2 | |
47 | else | |
48 | echo 1 | |
49 | fi | |
50 | fi | |
51 | } | |
52 | ||
53 | function run() { | |
54 | local install_cmd | |
31f18b77 | 55 | local which_pkg="which" |
94b18763 | 56 | source /etc/os-release |
7c673cae | 57 | if test -f /etc/redhat-release ; then |
7c673cae FG |
58 | if ! type bc > /dev/null 2>&1 ; then |
59 | echo "Please install bc and re-run." | |
60 | exit 1 | |
61 | fi | |
62 | if test "$(echo "$VERSION_ID >= 22" | bc)" -ne 0; then | |
63 | install_cmd="dnf -y install" | |
64 | else | |
65 | install_cmd="yum install -y" | |
66 | fi | |
94b18763 FG |
67 | elif type zypper > /dev/null 2>&1 ; then |
68 | install_cmd="zypper --gpg-auto-import-keys --non-interactive install --no-recommends" | |
69 | elif type apt-get > /dev/null 2>&1 ; then | |
70 | install_cmd="apt-get install -y" | |
31f18b77 | 71 | which_pkg="debianutils" |
7c673cae FG |
72 | fi |
73 | ||
7c673cae FG |
74 | if ! type sudo > /dev/null 2>&1 ; then |
75 | echo "Please install sudo and re-run. This script assumes it is running" | |
76 | echo "as a normal user with the ability to run commands as root via sudo." | |
77 | exit 1 | |
78 | fi | |
79 | if [ -n "$install_cmd" ]; then | |
f64942e4 | 80 | $DRY_RUN sudo $install_cmd ccache $which_pkg |
7c673cae FG |
81 | else |
82 | echo "WARNING: Don't know how to install packages" >&2 | |
94b18763 | 83 | echo "This probably means distribution $ID is not supported by run-make-check.sh" >&2 |
7c673cae FG |
84 | fi |
85 | ||
f64942e4 AA |
86 | if ! type ccache > /dev/null 2>&1 ; then |
87 | echo "ERROR: ccache could not be installed" | |
88 | exit 1 | |
89 | fi | |
90 | ||
7c673cae FG |
91 | if test -f ./install-deps.sh ; then |
92 | $DRY_RUN ./install-deps.sh || return 1 | |
f64942e4 | 93 | trap clean_up_after_myself EXIT |
7c673cae FG |
94 | fi |
95 | ||
96 | # Init defaults after deps are installed. get_processors() depends on coreutils nproc. | |
97 | DEFAULT_MAKEOPTS=${DEFAULT_MAKEOPTS:--j$(get_processors)} | |
98 | BUILD_MAKEOPTS=${BUILD_MAKEOPTS:-$DEFAULT_MAKEOPTS} | |
f64942e4 | 99 | test "$BUILD_MAKEOPTS" && echo "make will run with option(s) $BUILD_MAKEOPTS" |
7c673cae FG |
100 | CHECK_MAKEOPTS=${CHECK_MAKEOPTS:-$DEFAULT_MAKEOPTS} |
101 | ||
f64942e4 AA |
102 | if type python2 > /dev/null 2>&1 ; then |
103 | # gtest-parallel requires Python 2 | |
104 | CMAKE_PYTHON_OPTS="-DWITH_GTEST_PARALLEL=ON" | |
105 | else | |
106 | CMAKE_PYTHON_OPTS="-DWITH_PYTHON2=OFF -DWITH_PYTHON3=ON -DMGR_PYTHON_VERSION=3 -DWITH_GTEST_PARALLEL=OFF" | |
107 | fi | |
108 | ||
109 | CMAKE_BUILD_OPTS="" | |
110 | ||
111 | cat <<EOM | |
112 | Note that the binaries produced by this script do not contain correct time | |
113 | and git version information, which may make them unsuitable for debugging | |
114 | and production use. | |
115 | EOM | |
116 | save_ccache_conf | |
117 | # remove the entropy generated by the date/time embedded in the build | |
118 | CMAKE_BUILD_OPTS="$CMAKE_BUILD_OPTS -DENABLE_GIT_VERSION=OFF" | |
119 | $DRY_RUN export SOURCE_DATE_EPOCH="946684800" | |
120 | $DRY_RUN ccache -o sloppiness=time_macros | |
121 | $DRY_RUN ccache -o run_second_cpp=true | |
122 | if [ -n "$JENKINS_HOME" ]; then | |
123 | # Build host has plenty of space available, let's use it to keep | |
124 | # various versions of the built objects. This could increase the cache hit | |
125 | # if the same or similar PRs are running several times | |
126 | $DRY_RUN ccache -o max_size=100G | |
127 | else | |
128 | echo "Current ccache max_size setting:" | |
129 | ccache -p | grep max_size | |
130 | fi | |
131 | $DRY_RUN ccache -z # Reset the ccache statistics | |
132 | ||
133 | $DRY_RUN ./do_cmake.sh $CMAKE_BUILD_OPTS $CMAKE_PYTHON_OPTS $@ || return 1 | |
7c673cae FG |
134 | $DRY_RUN cd build |
135 | $DRY_RUN make $BUILD_MAKEOPTS tests || return 1 | |
f64942e4 AA |
136 | |
137 | $DRY_RUN ccache -s # print the ccache statistics to evaluate the efficiency | |
138 | ||
139 | # to prevent OSD EMFILE death on tests, make sure ulimit >= 1024 | |
140 | $DRY_RUN ulimit -n $(ulimit -Hn) | |
141 | if [ $(ulimit -n) -lt 1024 ];then | |
142 | echo "***ulimit -n too small, better bigger than 1024 for test***" | |
143 | return 1 | |
144 | fi | |
145 | ||
c07f9fc5 FG |
146 | if ! $DRY_RUN ctest $CHECK_MAKEOPTS --output-on-failure; then |
147 | rm -f ${TMPDIR:-/tmp}/ceph-asok.* | |
148 | return 1 | |
149 | fi | |
7c673cae FG |
150 | } |
151 | ||
152 | function main() { | |
153 | if [[ $EUID -eq 0 ]] ; then | |
154 | echo "For best results, run this script as a normal user configured" | |
155 | echo "with the ability to run commands as root via sudo." | |
156 | fi | |
157 | echo -n "Checking hostname sanity... " | |
f64942e4 | 158 | if $DRY_RUN hostname --fqdn >/dev/null 2>&1 ; then |
7c673cae FG |
159 | echo "OK" |
160 | else | |
161 | echo "NOT OK" | |
162 | echo "Please fix 'hostname --fqdn', otherwise 'make check' will fail" | |
163 | return 1 | |
164 | fi | |
f64942e4 | 165 | run "$@" && echo "make check: successful run on $(git rev-parse HEAD)" |
7c673cae FG |
166 | } |
167 | ||
168 | main "$@" |