freeswitch: version bump to 1.10.5

This now uses the external spandsp3 package.

Patches:

 - 390-t38-reinvite-488-fix.patch removed (finally upstreamed)
 - 340-mod-spandsp-fix-typo.patch and 350-gsmopen-spandsp-fixup.patch
   added (both accepted into upstream master already)

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
This commit is contained in:
Sebastian Kemper 2020-09-03 19:50:25 +02:00
parent 38addaa2c7
commit 1dcfd2becf
6 changed files with 49 additions and 254 deletions

View file

@ -8,23 +8,19 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=freeswitch PKG_NAME:=freeswitch
PKG_VERSION:=1.10.4 PKG_VERSION:=1.10.5
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net> PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
PKG_SOURCE:=freeswitch-$(PKG_VERSION).-release.tar.xz PKG_SOURCE:=freeswitch-$(PKG_VERSION).-release.tar.xz
PKG_SOURCE_URL:=https://files.freeswitch.org/releases/freeswitch PKG_SOURCE_URL:=https://files.freeswitch.org/releases/freeswitch
PKG_HASH:=492d8faae813dc21bda691f8d0c3bead1f541d6df69dba760c9d7bacbed717fc PKG_HASH:=3e26600767a82946eca94af2c8f14712783aa83db5fb1cc57585f544aecce327
PKG_CPE_ID:=cpe:/a:freeswitch:freeswitch PKG_CPE_ID:=cpe:/a:freeswitch:freeswitch
PKG_BUILD_DIR:=$(BUILD_DIR)/freeswitch-$(PKG_VERSION).-release PKG_BUILD_DIR:=$(BUILD_DIR)/freeswitch-$(PKG_VERSION).-release
# configure in libs/spandsp fails without libjpeg-turbo and tiff PKG_BUILD_DEPENDS:=perl/host
PKG_BUILD_DEPENDS:= \
libjpeg-turbo \
tiff \
perl/host
PKG_FIXUP:=autoreconf PKG_FIXUP:=autoreconf
@ -383,6 +379,7 @@ $(call Package/freeswitch/Default)
+libpcre \ +libpcre \
+libpthread \ +libpthread \
+librt \ +librt \
+libspandsp3 \
+libspeex \ +libspeex \
+libspeexdsp \ +libspeexdsp \
+libsqlite3 \ +libsqlite3 \
@ -624,13 +621,6 @@ CONFIGURE_ARGS+= \
--with-erlang=no --with-erlang=no
endif endif
# Make mod_spandsp use fixed point math when soft float support is
# enabled on target devices.
ifeq ($(CONFIG_SOFT_FLOAT),y)
CONFIGURE_ARGS+= \
--enable-fixed-point
endif
# FreeSWITCH dropped postgresql support from the core. postgresql # FreeSWITCH dropped postgresql support from the core. postgresql
# support is now available via mod_pgsql. We still need to pass # support is now available via mod_pgsql. We still need to pass
# '--without-pgsql', otherwise apr-util links to libpq and we still # '--without-pgsql', otherwise apr-util links to libpq and we still
@ -732,12 +722,6 @@ FS_SPHINXMODEL_HASH:=dbb5e9fb85000a7cb97d6958a3ef8d77532dc55fc730ac6979705e8645c
FS_FREERADIUS_CLIENT_FILE:=freeradius-client-1.1.7.tar.gz FS_FREERADIUS_CLIENT_FILE:=freeradius-client-1.1.7.tar.gz
FS_FREERADIUS_CLIENT_HASH:=eada2861b8f4928e3ac6b5bbfe11e92cd6cdcacfce40cae1085e77c1b6add0e9 FS_FREERADIUS_CLIENT_HASH:=eada2861b8f4928e3ac6b5bbfe11e92cd6cdcacfce40cae1085e77c1b6add0e9
# spandsp
FS_SPANDSP_VERSION:=a6266f22591ee6ed1be9282babe4bfdbc50d4b82
FS_SPANDSP_FILE:=fs-spandsp-$(FS_SPANDSP_VERSION).tar.xz
FS_SPANDSP_URL:=https://github.com/freeswitch/spandsp.git
FS_SPANDSP_MIRROR_HASH:=4aa38003c07c05d9030eab93ec3b0b974be03013f9e898b1f053f7306bcfa5c8
ifneq ($(CONFIG_PACKAGE_freeswitch-mod-event-zmq),) ifneq ($(CONFIG_PACKAGE_freeswitch-mod-event-zmq),)
$(eval $(call Download/files,zmq,$(FS_ZEROMQ_FILE),$(FS_ZEROMQ_URL),$(FS_ZEROMQ_HASH))) $(eval $(call Download/files,zmq,$(FS_ZEROMQ_FILE),$(FS_ZEROMQ_URL),$(FS_ZEROMQ_HASH)))
endif endif
@ -752,8 +736,6 @@ ifneq ($(CONFIG_PACKAGE_freeswitch-mod-radius-cdr),)
$(eval $(call Download/files,freeradius-client,$(FS_FREERADIUS_CLIENT_FILE),$(FS_LIBS_URL),$(FS_FREERADIUS_CLIENT_HASH))) $(eval $(call Download/files,freeradius-client,$(FS_FREERADIUS_CLIENT_FILE),$(FS_LIBS_URL),$(FS_FREERADIUS_CLIENT_HASH)))
endif endif
$(eval $(call Download/files,fs-spandsp,$(FS_SPANDSP_FILE),$(FS_SPANDSP_URL),,$(FS_SPANDSP_VERSION),spandsp,$(FS_SPANDSP_MIRROR_HASH),git))
# Need to update LDFLAGS for libs/unimrcp, otherwise it will try to link to a # Need to update LDFLAGS for libs/unimrcp, otherwise it will try to link to a
# different apr/apr-util if found. # different apr/apr-util if found.
# FS_ANCHOR: string in build/acmacros/apr.m4 that will be replaced # FS_ANCHOR: string in build/acmacros/apr.m4 that will be replaced
@ -763,10 +745,6 @@ FS_APR_LIBS:=-L$(PKG_BUILD_DIR)/libs/apr -L$(PKG_BUILD_DIR)/libs/apr-util
define Build/Prepare define Build/Prepare
$(call Build/Prepare/Default) $(call Build/Prepare/Default)
xzcat $(DL_DIR)/$(FS_SPANDSP_FILE) | tar -C $(PKG_BUILD_DIR)/libs $(TAR_OPTIONS)
$(CP) ./files/spandsp-flags.patch $(PKG_BUILD_DIR)/libs/spandsp
cd $(PKG_BUILD_DIR) && $(PATCH) -p1 < libs/spandsp/spandsp-flags.patch
echo '#applications/mod_random' >> $(PKG_BUILD_DIR)/modules.conf echo '#applications/mod_random' >> $(PKG_BUILD_DIR)/modules.conf
echo '#codecs/mod_yuv' >> $(PKG_BUILD_DIR)/modules.conf echo '#codecs/mod_yuv' >> $(PKG_BUILD_DIR)/modules.conf
echo '#event_handlers/mod_event_test' >> $(PKG_BUILD_DIR)/modules.conf echo '#event_handlers/mod_event_test' >> $(PKG_BUILD_DIR)/modules.conf

View file

@ -0,0 +1,10 @@
--- a/src/mod/applications/mod_spandsp/Makefile.am
+++ b/src/mod/applications/mod_spandsp/Makefile.am
@@ -4,6 +4,6 @@ MODNAME=mod_spandsp
mod_LTLIBRARIES = mod_spandsp.la
mod_spandsp_la_SOURCES = mod_spandsp.c udptl.c mod_spandsp_fax.c mod_spandsp_dsp.c mod_spandsp_codecs.c mod_spandsp_modem.c
mod_spandsp_la_CFLAGS = $(AM_CFLAGS)
-mod_spandsp_la_CPPFLAGS = $(SPANDSL_CFLAGS) -I.
+mod_spandsp_la_CPPFLAGS = $(SPANDSP_CFLAGS) -I.
mod_spandsp_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SPANDSP_LIBS) -ljpeg -lz -ltiff
mod_spandsp_la_LDFLAGS = -avoid-version -module -no-undefined -shared

View file

@ -0,0 +1,24 @@
--- a/src/mod/endpoints/mod_gsmopen/Makefile.am
+++ b/src/mod/endpoints/mod_gsmopen/Makefile.am
@@ -1,19 +1,9 @@
include $(top_srcdir)/build/modmake.rulesam
MODNAME=mod_gsmopen
-SPANDSP_DIR=$(switch_srcdir)/libs/spandsp
-SPANDSP_BUILDDIR=$(switch_builddir)/libs/spandsp
-SPANDSP_LA=$(SPANDSP_BUILDDIR)/src/libspandsp.la
-
mod_LTLIBRARIES = mod_gsmopen.la
mod_gsmopen_la_SOURCES = mod_gsmopen.cpp gsmopen_protocol.cpp
mod_gsmopen_la_CXXFLAGS = $(SWITCH_AM_CXXFLAGS)
-mod_gsmopen_la_CPPFLAGS = -I$(SPANDSP_DIR)/src -I$(SPANDSP_BUILDDIR)/src -I.
-mod_gsmopen_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SPANDSP_LA)
+mod_gsmopen_la_CPPFLAGS = $(SPANDSP_CFLAGS) -I.
+mod_gsmopen_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SPANDSP_LIBS)
mod_gsmopen_la_LDFLAGS = -avoid-version -module -no-undefined -lctb-0.16 -lgsmme
-
-BUILT_SOURCES = $(SPANDSP_LA)
-
-$(SPANDSP_LA): $(SPANDSP_DIR) $(SPANDSP_DIR)/.update
- cd $(SPANDSP_BUILDDIR) && $(MAKE) CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)"
- $(TOUCH_TARGET)

View file

@ -0,0 +1,11 @@
--- a/configure.ac
+++ b/configure.ac
@@ -703,7 +703,7 @@ PKG_CHECK_MODULES([MARIADB], [libmariadb
])
])
-PKG_CHECK_MODULES([SPANDSP], [spandsp >= 3.0],[
+PKG_CHECK_MODULES([SPANDSP], [spandsp3 >= 3.0],[
AM_CONDITIONAL([HAVE_SPANDSP],[true])],[
AC_MSG_ERROR([no usable spandsp; please install spandsp3 devel package or equivalent])
])

View file

@ -1,66 +0,0 @@
commit 167294ea2649afd0ffedf4520b0f308979c3ca2a
Author: Sebastian Kemper <sebastian_ml@gmx.net>
Date: Fri Oct 18 18:28:07 2019 +0200
[mod-sofia] Fix reINVITE after T38 is rejected
From FS-11833.
After FS sends a reINVITE to T38 which gets rejected by peer it is no
longer in a state where it can properly answer a reINVITE which requests
a change of the media setup.
1. FS sends INVITE (destination is a fax machine)
2. Call connects with "8 101"
3. FS sends reINVITE to T38
4. T38 rejected (488)
5. FS receives INVITE to "8"
6. FS replies with 200 OK without SDP
7. Call fails
The bug is related to TFLAG_SDP. This flag is set when a media session
is established. And when there's a reINVITE sofia_glue_do_invite() from
sofia_glue.c is called and clears the flag again:
sofia_clear_flag_locked(tech_pvt, TFLAG_SDP);
So when FS sends a reINVITE to T38 the flag gets cleared. But when the
reINVITE is rejected with 488 the flag is not set again. It stays
cleared. So the call continues with the previously negotiated media, fax
passthrough (8 101 in this case), but TFLAG_SDP is not set.
So when FS receives a reINVITE at this point it doesn't see the need to
renegotiate anything, even though it realizes that 2833 DTMF is now off:
2019-04-30 16:42:12.478025 [DEBUG] switch_core_media.c:5478 Audio Codec Compare [PCMA:8:8000:20:64000:1]/[PCMA:8:8000:20:64000:1]
2019-04-30 16:42:12.478025 [DEBUG] switch_core_media.c:5533 Audio Codec Compare [PCMA:8:8000:20:64000:1] ++++ is saved as a match
2019-04-30 16:42:12.478025 [DEBUG] switch_core_media.c:5802 No 2833 in SDP. Disable 2833 dtmf and switch to INFO
When FS doesn't send a reINVITE (fax_enable_t38_request=false) and the
reINVITE to "8" is received, TFLAG_SDP is still set and then FS
understands that it needs to renegotiate and replies with a 200 OK that
includes SDP:
2019-04-30 16:41:19.358028 [DEBUG] switch_core_media.c:5478 Audio Codec Compare [PCMA:8:8000:20:64000:1]/[PCMA:8:8000:20:64000:1]
2019-04-30 16:41:19.358028 [DEBUG] switch_core_media.c:5533 Audio Codec Compare [PCMA:8:8000:20:64000:1] ++++ is saved as a match
2019-04-30 16:41:19.358028 [DEBUG] switch_core_media.c:5802 No 2833 in SDP. Disable 2833 dtmf and switch to INFO
2019-04-30 16:41:19.358028 [DEBUG] sofia.c:8237 skemper was here in line 8232
2019-04-30 16:41:19.358028 [DEBUG] switch_core_media.c:8390 skemper was here in line 8390.
2019-04-30 16:41:19.358028 [DEBUG] switch_core_media.c:8496 Audio params are unchanged for sofia/external/+called_number.
2019-04-30 16:41:19.358028 [DEBUG] sofia.c:8243 Processing updated SDP
This fixes the state problem after a rejected T38 reINVITE by setting
TFLAG_SDP.
Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -6536,6 +6536,7 @@ static void sofia_handle_sip_r_invite(sw
switch_channel_clear_app_flag_key("T38", tech_pvt->channel, CF_APP_T38_REQ);
switch_channel_set_app_flag_key("T38", tech_pvt->channel, CF_APP_T38_FAIL);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s T38 invite failed\n", switch_channel_get_name(tech_pvt->channel));
+ sofia_set_flag(tech_pvt, TFLAG_SDP);
}

View file

@ -1,162 +0,0 @@
--- a/Makefile.am
+++ b/Makefile.am
@@ -130,7 +130,7 @@ CORE_CFLAGS += -I$(switch_srcdir)/libs/l
CORE_CFLAGS += -DSWITCH_HAVE_YUV
endif
CORE_CFLAGS += -I$(switch_srcdir)/libs/srtp/crypto/include -Ilibs/srtp/crypto/include
-CORE_CFLAGS += $(SPANDSP_CFLAGS)
+CORE_CFLAGS += -I$(switch_builddir)/libs/spandsp/src -I$(switch_srcdir)/libs/spandsp/src
if ENABLE_LIBVPX
CORE_CFLAGS += -DSWITCH_HAVE_VPX
endif
@@ -184,10 +184,13 @@ endif
##
## libfreeswitch
##
-noinst_LTLIBRARIES =
+noinst_LTLIBRARIES = libfreeswitch_spandsp.la
if ENABLE_LIBYUV
noinst_LTLIBRARIES += libfreeswitch_libyuv.la
endif
+libfreeswitch_spandsp_la_SOURCES = libs/spandsp/src/plc.c libs/spandsp/src/alloc.c libs/spandsp/src/bit_operations.c
+libfreeswitch_spandsp_la_CFLAGS = -Ilibs/spandsp/src $(CORE_CFLAGS) $(AM_CFLAGS)
+CORE_LIBS+=libfreeswitch_spandsp.la
if ENABLE_LIBYUV
libfreeswitch_libyuv_la_SOURCES = \
@@ -248,7 +251,7 @@ endif
lib_LTLIBRARIES = libfreeswitch.la
libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(SQLITE_CFLAGS) $(GUMBO_CFLAGS) $(FVAD_CFLAGS) $(FREETYPE_CFLAGS) $(CURL_CFLAGS) $(PCRE_CFLAGS) $(SPEEX_CFLAGS) $(LIBEDIT_CFLAGS) $(openssl_CFLAGS) $(AM_CFLAGS) $(TPL_CFLAGS)
libfreeswitch_la_LDFLAGS = -version-info 1:0:0 $(AM_LDFLAGS) $(PLATFORM_CORE_LDFLAGS) -no-undefined
-libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(GUMBO_LIBS) $(FVAD_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(openssl_LIBS) $(PLATFORM_CORE_LIBS) $(TPL_LIBS) $(SPANDSP_LIBS)
+libfreeswitch_la_LIBADD = $(CORE_LIBS) $(APR_LIBS) $(SQLITE_LIBS) $(GUMBO_LIBS) $(FVAD_LIBS) $(FREETYPE_LIBS) $(CURL_LIBS) $(PCRE_LIBS) $(SPEEX_LIBS) $(LIBEDIT_LIBS) $(openssl_LIBS) $(PLATFORM_CORE_LIBS) $(TPL_LIBS)
libfreeswitch_la_DEPENDENCIES = $(BUILT_SOURCES)
if HAVE_PNG
@@ -717,7 +720,9 @@ core-install: core_install
clean_core: clean-libLTLIBRARIES
rm -f $(libfreeswitch_la_OBJECTS)
+ rm -f $(libfreeswitch_spandsp_la_OBJECTS)
rm -f `echo $(libfreeswitch_la_OBJECTS) | sed -e's|.lo|.o|g'`
+ rm -f `echo $(libfreeswitch_spandsp_la_OBJECTS) | sed -e's|.lo|.o|g'`
install_core: install-libLTLIBRARIES
@@ -782,6 +787,12 @@ iks-reconf:
cd libs/iksemel && sh ./configure.gnu $(MY_DEFAULT_ARGS)
$(MAKE) mod_dingaling-clean
+spandsp-reconf:
+ cd libs/spandsp && $(MAKE) clean || echo
+ cd libs/spandsp && autoreconf -fi
+ cd libs/spandsp && sh ./configure.gnu $(MY_DEFAULT_ARGS)
+ cd libs/spandsp && $(MAKE)
+
cluecon:
@clear
@echo Thank you for updating. This is going to take a while so relax.
--- a/configure.ac
+++ b/configure.ac
@@ -703,11 +703,6 @@ PKG_CHECK_MODULES([MARIADB], [libmariadb
])
])
-PKG_CHECK_MODULES([SPANDSP], [spandsp >= 1.99],[
- AM_CONDITIONAL([HAVE_SPANDSP],[true])],[
- AC_MSG_ERROR([no usable spandsp; please install spandsp devel package or equivalent])
-])
-
PKG_CHECK_MODULES([SOFIA_SIP], [sofia-sip-ua >= 1.12.12],[
AM_CONDITIONAL([HAVE_SOFIA_SIP],[true])],[
AC_MSG_ERROR([no usable sofia-sip; please install sofia-sip-ua devel package or equivalent])
@@ -2104,6 +2099,7 @@ AC_CONFIG_SUBDIRS([libs/iksemel])
AC_CONFIG_SUBDIRS([libs/libdingaling])
AC_CONFIG_SUBDIRS([libs/freetdm])
AC_CONFIG_SUBDIRS([libs/unimrcp])
+AC_CONFIG_SUBDIRS([libs/spandsp])
if test "x${enable_zrtp}" = "xyes"; then
AC_CONFIG_SUBDIRS([libs/libzrtp])
fi
--- a/debian/copyright
+++ b/debian/copyright
@@ -1310,6 +1310,45 @@ Files: libs/js/nsprpub/pr/tests/tmocon.c
Copyright: 1998-2004 Netscape Communications Corporation
License: MPL-1.1 or GPL-2+
+Files: libs/spandsp/*
+Copyright: 2001-2012, Steve Underwood
+ 2006 Michael Jerris
+ 1991-1997 Silicon Graphics, Inc.
+ 1990-1997 Sam Leffler
+ 1993 CMU
+ 2004, Horizon Wimba, Inc.
+ 1990, 1995 Frank D. Cringle.
+License: LGPL-2.1
+
+Files: libs/spandsp/tests/*
+ libs/spandsp/spandsp-sim/g1050.c
+ libs/spandsp/spandsp-sim/line_model.c
+ libs/spandsp/spandsp-sim/make_line_models.c
+ libs/spandsp/spandsp-sim/spandsp-sim.h
+ libs/spandsp/spandsp-sim/test_utils.c
+ libs/spandsp/src/image_translate.c
+ libs/spandsp/src/make_at_dictionary.c
+ libs/spandsp/src/make_cielab_luts.c
+ libs/spandsp/src/make_math_fixed_tables.c
+ libs/spandsp/src/make_modem_filter.c
+ libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c
+ libs/spandsp/test-data/itu/fax/generate_dithered_tif.c
+ libs/spandsp/test-data/itu/fax/generate_sized_pages.c
+ libs/spandsp/test-data/itu/fax/generate_striped_pages.c
+Copyright: 2001-2012, Steve Underwood
+License: GPL-2
+
+Files: libs/spandsp/tests/ademco_contactid_tests.c
+ libs/spandsp/tests/regression_tests.sh
+ libs/spandsp/tests/timezone_tests.c
+ libs/spandsp/tests/tsb85_extra_tests.sh
+ libs/spandsp/tests/tsb85_tests.c
+ libs/spandsp/tests/tsb85_tests.sh
+ libs/spandsp/tests/v42bis_tests.sh
+ libs/spandsp/tests/fax_tests.sh
+Copyright: 2001-2012, Steve Underwood
+License: LGPL-2.1
+
Files: src/mod/applications/mod_cluechoo/sl.h
Copyright: 1993 Toyoda Masashi
License: FIXME
@@ -1402,6 +1441,11 @@ Files: libs/libsndfile/src/G72x/*
Copyright: Abandoned, Sun Microsystems, Inc.
License: public-domain
+Files: libs/spandsp/src/spandsp/fast_convert.h
+Copyright: 2001-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
+ 2009 Steve Underwood
+License: LGPL-2.1
+
Files: libs/libsndfile/*
libs/win32/libsndfile/*
Copyright: 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
--- a/src/mod/applications/mod_spandsp/Makefile.am
+++ b/src/mod/applications/mod_spandsp/Makefile.am
@@ -1,9 +1,17 @@
include $(top_srcdir)/build/modmake.rulesam
MODNAME=mod_spandsp
+SPANDSP_DIR=$(switch_srcdir)/libs/spandsp
+SPANDSP_BUILDDIR=$(switch_builddir)/libs/spandsp
+SPANDSP_LA=$(SPANDSP_BUILDDIR)/src/libspandsp.la
+
mod_LTLIBRARIES = mod_spandsp.la
mod_spandsp_la_SOURCES = mod_spandsp.c udptl.c mod_spandsp_fax.c mod_spandsp_dsp.c mod_spandsp_codecs.c mod_spandsp_modem.c
mod_spandsp_la_CFLAGS = $(AM_CFLAGS)
-mod_spandsp_la_CPPFLAGS = $(SPANDSL_CFLAGS) -I.
-mod_spandsp_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SPANDSP_LIBS) -ljpeg -lz -ltiff
+mod_spandsp_la_CPPFLAGS = -I$(SPANDSP_DIR)/src -I$(SPANDSP_BUILDDIR)/src -I.
+mod_spandsp_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(SPANDSP_LA) $(SPANDSP_LA_JBIG) $(SPANDSP_LA_LZMA) -ljpeg -lz -ltiff
mod_spandsp_la_LDFLAGS = -avoid-version -module -no-undefined -shared
+
+$(SPANDSP_LA): $(SPANDSP_DIR) $(SPANDSP_DIR)/.update
+ cd $(SPANDSP_BUILDDIR) && $(MAKE) CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)"
+ $(TOUCH_TARGET)