tools/coreutils: bootstrap to local gnulib source
authorMichael Pratt <mcpratt@pm.me>
Thu, 23 Mar 2023 07:49:01 +0000 (03:49 -0400)
committerChristian Marangi <ansuelsmth@gmail.com>
Thu, 4 May 2023 04:07:30 +0000 (06:07 +0200)
Using the local gnulib source during bootstrap
allows for fine-grained control over the macros
and source files for use with coreutils
but part of gnulib instead of coreutils,
without having to wait for a release
or deal with gnulib as a git submodule.

In this case, the execution of autotools
must be skipped by force.
Autoconf and Automake during bootstrap on coreutils
only works right when using directly checked-out source.

There is a symbol in gnulib, @GNULIB_TIME@
that is not yet defined in coreutils source,
so we use the backup of lib/time.in.h instead
of the one provided by gnulib source.

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

index 3f12828a8f3e4b1be7c6ba6bef05eff324366626..40c3ec1ab092ab6ccf79bf9c04a1796e693ac017 100644 (file)
@@ -127,6 +127,7 @@ $(curdir)/squashfs4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile
 $(curdir)/zstd/compile := $(curdir)/meson/compile
 
 ifneq ($(HOST_OS),Linux)
+  $(curdir)/coreutils/compile += $(curdir)/automake/compile $(curdir)/bison/compile $(curdir)/gnulib/compile
   $(curdir)/squashfs4/compile += $(curdir)/coreutils/compile
   tools-y += coreutils
 endif
index f799e83c5b62e26ba052aec42ed80306aa2c67ab..233ab1585d75af954dd501348d890922628612a4 100644 (file)
@@ -20,15 +20,42 @@ BUILD_PROGRAMS = date readlink touch ln chown ginstall
 
 include $(INCLUDE_DIR)/host-build.mk
 
+export GNULIB_SRCDIR:=$(HOST_GNULIB_SRCDIR)
+
 BUILD_BINS = $(patsubst %,src/%,$(BUILD_PROGRAMS))
 
 HOST_CONFIGURE_ARGS += \
         --enable-install-program=$(subst $(space),$(comma),$(strip $(BUILD_PROGRAMS)))
 
 HOST_MAKE_FLAGS += \
+       $(AM_TOOL_PATHS_FAKE) \
        PROGRAMS="$(BUILD_BINS)" \
        LIBRARIES= MANS= SUBDIRS=.
 
+define Host/Bootstrap
+       ( \
+               cd $(HOST_BUILD_DIR); \
+               $(AM_TOOL_PATHS_FAKE) \
+               ./bootstrap \
+                       --bootstrap-sync \
+                       --force \
+                       --no-git \
+                       --skip-po \
+                       --gnulib-srcdir=$(GNULIB_SRCDIR) \
+       )
+endef
+
+define Host/Prepare
+       $(call Host/Prepare/Default)
+       $(if $(QUILT),,$(call Host/Bootstrap))
+endef
+
+define Host/Configure
+       $(if $(QUILT),$(call Host/Bootstrap))
+       -$(CP) $(HOST_BUILD_DIR)/lib/time.in.h~ $(HOST_BUILD_DIR)/lib/time.in.h # @GNULIB_TIME@ not defined
+       $(call Host/Configure/Default)
+endef
+
 define Host/Install
        $(INSTALL_DIR) $(1)/bin
        $(INSTALL_BIN) $(patsubst %,$(HOST_BUILD_DIR)/%,$(BUILD_BINS)) $(1)/bin/
diff --git a/tools/coreutils/patches/000-bootstrap.patch b/tools/coreutils/patches/000-bootstrap.patch
new file mode 100644 (file)
index 0000000..91be9d3
--- /dev/null
@@ -0,0 +1,45 @@
+--- a/bootstrap
++++ b/bootstrap
+@@ -278,7 +278,7 @@ check_exists() {
+       ($2 --version </dev/null)
+     fi
+   else
+-    ($1 --version </dev/null) >/dev/null 2>&1
++    ($@ --version </dev/null) >/dev/null 2>&1
+   fi
+   test $? -lt 126
+@@ -563,7 +563,7 @@ p
+ q'
+ get_version() {
+-  app=$1
++  app="$@"
+   $app --version >/dev/null 2>&1 || { $app --version; return 1; }
+@@ -620,13 +620,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
+@@ -923,7 +923,7 @@ version_controlled_file() {
+ # 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