telephony/net/asterisk/patches/100-build-reproducibly.patch

29 lines
935 B
Diff
Raw Normal View History

asterisk-16.x: add Asterisk 16 Initial commit of Asterisk 16. Cleans up Makefile; the version number now only occurs once in it. Upstream removed the following modules: - format_jpeg - res_pjsip_registrar_expire (functionality was moved into res_pjsip_registrar.) pjsip has a new dependency, res-http-websocket. Notes: - replaced res_ninit patch Replaced patch with the one from Alpine. It's a bit more flexible and allows usage of res_ninit where available (when building against glibc). - fixed musl compiles astmm.h now always gets included by asterisk.h, redefining allocators. This causes breakage on musl: ccache_cc -o chan_pjsip.o -c chan_pjsip.c -MD -MT chan_pjsip.o -MF .chan_pjsip.o.d -MP -pthread -I/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1:asterisk-16.2.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/usr/include -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/include/fortify -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include/libxml2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fPIC -DAST_MODULE=\"chan_pjsip\" -DAST_MODULE_SELF_SYM=__internal_chan_pjsip_self -DPJ_AUTOCONF=1 -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0 -fPIC -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include In file included from /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk.h:23:0, from chan_pjsip.c:35: /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk/astmm.h:158:35: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token Do_not_use_calloc__use_ast_calloc->fail(a, b) ^ /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk/astmm.h:162:77: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token Do_not_use_free__use_ast_free_or_ast_std_free_for_remotely_allocated_memory->fail(a) ^ make[4]: *** [/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/Makefile.rules:153: chan_pjsip.o] Error 1 The problem is that with _GNU_SOURCE defined musl also declares calloc in <sched.h> - and when asterisk's source includes <sched.h> _after_ "asterisk/astmm.h" the definition clashes with the macro. Timo Teräs from Alpine Linux fixed this by including <pthread.h> in "asterisk/compat.h". He chose to include <pthread.h> instead of <sched.h> because the original header inclusion chain seems to be "asterisk/astobj2.h" -> "asterisk/lock.h" -> <pthread.h> -> <sched.h>. It seems Asterisk practically never includes <sched.h> directly. - added loader workaround for musl When the modules are loaded, asterisk segfaults on musl. Asterisk Dynamic Loader Starting: [Mar 2 22:30:05] NOTICE[20712]: loader.c:2230 load_modules: 91 modules will be loaded. Segmentation fault [48817.544248] do_page_fault(): sending SIGSEGV to asterisk for invalid read access from 00000000 [48817.544258] epc = 77f6b764 in libc.so[77ef8000+94000] [48817.544285] ra = 0048d579 in asterisk[400000+160000] The real problem is that the loader expects dlopen to always run the constructor, which doesn't happen with musl, because its dlopen is permanent. This commit adds a new configure switch '--enable-permanent-dlopen'. When enabled, the loader will manually call 'ast_module_register(...)' and 'ast_module_unregister(...)' when needed. - allow eventfd detection Asterisk 16 wants to use eventfd, but it doesn't allow the detection during cross-compiling. This results in runtime warnings, for instance when shutting down: [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor Relax the configure script so that eventfd can also be detected when cross-compiling. Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
2019-04-27 22:04:34 +08:00
--- a/build_tools/make_build_h
+++ b/build_tools/make_build_h
@@ -5,6 +5,14 @@ MACHINE=`uname -m | sed 's/\\\\/\\\\\\\
OS=`uname -s`
USER=`id | awk -F")" '{print $1}'| awk -F"(" '{print $2}' | sed 's/\\\\/\\\\\\\\/g'`
DATE=`date -u "+%Y-%m-%d %H:%M:%S"`
+if [ -n "${SOURCE_DATE_EPOCH}" ]; then
+ # building reproducibly, faking some data
+ HOSTNAME='openwrt.org'
+ KERNEL='unknown'
+ MACHINE='unknown'
+ USER='nobody'
+ DATE=`date -u "+%Y-%m-%d %H:%M:%S" -d @${SOURCE_DATE_EPOCH}`
+fi
cat << END
/*
* build.h
--- a/Makefile
+++ b/Makefile
@@ -489,7 +489,7 @@ doc/core-en_US.xml: makeopts .lastclean
asterisk-16.x: add Asterisk 16 Initial commit of Asterisk 16. Cleans up Makefile; the version number now only occurs once in it. Upstream removed the following modules: - format_jpeg - res_pjsip_registrar_expire (functionality was moved into res_pjsip_registrar.) pjsip has a new dependency, res-http-websocket. Notes: - replaced res_ninit patch Replaced patch with the one from Alpine. It's a bit more flexible and allows usage of res_ninit where available (when building against glibc). - fixed musl compiles astmm.h now always gets included by asterisk.h, redefining allocators. This causes breakage on musl: ccache_cc -o chan_pjsip.o -c chan_pjsip.c -MD -MT chan_pjsip.o -MF .chan_pjsip.o.d -MP -pthread -I/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1:asterisk-16.2.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/include -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/usr/include -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/include/fortify -I/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.4.0_musl/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/include -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include/libxml2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fPIC -DAST_MODULE=\"chan_pjsip\" -DAST_MODULE_SELF_SYM=__internal_chan_pjsip_self -DPJ_AUTOCONF=1 -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0 -fPIC -I/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/include In file included from /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk.h:23:0, from chan_pjsip.c:35: /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk/astmm.h:158:35: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token Do_not_use_calloc__use_ast_calloc->fail(a, b) ^ /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/include/asterisk/astmm.h:162:77: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token Do_not_use_free__use_ast_free_or_ast_std_free_for_remotely_allocated_memory->fail(a) ^ make[4]: *** [/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.2.1/Makefile.rules:153: chan_pjsip.o] Error 1 The problem is that with _GNU_SOURCE defined musl also declares calloc in <sched.h> - and when asterisk's source includes <sched.h> _after_ "asterisk/astmm.h" the definition clashes with the macro. Timo Teräs from Alpine Linux fixed this by including <pthread.h> in "asterisk/compat.h". He chose to include <pthread.h> instead of <sched.h> because the original header inclusion chain seems to be "asterisk/astobj2.h" -> "asterisk/lock.h" -> <pthread.h> -> <sched.h>. It seems Asterisk practically never includes <sched.h> directly. - added loader workaround for musl When the modules are loaded, asterisk segfaults on musl. Asterisk Dynamic Loader Starting: [Mar 2 22:30:05] NOTICE[20712]: loader.c:2230 load_modules: 91 modules will be loaded. Segmentation fault [48817.544248] do_page_fault(): sending SIGSEGV to asterisk for invalid read access from 00000000 [48817.544258] epc = 77f6b764 in libc.so[77ef8000+94000] [48817.544285] ra = 0048d579 in asterisk[400000+160000] The real problem is that the loader expects dlopen to always run the constructor, which doesn't happen with musl, because its dlopen is permanent. This commit adds a new configure switch '--enable-permanent-dlopen'. When enabled, the loader will manually call 'ast_module_register(...)' and 'ast_module_unregister(...)' when needed. - allow eventfd detection Asterisk 16 wants to use eventfd, but it doesn't allow the detection during cross-compiling. This results in runtime warnings, for instance when shutting down: [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor [Mar 2 22:37:41] WARNING[21593]: alertpipe.c:112 ast_alertpipe_read: read() failed: Bad file descriptor Relax the configure script so that eventfd can also be detected when cross-compiling. Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
2019-04-27 22:04:34 +08:00
@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
@for x in $(MOD_SUBDIRS); do \
printf "$$x " ; \
- for i in `find $$x -name '*.c'`; do \
+ for i in `find $$x -name '*.c' | LC_ALL=C sort`; do \
MODULEINFO=$$($(AWK) -f build_tools/get_moduleinfo $$i) ; \
if [ -n "$$MODULEINFO" ] ; \
then \