kumquat-buildroot/package/asterisk/asterisk.mk

239 lines
5.9 KiB
Makefile
Raw Normal View History

package/asterisk: new package Asterisk: the flagship of telephony on Linux. These are the lines of code whose continuous mission is to power small and large enterprises telephony systems, to boldly provide IP PBX where no one has done so before. But it is a hell to get compiled... :-( For starters, it needs a host tool, menuselect, to prepare its build configuration. Unfortunately, the way it handles menuselect does not apply very well for cross-compilation: the main ./configure calls out to menuselect's own ./configure, and of course that runs with the same environement, which is wrong for cross-compilation (because of variables like CC, CFLAGS and the likes). Furthermore, the paths to menuselect are imbricated about everywhere in the main Makefile, so making it find menuselect in PATH is a lost cause. Instead, we just patch-out the handling of menuselect, build it as the host variant and copy it in place. Now, asterisk wants to install a default set of sound files (for answering machine stuff, I guess). They come come pre-bundled in the official archive [0], but the buildsystem will want to download (at install time) the sha1 files for each sound archive, to validate that said archive is correct. However, the download is done via plain http, so it still risks an MITM attack. And for Buildroot, it is not always possible to download at install time, so we patch-out the sha1 check. [0] http://downloads.asterisk.org/pub/telephony/asterisk/releases/ The official archive contains the sound archives plus a full set of documentation. This makes it very big. Unfortunately, the hosting site is rather slow, topping at about ~204kbps. So we get the archive from the official mirror on Github. But that archive is missing the sound archives, so we download them separately. Some tests, like the crypt() one, are broken and could not have ever possibly worked at all. Worse, the FFmpeg test is looking for headers that FFmpeg removed more than 10 years ago and are virtually no longer available in any distro. So, FFmpeg support is definitely not tested by upstream and can't possibly work at all. Finally, trying to run test-code does not work in cross-compilation. As a final stroke of genius, asterisk checks for the re-entrant variant of res_ninit(), and concludes that all such functions are available, including res_nsearch(). Uclibc-ng has the former but not the latter, so the build fails. Since there is no cache variable for that check, we can't pre-feed that result to configure, and fixing it is a bigger endeavour. So we make asterisk depend on glibc for now, until someone is brave enough to fix it. Almost all features are disabled for now. Support for additional features will be added in subsequent patches now that we have a working base. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Romain Naour <romain.naour@openwide.fr> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> [Arnout: - make libilbc a mandatory dependency instead of using the bundled one; - add license, license files, and license file hashes; - minor spelling corrections; - remove redundant trailing backslash reported by check-package; - rewrap help text to 72 columns instead of 68] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> fixup
2017-09-09 23:39:07 +02:00
################################################################################
#
# asterisk
#
################################################################################
ASTERISK_VERSION = 14.5.0
# Use the github mirror: it's an official mirror maintained by Digium, and
# provides tarballs, which the main Asterisk git tree (behind Gerrit) does not.
ASTERISK_SITE = $(call github,asterisk,asterisk,$(ASTERISK_VERSION))
ASTERISK_SOUNDS_BASE_URL = http://downloads.asterisk.org/pub/telephony/sounds/releases
ASTERISK_EXTRA_DOWNLOADS = \
$(ASTERISK_SOUNDS_BASE_URL)/asterisk-core-sounds-en-gsm-1.5.tar.gz \
$(ASTERISK_SOUNDS_BASE_URL)/asterisk-moh-opsound-wav-2.03.tar.gz
ASTERISK_LICENSE = GPL-2.0, BSD-3c (SHA1, resample), BSD-4c (db1-ast)
ASTERISK_LICENSE_FILES = \
COPYING \
main/sha1.c \
codecs/speex/speex_resampler.h \
utils/db1-ast/include/db.h
# For patches 0001, 0003 and 0004
ASTERISK_AUTORECONF = YES
ASTERISK_AUTORECONF_OPTS = -Iautoconf -Ithird-party -Ithird-party/pjproject
ASTERISK_DEPENDENCIES = \
host-asterisk \
jansson \
libcurl \
libxml2 \
ncurses \
sqlite \
util-linux
# Asterisk wants to run its menuselect tool (a highly tweaked derivative of
# kconfig), but builds it using the target tools. So we build it in the host
# variant (see below), and copy the full build tree of menuselect.
define ASTERISK_COPY_MENUSELECT
rm -rf $(@D)/menuselect
cp -a $(HOST_ASTERISK_DIR)/menuselect $(@D)/menuselect
endef
ASTERISK_PRE_CONFIGURE_HOOKS += ASTERISK_COPY_MENUSELECT
ASTERISK_CONF_OPTS = \
--disable-xmldoc \
--disable-internal-poll \
--disable-asteriskssl \
--disable-rpath \
--without-bfd \
--without-cap \
--without-cpg \
--without-curses \
--without-dahdi \
--without-gtk2 \
--without-gmime \
--without-h323 \
--without-hoard \
--without-ical \
--without-iconv \
--without-iksemel \
--without-imap \
--without-inotify \
--without-iodbc \
--without-isdnnet \
--without-jack \
--without-uriparser \
--without-kqueue \
--without-ldap \
--without-libedit \
--without-libxslt \
--without-ltdl \
--without-lua \
--without-misdn \
--without-mysqlclient \
--without-nbs \
--without-neon29 \
--without-netsnmp \
--without-newt \
--without-openr2 \
--without-osptk \
--without-oss \
--without-postgres \
--without-pjproject \
--without-popt \
--without-portaudio \
--without-pri \
--without-pwlib \
--without-radius \
--without-resample \
--without-sdl \
--without-SDL_image \
--without-spandsp \
--without-ss7 \
--without-speex \
--without-speexdsp \
--without-sqlite \
--without-srtp \
--without-suppserv \
--without-tds \
--without-termcap \
--without-timerfd \
--without-tinfo \
--without-tonezone \
--without-unbound \
--without-unixodbc \
--without-vorbis \
--without-vpb \
--without-x11 \
--with-crypt \
--with-jansson \
--with-libcurl \
--with-ilbc \
--with-libxml2 \
--with-ncurses="$(STAGING_DIR)/usr" \
--with-sqlite3="$(STAGING_DIR)/usr" \
--with-sounds-cache=$(BR2_DL_DIR)
# avcodec are from ffmpeg. There is virtually zero chance this could
# even work; asterisk is looking for ffmpeg/avcodec.h which has not
# been installed in this location since early 2007 (~10 years ago at
# the time of this writing).
ASTERISK_CONF_OPTS += --without-avcodec
ASTERISK_CONF_ENV = \
ac_cv_path_CONFIG_LIBXML2=$(STAGING_DIR)/usr/bin/xml2-config
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
ASTERISK_CONF_OPTS += --with-execinfo
else
ASTERISK_CONF_OPTS += --without-execinfo
endif
ifeq ($(BR2_PACKAGE_LIBGSM),y)
ASTERISK_DEPENDENCIES += libgsm
ASTERISK_CONF_OPTS += --with-gsm
else
ASTERISK_CONF_OPTS += --without-gsm
endif
ifeq ($(BR2_PACKAGE_ALSA_LIB),y)
ASTERISK_DEPENDENCIES += alsa-lib
ASTERISK_CONF_OPTS += --with-asound
else
ASTERISK_CONF_OPTS += --without-asound
endif
ifeq ($(BR2_PACKAGE_BLUEZ_UTILS),y)
ASTERISK_DEPENDENCIES += bluez_utils
ASTERISK_CONF_OPTS += --with-bluetooth
else
ASTERISK_CONF_OPTS += --without-bluetooth
endif
ifeq ($(BR2_PACKAGE_NEON),y)
ASTERISK_DEPENDENCIES += neon
ASTERISK_CONF_OPTS += --with-neon
ASTERISK_CONF_ENV += \
ac_cv_path_CONFIG_NEON=$(STAGING_DIR)/usr/bin/neon-config
else
ASTERISK_CONF_OPTS += --without-neon
endif
ifeq ($(BR2_PACKAGE_LIBOGG),y)
ASTERISK_DEPENDENCIES += libogg
ASTERISK_CONF_OPTS += --with-ogg
else
ASTERISK_CONF_OPTS += --without-ogg
endif
ifeq ($(BR2_PACKAGE_OPUS),y)
ASTERISK_DEPENDENCIES += opus
ASTERISK_CONF_OPTS += --with-opus
else
ASTERISK_CONF_OPTS += --without-opus
endif
ifeq ($(BR2_PACKAGE_OPENSSL),y)
ASTERISK_DEPENDENCIES += openssl
ASTERISK_CONF_OPTS += --with-ssl
else
ASTERISK_CONF_OPTS += --without-ssl
endif
ifeq ($(BR2_PACKAGE_ZLIB),y)
ASTERISK_DEPENDENCIES += zlib
ASTERISK_CONF_OPTS += --with-z
else
ASTERISK_CONF_OPTS += --without-z
endif
package/asterisk: new package Asterisk: the flagship of telephony on Linux. These are the lines of code whose continuous mission is to power small and large enterprises telephony systems, to boldly provide IP PBX where no one has done so before. But it is a hell to get compiled... :-( For starters, it needs a host tool, menuselect, to prepare its build configuration. Unfortunately, the way it handles menuselect does not apply very well for cross-compilation: the main ./configure calls out to menuselect's own ./configure, and of course that runs with the same environement, which is wrong for cross-compilation (because of variables like CC, CFLAGS and the likes). Furthermore, the paths to menuselect are imbricated about everywhere in the main Makefile, so making it find menuselect in PATH is a lost cause. Instead, we just patch-out the handling of menuselect, build it as the host variant and copy it in place. Now, asterisk wants to install a default set of sound files (for answering machine stuff, I guess). They come come pre-bundled in the official archive [0], but the buildsystem will want to download (at install time) the sha1 files for each sound archive, to validate that said archive is correct. However, the download is done via plain http, so it still risks an MITM attack. And for Buildroot, it is not always possible to download at install time, so we patch-out the sha1 check. [0] http://downloads.asterisk.org/pub/telephony/asterisk/releases/ The official archive contains the sound archives plus a full set of documentation. This makes it very big. Unfortunately, the hosting site is rather slow, topping at about ~204kbps. So we get the archive from the official mirror on Github. But that archive is missing the sound archives, so we download them separately. Some tests, like the crypt() one, are broken and could not have ever possibly worked at all. Worse, the FFmpeg test is looking for headers that FFmpeg removed more than 10 years ago and are virtually no longer available in any distro. So, FFmpeg support is definitely not tested by upstream and can't possibly work at all. Finally, trying to run test-code does not work in cross-compilation. As a final stroke of genius, asterisk checks for the re-entrant variant of res_ninit(), and concludes that all such functions are available, including res_nsearch(). Uclibc-ng has the former but not the latter, so the build fails. Since there is no cache variable for that check, we can't pre-feed that result to configure, and fixing it is a bigger endeavour. So we make asterisk depend on glibc for now, until someone is brave enough to fix it. Almost all features are disabled for now. Support for additional features will be added in subsequent patches now that we have a working base. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Romain Naour <romain.naour@openwide.fr> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> [Arnout: - make libilbc a mandatory dependency instead of using the bundled one; - add license, license files, and license file hashes; - minor spelling corrections; - remove redundant trailing backslash reported by check-package; - rewrap help text to 72 columns instead of 68] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> fixup
2017-09-09 23:39:07 +02:00
ASTERISK_DIRS = \
ASTVARLIBDIR="/usr/lib/asterisk" \
ASTDATADIR="/usr/lib/asterisk" \
ASTKEYDIR="/usr/lib/asterisk" \
ASTDBDIR="/usr/lib/asterisk"
ASTERISK_MAKE_OPTS = $(ASTERISK_DIRS)
# We want to install sample configuration files, too.
ASTERISK_INSTALL_TARGET_OPTS = \
$(ASTERISK_DIRS) \
DESTDIR=$(TARGET_DIR) \
LDCONFIG=true \
install samples
$(eval $(autotools-package))
#-------------------------------------------------------------------------------
# This part deals with building the menuselect tool as a host package
HOST_ASTERISK_DEPENDENCIES = host-pkgconf host-libxml2 host-ncurses
HOST_ASTERISK_SUBDIR = menuselect
HOST_ASTERISK_LICENSE = GPL-2.0
HOST_ASTERISK_LICENSE_FILES = COPYING
# No need to autoreconf for the host variant,
# so do not inherit the target setup.
HOST_ASTERISK_AUTORECONF = NO
HOST_ASTERISK_CONF_ENV = CONFIG_LIBXML2=$(HOST_DIR)/usr/bin/xml2-config
HOST_ASTERISK_CONF_OPTS = \
--without-newt \
--without-curses \
--with-ncurses=$(HOST_DIR)/usr
# Even though menuselect is an autotools package, it is *not* installed,
# as asterisk does expect it to be in a sub-directory of its source tree,
# which do by copying the full menuselect build tree as a pre-configure
# hook in the target variant.
define HOST_ASTERISK_INSTALL_CMDS
@:
endef
$(eval $(host-autotools-package))