tools: add gnulib source
authorMichael Pratt <mcpratt@pm.me>
Wed, 22 Mar 2023 22:29:24 +0000 (18:29 -0400)
committerChristian Marangi <ansuelsmth@gmail.com>
Thu, 4 May 2023 04:07:27 +0000 (06:07 +0200)
By having a local copy of gnulib, we can:
import the latest macro fixes into any package,
get rid of some statically stored macros that were otherwise missing,
bootstrap GNU tools with the latest relevant source
without having to wait for a release or rely on git submodules,
and possibly more...

The patch assists in bootstrapping by ignoring
the building of po files using gettext,
and also to allow a user-defined path to a program
to include parameters.

Signed-off-by: Michael Pratt <mcpratt@pm.me>
rules.mk
tools/Makefile
tools/gnulib/Makefile [new file with mode: 0644]
tools/gnulib/patches/000-bootstrap.patch [new file with mode: 0644]

index cc7904ac728f5fd400004848cf6cbc56da3c6448..dcac49667bbfd31bce0ed0946ea2cd81abdef771 100644 (file)
--- a/rules.mk
+++ b/rules.mk
@@ -358,6 +358,7 @@ ifeq ($(CONFIG_BUILD_LOG),y)
 endif
 
 export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison
+export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib
 export M4:=$(STAGING_DIR_HOST)/bin/m4
 
 define shvar
index 7e8fbad107e6b47f0a0fe28144771da4c029d51a..3bf94827cf6bbad7f807af9c24e6f7d0dc35bcd1 100644 (file)
@@ -45,6 +45,7 @@ tools-y += findutils
 tools-y += firmware-utils
 tools-y += flex
 tools-y += gengetopt
+tools-y += gnulib
 tools-y += libressl
 tools-y += libtool
 tools-y += lzma
diff --git a/tools/gnulib/Makefile b/tools/gnulib/Makefile
new file mode 100644 (file)
index 0000000..c5b7e78
--- /dev/null
@@ -0,0 +1,25 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=gnulib
+PKG_CPE_ID:=cpe:/a:gnu:$(PKG_NAME)
+PKG_VERSION:=f9a4ee73c3e7b544f640d0d04b55983d3a7b894e# # master
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://git.savannah.gnu.org/cgit/$(PKG_NAME).git/snapshot
+PKG_HASH:=514716d58987a9c0de0d69fb22d42bcd19edf80eed099882a004ff162060f1a8
+
+include $(INCLUDE_DIR)/host-build.mk
+
+define Host/Configure
+endef
+
+define Host/Install
+       $(INSTALL_DIR) $(1)/share/gnulib
+       $(CP) $(HOST_BUILD_DIR)/* $(1)/share/gnulib/
+endef
+
+define Host/Clean
+       rm -rf $(STAGING_DIR_HOST)/share/gnulib
+endef
+
+$(eval $(call HostBuild))
diff --git a/tools/gnulib/patches/000-bootstrap.patch b/tools/gnulib/patches/000-bootstrap.patch
new file mode 100644 (file)
index 0000000..40ed411
--- /dev/null
@@ -0,0 +1,54 @@
+--- a/build-aux/bootstrap
++++ b/build-aux/bootstrap
+@@ -237,14 +237,14 @@ test -r "$conffile" && . "$conffile"
+ check_exists() {
+   if test "$1" = "--verbose"; then
+-    ($2 --version </dev/null) >/dev/null 2>&1
++    ($2 $3 $4 --version </dev/null) >/dev/null 2>&1
+     if test $? -ge 126; then
+       # If not found, run with diagnostics as one may be
+       # presented with env variables to set to find the right version
+-      ($2 --version </dev/null)
++      ($2 $3 $4 --version </dev/null)
+     fi
+   else
+-    ($1 --version </dev/null) >/dev/null 2>&1
++    ($@ --version </dev/null) >/dev/null 2>&1
+   fi
+   test $? -lt 126
+@@ -309,7 +309,7 @@ p
+ q'
+ get_version() {
+-  app=$1
++  app="$@"
+   $app --version >/dev/null 2>&1 || { $app --version; return 1; }
+@@ -366,13 +366,13 @@ check_versions() {
+     if [ "$req_ver" = "-" ]; then
+       # Merely require app to exist; not all prereq apps are well-behaved
+       # so we have to rely on $? rather than get_version.
+-      if ! check_exists --verbose $app; then
++      if ! check_exists --verbose "$app"; then
+         warn_ "Error: '$app' not found"
+         ret=1
+       fi
+     else
+       # Require app to produce a new enough version string.
+-      inst_ver=$(get_version $app)
++      inst_ver=$(get_version "$app")
+       if [ ! "$inst_ver" ]; then
+         warn_ "Error: '$app' not found"
+         ret=1
+@@ -1135,7 +1135,7 @@ autogen()
+   # two just-pre-run programs.
+   # Import from gettext.
+-  with_gettext=yes
++  with_gettext=no
+   grep '^[     ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
+       with_gettext=no