mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: Re: libintl: stubs or working functions
Date: Wed, 15 Apr 2015 20:35:07 -0400	[thread overview]
Message-ID: <20150416003506.GT6817@brightrain.aerifal.cx> (raw)
In-Reply-To: <20150415191815.GA5045@euler>

On Wed, Apr 15, 2015 at 09:18:16PM +0200, Felix Janda wrote:
> On Thu, Mar 06, 2015 at 22:24:15PM GMT, Rich Felker wrote:
> > On Thu, Mar 05, 2015 at 04:36:49PM +0700, Рысь wrote:
> [snip]
> > > * Did I understand that right that I do not need GNU gettext anymore and
> > >   I can use musl's interface for that?
> >
> > Yes, modulo some GNU software (coreutils for example) that probes for
> > glibc/gnu-libintl internals at configure time and depends on
> > poorly-designed and undocumented features (SYSDEP strings). These
> > programs will not work without either GNU libintl or patching out the
> > bad parts of configure and using a version of msgfmt that works around
> > the need for SYSDEP strings. I believe the one from sabotage
> > gettext-tiny does.
> 
> I would like to see what it takes to fix the autoconf tests. The problem
> is the macro AM_GNU_GETTEXT with the check
> 
> http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/m4/gettext.m4#n159

Sadly m4 gives me a headache, so I haven't yet figured out what the
above code is doing.

> (It looks for the internal symbols _nl_msg_cat_cntr and _nl_domain_bindings
> instead of relying on __GNU_GETTEXT_SUPPORTED_REVISION().)
> debian code search suggests that quite a lot of projects use this macro.
> 
> 
> https://lists.gnu.org/archive/html/bug-gnu-utils/2006-03/msg00011.html
> 
> gives some reasoning for the unportable tests:
> 
> * _GNU_GETTEXT_SUPPORTED_REVISION() was only introduced in gettext 0.10.xx
> * _GNU_GETTEXT_SUPPORTED_REVISION() of glibc says that it does not support
>   major revision 1 although it does
> 
> I would like to ask the gettext developers for an additional test
> "for GNU gettext in libc", which fails if __GLIBC__ uses
> _GNU_GETTEXT_SUPPORTED_REVISION and can only improve the previous test result.
> 
> Any comments on this or alternative approaches?

If the program actually needs a specific version of GNU gettext, then
it almost certainly does not (fully) work with musl's without also
using a fixed msgfmt utility.. The offending functionality is GNU
gettext's "SYSDEP strings" which conflict with the whole design of
gettext to use immutable memory-mapped strings in-place.

The problem they're trying to solve is that some translatable strings
contain formats from <inttypes.h> like PRIx64, etc. whose definitions
may vary from one system to another.

The recent GNU/glibc gettext these projects are trying to depend on
has a hideous hack to process variable substitutions in strings at
message catalog load time and produce per-process copies of the
patched-up strings. This is a waste of code size, runtime, and memory,
and it's quite simply an offense against any rational sensibilities.

For programs using this feature, the version of the msgfmt utility
from Sabotage Linux simply performs the mappings (all possible ones,
so the resulting .mo file works on any system) at po->mo compile time,
and then standard gettext behavior in musl and other non-GNU
implementations can handle the application's needs.

I'm not sure what's the right way to get rid of the assumption on the
app configure side that it needs GNU gettext, though.

Rich


  reply	other threads:[~2015-04-16  0:35 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-15 19:18 Felix Janda
2015-04-16  0:35 ` Rich Felker [this message]
2015-04-16  1:10   ` stephen Turner
2015-04-16 17:15   ` Felix Janda
2015-04-16 17:33     ` Rich Felker
2015-05-14 16:43       ` Felix Janda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150416003506.GT6817@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).