aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/disarchive-cross-compilation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/disarchive-cross-compilation.patch')
-rw-r--r--gnu/packages/patches/disarchive-cross-compilation.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/gnu/packages/patches/disarchive-cross-compilation.patch b/gnu/packages/patches/disarchive-cross-compilation.patch
new file mode 100644
index 0000000000..8061262168
--- /dev/null
+++ b/gnu/packages/patches/disarchive-cross-compilation.patch
@@ -0,0 +1,77 @@
+From dc0f8f8bf8608c39da32e3c8ca1484b766fc7452 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Mon, 17 May 2021 16:47:19 -0400
+Subject: [PATCH] build: Fix cross-compilation.
+
+The cross-compilation issues corrected by this change were discovered
+when attempting to cross-compile disarchive for the i586-gnu target on
+GNU Guix.
+
+* configure.ac [O_NOFOLLOW]: Rewrite test using AC_COMPUTE_INT, which
+is supported even when cross-compiling.
+(GUILD_TARGET_OPTION): New computed variable.
+* build-aux/guile.am ($(AM_V_GUILEC)GUILE_AUTO_COMPILE): Use it.
+---
+ build-aux/guile.am | 6 +++---
+ configure.ac | 24 +++++++++++++++---------
+ 2 files changed, 18 insertions(+), 12 deletions(-)
+
+diff --git a/build-aux/guile.am b/build-aux/guile.am
+index bec04ea..7745125 100644
+--- a/build-aux/guile.am
++++ b/build-aux/guile.am
+@@ -54,7 +54,7 @@ AM_V_GUILEC_0 = @echo " GUILEC" $@;
+ SUFFIXES = .scm .go
+
+ .scm.go:
+- $(AM_V_GUILEC)GUILE_AUTO_COMPILE=0 \
+- $(top_builddir)/pre-inst-env \
+- $(GUILD) compile $(GUILE_WARNINGS) \
++ $(AM_V_GUILEC)GUILE_AUTO_COMPILE=0 \
++ $(top_builddir)/pre-inst-env \
++ $(GUILD) compile $(GUILE_WARNINGS) $(GUILD_TARGET_OPTION) \
+ -o "$@" "$<"
+diff --git a/configure.ac b/configure.ac
+index 99c5ac5..0cd0173 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -39,21 +39,27 @@ AS_IF([test "x$GUILD" = "x"],
+ [AC_MSG_ERROR(m4_normalize([
+ 'guild' binary not found; please check your Guile installation.]))])])
+
++dnl This argument is passed to guild; it ensures cross-compiling uses
++dnl the right target.
++if test -n "$host_alias"; then
++ AC_SUBST([GUILD_TARGET_OPTION], [--target=$host_alias])
++fi
++
+ GUILE_MODULE_REQUIRED(gcrypt hash)
+
+ dnl Guile defines a handful of values from <fcntl.h>, but it is
+ dnl missing O_NOFOLLOW.
+ AC_ARG_VAR([O_NOFOLLOW], [value to use for O_NOFOLLOW (cf. <fcntl.h>)])
+ AS_IF([test "x$O_NOFOLLOW" = "x"],
+- [AC_MSG_CHECKING([the value of O_NOFOLLOW])
+- AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+- #include <fcntl.h>
+- #include <stdio.h>
+- ]], [[
+- printf("%d\n", O_NOFOLLOW)
+- ]])],
+- [O_NOFOLLOW=`./conftest$EXEEXT`],
+- [AC_MSG_FAILURE([could find value for O_NOFOLLOW])])])
++ [AC_MSG_CHECKING([the value of O_NOFOLLOW])]
++ [AC_COMPUTE_INT([O_NOFOLLOW],
++ [O_NOFOLLOW],
++ [[
++ #include <fcntl.h>
++ #include <stdio.h>
++ ]],
++ [AC_MSG_FAILURE([could find value for O_NOFOLLOW])])]
++ [AC_MSG_RESULT([$O_NOFOLLOW])])
+
+ AC_ARG_VAR([TAR], [tar utility])
+ AS_IF([test "x$TAR" = "x"], [AC_PATH_PROG([TAR], [tar])])
+--
+2.31.1
+