From 8b5a1fe9b1723b9c86b75342fe140e96d48b5e9c Mon Sep 17 00:00:00 2001 From: Romain Naour Date: Sat, 23 Sep 2017 23:24:05 +0200 Subject: [PATCH 1/2] [backport] package/flex: disable reallocarray MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This doesn't compile with glibc 2.26 where reallocarray() as been introduced. It's a nasty issue, when reallocarray() is available for the target, flex will build a small tool called stage1flex for the host (using _FOR_BUILD) but with the config.h generated for the target. When the host doesn't have a glibc >= 2.26, reallocarray() is never defined while building stage1flex: misc.c:147:8: warning : implicit declaration of function « reallocarray » [-Wimplicit-function-declaration] mem = reallocarray(NULL, (size_t) size, element_size); ^~~~~~~~~~~~ misc.c:147:6: warning : assignment makes pointer from integer without a cast [-Wint-conversion] mem = reallocarray(NULL, (size_t) size, element_size); ^ Disable reallocarray for now, reallocarray() support may be enabled in a followup patch. Fixes: stage1flex-misc.o: In function `allocate_array': misc.c:(.text+0x38f): undefined reference to `reallocarray' stage1flex-misc.o: In function `reallocate_array': misc.c:(.text+0xc8a): undefined reference to `reallocarray' collect2: error: ld returned 1 exit status Signed-off-by: Romain Naour Signed-off-by: Arnout Vandecappelle (Essensium/Mind) --- package/flex/flex.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package/flex/flex.mk b/package/flex/flex.mk index b78269952e..0196624e9a 100644 --- a/package/flex/flex.mk +++ b/package/flex/flex.mk @@ -10,7 +10,8 @@ FLEX_INSTALL_STAGING = YES FLEX_LICENSE = FLEX FLEX_LICENSE_FILES = COPYING FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4 -FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 +FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \ + ac_cv_func_reallocarray=no HOST_FLEX_DEPENDENCIES = host-m4 define FLEX_DISABLE_PROGRAM From 12edbca319fd2b2f08cc18cbd46123c448964aa8 Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Wed, 13 Sep 2017 17:35:24 +0300 Subject: [PATCH 2/2] [backport] flex: Fix segfault of stage1flex when host has glibc 2.26 or newer When the host uses glibc 2.26 or newer, Flex will try to use the newly-introduced reallocarray() function, but as it would not define _GNU_SOURCE a segmentation fault would occur later on due to the compiler assumming that the function is implicitly defined. This issue manifests itself due to a crash of "stage1flex" during the Flex bootstrap: ./stage1flex -o stage1scan.c ./scan.l make[2]: *** [Makefile:1725: stage1scan.c] Segmentation fault (core dumped) This imports the patch from the upstream Git repository, and adds flags in the .mk file to rebuild the Autotools scripts and support files. Due to the latter, the patch to disable the documentation is changed so it modifies the .am file instead. Signed-off-by: Adrian Perez de Castro [Arnout: - Add Adrian's Sob and upstream ref to new patch; - Keep patch 1 as patch 1; - Keep Vicente as author of path 1; - Add reason for autoreconf in a comment.] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) --- .../0001-flex-disable-documentation.patch | 22 +++++++++--- ...SE_SYSTEM_EXTENSIONS-in-configure.ac.patch | 35 +++++++++++++++++++ package/flex/flex.mk | 6 ++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 package/flex/0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch diff --git a/package/flex/0001-flex-disable-documentation.patch b/package/flex/0001-flex-disable-documentation.patch index 68bec128ee..b017b41385 100644 --- a/package/flex/0001-flex-disable-documentation.patch +++ b/package/flex/0001-flex-disable-documentation.patch @@ -1,4 +1,7 @@ -flex: disable documentation +From a98443c6a72d5821d4e0152311e5c3eb4cdff25c Mon Sep 17 00:00:00 2001 +From: Vicente Olivert Riera +Date: Wed, 13 Sep 2017 17:26:48 +0300 +Subject: [PATCH] flex: disable documentation Since we prevent the flex binary to be built, we also need to prevent the documentation to be built, otherwise it will fail like this: @@ -9,11 +12,17 @@ make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'. Stop. Signed-off-by: Vicente Olivert Riera +[Adrian: patch Makefile.am instead of Makefile.in] +Signed-off-by: Adrian Perez de Castro +--- + Makefile.am | 1 - + 1 file changed, 1 deletion(-) -diff -rup a/Makefile.in b/Makefile.in ---- a/Makefile.in 2017-05-06 15:49:09.000000000 +0100 -+++ b/Makefile.in 2017-05-10 14:35:20.152794902 +0100 -@@ -450,7 +450,6 @@ EXTRA_DIST = \ +diff --git a/Makefile.am b/Makefile.am +index 638c549..9db3420 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -43,7 +43,6 @@ EXTRA_DIST = \ SUBDIRS = \ src \ @@ -21,3 +30,6 @@ diff -rup a/Makefile.in b/Makefile.in examples \ po \ tests \ +-- +2.14.1 + diff --git a/package/flex/0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch b/package/flex/0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file mode 100644 index 0000000000..06747a36e1 --- /dev/null +++ b/package/flex/0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch @@ -0,0 +1,35 @@ +From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001 +From: Explorer09 +Date: Mon, 4 Sep 2017 10:47:33 +0800 +Subject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac. + +This would, e.g. define _GNU_SOURCE in config.h, enabling the +reallocarray() prototype in glibc 2.26+ on Linux systems with that +version of glibc. + +Fixes #241. + +Backported from: 24fd0551333e7eded87b64dd36062da3df2f6380 +Signed-off-by: Adrian Perez de Castro +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 55e774b..c879fe1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -25,8 +25,10 @@ + # autoconf requirements and initialization + + AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help@lists.sourceforge.net],[flex]) ++AC_PREREQ([2.60]) + AC_CONFIG_SRCDIR([src/scan.l]) + AC_CONFIG_AUX_DIR([build-aux]) ++AC_USE_SYSTEM_EXTENSIONS + LT_INIT + AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects]) + AC_CONFIG_HEADER([src/config.h]) +-- +2.14.1 + diff --git a/package/flex/flex.mk b/package/flex/flex.mk index 0196624e9a..aeac4ada87 100644 --- a/package/flex/flex.mk +++ b/package/flex/flex.mk @@ -10,8 +10,14 @@ FLEX_INSTALL_STAGING = YES FLEX_LICENSE = FLEX FLEX_LICENSE_FILES = COPYING FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4 + +# 0001-flex-disable-documentation.patch +# 0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch +FLEX_AUTORECONF = YES +FLEX_GETTEXTIZE = YES FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \ ac_cv_func_reallocarray=no + HOST_FLEX_DEPENDENCIES = host-m4 define FLEX_DISABLE_PROGRAM