]> git.proxmox.com Git - ceph.git/blame - ceph/run-make-check.sh
update source to 12.2.11
[ceph.git] / ceph / run-make-check.sh
CommitLineData
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
21set -e
22
23trap clean_up_after_myself EXIT
24
25ORIGINAL_CCACHE_CONF="$HOME/.ccache/ccache.conf"
26SAVED_CCACHE_CONF="$HOME/.run-make-check-saved-ccache-conf"
27
28function save_ccache_conf() {
29 test -f $ORIGINAL_CCACHE_CONF && cp $ORIGINAL_CCACHE_CONF $SAVED_CCACHE_CONF || true
30}
31
32function restore_ccache_conf() {
33 test -f $SAVED_CCACHE_CONF && mv $SAVED_CCACHE_CONF $ORIGINAL_CCACHE_CONF || true
34}
35
36function clean_up_after_myself() {
37 rm -fr ${CEPH_BUILD_VIRTUALENV:-/tmp}/*virtualenv*
38 restore_ccache_conf
39}
40
7c673cae
FG
41function 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
53function 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
112Note that the binaries produced by this script do not contain correct time
113and git version information, which may make them unsuitable for debugging
114and production use.
115EOM
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
152function 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
168main "$@"