1*4882a593Smuzhiyun################################################################################ 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# asterisk 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun################################################################################ 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunASTERISK_VERSION = 16.21.1 8*4882a593Smuzhiyun# Use the github mirror: it's an official mirror maintained by Digium, and 9*4882a593Smuzhiyun# provides tarballs, which the main Asterisk git tree (behind Gerrit) does not. 10*4882a593SmuzhiyunASTERISK_SITE = $(call github,asterisk,asterisk,$(ASTERISK_VERSION)) 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunASTERISK_SOUNDS_BASE_URL = http://downloads.asterisk.org/pub/telephony/sounds/releases 13*4882a593SmuzhiyunASTERISK_EXTRA_DOWNLOADS = \ 14*4882a593Smuzhiyun $(ASTERISK_SOUNDS_BASE_URL)/asterisk-core-sounds-en-gsm-1.6.1.tar.gz \ 15*4882a593Smuzhiyun $(ASTERISK_SOUNDS_BASE_URL)/asterisk-moh-opsound-wav-2.03.tar.gz 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunASTERISK_LICENSE = GPL-2.0, BSD-3-Clause (SHA1, resample), BSD-4-Clause (db1-ast) 18*4882a593SmuzhiyunASTERISK_LICENSE_FILES = \ 19*4882a593Smuzhiyun COPYING \ 20*4882a593Smuzhiyun main/sha1.c \ 21*4882a593Smuzhiyun codecs/speex/speex_resampler.h \ 22*4882a593Smuzhiyun utils/db1-ast/include/db.h 23*4882a593Smuzhiyun 24*4882a593SmuzhiyunASTERISK_CPE_ID_VENDOR = asterisk 25*4882a593SmuzhiyunASTERISK_CPE_ID_PRODUCT = open_source 26*4882a593SmuzhiyunASTERISK_SELINUX_MODULES = asterisk 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun# For patches 0002, 0003 and 0005 29*4882a593SmuzhiyunASTERISK_AUTORECONF = YES 30*4882a593SmuzhiyunASTERISK_AUTORECONF_OPTS = -Iautoconf -Ithird-party -Ithird-party/pjproject -Ithird-party/jansson 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunASTERISK_DEPENDENCIES = \ 33*4882a593Smuzhiyun host-asterisk \ 34*4882a593Smuzhiyun jansson \ 35*4882a593Smuzhiyun libcurl \ 36*4882a593Smuzhiyun libedit \ 37*4882a593Smuzhiyun libxml2 \ 38*4882a593Smuzhiyun sqlite \ 39*4882a593Smuzhiyun util-linux 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun# Asterisk wants to run its menuselect tool (a highly tweaked derivative of 42*4882a593Smuzhiyun# kconfig), but builds it using the target tools. So we build it in the host 43*4882a593Smuzhiyun# variant (see below), and copy the full build tree of menuselect. 44*4882a593Smuzhiyundefine ASTERISK_COPY_MENUSELECT 45*4882a593Smuzhiyun rm -rf $(@D)/menuselect 46*4882a593Smuzhiyun cp -a $(HOST_ASTERISK_DIR)/menuselect $(@D)/menuselect 47*4882a593Smuzhiyunendef 48*4882a593SmuzhiyunASTERISK_PRE_CONFIGURE_HOOKS += ASTERISK_COPY_MENUSELECT 49*4882a593Smuzhiyun 50*4882a593SmuzhiyunASTERISK_CONF_OPTS = \ 51*4882a593Smuzhiyun --disable-xmldoc \ 52*4882a593Smuzhiyun --disable-internal-poll \ 53*4882a593Smuzhiyun --disable-asteriskssl \ 54*4882a593Smuzhiyun --disable-rpath \ 55*4882a593Smuzhiyun --without-bfd \ 56*4882a593Smuzhiyun --without-cap \ 57*4882a593Smuzhiyun --without-cpg \ 58*4882a593Smuzhiyun --without-curses \ 59*4882a593Smuzhiyun --without-gtk2 \ 60*4882a593Smuzhiyun --without-gmime \ 61*4882a593Smuzhiyun --without-hoard \ 62*4882a593Smuzhiyun --without-iconv \ 63*4882a593Smuzhiyun --without-iksemel \ 64*4882a593Smuzhiyun --without-imap \ 65*4882a593Smuzhiyun --without-inotify \ 66*4882a593Smuzhiyun --without-iodbc \ 67*4882a593Smuzhiyun --without-isdnnet \ 68*4882a593Smuzhiyun --without-jack \ 69*4882a593Smuzhiyun --without-uriparser \ 70*4882a593Smuzhiyun --without-kqueue \ 71*4882a593Smuzhiyun --without-libedit \ 72*4882a593Smuzhiyun --without-libxslt \ 73*4882a593Smuzhiyun --without-lua \ 74*4882a593Smuzhiyun --without-misdn \ 75*4882a593Smuzhiyun --without-mysqlclient \ 76*4882a593Smuzhiyun --without-nbs \ 77*4882a593Smuzhiyun --without-neon29 \ 78*4882a593Smuzhiyun --without-newt \ 79*4882a593Smuzhiyun --without-openr2 \ 80*4882a593Smuzhiyun --without-osptk \ 81*4882a593Smuzhiyun --without-oss \ 82*4882a593Smuzhiyun --without-postgres \ 83*4882a593Smuzhiyun --without-pjproject \ 84*4882a593Smuzhiyun --without-pjproject-bundled \ 85*4882a593Smuzhiyun --without-popt \ 86*4882a593Smuzhiyun --without-resample \ 87*4882a593Smuzhiyun --without-sdl \ 88*4882a593Smuzhiyun --without-SDL_image \ 89*4882a593Smuzhiyun --without-sqlite \ 90*4882a593Smuzhiyun --without-suppserv \ 91*4882a593Smuzhiyun --without-tds \ 92*4882a593Smuzhiyun --without-termcap \ 93*4882a593Smuzhiyun --without-timerfd \ 94*4882a593Smuzhiyun --without-tinfo \ 95*4882a593Smuzhiyun --without-unbound \ 96*4882a593Smuzhiyun --without-unixodbc \ 97*4882a593Smuzhiyun --without-vpb \ 98*4882a593Smuzhiyun --without-x11 \ 99*4882a593Smuzhiyun --with-crypt \ 100*4882a593Smuzhiyun --with-jansson \ 101*4882a593Smuzhiyun --with-libcurl \ 102*4882a593Smuzhiyun --with-ilbc \ 103*4882a593Smuzhiyun --with-libxml2 \ 104*4882a593Smuzhiyun --with-libedit="$(STAGING_DIR)/usr" \ 105*4882a593Smuzhiyun --with-sqlite3="$(STAGING_DIR)/usr" \ 106*4882a593Smuzhiyun --with-sounds-cache=$(ASTERISK_DL_DIR) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun# avcodec are from ffmpeg. There is virtually zero chance this could 109*4882a593Smuzhiyun# even work; asterisk is looking for ffmpeg/avcodec.h which has not 110*4882a593Smuzhiyun# been installed in this location since early 2007 (~10 years ago at 111*4882a593Smuzhiyun# the time of this writing). 112*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-avcodec 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun# asterisk is not compatible with freeswitch spandsp 115*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-spandsp 116*4882a593Smuzhiyun 117*4882a593SmuzhiyunASTERISK_CONF_ENV = \ 118*4882a593Smuzhiyun ac_cv_file_bridges_bridge_softmix_include_hrirs_h=true \ 119*4882a593Smuzhiyun ac_cv_path_CONFIG_LIBXML2=$(STAGING_DIR)/usr/bin/xml2-config 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun# Uses __atomic_fetch_add_4 122*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) 123*4882a593SmuzhiyunASTERISK_CONF_ENV += LIBS="-latomic" 124*4882a593Smuzhiyunendif 125*4882a593Smuzhiyun 126*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y) 127*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-execinfo 128*4882a593Smuzhiyunelse 129*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-execinfo 130*4882a593Smuzhiyunendif 131*4882a593Smuzhiyun 132*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBGSM),y) 133*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libgsm 134*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-gsm 135*4882a593Smuzhiyunelse 136*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-gsm 137*4882a593Smuzhiyunendif 138*4882a593Smuzhiyun 139*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_ALSA_LIB),y) 140*4882a593SmuzhiyunASTERISK_DEPENDENCIES += alsa-lib 141*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-asound 142*4882a593Smuzhiyunelse 143*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-asound 144*4882a593Smuzhiyunendif 145*4882a593Smuzhiyun 146*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y) 147*4882a593SmuzhiyunASTERISK_DEPENDENCIES += bluez5_utils 148*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-bluetooth 149*4882a593Smuzhiyunelse 150*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-bluetooth 151*4882a593Smuzhiyunendif 152*4882a593Smuzhiyun 153*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBICAL),y) 154*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libical 155*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-ical 156*4882a593Smuzhiyunelse 157*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-ical 158*4882a593Smuzhiyunendif 159*4882a593Smuzhiyun 160*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENLDAP),y) 161*4882a593SmuzhiyunASTERISK_DEPENDENCIES += openldap 162*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-ldap 163*4882a593Smuzhiyunelse 164*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-ldap 165*4882a593Smuzhiyunendif 166*4882a593Smuzhiyun 167*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_NEON),y) 168*4882a593SmuzhiyunASTERISK_DEPENDENCIES += neon 169*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-neon 170*4882a593SmuzhiyunASTERISK_CONF_ENV += \ 171*4882a593Smuzhiyun ac_cv_path_CONFIG_NEON=$(STAGING_DIR)/usr/bin/neon-config 172*4882a593Smuzhiyunelse 173*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-neon 174*4882a593Smuzhiyunendif 175*4882a593Smuzhiyun 176*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_NETSNMP),y) 177*4882a593SmuzhiyunASTERISK_DEPENDENCIES += netsnmp 178*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-netsnmp=$(STAGING_DIR)/usr 179*4882a593Smuzhiyunelse 180*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-netsnmp 181*4882a593Smuzhiyunendif 182*4882a593Smuzhiyun 183*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBOGG),y) 184*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libogg 185*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-ogg 186*4882a593Smuzhiyunelse 187*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-ogg 188*4882a593Smuzhiyunendif 189*4882a593Smuzhiyun 190*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPUS),y) 191*4882a593SmuzhiyunASTERISK_DEPENDENCIES += opus 192*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-opus 193*4882a593Smuzhiyunelse 194*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-opus 195*4882a593Smuzhiyunendif 196*4882a593Smuzhiyun 197*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_PORTAUDIO),y) 198*4882a593SmuzhiyunASTERISK_DEPENDENCIES += portaudio 199*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-portaudio 200*4882a593Smuzhiyunelse 201*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-portaudio 202*4882a593Smuzhiyunendif 203*4882a593Smuzhiyun 204*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_FREERADIUS_CLIENT),y) 205*4882a593SmuzhiyunASTERISK_DEPENDENCIES += freeradius-client 206*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-radius 207*4882a593Smuzhiyunelse 208*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-radius 209*4882a593Smuzhiyunendif 210*4882a593Smuzhiyun 211*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_DAHDI_LINUX)$(BR2_PACKAGE_DAHDI_TOOLS),yy) 212*4882a593SmuzhiyunASTERISK_DEPENDENCIES += dahdi-linux dahdi-tools 213*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-dahdi --with-tonezone 214*4882a593Smuzhiyun 215*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBPRI),y) 216*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libpri 217*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-pri 218*4882a593Smuzhiyunelse 219*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-pri 220*4882a593Smuzhiyunendif # PRI 221*4882a593Smuzhiyun 222*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBSS7),y) 223*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libss7 224*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-ss7 225*4882a593Smuzhiyunelse 226*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-ss7 227*4882a593Smuzhiyunendif # SS7 228*4882a593Smuzhiyun 229*4882a593Smuzhiyunelse 230*4882a593SmuzhiyunASTERISK_CONF_OPTS += \ 231*4882a593Smuzhiyun --without-dahdi --without-tonezone \ 232*4882a593Smuzhiyun --without-pri --without-ss7 233*4882a593Smuzhiyunendif # DAHDI 234*4882a593Smuzhiyun 235*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENSSL),y) 236*4882a593SmuzhiyunASTERISK_DEPENDENCIES += openssl 237*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-ssl 238*4882a593Smuzhiyunelse 239*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-ssl 240*4882a593Smuzhiyunendif 241*4882a593Smuzhiyun 242*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_SPEEX)$(BR2_PACKAGE_SPEEXDSP),yy) 243*4882a593SmuzhiyunASTERISK_DEPENDENCIES += speex 244*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-speex --with-speexdsp 245*4882a593Smuzhiyunelse 246*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-speex --without-speexdsp 247*4882a593Smuzhiyunendif 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun# asterisk needs an openssl-enabled libsrtp 250*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBSRTP)$(BR2_PACKAGE_OPENSSL)x$(BR2_STATIC_LIBS),yyx) 251*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libsrtp 252*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-srtp 253*4882a593Smuzhiyunelse 254*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-srtp 255*4882a593Smuzhiyunendif 256*4882a593Smuzhiyun 257*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBVORBIS),y) 258*4882a593SmuzhiyunASTERISK_DEPENDENCIES += libvorbis 259*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-vorbis 260*4882a593Smuzhiyunelse 261*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-vorbis 262*4882a593Smuzhiyunendif 263*4882a593Smuzhiyun 264*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_ZLIB),y) 265*4882a593SmuzhiyunASTERISK_DEPENDENCIES += zlib 266*4882a593SmuzhiyunASTERISK_CONF_OPTS += --with-z 267*4882a593Smuzhiyunelse 268*4882a593SmuzhiyunASTERISK_CONF_OPTS += --without-z 269*4882a593Smuzhiyunendif 270*4882a593Smuzhiyun 271*4882a593SmuzhiyunASTERISK_DIRS = \ 272*4882a593Smuzhiyun ASTVARLIBDIR="/usr/lib/asterisk" \ 273*4882a593Smuzhiyun ASTDATADIR="/usr/lib/asterisk" \ 274*4882a593Smuzhiyun ASTKEYDIR="/usr/lib/asterisk" \ 275*4882a593Smuzhiyun ASTDBDIR="/usr/lib/asterisk" 276*4882a593Smuzhiyun 277*4882a593SmuzhiyunASTERISK_MAKE_OPTS = $(ASTERISK_DIRS) 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun# Uses __atomic_fetch_add_4 280*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) 281*4882a593SmuzhiyunASTERISK_MAKE_OPTS += ASTLDFLAGS="-latomic" 282*4882a593Smuzhiyunendif 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun# Remove default -O3 optimization flag 285*4882a593SmuzhiyunASTERISK_MAKE_OPTS += OPTIMIZE="" 286*4882a593Smuzhiyun 287*4882a593SmuzhiyunASTERISK_CFLAGS = $(TARGET_CFLAGS) 288*4882a593Smuzhiyun 289*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_93847),y) 290*4882a593SmuzhiyunASTERISK_CFLAGS += -O0 291*4882a593Smuzhiyunendif 292*4882a593Smuzhiyun 293*4882a593SmuzhiyunASTERISK_CONF_OPTS += CFLAGS="$(ASTERISK_CFLAGS)" 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun# We want to install sample configuration files, too. 296*4882a593SmuzhiyunASTERISK_INSTALL_TARGET_OPTS = \ 297*4882a593Smuzhiyun $(ASTERISK_DIRS) \ 298*4882a593Smuzhiyun DESTDIR=$(TARGET_DIR) \ 299*4882a593Smuzhiyun LDCONFIG=true \ 300*4882a593Smuzhiyun install samples 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun$(eval $(autotools-package)) 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun#------------------------------------------------------------------------------- 305*4882a593Smuzhiyun# This part deals with building the menuselect tool as a host package 306*4882a593Smuzhiyun 307*4882a593SmuzhiyunHOST_ASTERISK_DEPENDENCIES = host-pkgconf host-libxml2 host-ncurses 308*4882a593SmuzhiyunHOST_ASTERISK_SUBDIR = menuselect 309*4882a593Smuzhiyun 310*4882a593SmuzhiyunHOST_ASTERISK_LICENSE = GPL-2.0 311*4882a593SmuzhiyunHOST_ASTERISK_LICENSE_FILES = COPYING 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun# No need to autoreconf for the host variant, 314*4882a593Smuzhiyun# so do not inherit the target setup. 315*4882a593SmuzhiyunHOST_ASTERISK_AUTORECONF = NO 316*4882a593Smuzhiyun 317*4882a593SmuzhiyunHOST_ASTERISK_CONF_ENV = CONFIG_LIBXML2=$(HOST_DIR)/bin/xml2-config 318*4882a593Smuzhiyun 319*4882a593SmuzhiyunHOST_ASTERISK_CONF_OPTS = \ 320*4882a593Smuzhiyun --without-newt \ 321*4882a593Smuzhiyun --without-curses \ 322*4882a593Smuzhiyun --with-ncurses=$(HOST_DIR) 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun# Not an automake package, so does not inherit LDFLAGS et al. from 325*4882a593Smuzhiyun# the configure run. 326*4882a593SmuzhiyunHOST_ASTERISK_MAKE_ENV = $(HOST_CONFIGURE_OPTS) 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun# Even though menuselect is an autotools package, it is not an automake 329*4882a593Smuzhiyun# package and does not have an 'install' rule, as asterisk does expect 330*4882a593Smuzhiyun# it to be in a sub-directory of its source tree. We do so by copying 331*4882a593Smuzhiyun# the full menuselect build tree as a pre-configure hook in the target 332*4882a593Smuzhiyun# variant. 333*4882a593Smuzhiyun# However, the sanity checks on host packages are not run on menuselect. 334*4882a593Smuzhiyun# But we still want to catch that menuselect has the proper rpath set, 335*4882a593Smuzhiyun# for example, as it uses host libraries that we do build, like 336*4882a593Smuzhiyun# host-libxml2. 337*4882a593Smuzhiyun# So we do manually install the menuselect tool. 338*4882a593Smuzhiyundefine HOST_ASTERISK_INSTALL_CMDS 339*4882a593Smuzhiyun $(INSTALL) -D -m 0755 $(@D)/menuselect/menuselect \ 340*4882a593Smuzhiyun $(HOST_DIR)/bin/asterisk-menuselect 341*4882a593Smuzhiyunendef 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun$(eval $(host-autotools-package)) 344