Upstream-PR: https://github.com/xapian/xapian/pull/322

From c513b0d31d2df31eb57ccbe08bbe46821863557d Mon Sep 17 00:00:00 2001
From: orbea <orbea@riseup.net>
Date: Wed, 20 Jul 2022 13:37:20 -0700
Subject: [PATCH] xapian-bindings: Fix the build with slibtool

With slibtool the --config argument works differently than in GNU
libtool which results in 'auto/Xapian/Xapian$(PERL_SO)' failing to be
created. This can be worked around by using libtool --mode=install where
slibtool can copy the module to the intended location.

However GNU libtool still requires using --config otherwise it fails
during --mode=install with the following error.

  /bin/bash ../libtool --mode=install cp Xapian.la /home/runner/work/xapian/xapian/perl/auto/Xapian/Xapian.la
  libtool:   error: error: cannot install 'Xapian.la' to a directory not ending in /usr/local/lib/x86_64-linux-gnu/perl/5.26.1/auto/Xapian

gentoo issue: https://bugs.gentoo.org/793428
---
 java/run-java-test  | 21 +++++++++++++++++----
 perl/Makefile.am    |  9 +++++++--
 python3/Makefile.am |  9 +++++++--
 tcl8/run-tcl-test   | 20 +++++++++++++-------
 4 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/java/run-java-test b/java/run-java-test
index d0e97af300e..a838de98492 100755
--- a/java/run-java-test
+++ b/java/run-java-test
@@ -1,11 +1,24 @@
 #!/bin/sh
 # To run `jdb` instead of `java` set JAVA=jdb
 # To run under gdb, set JAVA='gdb --args java'
+LIBTOOL="${LIBTOOL-../libtool}"
 arg=`echo "$1"|sed 's!.*/!!;s!\.class$!!'`
+
+# GNU libtool and slibtool have different and incompatible usage for --config.
+if ${LIBTOOL} --config > libtoolconfig.$$ 2>/dev/null; then
+	. ./libtoolconfig.$$
+else
+	objdir="built/libs"
+	rm -rf "$objdir"
+	mkdir -p "$objdir"
+	${LIBTOOL} --mode=install cp libxapian_jni.la "$objdir"
+fi
+rm -f libtoolconfig.$$
+
 # Use libtool's -dlopen option to ensure that libxapian_jni.so (or whatever)
 # is in the shared library path.
-${LIBTOOL-../libtool} --config > libtoolconfig.$$
-. ./libtoolconfig.$$
-rm -f libtoolconfig.$$
-${LIBTOOL-../libtool} -dlopen libxapian_jni.la --mode=execute \
+${LIBTOOL} -dlopen libxapian_jni.la --mode=execute \
   $OSX_SIP_HACK_ENV ${JAVA-java} -Djava.library.path="$objdir" -classpath built/xapian.jar${PATHSEP-:}. "$arg"
+rc=$?
+rm -rf built/libs
+exit $rc
diff --git a/perl/Makefile.am b/perl/Makefile.am
index 4f2e5e4283d..f71579736e5 100644
--- a/perl/Makefile.am
+++ b/perl/Makefile.am
@@ -55,9 +55,14 @@ BUILT_SOURCES = Xapian.pm xapian_wrap.cc \
 
 auto/Xapian/Xapian$(PERL_SO): Xapian.la
 	@$(MKDIR_P) auto/Xapian
-	$(LIBTOOL) --config > libtoolconfig.tmp
+## GNU libtool and slibtool have different and incompatible usage for --config.
+	if $(LIBTOOL) --config > libtoolconfig.tmp 2>/dev/null; then \
 ## ksh requires a path on the sourced file.
-	. ./libtoolconfig.tmp; cp "$$objdir/Xapian$(PERL_SO)" auto/Xapian
+		. ./libtoolconfig.tmp; \
+		cp "$$objdir/Xapian$(PERL_SO)" auto/Xapian; \
+	else \
+		$(LIBTOOL) --mode=install cp $< $@; \
+	fi;
 	rm -f libtoolconfig.tmp
 
 EXTRA_DIST = perl.i except.i extra.i $(TESTS) \
diff --git a/python3/Makefile.am b/python3/Makefile.am
index 3c692a9e2d4..9bf01833636 100644
--- a/python3/Makefile.am
+++ b/python3/Makefile.am
@@ -88,9 +88,14 @@ xapian/__pycache__/__init__.@PYTHON3_CACHE_OPT1_EXT@: xapian/__init__.py xapian/
 
 xapian/_xapian$(PYTHON3_EXT_SUFFIX): _xapian.la
 	$(MKDIR_P) xapian
-	$(LIBTOOL) --config > libtoolconfig.tmp
+## GNU libtool and slibtool have different and incompatible usage for --config.
+	if $(LIBTOOL) --config > libtoolconfig.tmp 2>/dev/null; then \
 ## ksh requires a path on the sourced file.
-	. ./libtoolconfig.tmp; cp $$objdir/_xapian$(PYTHON3_EXT_SUFFIX) xapian
+		. ./libtoolconfig.tmp; \
+		cp $$objdir/_xapian$(PYTHON3_EXT_SUFFIX) xapian; \
+	else \
+		$(LIBTOOL) --mode=install cp $< $@; \
+	fi;
 	rm -f libtoolconfig.tmp
 
 CLEANFILES = \
diff --git a/tcl8/run-tcl-test b/tcl8/run-tcl-test
index 206b5e0e056..71511032024 100755
--- a/tcl8/run-tcl-test
+++ b/tcl8/run-tcl-test
@@ -1,14 +1,20 @@
 #!/bin/sh
-${LIBTOOL-../libtool} --config > libtoolconfig.$$
-. ./libtoolconfig.$$
-rm -f libtoolconfig.$$
+tclshlibext=`echo 'puts [info sharedlibextension]'|${TCLSH-tclsh}`
+rm -f xapian$tclshlibext
+
+LIBTOOL="${LIBTOOL-../libtool}"
 module=yes
-eval shlibext=$shrext_cmds
 
-tclshlibext=`echo 'puts [info sharedlibextension]'|${TCLSH-tclsh}`
+# GNU libtool and slibtool have different and incompatible usage for --config.
+if ${LIBTOOL} --config > libtoolconfig.$$ 2>/dev/null; then
+	. ./libtoolconfig.$$
+	eval shlibext=$shrext_cmds
+	ln -s $objdir/xapian$shlibext xapian$tclshlibext
+else
+	${LIBTOOL} --mode=install cp xapian.la ./xapian$tclshlibext
+fi
+rm -f libtoolconfig.$$
 
-rm -f xapian$tclshlibext
-ln -s $objdir/xapian$shlibext xapian$tclshlibext
 $OSX_SIP_HACK_ENV ${TCLSH-tclsh} ${srcdir-.}/runtest.tcl ${srcdir-.}/smoketest.tcl
 rc=$?
 rm -f xapian$tclshlibext
