CI: Use .gitreview to default BRANCH_NAME.
[asterisk/asterisk.git] / tests / CI / buildAsterisk.sh
1 #!/usr/bin/env bash
2
3 CIDIR=$(dirname $(readlink -fn $0))
4 COVERAGE=0
5 REF_DEBUG=0
6 DISABLE_BINARY_MODULES=0
7 source $CIDIR/ci.functions
8
9 if [ -z $BRANCH_NAME ]; then
10         BRANCH_NAME=$(git config -f .gitreview --get gerrit.defaultbranch)
11 fi
12
13 gen_cats() {
14         set +x
15         action=$1
16         shift
17         cats=$@
18
19         for x in $cats ; do
20                 echo " --${action}-category ${x}"
21         done
22 }
23
24 gen_mods() {
25         set +x
26         action=$1
27         shift
28         mods=$@
29
30         for x in $mods ; do
31                 echo " --${action} ${x}"
32         done
33 }
34
35 [ x"$OUTPUT_DIR" != x ] && mkdir -p "$OUTPUT_DIR" 2> /dev/null
36
37 if [ -z $TESTED_ONLY ]; then
38         # Skip building untested modules by default if coverage is enabled.
39         TESTED_ONLY=$COVERAGE
40 fi
41
42 if [ -z $LCOV_DIR ]; then
43         LCOV_DIR="${OUTPUT_DIR:+${OUTPUT_DIR}/}lcov"
44 fi
45
46 if [ x"$CACHE_DIR" != x ] ; then
47         mkdir -p $CACHE_DIR/sounds $CACHE_DIR/externals 2> /dev/null
48 fi
49
50 if [ ${CCACHE_DISABLE:-0} -ne 1 ] ; then
51         if [ x"$CACHE_DIR" != x ] ; then
52                 mkdir -p $CACHE_DIR/ccache
53                 export CCACHE_UMASK=002
54                 export CCACHE_DIR=$CACHE_DIR/ccache
55         fi
56         case ":${PATH:-}:" in
57                 *:/usr/lib*/ccache:*)
58                         echo "Enabling ccache at $CCACHE_DIR"
59                  ;;
60                 *)
61                         if [ -d /usr/lib64/ccache ] ; then
62                                 echo "Enabling ccache at /usr/lib64/ccache with $CCACHE_DIR"
63                                 export PATH="/usr/lib64/ccache${PATH:+:$PATH}"
64                         elif [ -d /usr/lib/ccache ] ; then
65                                 echo "Enabling ccache at /usr/lib/ccache with $CCACHE_DIR"
66                                 export PATH="/usr/lib/ccache${PATH:+:$PATH}"
67                         fi
68                 ;;
69         esac
70 fi
71
72 runner ccache -s
73 runner ulimit -a
74
75 MAKE=`which make`
76 PKGCONFIG=`which pkg-config`
77 [ -d /usr/lib64 ] && _libdir=/usr/lib64
78
79 common_config_args="--prefix=/usr ${_libdir:+--libdir=${_libdir}} --sysconfdir=/etc --with-pjproject-bundled"
80 $PKGCONFIG 'jansson >= 2.11' || common_config_args+=" --with-jansson-bundled"
81 common_config_args+=" ${CACHE_DIR:+--with-sounds-cache=${CACHE_DIR}/sounds --with-externals-cache=${CACHE_DIR}/externals}"
82 common_config_args+=" --enable-dev-mode"
83 if [ $COVERAGE -eq 1 ] ; then
84         common_config_args+=" --enable-coverage"
85 fi
86 if [ "$BRANCH_NAME" == "master" -o $DISABLE_BINARY_MODULES -eq 1 ] ; then
87         common_config_args+=" --disable-binary-modules"
88 fi
89
90 export WGET_EXTRA_ARGS="--quiet"
91
92 runner ./configure ${common_config_args} > ${OUTPUT_DIR:+${OUTPUT_DIR}/}configure.txt
93
94 runner ${MAKE} menuselect.makeopts
95
96 runner menuselect/menuselect `gen_mods enable DONT_OPTIMIZE BETTER_BACKTRACES MALLOC_DEBUG DO_CRASH TEST_FRAMEWORK` menuselect.makeopts
97 runner menuselect/menuselect `gen_mods disable COMPILE_DOUBLE BUILD_NATIVE` menuselect.makeopts
98 if [ $REF_DEBUG -eq 1 ] ; then
99         runner menuselect/menuselect --enable REF_DEBUG menuselect.makeopts
100 fi
101
102 cat_enables="MENUSELECT_BRIDGES MENUSELECT_CEL MENUSELECT_CDR"
103 cat_enables+=" MENUSELECT_CHANNELS MENUSELECT_CODECS MENUSELECT_FORMATS MENUSELECT_FUNCS"
104 cat_enables+=" MENUSELECT_PBX MENUSELECT_RES MENUSELECT_UTILS MENUSELECT_TESTS"
105 runner menuselect/menuselect `gen_cats enable $cat_enables` menuselect.makeopts
106
107 mod_disables="res_digium_phone chan_vpb"
108 if [ $TESTED_ONLY -eq 1 ] ; then
109         # These modules are not tested at all.  They are loaded but nothing is ever done
110         # with them, no testsuite tests depend on them.
111         mod_disables+=" app_adsiprog app_alarmreceiver app_celgenuserevent app_db app_dictate"
112         mod_disables+=" app_dumpchan app_externalivr app_festival app_getcpeid app_ices app_image"
113         mod_disables+=" app_jack app_milliwatt app_minivm app_morsecode app_mp3 app_nbscat app_privacy"
114         mod_disables+=" app_readexten app_sms app_speech_utils app_test app_url app_waitforring"
115         mod_disables+=" app_waitforsilence app_waituntil app_zapateller"
116         mod_disables+=" cdr_adaptive_odbc cdr_custom cdr_manager cdr_odbc cdr_pgsql cdr_radius"
117         mod_disables+=" cdr_syslog cdr_tds"
118         mod_disables+=" cel_odbc cel_pgsql cel_radius cel_sqlite3_custom cel_tds"
119         mod_disables+=" chan_alsa chan_console chan_mgcp chan_motif chan_oss chan_rtp chan_skinny chan_unistim"
120         mod_disables+=" func_frame_trace func_pitchshift func_speex func_volume func_dialgroup"
121         mod_disables+=" func_periodic_hook func_sprintf func_enum func_extstate func_sysinfo func_iconv"
122         mod_disables+=" func_callcompletion func_version func_rand func_sha1 func_module func_md5"
123         mod_disables+=" pbx_dundi pbx_loopback"
124         mod_disables+=" res_ael_share res_calendar res_config_ldap res_config_pgsql res_corosync"
125         mod_disables+=" res_http_post res_pktccops res_rtp_multicast res_snmp res_xmpp"
126 fi
127
128 runner menuselect/menuselect `gen_mods disable $mod_disables` menuselect.makeopts
129
130 mod_enables="app_voicemail app_directory FILE_STORAGE"
131 mod_enables+=" res_mwi_external res_ari_mailboxes res_mwi_external_ami res_stasis_mailbox"
132 mod_enables+=" CORE-SOUNDS-EN-GSM MOH-OPSOUND-GSM EXTRA-SOUNDS-EN-GSM"
133 runner menuselect/menuselect `gen_mods enable $mod_enables` menuselect.makeopts
134
135 runner ${MAKE} -j8 || runner ${MAKE} -j1 NOISY_BUILD=yes
136
137 runner rm -f ${LCOV_DIR}/*.info
138 if [ $COVERAGE -eq 1 ] ; then
139         runner mkdir -p ${LCOV_DIR}
140
141         # Zero counter data
142         runner lcov --quiet --directory . --zerocounters
143
144         # Branch coverage is not supported by --initial.  Disable to suppresses a notice
145         # printed if it was enabled in lcovrc.
146         # This initial capture ensures any module which was built but never loaded is
147         # reported with 0% coverage for all sources.
148         runner lcov --quiet --directory . --no-external --capture --initial --rc lcov_branch_coverage=0 \
149                 --output-file ${LCOV_DIR}/initial.info
150 fi
151
152 ALEMBIC=$(which alembic 2>/dev/null || : )
153 if [ x"$ALEMBIC" = x ] ; then
154         echo "Alembic not installed"
155         exit 1
156 fi
157
158 cd contrib/ast-db-manage
159 find -name *.pyc -delete
160 out=$(alembic -c config.ini.sample branches)
161 if [ "x$out" != "x" ] ; then
162         >&2 echo "Alembic branches were found for config"
163         >&2 echo $out
164         exit 1
165 else
166         >&2 echo "Alembic for 'config' OK"
167 fi
168
169 out=$(alembic -c cdr.ini.sample branches)
170 if [ "x$out" != "x" ] ; then
171         >&2 echo "Alembic branches were found for cdr"
172         >&2 echo $out
173         exit 1
174 else
175         >&2 echo "Alembic for 'cdr' OK"
176 fi
177
178 out=$(alembic -c voicemail.ini.sample branches)
179 if [ "x$out" != "x" ] ; then
180         >&2 echo "Alembic branches were found for voicemail"
181         >&2 echo $out
182         exit 1
183 else
184         >&2 echo "Alembic for 'voicemail' OK"
185 fi
186
187 if [ -f "doc/core-en_US.xml" ] ; then
188         ${MAKE} validate-docs || ${MAKE} NOISY_BUILD=yes validate-docs
189 fi
190
191