app-misc/mc: workaround linkage against internal gettext, bug #693850
authorSergei Trofimovich <slyfox@gentoo.org>
Wed, 11 Sep 2019 21:41:15 +0000 (22:41 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Wed, 11 Sep 2019 21:44:13 +0000 (22:44 +0100)
The underlying issue is lack of support of linking in static
gettext into libmc.a due to a deficiency in m4/gettext.m4 (see
upstream bug for more details).

The workaround is to manually link bundled gettext into every
final binary. It fixes default case for musl but does not fix
the underlying issues. Let's leave fixing those to upstream.

Reported-by: Michael 'veremitz' Everitt
Bug: https://bugs.gentoo.org/693850
Bug: https://midnight-commander.org/ticket/3629
Package-Manager: Portage-2.3.75, Repoman-2.3.17
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
app-misc/mc/files/mc-4.8.23-gettext-test.patch [new file with mode: 0644]
app-misc/mc/files/mc-4.8.23-gettext.patch [new file with mode: 0644]
app-misc/mc/mc-4.8.23-r1.ebuild

diff --git a/app-misc/mc/files/mc-4.8.23-gettext-test.patch b/app-misc/mc/files/mc-4.8.23-gettext-test.patch
new file mode 100644 (file)
index 0000000..7e19cd7
--- /dev/null
@@ -0,0 +1,54 @@
+https://bugs.gentoo.org/693850
+https://midnight-commander.org/raw-attachment/ticket/3629/mc-3629-Linking-fix-for-gettext.patch
+
+Test change counterpart.
+
+--- a/tests/lib/Makefile.am
++++ b/tests/lib/Makefile.am
+@@ -9,3 +9,3 @@ AM_LDFLAGS = @TESTS_LDFLAGS@
+ LIBS = @CHECK_LIBS@ \
+-      $(top_builddir)/lib/libmc.la
++      $(top_builddir)/lib/libmc.la $(LIBINTL)
+--- a/tests/lib/mcconfig/Makefile.am
++++ b/tests/lib/mcconfig/Makefile.am
+@@ -11,3 +11,3 @@ AM_LDFLAGS = @TESTS_LDFLAGS@
+ LIBS = @CHECK_LIBS@ \
+-      $(top_builddir)/lib/libmc.la
++      $(top_builddir)/lib/libmc.la $(LIBINTL)
+--- a/tests/lib/search/Makefile.am
++++ b/tests/lib/search/Makefile.am
+@@ -10,3 +10,3 @@ AM_CPPFLAGS = \
+ LIBS = @CHECK_LIBS@ \
+-      $(top_builddir)/lib/libmc.la @PCRE_LIBS@
++      $(top_builddir)/lib/libmc.la @PCRE_LIBS@ $(LIBINTL)
+--- a/tests/lib/vfs/Makefile.am
++++ b/tests/lib/vfs/Makefile.am
+@@ -14,3 +14,3 @@ EXTRA_DIST = mc.charsets
+ LIBS = @CHECK_LIBS@ \
+-      $(top_builddir)/lib/libmc.la
++      $(top_builddir)/lib/libmc.la $(LIBINTL)
+--- a/tests/lib/Makefile.in
++++ b/tests/lib/Makefile.in
+@@ -636 +636 @@ LIBPTH_PREFIX = @LIBPTH_PREFIX@
+-LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
++LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(LIBINTL) $(am__append_1)
+--- a/tests/lib/mcconfig/Makefile.in
++++ b/tests/lib/mcconfig/Makefile.in
+@@ -542 +542 @@ LIBPTH_PREFIX = @LIBPTH_PREFIX@
+-LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
++LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(LIBINTL) $(am__append_1)
+--- a/tests/lib/search/Makefile.in
++++ b/tests/lib/search/Makefile.in
+@@ -584,2 +584 @@ LIBPTH_PREFIX = @LIBPTH_PREFIX@
+-LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la @PCRE_LIBS@ \
+-      $(am__append_1)
++LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la @PCRE_LIBS@ $(LIBINTL) $(am__append_1)
+--- a/tests/lib/vfs/Makefile.in
++++ b/tests/lib/vfs/Makefile.in
+@@ -641 +641 @@ LIBPTH_PREFIX = @LIBPTH_PREFIX@
+-LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
++LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(LIBINTL) $(am__append_1)
diff --git a/app-misc/mc/files/mc-4.8.23-gettext.patch b/app-misc/mc/files/mc-4.8.23-gettext.patch
new file mode 100644 (file)
index 0000000..3ad67db
--- /dev/null
@@ -0,0 +1,56 @@
+https://bugs.gentoo.org/693850
+https://midnight-commander.org/raw-attachment/ticket/3629/mc-3629-Linking-fix-for-gettext.patch
+
+From 2a97524b42eeececd2ecd928a1154da1f5b7378a Mon Sep 17 00:00:00 2001
+From: Andreas Mohr <and@gmx.li>
+Date: Fri, 1 Apr 2016 06:44:22 +0000
+Subject: [PATCH] Linking fix for non-default gettext package
+
+mc lost the linking game if gettext package pulled from outside of system paths.
+(Pulling can be done by suitable C-/CPP/LDFLAGS settings)
+
+Furthermore gettext package depends on libintl (if system lib
+don't provide needed functions) then gettext prepare INITLIBS/LIBINTL variable
+for working libintl pull in from gettext libdir.
+
+https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
+
+Let respect LIBINTL variable at linking (it is empty if not needed).
+
+Failure example for Solaris 10 with non-system-default gettext package:
+
+Undefined                       first referenced
+ symbol                             in file
+ libintl_bind_textdomain_codeset     ./.libs/libinternal.a(args.o)
+ libintl_gettext                     main.o
+ libintl_textdomain                  main.o
+ libintl_bindtextdomain              main.o
+ libintl_ngettext                    ./.libs/libinternal.a(midnight.o)
+
+Signed-off-by: Andreas Mohr <and@gmx.li>
+---
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -53,7 +53,8 @@ libinternal_la_LIBADD = \
+ mc_LDADD = \
+       libinternal.la \
+-      $(top_builddir)/lib/libmc.la
++      $(top_builddir)/lib/libmc.la \
++      $(LIBINTL)
+ if ENABLE_VFS_SMB
+ # this is a hack for linking with own samba library in simple way
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -556,7 +557,7 @@ libinternal_la_LIBADD = \
+       viewer/libmcviewer.la \
+       $(DIFFLIB) $(EDITLIB) $(SUBSHELLLIB)
+-mc_LDADD = libinternal.la $(top_builddir)/lib/libmc.la $(am__append_6)
++mc_LDADD = libinternal.la $(top_builddir)/lib/libmc.la $(LIBINTL) $(am__append_6)
+ SRC_mc_conssaver = \
+       cons.handler.c consaver/cons.saver.h
index 635d0001dcfc31dd959b363979d1887081e75702..9bbeef2c62c4ee43549b66599de489684999073a 100644 (file)
@@ -43,6 +43,8 @@ S=${WORKDIR}/${MY_P}
 PATCHES=(
        "${FILESDIR}"/${P}-3933-iso9660-1.patch
        "${FILESDIR}"/${P}-3933-iso9660-2.patch
+       "${FILESDIR}"/${PN}-4.8.23-gettext.patch
+       "${FILESDIR}"/${PN}-4.8.23-gettext-test.patch
 )
 
 pkg_pretend() {