summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2022-01-16 06:28:57 +0000
committerSam James <sam@gentoo.org>2022-01-16 06:29:11 +0000
commit953cbc6f8a30cbde3975c00fcfb7a926a15ad28c (patch)
tree14c910d9fc27b39cc87168b154be57a139b33554 /sys-apps/help2man/files/help2man-1.48.5-cygwin.patch
parentsys-apps/portage-3.0.30: version bump (diff)
downloadprefix-953cbc6f8a30cbde3975c00fcfb7a926a15ad28c.tar.gz
prefix-953cbc6f8a30cbde3975c00fcfb7a926a15ad28c.tar.bz2
prefix-953cbc6f8a30cbde3975c00fcfb7a926a15ad28c.zip
sys-apps/help2man: add 1.48.5
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-apps/help2man/files/help2man-1.48.5-cygwin.patch')
-rw-r--r--sys-apps/help2man/files/help2man-1.48.5-cygwin.patch167
1 files changed, 167 insertions, 0 deletions
diff --git a/sys-apps/help2man/files/help2man-1.48.5-cygwin.patch b/sys-apps/help2man/files/help2man-1.48.5-cygwin.patch
new file mode 100644
index 0000000000..aa75d10e38
--- /dev/null
+++ b/sys-apps/help2man/files/help2man-1.48.5-cygwin.patch
@@ -0,0 +1,167 @@
+https://cygwin.com/git-cygwin-packages/?p=git/cygwin-packages/help2man.git;a=blob;f=help2man-preload-intl.patch;h=2fbc34bbc6bc7a36414257a29fee13944f5c087c;hb=b47c3b0de257e3cda4455e16e196e629c69d28e7
+
+LD_PRELOAD by itself only works with Cygwin builtin functions, but
+textdomain() and friends come from libintl. In order to override
+those functions, we have to "replace" cygintl-?.dll since functions are
+bound to a DLL name at link time. Our replacement will be used since
+it is loaded first by LD_PRELOAD.
+
+But as we are making this *the* libintl, we need to provide
+pass-throughs for the other functions which we're not overriding,
+otherwise Locale::gettext won't load (not to mention the program
+that we're trying to help2man).
+
+--- origsrc/help2man-1.48.5/Makefile.in 2020-03-15 04:52:00.000000000 -0600
++++ src/help2man-1.48.5/Makefile.in 2021-09-07 03:10:00.000000000 -0600
+@@ -76,7 +76,8 @@ install_base:
+
+ install_preload: preload
+ $(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)
+- $(INSTALL_PROGRAM) $(preload).so $(DESTDIR)$(pkglibdir)
++ $(INSTALL_PROGRAM) lib/cygintl-8.dll $(DESTDIR)$(pkglibdir)
++ ln -sf cygintl-8.dll $(DESTDIR)$(pkglibdir)/$(preload).so
+
+ install_l10n: msg_l10n man_l10n info_l10n
+ set -e; \
+@@ -145,7 +146,9 @@ $(target).h2m: $(srcdir)/$(target).h2m.PL
+
+ preload: $(preload).so
+ $(preload).so: $(srcdir)/$(preload).c
+- $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS)
++ mkdir -p lib
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o lib/cygintl-8.dll -shared $? $(LIBS)
++ ln -sf lib/cygintl-8.dll $@
+
+ man: $(target).1
+ $(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m.PL
+--- origsrc/help2man-1.48.5/bindtextdomain.c 2009-11-13 00:01:34.000000000 -0600
++++ src/help2man-1.48.5/bindtextdomain.c 2011-12-29 00:24:33.608078600 -0600
+@@ -36,12 +36,34 @@ static char *(*r_textdomain)(char const *) = 0;
+ static char *(*r_bindtextdomain)(char const *, char const *) = 0;
+ static char *(*r_bind_textdomain_codeset)(char const *, char const *) = 0;
+
++#ifdef __CYGWIN__
++static void *RTLD_NEXT = 0;
++static char *(*r_gettext)(const char *) = 0;
++static char *(*r_dgettext)(const char *, const char *) = 0;
++static char *(*r_dcgettext)(const char *, const char *, int) = 0;
++static char *(*r_ngettext)(const char *, const char *, unsigned long int) = 0;
++static char *(*r_dngettext)(const char *, const char *, const char *,
++ unsigned long int) = 0;
++static char *(*r_dcngettext)(const char *, const char *, const char *,
++ unsigned long int, int) = 0;
++static char *(*r_setlocale)(int, const char *) = 0;
++
++#define SYM(sym) libintl_ ## sym
++#else
++#define SYM(sym) sym
++#endif
++
+ void setup()
+ {
+ static int done = 0;
+ if (done++)
+ return;
+
++#ifdef __CYGWIN__
++ if (!(RTLD_NEXT = dlopen("/usr/bin/cygintl-8.dll", RTLD_LAZY)))
++ die("libintl8 not found");
++#endif
++
+ if (!(e_textdomain = getenv("TEXTDOMAIN")))
+ die("TEXTDOMAIN not set");
+
+@@ -57,9 +79,19 @@ void setup()
+ if (!(r_bind_textdomain_codeset = dlsym(RTLD_NEXT,
+ "bind_textdomain_codeset")))
+ die("can't find symbol \"bind_textdomain_codeset\"");
++
++#ifdef __CYGWIN__
++ r_gettext = dlsym(RTLD_NEXT, "libintl_gettext");
++ r_dgettext = dlsym(RTLD_NEXT, "libintl_dgettext");
++ r_dcgettext = dlsym(RTLD_NEXT, "libintl_dcgettext");
++ r_ngettext = dlsym(RTLD_NEXT, "libintl_ngettext");
++ r_dngettext = dlsym(RTLD_NEXT, "libintl_dngettext");
++ r_dcngettext = dlsym(RTLD_NEXT, "libintl_dcngettext");
++ r_setlocale = dlsym(RTLD_NEXT, "libintl_setlocale");
++#endif
+ }
+
+-char *textdomain(char const *domainname)
++char *SYM(textdomain)(char const *domainname)
+ {
+ char *r;
+ setup();
+@@ -70,7 +102,7 @@ char *textdomain(char const *domainname)
+ return r;
+ }
+
+-char *bindtextdomain(char const *domainname, char const *dirname)
++char *SYM(bindtextdomain)(char const *domainname, char const *dirname)
+ {
+ char const *dir = dirname;
+ setup();
+@@ -80,7 +112,7 @@ char *bindtextdomain(char const *domainname,
+ return r_bindtextdomain(domainname, dir);
+ }
+
+-char *bind_textdomain_codeset(char const *domainname, char const *codeset)
++char *SYM(bind_textdomain_codeset)(char const *domainname, char const *codeset)
+ {
+ char *r;
+ setup();
+@@ -90,3 +122,54 @@ char *bind_textdomain_codeset(char const
+
+ return r;
+ }
++
++#ifdef __CYGWIN__
++
++char *libintl_gettext(const char *msgid)
++{
++ setup();
++ return r_gettext(msgid);
++}
++
++char *libintl_dgettext (const char *domainname, const char *msgid)
++{
++ setup();
++ return r_dgettext(domainname, msgid);
++}
++
++char *libintl_dcgettext (const char *domainname, const char *msgid,
++ int category)
++{
++ setup();
++ return r_dcgettext (domainname, msgid, category);
++}
++
++char *libintl_ngettext (const char *msgid1, const char *msgid2,
++ unsigned long int n)
++{
++ setup();
++ return r_ngettext (msgid1, msgid2, n);
++}
++
++char *libintl_dngettext (const char *domainname, const char *msgid1,
++ const char *msgid2, unsigned long int n)
++{
++ setup();
++ return r_dngettext (domainname, msgid1, msgid2, n);
++}
++
++char *libintl_dcngettext (const char *domainname,
++ const char *msgid1, const char *msgid2,
++ unsigned long int n, int category)
++{
++ setup();
++ return r_dcngettext (domainname, msgid1, msgid2, n, category);
++}
++
++char *libintl_setlocale (int i, const char *s)
++{
++ setup();
++ return r_setlocale (i, s);
++}
++
++#endif