From 60ea8ff6763f4fe8b5d6482b81be6ff95e3a276a Mon Sep 17 00:00:00 2001 From: Sebastian Kemper Date: Fri, 10 Apr 2020 13:52:17 +0200 Subject: [PATCH 1/2] kamailio-5.x: update build setup This switches the Makefile away from calling "make" manually to using OpenWrt default build defines. This way PKG_BUILD_PARALLEL and PKG_INSTALL can be used. To achieve this the flags are added to MAKE_FLAGS. The flags are also tidied up as per example from Alpine Linux. Like this the build is cleaner, for instance this gets rid of the wrong share directory ("//share/kamailio" instead of "/usr/share/kamailio") and things like multi-slashes in directory names (ex. "///usr/lib/kamailio/modules"). lib_target was removed after verifying that the correct RPATH "/usr/lib/kamailio" is still in place without it. CFLAGS is replaced by CC_EXTRA_OPTS (same is already done for LDFLAGS). This way upstream source can add flags like "-Wall" to OpenWrt builds. Extra flags LOCALBASE, SYSBASE and CROSS get removed as they aren't needed anymore with the "Alpine Linux" flags. Signed-off-by: Sebastian Kemper --- net/kamailio-5.x/Makefile | 43 +++++++++++++++------------------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/net/kamailio-5.x/Makefile b/net/kamailio-5.x/Makefile index 412f72f..3fd6870 100644 --- a/net/kamailio-5.x/Makefile +++ b/net/kamailio-5.x/Makefile @@ -21,8 +21,9 @@ PKG_LICENSE:=GPL-2.0+ PKG_LICENSE_FILES:=COPYING PKG_MAINTAINER:=Jiri Slachta -# Defining PKG_BUILD_PARALLEL to 1 would be a noop due to the way we call make -#PKG_BUILD_PARALLEL:=1 +PKG_INSTALL:=1 + +PKG_BUILD_PARALLEL:=1 MODULES_AVAILABLE:= \ acc \ @@ -388,9 +389,6 @@ endef # "ims_diameter_server" -> libkamailio_ims # "carrierroute" -> libtrie -# "lib_target" is specified in order for the modules to get a proper -# RPATH, as otherwise they would not find the internal libraries. - EXTRA_MODULES:= \ $(if $(CONFIG_PACKAGE_kamailio5-mod-carrierroute),,carrierroute) \ $(if $(CONFIG_PACKAGE_kamailio5-mod-ims-diameter-server),,ims_diameter_server) \ @@ -408,35 +406,26 @@ ifeq ($(call qstrip,$(CONFIG_ARCH)),mips) CPU_MIPS2:=mips32 24kc 34kc 74kc endif -PKG_MAKE_ARGS:= \ - prefix=/ \ - cfg_dir=/etc/kamailio/ \ - bin_dir=/usr/sbin/ \ - data_dir=/usr/share/kamailio/ \ - lib_dir=/usr/lib/kamailio/ \ - modules_dir=/usr/lib/kamailio/ \ +MAKE_FLAGS += \ + $(if $(findstring $(call qstrip,$(CONFIG_CPU_TYPE)),$(CPU_MIPS2)),ARCH="mips2",ARCH="$(ARCH)") \ + CC_EXTRA_OPTS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \ + LD="$(TARGET_CC)" \ + LD_EXTRA_OPTS="$(TARGET_LDFLAGS)" \ + LIBDIR=lib \ + PREFIX=/usr \ + cfg_prefix="$(PKG_INSTALL_DIR)" \ + cfg_target=/etc/kamailio \ group_include="standard" \ include_modules="$$(INCL_MODULES) $(EXTRA_MODULES)" \ - cfg_target=/etc/kamailio/ \ - lib_target=/usr/lib/kamailio/ \ - run_target=/var/run/kamailio/ \ - CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \ - LD_EXTRA_OPTS="$(TARGET_LDFLAGS)" \ - LOCALBASE="$(STAGING_DIR)/usr" \ - SYSBASE="$(STAGING_DIR)/usr" \ - CROSS_COMPILE=$(TARGET_CROSS) \ - CC="$(TARGET_CC)" \ - $(if $(findstring $(call qstrip,$(CONFIG_CPU_TYPE)),$(CPU_MIPS2)),ARCH="mips2",ARCH="$(ARCH)") \ - DESTDIR=$(PKG_INSTALL_DIR) \ - quiet=verbose + quiet=verbose \ + run_prefix="" define Build/Configure endef define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR) $(PKG_MAKE_ARGS) cfg - $(MAKE) -C $(PKG_BUILD_DIR) quiet=verbose all - $(MAKE) -C $(PKG_BUILD_DIR) quiet=verbose install + $(call Build/Compile/Default,cfg) + $(call Build/Compile/Default,all) endef $(eval $(call BuildPackage,kamailio5)) From c09085b0769a46fa925fd87f559e40d82a6c341c Mon Sep 17 00:00:00 2001 From: Sebastian Kemper Date: Fri, 10 Apr 2020 14:10:24 +0200 Subject: [PATCH 2/2] kamailio-5.x: add app_python3 Adds the Python 3 module. Patch is required because otherwise the module's Makefile tries to get the includes from host python. The patch also adds "--embed" to the python-config call that discovers LDFLAGS as otherwise the python lib is not linked into the module. Patch has been accepted upstream already. Adding PYTHON3 to MAKE_VARS tells the Makefile which python to use. Signed-off-by: Sebastian Kemper --- net/kamailio-5.x/Makefile | 8 ++- .../patches/150-python3-cross-compile.patch | 54 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 net/kamailio-5.x/patches/150-python3-cross-compile.patch diff --git a/net/kamailio-5.x/Makefile b/net/kamailio-5.x/Makefile index 3fd6870..de87750 100644 --- a/net/kamailio-5.x/Makefile +++ b/net/kamailio-5.x/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=kamailio5 PKG_VERSION:=5.3.3 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_URL:=https://www.kamailio.org/pub/kamailio/$(PKG_VERSION)/src PKG_SOURCE:=kamailio-$(PKG_VERSION)$(PKG_VARIANT)_src.tar.gz @@ -33,6 +33,7 @@ MODULES_AVAILABLE:= \ app_jsdt \ app_lua \ app_lua_sr \ + app_python3 \ app_ruby \ app_sqlang \ async \ @@ -231,6 +232,7 @@ PKG_CONFIG_DEPENDS:= \ include $(INCLUDE_DIR)/nls.mk include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/python/python3-version.mk # Build reproducibly TARGET_CFLAGS += -DVERSION_NODATE=1 @@ -420,6 +422,9 @@ MAKE_FLAGS += \ quiet=verbose \ run_prefix="" +MAKE_VARS += \ + PYTHON3=python$(PYTHON3_VERSION) + define Build/Configure endef @@ -451,6 +456,7 @@ $(eval $(call BuildKamailio5Module,alias_db,Database-backend aliases,,)) $(eval $(call BuildKamailio5Module,app_jsdt,Execute JavaScript scripts,,)) $(eval $(call BuildKamailio5Module,app_lua,Execute embedded Lua scripts,,+liblua)) $(eval $(call BuildKamailio5Module,app_lua_sr,Old Lua API,,+kamailio5-mod-app-lua,)) +$(eval $(call BuildKamailio5Module,app_python3,Python3 scripting interpreter,,+python3-light)) $(eval $(call BuildKamailio5Module,app_ruby,Ruby scripting interpreter,,+libruby)) $(eval $(call BuildKamailio5Module,app_sqlang,Execute Squirrel language scripts,,+libstdcpp)) $(eval $(call BuildKamailio5Module,async,Asynchronous SIP handling functions,,+kamailio5-mod-tm +kamailio5-mod-tmx)) diff --git a/net/kamailio-5.x/patches/150-python3-cross-compile.patch b/net/kamailio-5.x/patches/150-python3-cross-compile.patch new file mode 100644 index 0000000..8879545 --- /dev/null +++ b/net/kamailio-5.x/patches/150-python3-cross-compile.patch @@ -0,0 +1,54 @@ +commit 05af36d34aa2668780aa111878206c6797fa98b0 +Author: Sebastian Kemper +Date: Sun Apr 12 09:37:48 2020 +0200 + + app_python3: update Python3 detection mechanism + + This commit + + - removes the python calls whose output is never actually used. + + - changes the include discovery to use python3(.x)-config. This is + preferable because it also works for cross-compiling. Calling + python3(.x) directly will always provide host flags, which for + cross-compiling is not feasible. + + - updates LDFLAGS discovery to also work with >= Python 3.8. To + achieve this python3(.x)-config is first run with the argument + "--embed". If this does not succeed (exit status 1) + python3(.x)-config is run again without "--embed". This is the + method suggested by Python upstream to provide backwards + compatibility. See [1] for more details. + + [1] https://docs.python.org/3/whatsnew/3.8.html + + Signed-off-by: Sebastian Kemper + +diff --git a/src/modules/app_python3/Makefile b/src/modules/app_python3/Makefile +index 1c9ff1c6b6..d31cd6ab10 100644 +--- a/src/modules/app_python3/Makefile ++++ b/src/modules/app_python3/Makefile +@@ -11,18 +11,16 @@ NAME=app_python3.so + # but no testing has been done with that. + PYTHON3?=python3 + +-PYTHON3_VERSION=${shell ${PYTHON3} -c "import distutils.sysconfig;print(distutils.sysconfig.get_config_var('VERSION'))"} +-PYTHON3_LIBDIR=${shell ${PYTHON3} -c "import distutils.sysconfig;print(distutils.sysconfig.get_config_var('LIBDIR'))"} +-PYTHON3_LDFLAGS=${shell ${PYTHON3} -c "import distutils.sysconfig;print(distutils.sysconfig.get_config_var('LINKFORSHARED'))"} +-PYTHON3_INCDIR=${shell ${PYTHON3} -c "import distutils.sysconfig;print(distutils.sysconfig.get_python_inc())"} +- +-LIBS=${shell ${PYTHON3}-config --ldflags} ++LIBS=${shell \ ++ tmp_py3_libs=$$(${PYTHON3}-config --ldflags --embed 2>/dev/null) || \ ++ tmp_py3_libs=$$(${PYTHON3}-config --ldflags); \ ++ echo $$tmp_py3_libs} + + ifeq ($(OS), freebsd) + LIBS+=-pthread + endif + +-DEFS+=-I${PYTHON3_INCDIR} ++DEFS+=${shell ${PYTHON3}-config --includes} + + include ../../Makefile.modules +