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