flex: rework patches to avoid host/target difference
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 8 Oct 2017 21:44:23 +0000 (23:44 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 11 Oct 2017 21:51:47 +0000 (23:51 +0200)
Currently, the target and host flex packages do not behave the same in
terms of patching: the target variant has a patch hook that disables
building the programs (because they are not needed, and do not build
on no-MMU platforms). However, this hook is obviously not executed for
host-flex, because we really want the host flex binary to be built.

In preparation for the introduction of out-of-tree package build, it
is important that we don't do different things in the patch hooks for
the target and host variant of a given package, because the source
tree will be shared between the target and host builds.

To solve this, we introduce a --disable-program configure option,
through a patch to the flex configure.ac and Makefile.am. This patch
makes the current 0001-flex-disable-documentation.patch no longer
needed.

Furthermore, building the documentation is a PITA: flex.1 depends on
configure.ac and a few other files generated during the build. Touching
flex.1 does not work, because automake will forcibly remove the files
when its prerequisites are too old, so pre-requisites of flex.1 will
always be more recent than flex.1. So, we add a patch that adds a
--disable-doc configure option.

Fixes:
    http://autobuild.buildroot.org/results/f70/f70b39632535bb9692d0a032166b2f4104532967/
    http://autobuild.buildroot.org/results/525/52567afdfe7992b3518de0e01227ba14aa300f21/
    [...]

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
[yann.morin.1998@free.fr:
  - rebase on-top of master,
  - add patch to not build the documentation, because simply touching
    flex.1 is no longer enough.
  - keep install in target/, for shared builds
]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Adrian Perez de Castro <aperez@igalia.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch [new file with mode: 0644]
package/flex/0001-flex-disable-documentation.patch [deleted file]
package/flex/0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch [deleted file]
package/flex/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch [new file with mode: 0644]
package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch [new file with mode: 0644]
package/flex/Config.in
package/flex/flex.mk

diff --git a/package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch b/package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch
new file mode 100644 (file)
index 0000000..06747a3
--- /dev/null
@@ -0,0 +1,35 @@
+From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001
+From: Explorer09 <explorer09@gmail.com>
+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 <aperez@igalia.com>
+---
+ 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/0001-flex-disable-documentation.patch b/package/flex/0001-flex-disable-documentation.patch
deleted file mode 100644 (file)
index b017b41..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From a98443c6a72d5821d4e0152311e5c3eb4cdff25c Mon Sep 17 00:00:00 2001
-From: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
-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:
-
-Making all in doc
-make[2]: Entering directory '/br/output/build/flex-2.6.4/doc'
-make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'.
-Stop.
-
-Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
-[Adrian: patch Makefile.am instead of Makefile.in]
-Signed-off-by: Adrian Perez de Castro <aperez@igalia.com>
----
- Makefile.am | 1 -
- 1 file changed, 1 deletion(-)
-
-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 \
--      doc \
-       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
deleted file mode 100644 (file)
index 06747a3..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001
-From: Explorer09 <explorer09@gmail.com>
-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 <aperez@igalia.com>
----
- 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/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch b/package/flex/0002-build-make-it-possible-to-disable-the-build-of-the-f.patch
new file mode 100644 (file)
index 0000000..19f5a77
--- /dev/null
@@ -0,0 +1,76 @@
+From da21733178b34eea303964db5a05e8a3ee4095b4 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Sat, 26 Aug 2017 15:17:06 +0200
+Subject: [PATCH] build: make it possible to disable the build of the flex
+ program
+
+The flex program uses fork(), which isn't available on noMMU
+systems. However, the libfl library does not use fork(), and be used
+by other programs/libraries.
+
+Therefore, it makes sense to provide an option to disable the build of
+the flex program.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+
+---
+Submitted-upstream: https://github.com/westes/flex/pull/256
+Refused. We'll have to adapt when they do a new release...
+---
+ Makefile.am     | 2 ++
+ configure.ac    | 6 ++++++
+ doc/Makefile.am | 4 ++++
+ src/Makefile.am | 3 +++
+ 4 files changed, 15 insertions(+)
+
+diff --git a/Makefile.am b/Makefile.am
+index e790e9d..8b57bc9 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -62,8 +62,10 @@ ChangeLog: $(srcdir)/tools/git2cl
+ indent:
+       cd src && $(MAKE) $(AM_MAKEFLAGS) indent
++if ENABLE_PROGRAM
+ install-exec-hook:
+       cd $(DESTDIR)$(bindir) && \
+               $(LN_S) -f flex$(EXEEXT) flex++$(EXEEXT)
++endif
+ .PHONY: ChangeLog indent
+diff --git a/configure.ac b/configure.ac
+index 8882016..f49872b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -75,6 +75,12 @@ AC_ARG_ENABLE([libfl],
+   [], [enable_libfl=yes])
+ AM_CONDITIONAL([ENABLE_LIBFL], [test "x$enable_libfl" = xyes])
++AC_ARG_ENABLE([program],
++  [AS_HELP_STRING([--disable-program],
++                  [do not build the flex program, only the libfl library])],
++  [], [enable_program=yes])
++AM_CONDITIONAL([ENABLE_PROGRAM], [test "x$enable_program" = xyes])
++
+ # --disable-bootstrap is intended only to workaround problems with bootstrap
+ # (e.g. when cross-compiling flex or when bootstrapping has bugs).
+ # Ideally we should be able to bootstrap even when cross-compiling.
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 0d13a5a..c73bc17 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -4,7 +4,10 @@ LIBS = @LIBS@
+ m4 = @M4@
++if ENABLE_PROGRAM
+ bin_PROGRAMS = flex
++endif
++
+ if ENABLE_BOOTSTRAP
+ noinst_PROGRAMS = stage1flex
+ endif
+-- 
+2.9.4
+
diff --git a/package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch b/package/flex/0003-build-make-it-possible-to-disable-the-build-of-the-d.patch
new file mode 100644 (file)
index 0000000..ffe30d3
--- /dev/null
@@ -0,0 +1,58 @@
+From b89b8475a5b2f9444c32f7d254b35968da3c8a23 Mon Sep 17 00:00:00 2001
+From: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Date: Fri, 29 Sep 2017 18:03:51 +0200
+Subject: [PATCH] build: make it possible to disable the build of the
+ documentation
+
+When targetting embedded evices, the documentation is not needed.
+
+Building the documentation default to whether the program is built.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Makefile.am  | 8 +++++++-
+ configure.ac | 6 ++++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index fce30b2..ee75b64 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -41,9 +41,15 @@ EXTRA_DIST = \
+       .indent.pro \
+       autogen.sh
++MAYBE_SUBDIRS =
++
++if ENABLE_DOC
++MAYBE_SUBDIRS += doc
++endif
++
+ SUBDIRS = \
+       src \
+-      doc \
++      $(MAYBE_SUBDIRS) \
+       examples \
+       po \
+       tests \
+diff --git a/configure.ac b/configure.ac
+index c54e98f..b3ae450 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -80,6 +80,12 @@ AC_ARG_ENABLE([program],
+   [], [enable_program=yes])
+ AM_CONDITIONAL([ENABLE_PROGRAM], [test "x$enable_program" = xyes])
++AC_ARG_ENABLE([doc],
++  [AS_HELP_STRING([--disable-doc],
++                  [do not build the documentation])],
++  [], [enable_doc=${enable_program}])
++AM_CONDITIONAL([ENABLE_DOC], [test "x$enable_doc" = xyes -a "x$enable_program" = xyes])
++
+ # --disable-bootstrap is intended only to workaround problems with bootstrap
+ # (e.g. when cross-compiling flex or when bootstrapping has bugs).
+ # Ideally we should be able to bootstrap even when cross-compiling.
+-- 
+2.11.0
+
index 33d123d73269484c9d7a680c83a86f77d65d4287..0690777afdfbe104753f4b3690790d83667d3134 100644 (file)
@@ -4,4 +4,6 @@ config BR2_PACKAGE_FLEX
          A fast lexical analyser generator. A tool for generating
          programs that perform pattern-matching on text.
 
+         Only the library is available.
+
          https://github.com/westes/flex/
index aeac4ada87b02cd1771c2de447e79300fe39b0d8..6ce768c318c3a465fd5421391b4e13372b70679c 100644 (file)
@@ -10,26 +10,22 @@ FLEX_INSTALL_STAGING = YES
 FLEX_LICENSE = FLEX
 FLEX_LICENSE_FILES = COPYING
 FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4
+HOST_FLEX_DEPENDENCIES = host-m4
 
-# 0001-flex-disable-documentation.patch
-# 0002-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch
+# 0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch
+# 0002-build-make-it-possible-to-disable-the-build-of-the-f.patch
+# 0003-build-make-it-possible-to-disable-the-build-of-the-d.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
-       $(SED) 's/^bin_PROGRAMS.*//' $(@D)/src/Makefile.in
-endef
-FLEX_POST_PATCH_HOOKS += FLEX_DISABLE_PROGRAM
-
-# flex++ symlink is broken when flex binary is not installed
-define FLEX_REMOVE_BROKEN_SYMLINK
-       rm -f $(TARGET_DIR)/usr/bin/flex++
-endef
-FLEX_POST_INSTALL_TARGET_HOOKS += FLEX_REMOVE_BROKEN_SYMLINK
+# Don't enable programs, they are not needed on the target, and
+# require MMU support.
+# Don't enable the doc, it's not needed on the target and requires
+# special tools (help2man) to build.
+FLEX_CONF_OPTS += --disable-program --disable-doc
+HOST_FLEX_CONF_OPTS = --disable-doc
 
 $(eval $(autotools-package))
 $(eval $(host-autotools-package))