freeswitch-stable: add Perl support

- add mod_perl and perl-esl.
- some patching is required to make this work.
- for the modules to find libperl, an rpath is needed, which currently
  doesn't work because of an rstrip.sh/patchelf issue. Patch sent to
  OpenWrt/LEDE devs (https://patchwork.ozlabs.org/patch/780008/)
- fix some more copts issues that became apparent with Perl enabled.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
This commit is contained in:
Sebastian Kemper 2017-06-24 22:23:13 +02:00
parent 6a4b022ec1
commit 42c0cabdbe
5 changed files with 156 additions and 3 deletions

View File

@ -141,6 +141,7 @@ FS_STABLE_MOD_AVAILABLE:= \
odbc_cdr \
opus \
oreka \
perl \
png \
pocketsphinx \
posix_timer \
@ -353,6 +354,33 @@ fi
exit 0
endef
define Package/$(PKG_NAME)-misc-perl-esl
$(call Package/$(PKG_NAME)/Default)
TITLE:=Perl ESL
DEPENDS:=$(PKG_NAME) +PACKAGE_$(PKG_NAME)-misc-perl-esl:perl
endef
define Package/$(PKG_NAME)-misc-perl-esl/description
This package contains the Perl binding for FreeSWITCH's Event Socket
Library (ESL).
endef
define Package/$(PKG_NAME)-misc-perl-esl/install
$(INSTALL_DIR) $(1)$$(PERL_SITELIB)/ESL
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)$$(PERL_SITELIB)/ESL.pm \
$(1)$$(PERL_SITELIB)
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)$$(PERL_SITELIB)/ESL.so \
$(1)$$(PERL_SITELIB)
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)$$(PERL_SITELIB)/ESL/Dispatch.pm \
$(1)$$(PERL_SITELIB)/ESL
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)$$(PERL_SITELIB)/ESL/IVR.pm \
$(1)$$(PERL_SITELIB)/ESL
endef
define Package/$(PKG_NAME)-misc-python-esl
$(call Package/$(PKG_NAME)/Default)
TITLE:=Python ESL
@ -468,6 +496,15 @@ $(call Package/$(PKG_NAME)/install/mod,$$(1),$(1))
ifeq ($(CONFIG_FS_STABLE_WITH_MODCONF),y)
$(call Package/$(PKG_NAME)/install/dir,$$(1)$(FS_STABLE_EXAMPLES_DIR)/mod_$(1),$(PKG_BUILD_DIR)/src/mod/*/mod_$(1)/conf)
endif
ifeq ($(1),perl)
$(INSTALL_DIR) $$(1)$$(PERL_SITELIB)/auto
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)$(FS_STABLE_PREFIX_DIR)/perl/$(PRG_NAME).pm \
$$(1)$$(PERL_SITELIB)
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)$(FS_STABLE_PREFIX_DIR)/perl/$(PRG_NAME).so \
$$(1)$$(PERL_SITELIB)/auto
endif
ifeq ($(1),python)
$(INSTALL_DIR) $$(1)$(PYTHON_PKG_DIR)
$(INSTALL_DATA) \
@ -517,10 +554,8 @@ endif
$$(eval $$(call BuildPackage,$(PKG_NAME)-util-$(1)))
endef
# we neither need host-perl nor host-php
# don't want host-php
CONFIGURE_VARS+= \
ac_cv_prog_PERL=false \
ac_cv_have_perl=no \
ac_cv_prog_PHP=false \
ac_cv_have_php=no \
ac_cv_prog_PHP_CONFIG=false \
@ -563,6 +598,38 @@ endif
CONFIGURE_VARS+= \
disable_cc=yes
# Perl setup start
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-perl-esl)$(CONFIG_PACKAGE_$(PKG_NAME)-mod-perl),)
FS_STABLE_PERL_FEED:=$(TOPDIR)/feeds/packages/lang/perl
FS_STABLE_PERL_LIBS:=$(shell grep "^libs=" \
$(FS_STABLE_PERL_FEED)/files/base.config | \
sed "s/^libs=//;s/'//g")
include $(FS_STABLE_PERL_FEED)/perlmod.mk
CONFIGURE_VARS+= \
ac_cv_lib_perl_perl_alloc=yes
CONFIGURE_VARS+= \
PERL="$(PERL_CMD)" \
PERL_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_GNU_SOURCE -I$(STAGING_DIR)$(PERL_SITELIB)/CORE" \
PERL_INC="-I$(STAGING_DIR)$(PERL_SITELIB)/CORE" \
PERL_LDFLAGS="-fPIC -Wl,-rpath,$(PERL_SITELIB)/CORE -L$(STAGING_DIR)$(PERL_SITELIB)/CORE -lperl" \
PERL_LIBDIR="-L$(PERL_SITELIB)/CORE" \
PERL_LIBS="-lpthread $(FS_STABLE_PERL_LIBS) $(EXTRA_LIBDIRS:%=-L%) $(EXTRA_LIBS:%=-l%)" \
PERL_SITEDIR="$(PERL_SITELIB)"
else
CONFIGURE_VARS+= \
ac_cv_prog_PERL=false \
ac_cv_have_perl=no
endif
# Perl setup end
# Python setup start
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-python-esl)$(CONFIG_PACKAGE_$(PKG_NAME)-mod-python),)
@ -738,6 +805,9 @@ endef
define Build/Compile
$(call Build/Compile/Default)
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-perl-esl),)
$(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/libs/esl perlmod)
endif
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-python-esl),)
$(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/libs/esl pymod)
endif
@ -745,6 +815,9 @@ endef
define Build/Install
$(call Build/Install/Default)
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-perl-esl),)
$(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/libs/esl DESTDIR=$(PKG_INSTALL_DIR) perlmod-install)
endif
ifneq ($(CONFIG_PACKAGE_$(PKG_NAME)-misc-python-esl),)
$(call Build/Install/Default,-C $(PKG_BUILD_DIR)/libs/esl pymod-install)
endif
@ -752,6 +825,7 @@ endef
$(eval $(call BuildPackage,$(PKG_NAME)))
$(eval $(call BuildPackage,$(PKG_NAME)-misc-hotplug))
$(eval $(call BuildPackage,$(PKG_NAME)-misc-perl-esl))
$(eval $(call BuildPackage,$(PKG_NAME)-misc-python-esl))
$(eval $(call BuildPackage,$(PKG_NAME)-misc-timezones))
@ -881,6 +955,7 @@ $(eval $(call Package/$(PKG_NAME)/Module,nibblebill,Nibblebill,This module allow
$(eval $(call Package/$(PKG_NAME)/Module,odbc_cdr,ODBC CDR,ODBC Call Detail Record handler.,))
$(eval $(call Package/$(PKG_NAME)/Module,opus,Opus,Opus codec support.,+libopus))
$(eval $(call Package/$(PKG_NAME)/Module,oreka,Oreka,This module provides media recording with the Oreka cross-platform\naudio stream recording and retrieval system.,))
$(eval $(call Package/$(PKG_NAME)/Module,perl,Perl,This package contains mod_perl for FreeSWITCH.,@PERL_THREADS PACKAGE_$(PKG_NAME)-mod-perl:perl +libdb47 +libgdbm))
$(eval $(call Package/$(PKG_NAME)/Module,png,PNG,Allows playback of video using PNG files.,))
$(eval $(call Package/$(PKG_NAME)/Module,pocketsphinx,Pocketsphinx,This module allows speech recognition. You might want to install\n$(PKG_NAME)-misc-grammar as well.,))
$(eval $(call Package/$(PKG_NAME)/Module,posix_timer,POSIX timer,Add POSIX timer support.,))

View File

@ -40,3 +40,18 @@
AC_PATH_PROG([PKG_CONFIG], [pkg-config], [no])
if test "$PKG_CONFIG" = "no" \
|| test x"$enable_core_pgsql_pkgconfig" = x"no" \
@@ -1555,13 +1531,7 @@ AC_CHECK_PROG(PERL,perl,[ac_cv_have_perl
# -a "x$ac_cv_have_EXTERN_h" != "xno"
if test "x$ac_cv_have_perl" != "xno"; then
- PERL=perl
- PERL_SITEDIR="`$PERL -MConfig -e 'print $Config{archlib}'`"
- PERL_LIBDIR="-L`$PERL -MConfig -e 'print $Config{archlib}'`/CORE"
- PERL_LIBS="`$PERL -MConfig -e 'print $Config{libs}'`"
- PERL_CFLAGS="-w -DMULTIPLICITY `$PERL -MExtUtils::Embed -e ccopts | sed -e 's|-arch x86_64 -arch i386||'` -DEMBED_PERL"
- PERL_LDFLAGS="`$PERL -MExtUtils::Embed -e ldopts| sed -e 's|-arch x86_64 -arch i386||'`"
- PERL_INC="`$PERL -MExtUtils::Embed -e perl_inc`"
+ PERL_CFLAGS="-w -DMULTIPLICITY ${PERL_CFLAGS} -DEMBED_PERL"
save_CFLAGS="$CFLAGS"
CFLAGS="$PERL_CFLAGS"

View File

@ -0,0 +1,37 @@
--- a/src/mod/languages/mod_perl/Makefile.am
+++ b/src/mod/languages/mod_perl/Makefile.am
@@ -1,8 +1,5 @@
include $(top_srcdir)/build/modmake.rulesam
MODNAME=mod_perl
-PERL = perl
-PERL_LIBDIR =-L`perl -MConfig -e 'print $$Config{archlib}'`/CORE
-PERL_LIBS =`perl -MConfig -e 'print $$Config{libs}'`
perldir=$(prefix)/perl
mod_LTLIBRARIES = mod_perl.la
@@ -10,13 +7,13 @@ perl_LTLIBRARIES = freeswitch.la
mod_perl_la_SOURCES = mod_perl.c freeswitch_perl.cpp mod_perl_wrap.cpp perlxsi.c
mod_perl_la_CFLAGS = $(SWITCH_AM_CFLAGS)
mod_perl_la_CXXFLAGS = $(SWITCH_AM_CXXFLAGS)
-mod_perl_la_CPPFLAGS = -w -DMULTIPLICITY `$(PERL) -MExtUtils::Embed -e ccopts` -DEMBED_PERL -I$(switch_srcdir)/libs/libteletone/src/
+mod_perl_la_CPPFLAGS = @PERL_CFLAGS@ -I$(switch_srcdir)/libs/libteletone/src/
mod_perl_la_LIBADD = $(switch_builddir)/libfreeswitch.la
-mod_perl_la_LDFLAGS = -avoid-version -module -no-undefined -shared `$(PERL) -MExtUtils::Embed -e ldopts` `$(PERL) -MConfig -e 'print $$Config{libs}'`
+mod_perl_la_LDFLAGS = -avoid-version -module -no-undefined -shared @PERL_LDFLAGS@ @PERL_LIBS@
freeswitch_la_SOURCES = freeswitch_perl.cpp mod_perl_wrap.cpp perlxsi.c
freeswitch_la_LDFLAGS = -avoid-version -module -no-undefined -shared $(LDFLAGS)
-freeswitch_la_CPPFLAGS = $(SWITCH_AM_CPPFLAGS) -w -DMULTIPLICITY `$(PERL) -MExtUtils::Embed -e ccopts` -DEMBED_PERL -I$(switch_srcdir)/libs/libteletone/src/
+freeswitch_la_CPPFLAGS = $(SWITCH_AM_CPPFLAGS) @PERL_CFLAGS@ -I$(switch_srcdir)/libs/libteletone/src/
reswig: swigclean mod_perl_wrap.cpp
swigclean: clean
@@ -31,7 +28,7 @@ orig: mod_perl_wrap.cpp
patch -R -s -p0 -i hack.diff
.perlok:
- @(${PERL} -V | grep -i usemultiplicity=define >/dev/null && echo Phew, You have the right perl.) \
+ @(@PERL@ -V | grep -i usemultiplicity=define >/dev/null && echo Phew, You have the right perl.) \
|| ((echo Sorry, you need to compile perl with threads and multiplicity.&& exit 1))
@touch .perlok

View File

@ -0,0 +1,13 @@
--- a/src/mod/endpoints/mod_verto/Makefile.am
+++ b/src/mod/endpoints/mod_verto/Makefile.am
@@ -12,8 +12,8 @@ if HAVE_PERL
#perldir = $(PERL_SITEDIR)
noinst_LTLIBRARIES = MCAST.la
MCAST_la_SOURCES = mcast/mcast_wrap.cpp mcast/perlxsi.c mcast/mcast.c mcast/mcast_cpp.cpp
-MCAST_la_CFLAGS = $(CC_CFLAGS) $(CFLAGS) $(SWITCH_AM_CFLAGS) $(PERL_CFLAGS)
-MCAST_la_CXXFLAGS = $(SWITCH_AM_CXXFLAGS) $(CXXFLAGS) -w $(PERL_INC)
+MCAST_la_CFLAGS = $(CC_CFLAGS) $(SWITCH_AM_CFLAGS) $(PERL_CFLAGS)
+MCAST_la_CXXFLAGS = $(SWITCH_AM_CXXFLAGS) -w $(PERL_INC)
MCAST_la_CPPFLAGS = -I$(switch_srcdir)/src/mod/endpoints/mod_verto/mcast
MCAST_la_LDFLAGS = -avoid-version -module -no-undefined -shared $(PERL_LDFLAGS)

View File

@ -0,0 +1,13 @@
--- a/libs/esl/perl/Makefile.am
+++ b/libs/esl/perl/Makefile.am
@@ -2,8 +2,8 @@ if HAVE_PERL
perldir = $(PERL_SITEDIR)
perl_LTLIBRARIES = ESL.la
ESL_la_SOURCES = esl_wrap.cpp perlxsi.c
-ESL_la_CFLAGS = $(CC_CFLAGS) $(CFLAGS) -I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS) $(PERL_CFLAGS)
-ESL_la_CXXFLAGS = -I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS) $(CXXFLAGS) -w $(PERL_INC)
+ESL_la_CFLAGS = $(CC_CFLAGS) -I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CFLAGS) $(PERL_CFLAGS)
+ESL_la_CXXFLAGS = -I$(switch_srcdir)/libs/esl/src/include $(SWITCH_AM_CXXFLAGS) -w $(PERL_INC)
ESL_la_LDFLAGS = -avoid-version -module -no-undefined -shared $(PERL_LDFLAGS)
ESL_la_LIBADD = ../libesl.la