intl: New directory; see intl/ChangeLog for details.
top: * intl: New directory; see intl/ChangeLog for details. * ABOUT-NLS, config.rpath: Import from gettext 0.12.1. * Makefile.tpl: all-gcc depends on maybe-all-intl. * Makefile.in: Regenerate. config: * gettext.m4: New file - copy of gettext.m4 from binutils CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4. gcc: * ABOUT-NLS: Delete. * intl: Delete entire directory. * aclocal.m4: Include ../config/gettext.m4. Delete AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES, AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT. * configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT. Remove intl/Makefile from all_outputs. * configure, config.in: Regenerate. * Makefile.in: Expunge all references to intl subdirectory. Add -I../intl to INCLUDES. * intl.h: Include libintl.h if and only if ENABLE_NLS is defined. intl: * Makefile.in: Remove unnecessary capabilities for installation, build of shared libraries, generation of distribution tarballs, etc. Fix all the places that rely on the parent directory. Don't generate libgnuintl.h from anything; do generate $(objdir)/libintl.h from libgnuintl.h if necessary. Adjust DEFS for use of config.h. * libgnuintl.h.in: Rename libgnuintl.h. * README: New file. * config.charset, ref-add.sin, ref-del.sin: Delete (unused). * COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant). * aclocal.m4: New; generated per instructions in gettext manual. * configure.in: New; written from scratch for this configuration. * configure, config.h.in: Generated. contrib: * gcc_update: Remove gcc/intl/plural.c from list. Add new generated files intl/plural.c, intl/configure, intl/config.h.in. From-SVN: r68928
This commit is contained in:
parent
2f8058688a
commit
6eb95e99e7
71 changed files with 19101 additions and 6580 deletions
625
ABOUT-NLS
Normal file
625
ABOUT-NLS
Normal file
|
@ -0,0 +1,625 @@
|
||||||
|
Notes on the Free Translation Project
|
||||||
|
*************************************
|
||||||
|
|
||||||
|
Free software is going international! The Free Translation Project
|
||||||
|
is a way to get maintainers of free software, translators, and users all
|
||||||
|
together, so that will gradually become able to speak many languages.
|
||||||
|
A few packages already provide translations for their messages.
|
||||||
|
|
||||||
|
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||||
|
assume that the distributed package does use GNU `gettext' internally,
|
||||||
|
itself available at your nearest GNU archive site. But you do _not_
|
||||||
|
need to install GNU `gettext' prior to configuring, installing or using
|
||||||
|
this package with messages translated.
|
||||||
|
|
||||||
|
Installers will find here some useful hints. These notes also
|
||||||
|
explain how users should proceed for getting the programs to use the
|
||||||
|
available translations. They tell how people wanting to contribute and
|
||||||
|
work at translations should contact the appropriate team.
|
||||||
|
|
||||||
|
When reporting bugs in the `intl/' directory or bugs which may be
|
||||||
|
related to internationalization, you should tell about the version of
|
||||||
|
`gettext' which is used. The information can be found in the
|
||||||
|
`intl/VERSION' file, in internationalized packages.
|
||||||
|
|
||||||
|
Quick configuration advice
|
||||||
|
==========================
|
||||||
|
|
||||||
|
If you want to exploit the full power of internationalization, you
|
||||||
|
should configure it using
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to force usage of internationalizing routines provided within this
|
||||||
|
package, despite the existence of internationalizing capabilities in the
|
||||||
|
operating system where this package is being installed. So far, only
|
||||||
|
the `gettext' implementation in the GNU C library version 2 provides as
|
||||||
|
many features (such as locale alias, message inheritance, automatic
|
||||||
|
charset conversion or plural form handling) as the implementation here.
|
||||||
|
It is also not possible to offer this additional functionality on top
|
||||||
|
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||||
|
very likely convey even more functionality. So it might be a good idea
|
||||||
|
to change to GNU `gettext' as soon as possible.
|
||||||
|
|
||||||
|
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||||
|
you have installed a recent copy of the GNU gettext package with the
|
||||||
|
included `libintl'.
|
||||||
|
|
||||||
|
INSTALL Matters
|
||||||
|
===============
|
||||||
|
|
||||||
|
Some packages are "localizable" when properly installed; the
|
||||||
|
programs they contain can be made to speak your own native language.
|
||||||
|
Most such packages use GNU `gettext'. Other packages have their own
|
||||||
|
ways to internationalization, predating GNU `gettext'.
|
||||||
|
|
||||||
|
By default, this package will be installed to allow translation of
|
||||||
|
messages. It will automatically detect whether the system already
|
||||||
|
provides the GNU `gettext' functions. If not, the GNU `gettext' own
|
||||||
|
library will be used. This library is wholly contained within this
|
||||||
|
package, usually in the `intl/' subdirectory, so prior installation of
|
||||||
|
the GNU `gettext' package is _not_ required. Installers may use
|
||||||
|
special options at configuration time for changing the default
|
||||||
|
behaviour. The commands:
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
./configure --disable-nls
|
||||||
|
|
||||||
|
will respectively bypass any pre-existing `gettext' to use the
|
||||||
|
internationalizing routines provided within this package, or else,
|
||||||
|
_totally_ disable translation of messages.
|
||||||
|
|
||||||
|
When you already have GNU `gettext' installed on your system and run
|
||||||
|
configure without an option for your new package, `configure' will
|
||||||
|
probably detect the previously built and installed `libintl.a' file and
|
||||||
|
will decide to use this. This might be not what is desirable. You
|
||||||
|
should use the more recent version of the GNU `gettext' library. I.e.
|
||||||
|
if the file `intl/VERSION' shows that the library which comes with this
|
||||||
|
package is more recent, you should use
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to prevent auto-detection.
|
||||||
|
|
||||||
|
The configuration process will not test for the `catgets' function
|
||||||
|
and therefore it will not be used. The reason is that even an
|
||||||
|
emulation of `gettext' on top of `catgets' could not provide all the
|
||||||
|
extensions of the GNU `gettext' library.
|
||||||
|
|
||||||
|
Internationalized packages have usually many `po/LL.po' files, where
|
||||||
|
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||||
|
translations have been forbidden at `configure' time by using the
|
||||||
|
`--disable-nls' switch, all available translations are installed
|
||||||
|
together with the package. However, the environment variable `LINGUAS'
|
||||||
|
may be set, prior to configuration, to limit the installed set.
|
||||||
|
`LINGUAS' should then contain a space separated list of two-letter
|
||||||
|
codes, stating which languages are allowed.
|
||||||
|
|
||||||
|
Using This Package
|
||||||
|
==================
|
||||||
|
|
||||||
|
As a user, if your language has been installed for this package, you
|
||||||
|
only have to set the `LANG' environment variable to the appropriate
|
||||||
|
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||||
|
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||||
|
suppose that you speak German and live in Germany. At the shell
|
||||||
|
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||||
|
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||||
|
This can be done from your `.login' or `.profile' file, once and for
|
||||||
|
all.
|
||||||
|
|
||||||
|
You might think that the country code specification is redundant.
|
||||||
|
But in fact, some languages have dialects in different countries. For
|
||||||
|
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||||
|
country code serves to distinguish the dialects.
|
||||||
|
|
||||||
|
The locale naming convention of `LL_CC', with `LL' denoting the
|
||||||
|
language and `CC' denoting the country, is the one use on systems based
|
||||||
|
on GNU libc. On other systems, some variations of this scheme are
|
||||||
|
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
|
||||||
|
locales supported by your system for your country by running the command
|
||||||
|
`locale -a | grep '^LL''.
|
||||||
|
|
||||||
|
Not all programs have translations for all languages. By default, an
|
||||||
|
English message is shown in place of a nonexistent translation. If you
|
||||||
|
understand other languages, you can set up a priority list of languages.
|
||||||
|
This is done through a different environment variable, called
|
||||||
|
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||||
|
for the purpose of message handling, but you still need to have `LANG'
|
||||||
|
set to the primary language; this is required by other parts of the
|
||||||
|
system libraries. For example, some Swedish users who would rather
|
||||||
|
read translations in German than English for when Swedish is not
|
||||||
|
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||||
|
|
||||||
|
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||||
|
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||||
|
to denote the language's main dialect. For example, `de' is equivalent
|
||||||
|
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||||
|
(Portuguese as spoken in Portugal) in this context.
|
||||||
|
|
||||||
|
Translating Teams
|
||||||
|
=================
|
||||||
|
|
||||||
|
For the Free Translation Project to be a success, we need interested
|
||||||
|
people who like their own language and write it well, and who are also
|
||||||
|
able to synergize with other translators speaking the same language.
|
||||||
|
Each translation team has its own mailing list. The up-to-date list of
|
||||||
|
teams can be found at the Free Translation Project's homepage,
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||||
|
area.
|
||||||
|
|
||||||
|
If you'd like to volunteer to _work_ at translating messages, you
|
||||||
|
should become a member of the translating team for your own language.
|
||||||
|
The subscribing address is _not_ the same as the list itself, it has
|
||||||
|
`-request' appended. For example, speakers of Swedish can send a
|
||||||
|
message to `sv-request@li.org', having this message body:
|
||||||
|
|
||||||
|
subscribe
|
||||||
|
|
||||||
|
Keep in mind that team members are expected to participate
|
||||||
|
_actively_ in translations, or at solving translational difficulties,
|
||||||
|
rather than merely lurking around. If your team does not exist yet and
|
||||||
|
you want to start one, or if you are unsure about what to do or how to
|
||||||
|
get started, please write to `translation@iro.umontreal.ca' to reach the
|
||||||
|
coordinator for all translator teams.
|
||||||
|
|
||||||
|
The English team is special. It works at improving and uniformizing
|
||||||
|
the terminology in use. Proven linguistic skill are praised more than
|
||||||
|
programming skill, here.
|
||||||
|
|
||||||
|
Available Packages
|
||||||
|
==================
|
||||||
|
|
||||||
|
Languages are not equally supported in all packages. The following
|
||||||
|
matrix shows the current state of internationalization, as of May 2003.
|
||||||
|
The matrix shows, in regard of each package, for which languages PO
|
||||||
|
files have been submitted to translation coordination, with a
|
||||||
|
translation percentage of at least 50%.
|
||||||
|
|
||||||
|
Ready PO files am az be bg ca cs da de el en en_GB eo es
|
||||||
|
+-------------------------------------------+
|
||||||
|
a2ps | [] [] [] [] |
|
||||||
|
aegis | () |
|
||||||
|
anubis | |
|
||||||
|
ap-utils | |
|
||||||
|
bash | [] [] [] |
|
||||||
|
batchelor | |
|
||||||
|
bfd | [] [] |
|
||||||
|
binutils | [] [] |
|
||||||
|
bison | [] [] [] |
|
||||||
|
bluez-pin | [] [] |
|
||||||
|
clisp | |
|
||||||
|
clisp | [] [] [] |
|
||||||
|
coreutils | [] [] [] [] |
|
||||||
|
cpio | [] [] [] |
|
||||||
|
darkstat | () [] |
|
||||||
|
diffutils | [] [] [] [] [] [] [] |
|
||||||
|
e2fsprogs | [] [] |
|
||||||
|
enscript | [] [] [] [] |
|
||||||
|
error | [] [] [] [] [] |
|
||||||
|
fetchmail | [] () [] [] [] [] |
|
||||||
|
fileutils | [] [] [] |
|
||||||
|
findutils | [] [] [] [] [] [] |
|
||||||
|
flex | [] [] [] [] |
|
||||||
|
gas | [] |
|
||||||
|
gawk | [] [] [] [] |
|
||||||
|
gcal | [] |
|
||||||
|
gcc | [] [] |
|
||||||
|
gettext | [] [] [] [] [] |
|
||||||
|
gettext-runtime | [] [] [] [] [] |
|
||||||
|
gettext-tools | [] [] |
|
||||||
|
gimp-print | [] [] [] [] [] |
|
||||||
|
gliv | |
|
||||||
|
glunarclock | [] [] [] |
|
||||||
|
gnucash | () [] |
|
||||||
|
gnucash-glossary | [] () [] |
|
||||||
|
gnupg | [] () [] [] [] [] |
|
||||||
|
gpe-calendar | [] |
|
||||||
|
gpe-conf | [] |
|
||||||
|
gpe-contacts | [] |
|
||||||
|
gpe-edit | |
|
||||||
|
gpe-login | [] |
|
||||||
|
gpe-ownerinfo | [] |
|
||||||
|
gpe-sketchbook | [] |
|
||||||
|
gpe-timesheet | |
|
||||||
|
gpe-today | [] |
|
||||||
|
gpe-todo | [] |
|
||||||
|
gphoto2 | [] [] [] [] |
|
||||||
|
gprof | [] [] |
|
||||||
|
gpsdrive | () () () |
|
||||||
|
grep | [] [] [] [] [] |
|
||||||
|
gretl | [] |
|
||||||
|
hello | [] [] [] [] [] [] |
|
||||||
|
id-utils | [] [] |
|
||||||
|
indent | [] [] [] [] |
|
||||||
|
jpilot | [] [] [] [] |
|
||||||
|
jwhois | [] |
|
||||||
|
kbd | [] [] [] [] [] |
|
||||||
|
ld | [] [] |
|
||||||
|
libc | [] [] [] [] [] [] |
|
||||||
|
libgpewidget | [] |
|
||||||
|
libiconv | [] [] [] [] [] |
|
||||||
|
lifelines | [] () |
|
||||||
|
lilypond | [] |
|
||||||
|
lingoteach | |
|
||||||
|
lingoteach_lessons | () () |
|
||||||
|
lynx | [] [] [] [] |
|
||||||
|
m4 | [] [] [] [] |
|
||||||
|
mailutils | [] [] |
|
||||||
|
make | [] [] [] |
|
||||||
|
man-db | [] () [] [] () |
|
||||||
|
mysecretdiary | [] [] [] |
|
||||||
|
nano | [] () [] [] [] |
|
||||||
|
nano_1_0 | [] () [] [] [] |
|
||||||
|
opcodes | [] [] |
|
||||||
|
parted | [] [] [] [] [] |
|
||||||
|
ptx | [] [] [] [] [] |
|
||||||
|
python | |
|
||||||
|
radius | |
|
||||||
|
recode | [] [] [] [] [] [] |
|
||||||
|
screem | |
|
||||||
|
sed | [] [] [] [] [] |
|
||||||
|
sh-utils | [] [] [] |
|
||||||
|
sharutils | [] [] [] [] [] [] |
|
||||||
|
sketch | [] () [] |
|
||||||
|
soundtracker | [] [] [] |
|
||||||
|
sp | [] |
|
||||||
|
tar | [] [] [] [] |
|
||||||
|
texinfo | [] [] [] [] |
|
||||||
|
textutils | [] [] [] [] |
|
||||||
|
tin | () () |
|
||||||
|
util-linux | [] [] [] [] [] |
|
||||||
|
vorbis-tools | [] [] [] |
|
||||||
|
wastesedge | () |
|
||||||
|
wdiff | [] [] [] [] |
|
||||||
|
wget | [] [] [] [] [] [] [] |
|
||||||
|
xchat | [] [] [] |
|
||||||
|
xpad | |
|
||||||
|
+-------------------------------------------+
|
||||||
|
am az be bg ca cs da de el en en_GB eo es
|
||||||
|
0 1 4 2 31 17 54 60 14 1 4 12 56
|
||||||
|
|
||||||
|
et fa fi fr ga gl he hr hu id it ja ko
|
||||||
|
+----------------------------------------+
|
||||||
|
a2ps | [] [] [] () () |
|
||||||
|
aegis | |
|
||||||
|
anubis | [] |
|
||||||
|
ap-utils | [] |
|
||||||
|
bash | [] [] |
|
||||||
|
batchelor | [] |
|
||||||
|
bfd | [] [] |
|
||||||
|
binutils | [] [] |
|
||||||
|
bison | [] [] [] [] |
|
||||||
|
bluez-pin | [] [] [] [] |
|
||||||
|
clisp | |
|
||||||
|
clisp | [] |
|
||||||
|
coreutils | [] [] [] [] |
|
||||||
|
cpio | [] [] [] [] |
|
||||||
|
darkstat | () [] [] [] |
|
||||||
|
diffutils | [] [] [] [] [] [] [] |
|
||||||
|
e2fsprogs | |
|
||||||
|
enscript | [] [] |
|
||||||
|
error | [] [] [] [] |
|
||||||
|
fetchmail | [] |
|
||||||
|
fileutils | [] [] [] [] [] |
|
||||||
|
findutils | [] [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
flex | [] [] |
|
||||||
|
gas | [] |
|
||||||
|
gawk | [] [] |
|
||||||
|
gcal | [] |
|
||||||
|
gcc | [] |
|
||||||
|
gettext | [] [] [] |
|
||||||
|
gettext-runtime | [] [] [] [] |
|
||||||
|
gettext-tools | [] |
|
||||||
|
gimp-print | [] [] |
|
||||||
|
gliv | () |
|
||||||
|
glunarclock | [] [] [] [] |
|
||||||
|
gnucash | [] |
|
||||||
|
gnucash-glossary | [] |
|
||||||
|
gnupg | [] [] [] [] [] [] [] |
|
||||||
|
gpe-calendar | [] |
|
||||||
|
gpe-conf | |
|
||||||
|
gpe-contacts | [] |
|
||||||
|
gpe-edit | [] [] |
|
||||||
|
gpe-login | [] |
|
||||||
|
gpe-ownerinfo | [] [] [] |
|
||||||
|
gpe-sketchbook | [] |
|
||||||
|
gpe-timesheet | [] [] [] |
|
||||||
|
gpe-today | [] [] |
|
||||||
|
gpe-todo | [] [] |
|
||||||
|
gphoto2 | [] [] [] |
|
||||||
|
gprof | [] [] |
|
||||||
|
gpsdrive | () [] () () |
|
||||||
|
grep | [] [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
gretl | [] |
|
||||||
|
hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
id-utils | [] [] [] |
|
||||||
|
indent | [] [] [] [] [] [] [] [] |
|
||||||
|
jpilot | [] () |
|
||||||
|
jwhois | [] [] [] [] |
|
||||||
|
kbd | [] |
|
||||||
|
ld | [] |
|
||||||
|
libc | [] [] [] [] [] [] |
|
||||||
|
libgpewidget | [] [] [] |
|
||||||
|
libiconv | [] [] [] [] [] [] [] [] |
|
||||||
|
lifelines | () |
|
||||||
|
lilypond | [] |
|
||||||
|
lingoteach | [] [] |
|
||||||
|
lingoteach_lessons | |
|
||||||
|
lynx | [] [] [] [] |
|
||||||
|
m4 | [] [] [] [] |
|
||||||
|
mailutils | |
|
||||||
|
make | [] [] [] [] [] [] |
|
||||||
|
man-db | [] () () |
|
||||||
|
mysecretdiary | [] [] |
|
||||||
|
nano | [] [] [] [] |
|
||||||
|
nano_1_0 | [] [] [] [] |
|
||||||
|
opcodes | [] [] |
|
||||||
|
parted | [] [] [] |
|
||||||
|
ptx | [] [] [] [] [] [] [] |
|
||||||
|
python | |
|
||||||
|
radius | |
|
||||||
|
recode | [] [] [] [] [] [] |
|
||||||
|
screem | |
|
||||||
|
sed | [] [] [] [] [] [] [] [] |
|
||||||
|
sh-utils | [] [] [] [] [] [] |
|
||||||
|
sharutils | [] [] [] [] [] |
|
||||||
|
sketch | [] |
|
||||||
|
soundtracker | [] [] [] |
|
||||||
|
sp | [] () |
|
||||||
|
tar | [] [] [] [] [] [] [] [] [] |
|
||||||
|
texinfo | [] [] [] [] |
|
||||||
|
textutils | [] [] [] [] [] |
|
||||||
|
tin | [] () |
|
||||||
|
util-linux | [] [] [] [] () [] |
|
||||||
|
vorbis-tools | [] |
|
||||||
|
wastesedge | () |
|
||||||
|
wdiff | [] [] [] [] [] |
|
||||||
|
wget | [] [] [] [] [] [] [] [] |
|
||||||
|
xchat | [] [] [] |
|
||||||
|
xpad | |
|
||||||
|
+----------------------------------------+
|
||||||
|
et fa fi fr ga gl he hr hu id it ja ko
|
||||||
|
20 1 15 73 14 24 8 10 30 31 19 31 9
|
||||||
|
|
||||||
|
lg lt lv ms nb nl nn no pl pt pt_BR ro
|
||||||
|
+----------------------------------------+
|
||||||
|
a2ps | [] [] () () () [] [] |
|
||||||
|
aegis | () |
|
||||||
|
anubis | [] [] |
|
||||||
|
ap-utils | () |
|
||||||
|
bash | [] |
|
||||||
|
batchelor | |
|
||||||
|
bfd | |
|
||||||
|
binutils | |
|
||||||
|
bison | [] [] [] [] |
|
||||||
|
bluez-pin | [] |
|
||||||
|
clisp | |
|
||||||
|
clisp | [] |
|
||||||
|
coreutils | [] |
|
||||||
|
cpio | [] [] [] |
|
||||||
|
darkstat | [] [] [] [] |
|
||||||
|
diffutils | [] [] [] |
|
||||||
|
e2fsprogs | |
|
||||||
|
enscript | [] [] |
|
||||||
|
error | [] [] |
|
||||||
|
fetchmail | () () |
|
||||||
|
fileutils | [] |
|
||||||
|
findutils | [] [] [] [] |
|
||||||
|
flex | [] |
|
||||||
|
gas | |
|
||||||
|
gawk | [] |
|
||||||
|
gcal | |
|
||||||
|
gcc | |
|
||||||
|
gettext | [] |
|
||||||
|
gettext-runtime | [] |
|
||||||
|
gettext-tools | |
|
||||||
|
gimp-print | [] |
|
||||||
|
gliv | [] |
|
||||||
|
glunarclock | [] |
|
||||||
|
gnucash | |
|
||||||
|
gnucash-glossary | [] [] |
|
||||||
|
gnupg | |
|
||||||
|
gpe-calendar | [] [] |
|
||||||
|
gpe-conf | [] [] |
|
||||||
|
gpe-contacts | [] |
|
||||||
|
gpe-edit | [] [] |
|
||||||
|
gpe-login | [] [] |
|
||||||
|
gpe-ownerinfo | [] [] |
|
||||||
|
gpe-sketchbook | [] [] |
|
||||||
|
gpe-timesheet | [] [] |
|
||||||
|
gpe-today | [] [] |
|
||||||
|
gpe-todo | [] [] |
|
||||||
|
gphoto2 | |
|
||||||
|
gprof | [] |
|
||||||
|
gpsdrive | () () () |
|
||||||
|
grep | [] [] [] [] |
|
||||||
|
gretl | |
|
||||||
|
hello | [] [] [] [] [] [] [] [] [] |
|
||||||
|
id-utils | [] [] [] |
|
||||||
|
indent | [] [] [] |
|
||||||
|
jpilot | () () |
|
||||||
|
jwhois | [] [] [] |
|
||||||
|
kbd | |
|
||||||
|
ld | |
|
||||||
|
libc | [] [] [] [] |
|
||||||
|
libgpewidget | [] [] |
|
||||||
|
libiconv | [] [] |
|
||||||
|
lifelines | |
|
||||||
|
lilypond | [] |
|
||||||
|
lingoteach | |
|
||||||
|
lingoteach_lessons | |
|
||||||
|
lynx | [] [] |
|
||||||
|
m4 | [] [] [] [] |
|
||||||
|
mailutils | |
|
||||||
|
make | [] [] |
|
||||||
|
man-db | [] |
|
||||||
|
mysecretdiary | [] |
|
||||||
|
nano | [] [] [] [] |
|
||||||
|
nano_1_0 | [] [] [] [] |
|
||||||
|
opcodes | [] [] [] |
|
||||||
|
parted | [] [] [] |
|
||||||
|
ptx | [] [] [] [] [] [] [] |
|
||||||
|
python | |
|
||||||
|
radius | |
|
||||||
|
recode | [] [] [] |
|
||||||
|
screem | |
|
||||||
|
sed | [] [] |
|
||||||
|
sh-utils | [] |
|
||||||
|
sharutils | [] |
|
||||||
|
sketch | [] |
|
||||||
|
soundtracker | |
|
||||||
|
sp | |
|
||||||
|
tar | [] [] [] [] [] [] |
|
||||||
|
texinfo | [] |
|
||||||
|
textutils | [] |
|
||||||
|
tin | |
|
||||||
|
util-linux | [] [] |
|
||||||
|
vorbis-tools | [] [] |
|
||||||
|
wastesedge | |
|
||||||
|
wdiff | [] [] [] [] |
|
||||||
|
wget | [] [] [] |
|
||||||
|
xchat | [] [] |
|
||||||
|
xpad | [] |
|
||||||
|
+----------------------------------------+
|
||||||
|
lg lt lv ms nb nl nn no pl pt pt_BR ro
|
||||||
|
0 0 2 11 7 26 3 4 18 15 34 34
|
||||||
|
|
||||||
|
ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
|
||||||
|
+-------------------------------------------+
|
||||||
|
a2ps | [] [] [] [] [] | 16
|
||||||
|
aegis | () | 0
|
||||||
|
anubis | [] [] | 5
|
||||||
|
ap-utils | () | 1
|
||||||
|
bash | [] | 7
|
||||||
|
batchelor | | 1
|
||||||
|
bfd | [] [] [] | 7
|
||||||
|
binutils | [] [] [] | 7
|
||||||
|
bison | [] [] | 13
|
||||||
|
bluez-pin | | 7
|
||||||
|
clisp | | 0
|
||||||
|
clisp | | 5
|
||||||
|
coreutils | [] [] [] [] [] | 14
|
||||||
|
cpio | [] [] [] | 13
|
||||||
|
darkstat | [] () () | 9
|
||||||
|
diffutils | [] [] [] [] | 21
|
||||||
|
e2fsprogs | [] | 3
|
||||||
|
enscript | [] [] [] | 11
|
||||||
|
error | [] [] [] | 14
|
||||||
|
fetchmail | [] | 7
|
||||||
|
fileutils | [] [] [] [] [] [] | 15
|
||||||
|
findutils | [] [] [] [] [] [] | 27
|
||||||
|
flex | [] [] [] | 10
|
||||||
|
gas | [] | 3
|
||||||
|
gawk | [] [] | 9
|
||||||
|
gcal | [] [] | 4
|
||||||
|
gcc | [] | 4
|
||||||
|
gettext | [] [] [] [] [] [] | 15
|
||||||
|
gettext-runtime | [] [] [] [] [] [] | 16
|
||||||
|
gettext-tools | [] [] | 5
|
||||||
|
gimp-print | [] [] | 10
|
||||||
|
gliv | | 1
|
||||||
|
glunarclock | [] [] [] | 11
|
||||||
|
gnucash | [] [] | 4
|
||||||
|
gnucash-glossary | [] [] [] | 8
|
||||||
|
gnupg | [] [] [] [] | 16
|
||||||
|
gpe-calendar | [] | 5
|
||||||
|
gpe-conf | | 3
|
||||||
|
gpe-contacts | [] | 4
|
||||||
|
gpe-edit | [] | 5
|
||||||
|
gpe-login | [] | 5
|
||||||
|
gpe-ownerinfo | [] | 7
|
||||||
|
gpe-sketchbook | [] | 5
|
||||||
|
gpe-timesheet | [] | 6
|
||||||
|
gpe-today | [] | 6
|
||||||
|
gpe-todo | [] | 6
|
||||||
|
gphoto2 | [] [] | 9
|
||||||
|
gprof | [] [] | 7
|
||||||
|
gpsdrive | [] [] | 3
|
||||||
|
grep | [] [] [] [] | 24
|
||||||
|
gretl | | 2
|
||||||
|
hello | [] [] [] [] [] | 33
|
||||||
|
id-utils | [] [] [] | 11
|
||||||
|
indent | [] [] [] [] | 19
|
||||||
|
jpilot | [] [] [] [] [] | 10
|
||||||
|
jwhois | () () [] [] | 10
|
||||||
|
kbd | [] [] | 8
|
||||||
|
ld | [] [] | 5
|
||||||
|
libc | [] [] [] [] | 20
|
||||||
|
libgpewidget | | 6
|
||||||
|
libiconv | [] [] [] [] [] [] | 21
|
||||||
|
lifelines | [] | 2
|
||||||
|
lilypond | [] | 4
|
||||||
|
lingoteach | | 2
|
||||||
|
lingoteach_lessons | () | 0
|
||||||
|
lynx | [] [] [] [] | 14
|
||||||
|
m4 | [] [] [] | 15
|
||||||
|
mailutils | | 2
|
||||||
|
make | [] [] [] [] | 15
|
||||||
|
man-db | [] | 6
|
||||||
|
mysecretdiary | [] [] | 8
|
||||||
|
nano | [] [] [] | 15
|
||||||
|
nano_1_0 | [] [] [] | 15
|
||||||
|
opcodes | [] [] | 9
|
||||||
|
parted | [] [] | 13
|
||||||
|
ptx | [] [] [] | 22
|
||||||
|
python | | 0
|
||||||
|
radius | | 0
|
||||||
|
recode | [] [] [] [] | 19
|
||||||
|
screem | [] | 1
|
||||||
|
sed | [] [] [] [] [] | 20
|
||||||
|
sh-utils | [] [] [] | 13
|
||||||
|
sharutils | [] [] [] [] | 16
|
||||||
|
sketch | [] | 5
|
||||||
|
soundtracker | [] | 7
|
||||||
|
sp | [] | 3
|
||||||
|
tar | [] [] [] [] [] | 24
|
||||||
|
texinfo | [] [] [] [] | 13
|
||||||
|
textutils | [] [] [] [] [] | 15
|
||||||
|
tin | | 1
|
||||||
|
util-linux | [] [] | 14
|
||||||
|
vorbis-tools | [] | 7
|
||||||
|
wastesedge | | 0
|
||||||
|
wdiff | [] [] [] [] | 17
|
||||||
|
wget | [] [] [] [] [] [] [] | 25
|
||||||
|
xchat | [] [] [] | 11
|
||||||
|
xpad | | 1
|
||||||
|
+-------------------------------------------+
|
||||||
|
50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
|
||||||
|
97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913
|
||||||
|
|
||||||
|
Some counters in the preceding matrix are higher than the number of
|
||||||
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
used for implementing regional variants of languages, or language
|
||||||
|
dialects.
|
||||||
|
|
||||||
|
For a PO file in the matrix above to be effective, the package to
|
||||||
|
which it applies should also have been internationalized and
|
||||||
|
distributed as such by its maintainer. There might be an observable
|
||||||
|
lag between the mere existence a PO file and its wide availability in a
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
If May 2003 seems to be old, you may fetch a more recent copy of
|
||||||
|
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||||
|
matrix with full percentage details can be found at
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||||
|
|
||||||
|
Using `gettext' in new packages
|
||||||
|
===============================
|
||||||
|
|
||||||
|
If you are writing a freely available program and want to
|
||||||
|
internationalize it you are welcome to use GNU `gettext' in your
|
||||||
|
package. Of course you have to respect the GNU Library General Public
|
||||||
|
License which covers the use of the GNU `gettext' library. This means
|
||||||
|
in particular that even non-free programs can use `libintl' as a shared
|
||||||
|
library, whereas only free software can use `libintl' as a static
|
||||||
|
library or use modified versions of `libintl'.
|
||||||
|
|
||||||
|
Once the sources are changed appropriately and the setup can handle
|
||||||
|
the use of `gettext' the only thing missing are the translations. The
|
||||||
|
Free Translation Project is also available for packages which are not
|
||||||
|
developed inside the GNU project. Therefore the information given above
|
||||||
|
applies also for every other Free Software Project. Contact
|
||||||
|
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
||||||
|
the translation teams.
|
||||||
|
|
19
ChangeLog
19
ChangeLog
|
@ -1,3 +1,10 @@
|
||||||
|
2003-07-04 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* intl: New directory; see intl/ChangeLog for details.
|
||||||
|
* ABOUT-NLS, config.rpath: Import from gettext 0.12.1.
|
||||||
|
* Makefile.tpl: all-gcc depends on maybe-all-intl.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
2003-06-27 Nathanael Nerode <neroden@gcc.gnu.org>
|
2003-06-27 Nathanael Nerode <neroden@gcc.gnu.org>
|
||||||
|
|
||||||
* configure.in: Clean up config-lang.in handling. Delete
|
* configure.in: Clean up config-lang.in handling. Delete
|
||||||
|
@ -33,7 +40,7 @@
|
||||||
|
|
||||||
* configure.in: Update testsuite_flags to new location.
|
* configure.in: Update testsuite_flags to new location.
|
||||||
* configure. Regenerate.
|
* configure. Regenerate.
|
||||||
|
|
||||||
2003-06-18 Nathanael Nerode <neroden@gcc.gnu.org>
|
2003-06-18 Nathanael Nerode <neroden@gcc.gnu.org>
|
||||||
|
|
||||||
* Makefile.tpl: Remove BUILD_CC stuff.
|
* Makefile.tpl: Remove BUILD_CC stuff.
|
||||||
|
@ -48,7 +55,7 @@
|
||||||
* MAINTAINERS (Write After Approval): Add myself.
|
* MAINTAINERS (Write After Approval): Add myself.
|
||||||
|
|
||||||
2003-06-14 H.J. Lu <hongjiu.lu@intel.com>
|
2003-06-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config.guess: Update to 2003-06-12 version.
|
* config.guess: Update to 2003-06-12 version.
|
||||||
* config.sub: Update to 2003-06-13 version.
|
* config.sub: Update to 2003-06-13 version.
|
||||||
|
|
||||||
|
@ -128,7 +135,7 @@
|
||||||
* configure: Regenerate.
|
* configure: Regenerate.
|
||||||
|
|
||||||
2003-05-21 DJ Delorie <dj@redhat.com>
|
2003-05-21 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* Makefile.tpl (configure-target-libiberty): Depend only on gcc, not
|
* Makefile.tpl (configure-target-libiberty): Depend only on gcc, not
|
||||||
newlib or libgloss.
|
newlib or libgloss.
|
||||||
* Makefile.in: Regenerate.
|
* Makefile.in: Regenerate.
|
||||||
|
@ -145,7 +152,7 @@
|
||||||
2003-05-19 Nathanael Nerode <neroden@gcc.gnu.org>
|
2003-05-19 Nathanael Nerode <neroden@gcc.gnu.org>
|
||||||
|
|
||||||
* configure.in: Switch more things to use maybe dependencies.
|
* configure.in: Switch more things to use maybe dependencies.
|
||||||
* Makefile.tpl: Switch more things to use maybe dependencies.
|
* Makefile.tpl: Switch more things to use maybe dependencies.
|
||||||
Factor out common code from autogen IF statements.
|
Factor out common code from autogen IF statements.
|
||||||
* configure: Regenerate.
|
* configure: Regenerate.
|
||||||
* Makefile.in: Regenerate.
|
* Makefile.in: Regenerate.
|
||||||
|
@ -199,8 +206,8 @@
|
||||||
|
|
||||||
2003-05-02 Chris Demetriou <cgd@broadcom.com>
|
2003-05-02 Chris Demetriou <cgd@broadcom.com>
|
||||||
|
|
||||||
* Makefile.tpl: Require "makeinfo" from texinfo 4.2 or later.
|
* Makefile.tpl: Require "makeinfo" from texinfo 4.2 or later.
|
||||||
* Makefile.in: Regenerate.
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
2003-05-02 Wolfgang Bangerth <bangerth@dealii.org>
|
2003-05-02 Wolfgang Bangerth <bangerth@dealii.org>
|
||||||
|
|
||||||
|
|
|
@ -23739,7 +23739,7 @@ gcc-no-fixedincludes:
|
||||||
# Host modules specific to gcc.
|
# Host modules specific to gcc.
|
||||||
# GCC needs to identify certain tools.
|
# GCC needs to identify certain tools.
|
||||||
configure-gcc: maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
|
configure-gcc: maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
|
||||||
all-gcc: maybe-all-libiberty maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
|
all-gcc: maybe-all-libiberty maybe-all-intl maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
|
||||||
# This is a slightly kludgy method of getting dependencies on
|
# This is a slightly kludgy method of getting dependencies on
|
||||||
# all-build-libiberty correct; it would be better to build it every time.
|
# all-build-libiberty correct; it would be better to build it every time.
|
||||||
all-gcc: maybe-all-build-libiberty
|
all-gcc: maybe-all-build-libiberty
|
||||||
|
|
|
@ -1284,7 +1284,7 @@ gcc-no-fixedincludes:
|
||||||
# Host modules specific to gcc.
|
# Host modules specific to gcc.
|
||||||
# GCC needs to identify certain tools.
|
# GCC needs to identify certain tools.
|
||||||
configure-gcc: maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
|
configure-gcc: maybe-configure-binutils maybe-configure-gas maybe-configure-ld maybe-configure-bison maybe-configure-flex
|
||||||
all-gcc: maybe-all-libiberty maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
|
all-gcc: maybe-all-libiberty maybe-all-intl maybe-all-bison maybe-all-byacc maybe-all-binutils maybe-all-gas maybe-all-ld maybe-all-zlib
|
||||||
# This is a slightly kludgy method of getting dependencies on
|
# This is a slightly kludgy method of getting dependencies on
|
||||||
# all-build-libiberty correct; it would be better to build it every time.
|
# all-build-libiberty correct; it would be better to build it every time.
|
||||||
all-gcc: maybe-all-build-libiberty
|
all-gcc: maybe-all-build-libiberty
|
||||||
|
|
548
config.rpath
Executable file
548
config.rpath
Executable file
|
@ -0,0 +1,548 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent set of variables, describing how to set the
|
||||||
|
# run time search path of shared libraries in an executable.
|
||||||
|
#
|
||||||
|
# Copyright 1996-2003 Free Software Foundation, Inc.
|
||||||
|
# Taken from GNU libtool, 2001
|
||||||
|
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||||
|
# should be set by the caller.
|
||||||
|
#
|
||||||
|
# The set of defined variables is at the end of this script.
|
||||||
|
|
||||||
|
# Known limitations:
|
||||||
|
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
||||||
|
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
||||||
|
# known workaround is to choose shorter directory names for the build
|
||||||
|
# directory and/or the installation directory.
|
||||||
|
|
||||||
|
# All known linkers require a `.a' archive for static linking (except M$VC,
|
||||||
|
# which needs '.lib').
|
||||||
|
libext=a
|
||||||
|
shrext=.so
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||||
|
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||||
|
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
|
||||||
|
|
||||||
|
wl=
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
wl='-Wl,'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
mingw* | pw32* | os2*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
linux*)
|
||||||
|
case $CC in
|
||||||
|
icc|ecc)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
ccc)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sco3.2v5*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
|
||||||
|
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_minus_L=no
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
with_gnu_ld=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
with_gnu_ld=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ld_shlibs=yes
|
||||||
|
if test "$with_gnu_ld" = yes; then
|
||||||
|
case "$host_os" in
|
||||||
|
aix3* | aix4* | aix5*)
|
||||||
|
# On AIX/PPC, the GNU linker is very broken
|
||||||
|
if test "$host_cpu" != ia64; then
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
|
||||||
|
# that the semantics of dynamic libraries on AmigaOS, at least up
|
||||||
|
# to version 4, is to share data among multiple programs linked
|
||||||
|
# with the same dynamic library. Since this doesn't match the
|
||||||
|
# behavior of shared libraries on other platforms, we can use
|
||||||
|
# them.
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
;;
|
||||||
|
solaris* | sysv5*)
|
||||||
|
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
|
||||||
|
ld_shlibs=no
|
||||||
|
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$ld_shlibs" = yes; then
|
||||||
|
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
||||||
|
# option of GNU ld is called -rpath, not --rpath.
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||||
|
# are no directories specified by -L.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
# Neither direct hardcoding nor static linking is supported with a
|
||||||
|
# broken collect2.
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aix4* | aix5*)
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
# On IA64, the linker does run time linking by default, so we don't
|
||||||
|
# have to do anything special.
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
else
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
# Test if we are trying to use run time linking or normal
|
||||||
|
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||||
|
# need to do runtime linking.
|
||||||
|
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
|
||||||
|
for ld_flag in $LDFLAGS; do
|
||||||
|
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||||
|
aix_use_runtimelinking=yes
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
case $host_os in aix4.[012]|aix4.[012].*)
|
||||||
|
collect2name=`${CC} -print-prog-name=collect2`
|
||||||
|
if test -f "$collect2name" && \
|
||||||
|
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||||
|
then
|
||||||
|
# We have reworked collect2
|
||||||
|
hardcode_direct=yes
|
||||||
|
else
|
||||||
|
# We have old collect2
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
echo 'int main () { return 0; }' > conftest.c
|
||||||
|
${CC} ${LDFLAGS} conftest.c -o conftest
|
||||||
|
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
fi
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath="/usr/lib:/lib"
|
||||||
|
fi
|
||||||
|
rm -f conftest.c conftest
|
||||||
|
# End _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
if test "$aix_use_runtimelinking" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
else
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# see comment about different semantics on the GNU ld section
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
bsdi4*)
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec=' '
|
||||||
|
libext=lib
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
|
||||||
|
hardcode_direct=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
freebsd2.2*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
freebsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
hpux9*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
hpux10* | hpux11*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
case "$host_cpu" in
|
||||||
|
hppa*64*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
ia64*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=no
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
osf3*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
osf4* | osf5*)
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
else
|
||||||
|
# Both cc and cxx compiler support -rpath directly
|
||||||
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||||
|
fi
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
sco3.2v5*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
sysv4)
|
||||||
|
case $host_vendor in
|
||||||
|
sni)
|
||||||
|
hardcode_direct=yes # is this really true???
|
||||||
|
;;
|
||||||
|
siemens)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
motorola)
|
||||||
|
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sysv4.3*)
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
ld_shlibs=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4.2uw2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=no
|
||||||
|
;;
|
||||||
|
sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
|
||||||
|
;;
|
||||||
|
sysv5*)
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dynamic linker characteristics
|
||||||
|
# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
|
||||||
|
libname_spec='lib$name'
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
;;
|
||||||
|
aix4* | aix5*)
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
;;
|
||||||
|
bsdi4*)
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32*)
|
||||||
|
shrext=.dll
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
shrext=.dylib
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
;;
|
||||||
|
freebsd*)
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
ia64*)
|
||||||
|
shrext=.so
|
||||||
|
;;
|
||||||
|
hppa*64*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
case "$host_os" in
|
||||||
|
irix5* | nonstopux*)
|
||||||
|
libsuff= shlibsuff=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case $LD in
|
||||||
|
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
||||||
|
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
||||||
|
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
||||||
|
*) libsuff= shlibsuff= ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
linux*oldld* | linux*aout* | linux*coff*)
|
||||||
|
;;
|
||||||
|
linux*)
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
nto-qnx)
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
libname_spec='$name'
|
||||||
|
shrext=.dll
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
;;
|
||||||
|
sco3.2v5*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||||
|
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
||||||
|
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
|
||||||
|
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||||
|
|
||||||
|
# How to pass a linker flag through the compiler.
|
||||||
|
wl="$escaped_wl"
|
||||||
|
|
||||||
|
# Static library suffix (normally "a").
|
||||||
|
libext="$libext"
|
||||||
|
|
||||||
|
# Shared library suffix (normally "so").
|
||||||
|
shlibext="$shlibext"
|
||||||
|
|
||||||
|
# Flag to hardcode \$libdir into a binary during linking.
|
||||||
|
# This must work even if \$libdir does not exist.
|
||||||
|
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||||
|
|
||||||
|
# Whether we need a single -rpath flag with a separated argument.
|
||||||
|
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||||
|
|
||||||
|
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_direct="$hardcode_direct"
|
||||||
|
|
||||||
|
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_minus_L="$hardcode_minus_L"
|
||||||
|
|
||||||
|
EOF
|
|
@ -1,3 +1,8 @@
|
||||||
|
2003-07-04 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* gettext.m4: New file - copy of gettext.m4 from binutils
|
||||||
|
CVS, with added AC_ISC_POSIX macro from gcc/aclocal.m4.
|
||||||
|
|
||||||
2003-05-14 Kelley Cook <kelleycook@wideopenwest.com>
|
2003-05-14 Kelley Cook <kelleycook@wideopenwest.com>
|
||||||
|
|
||||||
* acinclude.m4: Accept i[3456789]86 for machine type.
|
* acinclude.m4: Accept i[3456789]86 for machine type.
|
||||||
|
@ -15,7 +20,7 @@
|
||||||
2002-12-28 Alexandre Oliva <aoliva@redhat.com>
|
2002-12-28 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
* acx.m4: Name cache variables properly.
|
* acx.m4: Name cache variables properly.
|
||||||
(NCN_STRICT_CHECK_TOOL): If program is not found and
|
(NCN_STRICT_CHECK_TOOL): If program is not found and
|
||||||
value-if-not-found is empty, use ${ncn_tool_prefix}$2 or $2,
|
value-if-not-found is empty, use ${ncn_tool_prefix}$2 or $2,
|
||||||
depending on whether build != host or not.
|
depending on whether build != host or not.
|
||||||
(NCN_STRICT_CHECK_TARGET_TOOL): Ditto, with the target prefix.
|
(NCN_STRICT_CHECK_TARGET_TOOL): Ditto, with the target prefix.
|
||||||
|
@ -139,7 +144,7 @@
|
||||||
2000-07-21 Andrew Haley <aph@cygnus.com>
|
2000-07-21 Andrew Haley <aph@cygnus.com>
|
||||||
|
|
||||||
* mh-ia64pic: New file.
|
* mh-ia64pic: New file.
|
||||||
* mt-ia64pic: New file.
|
* mt-ia64pic: New file.
|
||||||
|
|
||||||
2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||||
|
|
||||||
|
@ -207,8 +212,8 @@ Wed Nov 18 20:29:46 1998 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
Mon Nov 2 15:15:33 1998 Geoffrey Noer <noer@cygnus.com>
|
Mon Nov 2 15:15:33 1998 Geoffrey Noer <noer@cygnus.com>
|
||||||
|
|
||||||
* mh-cygwin32: delete
|
* mh-cygwin32: delete
|
||||||
* mh-cygwin: was mh-cygwin32
|
* mh-cygwin: was mh-cygwin32
|
||||||
|
|
||||||
1998-10-26 Syd Polk <spolk@cygnus.com>
|
1998-10-26 Syd Polk <spolk@cygnus.com>
|
||||||
|
|
||||||
|
@ -235,7 +240,7 @@ Mon Aug 10 00:15:47 1998 HJ Lu (hjl@gnu.org)
|
||||||
1998-05-29 Rob Savoye <rob@chinadoll.cygnus.com>
|
1998-05-29 Rob Savoye <rob@chinadoll.cygnus.com>
|
||||||
|
|
||||||
* acinclude.m4: New collection of generic autoconf macros.
|
* acinclude.m4: New collection of generic autoconf macros.
|
||||||
|
|
||||||
Wed Apr 22 12:24:28 1998 Michael Meissner <meissner@cygnus.com>
|
Wed Apr 22 12:24:28 1998 Michael Meissner <meissner@cygnus.com>
|
||||||
|
|
||||||
* mt-ospace: New file, support using -Os instead of -O2 to compile
|
* mt-ospace: New file, support using -Os instead of -O2 to compile
|
||||||
|
@ -278,8 +283,8 @@ Tue Mar 25 18:16:43 1997 Geoffrey Noer <noer@cygnus.com>
|
||||||
|
|
||||||
Wed Jan 8 19:56:43 1997 Geoffrey Noer <noer@cygnus.com>
|
Wed Jan 8 19:56:43 1997 Geoffrey Noer <noer@cygnus.com>
|
||||||
|
|
||||||
* mh-cygwin32: override CFLAGS so debug info isn't included
|
* mh-cygwin32: override CFLAGS so debug info isn't included
|
||||||
in cygwin32-hosted tools by default
|
in cygwin32-hosted tools by default
|
||||||
|
|
||||||
Tue Dec 31 16:04:26 1996 Ian Lance Taylor <ian@cygnus.com>
|
Tue Dec 31 16:04:26 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
@ -377,7 +382,7 @@ Tue Nov 7 15:41:30 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
(CC_MWCPPC): Add -mpw_chars, disable warnings, add comments
|
(CC_MWCPPC): Add -mpw_chars, disable warnings, add comments
|
||||||
explaining reasons for various flags.
|
explaining reasons for various flags.
|
||||||
(EXTRALIBS_PPC, EXTRALIBS_MWCPPC ): Put runtime library first.
|
(EXTRALIBS_PPC, EXTRALIBS_MWCPPC ): Put runtime library first.
|
||||||
|
|
||||||
Fri Oct 13 14:44:25 1995 Jason Molenda (crash@phydeaux.cygnus.com)
|
Fri Oct 13 14:44:25 1995 Jason Molenda (crash@phydeaux.cygnus.com)
|
||||||
|
|
||||||
* mh-aix, mh-sun: Removed.
|
* mh-aix, mh-sun: Removed.
|
||||||
|
@ -386,7 +391,7 @@ Fri Oct 13 14:44:25 1995 Jason Molenda (crash@phydeaux.cygnus.com)
|
||||||
|
|
||||||
* mh-sco, mh-solaris, mh-sysv4 (X11_EXTRA_LIBS): Define.
|
* mh-sco, mh-solaris, mh-sysv4 (X11_EXTRA_LIBS): Define.
|
||||||
|
|
||||||
* mh-hp300, mh-hpux, mh-hpux8, mh-solaris, mh-sun3, mh-sysv4: Don't
|
* mh-hp300, mh-hpux, mh-hpux8, mh-solaris, mh-sun3, mh-sysv4: Don't
|
||||||
hardcode location of X stuff here.
|
hardcode location of X stuff here.
|
||||||
|
|
||||||
Thu Sep 28 13:14:56 1995 Stan Shebs <shebs@andros.cygnus.com>
|
Thu Sep 28 13:14:56 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
@ -412,7 +417,7 @@ Thu Jun 22 17:47:24 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
Mon Apr 10 12:29:48 1995 Stan Shebs <shebs@andros.cygnus.com>
|
Mon Apr 10 12:29:48 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
* mpw-mh-mpw (EXTRALIBS): Always link in Math.o, CSANELIB.o,
|
* mpw-mh-mpw (EXTRALIBS): Always link in Math.o, CSANELIB.o,
|
||||||
and ToolLibs.o.
|
and ToolLibs.o.
|
||||||
|
|
||||||
* mpw-mh-mpw (CC): Define ALMOST_STDC.
|
* mpw-mh-mpw (CC): Define ALMOST_STDC.
|
||||||
(CFLAGS): Remove ALMOST_STDC, -mc68881.
|
(CFLAGS): Remove ALMOST_STDC, -mc68881.
|
||||||
|
|
361
config/gettext.m4
Normal file
361
config/gettext.m4
Normal file
|
@ -0,0 +1,361 @@
|
||||||
|
# This file is derived from `gettext.m4'. The difference is that the
|
||||||
|
# included macros assume Cygnus-style source and build trees.
|
||||||
|
|
||||||
|
#serial 1
|
||||||
|
dnl This test replaces the one in autoconf.
|
||||||
|
dnl Currently this macro should have the same name as the autoconf macro
|
||||||
|
dnl because gettext's gettext.m4 (distributed in the automake package)
|
||||||
|
dnl still uses it. Otherwise, the use in gettext.m4 makes autoheader
|
||||||
|
dnl give these diagnostics:
|
||||||
|
dnl configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
|
||||||
|
dnl configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
|
||||||
|
|
||||||
|
undefine([AC_ISC_POSIX])
|
||||||
|
AC_DEFUN(AC_ISC_POSIX,
|
||||||
|
[
|
||||||
|
dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
|
||||||
|
AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Macro to add for using GNU gettext.
|
||||||
|
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
|
#
|
||||||
|
# This file file be copied and used freely without restrictions. It can
|
||||||
|
# be used in projects which are not available under the GNU Public License
|
||||||
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
|
# Please note that the actual code is *not* freely available.
|
||||||
|
|
||||||
|
# serial 3
|
||||||
|
|
||||||
|
AC_DEFUN(CY_WITH_NLS,
|
||||||
|
[AC_MSG_CHECKING([whether NLS is requested])
|
||||||
|
dnl Default is enabled NLS
|
||||||
|
AC_ARG_ENABLE(nls,
|
||||||
|
[ --disable-nls do not use Native Language Support],
|
||||||
|
USE_NLS=$enableval, USE_NLS=yes)
|
||||||
|
AC_MSG_RESULT($USE_NLS)
|
||||||
|
AC_SUBST(USE_NLS)
|
||||||
|
|
||||||
|
USE_INCLUDED_LIBINTL=no
|
||||||
|
|
||||||
|
dnl If we use NLS figure out what method
|
||||||
|
if test "$USE_NLS" = "yes"; then
|
||||||
|
AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if NLS is requested])
|
||||||
|
AC_MSG_CHECKING([whether included gettext is requested])
|
||||||
|
AC_ARG_WITH(included-gettext,
|
||||||
|
[ --with-included-gettext use the GNU gettext library included here],
|
||||||
|
nls_cv_force_use_gnu_gettext=$withval,
|
||||||
|
nls_cv_force_use_gnu_gettext=no)
|
||||||
|
AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
|
||||||
|
|
||||||
|
nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
|
||||||
|
if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
|
||||||
|
dnl User does not insist on using GNU NLS library. Figure out what
|
||||||
|
dnl to use. If gettext or catgets are available (in this order) we
|
||||||
|
dnl use this. Else we have to fall back to GNU NLS library.
|
||||||
|
dnl catgets is only used if permitted by option --with-catgets.
|
||||||
|
nls_cv_header_intl=
|
||||||
|
nls_cv_header_libgt=
|
||||||
|
CATOBJEXT=NONE
|
||||||
|
|
||||||
|
AC_CHECK_HEADER(libintl.h,
|
||||||
|
[AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
|
||||||
|
[AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
|
||||||
|
gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
|
||||||
|
|
||||||
|
if test "$gt_cv_func_gettext_libc" != "yes"; then
|
||||||
|
AC_CHECK_LIB(intl, bindtextdomain,
|
||||||
|
[AC_CACHE_CHECK([for gettext in libintl],
|
||||||
|
gt_cv_func_gettext_libintl,
|
||||||
|
[AC_TRY_LINK([], [return (int) gettext ("")],
|
||||||
|
gt_cv_func_gettext_libintl=yes,
|
||||||
|
gt_cv_func_gettext_libintl=no)])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$gt_cv_func_gettext_libc" = "yes" \
|
||||||
|
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_GETTEXT, 1,
|
||||||
|
[Define as 1 if you have gettext and don't want to use GNU gettext.])
|
||||||
|
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||||
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
|
||||||
|
if test "$MSGFMT" != "no"; then
|
||||||
|
AC_CHECK_FUNCS(dcgettext)
|
||||||
|
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
||||||
|
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
||||||
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
||||||
|
AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
|
||||||
|
return _nl_msg_cat_cntr],
|
||||||
|
[CATOBJEXT=.gmo
|
||||||
|
DATADIRNAME=share],
|
||||||
|
[CATOBJEXT=.mo
|
||||||
|
DATADIRNAME=lib])
|
||||||
|
INSTOBJEXT=.mo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl In the standard gettext, we would now check for catgets.
|
||||||
|
dnl However, we never want to use catgets for our releases.
|
||||||
|
|
||||||
|
if test "$CATOBJEXT" = "NONE"; then
|
||||||
|
dnl Neither gettext nor catgets in included in the C library.
|
||||||
|
dnl Fall back on GNU gettext library.
|
||||||
|
nls_cv_use_gnu_gettext=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$nls_cv_use_gnu_gettext" = "yes"; then
|
||||||
|
dnl Mark actions used to generate GNU NLS library.
|
||||||
|
INTLOBJS="\$(GETTOBJS)"
|
||||||
|
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||||
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
|
||||||
|
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
||||||
|
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
||||||
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
||||||
|
AC_SUBST(MSGFMT)
|
||||||
|
USE_INCLUDED_LIBINTL=yes
|
||||||
|
CATOBJEXT=.gmo
|
||||||
|
INSTOBJEXT=.mo
|
||||||
|
DATADIRNAME=share
|
||||||
|
INTLDEPS='$(top_builddir)/../intl/libintl.a'
|
||||||
|
INTLLIBS=$INTLDEPS
|
||||||
|
LIBS=`echo $LIBS | sed -e 's/-lintl//'`
|
||||||
|
nls_cv_header_intl=libintl.h
|
||||||
|
nls_cv_header_libgt=libgettext.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Test whether we really found GNU xgettext.
|
||||||
|
if test "$XGETTEXT" != ":"; then
|
||||||
|
dnl If it is no GNU xgettext we define it as : so that the
|
||||||
|
dnl Makefiles still can work.
|
||||||
|
if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
|
||||||
|
: ;
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(
|
||||||
|
[found xgettext programs is not GNU xgettext; ignore it])
|
||||||
|
XGETTEXT=":"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We need to process the po/ directory.
|
||||||
|
POSUB=po
|
||||||
|
else
|
||||||
|
DATADIRNAME=share
|
||||||
|
nls_cv_header_intl=libintl.h
|
||||||
|
nls_cv_header_libgt=libgettext.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If this is used in GNU gettext we have to set USE_NLS to `yes'
|
||||||
|
# because some of the sources are only built for this goal.
|
||||||
|
if test "$PACKAGE" = gettext; then
|
||||||
|
USE_NLS=yes
|
||||||
|
USE_INCLUDED_LIBINTL=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl These rules are solely for the distribution goal. While doing this
|
||||||
|
dnl we only have to keep exactly one list of the available catalogs
|
||||||
|
dnl in configure.in.
|
||||||
|
for lang in $ALL_LINGUAS; do
|
||||||
|
GMOFILES="$GMOFILES $lang.gmo"
|
||||||
|
POFILES="$POFILES $lang.po"
|
||||||
|
done
|
||||||
|
|
||||||
|
dnl Make all variables we use known to autoconf.
|
||||||
|
AC_SUBST(USE_INCLUDED_LIBINTL)
|
||||||
|
AC_SUBST(CATALOGS)
|
||||||
|
AC_SUBST(CATOBJEXT)
|
||||||
|
AC_SUBST(DATADIRNAME)
|
||||||
|
AC_SUBST(GMOFILES)
|
||||||
|
AC_SUBST(INSTOBJEXT)
|
||||||
|
AC_SUBST(INTLDEPS)
|
||||||
|
AC_SUBST(INTLLIBS)
|
||||||
|
AC_SUBST(INTLOBJS)
|
||||||
|
AC_SUBST(POFILES)
|
||||||
|
AC_SUBST(POSUB)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(CY_GNU_GETTEXT,
|
||||||
|
[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_CC])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||||
|
AC_REQUIRE([AC_ISC_POSIX])dnl
|
||||||
|
AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||||
|
AC_REQUIRE([AC_C_CONST])dnl
|
||||||
|
AC_REQUIRE([AC_C_INLINE])dnl
|
||||||
|
AC_REQUIRE([AC_TYPE_OFF_T])dnl
|
||||||
|
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
|
||||||
|
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
|
||||||
|
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
|
||||||
|
unistd.h values.h sys/param.h])
|
||||||
|
AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
|
||||||
|
__argz_count __argz_stringify __argz_next])
|
||||||
|
|
||||||
|
if test "${ac_cv_func_stpcpy+set}" != "set"; then
|
||||||
|
AC_CHECK_FUNCS(stpcpy)
|
||||||
|
fi
|
||||||
|
if test "${ac_cv_func_stpcpy}" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_STPCPY, 1, [Define if you have the stpcpy function])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_LC_MESSAGES
|
||||||
|
CY_WITH_NLS
|
||||||
|
|
||||||
|
if test "x$CATOBJEXT" != "x"; then
|
||||||
|
if test "x$ALL_LINGUAS" = "x"; then
|
||||||
|
LINGUAS=
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING(for catalogs to be installed)
|
||||||
|
NEW_LINGUAS=
|
||||||
|
for lang in ${LINGUAS=$ALL_LINGUAS}; do
|
||||||
|
case "$ALL_LINGUAS" in
|
||||||
|
*$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
LINGUAS=$NEW_LINGUAS
|
||||||
|
AC_MSG_RESULT($LINGUAS)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Construct list of names of catalog files to be constructed.
|
||||||
|
if test -n "$LINGUAS"; then
|
||||||
|
for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl The reference to <locale.h> in the installed <libintl.h> file
|
||||||
|
dnl must be resolved because we cannot expect the users of this
|
||||||
|
dnl to define HAVE_LOCALE_H.
|
||||||
|
if test $ac_cv_header_locale_h = yes; then
|
||||||
|
INCLUDE_LOCALE_H="#include <locale.h>"
|
||||||
|
else
|
||||||
|
INCLUDE_LOCALE_H="\
|
||||||
|
/* The system does not provide the header <locale.h>. Take care yourself. */"
|
||||||
|
fi
|
||||||
|
AC_SUBST(INCLUDE_LOCALE_H)
|
||||||
|
|
||||||
|
dnl Determine which catalog format we have (if any is needed)
|
||||||
|
dnl For now we know about two different formats:
|
||||||
|
dnl Linux libc-5 and the normal X/Open format
|
||||||
|
if test -f $srcdir/po2tbl.sed.in; then
|
||||||
|
if test "$CATOBJEXT" = ".cat"; then
|
||||||
|
AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
|
||||||
|
|
||||||
|
dnl Transform the SED scripts while copying because some dumb SEDs
|
||||||
|
dnl cannot handle comments.
|
||||||
|
sed -e '/^#/d' $srcdir/$msgformat-msg.sed > po2msg.sed
|
||||||
|
fi
|
||||||
|
dnl po2tbl.sed is always needed.
|
||||||
|
sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
|
||||||
|
$srcdir/po2tbl.sed.in > po2tbl.sed
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl In the intl/Makefile.in we have a special dependency which makes
|
||||||
|
dnl only sense for gettext. We comment this out for non-gettext
|
||||||
|
dnl packages.
|
||||||
|
if test "$PACKAGE" = "gettext"; then
|
||||||
|
GT_NO="#NO#"
|
||||||
|
GT_YES=
|
||||||
|
else
|
||||||
|
GT_NO=
|
||||||
|
GT_YES="#YES#"
|
||||||
|
fi
|
||||||
|
AC_SUBST(GT_NO)
|
||||||
|
AC_SUBST(GT_YES)
|
||||||
|
|
||||||
|
MKINSTALLDIRS="\$(srcdir)/../../mkinstalldirs"
|
||||||
|
AC_SUBST(MKINSTALLDIRS)
|
||||||
|
|
||||||
|
dnl *** For now the libtool support in intl/Makefile is not for real.
|
||||||
|
l=
|
||||||
|
AC_SUBST(l)
|
||||||
|
|
||||||
|
dnl Generate list of files to be processed by xgettext which will
|
||||||
|
dnl be included in po/Makefile. But only do this if the po directory
|
||||||
|
dnl exists in srcdir and contains POTFILES.in.
|
||||||
|
if test -f $srcdir/po/POTFILES.in; then
|
||||||
|
test -d po || mkdir po
|
||||||
|
if test "x$srcdir" != "x."; then
|
||||||
|
if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
|
||||||
|
posrcprefix="$srcdir/"
|
||||||
|
else
|
||||||
|
posrcprefix="../$srcdir/"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
posrcprefix="../"
|
||||||
|
fi
|
||||||
|
rm -f po/POTFILES
|
||||||
|
sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
|
||||||
|
< $srcdir/po/POTFILES.in > po/POTFILES
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Search path for a program which passes the given test.
|
||||||
|
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
#
|
||||||
|
# This file file be copied and used freely without restrictions. It can
|
||||||
|
# be used in projects which are not available under the GNU Public License
|
||||||
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
|
# Please note that the actual code is *not* freely available.
|
||||||
|
|
||||||
|
# serial 1
|
||||||
|
|
||||||
|
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
|
||||||
|
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
|
||||||
|
AC_DEFUN(AM_PATH_PROG_WITH_TEST,
|
||||||
|
[# Extract the first word of "$2", so it can be a program name with args.
|
||||||
|
set dummy $2; ac_word=[$]2
|
||||||
|
AC_MSG_CHECKING([for $ac_word])
|
||||||
|
AC_CACHE_VAL(ac_cv_path_$1,
|
||||||
|
[case "[$]$1" in
|
||||||
|
/*)
|
||||||
|
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||||
|
for ac_dir in ifelse([$5], , $PATH, [$5]); do
|
||||||
|
test -z "$ac_dir" && ac_dir=.
|
||||||
|
if test -f $ac_dir/$ac_word; then
|
||||||
|
if [$3]; then
|
||||||
|
ac_cv_path_$1="$ac_dir/$ac_word"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
dnl If no 4th arg is given, leave the cache variable unset,
|
||||||
|
dnl so AC_PATH_PROGS will keep looking.
|
||||||
|
ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
|
||||||
|
])dnl
|
||||||
|
;;
|
||||||
|
esac])dnl
|
||||||
|
$1="$ac_cv_path_$1"
|
||||||
|
if test -n "[$]$1"; then
|
||||||
|
AC_MSG_RESULT([$]$1)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
AC_SUBST($1)dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
# Check whether LC_MESSAGES is available in <locale.h>.
|
||||||
|
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
|
#
|
||||||
|
# This file file be copied and used freely without restrictions. It can
|
||||||
|
# be used in projects which are not available under the GNU Public License
|
||||||
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
|
# Please note that the actual code is *not* freely available.
|
||||||
|
|
||||||
|
# serial 1
|
||||||
|
|
||||||
|
AC_DEFUN(AM_LC_MESSAGES,
|
||||||
|
[if test $ac_cv_header_locale_h = yes; then
|
||||||
|
AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
|
||||||
|
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
|
||||||
|
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
|
||||||
|
if test $am_cv_val_LC_MESSAGES = yes; then
|
||||||
|
AC_DEFINE(HAVE_LC_MESSAGES, 1,
|
||||||
|
[Define if your locale.h file contains LC_MESSAGES.])
|
||||||
|
fi
|
||||||
|
fi])
|
|
@ -1,3 +1,9 @@
|
||||||
|
2003-07-04 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* gcc_update: Remove gcc/intl/plural.c from list.
|
||||||
|
Add new generated files intl/plural.c, intl/configure,
|
||||||
|
intl/config.h.in.
|
||||||
|
|
||||||
2003-06-13 Jason Thorpe <thorpej@wasabisystems.com>
|
2003-06-13 Jason Thorpe <thorpej@wasabisystems.com>
|
||||||
|
|
||||||
* gcc_update (files_and_dependencies): Add
|
* gcc_update (files_and_dependencies): Add
|
||||||
|
@ -53,7 +59,7 @@
|
||||||
2002-12-28 Alexandre Oliva <aoliva@redhat.com>
|
2002-12-28 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
* gcc_update (configure): Depend on config/acx.m4 as well.
|
* gcc_update (configure): Depend on config/acx.m4 as well.
|
||||||
|
|
||||||
* gcc_update (configure): Depend on configure.in.
|
* gcc_update (configure): Depend on configure.in.
|
||||||
|
|
||||||
2002-12-24 Joseph S. Myers <jsm@polyomino.org.uk>
|
2002-12-24 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||||
|
|
|
@ -66,12 +66,15 @@ texinfo/stamp-h.in: texinfo/configure.in texinfo/aclocal.m4 texinfo/acconfig.h
|
||||||
texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
||||||
texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
||||||
texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
||||||
|
# intl library
|
||||||
|
intl/plural.c: intl/plural.y
|
||||||
|
intl/configure: intl/configure.in intl/aclocal.m4
|
||||||
|
intl/config.h.in: intl/configure.in intl/aclocal.m4
|
||||||
# Now, proceed to gcc automatically generated files
|
# Now, proceed to gcc automatically generated files
|
||||||
gcc/configure: gcc/configure.in
|
gcc/configure: gcc/configure.in
|
||||||
gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h
|
gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h
|
||||||
gcc/config.in: gcc/cstamp-h.in
|
gcc/config.in: gcc/cstamp-h.in
|
||||||
gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
|
gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
|
||||||
gcc/intl/plural.c: gcc/intl/plural.y
|
|
||||||
# And then, language-specific files
|
# And then, language-specific files
|
||||||
gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def
|
gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def
|
||||||
gcc/cp/cfns.h: gcc/cp/cfns.gperf
|
gcc/cp/cfns.h: gcc/cp/cfns.gperf
|
||||||
|
|
324
gcc/ABOUT-NLS
324
gcc/ABOUT-NLS
|
@ -1,324 +0,0 @@
|
||||||
Notes on the Free Translation Project
|
|
||||||
*************************************
|
|
||||||
|
|
||||||
Free software is going international! The Free Translation Project
|
|
||||||
is a way to get maintainers of free software, translators, and users all
|
|
||||||
together, so that will gradually become able to speak many languages.
|
|
||||||
A few packages already provide translations for their messages.
|
|
||||||
|
|
||||||
If you found this `ABOUT-NLS' file inside a distribution, you may
|
|
||||||
assume that the distributed package does use GNU `gettext' internally,
|
|
||||||
itself available at your nearest GNU archive site. But you do _not_
|
|
||||||
need to install GNU `gettext' prior to configuring, installing or using
|
|
||||||
this package with messages translated.
|
|
||||||
|
|
||||||
Installers will find here some useful hints. These notes also
|
|
||||||
explain how users should proceed for getting the programs to use the
|
|
||||||
available translations. They tell how people wanting to contribute and
|
|
||||||
work at translations should contact the appropriate team.
|
|
||||||
|
|
||||||
When reporting bugs in the `intl/' directory or bugs which may be
|
|
||||||
related to internationalization, you should tell about the version of
|
|
||||||
`gettext' which is used. The information can be found in the
|
|
||||||
`intl/VERSION' file, in internationalized packages.
|
|
||||||
|
|
||||||
Quick configuration advice
|
|
||||||
==========================
|
|
||||||
|
|
||||||
If you want to exploit the full power of internationalization, you
|
|
||||||
should configure it using
|
|
||||||
|
|
||||||
./configure --with-included-gettext
|
|
||||||
|
|
||||||
to force usage of internationalizing routines provided within this
|
|
||||||
package, despite the existence of internationalizing capabilities in the
|
|
||||||
operating system where this package is being installed. So far, only
|
|
||||||
the `gettext' implementation in the GNU C library version 2 provides as
|
|
||||||
many features (such as locale alias, message inheritance, automatic
|
|
||||||
charset conversion or plural form handling) as the implementation here.
|
|
||||||
It is also not possible to offer this additional functionality on top
|
|
||||||
of a `catgets' implementation. Future versions of GNU `gettext' will
|
|
||||||
very likely convey even more functionality. So it might be a good idea
|
|
||||||
to change to GNU `gettext' as soon as possible.
|
|
||||||
|
|
||||||
So you need _not_ provide this option if you are using GNU libc 2 or
|
|
||||||
you have installed a recent copy of the GNU gettext package with the
|
|
||||||
included `libintl'.
|
|
||||||
|
|
||||||
INSTALL Matters
|
|
||||||
===============
|
|
||||||
|
|
||||||
Some packages are "localizable" when properly installed; the
|
|
||||||
programs they contain can be made to speak your own native language.
|
|
||||||
Most such packages use GNU `gettext'. Other packages have their own
|
|
||||||
ways to internationalization, predating GNU `gettext'.
|
|
||||||
|
|
||||||
By default, this package will be installed to allow translation of
|
|
||||||
messages. It will automatically detect whether the system already
|
|
||||||
provides the GNU `gettext' functions. If not, the GNU `gettext' own
|
|
||||||
library will be used. This library is wholly contained within this
|
|
||||||
package, usually in the `intl/' subdirectory, so prior installation of
|
|
||||||
the GNU `gettext' package is _not_ required. Installers may use
|
|
||||||
special options at configuration time for changing the default
|
|
||||||
behavior. The commands:
|
|
||||||
|
|
||||||
./configure --with-included-gettext
|
|
||||||
./configure --disable-nls
|
|
||||||
|
|
||||||
will respectively bypass any pre-existing `gettext' to use the
|
|
||||||
internationalizing routines provided within this package, or else,
|
|
||||||
_totally_ disable translation of messages.
|
|
||||||
|
|
||||||
When you already have GNU `gettext' installed on your system and run
|
|
||||||
configure without an option for your new package, `configure' will
|
|
||||||
probably detect the previously built and installed `libintl.a' file and
|
|
||||||
will decide to use this. This might be not what is desirable. You
|
|
||||||
should use the more recent version of the GNU `gettext' library. I.e.
|
|
||||||
if the file `intl/VERSION' shows that the library which comes with this
|
|
||||||
package is more recent, you should use
|
|
||||||
|
|
||||||
./configure --with-included-gettext
|
|
||||||
|
|
||||||
to prevent auto-detection.
|
|
||||||
|
|
||||||
The configuration process will not test for the `catgets' function
|
|
||||||
and therefore it will not be used. The reason is that even an
|
|
||||||
emulation of `gettext' on top of `catgets' could not provide all the
|
|
||||||
extensions of the GNU `gettext' library.
|
|
||||||
|
|
||||||
Internationalized packages have usually many `po/LL.po' files, where
|
|
||||||
LL gives an ISO 639 two-letter code identifying the language. Unless
|
|
||||||
translations have been forbidden at `configure' time by using the
|
|
||||||
`--disable-nls' switch, all available translations are installed
|
|
||||||
together with the package. However, the environment variable `LINGUAS'
|
|
||||||
may be set, prior to configuration, to limit the installed set.
|
|
||||||
`LINGUAS' should then contain a space separated list of two-letter
|
|
||||||
codes, stating which languages are allowed.
|
|
||||||
|
|
||||||
Using This Package
|
|
||||||
==================
|
|
||||||
|
|
||||||
As a user, if your language has been installed for this package, you
|
|
||||||
only have to set the `LANG' environment variable to the appropriate
|
|
||||||
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
|
||||||
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
|
||||||
suppose that you speak German and live in Germany. At the shell
|
|
||||||
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
|
||||||
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
|
||||||
This can be done from your `.login' or `.profile' file, once and for
|
|
||||||
all.
|
|
||||||
|
|
||||||
You might think that the country code specification is redundant.
|
|
||||||
But in fact, some languages have dialects in different countries. For
|
|
||||||
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
|
||||||
country code serves to distinguish the dialects.
|
|
||||||
|
|
||||||
Not all programs have translations for all languages. By default, an
|
|
||||||
English message is shown in place of a nonexistent translation. If you
|
|
||||||
understand other languages, you can set up a priority list of languages.
|
|
||||||
This is done through a different environment variable, called
|
|
||||||
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
|
||||||
for the purpose of message handling, but you still need to have `LANG'
|
|
||||||
set to the primary language; this is required by other parts of the
|
|
||||||
system libraries. For example, some Swedish users who would rather
|
|
||||||
read translations in German than English for when Swedish is not
|
|
||||||
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
|
||||||
|
|
||||||
In the `LANGUAGE' environment variable, but not in the `LANG'
|
|
||||||
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
|
||||||
to denote the language's main dialect. For example, `de' is equivalent
|
|
||||||
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
|
||||||
(Portuguese as spoken in Portugal) in this context.
|
|
||||||
|
|
||||||
Translating Teams
|
|
||||||
=================
|
|
||||||
|
|
||||||
For the Free Translation Project to be a success, we need interested
|
|
||||||
people who like their own language and write it well, and who are also
|
|
||||||
able to synergize with other translators speaking the same language.
|
|
||||||
Each translation team has its own mailing list. The up-to-date list of
|
|
||||||
teams can be found at the Free Translation Project's homepage,
|
|
||||||
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
|
||||||
area.
|
|
||||||
|
|
||||||
If you'd like to volunteer to _work_ at translating messages, you
|
|
||||||
should become a member of the translating team for your own language.
|
|
||||||
The subscribing address is _not_ the same as the list itself, it has
|
|
||||||
`-request' appended. For example, speakers of Swedish can send a
|
|
||||||
message to `sv-request@li.org', having this message body:
|
|
||||||
|
|
||||||
subscribe
|
|
||||||
|
|
||||||
Keep in mind that team members are expected to participate
|
|
||||||
_actively_ in translations, or at solving translational difficulties,
|
|
||||||
rather than merely lurking around. If your team does not exist yet and
|
|
||||||
you want to start one, or if you are unsure about what to do or how to
|
|
||||||
get started, please write to `translation@iro.umontreal.ca' to reach the
|
|
||||||
coordinator for all translator teams.
|
|
||||||
|
|
||||||
The English team is special. It works at improving and uniformizing
|
|
||||||
the terminology in use. Proven linguistic skill are praised more than
|
|
||||||
programming skill, here.
|
|
||||||
|
|
||||||
Available Packages
|
|
||||||
==================
|
|
||||||
|
|
||||||
Languages are not equally supported in all packages. The following
|
|
||||||
matrix shows the current state of internationalization, as of September
|
|
||||||
2001. The matrix shows, in regard of each package, for which languages
|
|
||||||
PO files have been submitted to translation coordination, with a
|
|
||||||
translation percentage of at least 50%.
|
|
||||||
|
|
||||||
Ready PO files bg cs da de el en eo es et fi fr gl he hr id it ja
|
|
||||||
+----------------------------------------------------+
|
|
||||||
a2ps | [] [] [] |
|
|
||||||
bash | [] [] [] [] |
|
|
||||||
bfd | |
|
|
||||||
binutils | [] |
|
|
||||||
bison | [] [] [] [] [] |
|
|
||||||
clisp | [] [] [] [] |
|
|
||||||
cpio | [] [] [] [] [] |
|
|
||||||
diffutils | [] [] [] [] [] [] [] |
|
|
||||||
enscript | [] [] |
|
|
||||||
error | [] [] |
|
|
||||||
fetchmail | |
|
|
||||||
fileutils | [] [] [] [] [] [] [] [] |
|
|
||||||
findutils | [] [] [] [] [] [] [] [] |
|
|
||||||
flex | [] [] [] |
|
|
||||||
freetype | |
|
|
||||||
gas | |
|
|
||||||
gawk | [] [] |
|
|
||||||
gcal | |
|
|
||||||
gcc | |
|
|
||||||
gettext | [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
gnupg | [] [] [] [] [] [] [] |
|
|
||||||
gprof | |
|
|
||||||
grep | [] [] [] [] [] [] [] [] |
|
|
||||||
hello | [] [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
id-utils | [] [] [] |
|
|
||||||
indent | [] [] [] [] [] |
|
|
||||||
jpilot | [] |
|
|
||||||
kbd | |
|
|
||||||
ld | [] |
|
|
||||||
libc | [] [] [] [] [] [] [] [] |
|
|
||||||
lilypond | [] |
|
|
||||||
lynx | [] [] [] [] |
|
|
||||||
m4 | [] [] [] [] [] [] [] [] |
|
|
||||||
make | [] [] [] [] [] [] |
|
|
||||||
mysecretdiary | [] |
|
|
||||||
nano | [] [] [] |
|
|
||||||
opcodes | |
|
|
||||||
parted | [] [] [] |
|
|
||||||
ptx | [] [] [] [] [] [] [] |
|
|
||||||
python | |
|
|
||||||
recode | [] [] [] [] [] [] [] [] [] |
|
|
||||||
sed | [] [] [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
sh-utils | [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
sharutils | [] [] [] [] [] [] [] [] |
|
|
||||||
sketch | |
|
|
||||||
soundtracker | [] [] [] |
|
|
||||||
sp | |
|
|
||||||
tar | [] [] [] [] [] [] [] [] |
|
|
||||||
texinfo | [] [] [] [] [] [] |
|
|
||||||
textutils | [] [] [] [] [] [] [] [] |
|
|
||||||
util-linux | [] [] |
|
|
||||||
wdiff | [] [] [] |
|
|
||||||
wget | [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
+----------------------------------------------------+
|
|
||||||
bg cs da de el en eo es et fi fr gl he hr id it ja
|
|
||||||
0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18
|
|
||||||
|
|
||||||
ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
|
|
||||||
+----------------------------------------------------+
|
|
||||||
a2ps | [] [] [] | 6
|
|
||||||
bash | | 4
|
|
||||||
bfd | | 0
|
|
||||||
binutils | | 1
|
|
||||||
bison | [] | 6
|
|
||||||
clisp | [] | 5
|
|
||||||
cpio | [] [] [] [] [] | 10
|
|
||||||
diffutils | [] [] [] [] | 11
|
|
||||||
enscript | [] [] [] | 5
|
|
||||||
error | [] [] | 4
|
|
||||||
fetchmail | | 0
|
|
||||||
fileutils | [] [] [] [] [] [] [] [] [] | 17
|
|
||||||
findutils | [] [] [] [] [] [] [] [] | 16
|
|
||||||
flex | [] [] [] | 6
|
|
||||||
freetype | | 0
|
|
||||||
gas | | 0
|
|
||||||
gawk | [] | 3
|
|
||||||
gcal | | 0
|
|
||||||
gcc | | 0
|
|
||||||
gettext | [] [] [] [] [] [] [] [] | 18
|
|
||||||
gnupg | [] [] [] | 10
|
|
||||||
gprof | | 0
|
|
||||||
grep | [] [] [] [] | 12
|
|
||||||
hello | [] [] [] [] [] [] [] [] [] [] [] | 22
|
|
||||||
id-utils | [] [] [] | 6
|
|
||||||
indent | [] [] [] [] [] [] [] | 12
|
|
||||||
jpilot | | 1
|
|
||||||
kbd | [] | 1
|
|
||||||
ld | | 1
|
|
||||||
libc | [] [] [] [] [] [] [] [] | 16
|
|
||||||
lilypond | [] [] | 3
|
|
||||||
lynx | [] [] [] [] | 8
|
|
||||||
m4 | [] [] [] [] | 12
|
|
||||||
make | [] [] [] [] [] [] | 12
|
|
||||||
mysecretdiary | | 1
|
|
||||||
nano | [] | 4
|
|
||||||
opcodes | [] | 1
|
|
||||||
parted | [] [] | 5
|
|
||||||
ptx | [] [] [] [] [] [] [] [] | 15
|
|
||||||
python | | 0
|
|
||||||
recode | [] [] [] [] | 13
|
|
||||||
sed | [] [] [] [] [] [] [] | 19
|
|
||||||
sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21
|
|
||||||
sharutils | [] [] [] | 11
|
|
||||||
sketch | | 0
|
|
||||||
soundtracker | | 3
|
|
||||||
sp | | 0
|
|
||||||
tar | [] [] [] [] [] [] [] | 15
|
|
||||||
texinfo | [] | 7
|
|
||||||
textutils | [] [] [] [] [] [] [] [] | 16
|
|
||||||
util-linux | [] [] | 4
|
|
||||||
wdiff | [] [] [] [] | 7
|
|
||||||
wget | [] [] [] [] [] [] [] | 17
|
|
||||||
+----------------------------------------------------+
|
|
||||||
33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
|
|
||||||
53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387
|
|
||||||
|
|
||||||
Some counters in the preceding matrix are higher than the number of
|
|
||||||
visible blocks let us expect. This is because a few extra PO files are
|
|
||||||
used for implementing regional variants of languages, or language
|
|
||||||
dialects.
|
|
||||||
|
|
||||||
For a PO file in the matrix above to be effective, the package to
|
|
||||||
which it applies should also have been internationalized and
|
|
||||||
distributed as such by its maintainer. There might be an observable
|
|
||||||
lag between the mere existence a PO file and its wide availability in a
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
If September 2001 seems to be old, you may fetch a more recent copy
|
|
||||||
of this `ABOUT-NLS' file on most GNU archive sites. The most
|
|
||||||
up-to-date matrix with full percentage details can be found at
|
|
||||||
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
|
||||||
|
|
||||||
Using `gettext' in new packages
|
|
||||||
===============================
|
|
||||||
|
|
||||||
If you are writing a freely available program and want to
|
|
||||||
internationalize it you are welcome to use GNU `gettext' in your
|
|
||||||
package. Of course you have to respect the GNU Library General Public
|
|
||||||
License which covers the use of the GNU `gettext' library. This means
|
|
||||||
in particular that even non-free programs can use `libintl' as a shared
|
|
||||||
library, whereas only free software can use `libintl' as a static
|
|
||||||
library or use modified versions of `libintl'.
|
|
||||||
|
|
||||||
Once the sources are changed appropriately and the setup can handle
|
|
||||||
to use of `gettext' the only thing missing are the translations. The
|
|
||||||
Free Translation Project is also available for packages which are not
|
|
||||||
developed inside the GNU project. Therefore the information given above
|
|
||||||
applies also for every other Free Software Project. Contact
|
|
||||||
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
|
||||||
the translation teams.
|
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
|
2003-07-04 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* ABOUT-NLS: Delete.
|
||||||
|
* intl: Delete entire directory.
|
||||||
|
* aclocal.m4: Include ../config/gettext.m4. Delete
|
||||||
|
AC_ISC_POSIX, AM_LANGINFO_CODESET, jm_GLIBC21, AM_LC_MESSAGES,
|
||||||
|
AM_PATH_PROG_WITH_TEST, AM_WITH_NLS, and AM_GNU_GETTEXT.
|
||||||
|
* configure.in: Use CY_GNU_GETTEXT, not AM_GNU_GETTEXT.
|
||||||
|
Remove intl/Makefile from all_outputs.
|
||||||
|
* configure, config.in: Regenerate.
|
||||||
|
* Makefile.in: Expunge all references to intl subdirectory.
|
||||||
|
Add -I../intl to INCLUDES.
|
||||||
|
* intl.h: Include libintl.h if and only if ENABLE_NLS is defined.
|
||||||
|
|
||||||
2003-07-04 Roger Sayle <roger@eyesopen.com>
|
2003-07-04 Roger Sayle <roger@eyesopen.com>
|
||||||
|
|
||||||
* config/rs6000/aix51.h (TARGET_C99_FUNCTIONS): Define.
|
* config/rs6000/aix51.h (TARGET_C99_FUNCTIONS): Define.
|
||||||
|
@ -59,7 +73,7 @@
|
||||||
|
|
||||||
* c-opts.c (c_common_parse_file): Remove extra
|
* c-opts.c (c_common_parse_file): Remove extra
|
||||||
debug_hooks->start_source_file call.
|
debug_hooks->start_source_file call.
|
||||||
|
|
||||||
2003-07-03 Roger Sayle <roger@eyesopen.com>
|
2003-07-03 Roger Sayle <roger@eyesopen.com>
|
||||||
|
|
||||||
* real.c (real_trunc, real_floor, real_ceil): New functions
|
* real.c (real_trunc, real_floor, real_ceil): New functions
|
||||||
|
|
|
@ -439,9 +439,6 @@ INTLDEPS = @INTLDEPS@
|
||||||
# Character encoding conversion library.
|
# Character encoding conversion library.
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
|
|
||||||
# List of internationalization subdirectories.
|
|
||||||
INTL_SUBDIRS = intl
|
|
||||||
|
|
||||||
# The GC method to be used on this system.
|
# The GC method to be used on this system.
|
||||||
GGC=@GGC@.o
|
GGC=@GGC@.o
|
||||||
|
|
||||||
|
@ -719,8 +716,9 @@ BUILD_VARRAY = $(BUILD_PREFIX)varray.o
|
||||||
# subdirectory rather than in the source directory.
|
# subdirectory rather than in the source directory.
|
||||||
# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
|
# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
|
||||||
# currently being compiled, in both source trees, to be examined as well.
|
# currently being compiled, in both source trees, to be examined as well.
|
||||||
|
# libintl.h will be found in ../intl if we are using the included libintl.
|
||||||
INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
|
INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
|
||||||
-I$(srcdir)/config -I$(srcdir)/../include
|
-I$(srcdir)/config -I$(srcdir)/../include -I../intl
|
||||||
|
|
||||||
# Always use -I$(srcdir)/config when compiling.
|
# Always use -I$(srcdir)/config when compiling.
|
||||||
.c.o:
|
.c.o:
|
||||||
|
@ -1008,7 +1006,7 @@ start.encap: native xgcc$(exeext) cpp$(exeext) specs \
|
||||||
rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
|
rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
|
||||||
# This is what is made with the host's compiler
|
# This is what is made with the host's compiler
|
||||||
# whether making a cross compiler or not.
|
# whether making a cross compiler or not.
|
||||||
native: config.status auto-host.h intl.all build-@POSUB@ $(LANGUAGES) \
|
native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
|
||||||
$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
|
$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
|
||||||
|
|
||||||
# Define the names for selecting languages in LANGUAGES.
|
# Define the names for selecting languages in LANGUAGES.
|
||||||
|
@ -2320,19 +2318,6 @@ intl.o: intl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h Makefile
|
||||||
|
|
||||||
$(top_builddir)/intl/libintl.a: intl.all
|
$(top_builddir)/intl/libintl.a: intl.all
|
||||||
|
|
||||||
intl.all intl.install intl.uninstall \
|
|
||||||
intl.mostlyclean intl.clean intl.distclean intl.maintainer-clean:
|
|
||||||
@for d in $(INTL_SUBDIRS); do \
|
|
||||||
target=`expr $@ : 'intl.\(.*\)'` && \
|
|
||||||
echo "(cd $$d && $(MAKE) $$target)" && \
|
|
||||||
(cd $$d && AWK='$(AWK)' $(MAKE) $(SUBDIR_FLAGS_TO_PASS) $$target); \
|
|
||||||
if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
|
|
||||||
done
|
|
||||||
|
|
||||||
# intl.all and intl.install need config.h to exist, and the files it includes.
|
|
||||||
# (FIXME: intl/*.c shouldn't need to see insn-foo.h!)
|
|
||||||
intl.all intl.install: config.h insn-flags.h insn-constants.h
|
|
||||||
|
|
||||||
# Make-lang.in should add dependencies of po-generated on any generated
|
# Make-lang.in should add dependencies of po-generated on any generated
|
||||||
# files which need to be scanned by gettext (usually Yacc-generated parsers).
|
# files which need to be scanned by gettext (usually Yacc-generated parsers).
|
||||||
po-generated: $(parsedir)/c-parse.c
|
po-generated: $(parsedir)/c-parse.c
|
||||||
|
@ -2787,8 +2772,7 @@ $(docobjdir)/fsf-funding.7: $(docdir)/include/funding.texi
|
||||||
# We remove as much from the language subdirectories as we can
|
# We remove as much from the language subdirectories as we can
|
||||||
# (less duplicated code).
|
# (less duplicated code).
|
||||||
|
|
||||||
INTL_MOSTLYCLEAN = intl.mostlyclean
|
mostlyclean: lang.mostlyclean
|
||||||
mostlyclean: $(INTL_MOSTLYCLEAN) lang.mostlyclean
|
|
||||||
-rm -f $(STAGESTUFF)
|
-rm -f $(STAGESTUFF)
|
||||||
-rm -f *$(coverageexts)
|
-rm -f *$(coverageexts)
|
||||||
-rm -rf libgcc
|
-rm -rf libgcc
|
||||||
|
@ -2830,8 +2814,7 @@ mostlyclean: $(INTL_MOSTLYCLEAN) lang.mostlyclean
|
||||||
|
|
||||||
# Delete all files made by compilation
|
# Delete all files made by compilation
|
||||||
# that don't exist in the distribution.
|
# that don't exist in the distribution.
|
||||||
INTL_CLEAN = intl.clean
|
clean: mostlyclean lang.clean
|
||||||
clean: mostlyclean $(INTL_CLEAN) lang.clean
|
|
||||||
-rm -f libgcc.a libgcc_eh.a libgcov.a
|
-rm -f libgcc.a libgcc_eh.a libgcov.a
|
||||||
-rm -f libgcc_s$(SHLIB_EXT) libgcc_s$(SHLIB_EXT).1
|
-rm -f libgcc_s$(SHLIB_EXT) libgcc_s$(SHLIB_EXT).1
|
||||||
-rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
|
-rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
|
||||||
|
@ -2856,8 +2839,7 @@ clean: mostlyclean $(INTL_CLEAN) lang.clean
|
||||||
|
|
||||||
# Delete all files that users would normally create
|
# Delete all files that users would normally create
|
||||||
# while building and installing GCC.
|
# while building and installing GCC.
|
||||||
INTL_DISTCLEAN = intl.distclean
|
distclean: clean lang.distclean
|
||||||
distclean: clean $(INTL_DISTCLEAN) lang.distclean
|
|
||||||
-rm -f auto-host.h auto-build.h
|
-rm -f auto-host.h auto-build.h
|
||||||
-rm -f cstamp-h
|
-rm -f cstamp-h
|
||||||
-rm -f config.status config.run config.cache config.bak
|
-rm -f config.status config.run config.cache config.bak
|
||||||
|
@ -2872,7 +2854,6 @@ distclean: clean $(INTL_DISTCLEAN) lang.distclean
|
||||||
-cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.c
|
-cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.c
|
||||||
-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
|
-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
|
||||||
-rm -rf ${QMTEST_DIR} stamp-qmtest
|
-rm -rf ${QMTEST_DIR} stamp-qmtest
|
||||||
-rm -f intl/libintl.h libintl.h
|
|
||||||
-rm -f cxxmain.c
|
-rm -f cxxmain.c
|
||||||
-rm -f mklibgcc mkheaders gccbug .gdbinit configargs.h
|
-rm -f mklibgcc mkheaders gccbug .gdbinit configargs.h
|
||||||
-rm -f gcov.pod
|
-rm -f gcov.pod
|
||||||
|
@ -2901,14 +2882,10 @@ extraclean: distclean lang.extraclean
|
||||||
|
|
||||||
# Get rid of every file that's generated from some other file, except for `configure'.
|
# Get rid of every file that's generated from some other file, except for `configure'.
|
||||||
# Most of these files ARE PRESENT in the GCC distribution.
|
# Most of these files ARE PRESENT in the GCC distribution.
|
||||||
# We define INTL_DISTCLEAN, INTL_CLEAN & INTL_MOSTLYCLEAN to be empty in the
|
|
||||||
# submake, so that we don't descend into intl after its makefile has been
|
|
||||||
# removed.
|
|
||||||
maintainer-clean:
|
maintainer-clean:
|
||||||
@echo 'This command is intended for maintainers to use; it'
|
@echo 'This command is intended for maintainers to use; it'
|
||||||
@echo 'deletes files that may need special tools to rebuild.'
|
@echo 'deletes files that may need special tools to rebuild.'
|
||||||
$(MAKE) INTL_DISTCLEAN= INTL_CLEAN= INTL_MOSTLYCLEAN= \
|
$(MAKE) lang.maintainer-clean distclean
|
||||||
intl.maintainer-clean lang.maintainer-clean distclean
|
|
||||||
-rm -f c-parse.y c-parse.c c-parse.output TAGS
|
-rm -f c-parse.y c-parse.c c-parse.output TAGS
|
||||||
-rm -f cpp.??s cpp.*aux
|
-rm -f cpp.??s cpp.*aux
|
||||||
-rm -f gcc.??s gcc.*aux
|
-rm -f gcc.??s gcc.*aux
|
||||||
|
@ -2924,7 +2901,7 @@ maintainer-clean:
|
||||||
# Install the driver last so that the window when things are
|
# Install the driver last so that the window when things are
|
||||||
# broken is small.
|
# broken is small.
|
||||||
install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
|
install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
|
||||||
install-cpp install-man install-info intl.install install-@POSUB@ \
|
install-cpp install-man install-info install-@POSUB@ \
|
||||||
lang.install-normal install-driver
|
lang.install-normal install-driver
|
||||||
|
|
||||||
# Handle cpp installation.
|
# Handle cpp installation.
|
||||||
|
@ -3219,7 +3196,7 @@ install-collect2: collect2 installdirs
|
||||||
$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(libsubdir)/gcc$(exeext)
|
$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(libsubdir)/gcc$(exeext)
|
||||||
|
|
||||||
# Cancel installation by deleting the installed files.
|
# Cancel installation by deleting the installed files.
|
||||||
uninstall: intl.uninstall lang.uninstall
|
uninstall: lang.uninstall
|
||||||
-rm -rf $(DESTDIR)$(libsubdir)
|
-rm -rf $(DESTDIR)$(libsubdir)
|
||||||
-rm -rf $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
|
-rm -rf $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
|
||||||
-rm -rf $(DESTDIR)$(bindir)/$(GCC_CROSS_NAME)$(exeext)
|
-rm -rf $(DESTDIR)$(bindir)/$(GCC_CROSS_NAME)$(exeext)
|
||||||
|
@ -3690,7 +3667,7 @@ slowcompare slowcompare3 slowcompare4 slowcompare-lean slowcompare3-lean slowcom
|
||||||
&& (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
|
&& (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
|
||||||
done
|
done
|
||||||
case "$@" in slowcompare | slowcompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^slowcompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
|
case "$@" in slowcompare | slowcompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^slowcompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
|
||||||
for dir in tmp-foo intl $(SUBDIRS); do \
|
for dir in tmp-foo $(SUBDIRS); do \
|
||||||
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
|
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
|
||||||
for file in $$dir/*$(objext); do \
|
for file in $$dir/*$(objext); do \
|
||||||
tail +16c ./$$file > tmp-foo1; \
|
tail +16c ./$$file > tmp-foo1; \
|
||||||
|
@ -3725,7 +3702,7 @@ gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-
|
||||||
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
|
test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
|
||||||
done
|
done
|
||||||
case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
|
case "$@" in gnucompare | gnucompare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^gnucompare\([0-9][0-9]*\).*,\1,'` ;; esac; \
|
||||||
for dir in tmp-foo intl $(SUBDIRS); do \
|
for dir in tmp-foo $(SUBDIRS); do \
|
||||||
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
|
if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
|
||||||
for file in $$dir/*$(objext); do \
|
for file in $$dir/*$(objext); do \
|
||||||
cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
|
cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
|
||||||
|
@ -3756,14 +3733,13 @@ compare4-lean: @make_compare_target@4-lean
|
||||||
stage1-start:
|
stage1-start:
|
||||||
-if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
|
-if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage1
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage1
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-for dir in $(SUBDIRS) ; \
|
||||||
do \
|
do \
|
||||||
if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
|
if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
# If SPECS is overridden, make sure it is `installed' as specs.
|
# If SPECS is overridden, make sure it is `installed' as specs.
|
||||||
-mv $(SPECS) stage1/specs
|
-mv $(SPECS) stage1/specs
|
||||||
-mv $(STAGESTUFF) stage1
|
-mv $(STAGESTUFF) stage1
|
||||||
-mv intl/*$(objext) stage1/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3790,14 +3766,13 @@ stage1: force stage1-start lang.stage1
|
||||||
stage2-start:
|
stage2-start:
|
||||||
-if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
|
-if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage2
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage2
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-subdirs="$(SUBDIRS)"; for dir in $subdirs; \
|
||||||
do \
|
do \
|
||||||
if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
|
if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
# If SPECS is overridden, make sure it is `installed' as specs.
|
# If SPECS is overridden, make sure it is `installed' as specs.
|
||||||
-mv $(SPECS) stage2/specs
|
-mv $(SPECS) stage2/specs
|
||||||
-mv $(STAGESTUFF) stage2
|
-mv $(STAGESTUFF) stage2
|
||||||
-mv intl/*$(objext) stage2/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3820,14 +3795,13 @@ stage2: force stage2-start lang.stage2
|
||||||
stage3-start:
|
stage3-start:
|
||||||
-if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
|
-if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage3
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage3
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-subdirs="$(SUBDIRS)"; for dir in $subdirs; \
|
||||||
do \
|
do \
|
||||||
if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
|
if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
# If SPECS is overridden, make sure it is `installed' as specs.
|
# If SPECS is overridden, make sure it is `installed' as specs.
|
||||||
-mv $(SPECS) stage3/specs
|
-mv $(SPECS) stage3/specs
|
||||||
-mv $(STAGESTUFF) stage3
|
-mv $(STAGESTUFF) stage3
|
||||||
-mv intl/*$(objext) stage3/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3850,14 +3824,13 @@ stage3: force stage3-start lang.stage3
|
||||||
stage4-start:
|
stage4-start:
|
||||||
-if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
|
-if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage4
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stage4
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-subdirs="$(SUBDIRS)"; for dir in $subdirs; \
|
||||||
do \
|
do \
|
||||||
if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
|
if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
# If SPECS is overridden, make sure it is `installed' as specs.
|
# If SPECS is overridden, make sure it is `installed' as specs.
|
||||||
-mv $(SPECS) stage4/specs
|
-mv $(SPECS) stage4/specs
|
||||||
-mv $(STAGESTUFF) stage4
|
-mv $(STAGESTUFF) stage4
|
||||||
-mv intl/*$(objext) stage4/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3880,12 +3853,11 @@ stage4: force stage4-start lang.stage4
|
||||||
stageprofile-start:
|
stageprofile-start:
|
||||||
-if [ -d stageprofile ] ; then true ; else mkdir stageprofile ; fi
|
-if [ -d stageprofile ] ; then true ; else mkdir stageprofile ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stageprofile
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stageprofile
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-subdirs="$(SUBDIRS)"; for dir in $subdirs; \
|
||||||
do \
|
do \
|
||||||
if [ -d stageprofile/$$dir ] ; then true ; else mkdir stageprofile/$$dir ; fi ; \
|
if [ -d stageprofile/$$dir ] ; then true ; else mkdir stageprofile/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
-mv $(STAGESTUFF) stageprofile
|
-mv $(STAGESTUFF) stageprofile
|
||||||
-mv intl/*$(objext) stageprofile/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stageprofile && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stageprofile && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3908,12 +3880,11 @@ stageprofile: force stageprofile-start lang.stageprofile
|
||||||
stagefeedback-start:
|
stagefeedback-start:
|
||||||
-if [ -d stagefeedback ] ; then true ; else mkdir stagefeedback ; fi
|
-if [ -d stagefeedback ] ; then true ; else mkdir stagefeedback ; fi
|
||||||
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stagefeedback
|
$(MAKE) -f libgcc.mk libgcc-stage-start stage=stagefeedback
|
||||||
-for dir in intl $(SUBDIRS) ; \
|
-subdirs="$(SUBDIRS)"; for dir in $subdirs; \
|
||||||
do \
|
do \
|
||||||
if [ -d stagefeedback/$$dir ] ; then true ; else mkdir stagefeedback/$$dir ; fi ; \
|
if [ -d stagefeedback/$$dir ] ; then true ; else mkdir stagefeedback/$$dir ; fi ; \
|
||||||
done
|
done
|
||||||
-mv $(STAGESTUFF) stagefeedback
|
-mv $(STAGESTUFF) stagefeedback
|
||||||
-mv intl/*$(objext) stagefeedback/intl
|
|
||||||
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
|
||||||
# dir will work properly.
|
# dir will work properly.
|
||||||
-if [ -f as$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
-if [ -f as$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../as$(exeext) .) ; else true ; fi
|
||||||
|
@ -3921,7 +3892,7 @@ stagefeedback-start:
|
||||||
-if [ -f collect-ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
-if [ -f collect-ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
|
||||||
-rm -f stagefeedback/libgcc.a stagefeedback/libgcov.a stagefeedback/libgcc_eh.a
|
-rm -f stagefeedback/libgcc.a stagefeedback/libgcov.a stagefeedback/libgcc_eh.a
|
||||||
-rm -f *.da
|
-rm -f *.da
|
||||||
-for dir in fixinc intl po testsuite $(SUBDIRS); \
|
-for dir in fixinc po testsuite $(SUBDIRS); \
|
||||||
do \
|
do \
|
||||||
rm -f $$dir/*.da ; \
|
rm -f $$dir/*.da ; \
|
||||||
done
|
done
|
||||||
|
|
547
gcc/aclocal.m4
vendored
547
gcc/aclocal.m4
vendored
|
@ -1,5 +1,6 @@
|
||||||
sinclude(../config/acx.m4)
|
sinclude(../config/acx.m4)
|
||||||
sinclude(../config/accross.m4)
|
sinclude(../config/accross.m4)
|
||||||
|
sinclude(../config/gettext.m4)
|
||||||
|
|
||||||
dnl See if stdbool.h properly defines bool and true/false.
|
dnl See if stdbool.h properly defines bool and true/false.
|
||||||
AC_DEFUN(gcc_AC_HEADER_STDBOOL,
|
AC_DEFUN(gcc_AC_HEADER_STDBOOL,
|
||||||
|
@ -308,24 +309,6 @@ else
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
#serial 1
|
|
||||||
dnl This test replaces the one in autoconf.
|
|
||||||
dnl Currently this macro should have the same name as the autoconf macro
|
|
||||||
dnl because gettext's gettext.m4 (distributed in the automake package)
|
|
||||||
dnl still uses it. Otherwise, the use in gettext.m4 makes autoheader
|
|
||||||
dnl give these diagnostics:
|
|
||||||
dnl configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
|
|
||||||
dnl configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
|
|
||||||
|
|
||||||
undefine([AC_ISC_POSIX])
|
|
||||||
AC_DEFUN(AC_ISC_POSIX,
|
|
||||||
[
|
|
||||||
dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
|
|
||||||
AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
dnl GCC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND [, PATH]])
|
dnl GCC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND [, PATH]])
|
||||||
dnl like AC_PATH_PROG but use other cache variables
|
dnl like AC_PATH_PROG but use other cache variables
|
||||||
AC_DEFUN(GCC_PATH_PROG,
|
AC_DEFUN(GCC_PATH_PROG,
|
||||||
|
@ -635,534 +618,6 @@ size_t iconv();
|
||||||
AC_SUBST(LIBICONV)
|
AC_SUBST(LIBICONV)
|
||||||
])
|
])
|
||||||
|
|
||||||
### Gettext macros begin here.
|
|
||||||
### Changes for GCC marked by 'dnl GCC LOCAL'.
|
|
||||||
### Note iconv.m4 appears above, as it's used for other reasons.
|
|
||||||
|
|
||||||
#serial AM1
|
|
||||||
|
|
||||||
dnl From Bruno Haible.
|
|
||||||
|
|
||||||
AC_DEFUN([AM_LANGINFO_CODESET],
|
|
||||||
[
|
|
||||||
AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
|
|
||||||
[AC_TRY_LINK([#include <langinfo.h>],
|
|
||||||
[char* cs = nl_langinfo(CODESET);],
|
|
||||||
am_cv_langinfo_codeset=yes,
|
|
||||||
am_cv_langinfo_codeset=no)
|
|
||||||
])
|
|
||||||
if test $am_cv_langinfo_codeset = yes; then
|
|
||||||
AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
|
|
||||||
[Define if you have <langinfo.h> and nl_langinfo(CODESET).])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
#serial 1
|
|
||||||
# This test replaces the one in autoconf.
|
|
||||||
# Currently this macro should have the same name as the autoconf macro
|
|
||||||
# because gettext's gettext.m4 (distributed in the automake package)
|
|
||||||
# still uses it. Otherwise, the use in gettext.m4 makes autoheader
|
|
||||||
# give these diagnostics:
|
|
||||||
# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
|
|
||||||
# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
|
|
||||||
|
|
||||||
undefine([AC_ISC_POSIX])
|
|
||||||
|
|
||||||
AC_DEFUN([AC_ISC_POSIX],
|
|
||||||
[
|
|
||||||
dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
|
|
||||||
dnl GCC LOCAL: Use AC_SEARCH_LIBS.
|
|
||||||
AC_SEARCH_LIBS(strerror, cposix)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
#serial 2
|
|
||||||
|
|
||||||
# Test for the GNU C Library, version 2.1 or newer.
|
|
||||||
# From Bruno Haible.
|
|
||||||
|
|
||||||
AC_DEFUN([jm_GLIBC21],
|
|
||||||
[
|
|
||||||
AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
|
|
||||||
ac_cv_gnu_library_2_1,
|
|
||||||
[AC_EGREP_CPP([Lucky GNU user],
|
|
||||||
[
|
|
||||||
#include <features.h>
|
|
||||||
#ifdef __GNU_LIBRARY__
|
|
||||||
#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
|
|
||||||
Lucky GNU user
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
],
|
|
||||||
ac_cv_gnu_library_2_1=yes,
|
|
||||||
ac_cv_gnu_library_2_1=no)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_SUBST(GLIBC21)
|
|
||||||
GLIBC21="$ac_cv_gnu_library_2_1"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Check whether LC_MESSAGES is available in <locale.h>.
|
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
|
||||||
#
|
|
||||||
# This file can be copied and used freely without restrictions. It can
|
|
||||||
# be used in projects which are not available under the GNU General Public
|
|
||||||
# License or the GNU Library General Public License but which still want
|
|
||||||
# to provide support for the GNU gettext functionality.
|
|
||||||
# Please note that the actual code of the GNU gettext library is covered
|
|
||||||
# by the GNU Library General Public License, and the rest of the GNU
|
|
||||||
# gettext package package is covered by the GNU General Public License.
|
|
||||||
# They are *not* in the public domain.
|
|
||||||
|
|
||||||
# serial 2
|
|
||||||
|
|
||||||
AC_DEFUN([AM_LC_MESSAGES],
|
|
||||||
[if test $ac_cv_header_locale_h = yes; then
|
|
||||||
AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
|
|
||||||
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
|
|
||||||
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
|
|
||||||
if test $am_cv_val_LC_MESSAGES = yes; then
|
|
||||||
AC_DEFINE(HAVE_LC_MESSAGES, 1,
|
|
||||||
[Define if your <locale.h> file defines LC_MESSAGES.])
|
|
||||||
fi
|
|
||||||
fi])
|
|
||||||
|
|
||||||
# Search path for a program which passes the given test.
|
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
|
||||||
#
|
|
||||||
# This file can be copied and used freely without restrictions. It can
|
|
||||||
# be used in projects which are not available under the GNU General Public
|
|
||||||
# License or the GNU Library General Public License but which still want
|
|
||||||
# to provide support for the GNU gettext functionality.
|
|
||||||
# Please note that the actual code of the GNU gettext library is covered
|
|
||||||
# by the GNU Library General Public License, and the rest of the GNU
|
|
||||||
# gettext package package is covered by the GNU General Public License.
|
|
||||||
# They are *not* in the public domain.
|
|
||||||
|
|
||||||
# serial 2
|
|
||||||
|
|
||||||
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
|
|
||||||
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
|
|
||||||
AC_DEFUN([AM_PATH_PROG_WITH_TEST],
|
|
||||||
[# Extract the first word of "$2", so it can be a program name with args.
|
|
||||||
set dummy $2; ac_word=[$]2
|
|
||||||
AC_MSG_CHECKING([for $ac_word])
|
|
||||||
AC_CACHE_VAL(ac_cv_path_$1,
|
|
||||||
[case "[$]$1" in
|
|
||||||
/*)
|
|
||||||
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
|
||||||
for ac_dir in ifelse([$5], , $PATH, [$5]); do
|
|
||||||
test -z "$ac_dir" && ac_dir=.
|
|
||||||
if test -f $ac_dir/$ac_word; then
|
|
||||||
if [$3]; then
|
|
||||||
ac_cv_path_$1="$ac_dir/$ac_word"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
dnl If no 4th arg is given, leave the cache variable unset,
|
|
||||||
dnl so AC_PATH_PROGS will keep looking.
|
|
||||||
ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
|
|
||||||
])dnl
|
|
||||||
;;
|
|
||||||
esac])dnl
|
|
||||||
$1="$ac_cv_path_$1"
|
|
||||||
if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
|
|
||||||
AC_MSG_RESULT([$]$1)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
AC_SUBST($1)dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
# Macro to add for using GNU gettext.
|
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
|
||||||
#
|
|
||||||
# This file can be copied and used freely without restrictions. It can
|
|
||||||
# be used in projects which are not available under the GNU General Public
|
|
||||||
# License or the GNU Library General Public License but which still want
|
|
||||||
# to provide support for the GNU gettext functionality.
|
|
||||||
# Please note that the actual code of the GNU gettext library is covered
|
|
||||||
# by the GNU Library General Public License, and the rest of the GNU
|
|
||||||
# gettext package package is covered by the GNU General Public License.
|
|
||||||
# They are *not* in the public domain.
|
|
||||||
|
|
||||||
# serial 10
|
|
||||||
|
|
||||||
dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
|
|
||||||
dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
|
|
||||||
dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
|
|
||||||
dnl depending on --{enable,disable}-{shared,static} and on the presence of
|
|
||||||
dnl AM-DISABLE-SHARED). Otherwise, a static library
|
|
||||||
dnl $(top_builddir)/intl/libintl.a will be created.
|
|
||||||
dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
|
|
||||||
dnl implementations (in libc or libintl) without the ngettext() function
|
|
||||||
dnl will be ignored.
|
|
||||||
dnl LIBDIR is used to find the intl libraries. If empty,
|
|
||||||
dnl the value `$(top_builddir)/intl/' is used.
|
|
||||||
dnl
|
|
||||||
dnl The result of the configuration is one of three cases:
|
|
||||||
dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
|
|
||||||
dnl and used.
|
|
||||||
dnl Catalog format: GNU --> install in $(datadir)
|
|
||||||
dnl Catalog extension: .mo after installation, .gmo in source tree
|
|
||||||
dnl 2) GNU gettext has been found in the system's C library.
|
|
||||||
dnl Catalog format: GNU --> install in $(datadir)
|
|
||||||
dnl Catalog extension: .mo after installation, .gmo in source tree
|
|
||||||
dnl 3) No internationalization, always use English msgid.
|
|
||||||
dnl Catalog format: none
|
|
||||||
dnl Catalog extension: none
|
|
||||||
dnl The use of .gmo is historical (it was needed to avoid overwriting the
|
|
||||||
dnl GNU format catalogs when building on a platform with an X/Open gettext),
|
|
||||||
dnl but we keep it in order not to force irrelevant filename changes on the
|
|
||||||
dnl maintainers.
|
|
||||||
dnl
|
|
||||||
AC_DEFUN([AM_WITH_NLS],
|
|
||||||
[AC_MSG_CHECKING([whether NLS is requested])
|
|
||||||
dnl Default is enabled NLS
|
|
||||||
AC_ARG_ENABLE(nls,
|
|
||||||
[ --disable-nls do not use Native Language Support],
|
|
||||||
USE_NLS=$enableval, USE_NLS=yes)
|
|
||||||
AC_MSG_RESULT($USE_NLS)
|
|
||||||
AC_SUBST(USE_NLS)
|
|
||||||
|
|
||||||
BUILD_INCLUDED_LIBINTL=no
|
|
||||||
USE_INCLUDED_LIBINTL=no
|
|
||||||
dnl GCC LOCAL: Separate concept of link command line from dependencies.
|
|
||||||
INTLLIBS=
|
|
||||||
INTLDEPS=
|
|
||||||
|
|
||||||
dnl If we use NLS figure out what method
|
|
||||||
if test "$USE_NLS" = "yes"; then
|
|
||||||
AC_DEFINE(ENABLE_NLS, 1,
|
|
||||||
[Define to 1 if translation of program messages to the user's native language
|
|
||||||
is requested.])
|
|
||||||
AC_MSG_CHECKING([whether included gettext is requested])
|
|
||||||
AC_ARG_WITH(included-gettext,
|
|
||||||
[ --with-included-gettext use the GNU gettext library included here],
|
|
||||||
nls_cv_force_use_gnu_gettext=$withval,
|
|
||||||
nls_cv_force_use_gnu_gettext=no)
|
|
||||||
AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
|
|
||||||
|
|
||||||
nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
|
|
||||||
if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
|
|
||||||
dnl User does not insist on using GNU NLS library. Figure out what
|
|
||||||
dnl to use. If GNU gettext is available we use this. Else we have
|
|
||||||
dnl to fall back to GNU NLS library.
|
|
||||||
CATOBJEXT=NONE
|
|
||||||
|
|
||||||
dnl Add a version number to the cache macros.
|
|
||||||
define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
|
|
||||||
define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
|
|
||||||
|
|
||||||
dnl GCC LOCAL: Expose presence of libintl.h to C code.
|
|
||||||
AC_CHECK_HEADER(libintl.h,
|
|
||||||
[AC_DEFINE([HAVE_LIBINTL_H], 1,
|
|
||||||
[Define if you have the <libintl.h> header file.])
|
|
||||||
AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
|
|
||||||
[AC_TRY_LINK([#include <libintl.h>
|
|
||||||
extern int _nl_msg_cat_cntr;],
|
|
||||||
[bindtextdomain ("", "");
|
|
||||||
return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
|
|
||||||
gt_cv_func_gnugettext_libc=yes,
|
|
||||||
gt_cv_func_gnugettext_libc=no)])
|
|
||||||
|
|
||||||
if test "$gt_cv_func_gnugettext_libc" != "yes"; then
|
|
||||||
AC_CACHE_CHECK([for GNU gettext in libintl],
|
|
||||||
gt_cv_func_gnugettext_libintl,
|
|
||||||
[gt_save_LIBS="$LIBS"
|
|
||||||
LIBS="$LIBS -lintl $LIBICONV"
|
|
||||||
AC_TRY_LINK([#include <libintl.h>
|
|
||||||
extern int _nl_msg_cat_cntr;],
|
|
||||||
[bindtextdomain ("", "");
|
|
||||||
return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
|
|
||||||
gt_cv_func_gnugettext_libintl=yes,
|
|
||||||
gt_cv_func_gnugettext_libintl=no)
|
|
||||||
LIBS="$gt_save_LIBS"])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl If an already present or preinstalled GNU gettext() is found,
|
|
||||||
dnl use it. But if this macro is used in GNU gettext, and GNU
|
|
||||||
dnl gettext is already preinstalled in libintl, we update this
|
|
||||||
dnl libintl. (Cf. the install rule in intl/Makefile.in.)
|
|
||||||
if test "$gt_cv_func_gnugettext_libc" = "yes" \
|
|
||||||
|| { test "$gt_cv_func_gnugettext_libintl" = "yes" \
|
|
||||||
&& test "$PACKAGE" != gettext; }; then
|
|
||||||
AC_DEFINE(HAVE_GETTEXT, 1,
|
|
||||||
[Define if the GNU gettext() function is already present or preinstalled.])
|
|
||||||
|
|
||||||
if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
|
|
||||||
dnl If iconv() is in a separate libiconv library, then anyone
|
|
||||||
dnl linking with libintl{.a,.so} also needs to link with
|
|
||||||
dnl libiconv.
|
|
||||||
INTLLIBS="-lintl $LIBICONV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
gt_save_LIBS="$LIBS"
|
|
||||||
LIBS="$LIBS $INTLLIBS"
|
|
||||||
AC_CHECK_FUNCS(dcgettext)
|
|
||||||
LIBS="$gt_save_LIBS"
|
|
||||||
|
|
||||||
dnl Search for GNU msgfmt in the PATH.
|
|
||||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
|
||||||
[$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
|
|
||||||
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
|
||||||
|
|
||||||
dnl Search for GNU xgettext in the PATH.
|
|
||||||
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
|
||||||
[$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
|
|
||||||
|
|
||||||
CATOBJEXT=.gmo
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
if test "$CATOBJEXT" = "NONE"; then
|
|
||||||
dnl GNU gettext is not found in the C library.
|
|
||||||
dnl Fall back on GNU gettext library.
|
|
||||||
nls_cv_use_gnu_gettext=yes
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$nls_cv_use_gnu_gettext" = "yes"; then
|
|
||||||
dnl Mark actions used to generate GNU NLS library.
|
|
||||||
INTLOBJS="\$(GETTOBJS)"
|
|
||||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
|
||||||
[$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
|
|
||||||
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
|
||||||
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
|
||||||
[$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
|
|
||||||
AC_SUBST(MSGFMT)
|
|
||||||
BUILD_INCLUDED_LIBINTL=yes
|
|
||||||
USE_INCLUDED_LIBINTL=yes
|
|
||||||
CATOBJEXT=.gmo
|
|
||||||
INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
|
|
||||||
INTLDEPS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a"
|
|
||||||
LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
|
|
||||||
dnl Test whether we really found GNU msgfmt.
|
|
||||||
if test "$GMSGFMT" != ":"; then
|
|
||||||
dnl If it is no GNU msgfmt we define it as : so that the
|
|
||||||
dnl Makefiles still can work.
|
|
||||||
if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
|
|
||||||
: ;
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(
|
|
||||||
[found msgfmt program is not GNU msgfmt; ignore it])
|
|
||||||
GMSGFMT=":"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
|
|
||||||
dnl Test whether we really found GNU xgettext.
|
|
||||||
if test "$XGETTEXT" != ":"; then
|
|
||||||
dnl If it is no GNU xgettext we define it as : so that the
|
|
||||||
dnl Makefiles still can work.
|
|
||||||
if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
|
|
||||||
: ;
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(
|
|
||||||
[found xgettext program is not GNU xgettext; ignore it])
|
|
||||||
XGETTEXT=":"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl We need to process the po/ directory.
|
|
||||||
POSUB=po
|
|
||||||
fi
|
|
||||||
AC_OUTPUT_COMMANDS(
|
|
||||||
[for ac_file in $CONFIG_FILES; do
|
|
||||||
# Support "outfile[:infile[:infile...]]"
|
|
||||||
case "$ac_file" in
|
|
||||||
*:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
|
||||||
esac
|
|
||||||
# PO directories have a Makefile.in generated from Makefile.in.in.
|
|
||||||
case "$ac_file" in */Makefile.in)
|
|
||||||
# Adjust a relative srcdir.
|
|
||||||
ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
|
|
||||||
ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
|
|
||||||
ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
|
|
||||||
# In autoconf-2.13 it is called $ac_given_srcdir.
|
|
||||||
# In autoconf-2.50 it is called $srcdir.
|
|
||||||
test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
|
|
||||||
case "$ac_given_srcdir" in
|
|
||||||
.) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
|
|
||||||
/*) top_srcdir="$ac_given_srcdir" ;;
|
|
||||||
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
|
|
||||||
esac
|
|
||||||
if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
|
|
||||||
rm -f "$ac_dir/POTFILES"
|
|
||||||
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
|
|
||||||
sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
|
|
||||||
test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
|
|
||||||
sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done])
|
|
||||||
|
|
||||||
|
|
||||||
dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
|
|
||||||
dnl to 'yes' because some of the testsuite requires it.
|
|
||||||
if test "$PACKAGE" = gettext; then
|
|
||||||
BUILD_INCLUDED_LIBINTL=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl intl/plural.c is generated from intl/plural.y. It requires bison,
|
|
||||||
dnl because plural.y uses bison specific features. It requires at least
|
|
||||||
dnl bison-1.26 because earlier versions generate a plural.c that doesn't
|
|
||||||
dnl compile.
|
|
||||||
dnl bison is only needed for the maintainer (who touches plural.y). But in
|
|
||||||
dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
|
|
||||||
dnl the rule in general Makefile. Now, some people carelessly touch the
|
|
||||||
dnl files or have a broken "make" program, hence the plural.c rule will
|
|
||||||
dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
|
|
||||||
dnl present or too old.
|
|
||||||
AC_CHECK_PROGS([INTLBISON], [bison])
|
|
||||||
if test -z "$INTLBISON"; then
|
|
||||||
ac_verc_fail=yes
|
|
||||||
else
|
|
||||||
dnl Found it, now check the version.
|
|
||||||
AC_MSG_CHECKING([version of bison])
|
|
||||||
changequote(<<,>>)dnl
|
|
||||||
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
|
|
||||||
case $ac_prog_version in
|
|
||||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
|
||||||
1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
|
|
||||||
changequote([,])dnl
|
|
||||||
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
|
||||||
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
|
||||||
esac
|
|
||||||
AC_MSG_RESULT([$ac_prog_version])
|
|
||||||
fi
|
|
||||||
if test $ac_verc_fail = yes; then
|
|
||||||
INTLBISON=:
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl GCC LOCAL: GMOFILES/POFILES removed as unnecessary.
|
|
||||||
|
|
||||||
dnl Make all variables we use known to autoconf.
|
|
||||||
AC_SUBST(BUILD_INCLUDED_LIBINTL)
|
|
||||||
AC_SUBST(USE_INCLUDED_LIBINTL)
|
|
||||||
AC_SUBST(CATALOGS)
|
|
||||||
AC_SUBST(CATOBJEXT)
|
|
||||||
AC_SUBST(INTLLIBS)
|
|
||||||
AC_SUBST(INTLDEPS)
|
|
||||||
AC_SUBST(INTLOBJS)
|
|
||||||
AC_SUBST(POSUB)
|
|
||||||
dnl GCC LOCAL: Make USE_INCLUDED_LIBINTL visible to C code.
|
|
||||||
if test $USE_INCLUDED_LIBINTL = yes; then
|
|
||||||
AC_DEFINE([USE_INCLUDED_LIBINTL], 1,
|
|
||||||
[Define to use the libintl included with this package instead of any
|
|
||||||
version in the system libraries.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl For backward compatibility. Some configure.ins may be using this.
|
|
||||||
nls_cv_header_intl=
|
|
||||||
nls_cv_header_libgt=
|
|
||||||
|
|
||||||
dnl For backward compatibility. Some Makefiles may be using this.
|
|
||||||
DATADIRNAME=share
|
|
||||||
AC_SUBST(DATADIRNAME)
|
|
||||||
|
|
||||||
dnl For backward compatibility. Some Makefiles may be using this.
|
|
||||||
INSTOBJEXT=.mo
|
|
||||||
AC_SUBST(INSTOBJEXT)
|
|
||||||
|
|
||||||
dnl For backward compatibility. Some Makefiles may be using this.
|
|
||||||
GENCAT=gencat
|
|
||||||
AC_SUBST(GENCAT)
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Usage: Just like AM_WITH_NLS, which see.
|
|
||||||
AC_DEFUN([AM_GNU_GETTEXT],
|
|
||||||
[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_CC])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
|
||||||
AC_REQUIRE([AC_ISC_POSIX])dnl
|
|
||||||
AC_REQUIRE([AC_HEADER_STDC])dnl
|
|
||||||
AC_REQUIRE([AC_C_CONST])dnl
|
|
||||||
AC_REQUIRE([AC_C_INLINE])dnl
|
|
||||||
AC_REQUIRE([AC_TYPE_OFF_T])dnl
|
|
||||||
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
|
|
||||||
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
|
|
||||||
dnl GCC LOCAL: Do not refer to AC_FUNC_MMAP, we have special needs.
|
|
||||||
dnl AC_REQUIRE([AC_FUNC_MMAP])dnl
|
|
||||||
AC_REQUIRE([jm_GLIBC21])dnl
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
|
|
||||||
stdlib.h string.h unistd.h sys/param.h])
|
|
||||||
AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
|
|
||||||
getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
|
|
||||||
strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
|
|
||||||
|
|
||||||
AM_ICONV
|
|
||||||
AM_LANGINFO_CODESET
|
|
||||||
AM_LC_MESSAGES
|
|
||||||
AM_WITH_NLS([$1],[$2],[$3])
|
|
||||||
|
|
||||||
dnl GCC LOCAL: The LINGUAS/ALL_LINGUAS/CATALOGS mess that was here
|
|
||||||
dnl has been torn out and replaced with this more sensible scheme.
|
|
||||||
if test "x$CATOBJEXT" != x; then
|
|
||||||
AC_MSG_CHECKING(for catalogs to be installed)
|
|
||||||
# Look for .po and .gmo files in the source directory.
|
|
||||||
CATALOGS=
|
|
||||||
XLINGUAS=
|
|
||||||
for cat in $srcdir/po/*$CATOBJEXT $srcdir/po/*.po; do
|
|
||||||
# If there aren't any .gmo files the shell will give us the
|
|
||||||
# literal string "../path/to/srcdir/po/*.gmo" which has to be
|
|
||||||
# weeded out.
|
|
||||||
case "$cat" in *\**)
|
|
||||||
continue;;
|
|
||||||
esac
|
|
||||||
# The quadruple backslash is collapsed to a double backslash
|
|
||||||
# by the backticks, then collapsed again by the double quotes,
|
|
||||||
# leaving us with one backslash in the sed expression (right
|
|
||||||
# before the dot that mustn't act as a wildcard). The dot to
|
|
||||||
# be escaped in the second expression is hiding inside CATOBJEXT.
|
|
||||||
cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!$CATOBJEXT!"`
|
|
||||||
lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\$CATOBJEXT!!"`
|
|
||||||
# The user is allowed to set LINGUAS to a list of languages to
|
|
||||||
# install catalogs for. If it's empty that means "all of them."
|
|
||||||
if test "x$LINGUAS" = x; then
|
|
||||||
CATALOGS="$CATALOGS $cat"
|
|
||||||
XLINGUAS="$XLINGUAS $lang"
|
|
||||||
else
|
|
||||||
case "$LINGUAS" in *$lang*)
|
|
||||||
CATALOGS="$CATALOGS $cat"
|
|
||||||
XLINGUAS="$XLINGUAS $lang"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
LINGUAS="$XLINGUAS"
|
|
||||||
AC_MSG_RESULT($LINGUAS)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
|
|
||||||
dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
|
|
||||||
dnl Try to locate is.
|
|
||||||
MKINSTALLDIRS=
|
|
||||||
if test -n "$ac_aux_dir"; then
|
|
||||||
MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
|
|
||||||
fi
|
|
||||||
if test -z "$MKINSTALLDIRS"; then
|
|
||||||
MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
|
|
||||||
fi
|
|
||||||
AC_SUBST(MKINSTALLDIRS)
|
|
||||||
|
|
||||||
dnl Enable libtool support if the surrounding package wishes it.
|
|
||||||
INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
|
|
||||||
AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN(gcc_AC_INITFINI_ARRAY,
|
AC_DEFUN(gcc_AC_INITFINI_ARRAY,
|
||||||
[AC_ARG_ENABLE(initfini-array,
|
[AC_ARG_ENABLE(initfini-array,
|
||||||
[ --enable-initfini-array use .init_array/.fini_array sections],
|
[ --enable-initfini-array use .init_array/.fini_array sections],
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* config.in. Generated automatically from configure.in by autoheader. */
|
/* config.in. Generated automatically from configure.in by autoheader 2.13. */
|
||||||
|
|
||||||
/* Define if using alloca.c. */
|
/* Define if using alloca.c. */
|
||||||
#undef C_ALLOCA
|
#undef C_ALLOCA
|
||||||
|
@ -23,6 +23,9 @@
|
||||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
||||||
#undef HAVE_ALLOCA_H
|
#undef HAVE_ALLOCA_H
|
||||||
|
|
||||||
|
/* Define if you have a working `mmap' system call. */
|
||||||
|
#undef HAVE_MMAP
|
||||||
|
|
||||||
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
||||||
#undef HAVE_SYS_WAIT_H
|
#undef HAVE_SYS_WAIT_H
|
||||||
|
|
||||||
|
@ -108,12 +111,6 @@
|
||||||
/* Define if you have the dup2 function. */
|
/* Define if you have the dup2 function. */
|
||||||
#undef HAVE_DUP2
|
#undef HAVE_DUP2
|
||||||
|
|
||||||
/* Define if you have the feof_unlocked function. */
|
|
||||||
#undef HAVE_FEOF_UNLOCKED
|
|
||||||
|
|
||||||
/* Define if you have the fgets_unlocked function. */
|
|
||||||
#undef HAVE_FGETS_UNLOCKED
|
|
||||||
|
|
||||||
/* Define if you have the fprintf_unlocked function. */
|
/* Define if you have the fprintf_unlocked function. */
|
||||||
#undef HAVE_FPRINTF_UNLOCKED
|
#undef HAVE_FPRINTF_UNLOCKED
|
||||||
|
|
||||||
|
@ -129,14 +126,8 @@
|
||||||
/* Define if you have the getcwd function. */
|
/* Define if you have the getcwd function. */
|
||||||
#undef HAVE_GETCWD
|
#undef HAVE_GETCWD
|
||||||
|
|
||||||
/* Define if you have the getegid function. */
|
/* Define if you have the getpagesize function. */
|
||||||
#undef HAVE_GETEGID
|
#undef HAVE_GETPAGESIZE
|
||||||
|
|
||||||
/* Define if you have the geteuid function. */
|
|
||||||
#undef HAVE_GETEUID
|
|
||||||
|
|
||||||
/* Define if you have the getgid function. */
|
|
||||||
#undef HAVE_GETGID
|
|
||||||
|
|
||||||
/* Define if you have the getrlimit function. */
|
/* Define if you have the getrlimit function. */
|
||||||
#undef HAVE_GETRLIMIT
|
#undef HAVE_GETRLIMIT
|
||||||
|
@ -147,9 +138,6 @@
|
||||||
/* Define if you have the gettimeofday function. */
|
/* Define if you have the gettimeofday function. */
|
||||||
#undef HAVE_GETTIMEOFDAY
|
#undef HAVE_GETTIMEOFDAY
|
||||||
|
|
||||||
/* Define if you have the getuid function. */
|
|
||||||
#undef HAVE_GETUID
|
|
||||||
|
|
||||||
/* Define if you have the kill function. */
|
/* Define if you have the kill function. */
|
||||||
#undef HAVE_KILL
|
#undef HAVE_KILL
|
||||||
|
|
||||||
|
@ -159,9 +147,6 @@
|
||||||
/* Define if you have the mbstowcs function. */
|
/* Define if you have the mbstowcs function. */
|
||||||
#undef HAVE_MBSTOWCS
|
#undef HAVE_MBSTOWCS
|
||||||
|
|
||||||
/* Define if you have the mempcpy function. */
|
|
||||||
#undef HAVE_MEMPCPY
|
|
||||||
|
|
||||||
/* Define if you have the mincore function. */
|
/* Define if you have the mincore function. */
|
||||||
#undef HAVE_MINCORE
|
#undef HAVE_MINCORE
|
||||||
|
|
||||||
|
@ -201,24 +186,15 @@
|
||||||
/* Define if you have the strchr function. */
|
/* Define if you have the strchr function. */
|
||||||
#undef HAVE_STRCHR
|
#undef HAVE_STRCHR
|
||||||
|
|
||||||
/* Define if you have the strdup function. */
|
|
||||||
#undef HAVE_STRDUP
|
|
||||||
|
|
||||||
/* Define if you have the strsignal function. */
|
/* Define if you have the strsignal function. */
|
||||||
#undef HAVE_STRSIGNAL
|
#undef HAVE_STRSIGNAL
|
||||||
|
|
||||||
/* Define if you have the strtoul function. */
|
|
||||||
#undef HAVE_STRTOUL
|
|
||||||
|
|
||||||
/* Define if you have the sysconf function. */
|
/* Define if you have the sysconf function. */
|
||||||
#undef HAVE_SYSCONF
|
#undef HAVE_SYSCONF
|
||||||
|
|
||||||
/* Define if you have the times function. */
|
/* Define if you have the times function. */
|
||||||
#undef HAVE_TIMES
|
#undef HAVE_TIMES
|
||||||
|
|
||||||
/* Define if you have the tsearch function. */
|
|
||||||
#undef HAVE_TSEARCH
|
|
||||||
|
|
||||||
/* Define if you have the wcswidth function. */
|
/* Define if you have the wcswidth function. */
|
||||||
#undef HAVE_WCSWIDTH
|
#undef HAVE_WCSWIDTH
|
||||||
|
|
||||||
|
@ -288,6 +264,9 @@
|
||||||
/* Define if you have the <unistd.h> header file. */
|
/* Define if you have the <unistd.h> header file. */
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define if you have the <values.h> header file. */
|
||||||
|
#undef HAVE_VALUES_H
|
||||||
|
|
||||||
/* Define if you have the <wchar.h> header file. */
|
/* Define if you have the <wchar.h> header file. */
|
||||||
#undef HAVE_WCHAR_H
|
#undef HAVE_WCHAR_H
|
||||||
|
|
||||||
|
@ -529,32 +508,18 @@
|
||||||
the results of comparisons. */
|
the results of comparisons. */
|
||||||
#undef EXTRA_CC_MODES
|
#undef EXTRA_CC_MODES
|
||||||
|
|
||||||
/* Define if you have the iconv() function. */
|
/* Define if you have the stpcpy function */
|
||||||
#undef HAVE_ICONV
|
#undef HAVE_STPCPY
|
||||||
|
|
||||||
/* Define as const if the declaration of iconv() needs const. */
|
/* Define if your locale.h file contains LC_MESSAGES. */
|
||||||
#undef ICONV_CONST
|
|
||||||
|
|
||||||
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
|
|
||||||
#undef HAVE_LANGINFO_CODESET
|
|
||||||
|
|
||||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
|
||||||
#undef HAVE_LC_MESSAGES
|
#undef HAVE_LC_MESSAGES
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native language
|
/* Define to 1 if NLS is requested */
|
||||||
is requested. */
|
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
|
|
||||||
/* Define if you have the <libintl.h> header file. */
|
/* Define as 1 if you have gettext and don't want to use GNU gettext. */
|
||||||
#undef HAVE_LIBINTL_H
|
|
||||||
|
|
||||||
/* Define if the GNU gettext() function is already present or preinstalled. */
|
|
||||||
#undef HAVE_GETTEXT
|
#undef HAVE_GETTEXT
|
||||||
|
|
||||||
/* Define to use the libintl included with this package instead of any
|
|
||||||
version in the system libraries. */
|
|
||||||
#undef USE_INCLUDED_LIBINTL
|
|
||||||
|
|
||||||
/* Define to 1 if installation paths should be looked up in Windows32
|
/* Define to 1 if installation paths should be looked up in Windows32
|
||||||
Registry. Ignored on non windows32 hosts. */
|
Registry. Ignored on non windows32 hosts. */
|
||||||
#undef ENABLE_WIN32_REGISTRY
|
#undef ENABLE_WIN32_REGISTRY
|
||||||
|
|
1730
gcc/configure
vendored
1730
gcc/configure
vendored
File diff suppressed because it is too large
Load diff
|
@ -1217,7 +1217,7 @@ if test "${build}" != "${host}" && test "x$enable_nls" = "xyes"; then
|
||||||
enable_nls=no
|
enable_nls=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AM_GNU_GETTEXT
|
CY_GNU_GETTEXT
|
||||||
|
|
||||||
# Windows32 Registry support for specifying GCC installation paths.
|
# Windows32 Registry support for specifying GCC installation paths.
|
||||||
AC_ARG_ENABLE(win32-registry,
|
AC_ARG_ENABLE(win32-registry,
|
||||||
|
@ -2923,7 +2923,7 @@ all_languages=
|
||||||
all_boot_languages=
|
all_boot_languages=
|
||||||
all_compilers=
|
all_compilers=
|
||||||
all_stagestuff=
|
all_stagestuff=
|
||||||
all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
all_outputs='Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
||||||
# List of language makefile fragments.
|
# List of language makefile fragments.
|
||||||
all_lang_makefiles=
|
all_lang_makefiles=
|
||||||
# Files for gengtype
|
# Files for gengtype
|
||||||
|
@ -3236,11 +3236,6 @@ if test "$symbolic_link" = "ln -s"; then
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else true ; fi
|
else true ; fi
|
||||||
# Avoid having to add intl to our include paths.
|
|
||||||
if test -f intl/libintl.h; then
|
|
||||||
echo creating libintl.h
|
|
||||||
echo '#include "intl/libintl.h"' >libintl.h
|
|
||||||
fi
|
|
||||||
],
|
],
|
||||||
[subdirs='$subdirs'
|
[subdirs='$subdirs'
|
||||||
symbolic_link='$symbolic_link'
|
symbolic_link='$symbolic_link'
|
||||||
|
|
11
gcc/intl.h
11
gcc/intl.h
|
@ -27,17 +27,8 @@
|
||||||
# define setlocale(category, locale) (locale)
|
# define setlocale(category, locale) (locale)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_INCLUDED_LIBINTL
|
|
||||||
# include <intl/libgnuintl.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_LIBINTL_H
|
|
||||||
# include <libintl.h>
|
|
||||||
# else
|
|
||||||
# undef ENABLE_NLS
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
|
#include <libintl.h>
|
||||||
extern void gcc_init_libintl (void);
|
extern void gcc_init_libintl (void);
|
||||||
extern size_t gcc_gettext_width (const char *);
|
extern size_t gcc_gettext_width (const char *);
|
||||||
#else
|
#else
|
||||||
|
|
1190
gcc/intl/ChangeLog
1190
gcc/intl/ChangeLog
File diff suppressed because it is too large
Load diff
|
@ -1,320 +0,0 @@
|
||||||
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
|
||||||
# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU Library General Public License as published
|
|
||||||
# by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Library General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
|
||||||
# License along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
# USA.
|
|
||||||
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
|
||||||
|
|
||||||
srcdir = @srcdir@
|
|
||||||
top_srcdir = @top_srcdir@
|
|
||||||
top_builddir = ..
|
|
||||||
VPATH = @srcdir@
|
|
||||||
|
|
||||||
prefix = @prefix@
|
|
||||||
exec_prefix = @exec_prefix@
|
|
||||||
transform = @program_transform_name@
|
|
||||||
libdir = @libdir@
|
|
||||||
includedir = @includedir@
|
|
||||||
datadir = @datadir@
|
|
||||||
localedir = $(datadir)/locale
|
|
||||||
gettextsrcdir = $(datadir)/gettext/intl
|
|
||||||
aliaspath = $(localedir)
|
|
||||||
subdir = intl
|
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
|
||||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
|
||||||
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
|
|
||||||
|
|
||||||
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
|
||||||
OUTPUT_OPTION = @OUTPUT_OPTION@
|
|
||||||
|
|
||||||
AR = ar
|
|
||||||
CC = @CC@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
YACC = @INTLBISON@ -y -d
|
|
||||||
YFLAGS = --name-prefix=__gettext
|
|
||||||
|
|
||||||
DEFS = -DIN_GCC -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
|
|
||||||
-DLIBDIR=\"$(libdir)\" @DEFS@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
LDFLAGS = @LDFLAGS@
|
|
||||||
|
|
||||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
|
||||||
|
|
||||||
HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
|
|
||||||
COMHDRS = gettext.h gettextP.h hash-string.h
|
|
||||||
SOURCES = $(COMSRCS) intl-compat.c
|
|
||||||
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
|
||||||
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
|
||||||
explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
|
|
||||||
localcharset.c
|
|
||||||
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
|
||||||
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
|
||||||
explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
|
|
||||||
plural.$lo localcharset.$lo
|
|
||||||
GETTOBJS = intl-compat.$lo
|
|
||||||
DISTFILES.common = Makefile.in \
|
|
||||||
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
|
|
||||||
DISTFILES.generated = plural.c
|
|
||||||
DISTFILES.normal = VERSION
|
|
||||||
DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
|
|
||||||
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
|
|
||||||
|
|
||||||
# Libtool's library version information for libintl.
|
|
||||||
# Before making a gettext release, the gettext maintainer must change this
|
|
||||||
# according to the libtool documentation, section "Library interface versions".
|
|
||||||
# Maintainers of other packages that include the intl directory must *not*
|
|
||||||
# change these values.
|
|
||||||
LTV_CURRENT=1
|
|
||||||
LTV_REVISION=1
|
|
||||||
LTV_AGE=0
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .c .y .o .lo .sin .sed
|
|
||||||
.c.o:
|
|
||||||
$(COMPILE) $< $(OUTPUT_OPTION)
|
|
||||||
.c.lo:
|
|
||||||
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
|
||||||
|
|
||||||
# Unless maintaining, suppress (a) smart makes who think they know how to
|
|
||||||
# automake Yacc files and (b) makes who handle VPATH search of generated
|
|
||||||
# files differently than GNU make.
|
|
||||||
.y.c:
|
|
||||||
@MAINT@ $(YACC) $(YFLAGS) --output $@ $<
|
|
||||||
@MAINT@ rm -f $*.h
|
|
||||||
|
|
||||||
.sin.sed:
|
|
||||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
|
|
||||||
mv t-$@ $@
|
|
||||||
|
|
||||||
INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/config -I$(top_srcdir)/../include
|
|
||||||
|
|
||||||
# GCC LOCAL: Removed libintl.h from all-yes.
|
|
||||||
all: all-@USE_INCLUDED_LIBINTL@
|
|
||||||
all-yes: libintl.$la charset.alias ref-add.sed ref-del.sed
|
|
||||||
all-no: all-no-@BUILD_INCLUDED_LIBINTL@
|
|
||||||
all-no-yes: libgnuintl.$la
|
|
||||||
all-no-no:
|
|
||||||
|
|
||||||
libintl.a libgnuintl.a: $(OBJECTS)
|
|
||||||
rm -f $@
|
|
||||||
$(AR) cru $@ $(OBJECTS)
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
libintl.la libgnuintl.la: $(OBJECTS)
|
|
||||||
$(LIBTOOL) --mode=link \
|
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
|
|
||||||
$(OBJECTS) @LIBICONV@ \
|
|
||||||
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
|
||||||
-rpath $(libdir) \
|
|
||||||
-no-undefined
|
|
||||||
|
|
||||||
#GCC LOCAL: Do not install this file.
|
|
||||||
#libintl.h: libgnuintl.h
|
|
||||||
# cp $(srcdir)/libgnuintl.h libintl.h
|
|
||||||
|
|
||||||
charset.alias: config.charset
|
|
||||||
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
|
||||||
mv t-$@ $@
|
|
||||||
|
|
||||||
check: all
|
|
||||||
|
|
||||||
# This installation goal is only used in GNU gettext. Packages which
|
|
||||||
# only use the library should use install instead.
|
|
||||||
|
|
||||||
# We must not install the libintl.h/libintl.a files if we are on a
|
|
||||||
# system which has the GNU gettext() function in its C library or in a
|
|
||||||
# separate library.
|
|
||||||
# If you want to use the one which comes with this version of the
|
|
||||||
# package, you have to use `configure --with-included-gettext'.
|
|
||||||
install: install-exec install-data
|
|
||||||
install-exec: all
|
|
||||||
if test "$(PACKAGE)" = "gettext" \
|
|
||||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
|
||||||
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
|
|
||||||
$(LIBTOOL) --mode=install \
|
|
||||||
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(libdir); \
|
|
||||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
|
||||||
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
|
||||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
|
||||||
orig=$(DESTDIR)$(libdir)/charset.alias; \
|
|
||||||
sed -f ref-add.sed $$orig > $$temp; \
|
|
||||||
$(INSTALL_DATA) $$temp $$dest; \
|
|
||||||
rm -f $$temp; \
|
|
||||||
else \
|
|
||||||
if test @GLIBC21@ = no; then \
|
|
||||||
orig=charset.alias; \
|
|
||||||
sed -f ref-add.sed $$orig > $$temp; \
|
|
||||||
$(INSTALL_DATA) $$temp $$dest; \
|
|
||||||
rm -f $$temp; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(localedir); \
|
|
||||||
test -f $(DESTDIR)$(localedir)/locale.alias \
|
|
||||||
&& orig=$(DESTDIR)$(localedir)/locale.alias \
|
|
||||||
|| orig=$(srcdir)/locale.alias; \
|
|
||||||
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
|
||||||
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
|
||||||
sed -f ref-add.sed $$orig > $$temp; \
|
|
||||||
$(INSTALL_DATA) $$temp $$dest; \
|
|
||||||
rm -f $$temp; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
install-data: all
|
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
|
||||||
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
|
||||||
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
|
|
||||||
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
|
|
||||||
dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
|
|
||||||
for file in $$dists; do \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
|
||||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
|
||||||
done; \
|
|
||||||
chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
|
|
||||||
dists="$(DISTFILES.generated)"; \
|
|
||||||
for file in $$dists; do \
|
|
||||||
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
|
||||||
$(INSTALL_DATA) $$dir/$$file \
|
|
||||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
|
||||||
done; \
|
|
||||||
dists="$(DISTFILES.obsolete)"; \
|
|
||||||
for file in $$dists; do \
|
|
||||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
|
||||||
done; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Define this as empty until I found a useful application.
|
|
||||||
installcheck:
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
if test "$(PACKAGE)" = "gettext" \
|
|
||||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
|
||||||
rm -f $(DESTDIR)$(includedir)/libintl.h; \
|
|
||||||
$(LIBTOOL) --mode=uninstall \
|
|
||||||
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
|
||||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
|
||||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
|
||||||
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
|
||||||
sed -f ref-del.sed $$dest > $$temp; \
|
|
||||||
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
|
||||||
rm -f $$dest; \
|
|
||||||
else \
|
|
||||||
$(INSTALL_DATA) $$temp $$dest; \
|
|
||||||
fi; \
|
|
||||||
rm -f $$temp; \
|
|
||||||
fi; \
|
|
||||||
if test -f $(DESTDIR)$(localedir)/locale.alias; then \
|
|
||||||
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
|
||||||
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
|
||||||
sed -f ref-del.sed $$dest > $$temp; \
|
|
||||||
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
|
||||||
rm -f $$dest; \
|
|
||||||
else \
|
|
||||||
$(INSTALL_DATA) $$temp $$dest; \
|
|
||||||
fi; \
|
|
||||||
rm -f $$temp; \
|
|
||||||
fi; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
|
||||||
for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
|
|
||||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
|
||||||
done; \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
info dvi:
|
|
||||||
|
|
||||||
$(OBJECTS): ../config.h libgnuintl.h
|
|
||||||
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
|
|
||||||
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
|
|
||||||
|
|
||||||
tags: TAGS
|
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES)
|
|
||||||
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
|
||||||
|
|
||||||
id: ID
|
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
|
||||||
here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
|
|
||||||
|
|
||||||
|
|
||||||
mostlyclean:
|
|
||||||
rm -f *.a *.la *.o *.lo core core.*
|
|
||||||
rm -f libintl.h charset.alias ref-add.sed ref-del.sed
|
|
||||||
rm -f -r .libs _libs
|
|
||||||
|
|
||||||
clean: mostlyclean
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
rm -f Makefile ID TAGS
|
|
||||||
if test "$(PACKAGE)" = gettext; then \
|
|
||||||
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
|
||||||
else \
|
|
||||||
: ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
maintainer-clean: distclean
|
|
||||||
@echo "This command is intended for maintainers to use;"
|
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
|
||||||
|
|
||||||
|
|
||||||
# GNU gettext needs not contain the file `VERSION' but contains some
|
|
||||||
# other files which should not be distributed in other packages.
|
|
||||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
|
||||||
dist distdir: Makefile
|
|
||||||
if test "$(PACKAGE)" = gettext; then \
|
|
||||||
additional="$(DISTFILES.gettext)"; \
|
|
||||||
else \
|
|
||||||
additional="$(DISTFILES.normal)"; \
|
|
||||||
fi; \
|
|
||||||
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
|
|
||||||
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
|
|
||||||
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
|
||||||
ln $$dir/$$file $(distdir) 2> /dev/null \
|
|
||||||
|| cp -p $$dir/$$file $(distdir); \
|
|
||||||
done
|
|
||||||
|
|
||||||
Makefile: Makefile.in ../config.status
|
|
||||||
cd .. \
|
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
||||||
.NOEXPORT:
|
|
|
@ -1 +0,0 @@
|
||||||
GNU gettext library from gettext-0.10.40
|
|
|
@ -1,438 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
# Output a system dependent table of character encoding aliases.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU Library General Public License as published
|
|
||||||
# by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Library General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
|
||||||
# License along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
# USA.
|
|
||||||
#
|
|
||||||
# The table consists of lines of the form
|
|
||||||
# ALIAS CANONICAL
|
|
||||||
#
|
|
||||||
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
|
||||||
# ALIAS is compared in a case sensitive way.
|
|
||||||
#
|
|
||||||
# CANONICAL is the GNU canonical name for this character encoding.
|
|
||||||
# It must be an encoding supported by libiconv. Support by GNU libc is
|
|
||||||
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
|
||||||
# MIME charset name is preferred.
|
|
||||||
# The current list of GNU canonical charset names is as follows.
|
|
||||||
#
|
|
||||||
# name used by which systems a MIME name?
|
|
||||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
|
||||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
|
||||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
|
||||||
# ISO-8859-3 glibc yes
|
|
||||||
# ISO-8859-4 osf solaris freebsd yes
|
|
||||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
|
||||||
# ISO-8859-6 glibc aix hpux solaris yes
|
|
||||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
|
||||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
|
||||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
|
||||||
# ISO-8859-13 glibc
|
|
||||||
# ISO-8859-15 glibc aix osf solaris freebsd
|
|
||||||
# KOI8-R glibc solaris freebsd yes
|
|
||||||
# KOI8-U glibc freebsd yes
|
|
||||||
# CP437 dos
|
|
||||||
# CP775 dos
|
|
||||||
# CP850 aix osf dos
|
|
||||||
# CP852 dos
|
|
||||||
# CP855 dos
|
|
||||||
# CP856 aix
|
|
||||||
# CP857 dos
|
|
||||||
# CP861 dos
|
|
||||||
# CP862 dos
|
|
||||||
# CP864 dos
|
|
||||||
# CP865 dos
|
|
||||||
# CP866 freebsd dos
|
|
||||||
# CP869 dos
|
|
||||||
# CP874 win32 dos
|
|
||||||
# CP922 aix
|
|
||||||
# CP932 aix win32 dos
|
|
||||||
# CP943 aix
|
|
||||||
# CP949 osf win32 dos
|
|
||||||
# CP950 win32 dos
|
|
||||||
# CP1046 aix
|
|
||||||
# CP1124 aix
|
|
||||||
# CP1129 aix
|
|
||||||
# CP1250 win32
|
|
||||||
# CP1251 glibc win32
|
|
||||||
# CP1252 aix win32
|
|
||||||
# CP1253 win32
|
|
||||||
# CP1254 win32
|
|
||||||
# CP1255 win32
|
|
||||||
# CP1256 win32
|
|
||||||
# CP1257 win32
|
|
||||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
|
||||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
|
||||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
|
||||||
# EUC-TW glibc aix hpux irix osf solaris
|
|
||||||
# BIG5 glibc aix hpux osf solaris freebsd yes
|
|
||||||
# BIG5-HKSCS glibc
|
|
||||||
# GBK aix osf win32 dos
|
|
||||||
# GB18030 glibc
|
|
||||||
# SHIFT_JIS hpux osf solaris freebsd yes
|
|
||||||
# JOHAB glibc win32
|
|
||||||
# TIS-620 glibc aix hpux osf solaris
|
|
||||||
# VISCII glibc yes
|
|
||||||
# HP-ROMAN8 hpux
|
|
||||||
# HP-ARABIC8 hpux
|
|
||||||
# HP-GREEK8 hpux
|
|
||||||
# HP-HEBREW8 hpux
|
|
||||||
# HP-TURKISH8 hpux
|
|
||||||
# HP-KANA8 hpux
|
|
||||||
# DEC-KANJI osf
|
|
||||||
# DEC-HANYU osf
|
|
||||||
# UTF-8 glibc aix hpux osf solaris yes
|
|
||||||
#
|
|
||||||
# Note: Names which are not marked as being a MIME name should not be used in
|
|
||||||
# Internet protocols for information interchange (mail, news, etc.).
|
|
||||||
#
|
|
||||||
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
|
||||||
# must understand both names and treat them as equivalent.
|
|
||||||
#
|
|
||||||
# The first argument passed to this file is the canonical host specification,
|
|
||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
|
||||||
# or
|
|
||||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
|
||||||
|
|
||||||
host="$1"
|
|
||||||
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
|
||||||
echo "# This file contains a table of character encoding aliases,"
|
|
||||||
echo "# suitable for operating system '${os}'."
|
|
||||||
echo "# It was automatically generated from config.charset."
|
|
||||||
# List of references, updated during installation:
|
|
||||||
echo "# Packages using this file: "
|
|
||||||
case "$os" in
|
|
||||||
linux* | *-gnu*)
|
|
||||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
|
||||||
# because glibc has iconv and both glibc and libiconv support all
|
|
||||||
# GNU canonical names directly. Therefore, the Makefile does not
|
|
||||||
# need to install the alias file at all.
|
|
||||||
# The following applies only to glibc-2.0.x and older libcs.
|
|
||||||
echo "ISO_646.IRV:1983 ASCII"
|
|
||||||
;;
|
|
||||||
aix*)
|
|
||||||
echo "ISO8859-1 ISO-8859-1"
|
|
||||||
echo "ISO8859-2 ISO-8859-2"
|
|
||||||
echo "ISO8859-5 ISO-8859-5"
|
|
||||||
echo "ISO8859-6 ISO-8859-6"
|
|
||||||
echo "ISO8859-7 ISO-8859-7"
|
|
||||||
echo "ISO8859-8 ISO-8859-8"
|
|
||||||
echo "ISO8859-9 ISO-8859-9"
|
|
||||||
echo "ISO8859-15 ISO-8859-15"
|
|
||||||
echo "IBM-850 CP850"
|
|
||||||
echo "IBM-856 CP856"
|
|
||||||
echo "IBM-921 ISO-8859-13"
|
|
||||||
echo "IBM-922 CP922"
|
|
||||||
echo "IBM-932 CP932"
|
|
||||||
echo "IBM-943 CP943"
|
|
||||||
echo "IBM-1046 CP1046"
|
|
||||||
echo "IBM-1124 CP1124"
|
|
||||||
echo "IBM-1129 CP1129"
|
|
||||||
echo "IBM-1252 CP1252"
|
|
||||||
echo "IBM-eucCN GB2312"
|
|
||||||
echo "IBM-eucJP EUC-JP"
|
|
||||||
echo "IBM-eucKR EUC-KR"
|
|
||||||
echo "IBM-eucTW EUC-TW"
|
|
||||||
echo "big5 BIG5"
|
|
||||||
echo "GBK GBK"
|
|
||||||
echo "TIS-620 TIS-620"
|
|
||||||
echo "UTF-8 UTF-8"
|
|
||||||
;;
|
|
||||||
hpux*)
|
|
||||||
echo "iso88591 ISO-8859-1"
|
|
||||||
echo "iso88592 ISO-8859-2"
|
|
||||||
echo "iso88595 ISO-8859-5"
|
|
||||||
echo "iso88596 ISO-8859-6"
|
|
||||||
echo "iso88597 ISO-8859-7"
|
|
||||||
echo "iso88598 ISO-8859-8"
|
|
||||||
echo "iso88599 ISO-8859-9"
|
|
||||||
echo "iso885915 ISO-8859-15"
|
|
||||||
echo "roman8 HP-ROMAN8"
|
|
||||||
echo "arabic8 HP-ARABIC8"
|
|
||||||
echo "greek8 HP-GREEK8"
|
|
||||||
echo "hebrew8 HP-HEBREW8"
|
|
||||||
echo "turkish8 HP-TURKISH8"
|
|
||||||
echo "kana8 HP-KANA8"
|
|
||||||
echo "tis620 TIS-620"
|
|
||||||
echo "big5 BIG5"
|
|
||||||
echo "eucJP EUC-JP"
|
|
||||||
echo "eucKR EUC-KR"
|
|
||||||
echo "eucTW EUC-TW"
|
|
||||||
echo "hp15CN GB2312"
|
|
||||||
#echo "ccdc ?" # what is this?
|
|
||||||
echo "SJIS SHIFT_JIS"
|
|
||||||
echo "utf8 UTF-8"
|
|
||||||
;;
|
|
||||||
irix*)
|
|
||||||
echo "ISO8859-1 ISO-8859-1"
|
|
||||||
echo "ISO8859-2 ISO-8859-2"
|
|
||||||
echo "ISO8859-5 ISO-8859-5"
|
|
||||||
echo "ISO8859-7 ISO-8859-7"
|
|
||||||
echo "ISO8859-9 ISO-8859-9"
|
|
||||||
echo "eucCN GB2312"
|
|
||||||
echo "eucJP EUC-JP"
|
|
||||||
echo "eucKR EUC-KR"
|
|
||||||
echo "eucTW EUC-TW"
|
|
||||||
;;
|
|
||||||
osf*)
|
|
||||||
echo "ISO8859-1 ISO-8859-1"
|
|
||||||
echo "ISO8859-2 ISO-8859-2"
|
|
||||||
echo "ISO8859-4 ISO-8859-4"
|
|
||||||
echo "ISO8859-5 ISO-8859-5"
|
|
||||||
echo "ISO8859-7 ISO-8859-7"
|
|
||||||
echo "ISO8859-8 ISO-8859-8"
|
|
||||||
echo "ISO8859-9 ISO-8859-9"
|
|
||||||
echo "ISO8859-15 ISO-8859-15"
|
|
||||||
echo "cp850 CP850"
|
|
||||||
echo "big5 BIG5"
|
|
||||||
echo "dechanyu DEC-HANYU"
|
|
||||||
echo "dechanzi GB2312"
|
|
||||||
echo "deckanji DEC-KANJI"
|
|
||||||
echo "deckorean EUC-KR"
|
|
||||||
echo "eucJP EUC-JP"
|
|
||||||
echo "eucKR EUC-KR"
|
|
||||||
echo "eucTW EUC-TW"
|
|
||||||
echo "GBK GBK"
|
|
||||||
echo "KSC5601 CP949"
|
|
||||||
echo "sdeckanji EUC-JP"
|
|
||||||
echo "SJIS SHIFT_JIS"
|
|
||||||
echo "TACTIS TIS-620"
|
|
||||||
echo "UTF-8 UTF-8"
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
echo "646 ASCII"
|
|
||||||
echo "ISO8859-1 ISO-8859-1"
|
|
||||||
echo "ISO8859-2 ISO-8859-2"
|
|
||||||
echo "ISO8859-4 ISO-8859-4"
|
|
||||||
echo "ISO8859-5 ISO-8859-5"
|
|
||||||
echo "ISO8859-6 ISO-8859-6"
|
|
||||||
echo "ISO8859-7 ISO-8859-7"
|
|
||||||
echo "ISO8859-8 ISO-8859-8"
|
|
||||||
echo "ISO8859-9 ISO-8859-9"
|
|
||||||
echo "ISO8859-15 ISO-8859-15"
|
|
||||||
echo "koi8-r KOI8-R"
|
|
||||||
echo "BIG5 BIG5"
|
|
||||||
echo "gb2312 GB2312"
|
|
||||||
echo "cns11643 EUC-TW"
|
|
||||||
echo "5601 EUC-KR"
|
|
||||||
echo "eucJP EUC-JP"
|
|
||||||
echo "PCK SHIFT_JIS"
|
|
||||||
echo "TIS620.2533 TIS-620"
|
|
||||||
#echo "sun_eu_greek ?" # what is this?
|
|
||||||
echo "UTF-8 UTF-8"
|
|
||||||
;;
|
|
||||||
freebsd*)
|
|
||||||
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
|
||||||
# localcharset.c falls back to using the full locale name
|
|
||||||
# from the environment variables.
|
|
||||||
echo "C ASCII"
|
|
||||||
echo "US-ASCII ASCII"
|
|
||||||
for l in la_LN lt_LN; do
|
|
||||||
echo "$l.ASCII ASCII"
|
|
||||||
done
|
|
||||||
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
|
||||||
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
|
|
||||||
lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
|
|
||||||
echo "$l.ISO_8859-1 ISO-8859-1"
|
|
||||||
echo "$l.DIS_8859-15 ISO-8859-15"
|
|
||||||
done
|
|
||||||
for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
|
|
||||||
echo "$l.ISO_8859-2 ISO-8859-2"
|
|
||||||
done
|
|
||||||
for l in la_LN lt_LT; do
|
|
||||||
echo "$l.ISO_8859-4 ISO-8859-4"
|
|
||||||
done
|
|
||||||
for l in ru_RU ru_SU; do
|
|
||||||
echo "$l.KOI8-R KOI8-R"
|
|
||||||
echo "$l.ISO_8859-5 ISO-8859-5"
|
|
||||||
echo "$l.CP866 CP866"
|
|
||||||
done
|
|
||||||
echo "uk_UA.KOI8-U KOI8-U"
|
|
||||||
echo "zh_TW.BIG5 BIG5"
|
|
||||||
echo "zh_TW.Big5 BIG5"
|
|
||||||
echo "zh_CN.EUC GB2312"
|
|
||||||
echo "ja_JP.EUC EUC-JP"
|
|
||||||
echo "ja_JP.SJIS SHIFT_JIS"
|
|
||||||
echo "ja_JP.Shift_JIS SHIFT_JIS"
|
|
||||||
echo "ko_KR.EUC EUC-KR"
|
|
||||||
;;
|
|
||||||
beos*)
|
|
||||||
# BeOS has a single locale, and it has UTF-8 encoding.
|
|
||||||
echo "* UTF-8"
|
|
||||||
;;
|
|
||||||
msdosdjgpp*)
|
|
||||||
# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
|
|
||||||
# localcharset.c falls back to using the full locale name
|
|
||||||
# from the environment variables.
|
|
||||||
echo "#"
|
|
||||||
echo "# The encodings given here may not all be correct."
|
|
||||||
echo "# If you find that the encoding given for your language and"
|
|
||||||
echo "# country is not the one your DOS machine actually uses, just"
|
|
||||||
echo "# correct it in this file, and send a mail to"
|
|
||||||
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
|
||||||
echo "# and Bruno Haible <haible@clisp.cons.org>."
|
|
||||||
echo "#"
|
|
||||||
echo "C ASCII"
|
|
||||||
# ISO-8859-1 languages
|
|
||||||
echo "ca CP850"
|
|
||||||
echo "ca_ES CP850"
|
|
||||||
echo "da CP865" # not CP850 ??
|
|
||||||
echo "da_DK CP865" # not CP850 ??
|
|
||||||
echo "de CP850"
|
|
||||||
echo "de_AT CP850"
|
|
||||||
echo "de_CH CP850"
|
|
||||||
echo "de_DE CP850"
|
|
||||||
echo "en CP850"
|
|
||||||
echo "en_AU CP850" # not CP437 ??
|
|
||||||
echo "en_CA CP850"
|
|
||||||
echo "en_GB CP850"
|
|
||||||
echo "en_NZ CP437"
|
|
||||||
echo "en_US CP437"
|
|
||||||
echo "en_ZA CP850" # not CP437 ??
|
|
||||||
echo "es CP850"
|
|
||||||
echo "es_AR CP850"
|
|
||||||
echo "es_BO CP850"
|
|
||||||
echo "es_CL CP850"
|
|
||||||
echo "es_CO CP850"
|
|
||||||
echo "es_CR CP850"
|
|
||||||
echo "es_CU CP850"
|
|
||||||
echo "es_DO CP850"
|
|
||||||
echo "es_EC CP850"
|
|
||||||
echo "es_ES CP850"
|
|
||||||
echo "es_GT CP850"
|
|
||||||
echo "es_HN CP850"
|
|
||||||
echo "es_MX CP850"
|
|
||||||
echo "es_NI CP850"
|
|
||||||
echo "es_PA CP850"
|
|
||||||
echo "es_PY CP850"
|
|
||||||
echo "es_PE CP850"
|
|
||||||
echo "es_SV CP850"
|
|
||||||
echo "es_UY CP850"
|
|
||||||
echo "es_VE CP850"
|
|
||||||
echo "et CP850"
|
|
||||||
echo "et_EE CP850"
|
|
||||||
echo "eu CP850"
|
|
||||||
echo "eu_ES CP850"
|
|
||||||
echo "fi CP850"
|
|
||||||
echo "fi_FI CP850"
|
|
||||||
echo "fr CP850"
|
|
||||||
echo "fr_BE CP850"
|
|
||||||
echo "fr_CA CP850"
|
|
||||||
echo "fr_CH CP850"
|
|
||||||
echo "fr_FR CP850"
|
|
||||||
echo "ga CP850"
|
|
||||||
echo "ga_IE CP850"
|
|
||||||
echo "gd CP850"
|
|
||||||
echo "gd_GB CP850"
|
|
||||||
echo "gl CP850"
|
|
||||||
echo "gl_ES CP850"
|
|
||||||
echo "id CP850" # not CP437 ??
|
|
||||||
echo "id_ID CP850" # not CP437 ??
|
|
||||||
echo "is CP861" # not CP850 ??
|
|
||||||
echo "is_IS CP861" # not CP850 ??
|
|
||||||
echo "it CP850"
|
|
||||||
echo "it_CH CP850"
|
|
||||||
echo "it_IT CP850"
|
|
||||||
echo "lt CP775"
|
|
||||||
echo "lt_LT CP775"
|
|
||||||
echo "lv CP775"
|
|
||||||
echo "lv_LV CP775"
|
|
||||||
echo "nb CP865" # not CP850 ??
|
|
||||||
echo "nb_NO CP865" # not CP850 ??
|
|
||||||
echo "nl CP850"
|
|
||||||
echo "nl_BE CP850"
|
|
||||||
echo "nl_NL CP850"
|
|
||||||
echo "nn CP865" # not CP850 ??
|
|
||||||
echo "nn_NO CP865" # not CP850 ??
|
|
||||||
echo "no CP865" # not CP850 ??
|
|
||||||
echo "no_NO CP865" # not CP850 ??
|
|
||||||
echo "pt CP850"
|
|
||||||
echo "pt_BR CP850"
|
|
||||||
echo "pt_PT CP850"
|
|
||||||
echo "sv CP850"
|
|
||||||
echo "sv_SE CP850"
|
|
||||||
# ISO-8859-2 languages
|
|
||||||
echo "cs CP852"
|
|
||||||
echo "cs_CZ CP852"
|
|
||||||
echo "hr CP852"
|
|
||||||
echo "hr_HR CP852"
|
|
||||||
echo "hu CP852"
|
|
||||||
echo "hu_HU CP852"
|
|
||||||
echo "pl CP852"
|
|
||||||
echo "pl_PL CP852"
|
|
||||||
echo "ro CP852"
|
|
||||||
echo "ro_RO CP852"
|
|
||||||
echo "sk CP852"
|
|
||||||
echo "sk_SK CP852"
|
|
||||||
echo "sl CP852"
|
|
||||||
echo "sl_SI CP852"
|
|
||||||
echo "sq CP852"
|
|
||||||
echo "sq_AL CP852"
|
|
||||||
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
|
||||||
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
|
||||||
# ISO-8859-3 languages
|
|
||||||
echo "mt CP850"
|
|
||||||
echo "mt_MT CP850"
|
|
||||||
# ISO-8859-5 languages
|
|
||||||
echo "be CP866"
|
|
||||||
echo "be_BE CP866"
|
|
||||||
echo "bg CP866" # not CP855 ??
|
|
||||||
echo "bg_BG CP866" # not CP855 ??
|
|
||||||
echo "mk CP866" # not CP855 ??
|
|
||||||
echo "mk_MK CP866" # not CP855 ??
|
|
||||||
echo "ru KOI8-R" # not CP866 ??
|
|
||||||
echo "ru_RU KOI8-R" # not CP866 ??
|
|
||||||
# ISO-8859-6 languages
|
|
||||||
echo "ar CP864"
|
|
||||||
echo "ar_AE CP864"
|
|
||||||
echo "ar_DZ CP864"
|
|
||||||
echo "ar_EG CP864"
|
|
||||||
echo "ar_IQ CP864"
|
|
||||||
echo "ar_IR CP864"
|
|
||||||
echo "ar_JO CP864"
|
|
||||||
echo "ar_KW CP864"
|
|
||||||
echo "ar_MA CP864"
|
|
||||||
echo "ar_OM CP864"
|
|
||||||
echo "ar_QA CP864"
|
|
||||||
echo "ar_SA CP864"
|
|
||||||
echo "ar_SY CP864"
|
|
||||||
# ISO-8859-7 languages
|
|
||||||
echo "el CP869"
|
|
||||||
echo "el_GR CP869"
|
|
||||||
# ISO-8859-8 languages
|
|
||||||
echo "he CP862"
|
|
||||||
echo "he_IL CP862"
|
|
||||||
# ISO-8859-9 languages
|
|
||||||
echo "tr CP857"
|
|
||||||
echo "tr_TR CP857"
|
|
||||||
# Japanese
|
|
||||||
echo "ja CP932"
|
|
||||||
echo "ja_JP CP932"
|
|
||||||
# Chinese
|
|
||||||
echo "zh_CN GBK"
|
|
||||||
echo "zh_TW CP950" # not CP938 ??
|
|
||||||
# Korean
|
|
||||||
echo "kr CP949" # not CP934 ??
|
|
||||||
echo "kr_KR CP949" # not CP934 ??
|
|
||||||
# Thai
|
|
||||||
echo "th CP874"
|
|
||||||
echo "th_TH CP874"
|
|
||||||
# Other
|
|
||||||
echo "eo CP850"
|
|
||||||
echo "eo_EO CP850"
|
|
||||||
;;
|
|
||||||
esac
|
|
|
@ -1,166 +0,0 @@
|
||||||
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
|
||||||
Library.
|
|
||||||
Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU Library General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "libgnuintl.h"
|
|
||||||
#include "gettextP.h"
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
|
||||||
|
|
||||||
/* This file redirects the gettext functions (without prefix or suffix) to
|
|
||||||
those defined in the included GNU gettext library (with "__" suffix).
|
|
||||||
It is compiled into libintl when the included GNU gettext library is
|
|
||||||
configured --with-included-gettext.
|
|
||||||
|
|
||||||
This redirection works also in the case that the system C library or
|
|
||||||
the system libintl library contain gettext/textdomain/... functions.
|
|
||||||
If it didn't, we would need to add preprocessor level redirections to
|
|
||||||
libgnuintl.h of the following form:
|
|
||||||
|
|
||||||
# define gettext gettext__
|
|
||||||
# define dgettext dgettext__
|
|
||||||
# define dcgettext dcgettext__
|
|
||||||
# define ngettext ngettext__
|
|
||||||
# define dngettext dngettext__
|
|
||||||
# define dcngettext dcngettext__
|
|
||||||
# define textdomain textdomain__
|
|
||||||
# define bindtextdomain bindtextdomain__
|
|
||||||
# define bind_textdomain_codeset bind_textdomain_codeset__
|
|
||||||
|
|
||||||
How does this redirection work? There are two cases.
|
|
||||||
A. When libintl.a is linked into an executable, it works because
|
|
||||||
functions defined in the executable always override functions in
|
|
||||||
the shared libraries.
|
|
||||||
B. When libintl.so is used, it works because
|
|
||||||
1. those systems defining gettext/textdomain/... in the C library
|
|
||||||
(namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
|
|
||||||
ELF systems and define these symbols as weak, thus explicitly
|
|
||||||
letting other shared libraries override it.
|
|
||||||
2. those systems defining gettext/textdomain/... in a standalone
|
|
||||||
libintl.so library (namely, Solaris 2.3 and newer) have this
|
|
||||||
shared library in /usr/lib, and the linker will search /usr/lib
|
|
||||||
*after* the directory where the GNU gettext library is installed.
|
|
||||||
|
|
||||||
A third case, namely when libintl.a is linked into a shared library
|
|
||||||
whose name is not libintl.so, is not supported. In this case, on
|
|
||||||
Solaris, when -lintl precedes the linker option for the shared library
|
|
||||||
containing GNU gettext, the system's gettext would indeed override
|
|
||||||
the GNU gettext. Anyone doing this kind of stuff must be clever enough
|
|
||||||
to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
|
|
||||||
command line. */
|
|
||||||
|
|
||||||
|
|
||||||
#undef gettext
|
|
||||||
#undef dgettext
|
|
||||||
#undef dcgettext
|
|
||||||
#undef ngettext
|
|
||||||
#undef dngettext
|
|
||||||
#undef dcngettext
|
|
||||||
#undef textdomain
|
|
||||||
#undef bindtextdomain
|
|
||||||
#undef bind_textdomain_codeset
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
gettext (msgid)
|
|
||||||
const char *msgid;
|
|
||||||
{
|
|
||||||
return gettext__ (msgid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
dgettext (domainname, msgid)
|
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
{
|
|
||||||
return dgettext__ (domainname, msgid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
dcgettext (domainname, msgid, category)
|
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
int category;
|
|
||||||
{
|
|
||||||
return dcgettext__ (domainname, msgid, category);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
ngettext (msgid1, msgid2, n)
|
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
|
||||||
return ngettext__ (msgid1, msgid2, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
dngettext (domainname, msgid1, msgid2, n)
|
|
||||||
const char *domainname;
|
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
|
||||||
return dngettext__ (domainname, msgid1, msgid2, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
dcngettext (domainname, msgid1, msgid2, n, category)
|
|
||||||
const char *domainname;
|
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
int category;
|
|
||||||
{
|
|
||||||
return dcngettext__ (domainname, msgid1, msgid2, n, category);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
textdomain (domainname)
|
|
||||||
const char *domainname;
|
|
||||||
{
|
|
||||||
return textdomain__ (domainname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
bindtextdomain (domainname, dirname)
|
|
||||||
const char *domainname;
|
|
||||||
const char *dirname;
|
|
||||||
{
|
|
||||||
return bindtextdomain__ (domainname, dirname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
bind_textdomain_codeset (domainname, codeset)
|
|
||||||
const char *domainname;
|
|
||||||
const char *codeset;
|
|
||||||
{
|
|
||||||
return bind_textdomain_codeset__ (domainname, codeset);
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/* Convenience header for conditional use of GNU <libintl.h>.
|
|
||||||
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU Library General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _LIBGETTEXT_H
|
|
||||||
#define _LIBGETTEXT_H 1
|
|
||||||
|
|
||||||
/* NLS can be disabled through the configure --disable-nls option. */
|
|
||||||
#if ENABLE_NLS
|
|
||||||
|
|
||||||
/* Get declarations of GNU message catalog functions. */
|
|
||||||
# include <libintl.h>
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
# define gettext(Msgid) (Msgid)
|
|
||||||
# define dgettext(Domainname, Msgid) (Msgid)
|
|
||||||
# define dcgettext(Domainname, Msgid, Category) (Msgid)
|
|
||||||
# define ngettext(Msgid1, Msgid2, N) \
|
|
||||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
|
||||||
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
|
||||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
|
||||||
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
|
||||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
|
||||||
# define textdomain(Domainname) ((char *) (Domainname))
|
|
||||||
# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
|
|
||||||
# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For automatical extraction of messages sometimes no real
|
|
||||||
translation is needed. Instead the string itself is the result. */
|
|
||||||
#define gettext_noop(Str) (Str)
|
|
||||||
|
|
||||||
#endif /* _LIBGETTEXT_H */
|
|
|
@ -1,128 +0,0 @@
|
||||||
/* Message catalogs for internationalization.
|
|
||||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU Library General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _LIBINTL_H
|
|
||||||
#define _LIBINTL_H 1
|
|
||||||
|
|
||||||
#include <locale.h>
|
|
||||||
|
|
||||||
/* The LC_MESSAGES locale category is the category used by the functions
|
|
||||||
gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
|
|
||||||
On systems that don't define it, use an arbitrary value instead.
|
|
||||||
On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e.
|
|
||||||
this file!) and then only defines LC_MESSAGES. To avoid a redefinition
|
|
||||||
warning, don't define LC_MESSAGES in this case. */
|
|
||||||
#if !defined LC_MESSAGES && !defined __LOCALE_H
|
|
||||||
# define LC_MESSAGES 1729
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We define an additional symbol to signal that we use the GNU
|
|
||||||
implementation of gettext. */
|
|
||||||
#define __USE_GNU_GETTEXT 1
|
|
||||||
|
|
||||||
/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
|
|
||||||
precedence over _conio_gettext. */
|
|
||||||
#ifdef __DJGPP__
|
|
||||||
# undef gettext
|
|
||||||
# define gettext gettext
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if __STDC__ || defined __cplusplus
|
|
||||||
# define PARAMS(args) args
|
|
||||||
# else
|
|
||||||
# define PARAMS(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
|
||||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
|
||||||
text). */
|
|
||||||
extern char *gettext PARAMS ((const char *__msgid));
|
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
|
||||||
LC_MESSAGES locale. */
|
|
||||||
extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
|
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
|
||||||
locale. */
|
|
||||||
extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
|
|
||||||
int __category));
|
|
||||||
|
|
||||||
|
|
||||||
/* Similar to `gettext' but select the plural form corresponding to the
|
|
||||||
number N. */
|
|
||||||
extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
|
|
||||||
unsigned long int __n));
|
|
||||||
|
|
||||||
/* Similar to `dgettext' but select the plural form corresponding to the
|
|
||||||
number N. */
|
|
||||||
extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1,
|
|
||||||
const char *__msgid2, unsigned long int __n));
|
|
||||||
|
|
||||||
/* Similar to `dcgettext' but select the plural form corresponding to the
|
|
||||||
number N. */
|
|
||||||
extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1,
|
|
||||||
const char *__msgid2, unsigned long int __n,
|
|
||||||
int __category));
|
|
||||||
|
|
||||||
|
|
||||||
/* Set the current default message catalog to DOMAINNAME.
|
|
||||||
If DOMAINNAME is null, return the current default.
|
|
||||||
If DOMAINNAME is "", reset to the default of "messages". */
|
|
||||||
extern char *textdomain PARAMS ((const char *__domainname));
|
|
||||||
|
|
||||||
/* Specify that the DOMAINNAME message catalog will be found
|
|
||||||
in DIRNAME rather than in the system locale data base. */
|
|
||||||
extern char *bindtextdomain PARAMS ((const char *__domainname,
|
|
||||||
const char *__dirname));
|
|
||||||
|
|
||||||
/* Specify the character encoding in which the messages from the
|
|
||||||
DOMAINNAME message catalog will be returned. */
|
|
||||||
extern char *bind_textdomain_codeset PARAMS ((const char *__domainname,
|
|
||||||
const char *__codeset));
|
|
||||||
|
|
||||||
|
|
||||||
/* Optimized version of the functions above. */
|
|
||||||
#if defined __OPTIMIZED
|
|
||||||
/* These are macros, but could also be inline functions. */
|
|
||||||
|
|
||||||
# define gettext(msgid) \
|
|
||||||
dgettext (NULL, msgid)
|
|
||||||
|
|
||||||
# define dgettext(domainname, msgid) \
|
|
||||||
dcgettext (domainname, msgid, LC_MESSAGES)
|
|
||||||
|
|
||||||
# define ngettext(msgid1, msgid2, n) \
|
|
||||||
dngettext (NULL, msgid1, msgid2, n)
|
|
||||||
|
|
||||||
# define dngettext(domainname, msgid1, msgid2, n) \
|
|
||||||
dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
|
|
||||||
|
|
||||||
#endif /* Optimizing. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* libintl.h */
|
|
|
@ -1,580 +0,0 @@
|
||||||
/* Load needed message catalogs.
|
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU Library General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
/* Tell glibc's <string.h> to provide a prototype for mempcpy().
|
|
||||||
This must come before <config.h> because <config.h> may include
|
|
||||||
<features.h>, and once <features.h> has been included, it's too late. */
|
|
||||||
#ifndef _GNU_SOURCE
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
# define alloca __builtin_alloca
|
|
||||||
# define HAVE_ALLOCA 1
|
|
||||||
#else
|
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
|
||||||
# include <alloca.h>
|
|
||||||
# else
|
|
||||||
# ifdef _AIX
|
|
||||||
#pragma alloca
|
|
||||||
# else
|
|
||||||
# ifndef alloca
|
|
||||||
char *alloca ();
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
# include <langinfo.h>
|
|
||||||
# include <locale.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \
|
|
||||||
|| (defined _LIBC && defined _POSIX_MAPPED_FILES)
|
|
||||||
# include <sys/mman.h>
|
|
||||||
# undef HAVE_MMAP
|
|
||||||
# define HAVE_MMAP 1
|
|
||||||
#else
|
|
||||||
# undef HAVE_MMAP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gettext.h"
|
|
||||||
#include "gettextP.h"
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
# include "../locale/localeinfo.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* GCC LOCAL: These macros are used below. */
|
|
||||||
/* The extra casts work around common compiler bugs. */
|
|
||||||
#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
|
||||||
/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
|
|
||||||
It is necessary at least when t == time_t. */
|
|
||||||
#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
|
|
||||||
? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))
|
|
||||||
#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
/* Rename the non ISO C functions. This is required by the standard
|
|
||||||
because some ISO C functions will require linking with this object
|
|
||||||
file and the name space must not be polluted. */
|
|
||||||
# define open __open
|
|
||||||
# define close __close
|
|
||||||
# define read __read
|
|
||||||
# define mmap __mmap
|
|
||||||
# define munmap __munmap
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
|
||||||
with existing names and they should follow ANSI C. But this source
|
|
||||||
code is also used in GNU C Library where the names have a __
|
|
||||||
prefix. So we have to make a difference here. */
|
|
||||||
#ifdef _LIBC
|
|
||||||
# define PLURAL_PARSE __gettextparse
|
|
||||||
#else
|
|
||||||
# define PLURAL_PARSE gettextparse__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For those losing systems which don't have `alloca' we have to add
|
|
||||||
some additional code emulating it. */
|
|
||||||
#ifdef HAVE_ALLOCA
|
|
||||||
# define freea(p) /* nothing */
|
|
||||||
#else
|
|
||||||
# define alloca(n) malloc (n)
|
|
||||||
# define freea(p) free (p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For systems that distinguish between text and binary I/O.
|
|
||||||
O_BINARY is usually declared in <fcntl.h>. */
|
|
||||||
#if !defined O_BINARY && defined _O_BINARY
|
|
||||||
/* For MSC-compatible compilers. */
|
|
||||||
# define O_BINARY _O_BINARY
|
|
||||||
# define O_TEXT _O_TEXT
|
|
||||||
#endif
|
|
||||||
#ifdef __BEOS__
|
|
||||||
/* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
|
|
||||||
# undef O_BINARY
|
|
||||||
# undef O_TEXT
|
|
||||||
#endif
|
|
||||||
/* On reasonable systems, binary I/O is the default. */
|
|
||||||
#ifndef O_BINARY
|
|
||||||
# define O_BINARY 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We need a sign, whether a new catalog was loaded, which can be associated
|
|
||||||
with all translations. This is important if the translations are
|
|
||||||
cached by one of GCC's features. */
|
|
||||||
int _nl_msg_cat_cntr;
|
|
||||||
|
|
||||||
#if (defined __GNUC__ && !defined __APPLE_CC__) \
|
|
||||||
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
|
|
||||||
|
|
||||||
/* These structs are the constant expression for the germanic plural
|
|
||||||
form determination. It represents the expression "n != 1".
|
|
||||||
GCC LOCAL: Use __extension__ to suppress -Wtraditional warnings. */
|
|
||||||
__extension__ static const struct expression plvar =
|
|
||||||
{
|
|
||||||
.nargs = 0,
|
|
||||||
.operation = var,
|
|
||||||
};
|
|
||||||
__extension__ static const struct expression plone =
|
|
||||||
{
|
|
||||||
.nargs = 0,
|
|
||||||
.operation = num,
|
|
||||||
.val =
|
|
||||||
{
|
|
||||||
.num = 1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
__extension__ static struct expression germanic_plural =
|
|
||||||
{
|
|
||||||
.nargs = 2,
|
|
||||||
.operation = not_equal,
|
|
||||||
.val =
|
|
||||||
{
|
|
||||||
.args =
|
|
||||||
{
|
|
||||||
[0] = (struct expression *) &plvar,
|
|
||||||
[1] = (struct expression *) &plone
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
# define INIT_GERMANIC_PLURAL()
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* For compilers without support for ISO C 99 struct/union initializers:
|
|
||||||
Initialization at run-time. */
|
|
||||||
|
|
||||||
static struct expression plvar;
|
|
||||||
static struct expression plone;
|
|
||||||
static struct expression germanic_plural;
|
|
||||||
|
|
||||||
static void
|
|
||||||
init_germanic_plural ()
|
|
||||||
{
|
|
||||||
if (plone.val.num == 0)
|
|
||||||
{
|
|
||||||
plvar.nargs = 0;
|
|
||||||
plvar.operation = var;
|
|
||||||
|
|
||||||
plone.nargs = 0;
|
|
||||||
plone.operation = num;
|
|
||||||
plone.val.num = 1;
|
|
||||||
|
|
||||||
germanic_plural.nargs = 2;
|
|
||||||
germanic_plural.operation = not_equal;
|
|
||||||
germanic_plural.val.args[0] = &plvar;
|
|
||||||
germanic_plural.val.args[1] = &plone;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the codeset dependent parts of an opened message catalog.
|
|
||||||
Return the header entry. */
|
|
||||||
const char *
|
|
||||||
internal_function
|
|
||||||
_nl_init_domain_conv (domain_file, domain, domainbinding)
|
|
||||||
struct loaded_l10nfile *domain_file;
|
|
||||||
struct loaded_domain *domain;
|
|
||||||
struct binding *domainbinding;
|
|
||||||
{
|
|
||||||
/* Find out about the character set the file is encoded with.
|
|
||||||
This can be found (in textual form) in the entry "". If this
|
|
||||||
entry does not exist or if this does not contain the `charset='
|
|
||||||
information, we will assume the charset matches the one the
|
|
||||||
current locale and we don't have to perform any conversion. */
|
|
||||||
char *nullentry;
|
|
||||||
size_t nullentrylen;
|
|
||||||
|
|
||||||
/* Preinitialize fields, to avoid recursion during _nl_find_msg. */
|
|
||||||
domain->codeset_cntr =
|
|
||||||
(domainbinding != NULL ? domainbinding->codeset_cntr : 0);
|
|
||||||
#ifdef _LIBC
|
|
||||||
domain->conv = (__gconv_t) -1;
|
|
||||||
#else
|
|
||||||
# if HAVE_ICONV
|
|
||||||
domain->conv = (iconv_t) -1;
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
domain->conv_tab = NULL;
|
|
||||||
|
|
||||||
/* Get the header entry. */
|
|
||||||
nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
|
|
||||||
|
|
||||||
if (nullentry != NULL)
|
|
||||||
{
|
|
||||||
#if defined _LIBC || HAVE_ICONV
|
|
||||||
const char *charsetstr;
|
|
||||||
|
|
||||||
charsetstr = strstr (nullentry, "charset=");
|
|
||||||
if (charsetstr != NULL)
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
char *charset;
|
|
||||||
const char *outcharset;
|
|
||||||
|
|
||||||
charsetstr += strlen ("charset=");
|
|
||||||
len = strcspn (charsetstr, " \t\n");
|
|
||||||
|
|
||||||
charset = (char *) alloca (len + 1);
|
|
||||||
# if defined _LIBC || HAVE_MEMPCPY
|
|
||||||
*((char *) mempcpy (charset, charsetstr, len)) = '\0';
|
|
||||||
# else
|
|
||||||
memcpy (charset, charsetstr, len);
|
|
||||||
charset[len] = '\0';
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* The output charset should normally be determined by the
|
|
||||||
locale. But sometimes the locale is not used or not correctly
|
|
||||||
set up, so we provide a possibility for the user to override
|
|
||||||
this. Moreover, the value specified through
|
|
||||||
bind_textdomain_codeset overrides both. */
|
|
||||||
if (domainbinding != NULL && domainbinding->codeset != NULL)
|
|
||||||
outcharset = domainbinding->codeset;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outcharset = getenv ("OUTPUT_CHARSET");
|
|
||||||
if (outcharset == NULL || outcharset[0] == '\0')
|
|
||||||
{
|
|
||||||
# ifdef _LIBC
|
|
||||||
outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
|
|
||||||
# else
|
|
||||||
# if HAVE_ICONV
|
|
||||||
outcharset = locale_charset ();
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# ifdef _LIBC
|
|
||||||
/* We always want to use transliteration. */
|
|
||||||
outcharset = norm_add_slashes (outcharset, "TRANSLIT");
|
|
||||||
charset = norm_add_slashes (charset, NULL);
|
|
||||||
if (__gconv_open (outcharset, charset, &domain->conv,
|
|
||||||
GCONV_AVOID_NOCONV)
|
|
||||||
!= __GCONV_OK)
|
|
||||||
domain->conv = (__gconv_t) -1;
|
|
||||||
# else
|
|
||||||
# if HAVE_ICONV
|
|
||||||
/* When using GNU libiconv, we want to use transliteration. */
|
|
||||||
# if _LIBICONV_VERSION >= 0x0105
|
|
||||||
len = strlen (outcharset);
|
|
||||||
{
|
|
||||||
char *tmp = (char *) alloca (len + 10 + 1);
|
|
||||||
memcpy (tmp, outcharset, len);
|
|
||||||
memcpy (tmp + len, "//TRANSLIT", 10 + 1);
|
|
||||||
outcharset = tmp;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
domain->conv = iconv_open (outcharset, charset);
|
|
||||||
# if _LIBICONV_VERSION >= 0x0105
|
|
||||||
freea (outcharset);
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
freea (charset);
|
|
||||||
}
|
|
||||||
#endif /* _LIBC || HAVE_ICONV */
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullentry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Frees the codeset dependent parts of an opened message catalog. */
|
|
||||||
void
|
|
||||||
internal_function
|
|
||||||
_nl_free_domain_conv (domain)
|
|
||||||
struct loaded_domain *domain;
|
|
||||||
{
|
|
||||||
if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
|
|
||||||
free (domain->conv_tab);
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
if (domain->conv != (__gconv_t) -1)
|
|
||||||
__gconv_close (domain->conv);
|
|
||||||
#else
|
|
||||||
# if HAVE_ICONV
|
|
||||||
if (domain->conv != (iconv_t) -1)
|
|
||||||
iconv_close (domain->conv);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load the message catalogs specified by FILENAME. If it is no valid
|
|
||||||
message catalog do nothing. */
|
|
||||||
void
|
|
||||||
internal_function
|
|
||||||
_nl_load_domain (domain_file, domainbinding)
|
|
||||||
struct loaded_l10nfile *domain_file;
|
|
||||||
struct binding *domainbinding;
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
size_t size;
|
|
||||||
#ifdef _LIBC
|
|
||||||
struct stat64 st;
|
|
||||||
#else
|
|
||||||
struct stat st;
|
|
||||||
#endif
|
|
||||||
struct mo_file_header *data = (struct mo_file_header *) -1;
|
|
||||||
int use_mmap = 0;
|
|
||||||
struct loaded_domain *domain;
|
|
||||||
const char *nullentry;
|
|
||||||
|
|
||||||
domain_file->decided = 1;
|
|
||||||
domain_file->data = NULL;
|
|
||||||
|
|
||||||
/* Note that it would be useless to store domainbinding in domain_file
|
|
||||||
because domainbinding might be == NULL now but != NULL later (after
|
|
||||||
a call to bind_textdomain_codeset). */
|
|
||||||
|
|
||||||
/* If the record does not represent a valid locale the FILENAME
|
|
||||||
might be NULL. This can happen when according to the given
|
|
||||||
specification the locale file name is different for XPG and CEN
|
|
||||||
syntax. */
|
|
||||||
if (domain_file->filename == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Try to open the addressed file. */
|
|
||||||
fd = open (domain_file->filename, O_RDONLY | O_BINARY);
|
|
||||||
if (fd == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* We must know about the size of the file. */
|
|
||||||
/* GCC_LOCAL: Use INTTYPE_MAXIMUM for overflow check, cast sizeof to
|
|
||||||
off_t, move set of size below if. */
|
|
||||||
if (
|
|
||||||
#ifdef _LIBC
|
|
||||||
__builtin_expect (fstat64 (fd, &st) != 0, 0)
|
|
||||||
#else
|
|
||||||
__builtin_expect (fstat (fd, &st) != 0, 0)
|
|
||||||
#endif
|
|
||||||
|| __builtin_expect (st.st_size > INTTYPE_MAXIMUM (ssize_t), 0)
|
|
||||||
|| __builtin_expect (st.st_size < (off_t) sizeof (struct mo_file_header),
|
|
||||||
0))
|
|
||||||
{
|
|
||||||
/* Something went wrong. */
|
|
||||||
close (fd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
size = (size_t) st.st_size;
|
|
||||||
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
/* Now we are ready to load the file. If mmap() is available we try
|
|
||||||
this first. If not available or it failed we try to load it. */
|
|
||||||
data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
|
|
||||||
MAP_PRIVATE, fd, 0);
|
|
||||||
|
|
||||||
if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
|
|
||||||
{
|
|
||||||
/* mmap() call was successful. */
|
|
||||||
close (fd);
|
|
||||||
use_mmap = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If the data is not yet available (i.e. mmap'ed) we try to load
|
|
||||||
it manually. */
|
|
||||||
if (data == (struct mo_file_header *) -1)
|
|
||||||
{
|
|
||||||
size_t to_read;
|
|
||||||
char *read_ptr;
|
|
||||||
|
|
||||||
data = (struct mo_file_header *) malloc (size);
|
|
||||||
if (data == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
to_read = size;
|
|
||||||
read_ptr = (char *) data;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
long int nb = (long int) read (fd, read_ptr, to_read);
|
|
||||||
if (nb <= 0)
|
|
||||||
{
|
|
||||||
#ifdef EINTR
|
|
||||||
if (nb == -1 && errno == EINTR)
|
|
||||||
continue;
|
|
||||||
#endif
|
|
||||||
close (fd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
read_ptr += nb;
|
|
||||||
to_read -= nb;
|
|
||||||
}
|
|
||||||
while (to_read > 0);
|
|
||||||
|
|
||||||
close (fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Using the magic number we can test whether it really is a message
|
|
||||||
catalog file. */
|
|
||||||
if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
|
|
||||||
0))
|
|
||||||
{
|
|
||||||
/* The magic number is wrong: not a message catalog file. */
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (use_mmap)
|
|
||||||
munmap ((caddr_t) data, size);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
free (data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
|
|
||||||
if (domain == NULL)
|
|
||||||
return;
|
|
||||||
domain_file->data = domain;
|
|
||||||
|
|
||||||
domain->data = (char *) data;
|
|
||||||
domain->use_mmap = use_mmap;
|
|
||||||
domain->mmap_size = size;
|
|
||||||
domain->must_swap = data->magic != _MAGIC;
|
|
||||||
|
|
||||||
/* Fill in the information about the available tables. */
|
|
||||||
switch (W (domain->must_swap, data->revision))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
domain->nstrings = W (domain->must_swap, data->nstrings);
|
|
||||||
domain->orig_tab = (struct string_desc *)
|
|
||||||
((char *) data + W (domain->must_swap, data->orig_tab_offset));
|
|
||||||
domain->trans_tab = (struct string_desc *)
|
|
||||||
((char *) data + W (domain->must_swap, data->trans_tab_offset));
|
|
||||||
domain->hash_size = W (domain->must_swap, data->hash_tab_size);
|
|
||||||
domain->hash_tab = (nls_uint32 *)
|
|
||||||
((char *) data + W (domain->must_swap, data->hash_tab_offset));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* This is an invalid revision. */
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
if (use_mmap)
|
|
||||||
munmap ((caddr_t) data, size);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
free (data);
|
|
||||||
free (domain);
|
|
||||||
domain_file->data = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now initialize the character set converter from the character set
|
|
||||||
the file is encoded with (found in the header entry) to the domain's
|
|
||||||
specified character set or the locale's character set. */
|
|
||||||
nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
|
|
||||||
|
|
||||||
/* Also look for a plural specification. */
|
|
||||||
if (nullentry != NULL)
|
|
||||||
{
|
|
||||||
const char *plural;
|
|
||||||
const char *nplurals;
|
|
||||||
|
|
||||||
plural = strstr (nullentry, "plural=");
|
|
||||||
nplurals = strstr (nullentry, "nplurals=");
|
|
||||||
if (plural == NULL || nplurals == NULL)
|
|
||||||
goto no_plural;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* First get the number. */
|
|
||||||
char *endp;
|
|
||||||
unsigned long int n;
|
|
||||||
struct parse_args args;
|
|
||||||
|
|
||||||
nplurals += 9;
|
|
||||||
while (*nplurals != '\0' && isspace ((unsigned char)*nplurals))
|
|
||||||
++nplurals;
|
|
||||||
#if defined HAVE_STRTOUL || defined _LIBC
|
|
||||||
n = strtoul (nplurals, &endp, 10);
|
|
||||||
#else
|
|
||||||
for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
|
|
||||||
n = n * 10 + (*endp - '0');
|
|
||||||
#endif
|
|
||||||
domain->nplurals = n;
|
|
||||||
if (nplurals == endp)
|
|
||||||
goto no_plural;
|
|
||||||
|
|
||||||
/* Due to the restrictions bison imposes onto the interface of the
|
|
||||||
scanner function we have to put the input string and the result
|
|
||||||
passed up from the parser into the same structure which address
|
|
||||||
is passed down to the parser. */
|
|
||||||
plural += 7;
|
|
||||||
args.cp = plural;
|
|
||||||
if (PLURAL_PARSE (&args) != 0)
|
|
||||||
goto no_plural;
|
|
||||||
domain->plural = args.res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* By default we are using the Germanic form: singular form only
|
|
||||||
for `one', the plural form otherwise. Yes, this is also what
|
|
||||||
English is using since English is a Germanic language. */
|
|
||||||
no_plural:
|
|
||||||
INIT_GERMANIC_PLURAL ();
|
|
||||||
domain->plural = &germanic_plural;
|
|
||||||
domain->nplurals = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
void
|
|
||||||
internal_function
|
|
||||||
_nl_unload_domain (domain)
|
|
||||||
struct loaded_domain *domain;
|
|
||||||
{
|
|
||||||
if (domain->plural != &germanic_plural)
|
|
||||||
__gettext_free_exp (domain->plural);
|
|
||||||
|
|
||||||
_nl_free_domain_conv (domain);
|
|
||||||
|
|
||||||
# ifdef _POSIX_MAPPED_FILES
|
|
||||||
if (domain->use_mmap)
|
|
||||||
munmap ((caddr_t) domain->data, domain->mmap_size);
|
|
||||||
else
|
|
||||||
# endif /* _POSIX_MAPPED_FILES */
|
|
||||||
free ((void *) domain->data);
|
|
||||||
|
|
||||||
free (domain);
|
|
||||||
}
|
|
||||||
#endif
|
|
1329
gcc/intl/plural.c
1329
gcc/intl/plural.c
File diff suppressed because it is too large
Load diff
|
@ -1,31 +0,0 @@
|
||||||
# Add this package to a list of references stored in a text file.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU Library General Public License as published
|
|
||||||
# by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Library General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
|
||||||
# License along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
# USA.
|
|
||||||
#
|
|
||||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
|
||||||
#
|
|
||||||
/^# Packages using this file: / {
|
|
||||||
s/# Packages using this file://
|
|
||||||
ta
|
|
||||||
:a
|
|
||||||
s/ @PACKAGE@ / @PACKAGE@ /
|
|
||||||
tb
|
|
||||||
s/ $/ @PACKAGE@ /
|
|
||||||
:b
|
|
||||||
s/^/# Packages using this file:/
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
# Remove this package from a list of references stored in a text file.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU Library General Public License as published
|
|
||||||
# by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Library General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
|
||||||
# License along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
# USA.
|
|
||||||
#
|
|
||||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
|
||||||
#
|
|
||||||
/^# Packages using this file: / {
|
|
||||||
s/# Packages using this file://
|
|
||||||
s/ @PACKAGE@ / /
|
|
||||||
s/^/# Packages using this file:/
|
|
||||||
}
|
|
20
intl/ChangeLog
Normal file
20
intl/ChangeLog
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
2003-07-04 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* Makefile.in: Remove unnecessary capabilities for
|
||||||
|
installation, build of shared libraries, generation of
|
||||||
|
distribution tarballs, etc. Fix all the places that rely on
|
||||||
|
the parent directory. Don't generate libgnuintl.h from
|
||||||
|
anything; do generate $(objdir)/libintl.h from libgnuintl.h if
|
||||||
|
necessary. Adjust DEFS for use of config.h.
|
||||||
|
* libgnuintl.h.in: Rename libgnuintl.h.
|
||||||
|
* README: New file.
|
||||||
|
* config.charset, ref-add.sin, ref-del.sin: Delete (unused).
|
||||||
|
* COPYING.LIB-2.0, COPYING.LIB-2.1: Delete (redundant).
|
||||||
|
* aclocal.m4: New; generated per instructions in gettext manual.
|
||||||
|
* configure.in: New; written from scratch for this configuration.
|
||||||
|
* configure, config.h.in: Generated.
|
||||||
|
|
||||||
|
2003-05-22 GNU <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
|
* Version 0.12.1 released.
|
||||||
|
|
220
intl/Makefile.in
Normal file
220
intl/Makefile.in
Normal file
|
@ -0,0 +1,220 @@
|
||||||
|
# Makefile for directory with message catalog handling library of GNU gettext
|
||||||
|
# Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Library General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
# USA.
|
||||||
|
|
||||||
|
# This Makefile has been modified from the original shipped with
|
||||||
|
# gettext 0.12.1 to remove the ability to install libintl (which
|
||||||
|
# we do not need nor want), the ability to build a shared library
|
||||||
|
# (likewise), and a large number of heinous kludges.
|
||||||
|
|
||||||
|
PACKAGE = @PACKAGE@
|
||||||
|
VERSION = @VERSION@
|
||||||
|
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = $(srcdir)
|
||||||
|
|
||||||
|
prefix = @prefix@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
transform = @program_transform_name@
|
||||||
|
libdir = @libdir@
|
||||||
|
includedir = @includedir@
|
||||||
|
datadir = @datadir@
|
||||||
|
localedir = $(datadir)/locale
|
||||||
|
gettextsrcdir = $(datadir)/gettext/intl
|
||||||
|
aliaspath = $(localedir)
|
||||||
|
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
|
mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
|
||||||
|
|
||||||
|
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
|
|
||||||
|
AR = ar
|
||||||
|
CC = @CC@
|
||||||
|
RANLIB = @RANLIB@
|
||||||
|
YACC = @INTLBISON@ -y -d
|
||||||
|
YFLAGS = --name-prefix=__gettext
|
||||||
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBS = @LIBS@
|
||||||
|
DEFS = -DHAVE_CONFIG_H
|
||||||
|
|
||||||
|
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||||
|
|
||||||
|
HEADERS = \
|
||||||
|
gmo.h \
|
||||||
|
gettextP.h \
|
||||||
|
hash-string.h \
|
||||||
|
loadinfo.h \
|
||||||
|
plural-exp.h \
|
||||||
|
eval-plural.h \
|
||||||
|
localcharset.h \
|
||||||
|
relocatable.h \
|
||||||
|
os2compat.h \
|
||||||
|
libgnuintl.h.in
|
||||||
|
SOURCES = \
|
||||||
|
bindtextdom.c \
|
||||||
|
dcgettext.c \
|
||||||
|
dgettext.c \
|
||||||
|
gettext.c \
|
||||||
|
finddomain.c \
|
||||||
|
loadmsgcat.c \
|
||||||
|
localealias.c \
|
||||||
|
textdomain.c \
|
||||||
|
l10nflist.c \
|
||||||
|
explodename.c \
|
||||||
|
dcigettext.c \
|
||||||
|
dcngettext.c \
|
||||||
|
dngettext.c \
|
||||||
|
ngettext.c \
|
||||||
|
plural.y \
|
||||||
|
plural-exp.c \
|
||||||
|
localcharset.c \
|
||||||
|
relocatable.c \
|
||||||
|
localename.c \
|
||||||
|
log.c \
|
||||||
|
osdep.c \
|
||||||
|
os2compat.c \
|
||||||
|
intl-compat.c
|
||||||
|
OBJECTS = \
|
||||||
|
bindtextdom.o \
|
||||||
|
dcgettext.o \
|
||||||
|
dgettext.o \
|
||||||
|
gettext.o \
|
||||||
|
finddomain.o \
|
||||||
|
loadmsgcat.o \
|
||||||
|
localealias.o \
|
||||||
|
textdomain.o \
|
||||||
|
l10nflist.o \
|
||||||
|
explodename.o \
|
||||||
|
dcigettext.o \
|
||||||
|
dcngettext.o \
|
||||||
|
dngettext.o \
|
||||||
|
ngettext.o \
|
||||||
|
plural.o \
|
||||||
|
plural-exp.o \
|
||||||
|
localcharset.o \
|
||||||
|
relocatable.o \
|
||||||
|
localename.o \
|
||||||
|
log.o \
|
||||||
|
osdep.o \
|
||||||
|
intl-compat.o
|
||||||
|
|
||||||
|
all: all-@USE_INCLUDED_LIBINTL@
|
||||||
|
all-yes: libintl.a libintl.h
|
||||||
|
all-no: # nothing
|
||||||
|
|
||||||
|
libintl.a: $(OBJECTS)
|
||||||
|
rm -f $@
|
||||||
|
$(AR) cru $@ $(OBJECTS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libintl.h: $(srcdir)/libgnuintl.h
|
||||||
|
cat $(srcdir)/libgnuintl.h > $@
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .c .y .o
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(COMPILE) $<
|
||||||
|
|
||||||
|
.y.c:
|
||||||
|
$(YACC) $(YFLAGS) --output $@ $<
|
||||||
|
rm -f $*.h
|
||||||
|
|
||||||
|
INCLUDES = -I. -I$(srcdir) -I..
|
||||||
|
|
||||||
|
check: all
|
||||||
|
|
||||||
|
# The installation targets have been disabled.
|
||||||
|
install: install-exec install-data
|
||||||
|
install-exec: all
|
||||||
|
install-data: all
|
||||||
|
install-strip: install
|
||||||
|
installdirs:
|
||||||
|
installcheck:
|
||||||
|
uninstall:
|
||||||
|
|
||||||
|
info dvi ps pdf html:
|
||||||
|
|
||||||
|
$(OBJECTS): config.h libintl.h
|
||||||
|
bindtextdom.o dcgettext.o dcigettext.o dcngettext.o dgettext.o \
|
||||||
|
dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o \
|
||||||
|
localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h
|
||||||
|
dcigettext.o loadmsgcat.o: hash-string.h
|
||||||
|
explodename.o l10nflist.o: loadinfo.h
|
||||||
|
dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h
|
||||||
|
dcigettext.o: eval-plural.h
|
||||||
|
localcharset.o: localcharset.h
|
||||||
|
localealias.o localcharset.o relocatable.o: relocatable.h
|
||||||
|
|
||||||
|
tags: TAGS
|
||||||
|
|
||||||
|
TAGS: $(HEADERS) $(SOURCES)
|
||||||
|
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
|
ctags: CTAGS
|
||||||
|
|
||||||
|
CTAGS: $(HEADERS) $(SOURCES)
|
||||||
|
here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
|
id: ID
|
||||||
|
|
||||||
|
ID: $(HEADERS) $(SOURCES)
|
||||||
|
here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
|
|
||||||
|
mostlyclean:
|
||||||
|
rm -f *.a *.la *.o *.obj *.lo core core.*
|
||||||
|
rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
|
||||||
|
rm -f -r .libs _libs
|
||||||
|
|
||||||
|
clean: mostlyclean
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f Makefile ID TAGS
|
||||||
|
if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
|
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
maintainer-clean: distclean
|
||||||
|
|
||||||
|
# The 'make dist' targets have been disabled; the GNU toolchain handles this
|
||||||
|
# with a script maintained separately from the Makefile.
|
||||||
|
dist:
|
||||||
|
distdir:
|
||||||
|
|
||||||
|
Makefile: Makefile.in config.status
|
||||||
|
CONFIG_HEADERS= CONFIG_FILES=Makefile $(SHELL) ./config.status
|
||||||
|
|
||||||
|
config.h: cstamp-h; @:
|
||||||
|
cstamp-h: config.h.in config.status
|
||||||
|
CONFIG_HEADERS=config.h CONFIG_FILES= $(SHELL) config.status
|
||||||
|
echo timestamp > cstamp-h
|
||||||
|
|
||||||
|
config.status: configure
|
||||||
|
$(SHELL) config.status --recheck
|
||||||
|
|
||||||
|
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||||
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
22
intl/README
Normal file
22
intl/README
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
GNU toolchain edition of GNU libintl 0.12.1
|
||||||
|
|
||||||
|
Most of the content of this directory is taken from gettext 0.12.1
|
||||||
|
and is owned by that project. Patches should be directed to the
|
||||||
|
gettext developers first. However, note the following:
|
||||||
|
|
||||||
|
* libintl.h comes from gettext, but is named libgnuintl.h.in in that
|
||||||
|
project's source tree.
|
||||||
|
|
||||||
|
* The files COPYING.LIB-2.0 and COPYING.LIB-2.1 are redundant with the
|
||||||
|
top-level COPYING.LIB and have therefore been removed.
|
||||||
|
|
||||||
|
* The files config.charset, ref-add.sin, and ref-del.sin are not used
|
||||||
|
in this setup and have therefore been removed.
|
||||||
|
|
||||||
|
* aclocal.m4 was constructed following the instructions printed by
|
||||||
|
"gettextize" from the files that gettext 0.12.1 installs in
|
||||||
|
$(prefix)/share/aclocal.
|
||||||
|
|
||||||
|
* configure.in and Makefile.in were written for this directory
|
||||||
|
layout, by Zack Weinberg <zack@codesourcery.com>. Please direct
|
||||||
|
patches for these files to gcc-patches@gcc.gnu.org.
|
1
intl/VERSION
Normal file
1
intl/VERSION
Normal file
|
@ -0,0 +1 @@
|
||||||
|
GNU gettext library from gettext-0.12.1
|
2057
intl/aclocal.m4
vendored
Normal file
2057
intl/aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the bindtextdomain(3) function
|
/* Implementation of the bindtextdomain(3) function
|
||||||
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_dirname _nl_default_dirname__
|
# define _nl_default_dirname libintl_nl_default_dirname
|
||||||
# define _nl_domain_bindings _nl_domain_bindings__
|
# define _nl_domain_bindings libintl_nl_domain_bindings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||||
|
@ -58,12 +58,17 @@
|
||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
/* Contains the default location of the message catalogs. */
|
||||||
extern const char _nl_default_dirname[];
|
extern const char _nl_default_dirname[];
|
||||||
|
#ifdef _LIBC
|
||||||
|
extern const char _nl_default_dirname_internal[] attribute_hidden;
|
||||||
|
#else
|
||||||
|
# define INTUSE(name) name
|
||||||
|
#endif
|
||||||
|
|
||||||
/* List with bindings of specific domains. */
|
/* List with bindings of specific domains. */
|
||||||
extern struct binding *_nl_domain_bindings;
|
extern struct binding *_nl_domain_bindings;
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
__libc_rwlock_define (extern, _nl_state_lock)
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
@ -77,15 +82,15 @@ __libc_rwlock_define (extern, _nl_state_lock)
|
||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define BINDTEXTDOMAIN bindtextdomain__
|
# define BINDTEXTDOMAIN libintl_bindtextdomain
|
||||||
# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
|
# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static void set_binding_values PARAMS ((const char *domainname,
|
static void set_binding_values PARAMS ((const char *domainname,
|
||||||
const char **dirnamep,
|
const char **dirnamep,
|
||||||
const char **codesetp));
|
const char **codesetp));
|
||||||
|
|
||||||
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
||||||
to be used for the DOMAINNAME message catalog.
|
to be used for the DOMAINNAME message catalog.
|
||||||
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
||||||
|
@ -146,8 +151,8 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
char *result = binding->dirname;
|
char *result = binding->dirname;
|
||||||
if (strcmp (dirname, result) != 0)
|
if (strcmp (dirname, result) != 0)
|
||||||
{
|
{
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
|
||||||
result = (char *) _nl_default_dirname;
|
result = (char *) INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
|
@ -162,7 +167,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
|
|
||||||
if (__builtin_expect (result != NULL, 1))
|
if (__builtin_expect (result != NULL, 1))
|
||||||
{
|
{
|
||||||
if (binding->dirname != _nl_default_dirname)
|
if (binding->dirname != INTUSE(_nl_default_dirname))
|
||||||
free (binding->dirname);
|
free (binding->dirname);
|
||||||
|
|
||||||
binding->dirname = result;
|
binding->dirname = result;
|
||||||
|
@ -216,7 +221,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
{
|
{
|
||||||
/* Simply return the default values. */
|
/* Simply return the default values. */
|
||||||
if (dirnamep)
|
if (dirnamep)
|
||||||
*dirnamep = _nl_default_dirname;
|
*dirnamep = INTUSE(_nl_default_dirname);
|
||||||
if (codesetp)
|
if (codesetp)
|
||||||
*codesetp = NULL;
|
*codesetp = NULL;
|
||||||
}
|
}
|
||||||
|
@ -238,11 +243,11 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
|
|
||||||
if (dirname == NULL)
|
if (dirname == NULL)
|
||||||
/* The default value. */
|
/* The default value. */
|
||||||
dirname = _nl_default_dirname;
|
dirname = INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
|
||||||
dirname = _nl_default_dirname;
|
dirname = INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *result;
|
char *result;
|
||||||
|
@ -265,7 +270,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* The default value. */
|
/* The default value. */
|
||||||
new_binding->dirname = (char *) _nl_default_dirname;
|
new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
|
||||||
|
|
||||||
new_binding->codeset_cntr = 0;
|
new_binding->codeset_cntr = 0;
|
||||||
|
|
||||||
|
@ -321,7 +326,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
||||||
if (0)
|
if (0)
|
||||||
{
|
{
|
||||||
failed_codeset:
|
failed_codeset:
|
||||||
if (new_binding->dirname != _nl_default_dirname)
|
if (new_binding->dirname != INTUSE(_nl_default_dirname))
|
||||||
free (new_binding->dirname);
|
free (new_binding->dirname);
|
||||||
failed_dirname:
|
failed_dirname:
|
||||||
free (new_binding);
|
free (new_binding);
|
255
intl/config.h.in
Normal file
255
intl/config.h.in
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
|
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||||
|
systems. This function is required for `alloca.c' support on those systems.
|
||||||
|
*/
|
||||||
|
#undef CRAY_STACKSEG_END
|
||||||
|
|
||||||
|
/* Define to 1 if using `alloca.c'. */
|
||||||
|
#undef C_ALLOCA
|
||||||
|
|
||||||
|
/* Define because we depend on libiconv. */
|
||||||
|
#undef DEPENDS_ON_LIBICONV
|
||||||
|
|
||||||
|
/* Define to 1 if translation of program messages to the user's native
|
||||||
|
language is requested. */
|
||||||
|
#undef ENABLE_NLS
|
||||||
|
|
||||||
|
/* Define to enable relocation. */
|
||||||
|
#undef ENABLE_RELOCATABLE
|
||||||
|
|
||||||
|
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||||
|
#undef HAVE_ALLOCA
|
||||||
|
|
||||||
|
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||||
|
*/
|
||||||
|
#undef HAVE_ALLOCA_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <argz.h> header file. */
|
||||||
|
#undef HAVE_ARGZ_H
|
||||||
|
|
||||||
|
/* Define if the GNU dcgettext() function is already present or preinstalled.
|
||||||
|
*/
|
||||||
|
#undef HAVE_DCGETTEXT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `feof_unlocked' function. */
|
||||||
|
#undef HAVE_FEOF_UNLOCKED
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fgets_unlocked' function. */
|
||||||
|
#undef HAVE_FGETS_UNLOCKED
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getcwd' function. */
|
||||||
|
#undef HAVE_GETCWD
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getc_unlocked' function. */
|
||||||
|
#undef HAVE_GETC_UNLOCKED
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getegid' function. */
|
||||||
|
#undef HAVE_GETEGID
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `geteuid' function. */
|
||||||
|
#undef HAVE_GETEUID
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgid' function. */
|
||||||
|
#undef HAVE_GETGID
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getpagesize' function. */
|
||||||
|
#undef HAVE_GETPAGESIZE
|
||||||
|
|
||||||
|
/* Define if the GNU gettext() function is already present or preinstalled. */
|
||||||
|
#undef HAVE_GETTEXT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getuid' function. */
|
||||||
|
#undef HAVE_GETUID
|
||||||
|
|
||||||
|
/* Define if you have the iconv() function. */
|
||||||
|
#undef HAVE_ICONV
|
||||||
|
|
||||||
|
/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
|
||||||
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
|
||||||
|
declares uintmax_t. */
|
||||||
|
#undef HAVE_INTTYPES_H_WITH_UINTMAX
|
||||||
|
|
||||||
|
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
|
||||||
|
#undef HAVE_LANGINFO_CODESET
|
||||||
|
|
||||||
|
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||||
|
#undef HAVE_LC_MESSAGES
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
|
#undef HAVE_LIMITS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <locale.h> header file. */
|
||||||
|
#undef HAVE_LOCALE_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <malloc.h> header file. */
|
||||||
|
#undef HAVE_MALLOC_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mempcpy' function. */
|
||||||
|
#undef HAVE_MEMPCPY
|
||||||
|
|
||||||
|
/* Define to 1 if you have a working `mmap' system call. */
|
||||||
|
#undef HAVE_MMAP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `munmap' function. */
|
||||||
|
#undef HAVE_MUNMAP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <nl_types.h> header file. */
|
||||||
|
#undef HAVE_NL_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `putenv' function. */
|
||||||
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setenv' function. */
|
||||||
|
#undef HAVE_SETENV
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `setlocale' function. */
|
||||||
|
#undef HAVE_SETLOCALE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stddef.h> header file. */
|
||||||
|
#undef HAVE_STDDEF_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
|
||||||
|
uintmax_t. */
|
||||||
|
#undef HAVE_STDINT_H_WITH_UINTMAX
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `stpcpy' function. */
|
||||||
|
#undef HAVE_STPCPY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strcasecmp' function. */
|
||||||
|
#undef HAVE_STRCASECMP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
#undef HAVE_STRDUP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#undef HAVE_STRINGS_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtoul' function. */
|
||||||
|
#undef HAVE_STRTOUL
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||||
|
#undef HAVE_SYS_PARAM_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#undef HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `tsearch' function. */
|
||||||
|
#undef HAVE_TSEARCH
|
||||||
|
|
||||||
|
/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
|
||||||
|
#undef HAVE_UINTMAX_T
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define if you have the unsigned long long type. */
|
||||||
|
#undef HAVE_UNSIGNED_LONG_LONG
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `__argz_count' function. */
|
||||||
|
#undef HAVE___ARGZ_COUNT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `__argz_next' function. */
|
||||||
|
#undef HAVE___ARGZ_NEXT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `__argz_stringify' function. */
|
||||||
|
#undef HAVE___ARGZ_STRINGIFY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `__fsetlocking' function. */
|
||||||
|
#undef HAVE___FSETLOCKING
|
||||||
|
|
||||||
|
/* Define as const if the declaration of iconv() needs const. */
|
||||||
|
#undef ICONV_CONST
|
||||||
|
|
||||||
|
/* Define to the installation directory. */
|
||||||
|
#undef INSTALLDIR
|
||||||
|
|
||||||
|
/* Define if integer division by zero raises signal SIGFPE. */
|
||||||
|
#undef INTDIV0_RAISES_SIGFPE
|
||||||
|
|
||||||
|
/* Define because this is libintl. */
|
||||||
|
#undef IN_LIBINTL
|
||||||
|
|
||||||
|
/* Define because this is a library. */
|
||||||
|
#undef IN_LIBRARY
|
||||||
|
|
||||||
|
/* Define to the library directory. */
|
||||||
|
#undef LIBDIR
|
||||||
|
|
||||||
|
/* Define to the directory holding the locale files. */
|
||||||
|
#undef LOCALEDIR
|
||||||
|
|
||||||
|
/* Define to the locale alias path. */
|
||||||
|
#undef LOCALE_ALIAS_PATH
|
||||||
|
|
||||||
|
/* Define if there is no xmalloc. */
|
||||||
|
#undef NO_XMALLOC
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
|
||||||
|
#undef PRI_MACROS_BROKEN
|
||||||
|
|
||||||
|
/* If using the C implementation of alloca, define if you know the
|
||||||
|
direction of stack growth for your system; otherwise it will be
|
||||||
|
automatically deduced at run-time.
|
||||||
|
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||||
|
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||||
|
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||||
|
#undef STACK_DIRECTION
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
#undef const
|
||||||
|
|
||||||
|
/* Define as `__inline' if that's what the C compiler calls it, or to nothing
|
||||||
|
if it is not supported. */
|
||||||
|
#undef inline
|
||||||
|
|
||||||
|
/* Define to `long' if <sys/types.h> does not define. */
|
||||||
|
#undef off_t
|
||||||
|
|
||||||
|
/* Define this entry point correctly. */
|
||||||
|
#undef relocate
|
||||||
|
|
||||||
|
/* Define this entry point correctly. */
|
||||||
|
#undef set_relocation_prefix
|
||||||
|
|
||||||
|
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||||
|
#undef size_t
|
||||||
|
|
||||||
|
/* Define to unsigned long or unsigned long long if <stdint.h> and
|
||||||
|
<inttypes.h> don't define. */
|
||||||
|
#undef uintmax_t
|
7970
intl/configure
vendored
Executable file
7970
intl/configure
vendored
Executable file
File diff suppressed because it is too large
Load diff
27
intl/configure.in
Normal file
27
intl/configure.in
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
AC_PREREQ(2.13)
|
||||||
|
AC_INIT(gettext.c)
|
||||||
|
AC_CONFIG_AUX_DIR(..)
|
||||||
|
AC_CONFIG_HEADER(config.h)
|
||||||
|
AM_GNU_GETTEXT_VERSION(0.12.1)
|
||||||
|
AM_GNU_GETTEXT
|
||||||
|
|
||||||
|
dnl This replaces the extensive use of DEFS in the original Makefile.in.
|
||||||
|
AC_DEFINE_UNQUOTED(LOCALEDIR, "$localedir",
|
||||||
|
[Define to the directory holding the locale files.])
|
||||||
|
AC_DEFINE_UNQUOTED(LOCALE_ALIAS_PATH, "$aliaspath",
|
||||||
|
[Define to the locale alias path.])
|
||||||
|
AC_DEFINE_UNQUOTED(LIBDIR, "$libdir",
|
||||||
|
[Define to the library directory.])
|
||||||
|
AC_DEFINE_UNQUOTED(INSTALLDIR, "$libdir",
|
||||||
|
[Define to the installation directory.])
|
||||||
|
AC_DEFINE(IN_LIBINTL, 1, [Define because this is libintl.])
|
||||||
|
AC_DEFINE(IN_LIBRARY, 1, [Define because this is a library.])
|
||||||
|
AC_DEFINE(DEPENDS_ON_LIBICONV, 1, [Define because we depend on libiconv.])
|
||||||
|
AC_DEFINE(ENABLE_RELOCATABLE, 1, [Define to enable relocation.])
|
||||||
|
AC_DEFINE(NO_XMALLOC, 1, [Define if there is no xmalloc.])
|
||||||
|
AC_DEFINE(set_relocation_prefix, libintl_set_relocation_prefix,
|
||||||
|
[Define this entry point correctly.])
|
||||||
|
AC_DEFINE(relocate, libintl_relocate,
|
||||||
|
[Define this entry point correctly.])
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile)
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the dcgettext(3) function.
|
/* Implementation of the dcgettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -37,8 +37,8 @@
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT __dcgettext
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
|
@ -54,5 +54,6 @@ DCGETTEXT (domainname, msgid, category)
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* Alias for function name in GNU C Library. */
|
/* Alias for function name in GNU C Library. */
|
||||||
|
INTDEF(__dcgettext)
|
||||||
weak_alias (__dcgettext, dcgettext);
|
weak_alias (__dcgettext, dcgettext);
|
||||||
#endif
|
#endif
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the internal dcigettext function.
|
/* Implementation of the internal dcigettext function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -33,14 +33,19 @@
|
||||||
# define alloca __builtin_alloca
|
# define alloca __builtin_alloca
|
||||||
# define HAVE_ALLOCA 1
|
# define HAVE_ALLOCA 1
|
||||||
#else
|
#else
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
# ifdef _MSC_VER
|
||||||
# include <alloca.h>
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
# else
|
# else
|
||||||
# ifdef _AIX
|
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||||
#pragma alloca
|
# include <alloca.h>
|
||||||
# else
|
# else
|
||||||
# ifndef alloca
|
# ifdef _AIX
|
||||||
|
#pragma alloca
|
||||||
|
# else
|
||||||
|
# ifndef alloca
|
||||||
char *alloca ();
|
char *alloca ();
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
@ -56,13 +61,7 @@ extern int errno;
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
@ -70,11 +69,26 @@ extern int errno;
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* Guess whether integer division by zero raises signal SIGFPE.
|
||||||
|
Set to 1 only if you know for sure. In case of doubt, set to 0. */
|
||||||
|
# if defined __alpha__ || defined __arm__ || defined __i386__ \
|
||||||
|
|| defined __m68k__ || defined __s390__
|
||||||
|
# define INTDIV0_RAISES_SIGFPE 1
|
||||||
|
# else
|
||||||
|
# define INTDIV0_RAISES_SIGFPE 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !INTDIV0_RAISES_SIGFPE
|
||||||
|
# include <signal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_SYS_PARAM_H || defined _LIBC
|
#if defined HAVE_SYS_PARAM_H || defined _LIBC
|
||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
#include "plural-exp.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
|
@ -107,10 +121,10 @@ extern int errno;
|
||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_default_domain _nl_default_default_domain__
|
# define _nl_default_default_domain libintl_nl_default_default_domain
|
||||||
# define _nl_current_default_domain _nl_current_default_domain__
|
# define _nl_current_default_domain libintl_nl_current_default_domain
|
||||||
# define _nl_default_dirname _nl_default_dirname__
|
# define _nl_default_dirname libintl_nl_default_dirname
|
||||||
# define _nl_domain_bindings _nl_domain_bindings__
|
# define _nl_domain_bindings libintl_nl_domain_bindings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||||
|
@ -123,8 +137,7 @@ extern int errno;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* Rename the non ANSI C functions. This is required by the standard
|
/* Rename the non ANSI C functions. This is required by the standard
|
||||||
because some ANSI C functions will require linking with this object
|
because some ANSI C functions will require linking with this object
|
||||||
file and the name space must not be polluted.
|
file and the name space must not be polluted. */
|
||||||
GCC LOCAL: Don't use #elif. */
|
|
||||||
# define getcwd __getcwd
|
# define getcwd __getcwd
|
||||||
# ifndef stpcpy
|
# ifndef stpcpy
|
||||||
# define stpcpy __stpcpy
|
# define stpcpy __stpcpy
|
||||||
|
@ -135,9 +148,7 @@ extern int errno;
|
||||||
char *getwd ();
|
char *getwd ();
|
||||||
# define getcwd(buf, max) getwd (buf)
|
# define getcwd(buf, max) getwd (buf)
|
||||||
# else
|
# else
|
||||||
# if !defined HAVE_DECL_GETCWD
|
|
||||||
char *getcwd ();
|
char *getcwd ();
|
||||||
# endif
|
|
||||||
# endif
|
# endif
|
||||||
# ifndef HAVE_STPCPY
|
# ifndef HAVE_STPCPY
|
||||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||||
|
@ -201,16 +212,6 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
|
||||||
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* XPG3 defines the result of `setlocale (category, NULL)' as:
|
|
||||||
``Directs `setlocale()' to query `category' and return the current
|
|
||||||
setting of `local'.''
|
|
||||||
However it does not specify the exact format. Neither do SUSV2 and
|
|
||||||
ISO C 99. So we can use this feature only on selected systems (e.g.
|
|
||||||
those using GNU C Library). */
|
|
||||||
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
|
|
||||||
# define HAVE_LOCALE_NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is the type used for the search tree where known translations
|
/* This is the type used for the search tree where known translations
|
||||||
are stored. */
|
are stored. */
|
||||||
struct known_translation_t
|
struct known_translation_t
|
||||||
|
@ -275,15 +276,28 @@ transcmp (p1, p2)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef INTVARDEF
|
||||||
|
# define INTVARDEF(name)
|
||||||
|
#endif
|
||||||
|
#ifndef INTUSE
|
||||||
|
# define INTUSE(name) name
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Name of the default domain used for gettext(3) prior any call to
|
/* Name of the default domain used for gettext(3) prior any call to
|
||||||
textdomain(3). The default value for this is "messages". */
|
textdomain(3). The default value for this is "messages". */
|
||||||
const char _nl_default_default_domain[] = "messages";
|
const char _nl_default_default_domain[] attribute_hidden = "messages";
|
||||||
|
|
||||||
/* Value used as the default domain for gettext(3). */
|
/* Value used as the default domain for gettext(3). */
|
||||||
const char *_nl_current_default_domain = _nl_default_default_domain;
|
const char *_nl_current_default_domain attribute_hidden
|
||||||
|
= _nl_default_default_domain;
|
||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
/* Contains the default location of the message catalogs. */
|
||||||
|
#if defined __EMX__
|
||||||
|
extern const char _nl_default_dirname[];
|
||||||
|
#else
|
||||||
const char _nl_default_dirname[] = LOCALEDIR;
|
const char _nl_default_dirname[] = LOCALEDIR;
|
||||||
|
INTVARDEF (_nl_default_dirname)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* List with bindings of specific domains created by bindtextdomain()
|
/* List with bindings of specific domains created by bindtextdomain()
|
||||||
calls. */
|
calls. */
|
||||||
|
@ -295,19 +309,22 @@ static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
|
||||||
const char *translation,
|
const char *translation,
|
||||||
size_t translation_len))
|
size_t translation_len))
|
||||||
internal_function;
|
internal_function;
|
||||||
static unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
|
||||||
unsigned long int n))
|
|
||||||
internal_function;
|
|
||||||
static const char *category_to_name PARAMS ((int category)) internal_function;
|
|
||||||
static const char *guess_category_value PARAMS ((int category,
|
static const char *guess_category_value PARAMS ((int category,
|
||||||
const char *categoryname))
|
const char *categoryname))
|
||||||
internal_function;
|
internal_function;
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include "../locale/localeinfo.h"
|
||||||
|
# define category_to_name(category) _nl_category_names[category]
|
||||||
|
#else
|
||||||
|
static const char *category_to_name PARAMS ((int category)) internal_function;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* For those loosing systems which don't have `alloca' we have to add
|
/* For those loosing systems which don't have `alloca' we have to add
|
||||||
some additional code emulating it. */
|
some additional code emulating it. */
|
||||||
#ifdef HAVE_ALLOCA
|
#ifdef HAVE_ALLOCA
|
||||||
/* Nothing has to be done. */
|
/* Nothing has to be done. */
|
||||||
|
# define freea(p) /* nothing */
|
||||||
# define ADD_BLOCK(list, address) /* nothing */
|
# define ADD_BLOCK(list, address) /* nothing */
|
||||||
# define FREE_BLOCKS(list) /* nothing */
|
# define FREE_BLOCKS(list) /* nothing */
|
||||||
#else
|
#else
|
||||||
|
@ -332,11 +349,13 @@ struct block_list
|
||||||
while (list != NULL) { \
|
while (list != NULL) { \
|
||||||
struct block_list *old = list; \
|
struct block_list *old = list; \
|
||||||
list = list->next; \
|
list = list->next; \
|
||||||
|
free (old->address); \
|
||||||
free (old); \
|
free (old); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
# undef alloca
|
# undef alloca
|
||||||
# define alloca(size) (malloc (size))
|
# define alloca(size) (malloc (size))
|
||||||
|
# define freea(p) free (p)
|
||||||
#endif /* have alloca */
|
#endif /* have alloca */
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,12 +379,12 @@ typedef unsigned char transmem_block_t;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
__libc_rwlock_define_initialized (, _nl_state_lock)
|
__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Checking whether the binaries runs SUID must be done and glibc provides
|
/* Checking whether the binaries runs SUID must be done and glibc provides
|
||||||
|
@ -398,6 +417,9 @@ static int enable_secure;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Get the function to evaluate the plural expression. */
|
||||||
|
#include "eval-plural.h"
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||||
CATEGORY locale and, if PLURAL is nonzero, search over string
|
CATEGORY locale and, if PLURAL is nonzero, search over string
|
||||||
depending on the plural form determined by N. */
|
depending on the plural form determined by N. */
|
||||||
|
@ -433,6 +455,15 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
if (msgid1 == NULL)
|
if (msgid1 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
if (category < 0 || category >= __LC_LAST || category == LC_ALL)
|
||||||
|
/* Bogus. */
|
||||||
|
return (plural == 0
|
||||||
|
? (char *) msgid1
|
||||||
|
/* Use the Germanic plural rule. */
|
||||||
|
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
||||||
|
#endif
|
||||||
|
|
||||||
__libc_rwlock_rdlock (_nl_state_lock);
|
__libc_rwlock_rdlock (_nl_state_lock);
|
||||||
|
|
||||||
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
||||||
|
@ -441,6 +472,12 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
if (domainname == NULL)
|
if (domainname == NULL)
|
||||||
domainname = _nl_current_default_domain;
|
domainname = _nl_current_default_domain;
|
||||||
|
|
||||||
|
/* OS/2 specific: backward compatibility with older libintl versions */
|
||||||
|
#ifdef LC_MESSAGES_COMPAT
|
||||||
|
if (category == LC_MESSAGES_COMPAT)
|
||||||
|
category = LC_MESSAGES;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_TSEARCH || defined _LIBC
|
#if defined HAVE_TSEARCH || defined _LIBC
|
||||||
msgid_len = strlen (msgid1) + 1;
|
msgid_len = strlen (msgid1) + 1;
|
||||||
|
|
||||||
|
@ -453,6 +490,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
search->category = category;
|
search->category = category;
|
||||||
|
|
||||||
foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
|
foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
|
||||||
|
freea (search);
|
||||||
if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
|
if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
|
||||||
{
|
{
|
||||||
/* Now deal with plural. */
|
/* Now deal with plural. */
|
||||||
|
@ -489,7 +527,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (binding == NULL)
|
if (binding == NULL)
|
||||||
dirname = (char *) _nl_default_dirname;
|
dirname = (char *) INTUSE(_nl_default_dirname);
|
||||||
else if (IS_ABSOLUTE_PATH (binding->dirname))
|
else if (IS_ABSOLUTE_PATH (binding->dirname))
|
||||||
dirname = binding->dirname;
|
dirname = binding->dirname;
|
||||||
else
|
else
|
||||||
|
@ -517,17 +555,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
{
|
/* We cannot get the current working directory. Don't signal an
|
||||||
/* We cannot get the current working directory. Don't signal an
|
error but simply return the default string. */
|
||||||
error but simply return the default string. */
|
goto return_untranslated;
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__libc_rwlock_unlock (_nl_state_lock);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (plural == 0
|
|
||||||
? (char *) msgid1
|
|
||||||
/* Use the Germanic plural rule. */
|
|
||||||
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
|
||||||
}
|
|
||||||
|
|
||||||
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
||||||
}
|
}
|
||||||
|
@ -584,16 +614,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
domain. Return the MSGID. */
|
domain. Return the MSGID. */
|
||||||
if (strcmp (single_locale, "C") == 0
|
if (strcmp (single_locale, "C") == 0
|
||||||
|| strcmp (single_locale, "POSIX") == 0)
|
|| strcmp (single_locale, "POSIX") == 0)
|
||||||
{
|
break;
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__libc_rwlock_unlock (_nl_state_lock);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (plural == 0
|
|
||||||
? (char *) msgid1
|
|
||||||
/* Use the Germanic plural rule. */
|
|
||||||
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Find structure describing the message catalog matching the
|
/* Find structure describing the message catalog matching the
|
||||||
DOMAINNAME and CATEGORY. */
|
DOMAINNAME and CATEGORY. */
|
||||||
|
@ -625,7 +646,6 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
/* Found the translation of MSGID1 in domain DOMAIN:
|
/* Found the translation of MSGID1 in domain DOMAIN:
|
||||||
starting at RETVAL, RETLEN bytes. */
|
starting at RETVAL, RETLEN bytes. */
|
||||||
FREE_BLOCKS (block_list);
|
FREE_BLOCKS (block_list);
|
||||||
__set_errno (saved_errno);
|
|
||||||
#if defined HAVE_TSEARCH || defined _LIBC
|
#if defined HAVE_TSEARCH || defined _LIBC
|
||||||
if (foundp == NULL)
|
if (foundp == NULL)
|
||||||
{
|
{
|
||||||
|
@ -664,6 +684,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
(*foundp)->translation_length = retlen;
|
(*foundp)->translation_length = retlen;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
__set_errno (saved_errno);
|
||||||
|
|
||||||
/* Now deal with plural. */
|
/* Now deal with plural. */
|
||||||
if (plural)
|
if (plural)
|
||||||
retval = plural_lookup (domain, n, retval, retlen);
|
retval = plural_lookup (domain, n, retval, retlen);
|
||||||
|
@ -673,7 +695,30 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
|
||||||
|
return_untranslated:
|
||||||
|
/* Return the untranslated MSGID. */
|
||||||
|
FREE_BLOCKS (block_list);
|
||||||
|
__libc_rwlock_unlock (_nl_state_lock);
|
||||||
|
#ifndef _LIBC
|
||||||
|
if (!ENABLE_SECURE)
|
||||||
|
{
|
||||||
|
extern void _nl_log_untranslated PARAMS ((const char *logfilename,
|
||||||
|
const char *domainname,
|
||||||
|
const char *msgid1,
|
||||||
|
const char *msgid2,
|
||||||
|
int plural));
|
||||||
|
const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
|
||||||
|
|
||||||
|
if (logfilename != NULL && logfilename[0] != '\0')
|
||||||
|
_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
__set_errno (saved_errno);
|
||||||
|
return (plural == 0
|
||||||
|
? (char *) msgid1
|
||||||
|
/* Use the Germanic plural rule. */
|
||||||
|
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -686,6 +731,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
size_t *lengthp;
|
size_t *lengthp;
|
||||||
{
|
{
|
||||||
struct loaded_domain *domain;
|
struct loaded_domain *domain;
|
||||||
|
nls_uint32 nstrings;
|
||||||
size_t act;
|
size_t act;
|
||||||
char *result;
|
char *result;
|
||||||
size_t resultlen;
|
size_t resultlen;
|
||||||
|
@ -698,8 +744,10 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
|
|
||||||
domain = (struct loaded_domain *) domain_file->data;
|
domain = (struct loaded_domain *) domain_file->data;
|
||||||
|
|
||||||
|
nstrings = domain->nstrings;
|
||||||
|
|
||||||
/* Locate the MSGID and its translation. */
|
/* Locate the MSGID and its translation. */
|
||||||
if (domain->hash_size > 2 && domain->hash_tab != NULL)
|
if (domain->hash_tab != NULL)
|
||||||
{
|
{
|
||||||
/* Use the hashing table. */
|
/* Use the hashing table. */
|
||||||
nls_uint32 len = strlen (msgid);
|
nls_uint32 len = strlen (msgid);
|
||||||
|
@ -709,22 +757,30 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
nls_uint32 nstr =
|
||||||
|
W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
|
||||||
|
|
||||||
if (nstr == 0)
|
if (nstr == 0)
|
||||||
/* Hash table entry is empty. */
|
/* Hash table entry is empty. */
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* Compare msgid with the original string at index nstr-1.
|
nstr--;
|
||||||
|
|
||||||
|
/* Compare msgid with the original string at index nstr.
|
||||||
We compare the lengths with >=, not ==, because plural entries
|
We compare the lengths with >=, not ==, because plural entries
|
||||||
are represented by strings with an embedded NUL. */
|
are represented by strings with an embedded NUL. */
|
||||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
|
if (nstr < nstrings
|
||||||
&& (strcmp (msgid,
|
? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
|
||||||
domain->data + W (domain->must_swap,
|
&& (strcmp (msgid,
|
||||||
domain->orig_tab[nstr - 1].offset))
|
domain->data + W (domain->must_swap,
|
||||||
== 0))
|
domain->orig_tab[nstr].offset))
|
||||||
|
== 0)
|
||||||
|
: domain->orig_sysdep_tab[nstr - nstrings].length > len
|
||||||
|
&& (strcmp (msgid,
|
||||||
|
domain->orig_sysdep_tab[nstr - nstrings].pointer)
|
||||||
|
== 0))
|
||||||
{
|
{
|
||||||
act = nstr - 1;
|
act = nstr;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,8 +798,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
size_t top, bottom;
|
size_t top, bottom;
|
||||||
|
|
||||||
bottom = 0;
|
bottom = 0;
|
||||||
act = 0;
|
top = nstrings;
|
||||||
top = domain->nstrings;
|
|
||||||
while (bottom < top)
|
while (bottom < top)
|
||||||
{
|
{
|
||||||
int cmp_val;
|
int cmp_val;
|
||||||
|
@ -766,9 +821,17 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
found:
|
found:
|
||||||
/* The translation was found at index ACT. If we have to convert the
|
/* The translation was found at index ACT. If we have to convert the
|
||||||
string to use a different character set, this is the time. */
|
string to use a different character set, this is the time. */
|
||||||
result = ((char *) domain->data
|
if (act < nstrings)
|
||||||
+ W (domain->must_swap, domain->trans_tab[act].offset));
|
{
|
||||||
resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
|
result = (char *)
|
||||||
|
(domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
|
||||||
|
resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
|
||||||
|
resultlen = domain->trans_sysdep_tab[act - nstrings].length;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined _LIBC || HAVE_ICONV
|
#if defined _LIBC || HAVE_ICONV
|
||||||
if (domain->codeset_cntr
|
if (domain->codeset_cntr
|
||||||
|
@ -801,8 +864,9 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
||||||
NULs. */
|
NULs. */
|
||||||
|
|
||||||
if (domain->conv_tab == NULL
|
if (domain->conv_tab == NULL
|
||||||
&& ((domain->conv_tab = (char **) calloc (domain->nstrings,
|
&& ((domain->conv_tab =
|
||||||
sizeof (char *)))
|
(char **) calloc (nstrings + domain->n_sysdep_strings,
|
||||||
|
sizeof (char *)))
|
||||||
== NULL))
|
== NULL))
|
||||||
/* Mark that we didn't succeed allocating a table. */
|
/* Mark that we didn't succeed allocating a table. */
|
||||||
domain->conv_tab = (char **) -1;
|
domain->conv_tab = (char **) -1;
|
||||||
|
@ -1008,88 +1072,7 @@ plural_lookup (domain, n, translation, translation_len)
|
||||||
return (char *) p;
|
return (char *) p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _LIBC
|
||||||
/* Function to evaluate the plural expression and return an index value. */
|
|
||||||
static unsigned long int
|
|
||||||
internal_function
|
|
||||||
plural_eval (pexp, n)
|
|
||||||
struct expression *pexp;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
|
||||||
switch (pexp->nargs)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
switch (pexp->operation)
|
|
||||||
{
|
|
||||||
case var:
|
|
||||||
return n;
|
|
||||||
case num:
|
|
||||||
return pexp->val.num;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
/* pexp->operation must be lnot. */
|
|
||||||
unsigned long int arg = plural_eval (pexp->val.args[0], n);
|
|
||||||
return ! arg;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
|
|
||||||
if (pexp->operation == lor)
|
|
||||||
return leftarg || plural_eval (pexp->val.args[1], n);
|
|
||||||
else if (pexp->operation == land)
|
|
||||||
return leftarg && plural_eval (pexp->val.args[1], n);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
|
|
||||||
|
|
||||||
switch (pexp->operation)
|
|
||||||
{
|
|
||||||
case mult:
|
|
||||||
return leftarg * rightarg;
|
|
||||||
case divide:
|
|
||||||
return leftarg / rightarg;
|
|
||||||
case module:
|
|
||||||
return leftarg % rightarg;
|
|
||||||
case plus:
|
|
||||||
return leftarg + rightarg;
|
|
||||||
case minus:
|
|
||||||
return leftarg - rightarg;
|
|
||||||
case less_than:
|
|
||||||
return leftarg < rightarg;
|
|
||||||
case greater_than:
|
|
||||||
return leftarg > rightarg;
|
|
||||||
case less_or_equal:
|
|
||||||
return leftarg <= rightarg;
|
|
||||||
case greater_or_equal:
|
|
||||||
return leftarg >= rightarg;
|
|
||||||
case equal:
|
|
||||||
return leftarg == rightarg;
|
|
||||||
case not_equal:
|
|
||||||
return leftarg != rightarg;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3:
|
|
||||||
{
|
|
||||||
/* pexp->operation must be qmop. */
|
|
||||||
unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
|
|
||||||
return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Return string representation of locale CATEGORY. */
|
/* Return string representation of locale CATEGORY. */
|
||||||
static const char *
|
static const char *
|
||||||
internal_function
|
internal_function
|
||||||
|
@ -1149,6 +1132,7 @@ category_to_name (category)
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Guess value of current locale from value of the environment variables. */
|
/* Guess value of current locale from value of the environment variables. */
|
||||||
static const char *
|
static const char *
|
||||||
|
@ -1159,9 +1143,7 @@ guess_category_value (category, categoryname)
|
||||||
{
|
{
|
||||||
const char *language;
|
const char *language;
|
||||||
const char *retval;
|
const char *retval;
|
||||||
(void) category; /* shut up compiler */
|
|
||||||
(void) categoryname; /* ditto */
|
|
||||||
|
|
||||||
/* The highest priority value is the `LANGUAGE' environment
|
/* The highest priority value is the `LANGUAGE' environment
|
||||||
variable. But we don't use the value if the currently selected
|
variable. But we don't use the value if the currently selected
|
||||||
locale is the C locale. This is a GNU extension. */
|
locale is the C locale. This is a GNU extension. */
|
||||||
|
@ -1172,27 +1154,21 @@ guess_category_value (category, categoryname)
|
||||||
/* We have to proceed with the POSIX methods of looking to `LC_ALL',
|
/* We have to proceed with the POSIX methods of looking to `LC_ALL',
|
||||||
`LC_xxx', and `LANG'. On some systems this can be done by the
|
`LC_xxx', and `LANG'. On some systems this can be done by the
|
||||||
`setlocale' function itself. */
|
`setlocale' function itself. */
|
||||||
#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
|
#ifdef _LIBC
|
||||||
retval = setlocale (category, NULL);
|
retval = __current_locale_name (category);
|
||||||
#else
|
#else
|
||||||
/* Setting of LC_ALL overwrites all other. */
|
retval = _nl_locale_name (category, categoryname);
|
||||||
retval = getenv ("LC_ALL");
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
{
|
|
||||||
/* Next comes the name of the desired category. */
|
|
||||||
retval = getenv (categoryname);
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
{
|
|
||||||
/* Last possibility is the LANG environment variable. */
|
|
||||||
retval = getenv ("LANG");
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
/* We use C as the default domain. POSIX says this is
|
|
||||||
implementation defined. */
|
|
||||||
return "C";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Ignore LANGUAGE if the locale is set to "C" because
|
||||||
|
1. "C" locale usually uses the ASCII encoding, and most international
|
||||||
|
messages use non-ASCII characters. These characters get displayed
|
||||||
|
as question marks (if using glibc's iconv()) or as invalid 8-bit
|
||||||
|
characters (because other iconv()s refuse to convert most non-ASCII
|
||||||
|
characters to ASCII). In any case, the output is ugly.
|
||||||
|
2. The precise output of some programs in the "C" locale is specified
|
||||||
|
by POSIX and should not depend on environment variables like
|
||||||
|
"LANGUAGE". We allow such programs to use gettext(). */
|
||||||
return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
|
return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1229,8 +1205,7 @@ mempcpy (dest, src, n)
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* If we want to free all resources we have to do some work at
|
/* If we want to free all resources we have to do some work at
|
||||||
program's end. */
|
program's end. */
|
||||||
static void __attribute__ ((unused))
|
libc_freeres_fn (free_mem)
|
||||||
free_mem (void)
|
|
||||||
{
|
{
|
||||||
void *old;
|
void *old;
|
||||||
|
|
||||||
|
@ -1238,7 +1213,7 @@ free_mem (void)
|
||||||
{
|
{
|
||||||
struct binding *oldp = _nl_domain_bindings;
|
struct binding *oldp = _nl_domain_bindings;
|
||||||
_nl_domain_bindings = _nl_domain_bindings->next;
|
_nl_domain_bindings = _nl_domain_bindings->next;
|
||||||
if (oldp->dirname != _nl_default_dirname)
|
if (oldp->dirname != INTUSE(_nl_default_dirname))
|
||||||
/* Yes, this is a pointer comparison. */
|
/* Yes, this is a pointer comparison. */
|
||||||
free (oldp->dirname);
|
free (oldp->dirname);
|
||||||
free (oldp->codeset);
|
free (oldp->codeset);
|
||||||
|
@ -1260,6 +1235,4 @@ free_mem (void)
|
||||||
free (old);
|
free (old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
#endif
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the dcngettext(3) function.
|
/* Implementation of the dcngettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -37,8 +37,8 @@
|
||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the dgettext(3) function.
|
/* Implementation of the dgettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -37,10 +37,10 @@
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DGETTEXT __dgettext
|
# define DGETTEXT __dgettext
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define DGETTEXT dgettext__
|
# define DGETTEXT libintl_dgettext
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the dngettext(3) function.
|
/* Implementation of the dngettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -39,8 +39,8 @@
|
||||||
# define DNGETTEXT __dngettext
|
# define DNGETTEXT __dngettext
|
||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
#else
|
#else
|
||||||
# define DNGETTEXT dngettext__
|
# define DNGETTEXT libintl_dngettext
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
114
intl/eval-plural.h
Normal file
114
intl/eval-plural.h
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/* Plural expression evaluation.
|
||||||
|
Copyright (C) 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef STATIC
|
||||||
|
#define STATIC static
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Evaluate the plural expression and return an index value. */
|
||||||
|
STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
||||||
|
unsigned long int n))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
unsigned long int
|
||||||
|
internal_function
|
||||||
|
plural_eval (pexp, n)
|
||||||
|
struct expression *pexp;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
switch (pexp->nargs)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
switch (pexp->operation)
|
||||||
|
{
|
||||||
|
case var:
|
||||||
|
return n;
|
||||||
|
case num:
|
||||||
|
return pexp->val.num;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
/* pexp->operation must be lnot. */
|
||||||
|
unsigned long int arg = plural_eval (pexp->val.args[0], n);
|
||||||
|
return ! arg;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
|
||||||
|
if (pexp->operation == lor)
|
||||||
|
return leftarg || plural_eval (pexp->val.args[1], n);
|
||||||
|
else if (pexp->operation == land)
|
||||||
|
return leftarg && plural_eval (pexp->val.args[1], n);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
|
||||||
|
|
||||||
|
switch (pexp->operation)
|
||||||
|
{
|
||||||
|
case mult:
|
||||||
|
return leftarg * rightarg;
|
||||||
|
case divide:
|
||||||
|
#if !INTDIV0_RAISES_SIGFPE
|
||||||
|
if (rightarg == 0)
|
||||||
|
raise (SIGFPE);
|
||||||
|
#endif
|
||||||
|
return leftarg / rightarg;
|
||||||
|
case module:
|
||||||
|
#if !INTDIV0_RAISES_SIGFPE
|
||||||
|
if (rightarg == 0)
|
||||||
|
raise (SIGFPE);
|
||||||
|
#endif
|
||||||
|
return leftarg % rightarg;
|
||||||
|
case plus:
|
||||||
|
return leftarg + rightarg;
|
||||||
|
case minus:
|
||||||
|
return leftarg - rightarg;
|
||||||
|
case less_than:
|
||||||
|
return leftarg < rightarg;
|
||||||
|
case greater_than:
|
||||||
|
return leftarg > rightarg;
|
||||||
|
case less_or_equal:
|
||||||
|
return leftarg <= rightarg;
|
||||||
|
case greater_or_equal:
|
||||||
|
return leftarg >= rightarg;
|
||||||
|
case equal:
|
||||||
|
return leftarg == rightarg;
|
||||||
|
case not_equal:
|
||||||
|
return leftarg != rightarg;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
/* pexp->operation must be qmop. */
|
||||||
|
unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
|
||||||
|
return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -178,8 +178,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
static void __attribute__ ((unused))
|
libc_freeres_fn (free_mem)
|
||||||
free_mem (void)
|
|
||||||
{
|
{
|
||||||
struct loaded_l10nfile *runp = _nl_loaded_domains;
|
struct loaded_l10nfile *runp = _nl_loaded_domains;
|
||||||
|
|
||||||
|
@ -193,6 +192,4 @@ free_mem (void)
|
||||||
free (here);
|
free (here);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
#endif
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of gettext(3) function.
|
/* Implementation of gettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -42,10 +42,10 @@
|
||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define GETTEXT __gettext
|
# define GETTEXT __gettext
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define GETTEXT gettext__
|
# define GETTEXT libintl_gettext
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
/* Look up MSGID in the current default message catalog for the current
|
|
@ -1,5 +1,5 @@
|
||||||
/* Header describing internals of libintl library.
|
/* Header describing internals of libintl library.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
@ -32,12 +32,12 @@
|
||||||
|
|
||||||
#include "loadinfo.h"
|
#include "loadinfo.h"
|
||||||
|
|
||||||
#include "gettext.h" /* Get nls_uint32. */
|
#include "gmo.h" /* Get nls_uint32. */
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
|
@ -48,6 +48,10 @@
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef attribute_hidden
|
||||||
|
# define attribute_hidden
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Tell the compiler when a conditional or integer expression is
|
/* Tell the compiler when a conditional or integer expression is
|
||||||
almost always true or almost always false. */
|
almost always true or almost always false. */
|
||||||
#ifndef HAVE_BUILTIN_EXPECT
|
#ifndef HAVE_BUILTIN_EXPECT
|
||||||
|
@ -63,76 +67,59 @@
|
||||||
# include <byteswap.h>
|
# include <byteswap.h>
|
||||||
# define SWAP(i) bswap_32 (i)
|
# define SWAP(i) bswap_32 (i)
|
||||||
#else
|
#else
|
||||||
/* GCC LOCAL: Prototype first to avoid warnings; change argument to
|
|
||||||
unsigned int to avoid K&R type promotion errors with 64-bit "int". */
|
|
||||||
static inline nls_uint32 SWAP PARAMS ((unsigned int));
|
|
||||||
static inline nls_uint32
|
static inline nls_uint32
|
||||||
SWAP (ii)
|
SWAP (i)
|
||||||
unsigned int ii;
|
nls_uint32 i;
|
||||||
{
|
{
|
||||||
nls_uint32 i = ii;
|
|
||||||
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
|
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* This is the representation of the expressions to determine the
|
/* In-memory representation of system dependent string. */
|
||||||
plural form. */
|
struct sysdep_string_desc
|
||||||
struct expression
|
|
||||||
{
|
{
|
||||||
int nargs; /* Number of arguments. */
|
/* Length of addressed string, including the trailing NUL. */
|
||||||
enum operator
|
size_t length;
|
||||||
{
|
/* Pointer to addressed string. */
|
||||||
/* Without arguments: */
|
const char *pointer;
|
||||||
var, /* The variable "n". */
|
|
||||||
num, /* Decimal number. */
|
|
||||||
/* Unary operators: */
|
|
||||||
lnot, /* Logical NOT. */
|
|
||||||
/* Binary operators: */
|
|
||||||
mult, /* Multiplication. */
|
|
||||||
divide, /* Division. */
|
|
||||||
module, /* Module operation. */
|
|
||||||
plus, /* Addition. */
|
|
||||||
minus, /* Subtraction. */
|
|
||||||
less_than, /* Comparison. */
|
|
||||||
greater_than, /* Comparison. */
|
|
||||||
less_or_equal, /* Comparison. */
|
|
||||||
greater_or_equal, /* Comparison. */
|
|
||||||
equal, /* Comparision for equality. */
|
|
||||||
not_equal, /* Comparision for inequality. */
|
|
||||||
land, /* Logical AND. */
|
|
||||||
lor, /* Logical OR. */
|
|
||||||
/* Ternary operators: */
|
|
||||||
qmop /* Question mark operator. */
|
|
||||||
} operation;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
unsigned long int num; /* Number value for `num'. */
|
|
||||||
struct expression *args[3]; /* Up to three arguments. */
|
|
||||||
} val;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is the data structure to pass information to the parser and get
|
|
||||||
the result in a thread-safe way. */
|
|
||||||
struct parse_args
|
|
||||||
{
|
|
||||||
const char *cp;
|
|
||||||
struct expression *res;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* The representation of an opened message catalog. */
|
/* The representation of an opened message catalog. */
|
||||||
struct loaded_domain
|
struct loaded_domain
|
||||||
{
|
{
|
||||||
|
/* Pointer to memory containing the .mo file. */
|
||||||
const char *data;
|
const char *data;
|
||||||
|
/* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
|
||||||
int use_mmap;
|
int use_mmap;
|
||||||
|
/* Size of mmap()ed memory. */
|
||||||
size_t mmap_size;
|
size_t mmap_size;
|
||||||
|
/* 1 if the .mo file uses a different endianness than this machine. */
|
||||||
int must_swap;
|
int must_swap;
|
||||||
|
/* Pointer to additional malloc()ed memory. */
|
||||||
|
void *malloced;
|
||||||
|
|
||||||
|
/* Number of static strings pairs. */
|
||||||
nls_uint32 nstrings;
|
nls_uint32 nstrings;
|
||||||
struct string_desc *orig_tab;
|
/* Pointer to descriptors of original strings in the file. */
|
||||||
struct string_desc *trans_tab;
|
const struct string_desc *orig_tab;
|
||||||
|
/* Pointer to descriptors of translated strings in the file. */
|
||||||
|
const struct string_desc *trans_tab;
|
||||||
|
|
||||||
|
/* Number of system dependent strings pairs. */
|
||||||
|
nls_uint32 n_sysdep_strings;
|
||||||
|
/* Pointer to descriptors of original sysdep strings. */
|
||||||
|
const struct sysdep_string_desc *orig_sysdep_tab;
|
||||||
|
/* Pointer to descriptors of translated sysdep strings. */
|
||||||
|
const struct sysdep_string_desc *trans_sysdep_tab;
|
||||||
|
|
||||||
|
/* Size of hash table. */
|
||||||
nls_uint32 hash_size;
|
nls_uint32 hash_size;
|
||||||
nls_uint32 *hash_tab;
|
/* Pointer to hash table. */
|
||||||
|
const nls_uint32 *hash_tab;
|
||||||
|
/* 1 if the hash table uses a different endianness than this machine. */
|
||||||
|
int must_swap_hash_tab;
|
||||||
|
|
||||||
int codeset_cntr;
|
int codeset_cntr;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
__gconv_t conv;
|
__gconv_t conv;
|
||||||
|
@ -148,13 +135,12 @@ struct loaded_domain
|
||||||
};
|
};
|
||||||
|
|
||||||
/* We want to allocate a string at the end of the struct. But ISO C
|
/* We want to allocate a string at the end of the struct. But ISO C
|
||||||
doesn't allow zero sized arrays.
|
doesn't allow zero sized arrays. */
|
||||||
GCC LOCAL: Always use 1, to avoid warnings. */
|
#ifdef __GNUC__
|
||||||
/*#ifdef __GNUC__*/
|
# define ZERO 0
|
||||||
/*# define ZERO 0*/
|
#else
|
||||||
/*#else*/
|
|
||||||
# define ZERO 1
|
# define ZERO 1
|
||||||
/*#endif*/
|
#endif
|
||||||
|
|
||||||
/* A set of settings bound to a message domain. Used to store settings
|
/* A set of settings bound to a message domain. Used to store settings
|
||||||
from bindtextdomain() and bind_textdomain_codeset(). */
|
from bindtextdomain() and bind_textdomain_codeset(). */
|
||||||
|
@ -172,6 +158,10 @@ struct binding
|
||||||
This variable is part of the external ABI of the GNU libintl. */
|
This variable is part of the external ABI of the GNU libintl. */
|
||||||
extern int _nl_msg_cat_cntr;
|
extern int _nl_msg_cat_cntr;
|
||||||
|
|
||||||
|
#ifndef _LIBC
|
||||||
|
const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
|
||||||
|
#endif
|
||||||
|
|
||||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
||||||
char *__locale,
|
char *__locale,
|
||||||
const char *__domainname,
|
const char *__domainname,
|
||||||
|
@ -194,10 +184,6 @@ char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
||||||
const char *msgid, size_t *lengthp))
|
const char *msgid, size_t *lengthp))
|
||||||
internal_function;
|
internal_function;
|
||||||
|
|
||||||
/* GCC LOCAL: This prototype moved here from next to its
|
|
||||||
use in loadmsgcat.c. */
|
|
||||||
extern const char *locale_charset PARAMS ((void)) internal_function;
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
extern char *__gettext PARAMS ((const char *__msgid));
|
extern char *__gettext PARAMS ((const char *__msgid));
|
||||||
extern char *__dgettext PARAMS ((const char *__domainname,
|
extern char *__dgettext PARAMS ((const char *__domainname,
|
||||||
|
@ -222,38 +208,15 @@ extern char *__bindtextdomain PARAMS ((const char *__domainname,
|
||||||
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||||
const char *__codeset));
|
const char *__codeset));
|
||||||
#else
|
#else
|
||||||
extern char *gettext__ PARAMS ((const char *__msgid));
|
/* Declare the exported libintl_* functions, in a way that allows us to
|
||||||
extern char *dgettext__ PARAMS ((const char *__domainname,
|
call them under their real name. */
|
||||||
const char *__msgid));
|
# define _INTL_REDIRECT_MACROS
|
||||||
extern char *dcgettext__ PARAMS ((const char *__domainname,
|
# include "libintl.h"
|
||||||
const char *__msgid, int __category));
|
extern char *libintl_dcigettext PARAMS ((const char *__domainname,
|
||||||
extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
|
const char *__msgid1,
|
||||||
unsigned long int __n));
|
const char *__msgid2,
|
||||||
extern char *dngettext__ PARAMS ((const char *__domainname,
|
int __plural, unsigned long int __n,
|
||||||
const char *__msgid1, const char *__msgid2,
|
int __category));
|
||||||
unsigned long int __n));
|
|
||||||
extern char *dcngettext__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__msgid1, const char *__msgid2,
|
|
||||||
unsigned long int __n, int __category));
|
|
||||||
extern char *dcigettext__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__msgid1, const char *__msgid2,
|
|
||||||
int __plural, unsigned long int __n,
|
|
||||||
int __category));
|
|
||||||
extern char *textdomain__ PARAMS ((const char *__domainname));
|
|
||||||
extern char *bindtextdomain__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__dirname));
|
|
||||||
extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__codeset));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
extern void __gettext_free_exp PARAMS ((struct expression *exp))
|
|
||||||
internal_function;
|
|
||||||
extern int __gettextparse PARAMS ((void *arg));
|
|
||||||
#else
|
|
||||||
extern void gettext_free_exp__ PARAMS ((struct expression *exp))
|
|
||||||
internal_function;
|
|
||||||
extern int gettextparse__ PARAMS ((void *arg));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
/* @@ begin of epilog @@ */
|
|
@ -1,5 +1,5 @@
|
||||||
/* Description of GNU message catalog format: general file layout.
|
/* Description of GNU message catalog format: general file layout.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -19,9 +19,7 @@
|
||||||
#ifndef _GETTEXT_H
|
#ifndef _GETTEXT_H
|
||||||
#define _GETTEXT_H 1
|
#define _GETTEXT_H 1
|
||||||
|
|
||||||
#if HAVE_LIMITS_H || _LIBC
|
#include <limits.h>
|
||||||
# include <limits.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
@ -36,27 +34,30 @@
|
||||||
to determine an unsigned integral type that is 32 bits wide. An
|
to determine an unsigned integral type that is 32 bits wide. An
|
||||||
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
||||||
as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
|
as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
|
||||||
when cross-compiling. We use the maximum values for signed ints
|
when cross-compiling. */
|
||||||
for the test to avoid using U suffixes. */
|
|
||||||
|
|
||||||
#define INT_MAX_32_BITS 2147483647
|
#if __STDC__
|
||||||
|
# define UINT_MAX_32_BITS 4294967295U
|
||||||
|
#else
|
||||||
|
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If INT_MAX isn't defined, assume it's a 32-bit type.
|
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
||||||
This should be valid for all systems GNU cares about because
|
This should be valid for all systems GNU cares about because
|
||||||
that doesn't include 16-bit systems, and only modern systems
|
that doesn't include 16-bit systems, and only modern systems
|
||||||
(that certainly have <limits.h>) have 64+-bit integral types. */
|
(that certainly have <limits.h>) have 64+-bit integral types. */
|
||||||
|
|
||||||
#ifndef INT_MAX
|
#ifndef UINT_MAX
|
||||||
# define INT_MAX UINT_MAX_32_BITS
|
# define UINT_MAX UINT_MAX_32_BITS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if INT_MAX == INT_MAX_32_BITS
|
#if UINT_MAX == UINT_MAX_32_BITS
|
||||||
typedef unsigned int nls_uint32;
|
typedef unsigned nls_uint32;
|
||||||
#else
|
#else
|
||||||
# if SHRT_MAX == INT_MAX_32_BITS
|
# if USHRT_MAX == UINT_MAX_32_BITS
|
||||||
typedef unsigned short nls_uint32;
|
typedef unsigned short nls_uint32;
|
||||||
# else
|
# else
|
||||||
# if LONG_MAX == INT_MAX_32_BITS
|
# if ULONG_MAX == UINT_MAX_32_BITS
|
||||||
typedef unsigned long nls_uint32;
|
typedef unsigned long nls_uint32;
|
||||||
# else
|
# else
|
||||||
/* The following line is intended to throw an error. Using #error is
|
/* The following line is intended to throw an error. Using #error is
|
||||||
|
@ -74,26 +75,74 @@ struct mo_file_header
|
||||||
nls_uint32 magic;
|
nls_uint32 magic;
|
||||||
/* The revision number of the file format. */
|
/* The revision number of the file format. */
|
||||||
nls_uint32 revision;
|
nls_uint32 revision;
|
||||||
|
|
||||||
|
/* The following are only used in .mo files with major revision 0. */
|
||||||
|
|
||||||
/* The number of strings pairs. */
|
/* The number of strings pairs. */
|
||||||
nls_uint32 nstrings;
|
nls_uint32 nstrings;
|
||||||
/* Offset of table with start offsets of original strings. */
|
/* Offset of table with start offsets of original strings. */
|
||||||
nls_uint32 orig_tab_offset;
|
nls_uint32 orig_tab_offset;
|
||||||
/* Offset of table with start offsets of translation strings. */
|
/* Offset of table with start offsets of translated strings. */
|
||||||
nls_uint32 trans_tab_offset;
|
nls_uint32 trans_tab_offset;
|
||||||
/* Size of hashing table. */
|
/* Size of hash table. */
|
||||||
nls_uint32 hash_tab_size;
|
nls_uint32 hash_tab_size;
|
||||||
/* Offset of first hashing entry. */
|
/* Offset of first hash table entry. */
|
||||||
nls_uint32 hash_tab_offset;
|
nls_uint32 hash_tab_offset;
|
||||||
|
|
||||||
|
/* The following are only used in .mo files with minor revision >= 1. */
|
||||||
|
|
||||||
|
/* The number of system dependent segments. */
|
||||||
|
nls_uint32 n_sysdep_segments;
|
||||||
|
/* Offset of table describing system dependent segments. */
|
||||||
|
nls_uint32 sysdep_segments_offset;
|
||||||
|
/* The number of system dependent strings pairs. */
|
||||||
|
nls_uint32 n_sysdep_strings;
|
||||||
|
/* Offset of table with start offsets of original sysdep strings. */
|
||||||
|
nls_uint32 orig_sysdep_tab_offset;
|
||||||
|
/* Offset of table with start offsets of translated sysdep strings. */
|
||||||
|
nls_uint32 trans_sysdep_tab_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Descriptor for static string contained in the binary .mo file. */
|
||||||
struct string_desc
|
struct string_desc
|
||||||
{
|
{
|
||||||
/* Length of addressed string. */
|
/* Length of addressed string, not including the trailing NUL. */
|
||||||
nls_uint32 length;
|
nls_uint32 length;
|
||||||
/* Offset of string in file. */
|
/* Offset of string in file. */
|
||||||
nls_uint32 offset;
|
nls_uint32 offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* The following are only used in .mo files with minor revision >= 1. */
|
||||||
|
|
||||||
|
/* Descriptor for system dependent string segment. */
|
||||||
|
struct sysdep_segment
|
||||||
|
{
|
||||||
|
/* Length of addressed string, including the trailing NUL. */
|
||||||
|
nls_uint32 length;
|
||||||
|
/* Offset of string in file. */
|
||||||
|
nls_uint32 offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Descriptor for system dependent string. */
|
||||||
|
struct sysdep_string
|
||||||
|
{
|
||||||
|
/* Offset of static string segments in file. */
|
||||||
|
nls_uint32 offset;
|
||||||
|
/* Alternating sequence of static and system dependent segments.
|
||||||
|
The last segment is a static segment, including the trailing NUL. */
|
||||||
|
struct segment_pair
|
||||||
|
{
|
||||||
|
/* Size of static segment. */
|
||||||
|
nls_uint32 segsize;
|
||||||
|
/* Reference to system dependent string segment, or ~0 at the end. */
|
||||||
|
nls_uint32 sysdepref;
|
||||||
|
} segments[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
|
||||||
|
regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
|
||||||
|
#define SEGMENTS_END ((nls_uint32) ~0)
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
/* @@ begin of epilog @@ */
|
||||||
|
|
||||||
#endif /* gettext.h */
|
#endif /* gettext.h */
|
|
@ -19,7 +19,7 @@
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(Args) Args
|
# define PARAMS(Args) Args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(Args) ()
|
# define PARAMS(Args) ()
|
151
intl/intl-compat.c
Normal file
151
intl/intl-compat.c
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
||||||
|
Library.
|
||||||
|
Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
|
||||||
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
|
/* This file redirects the gettext functions (without prefix) to those
|
||||||
|
defined in the included GNU libintl library (with "libintl_" prefix).
|
||||||
|
It is compiled into libintl in order to make the AM_GNU_GETTEXT test
|
||||||
|
of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
|
||||||
|
has the redirections primarily in the <libintl.h> include file.
|
||||||
|
It is also compiled into libgnuintl so that libgnuintl.so can be used
|
||||||
|
as LD_PRELOADable library on glibc systems, to provide the extra
|
||||||
|
features that the functions in the libc don't have (namely, logging). */
|
||||||
|
|
||||||
|
|
||||||
|
#undef gettext
|
||||||
|
#undef dgettext
|
||||||
|
#undef dcgettext
|
||||||
|
#undef ngettext
|
||||||
|
#undef dngettext
|
||||||
|
#undef dcngettext
|
||||||
|
#undef textdomain
|
||||||
|
#undef bindtextdomain
|
||||||
|
#undef bind_textdomain_codeset
|
||||||
|
|
||||||
|
|
||||||
|
/* When building a DLL, we must export some functions. Note that because
|
||||||
|
the functions are only defined for binary backward compatibility, we
|
||||||
|
don't need to use __declspec(dllimport) in any case. */
|
||||||
|
#if defined _MSC_VER && BUILDING_DLL
|
||||||
|
# define DLL_EXPORTED __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
# define DLL_EXPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
gettext (msgid)
|
||||||
|
const char *msgid;
|
||||||
|
{
|
||||||
|
return libintl_gettext (msgid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
dgettext (domainname, msgid)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid;
|
||||||
|
{
|
||||||
|
return libintl_dgettext (domainname, msgid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
dcgettext (domainname, msgid, category)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid;
|
||||||
|
int category;
|
||||||
|
{
|
||||||
|
return libintl_dcgettext (domainname, msgid, category);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
ngettext (msgid1, msgid2, n)
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
return libintl_ngettext (msgid1, msgid2, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
dngettext (domainname, msgid1, msgid2, n)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
{
|
||||||
|
return libintl_dngettext (domainname, msgid1, msgid2, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
dcngettext (domainname, msgid1, msgid2, n, category)
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
unsigned long int n;
|
||||||
|
int category;
|
||||||
|
{
|
||||||
|
return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
textdomain (domainname)
|
||||||
|
const char *domainname;
|
||||||
|
{
|
||||||
|
return libintl_textdomain (domainname);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
bindtextdomain (domainname, dirname)
|
||||||
|
const char *domainname;
|
||||||
|
const char *dirname;
|
||||||
|
{
|
||||||
|
return libintl_bindtextdomain (domainname, dirname);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
char *
|
||||||
|
bind_textdomain_codeset (domainname, codeset)
|
||||||
|
const char *domainname;
|
||||||
|
const char *codeset;
|
||||||
|
{
|
||||||
|
return libintl_bind_textdomain_codeset (domainname, codeset);
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,11 +28,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined _LIBC || defined HAVE_ARGZ_H
|
#if defined _LIBC || defined HAVE_ARGZ_H
|
||||||
# include <argz.h>
|
# include <argz.h>
|
||||||
|
@ -67,6 +62,24 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Pathname support.
|
||||||
|
ISSLASH(C) tests whether C is a directory separator character.
|
||||||
|
IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
|
||||||
|
it may be concatenated to a directory pathname.
|
||||||
|
*/
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
# define HAS_DEVICE(P) \
|
||||||
|
((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
|
||||||
|
&& (P)[1] == ':')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define ISSLASH(C) ((C) == '/')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define function which are usually not available. */
|
/* Define function which are usually not available. */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||||
|
@ -90,6 +103,10 @@ argz_count__ (argz, len)
|
||||||
}
|
}
|
||||||
# undef __argz_count
|
# undef __argz_count
|
||||||
# define __argz_count(argz, len) argz_count__ (argz, len)
|
# define __argz_count(argz, len) argz_count__ (argz, len)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||||
|
@ -114,6 +131,11 @@ argz_stringify__ (argz, len, sep)
|
||||||
}
|
}
|
||||||
# undef __argz_stringify
|
# undef __argz_stringify
|
||||||
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_stringify(argz, len, sep) \
|
||||||
|
INTUSE(__argz_stringify) (argz, len, sep)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||||
|
@ -181,12 +203,18 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
int do_allocate;
|
int do_allocate;
|
||||||
{
|
{
|
||||||
char *abs_filename;
|
char *abs_filename;
|
||||||
struct loaded_l10nfile *last = NULL;
|
struct loaded_l10nfile **lastp;
|
||||||
struct loaded_l10nfile *retval;
|
struct loaded_l10nfile *retval;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
size_t dirlist_count;
|
||||||
size_t entries;
|
size_t entries;
|
||||||
int cnt;
|
int cnt;
|
||||||
|
|
||||||
|
/* If LANGUAGE contains an absolute directory specification, we ignore
|
||||||
|
DIRLIST. */
|
||||||
|
if (IS_ABSOLUTE_PATH (language))
|
||||||
|
dirlist_len = 0;
|
||||||
|
|
||||||
/* Allocate room for the full file name. */
|
/* Allocate room for the full file name. */
|
||||||
abs_filename = (char *) malloc (dirlist_len
|
abs_filename = (char *) malloc (dirlist_len
|
||||||
+ strlen (language)
|
+ strlen (language)
|
||||||
|
@ -204,7 +232,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
+ (((mask & CEN_SPONSOR) != 0
|
+ (((mask & CEN_SPONSOR) != 0
|
||||||
|| (mask & CEN_REVISION) != 0)
|
|| (mask & CEN_REVISION) != 0)
|
||||||
? (1 + ((mask & CEN_SPONSOR) != 0
|
? (1 + ((mask & CEN_SPONSOR) != 0
|
||||||
? strlen (sponsor) + 1 : 0)
|
? strlen (sponsor) : 0)
|
||||||
+ ((mask & CEN_REVISION) != 0
|
+ ((mask & CEN_REVISION) != 0
|
||||||
? strlen (revision) + 1 : 0)) : 0)
|
? strlen (revision) + 1 : 0)) : 0)
|
||||||
+ 1 + strlen (filename) + 1);
|
+ 1 + strlen (filename) + 1);
|
||||||
|
@ -212,14 +240,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
if (abs_filename == NULL)
|
if (abs_filename == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval = NULL;
|
|
||||||
last = NULL;
|
|
||||||
|
|
||||||
/* Construct file name. */
|
/* Construct file name. */
|
||||||
memcpy (abs_filename, dirlist, dirlist_len);
|
cp = abs_filename;
|
||||||
__argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
|
if (dirlist_len > 0)
|
||||||
cp = abs_filename + (dirlist_len - 1);
|
{
|
||||||
*cp++ = '/';
|
memcpy (cp, dirlist, dirlist_len);
|
||||||
|
__argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
|
||||||
|
cp += dirlist_len;
|
||||||
|
cp[-1] = '/';
|
||||||
|
}
|
||||||
|
|
||||||
cp = stpcpy (cp, language);
|
cp = stpcpy (cp, language);
|
||||||
|
|
||||||
if ((mask & TERRITORY) != 0)
|
if ((mask & TERRITORY) != 0)
|
||||||
|
@ -266,7 +296,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
|
|
||||||
/* Look in list of already loaded domains whether it is already
|
/* Look in list of already loaded domains whether it is already
|
||||||
available. */
|
available. */
|
||||||
last = NULL;
|
lastp = l10nfile_list;
|
||||||
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
||||||
if (retval->filename != NULL)
|
if (retval->filename != NULL)
|
||||||
{
|
{
|
||||||
|
@ -281,7 +311,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
last = retval;
|
lastp = &retval->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval != NULL || do_allocate == 0)
|
if (retval != NULL || do_allocate == 0)
|
||||||
|
@ -290,48 +320,66 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = (struct loaded_l10nfile *)
|
dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
|
||||||
malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
|
|
||||||
* (1 << pop (mask))
|
/* Allocate a new loaded_l10nfile. */
|
||||||
* sizeof (struct loaded_l10nfile *)));
|
retval =
|
||||||
|
(struct loaded_l10nfile *)
|
||||||
|
malloc (sizeof (*retval)
|
||||||
|
+ (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
|
||||||
|
* sizeof (struct loaded_l10nfile *)));
|
||||||
if (retval == NULL)
|
if (retval == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval->filename = abs_filename;
|
retval->filename = abs_filename;
|
||||||
retval->decided = (__argz_count (dirlist, dirlist_len) != 1
|
|
||||||
|
/* We set retval->data to NULL here; it is filled in later.
|
||||||
|
Setting retval->decided to 1 here means that retval does not
|
||||||
|
correspond to a real file (dirlist_count > 1) or is not worth
|
||||||
|
looking up (if an unnormalized codeset was specified). */
|
||||||
|
retval->decided = (dirlist_count > 1
|
||||||
|| ((mask & XPG_CODESET) != 0
|
|| ((mask & XPG_CODESET) != 0
|
||||||
&& (mask & XPG_NORM_CODESET) != 0));
|
&& (mask & XPG_NORM_CODESET) != 0));
|
||||||
retval->data = NULL;
|
retval->data = NULL;
|
||||||
|
|
||||||
if (last == NULL)
|
retval->next = *lastp;
|
||||||
{
|
*lastp = retval;
|
||||||
retval->next = *l10nfile_list;
|
|
||||||
*l10nfile_list = retval;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
retval->next = last->next;
|
|
||||||
last->next = retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
entries = 0;
|
entries = 0;
|
||||||
/* If the DIRLIST is a real list the RETVAL entry corresponds not to
|
/* Recurse to fill the inheritance list of RETVAL.
|
||||||
a real file. So we have to use the DIRLIST separation mechanism
|
If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
|
||||||
of the inner loop. */
|
entry does not correspond to a real file; retval->filename contains
|
||||||
cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
|
colons. In this case we loop across all elements of DIRLIST and
|
||||||
for (; cnt >= 0; --cnt)
|
across all bit patterns dominated by MASK.
|
||||||
|
If the DIRLIST is a single directory or entirely redundant (i.e.
|
||||||
|
DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
|
||||||
|
MASK, excluding MASK itself.
|
||||||
|
In either case, we loop down from MASK to 0. This has the effect
|
||||||
|
that the extra bits in the locale name are dropped in this order:
|
||||||
|
first the modifier, then the territory, then the codeset, then the
|
||||||
|
normalized_codeset. */
|
||||||
|
for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
|
||||||
if ((cnt & ~mask) == 0
|
if ((cnt & ~mask) == 0
|
||||||
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
||||||
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
||||||
{
|
{
|
||||||
/* Iterate over all elements of the DIRLIST. */
|
if (dirlist_count > 1)
|
||||||
char *dir = NULL;
|
{
|
||||||
|
/* Iterate over all elements of the DIRLIST. */
|
||||||
|
char *dir = NULL;
|
||||||
|
|
||||||
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
||||||
!= NULL)
|
!= NULL)
|
||||||
|
retval->successor[entries++]
|
||||||
|
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
|
||||||
|
cnt, language, territory, codeset,
|
||||||
|
normalized_codeset, modifier, special,
|
||||||
|
sponsor, revision, filename, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
retval->successor[entries++]
|
retval->successor[entries++]
|
||||||
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
|
= _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
|
||||||
language, territory, codeset,
|
cnt, language, territory, codeset,
|
||||||
normalized_codeset, modifier, special,
|
normalized_codeset, modifier, special,
|
||||||
sponsor, revision, filename, 1);
|
sponsor, revision, filename, 1);
|
||||||
}
|
}
|
||||||
|
@ -356,11 +404,11 @@ _nl_normalize_codeset (codeset, name_len)
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalnum ((unsigned char)codeset[cnt]))
|
if (isalnum ((unsigned char) codeset[cnt]))
|
||||||
{
|
{
|
||||||
++len;
|
++len;
|
||||||
|
|
||||||
if (isalpha ((unsigned char)codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
only_digit = 0;
|
only_digit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,9 +422,9 @@ _nl_normalize_codeset (codeset, name_len)
|
||||||
wp = retval;
|
wp = retval;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalpha ((unsigned char)codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = tolower ((unsigned char)codeset[cnt]);
|
*wp++ = tolower ((unsigned char) codeset[cnt]);
|
||||||
else if (isdigit ((unsigned char)codeset[cnt]))
|
else if (isdigit ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = codeset[cnt];
|
*wp++ = codeset[cnt];
|
||||||
|
|
||||||
*wp = '\0';
|
*wp = '\0';
|
309
intl/libgnuintl.h
Normal file
309
intl/libgnuintl.h
Normal file
|
@ -0,0 +1,309 @@
|
||||||
|
/* Message catalogs for internationalization.
|
||||||
|
Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _LIBINTL_H
|
||||||
|
#define _LIBINTL_H 1
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
/* The LC_MESSAGES locale category is the category used by the functions
|
||||||
|
gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
|
||||||
|
On systems that don't define it, use an arbitrary value instead.
|
||||||
|
On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
|
||||||
|
then includes <libintl.h> (i.e. this file!) and then only defines
|
||||||
|
LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
|
||||||
|
in this case. */
|
||||||
|
#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
|
||||||
|
# define LC_MESSAGES 1729
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We define an additional symbol to signal that we use the GNU
|
||||||
|
implementation of gettext. */
|
||||||
|
#define __USE_GNU_GETTEXT 1
|
||||||
|
|
||||||
|
/* Provide information about the supported file formats. Returns the
|
||||||
|
maximum minor revision number supported for a given major revision. */
|
||||||
|
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
|
||||||
|
((major) == 0 ? 1 : -1)
|
||||||
|
|
||||||
|
/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
|
||||||
|
precedence over _conio_gettext. */
|
||||||
|
#ifdef __DJGPP__
|
||||||
|
# undef gettext
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
|
||||||
|
used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */
|
||||||
|
#ifndef _INTL_PARAMS
|
||||||
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
|
# define _INTL_PARAMS(args) args
|
||||||
|
# else
|
||||||
|
# define _INTL_PARAMS(args) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* We redirect the functions to those prefixed with "libintl_". This is
|
||||||
|
necessary, because some systems define gettext/textdomain/... in the C
|
||||||
|
library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
|
||||||
|
If we used the unprefixed names, there would be cases where the
|
||||||
|
definition in the C library would override the one in the libintl.so
|
||||||
|
shared library. Recall that on ELF systems, the symbols are looked
|
||||||
|
up in the following order:
|
||||||
|
1. in the executable,
|
||||||
|
2. in the shared libraries specified on the link command line, in order,
|
||||||
|
3. in the dependencies of the shared libraries specified on the link
|
||||||
|
command line,
|
||||||
|
4. in the dlopen()ed shared libraries, in the order in which they were
|
||||||
|
dlopen()ed.
|
||||||
|
The definition in the C library would override the one in libintl.so if
|
||||||
|
either
|
||||||
|
* -lc is given on the link command line and -lintl isn't, or
|
||||||
|
* -lc is given on the link command line before -lintl, or
|
||||||
|
* libintl.so is a dependency of a dlopen()ed shared library but not
|
||||||
|
linked to the executable at link time.
|
||||||
|
Since Solaris gettext() behaves differently than GNU gettext(), this
|
||||||
|
would be unacceptable.
|
||||||
|
|
||||||
|
The redirection happens by default through macros in C, so that &gettext
|
||||||
|
is independent of the compilation unit, but through inline functions in
|
||||||
|
C++, in order not to interfere with the name mangling of class fields or
|
||||||
|
class methods called 'gettext'. */
|
||||||
|
|
||||||
|
/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
|
||||||
|
If he doesn't, we choose the method. A third possible method is
|
||||||
|
_INTL_REDIRECT_ASM, supported only by GCC. */
|
||||||
|
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
|
||||||
|
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
|
||||||
|
# define _INTL_REDIRECT_ASM
|
||||||
|
# else
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define _INTL_REDIRECT_INLINE
|
||||||
|
# else
|
||||||
|
# define _INTL_REDIRECT_MACROS
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/* Auxiliary macros. */
|
||||||
|
#ifdef _INTL_REDIRECT_ASM
|
||||||
|
# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
|
||||||
|
# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
|
||||||
|
# define _INTL_STRINGIFY(prefix) #prefix
|
||||||
|
#else
|
||||||
|
# define _INTL_ASM(cname)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Look up MSGID in the current default message catalog for the current
|
||||||
|
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||||
|
text). */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_gettext (const char *__msgid);
|
||||||
|
static inline char *gettext (const char *__msgid)
|
||||||
|
{
|
||||||
|
return libintl_gettext (__msgid);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define gettext libintl_gettext
|
||||||
|
#endif
|
||||||
|
extern char *gettext _INTL_PARAMS ((const char *__msgid))
|
||||||
|
_INTL_ASM (libintl_gettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||||
|
LC_MESSAGES locale. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
|
||||||
|
static inline char *dgettext (const char *__domainname, const char *__msgid)
|
||||||
|
{
|
||||||
|
return libintl_dgettext (__domainname, __msgid);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define dgettext libintl_dgettext
|
||||||
|
#endif
|
||||||
|
extern char *dgettext _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid))
|
||||||
|
_INTL_ASM (libintl_dgettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
|
locale. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
|
||||||
|
int __category);
|
||||||
|
static inline char *dcgettext (const char *__domainname, const char *__msgid,
|
||||||
|
int __category)
|
||||||
|
{
|
||||||
|
return libintl_dcgettext (__domainname, __msgid, __category);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define dcgettext libintl_dcgettext
|
||||||
|
#endif
|
||||||
|
extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid,
|
||||||
|
int __category))
|
||||||
|
_INTL_ASM (libintl_dcgettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Similar to `gettext' but select the plural form corresponding to the
|
||||||
|
number N. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n);
|
||||||
|
static inline char *ngettext (const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n)
|
||||||
|
{
|
||||||
|
return libintl_ngettext (__msgid1, __msgid2, __n);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define ngettext libintl_ngettext
|
||||||
|
#endif
|
||||||
|
extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n))
|
||||||
|
_INTL_ASM (libintl_ngettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Similar to `dgettext' but select the plural form corresponding to the
|
||||||
|
number N. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
|
||||||
|
const char *__msgid2, unsigned long int __n);
|
||||||
|
static inline char *dngettext (const char *__domainname, const char *__msgid1,
|
||||||
|
const char *__msgid2, unsigned long int __n)
|
||||||
|
{
|
||||||
|
return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define dngettext libintl_dngettext
|
||||||
|
#endif
|
||||||
|
extern char *dngettext _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n))
|
||||||
|
_INTL_ASM (libintl_dngettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Similar to `dcgettext' but select the plural form corresponding to the
|
||||||
|
number N. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_dcngettext (const char *__domainname,
|
||||||
|
const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n, int __category);
|
||||||
|
static inline char *dcngettext (const char *__domainname,
|
||||||
|
const char *__msgid1, const char *__msgid2,
|
||||||
|
unsigned long int __n, int __category)
|
||||||
|
{
|
||||||
|
return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define dcngettext libintl_dcngettext
|
||||||
|
#endif
|
||||||
|
extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__msgid1,
|
||||||
|
const char *__msgid2,
|
||||||
|
unsigned long int __n,
|
||||||
|
int __category))
|
||||||
|
_INTL_ASM (libintl_dcngettext);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Set the current default message catalog to DOMAINNAME.
|
||||||
|
If DOMAINNAME is null, return the current default.
|
||||||
|
If DOMAINNAME is "", reset to the default of "messages". */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_textdomain (const char *__domainname);
|
||||||
|
static inline char *textdomain (const char *__domainname)
|
||||||
|
{
|
||||||
|
return libintl_textdomain (__domainname);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define textdomain libintl_textdomain
|
||||||
|
#endif
|
||||||
|
extern char *textdomain _INTL_PARAMS ((const char *__domainname))
|
||||||
|
_INTL_ASM (libintl_textdomain);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specify that the DOMAINNAME message catalog will be found
|
||||||
|
in DIRNAME rather than in the system locale data base. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_bindtextdomain (const char *__domainname,
|
||||||
|
const char *__dirname);
|
||||||
|
static inline char *bindtextdomain (const char *__domainname,
|
||||||
|
const char *__dirname)
|
||||||
|
{
|
||||||
|
return libintl_bindtextdomain (__domainname, __dirname);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define bindtextdomain libintl_bindtextdomain
|
||||||
|
#endif
|
||||||
|
extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__dirname))
|
||||||
|
_INTL_ASM (libintl_bindtextdomain);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specify the character encoding in which the messages from the
|
||||||
|
DOMAINNAME message catalog will be returned. */
|
||||||
|
#ifdef _INTL_REDIRECT_INLINE
|
||||||
|
extern char *libintl_bind_textdomain_codeset (const char *__domainname,
|
||||||
|
const char *__codeset);
|
||||||
|
static inline char *bind_textdomain_codeset (const char *__domainname,
|
||||||
|
const char *__codeset)
|
||||||
|
{
|
||||||
|
return libintl_bind_textdomain_codeset (__domainname, __codeset);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
|
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
|
||||||
|
#endif
|
||||||
|
extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
|
||||||
|
const char *__codeset))
|
||||||
|
_INTL_ASM (libintl_bind_textdomain_codeset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Support for relocatable packages. */
|
||||||
|
|
||||||
|
/* Sets the original and the current installation prefix of the package.
|
||||||
|
Relocation simply replaces a pathname starting with the original prefix
|
||||||
|
by the corresponding pathname with the current prefix instead. Both
|
||||||
|
prefixes should be directory names without trailing slash (i.e. use ""
|
||||||
|
instead of "/"). */
|
||||||
|
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
|
||||||
|
extern void
|
||||||
|
libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
|
||||||
|
const char *curr_prefix));
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* libintl.h */
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
@ -20,8 +20,20 @@
|
||||||
#ifndef _LOADINFO_H
|
#ifndef _LOADINFO_H
|
||||||
#define _LOADINFO_H 1
|
#define _LOADINFO_H 1
|
||||||
|
|
||||||
|
/* Declarations of locale dependent catalog lookup functions.
|
||||||
|
Implemented in
|
||||||
|
|
||||||
|
localealias.c Possibly replace a locale name by another.
|
||||||
|
explodename.c Split a locale name into its various fields.
|
||||||
|
l10nflist.c Generate a list of filenames of possible message catalogs.
|
||||||
|
finddomain.c Find and open the relevant message catalogs.
|
||||||
|
|
||||||
|
The main function _nl_find_domain() in finddomain.c is declared
|
||||||
|
in gettextP.h.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
|
@ -80,6 +92,20 @@ struct loaded_l10nfile
|
||||||
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
||||||
size_t name_len));
|
size_t name_len));
|
||||||
|
|
||||||
|
/* Lookup a locale dependent file.
|
||||||
|
*L10NFILE_LIST denotes a pool of lookup results of locale dependent
|
||||||
|
files of the same kind, sorted in decreasing order of ->filename.
|
||||||
|
DIRLIST and DIRLIST_LEN are an argz list of directories in which to
|
||||||
|
look, containing at least one directory (i.e. DIRLIST_LEN > 0).
|
||||||
|
MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
|
||||||
|
SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
|
||||||
|
produced by _nl_explode_name(). FILENAME is the filename suffix.
|
||||||
|
The return value is the lookup result, either found in *L10NFILE_LIST,
|
||||||
|
or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
|
||||||
|
If the return value is non-NULL, it is added to *L10NFILE_LIST, and
|
||||||
|
its ->next field denotes the chaining inside *L10NFILE_LIST, and
|
||||||
|
furthermore its ->successor[] field contains a list of other lookup
|
||||||
|
results from which this lookup result inherits. */
|
||||||
extern struct loaded_l10nfile *
|
extern struct loaded_l10nfile *
|
||||||
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *dirlist, size_t dirlist_len, int mask,
|
const char *dirlist, size_t dirlist_len, int mask,
|
||||||
|
@ -90,11 +116,29 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *sponsor, const char *revision,
|
const char *sponsor, const char *revision,
|
||||||
const char *filename, int do_allocate));
|
const char *filename, int do_allocate));
|
||||||
|
|
||||||
|
/* Lookup the real locale name for a locale alias NAME, or NULL if
|
||||||
|
NAME is not a locale alias (but possibly a real locale name).
|
||||||
|
The return value is statically allocated and must not be freed. */
|
||||||
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
||||||
|
|
||||||
/* normalized_codeset is dynamically allocated and has to be freed by
|
/* Split a locale name NAME into its pieces: language, modifier,
|
||||||
the caller. */
|
territory, codeset, special, sponsor, revision.
|
||||||
|
NAME gets destructively modified: NUL bytes are inserted here and
|
||||||
|
there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
|
||||||
|
*CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
|
||||||
|
pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
|
||||||
|
gets assigned the expanded *CODESET, if it is different from *CODESET;
|
||||||
|
this one is dynamically allocated and has to be freed by the caller.
|
||||||
|
The return value is a bitmask, where each bit corresponds to one
|
||||||
|
filled-in value:
|
||||||
|
XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
|
||||||
|
TERRITORY for *TERRITORY,
|
||||||
|
XPG_CODESET for *CODESET,
|
||||||
|
XPG_NORM_CODESET for *NORMALIZED_CODESET,
|
||||||
|
CEN_SPECIAL for *SPECIAL,
|
||||||
|
CEN_SPONSOR for *SPONSOR,
|
||||||
|
CEN_REVISION for *REVISION.
|
||||||
|
*/
|
||||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||||
const char **modifier,
|
const char **modifier,
|
||||||
const char **territory,
|
const char **territory,
|
||||||
|
@ -104,6 +148,9 @@ extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||||
const char **sponsor,
|
const char **sponsor,
|
||||||
const char **revision));
|
const char **revision));
|
||||||
|
|
||||||
|
/* Split a locale name NAME into a leading language part and all the
|
||||||
|
rest. Return a pointer to the first character after the language,
|
||||||
|
i.e. to the first byte of the rest. */
|
||||||
extern char *_nl_find_language PARAMS ((const char *name));
|
extern char *_nl_find_language PARAMS ((const char *name));
|
||||||
|
|
||||||
#endif /* loadinfo.h */
|
#endif /* loadinfo.h */
|
1322
intl/loadmsgcat.c
Normal file
1322
intl/loadmsgcat.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
||||||
/* Determine a canonical name for the current locale's character encoding.
|
/* Determine a canonical name for the current locale's character encoding.
|
||||||
|
|
||||||
Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -17,12 +17,15 @@
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
USA. */
|
USA. */
|
||||||
|
|
||||||
/* Written by Bruno Haible <haible@clisp.cons.org>. */
|
/* Written by Bruno Haible <bruno@clisp.org>. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "localcharset.h"
|
||||||
|
|
||||||
#if HAVE_STDDEF_H
|
#if HAVE_STDDEF_H
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -42,7 +45,12 @@
|
||||||
# define WIN32
|
# define WIN32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WIN32
|
#if defined __EMX__
|
||||||
|
/* Assume EMX program runs on OS/2, even if compiled under DOS. */
|
||||||
|
# define OS2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined WIN32
|
||||||
# if HAVE_LANGINFO_CODESET
|
# if HAVE_LANGINFO_CODESET
|
||||||
# include <langinfo.h>
|
# include <langinfo.h>
|
||||||
# else
|
# else
|
||||||
|
@ -50,12 +58,25 @@
|
||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#else /* WIN32 */
|
#elif defined WIN32
|
||||||
# define WIN32_LEAN_AND_MEAN
|
# define WIN32_LEAN_AND_MEAN
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if defined OS2
|
||||||
|
# define INCL_DOS
|
||||||
|
# include <os2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gettextP.h"
|
#if ENABLE_RELOCATABLE
|
||||||
|
# include "relocatable.h"
|
||||||
|
#else
|
||||||
|
# define relocate(pathname) (pathname)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef DIRECTORY_SEPARATOR
|
#ifndef DIRECTORY_SEPARATOR
|
||||||
# define DIRECTORY_SEPARATOR '/'
|
# define DIRECTORY_SEPARATOR '/'
|
||||||
|
@ -65,6 +86,11 @@
|
||||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETC_UNLOCKED
|
||||||
|
# undef getc
|
||||||
|
# define getc getc_unlocked
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The following static variable is declared 'volatile' to avoid a
|
/* The following static variable is declared 'volatile' to avoid a
|
||||||
possible multithread problem in the function get_charset_aliases. If we
|
possible multithread problem in the function get_charset_aliases. If we
|
||||||
are running in a threaded environment, and if two threads initialize
|
are running in a threaded environment, and if two threads initialize
|
||||||
|
@ -79,9 +105,6 @@
|
||||||
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||||
static const char * volatile charset_aliases;
|
static const char * volatile charset_aliases;
|
||||||
|
|
||||||
/* GCC LOCAL: Static function prototypes. */
|
|
||||||
static const char *get_charset_aliases PARAMS ((void));
|
|
||||||
|
|
||||||
/* Return a pointer to the contents of the charset.alias file. */
|
/* Return a pointer to the contents of the charset.alias file. */
|
||||||
static const char *
|
static const char *
|
||||||
get_charset_aliases ()
|
get_charset_aliases ()
|
||||||
|
@ -91,9 +114,9 @@ get_charset_aliases ()
|
||||||
cp = charset_aliases;
|
cp = charset_aliases;
|
||||||
if (cp == NULL)
|
if (cp == NULL)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#if !(defined VMS || defined WIN32)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
const char *dir = LIBDIR;
|
const char *dir = relocate (LIBDIR);
|
||||||
const char *base = "charset.alias";
|
const char *base = "charset.alias";
|
||||||
char *file_name;
|
char *file_name;
|
||||||
|
|
||||||
|
@ -143,19 +166,19 @@ get_charset_aliases ()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ungetc (c, fp);
|
ungetc (c, fp);
|
||||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
|
||||||
break;
|
break;
|
||||||
l1 = strlen (buf1);
|
l1 = strlen (buf1);
|
||||||
l2 = strlen (buf2);
|
l2 = strlen (buf2);
|
||||||
if (res_size == 0)
|
if (res_size == 0)
|
||||||
{
|
{
|
||||||
res_size = l1 + 1 + l2 + 1;
|
res_size = l1 + 1 + l2 + 1;
|
||||||
res_ptr = malloc (res_size + 1);
|
res_ptr = (char *) malloc (res_size + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res_size += l1 + 1 + l2 + 1;
|
res_size += l1 + 1 + l2 + 1;
|
||||||
res_ptr = realloc (res_ptr, res_size + 1);
|
res_ptr = (char *) realloc (res_ptr, res_size + 1);
|
||||||
}
|
}
|
||||||
if (res_ptr == NULL)
|
if (res_ptr == NULL)
|
||||||
{
|
{
|
||||||
|
@ -179,14 +202,54 @@ get_charset_aliases ()
|
||||||
if (file_name != NULL)
|
if (file_name != NULL)
|
||||||
free (file_name);
|
free (file_name);
|
||||||
|
|
||||||
#else /* WIN32 */
|
#else
|
||||||
|
|
||||||
|
# if defined VMS
|
||||||
|
/* To avoid the troubles of an extra file charset.alias_vms in the
|
||||||
|
sources of many GNU packages, simply inline the aliases here. */
|
||||||
|
/* The list of encodings is taken from the OpenVMS 7.3-1 documentation
|
||||||
|
"Compaq C Run-Time Library Reference Manual for OpenVMS systems"
|
||||||
|
section 10.7 "Handling Different Character Sets". */
|
||||||
|
cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
|
||||||
|
"ISO8859-2" "\0" "ISO-8859-2" "\0"
|
||||||
|
"ISO8859-5" "\0" "ISO-8859-5" "\0"
|
||||||
|
"ISO8859-7" "\0" "ISO-8859-7" "\0"
|
||||||
|
"ISO8859-8" "\0" "ISO-8859-8" "\0"
|
||||||
|
"ISO8859-9" "\0" "ISO-8859-9" "\0"
|
||||||
|
/* Japanese */
|
||||||
|
"eucJP" "\0" "EUC-JP" "\0"
|
||||||
|
"SJIS" "\0" "SHIFT_JIS" "\0"
|
||||||
|
"DECKANJI" "\0" "DEC-KANJI" "\0"
|
||||||
|
"SDECKANJI" "\0" "EUC-JP" "\0"
|
||||||
|
/* Chinese */
|
||||||
|
"eucTW" "\0" "EUC-TW" "\0"
|
||||||
|
"DECHANYU" "\0" "DEC-HANYU" "\0"
|
||||||
|
"DECHANZI" "\0" "GB2312" "\0"
|
||||||
|
/* Korean */
|
||||||
|
"DECKOREAN" "\0" "EUC-KR" "\0";
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined WIN32
|
||||||
/* To avoid the troubles of installing a separate file in the same
|
/* To avoid the troubles of installing a separate file in the same
|
||||||
directory as the DLL and of retrieving the DLL's directory at
|
directory as the DLL and of retrieving the DLL's directory at
|
||||||
runtime, simply inline the aliases here. */
|
runtime, simply inline the aliases here. */
|
||||||
|
|
||||||
cp = "CP936" "\0" "GBK" "\0"
|
cp = "CP936" "\0" "GBK" "\0"
|
||||||
"CP1361" "\0" "JOHAB" "\0";
|
"CP1361" "\0" "JOHAB" "\0"
|
||||||
|
"CP20127" "\0" "ASCII" "\0"
|
||||||
|
"CP20866" "\0" "KOI8-R" "\0"
|
||||||
|
"CP21866" "\0" "KOI8-RU" "\0"
|
||||||
|
"CP28591" "\0" "ISO-8859-1" "\0"
|
||||||
|
"CP28592" "\0" "ISO-8859-2" "\0"
|
||||||
|
"CP28593" "\0" "ISO-8859-3" "\0"
|
||||||
|
"CP28594" "\0" "ISO-8859-4" "\0"
|
||||||
|
"CP28595" "\0" "ISO-8859-5" "\0"
|
||||||
|
"CP28596" "\0" "ISO-8859-6" "\0"
|
||||||
|
"CP28597" "\0" "ISO-8859-7" "\0"
|
||||||
|
"CP28598" "\0" "ISO-8859-8" "\0"
|
||||||
|
"CP28599" "\0" "ISO-8859-9" "\0"
|
||||||
|
"CP28605" "\0" "ISO-8859-15" "\0";
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
charset_aliases = cp;
|
charset_aliases = cp;
|
||||||
|
@ -199,16 +262,18 @@ get_charset_aliases ()
|
||||||
into one of the canonical names listed in config.charset.
|
into one of the canonical names listed in config.charset.
|
||||||
The result must not be freed; it is statically allocated.
|
The result must not be freed; it is statically allocated.
|
||||||
If the canonical name cannot be determined, the result is a non-canonical
|
If the canonical name cannot be determined, the result is a non-canonical
|
||||||
name.
|
name. */
|
||||||
GCC LOCAL: Get rid of STATIC nonsense. */
|
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
const char *
|
const char *
|
||||||
locale_charset ()
|
locale_charset ()
|
||||||
{
|
{
|
||||||
const char *codeset;
|
const char *codeset;
|
||||||
const char *aliases;
|
const char *aliases;
|
||||||
|
|
||||||
#ifndef WIN32
|
#if !(defined WIN32 || defined OS2)
|
||||||
|
|
||||||
# if HAVE_LANGINFO_CODESET
|
# if HAVE_LANGINFO_CODESET
|
||||||
|
|
||||||
|
@ -245,14 +310,67 @@ locale_charset ()
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#else /* WIN32 */
|
#elif defined WIN32
|
||||||
|
|
||||||
static char buf[2 + 10 + 1];
|
static char buf[2 + 10 + 1];
|
||||||
|
|
||||||
/* Win32 has a function returning the locale's codepage as a number. */
|
/* Woe32 has a function returning the locale's codepage as a number. */
|
||||||
sprintf (buf, "CP%u", GetACP ());
|
sprintf (buf, "CP%u", GetACP ());
|
||||||
codeset = buf;
|
codeset = buf;
|
||||||
|
|
||||||
|
#elif defined OS2
|
||||||
|
|
||||||
|
const char *locale;
|
||||||
|
static char buf[2 + 10 + 1];
|
||||||
|
ULONG cp[3];
|
||||||
|
ULONG cplen;
|
||||||
|
|
||||||
|
/* Allow user to override the codeset, as set in the operating system,
|
||||||
|
with standard language environment variables. */
|
||||||
|
locale = getenv ("LC_ALL");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
{
|
||||||
|
locale = getenv ("LC_CTYPE");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
locale = getenv ("LANG");
|
||||||
|
}
|
||||||
|
if (locale != NULL && locale[0] != '\0')
|
||||||
|
{
|
||||||
|
/* If the locale name contains an encoding after the dot, return it. */
|
||||||
|
const char *dot = strchr (locale, '.');
|
||||||
|
|
||||||
|
if (dot != NULL)
|
||||||
|
{
|
||||||
|
const char *modifier;
|
||||||
|
|
||||||
|
dot++;
|
||||||
|
/* Look for the possible @... trailer and remove it, if any. */
|
||||||
|
modifier = strchr (dot, '@');
|
||||||
|
if (modifier == NULL)
|
||||||
|
return dot;
|
||||||
|
if (modifier - dot < sizeof (buf))
|
||||||
|
{
|
||||||
|
memcpy (buf, dot, modifier - dot);
|
||||||
|
buf [modifier - dot] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Resolve through the charset.alias file. */
|
||||||
|
codeset = locale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* OS/2 has a function returning the locale's codepage as a number. */
|
||||||
|
if (DosQueryCp (sizeof (cp), cp, &cplen))
|
||||||
|
codeset = "";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf (buf, "CP%u", cp[0]);
|
||||||
|
codeset = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (codeset == NULL)
|
if (codeset == NULL)
|
||||||
|
@ -270,5 +388,11 @@ locale_charset ()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Don't return an empty string. GNU libc and GNU libiconv interpret
|
||||||
|
the empty string as denoting "the locale's character encoding",
|
||||||
|
thus GNU libiconv would call this function a second time. */
|
||||||
|
if (codeset[0] == '\0')
|
||||||
|
codeset = "ASCII";
|
||||||
|
|
||||||
return codeset;
|
return codeset;
|
||||||
}
|
}
|
42
intl/localcharset.h
Normal file
42
intl/localcharset.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* Determine a canonical name for the current locale's character encoding.
|
||||||
|
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU CHARSET Library.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _LOCALCHARSET_H
|
||||||
|
#define _LOCALCHARSET_H
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Determine the current locale's character encoding, and canonicalize it
|
||||||
|
into one of the canonical names listed in config.charset.
|
||||||
|
The result must not be freed; it is statically allocated.
|
||||||
|
If the canonical name cannot be determined, the result is a non-canonical
|
||||||
|
name. */
|
||||||
|
extern const char * locale_charset (void);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _LOCALCHARSET_H */
|
|
@ -1,5 +1,5 @@
|
||||||
/* Handle aliases for locale names.
|
/* Handle aliases for locale names.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -29,40 +29,45 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#if defined _LIBC || defined HAVE___FSETLOCKING
|
||||||
|
# include <stdio_ext.h>
|
||||||
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
# undef alloca
|
||||||
# define alloca __builtin_alloca
|
# define alloca __builtin_alloca
|
||||||
# define HAVE_ALLOCA 1
|
# define HAVE_ALLOCA 1
|
||||||
#else
|
#else
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
# ifdef _MSC_VER
|
||||||
# include <alloca.h>
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
# else
|
# else
|
||||||
# ifdef _AIX
|
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||||
#pragma alloca
|
# include <alloca.h>
|
||||||
# else
|
# else
|
||||||
# ifndef alloca
|
# ifdef _AIX
|
||||||
|
#pragma alloca
|
||||||
|
# else
|
||||||
|
# ifndef alloca
|
||||||
char *alloca ();
|
char *alloca ();
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef STRING_WITH_STRINGS
|
|
||||||
#include <strings.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
|
||||||
|
#if ENABLE_RELOCATABLE
|
||||||
|
# include "relocatable.h"
|
||||||
|
#else
|
||||||
|
# define relocate(pathname) (pathname)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
|
@ -75,6 +80,7 @@ char *alloca ();
|
||||||
# define mempcpy __mempcpy
|
# define mempcpy __mempcpy
|
||||||
# endif
|
# endif
|
||||||
# define HAVE_MEMPCPY 1
|
# define HAVE_MEMPCPY 1
|
||||||
|
# define HAVE___FSETLOCKING 1
|
||||||
|
|
||||||
/* We need locking here since we can be called from different places. */
|
/* We need locking here since we can be called from different places. */
|
||||||
# include <bits/libc-lock.h>
|
# include <bits/libc-lock.h>
|
||||||
|
@ -86,6 +92,15 @@ __libc_lock_define_initialized (static, lock);
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Some optimizations for glibc. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define FEOF(fp) feof_unlocked (fp)
|
||||||
|
# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
|
||||||
|
#else
|
||||||
|
# define FEOF(fp) feof (fp)
|
||||||
|
# define FGETS(buf, n, fp) fgets (buf, n, fp)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For those losing systems which don't have `alloca' we have to add
|
/* For those losing systems which don't have `alloca' we have to add
|
||||||
some additional code emulating it. */
|
some additional code emulating it. */
|
||||||
#ifdef HAVE_ALLOCA
|
#ifdef HAVE_ALLOCA
|
||||||
|
@ -112,10 +127,14 @@ struct alias_map
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static char *string_space;
|
#ifndef _LIBC
|
||||||
|
# define libc_freeres_ptr(decl) decl
|
||||||
|
#endif
|
||||||
|
|
||||||
|
libc_freeres_ptr (static char *string_space);
|
||||||
static size_t string_space_act;
|
static size_t string_space_act;
|
||||||
static size_t string_space_max;
|
static size_t string_space_max;
|
||||||
static struct alias_map *map;
|
libc_freeres_ptr (static struct alias_map *map);
|
||||||
static size_t nmap;
|
static size_t nmap;
|
||||||
static size_t maxmap;
|
static size_t maxmap;
|
||||||
|
|
||||||
|
@ -132,7 +151,7 @@ const char *
|
||||||
_nl_expand_alias (name)
|
_nl_expand_alias (name)
|
||||||
const char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
|
static const char *locale_alias_path;
|
||||||
struct alias_map *retval;
|
struct alias_map *retval;
|
||||||
const char *result = NULL;
|
const char *result = NULL;
|
||||||
size_t added;
|
size_t added;
|
||||||
|
@ -141,6 +160,9 @@ _nl_expand_alias (name)
|
||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (locale_alias_path == NULL)
|
||||||
|
locale_alias_path = LOCALE_ALIAS_PATH;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
struct alias_map item;
|
struct alias_map item;
|
||||||
|
@ -211,58 +233,52 @@ read_alias_file (fname, fname_len)
|
||||||
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fp = fopen (full_fname, "r");
|
fp = fopen (relocate (full_fname), "r");
|
||||||
freea (full_fname);
|
freea (full_fname);
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#ifdef HAVE___FSETLOCKING
|
||||||
|
/* No threads present. */
|
||||||
|
__fsetlocking (fp, FSETLOCKING_BYCALLER);
|
||||||
|
#endif
|
||||||
|
|
||||||
added = 0;
|
added = 0;
|
||||||
while (!feof (fp))
|
while (!FEOF (fp))
|
||||||
{
|
{
|
||||||
/* It is a reasonable approach to use a fix buffer here because
|
/* It is a reasonable approach to use a fix buffer here because
|
||||||
a) we are only interested in the first two fields
|
a) we are only interested in the first two fields
|
||||||
b) these fields must be usable as file names and so must not
|
b) these fields must be usable as file names and so must not
|
||||||
be that long
|
be that long
|
||||||
*/
|
We avoid a multi-kilobyte buffer here since this would use up
|
||||||
char buf[BUFSIZ];
|
stack space which we might not have if the program ran out of
|
||||||
|
memory. */
|
||||||
|
char buf[400];
|
||||||
char *alias;
|
char *alias;
|
||||||
char *value;
|
char *value;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
|
||||||
if (fgets (buf, sizeof buf, fp) == NULL)
|
if (FGETS (buf, sizeof buf, fp) == NULL)
|
||||||
/* EOF reached. */
|
/* EOF reached. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Possibly not the whole line fits into the buffer. Ignore
|
|
||||||
the rest of the line. */
|
|
||||||
if (strchr (buf, '\n') == NULL)
|
|
||||||
{
|
|
||||||
char altbuf[BUFSIZ];
|
|
||||||
do
|
|
||||||
if (fgets (altbuf, sizeof altbuf, fp) == NULL)
|
|
||||||
/* Make sure the inner loop will be left. The outer loop
|
|
||||||
will exit at the `feof' test. */
|
|
||||||
break;
|
|
||||||
while (strchr (altbuf, '\n') == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
cp = buf;
|
cp = buf;
|
||||||
/* Ignore leading white space. */
|
/* Ignore leading white space. */
|
||||||
while (isspace ((unsigned char)cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
/* A leading '#' signals a comment line. */
|
/* A leading '#' signals a comment line. */
|
||||||
if (cp[0] != '\0' && cp[0] != '#')
|
if (cp[0] != '\0' && cp[0] != '#')
|
||||||
{
|
{
|
||||||
alias = cp++;
|
alias = cp++;
|
||||||
while (cp[0] != '\0' && !isspace ((unsigned char)cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate alias name. */
|
/* Terminate alias name. */
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
*cp++ = '\0';
|
*cp++ = '\0';
|
||||||
|
|
||||||
/* Now look for the beginning of the value. */
|
/* Now look for the beginning of the value. */
|
||||||
while (isspace ((unsigned char)cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
|
@ -271,7 +287,7 @@ read_alias_file (fname, fname_len)
|
||||||
size_t value_len;
|
size_t value_len;
|
||||||
|
|
||||||
value = cp++;
|
value = cp++;
|
||||||
while (cp[0] != '\0' && !isspace ((unsigned char)cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate value. */
|
/* Terminate value. */
|
||||||
if (cp[0] == '\n')
|
if (cp[0] == '\n')
|
||||||
|
@ -317,18 +333,26 @@ read_alias_file (fname, fname_len)
|
||||||
string_space_max = new_size;
|
string_space_max = new_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (&string_space[string_space_act], alias, alias_len);
|
map[nmap].alias = memcpy (&string_space[string_space_act],
|
||||||
map[nmap].alias = &string_space[string_space_act];
|
alias, alias_len);
|
||||||
string_space_act += alias_len;
|
string_space_act += alias_len;
|
||||||
|
|
||||||
memcpy (&string_space[string_space_act], value, value_len);
|
map[nmap].value = memcpy (&string_space[string_space_act],
|
||||||
map[nmap].value = &string_space[string_space_act];
|
value, value_len);
|
||||||
string_space_act += value_len;
|
string_space_act += value_len;
|
||||||
|
|
||||||
++nmap;
|
++nmap;
|
||||||
++added;
|
++added;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Possibly not the whole line fits into the buffer. Ignore
|
||||||
|
the rest of the line. */
|
||||||
|
while (strchr (buf, '\n') == NULL)
|
||||||
|
if (FGETS (buf, sizeof buf, fp) == NULL)
|
||||||
|
/* Make sure the inner loop will be left. The outer loop
|
||||||
|
will exit at the `feof' test. */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Should we test for ferror()? I think we have to silently ignore
|
/* Should we test for ferror()? I think we have to silently ignore
|
||||||
|
@ -362,19 +386,6 @@ extend_alias_table ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
static void __attribute__ ((unused))
|
|
||||||
free_mem (void)
|
|
||||||
{
|
|
||||||
if (string_space != NULL)
|
|
||||||
free (string_space);
|
|
||||||
if (map != NULL)
|
|
||||||
free (map);
|
|
||||||
}
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
alias_compare (map1, map2)
|
alias_compare (map1, map2)
|
||||||
const struct alias_map *map1;
|
const struct alias_map *map1;
|
||||||
|
@ -394,8 +405,8 @@ alias_compare (map1, map2)
|
||||||
{
|
{
|
||||||
/* I know this seems to be odd but the tolower() function in
|
/* I know this seems to be odd but the tolower() function in
|
||||||
some systems libc cannot handle nonalpha characters. */
|
some systems libc cannot handle nonalpha characters. */
|
||||||
c1 = isupper ((unsigned char)*p1) ? tolower ((unsigned char)*p1) : *p1;
|
c1 = isupper (*p1) ? tolower (*p1) : *p1;
|
||||||
c2 = isupper ((unsigned char)*p2) ? tolower ((unsigned char)*p2) : *p2;
|
c2 = isupper (*p2) ? tolower (*p2) : *p2;
|
||||||
if (c1 == '\0')
|
if (c1 == '\0')
|
||||||
break;
|
break;
|
||||||
++p1;
|
++p1;
|
772
intl/localename.c
Normal file
772
intl/localename.c
Normal file
|
@ -0,0 +1,772 @@
|
||||||
|
/* Determine the current selected locale.
|
||||||
|
Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
|
||||||
|
/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
# undef WIN32 /* avoid warning on mingw32 */
|
||||||
|
# define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
|
/* Mingw headers don't have latest language and sublanguage codes. */
|
||||||
|
# ifndef LANG_AFRIKAANS
|
||||||
|
# define LANG_AFRIKAANS 0x36
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ALBANIAN
|
||||||
|
# define LANG_ALBANIAN 0x1c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ARABIC
|
||||||
|
# define LANG_ARABIC 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ARMENIAN
|
||||||
|
# define LANG_ARMENIAN 0x2b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ASSAMESE
|
||||||
|
# define LANG_ASSAMESE 0x4d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_AZERI
|
||||||
|
# define LANG_AZERI 0x2c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BASQUE
|
||||||
|
# define LANG_BASQUE 0x2d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BELARUSIAN
|
||||||
|
# define LANG_BELARUSIAN 0x23
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_BENGALI
|
||||||
|
# define LANG_BENGALI 0x45
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_CATALAN
|
||||||
|
# define LANG_CATALAN 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_DIVEHI
|
||||||
|
# define LANG_DIVEHI 0x65
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ESTONIAN
|
||||||
|
# define LANG_ESTONIAN 0x25
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_FAEROESE
|
||||||
|
# define LANG_FAEROESE 0x38
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_FARSI
|
||||||
|
# define LANG_FARSI 0x29
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GALICIAN
|
||||||
|
# define LANG_GALICIAN 0x56
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GEORGIAN
|
||||||
|
# define LANG_GEORGIAN 0x37
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GUJARATI
|
||||||
|
# define LANG_GUJARATI 0x47
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_HEBREW
|
||||||
|
# define LANG_HEBREW 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_HINDI
|
||||||
|
# define LANG_HINDI 0x39
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_INDONESIAN
|
||||||
|
# define LANG_INDONESIAN 0x21
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KANNADA
|
||||||
|
# define LANG_KANNADA 0x4b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KASHMIRI
|
||||||
|
# define LANG_KASHMIRI 0x60
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KAZAK
|
||||||
|
# define LANG_KAZAK 0x3f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KONKANI
|
||||||
|
# define LANG_KONKANI 0x57
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_KYRGYZ
|
||||||
|
# define LANG_KYRGYZ 0x40
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_LATVIAN
|
||||||
|
# define LANG_LATVIAN 0x26
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_LITHUANIAN
|
||||||
|
# define LANG_LITHUANIAN 0x27
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MACEDONIAN
|
||||||
|
# define LANG_MACEDONIAN 0x2f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MALAY
|
||||||
|
# define LANG_MALAY 0x3e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MALAYALAM
|
||||||
|
# define LANG_MALAYALAM 0x4c
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MANIPURI
|
||||||
|
# define LANG_MANIPURI 0x58
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MARATHI
|
||||||
|
# define LANG_MARATHI 0x4e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_MONGOLIAN
|
||||||
|
# define LANG_MONGOLIAN 0x50
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_NEPALI
|
||||||
|
# define LANG_NEPALI 0x61
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ORIYA
|
||||||
|
# define LANG_ORIYA 0x48
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_PUNJABI
|
||||||
|
# define LANG_PUNJABI 0x46
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SANSKRIT
|
||||||
|
# define LANG_SANSKRIT 0x4f
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SERBIAN
|
||||||
|
# define LANG_SERBIAN 0x1a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SINDHI
|
||||||
|
# define LANG_SINDHI 0x59
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SLOVAK
|
||||||
|
# define LANG_SLOVAK 0x1b
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SORBIAN
|
||||||
|
# define LANG_SORBIAN 0x2e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SWAHILI
|
||||||
|
# define LANG_SWAHILI 0x41
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SYRIAC
|
||||||
|
# define LANG_SYRIAC 0x5a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TAMIL
|
||||||
|
# define LANG_TAMIL 0x49
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TATAR
|
||||||
|
# define LANG_TATAR 0x44
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TELUGU
|
||||||
|
# define LANG_TELUGU 0x4a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_THAI
|
||||||
|
# define LANG_THAI 0x1e
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_UKRAINIAN
|
||||||
|
# define LANG_UKRAINIAN 0x22
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_URDU
|
||||||
|
# define LANG_URDU 0x20
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_UZBEK
|
||||||
|
# define LANG_UZBEK 0x43
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_VIETNAMESE
|
||||||
|
# define LANG_VIETNAMESE 0x2a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
|
||||||
|
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_IRAQ
|
||||||
|
# define SUBLANG_ARABIC_IRAQ 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_EGYPT
|
||||||
|
# define SUBLANG_ARABIC_EGYPT 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_LIBYA
|
||||||
|
# define SUBLANG_ARABIC_LIBYA 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_ALGERIA
|
||||||
|
# define SUBLANG_ARABIC_ALGERIA 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_MOROCCO
|
||||||
|
# define SUBLANG_ARABIC_MOROCCO 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_TUNISIA
|
||||||
|
# define SUBLANG_ARABIC_TUNISIA 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_OMAN
|
||||||
|
# define SUBLANG_ARABIC_OMAN 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_YEMEN
|
||||||
|
# define SUBLANG_ARABIC_YEMEN 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_SYRIA
|
||||||
|
# define SUBLANG_ARABIC_SYRIA 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_JORDAN
|
||||||
|
# define SUBLANG_ARABIC_JORDAN 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_LEBANON
|
||||||
|
# define SUBLANG_ARABIC_LEBANON 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_KUWAIT
|
||||||
|
# define SUBLANG_ARABIC_KUWAIT 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_UAE
|
||||||
|
# define SUBLANG_ARABIC_UAE 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_BAHRAIN
|
||||||
|
# define SUBLANG_ARABIC_BAHRAIN 0x0f
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ARABIC_QATAR
|
||||||
|
# define SUBLANG_ARABIC_QATAR 0x10
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_AZERI_LATIN
|
||||||
|
# define SUBLANG_AZERI_LATIN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_AZERI_CYRILLIC
|
||||||
|
# define SUBLANG_AZERI_CYRILLIC 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_CHINESE_MACAU
|
||||||
|
# define SUBLANG_CHINESE_MACAU 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
|
||||||
|
# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_JAMAICA
|
||||||
|
# define SUBLANG_ENGLISH_JAMAICA 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_CARIBBEAN
|
||||||
|
# define SUBLANG_ENGLISH_CARIBBEAN 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_BELIZE
|
||||||
|
# define SUBLANG_ENGLISH_BELIZE 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_TRINIDAD
|
||||||
|
# define SUBLANG_ENGLISH_TRINIDAD 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_ZIMBABWE
|
||||||
|
# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_PHILIPPINES
|
||||||
|
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_LUXEMBOURG
|
||||||
|
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_MONACO
|
||||||
|
# define SUBLANG_FRENCH_MONACO 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_GERMAN_LUXEMBOURG
|
||||||
|
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
|
||||||
|
# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_KASHMIRI_INDIA
|
||||||
|
# define SUBLANG_KASHMIRI_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_MALAY_MALAYSIA
|
||||||
|
# define SUBLANG_MALAY_MALAYSIA 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
|
||||||
|
# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_NEPALI_INDIA
|
||||||
|
# define SUBLANG_NEPALI_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SERBIAN_LATIN
|
||||||
|
# define SUBLANG_SERBIAN_LATIN 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SERBIAN_CYRILLIC
|
||||||
|
# define SUBLANG_SERBIAN_CYRILLIC 0x03
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_GUATEMALA
|
||||||
|
# define SUBLANG_SPANISH_GUATEMALA 0x04
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_COSTA_RICA
|
||||||
|
# define SUBLANG_SPANISH_COSTA_RICA 0x05
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PANAMA
|
||||||
|
# define SUBLANG_SPANISH_PANAMA 0x06
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
|
||||||
|
# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_VENEZUELA
|
||||||
|
# define SUBLANG_SPANISH_VENEZUELA 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_COLOMBIA
|
||||||
|
# define SUBLANG_SPANISH_COLOMBIA 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PERU
|
||||||
|
# define SUBLANG_SPANISH_PERU 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_ARGENTINA
|
||||||
|
# define SUBLANG_SPANISH_ARGENTINA 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_ECUADOR
|
||||||
|
# define SUBLANG_SPANISH_ECUADOR 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_CHILE
|
||||||
|
# define SUBLANG_SPANISH_CHILE 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_URUGUAY
|
||||||
|
# define SUBLANG_SPANISH_URUGUAY 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PARAGUAY
|
||||||
|
# define SUBLANG_SPANISH_PARAGUAY 0x0f
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_BOLIVIA
|
||||||
|
# define SUBLANG_SPANISH_BOLIVIA 0x10
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_EL_SALVADOR
|
||||||
|
# define SUBLANG_SPANISH_EL_SALVADOR 0x11
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_HONDURAS
|
||||||
|
# define SUBLANG_SPANISH_HONDURAS 0x12
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_NICARAGUA
|
||||||
|
# define SUBLANG_SPANISH_NICARAGUA 0x13
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SPANISH_PUERTO_RICO
|
||||||
|
# define SUBLANG_SPANISH_PUERTO_RICO 0x14
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SWEDISH_FINLAND
|
||||||
|
# define SUBLANG_SWEDISH_FINLAND 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_URDU_PAKISTAN
|
||||||
|
# define SUBLANG_URDU_PAKISTAN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_URDU_INDIA
|
||||||
|
# define SUBLANG_URDU_INDIA 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_UZBEK_LATIN
|
||||||
|
# define SUBLANG_UZBEK_LATIN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_UZBEK_CYRILLIC
|
||||||
|
# define SUBLANG_UZBEK_CYRILLIC 0x02
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* XPG3 defines the result of 'setlocale (category, NULL)' as:
|
||||||
|
"Directs 'setlocale()' to query 'category' and return the current
|
||||||
|
setting of 'local'."
|
||||||
|
However it does not specify the exact format. Neither do SUSV2 and
|
||||||
|
ISO C 99. So we can use this feature only on selected systems (e.g.
|
||||||
|
those using GNU C Library). */
|
||||||
|
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
|
||||||
|
# define HAVE_LOCALE_NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Determine the current locale's name, and canonicalize it into XPG syntax
|
||||||
|
language[_territory[.codeset]][@modifier]
|
||||||
|
The codeset part in the result is not reliable; the locale_charset()
|
||||||
|
should be used for codeset information instead.
|
||||||
|
The result must not be freed; it is statically allocated. */
|
||||||
|
|
||||||
|
const char *
|
||||||
|
_nl_locale_name (category, categoryname)
|
||||||
|
int category;
|
||||||
|
const char *categoryname;
|
||||||
|
{
|
||||||
|
const char *retval;
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
|
||||||
|
/* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
|
||||||
|
On some systems this can be done by the 'setlocale' function itself. */
|
||||||
|
# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
|
||||||
|
retval = setlocale (category, NULL);
|
||||||
|
# else
|
||||||
|
/* Setting of LC_ALL overwrites all other. */
|
||||||
|
retval = getenv ("LC_ALL");
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
{
|
||||||
|
/* Next comes the name of the desired category. */
|
||||||
|
retval = getenv (categoryname);
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
{
|
||||||
|
/* Last possibility is the LANG environment variable. */
|
||||||
|
retval = getenv ("LANG");
|
||||||
|
if (retval == NULL || retval[0] == '\0')
|
||||||
|
/* We use C as the default domain. POSIX says this is
|
||||||
|
implementation defined. */
|
||||||
|
retval = "C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
#else /* WIN32 */
|
||||||
|
|
||||||
|
/* Return an XPG style locale name language[_territory][@modifier].
|
||||||
|
Don't even bother determining the codeset; it's not useful in this
|
||||||
|
context, because message catalogs are not specific to a single
|
||||||
|
codeset. */
|
||||||
|
|
||||||
|
LCID lcid;
|
||||||
|
LANGID langid;
|
||||||
|
int primary, sub;
|
||||||
|
|
||||||
|
/* Let the user override the system settings through environment
|
||||||
|
variables, as on POSIX systems. */
|
||||||
|
retval = getenv ("LC_ALL");
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
retval = getenv (categoryname);
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
retval = getenv ("LANG");
|
||||||
|
if (retval != NULL && retval[0] != '\0')
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
/* Use native Win32 API locale ID. */
|
||||||
|
lcid = GetThreadLocale ();
|
||||||
|
|
||||||
|
/* Strip off the sorting rules, keep only the language part. */
|
||||||
|
langid = LANGIDFROMLCID (lcid);
|
||||||
|
|
||||||
|
/* Split into language and territory part. */
|
||||||
|
primary = PRIMARYLANGID (langid);
|
||||||
|
sub = SUBLANGID (langid);
|
||||||
|
|
||||||
|
/* Dispatch on language.
|
||||||
|
See also http://www.unicode.org/unicode/onlinedat/languages.html .
|
||||||
|
For details about languages, see http://www.ethnologue.com/ . */
|
||||||
|
switch (primary)
|
||||||
|
{
|
||||||
|
case LANG_AFRIKAANS: return "af_ZA";
|
||||||
|
case LANG_ALBANIAN: return "sq_AL";
|
||||||
|
case 0x5e: /* AMHARIC */ return "am_ET";
|
||||||
|
case LANG_ARABIC:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
|
||||||
|
case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
|
||||||
|
case SUBLANG_ARABIC_EGYPT: return "ar_EG";
|
||||||
|
case SUBLANG_ARABIC_LIBYA: return "ar_LY";
|
||||||
|
case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
|
||||||
|
case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
|
||||||
|
case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
|
||||||
|
case SUBLANG_ARABIC_OMAN: return "ar_OM";
|
||||||
|
case SUBLANG_ARABIC_YEMEN: return "ar_YE";
|
||||||
|
case SUBLANG_ARABIC_SYRIA: return "ar_SY";
|
||||||
|
case SUBLANG_ARABIC_JORDAN: return "ar_JO";
|
||||||
|
case SUBLANG_ARABIC_LEBANON: return "ar_LB";
|
||||||
|
case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
|
||||||
|
case SUBLANG_ARABIC_UAE: return "ar_AE";
|
||||||
|
case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
|
||||||
|
case SUBLANG_ARABIC_QATAR: return "ar_QA";
|
||||||
|
}
|
||||||
|
return "ar";
|
||||||
|
case LANG_ARMENIAN: return "hy_AM";
|
||||||
|
case LANG_ASSAMESE: return "as_IN";
|
||||||
|
case LANG_AZERI:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
/* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
|
||||||
|
case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
|
||||||
|
case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
|
||||||
|
}
|
||||||
|
return "az";
|
||||||
|
case LANG_BASQUE:
|
||||||
|
return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
|
||||||
|
case LANG_BELARUSIAN: return "be_BY";
|
||||||
|
case LANG_BENGALI: return "bn_IN";
|
||||||
|
case LANG_BULGARIAN: return "bg_BG";
|
||||||
|
case 0x55: /* BURMESE */ return "my_MM";
|
||||||
|
case 0x53: /* CAMBODIAN */ return "km_KH";
|
||||||
|
case LANG_CATALAN: return "ca_ES";
|
||||||
|
case 0x5c: /* CHEROKEE */ return "chr_US";
|
||||||
|
case LANG_CHINESE:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
|
||||||
|
case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
|
||||||
|
case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
|
||||||
|
case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
|
||||||
|
case SUBLANG_CHINESE_MACAU: return "zh_MO";
|
||||||
|
}
|
||||||
|
return "zh";
|
||||||
|
case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
|
||||||
|
* What used to be called Serbo-Croatian
|
||||||
|
* should really now be two separate
|
||||||
|
* languages because of political reasons.
|
||||||
|
* (Says tml, who knows nothing about Serbian
|
||||||
|
* or Croatian.)
|
||||||
|
* (I can feel those flames coming already.)
|
||||||
|
*/
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DEFAULT: return "hr_HR";
|
||||||
|
case SUBLANG_SERBIAN_LATIN: return "sr_YU";
|
||||||
|
case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic";
|
||||||
|
}
|
||||||
|
return "hr";
|
||||||
|
case LANG_CZECH: return "cs_CZ";
|
||||||
|
case LANG_DANISH: return "da_DK";
|
||||||
|
case LANG_DIVEHI: return "div_MV";
|
||||||
|
case LANG_DUTCH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DUTCH: return "nl_NL";
|
||||||
|
case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
|
||||||
|
}
|
||||||
|
return "nl";
|
||||||
|
case 0x66: /* EDO */ return "bin_NG";
|
||||||
|
case LANG_ENGLISH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
/* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
|
||||||
|
* English was the language spoken in England.
|
||||||
|
* Oh well.
|
||||||
|
*/
|
||||||
|
case SUBLANG_ENGLISH_US: return "en_US";
|
||||||
|
case SUBLANG_ENGLISH_UK: return "en_GB";
|
||||||
|
case SUBLANG_ENGLISH_AUS: return "en_AU";
|
||||||
|
case SUBLANG_ENGLISH_CAN: return "en_CA";
|
||||||
|
case SUBLANG_ENGLISH_NZ: return "en_NZ";
|
||||||
|
case SUBLANG_ENGLISH_EIRE: return "en_IE";
|
||||||
|
case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
|
||||||
|
case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
|
||||||
|
case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
|
||||||
|
case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
|
||||||
|
case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
|
||||||
|
case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
|
||||||
|
case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
|
||||||
|
}
|
||||||
|
return "en";
|
||||||
|
case LANG_ESTONIAN: return "et_EE";
|
||||||
|
case LANG_FAEROESE: return "fo_FO";
|
||||||
|
case LANG_FARSI: return "fa_IR";
|
||||||
|
case LANG_FINNISH: return "fi_FI";
|
||||||
|
case LANG_FRENCH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_FRENCH: return "fr_FR";
|
||||||
|
case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
|
||||||
|
case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
|
||||||
|
case SUBLANG_FRENCH_SWISS: return "fr_CH";
|
||||||
|
case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
|
||||||
|
case SUBLANG_FRENCH_MONACO: return "fr_MC";
|
||||||
|
}
|
||||||
|
return "fr";
|
||||||
|
case 0x62: /* FRISIAN */ return "fy_NL";
|
||||||
|
case 0x67: /* FULFULDE */ return "ful_NG";
|
||||||
|
case 0x3c: /* GAELIC */
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case 0x01: /* SCOTTISH */ return "gd_GB";
|
||||||
|
case 0x02: /* IRISH */ return "ga_IE";
|
||||||
|
}
|
||||||
|
return "C";
|
||||||
|
case LANG_GALICIAN: return "gl_ES";
|
||||||
|
case LANG_GEORGIAN: return "ka_GE";
|
||||||
|
case LANG_GERMAN:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_GERMAN: return "de_DE";
|
||||||
|
case SUBLANG_GERMAN_SWISS: return "de_CH";
|
||||||
|
case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
|
||||||
|
case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
|
||||||
|
case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
|
||||||
|
}
|
||||||
|
return "de";
|
||||||
|
case LANG_GREEK: return "el_GR";
|
||||||
|
case 0x74: /* GUARANI */ return "gn_PY";
|
||||||
|
case LANG_GUJARATI: return "gu_IN";
|
||||||
|
case 0x68: /* HAUSA */ return "ha_NG";
|
||||||
|
case 0x75: /* HAWAIIAN */
|
||||||
|
/* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
|
||||||
|
or Hawaii Creole English ("cpe_US", 600000 speakers)? */
|
||||||
|
return "cpe_US";
|
||||||
|
case LANG_HEBREW: return "he_IL";
|
||||||
|
case LANG_HINDI: return "hi_IN";
|
||||||
|
case LANG_HUNGARIAN: return "hu_HU";
|
||||||
|
case 0x69: /* IBIBIO */ return "nic_NG";
|
||||||
|
case LANG_ICELANDIC: return "is_IS";
|
||||||
|
case 0x70: /* IGBO */ return "ibo_NG";
|
||||||
|
case LANG_INDONESIAN: return "id_ID";
|
||||||
|
case 0x5d: /* INUKTITUT */ return "iu_CA";
|
||||||
|
case LANG_ITALIAN:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_ITALIAN: return "it_IT";
|
||||||
|
case SUBLANG_ITALIAN_SWISS: return "it_CH";
|
||||||
|
}
|
||||||
|
return "it";
|
||||||
|
case LANG_JAPANESE: return "ja_JP";
|
||||||
|
case LANG_KANNADA: return "kn_IN";
|
||||||
|
case 0x71: /* KANURI */ return "kau_NG";
|
||||||
|
case LANG_KASHMIRI:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DEFAULT: return "ks_PK";
|
||||||
|
case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
|
||||||
|
}
|
||||||
|
return "ks";
|
||||||
|
case LANG_KAZAK: return "kk_KZ";
|
||||||
|
case LANG_KONKANI:
|
||||||
|
/* FIXME: Adjust this when such locales appear on Unix. */
|
||||||
|
return "kok_IN";
|
||||||
|
case LANG_KOREAN: return "ko_KR";
|
||||||
|
case LANG_KYRGYZ: return "ky_KG";
|
||||||
|
case 0x54: /* LAO */ return "lo_LA";
|
||||||
|
case 0x76: /* LATIN */ return "la_VA";
|
||||||
|
case LANG_LATVIAN: return "lv_LV";
|
||||||
|
case LANG_LITHUANIAN: return "lt_LT";
|
||||||
|
case LANG_MACEDONIAN: return "mk_MK";
|
||||||
|
case LANG_MALAY:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
|
||||||
|
case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
|
||||||
|
}
|
||||||
|
return "ms";
|
||||||
|
case LANG_MALAYALAM: return "ml_IN";
|
||||||
|
case 0x3a: /* MALTESE */ return "mt_MT";
|
||||||
|
case LANG_MANIPURI:
|
||||||
|
/* FIXME: Adjust this when such locales appear on Unix. */
|
||||||
|
return "mni_IN";
|
||||||
|
case LANG_MARATHI: return "mr_IN";
|
||||||
|
case LANG_MONGOLIAN:
|
||||||
|
return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
|
||||||
|
case LANG_NEPALI:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DEFAULT: return "ne_NP";
|
||||||
|
case SUBLANG_NEPALI_INDIA: return "ne_IN";
|
||||||
|
}
|
||||||
|
return "ne";
|
||||||
|
case LANG_NORWEGIAN:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
|
||||||
|
case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
|
||||||
|
}
|
||||||
|
return "no";
|
||||||
|
case LANG_ORIYA: return "or_IN";
|
||||||
|
case 0x72: /* OROMO */ return "om_ET";
|
||||||
|
case 0x79: /* PAPIAMENTU */ return "pap_AN";
|
||||||
|
case 0x63: /* PASHTO */
|
||||||
|
return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
|
||||||
|
case LANG_POLISH: return "pl_PL";
|
||||||
|
case LANG_PORTUGUESE:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_PORTUGUESE: return "pt_PT";
|
||||||
|
/* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
|
||||||
|
Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
|
||||||
|
case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
|
||||||
|
}
|
||||||
|
return "pt";
|
||||||
|
case LANG_PUNJABI: return "pa_IN";
|
||||||
|
case 0x17: /* RHAETO-ROMANCE */ return "rm_CH";
|
||||||
|
case LANG_ROMANIAN: return "ro_RO";
|
||||||
|
case LANG_RUSSIAN:
|
||||||
|
return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */
|
||||||
|
case 0x3b: /* SAMI */ return "se_NO";
|
||||||
|
case LANG_SANSKRIT: return "sa_IN";
|
||||||
|
case LANG_SINDHI: return "sd";
|
||||||
|
case 0x5b: /* SINHALESE */ return "si_LK";
|
||||||
|
case LANG_SLOVAK: return "sk_SK";
|
||||||
|
case LANG_SLOVENIAN: return "sl_SI";
|
||||||
|
case 0x77: /* SOMALI */ return "so_SO";
|
||||||
|
case LANG_SORBIAN:
|
||||||
|
/* FIXME: Adjust this when such locales appear on Unix. */
|
||||||
|
return "wen_DE";
|
||||||
|
case LANG_SPANISH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_SPANISH: return "es_ES";
|
||||||
|
case SUBLANG_SPANISH_MEXICAN: return "es_MX";
|
||||||
|
case SUBLANG_SPANISH_MODERN:
|
||||||
|
return "es_ES@modern"; /* not seen on Unix */
|
||||||
|
case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
|
||||||
|
case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
|
||||||
|
case SUBLANG_SPANISH_PANAMA: return "es_PA";
|
||||||
|
case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
|
||||||
|
case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
|
||||||
|
case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
|
||||||
|
case SUBLANG_SPANISH_PERU: return "es_PE";
|
||||||
|
case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
|
||||||
|
case SUBLANG_SPANISH_ECUADOR: return "es_EC";
|
||||||
|
case SUBLANG_SPANISH_CHILE: return "es_CL";
|
||||||
|
case SUBLANG_SPANISH_URUGUAY: return "es_UY";
|
||||||
|
case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
|
||||||
|
case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
|
||||||
|
case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
|
||||||
|
case SUBLANG_SPANISH_HONDURAS: return "es_HN";
|
||||||
|
case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
|
||||||
|
case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
|
||||||
|
}
|
||||||
|
return "es";
|
||||||
|
case 0x30: /* SUTU */ return "bnt_TZ";
|
||||||
|
case LANG_SWAHILI: return "sw_KE";
|
||||||
|
case LANG_SWEDISH:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_DEFAULT: return "sv_SE";
|
||||||
|
case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
|
||||||
|
}
|
||||||
|
return "sv";
|
||||||
|
case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
|
||||||
|
case 0x64: /* TAGALOG */ return "tl_PH";
|
||||||
|
case 0x28: /* TAJIK */ return "tg_TJ";
|
||||||
|
case 0x5f: /* TAMAZIGHT */ return "ber_MA";
|
||||||
|
case LANG_TAMIL:
|
||||||
|
return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
|
||||||
|
case LANG_TATAR: return "tt_RU";
|
||||||
|
case LANG_TELUGU: return "te_IN";
|
||||||
|
case LANG_THAI: return "th_TH";
|
||||||
|
case 0x51: /* TIBETAN */ return "bo_CN";
|
||||||
|
case 0x73: /* TIGRINYA */ return "ti_ET";
|
||||||
|
case 0x31: /* TSONGA */ return "ts_ZA";
|
||||||
|
case LANG_TURKISH: return "tr_TR";
|
||||||
|
case 0x42: /* TURKMEN */ return "tk_TM";
|
||||||
|
case LANG_UKRAINIAN: return "uk_UA";
|
||||||
|
case LANG_URDU:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_URDU_PAKISTAN: return "ur_PK";
|
||||||
|
case SUBLANG_URDU_INDIA: return "ur_IN";
|
||||||
|
}
|
||||||
|
return "ur";
|
||||||
|
case LANG_UZBEK:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
/* FIXME: Adjust this when Uzbek locales appear on Unix. */
|
||||||
|
case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin";
|
||||||
|
case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
|
||||||
|
}
|
||||||
|
return "uz";
|
||||||
|
case 0x33: /* VENDA */ return "ven_ZA";
|
||||||
|
case LANG_VIETNAMESE: return "vi_VN";
|
||||||
|
case 0x52: /* WELSH */ return "cy_GB";
|
||||||
|
case 0x34: /* XHOSA */ return "xh_ZA";
|
||||||
|
case 0x78: /* YI */ return "sit_CN";
|
||||||
|
case 0x3d: /* YIDDISH */ return "yi_IL";
|
||||||
|
case 0x6a: /* YORUBA */ return "yo_NG";
|
||||||
|
case 0x35: /* ZULU */ return "zu_ZA";
|
||||||
|
default: return "C";
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
104
intl/log.c
Normal file
104
intl/log.c
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
/* Log file output.
|
||||||
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Written by Bruno Haible <bruno@clisp.org>. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Print an ASCII string with quotes and escape sequences where needed. */
|
||||||
|
static void
|
||||||
|
print_escaped (stream, str)
|
||||||
|
FILE *stream;
|
||||||
|
const char *str;
|
||||||
|
{
|
||||||
|
putc ('"', stream);
|
||||||
|
for (; *str != '\0'; str++)
|
||||||
|
if (*str == '\n')
|
||||||
|
{
|
||||||
|
fputs ("\\n\"", stream);
|
||||||
|
if (str[1] == '\0')
|
||||||
|
return;
|
||||||
|
fputs ("\n\"", stream);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*str == '"' || *str == '\\')
|
||||||
|
putc ('\\', stream);
|
||||||
|
putc (*str, stream);
|
||||||
|
}
|
||||||
|
putc ('"', stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add to the log file an entry denoting a failed translation. */
|
||||||
|
void
|
||||||
|
_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural)
|
||||||
|
const char *logfilename;
|
||||||
|
const char *domainname;
|
||||||
|
const char *msgid1;
|
||||||
|
const char *msgid2;
|
||||||
|
int plural;
|
||||||
|
{
|
||||||
|
static char *last_logfilename = NULL;
|
||||||
|
static FILE *last_logfile = NULL;
|
||||||
|
FILE *logfile;
|
||||||
|
|
||||||
|
/* Can we reuse the last opened logfile? */
|
||||||
|
if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
|
||||||
|
{
|
||||||
|
/* Close the last used logfile. */
|
||||||
|
if (last_logfilename != NULL)
|
||||||
|
{
|
||||||
|
if (last_logfile != NULL)
|
||||||
|
{
|
||||||
|
fclose (last_logfile);
|
||||||
|
last_logfile = NULL;
|
||||||
|
}
|
||||||
|
free (last_logfilename);
|
||||||
|
last_logfilename = NULL;
|
||||||
|
}
|
||||||
|
/* Open the logfile. */
|
||||||
|
last_logfilename = (char *) malloc (strlen (logfilename) + 1);
|
||||||
|
if (last_logfilename == NULL)
|
||||||
|
return;
|
||||||
|
strcpy (last_logfilename, logfilename);
|
||||||
|
last_logfile = fopen (logfilename, "a");
|
||||||
|
if (last_logfile == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
logfile = last_logfile;
|
||||||
|
|
||||||
|
fprintf (logfile, "domain ");
|
||||||
|
print_escaped (logfile, domainname);
|
||||||
|
fprintf (logfile, "\nmsgid ");
|
||||||
|
print_escaped (logfile, msgid1);
|
||||||
|
if (plural)
|
||||||
|
{
|
||||||
|
fprintf (logfile, "\nmsgid_plural ");
|
||||||
|
print_escaped (logfile, msgid2);
|
||||||
|
fprintf (logfile, "\nmsgstr[0] \"\"\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf (logfile, "\nmsgstr \"\"\n");
|
||||||
|
putc ('\n', logfile);
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of ngettext(3) function.
|
/* Implementation of ngettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -46,8 +46,8 @@
|
||||||
# define NGETTEXT __ngettext
|
# define NGETTEXT __ngettext
|
||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
#else
|
#else
|
||||||
# define NGETTEXT ngettext__
|
# define NGETTEXT libintl_ngettext
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
/* Look up MSGID in the current default message catalog for the current
|
98
intl/os2compat.c
Normal file
98
intl/os2compat.c
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
/* OS/2 compatibility functions.
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#define OS2_AWARE
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
|
||||||
|
/* A version of getenv() that works from DLLs */
|
||||||
|
extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
|
||||||
|
|
||||||
|
char *
|
||||||
|
_nl_getenv (const char *name)
|
||||||
|
{
|
||||||
|
unsigned char *value;
|
||||||
|
if (DosScanEnv (name, &value))
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A fixed size buffer. */
|
||||||
|
char libintl_nl_default_dirname[MAXPATHLEN+1];
|
||||||
|
|
||||||
|
char *_nlos2_libdir = NULL;
|
||||||
|
char *_nlos2_localealiaspath = NULL;
|
||||||
|
char *_nlos2_localedir = NULL;
|
||||||
|
|
||||||
|
static __attribute__((constructor)) void
|
||||||
|
nlos2_initialize ()
|
||||||
|
{
|
||||||
|
char *root = getenv ("UNIXROOT");
|
||||||
|
char *gnulocaledir = getenv ("GNULOCALEDIR");
|
||||||
|
|
||||||
|
_nlos2_libdir = gnulocaledir;
|
||||||
|
if (!_nlos2_libdir)
|
||||||
|
{
|
||||||
|
if (root)
|
||||||
|
{
|
||||||
|
size_t sl = strlen (root);
|
||||||
|
_nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
|
||||||
|
memcpy (_nlos2_libdir, root, sl);
|
||||||
|
memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_nlos2_libdir = LIBDIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
_nlos2_localealiaspath = gnulocaledir;
|
||||||
|
if (!_nlos2_localealiaspath)
|
||||||
|
{
|
||||||
|
if (root)
|
||||||
|
{
|
||||||
|
size_t sl = strlen (root);
|
||||||
|
_nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
|
||||||
|
memcpy (_nlos2_localealiaspath, root, sl);
|
||||||
|
memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_nlos2_localealiaspath = LOCALE_ALIAS_PATH;
|
||||||
|
}
|
||||||
|
|
||||||
|
_nlos2_localedir = gnulocaledir;
|
||||||
|
if (!_nlos2_localedir)
|
||||||
|
{
|
||||||
|
if (root)
|
||||||
|
{
|
||||||
|
size_t sl = strlen (root);
|
||||||
|
_nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
|
||||||
|
memcpy (_nlos2_localedir, root, sl);
|
||||||
|
memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_nlos2_localedir = LOCALEDIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen (_nlos2_localedir) <= MAXPATHLEN)
|
||||||
|
strcpy (libintl_nl_default_dirname, _nlos2_localedir);
|
||||||
|
}
|
46
intl/os2compat.h
Normal file
46
intl/os2compat.h
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/* OS/2 compatibility defines.
|
||||||
|
This file is intended to be included from config.h
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* When included from os2compat.h we need all the original definitions */
|
||||||
|
#ifndef OS2_AWARE
|
||||||
|
|
||||||
|
#undef LIBDIR
|
||||||
|
#define LIBDIR _nlos2_libdir
|
||||||
|
extern char *_nlos2_libdir;
|
||||||
|
|
||||||
|
#undef LOCALEDIR
|
||||||
|
#define LOCALEDIR _nlos2_localedir
|
||||||
|
extern char *_nlos2_localedir;
|
||||||
|
|
||||||
|
#undef LOCALE_ALIAS_PATH
|
||||||
|
#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
|
||||||
|
extern char *_nlos2_localealiaspath;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef HAVE_STRCASECMP
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
#define strcasecmp stricmp
|
||||||
|
#define strncasecmp strnicmp
|
||||||
|
|
||||||
|
/* We have our own getenv() which works even if library is compiled as DLL */
|
||||||
|
#define getenv _nl_getenv
|
||||||
|
|
||||||
|
/* Older versions of gettext used -1 as the value of LC_MESSAGES */
|
||||||
|
#define LC_MESSAGES_COMPAT (-1)
|
24
intl/osdep.c
Normal file
24
intl/osdep.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* OS dependent parts of libintl.
|
||||||
|
Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#if defined __EMX__
|
||||||
|
# include "os2compat.c"
|
||||||
|
#else
|
||||||
|
/* Avoid AIX compiler warning. */
|
||||||
|
typedef int dummy;
|
||||||
|
#endif
|
156
intl/plural-exp.c
Normal file
156
intl/plural-exp.c
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
/* Expression parsing for plural form selection.
|
||||||
|
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "plural-exp.h"
|
||||||
|
|
||||||
|
#if (defined __GNUC__ && !defined __APPLE_CC__) \
|
||||||
|
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
|
||||||
|
|
||||||
|
/* These structs are the constant expression for the germanic plural
|
||||||
|
form determination. It represents the expression "n != 1". */
|
||||||
|
static const struct expression plvar =
|
||||||
|
{
|
||||||
|
.nargs = 0,
|
||||||
|
.operation = var,
|
||||||
|
};
|
||||||
|
static const struct expression plone =
|
||||||
|
{
|
||||||
|
.nargs = 0,
|
||||||
|
.operation = num,
|
||||||
|
.val =
|
||||||
|
{
|
||||||
|
.num = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct expression GERMANIC_PLURAL =
|
||||||
|
{
|
||||||
|
.nargs = 2,
|
||||||
|
.operation = not_equal,
|
||||||
|
.val =
|
||||||
|
{
|
||||||
|
.args =
|
||||||
|
{
|
||||||
|
[0] = (struct expression *) &plvar,
|
||||||
|
[1] = (struct expression *) &plone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# define INIT_GERMANIC_PLURAL()
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* For compilers without support for ISO C 99 struct/union initializers:
|
||||||
|
Initialization at run-time. */
|
||||||
|
|
||||||
|
static struct expression plvar;
|
||||||
|
static struct expression plone;
|
||||||
|
struct expression GERMANIC_PLURAL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_germanic_plural ()
|
||||||
|
{
|
||||||
|
if (plone.val.num == 0)
|
||||||
|
{
|
||||||
|
plvar.nargs = 0;
|
||||||
|
plvar.operation = var;
|
||||||
|
|
||||||
|
plone.nargs = 0;
|
||||||
|
plone.operation = num;
|
||||||
|
plone.val.num = 1;
|
||||||
|
|
||||||
|
GERMANIC_PLURAL.nargs = 2;
|
||||||
|
GERMANIC_PLURAL.operation = not_equal;
|
||||||
|
GERMANIC_PLURAL.val.args[0] = &plvar;
|
||||||
|
GERMANIC_PLURAL.val.args[1] = &plone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
internal_function
|
||||||
|
EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp)
|
||||||
|
const char *nullentry;
|
||||||
|
struct expression **pluralp;
|
||||||
|
unsigned long int *npluralsp;
|
||||||
|
{
|
||||||
|
if (nullentry != NULL)
|
||||||
|
{
|
||||||
|
const char *plural;
|
||||||
|
const char *nplurals;
|
||||||
|
|
||||||
|
plural = strstr (nullentry, "plural=");
|
||||||
|
nplurals = strstr (nullentry, "nplurals=");
|
||||||
|
if (plural == NULL || nplurals == NULL)
|
||||||
|
goto no_plural;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *endp;
|
||||||
|
unsigned long int n;
|
||||||
|
struct parse_args args;
|
||||||
|
|
||||||
|
/* First get the number. */
|
||||||
|
nplurals += 9;
|
||||||
|
while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
|
||||||
|
++nplurals;
|
||||||
|
if (!(*nplurals >= '0' && *nplurals <= '9'))
|
||||||
|
goto no_plural;
|
||||||
|
#if defined HAVE_STRTOUL || defined _LIBC
|
||||||
|
n = strtoul (nplurals, &endp, 10);
|
||||||
|
#else
|
||||||
|
for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
|
||||||
|
n = n * 10 + (*endp - '0');
|
||||||
|
#endif
|
||||||
|
if (nplurals == endp)
|
||||||
|
goto no_plural;
|
||||||
|
*npluralsp = n;
|
||||||
|
|
||||||
|
/* Due to the restrictions bison imposes onto the interface of the
|
||||||
|
scanner function we have to put the input string and the result
|
||||||
|
passed up from the parser into the same structure which address
|
||||||
|
is passed down to the parser. */
|
||||||
|
plural += 7;
|
||||||
|
args.cp = plural;
|
||||||
|
if (PLURAL_PARSE (&args) != 0)
|
||||||
|
goto no_plural;
|
||||||
|
*pluralp = args.res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* By default we are using the Germanic form: singular form only
|
||||||
|
for `one', the plural form otherwise. Yes, this is also what
|
||||||
|
English is using since English is a Germanic language. */
|
||||||
|
no_plural:
|
||||||
|
INIT_GERMANIC_PLURAL ();
|
||||||
|
*pluralp = &GERMANIC_PLURAL;
|
||||||
|
*npluralsp = 2;
|
||||||
|
}
|
||||||
|
}
|
126
intl/plural-exp.h
Normal file
126
intl/plural-exp.h
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
/* Expression parsing and evaluation for plural form selection.
|
||||||
|
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _PLURAL_EXP_H
|
||||||
|
#define _PLURAL_EXP_H
|
||||||
|
|
||||||
|
#ifndef PARAMS
|
||||||
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
|
# define PARAMS(args) args
|
||||||
|
# else
|
||||||
|
# define PARAMS(args) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef internal_function
|
||||||
|
# define internal_function
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef attribute_hidden
|
||||||
|
# define attribute_hidden
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* This is the representation of the expressions to determine the
|
||||||
|
plural form. */
|
||||||
|
struct expression
|
||||||
|
{
|
||||||
|
int nargs; /* Number of arguments. */
|
||||||
|
enum operator
|
||||||
|
{
|
||||||
|
/* Without arguments: */
|
||||||
|
var, /* The variable "n". */
|
||||||
|
num, /* Decimal number. */
|
||||||
|
/* Unary operators: */
|
||||||
|
lnot, /* Logical NOT. */
|
||||||
|
/* Binary operators: */
|
||||||
|
mult, /* Multiplication. */
|
||||||
|
divide, /* Division. */
|
||||||
|
module, /* Modulo operation. */
|
||||||
|
plus, /* Addition. */
|
||||||
|
minus, /* Subtraction. */
|
||||||
|
less_than, /* Comparison. */
|
||||||
|
greater_than, /* Comparison. */
|
||||||
|
less_or_equal, /* Comparison. */
|
||||||
|
greater_or_equal, /* Comparison. */
|
||||||
|
equal, /* Comparison for equality. */
|
||||||
|
not_equal, /* Comparison for inequality. */
|
||||||
|
land, /* Logical AND. */
|
||||||
|
lor, /* Logical OR. */
|
||||||
|
/* Ternary operators: */
|
||||||
|
qmop /* Question mark operator. */
|
||||||
|
} operation;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
unsigned long int num; /* Number value for `num'. */
|
||||||
|
struct expression *args[3]; /* Up to three arguments. */
|
||||||
|
} val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is the data structure to pass information to the parser and get
|
||||||
|
the result in a thread-safe way. */
|
||||||
|
struct parse_args
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
struct expression *res;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Names for the libintl functions are a problem. This source code is used
|
||||||
|
1. in the GNU C Library library,
|
||||||
|
2. in the GNU libintl library,
|
||||||
|
3. in the GNU gettext tools.
|
||||||
|
The function names in each situation must be different, to allow for
|
||||||
|
binary incompatible changes in 'struct expression'. Furthermore,
|
||||||
|
1. in the GNU C Library library, the names have a __ prefix,
|
||||||
|
2.+3. in the GNU libintl library and in the GNU gettext tools, the names
|
||||||
|
must follow ANSI C and not start with __.
|
||||||
|
So we have to distinguish the three cases. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define FREE_EXPRESSION __gettext_free_exp
|
||||||
|
# define PLURAL_PARSE __gettextparse
|
||||||
|
# define GERMANIC_PLURAL __gettext_germanic_plural
|
||||||
|
# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
|
||||||
|
#elif defined (IN_LIBINTL)
|
||||||
|
# define FREE_EXPRESSION libintl_gettext_free_exp
|
||||||
|
# define PLURAL_PARSE libintl_gettextparse
|
||||||
|
# define GERMANIC_PLURAL libintl_gettext_germanic_plural
|
||||||
|
# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
|
||||||
|
#else
|
||||||
|
# define FREE_EXPRESSION free_plural_expression
|
||||||
|
# define PLURAL_PARSE parse_plural_expression
|
||||||
|
# define GERMANIC_PLURAL germanic_plural
|
||||||
|
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
|
||||||
|
internal_function;
|
||||||
|
extern int PLURAL_PARSE PARAMS ((void *arg));
|
||||||
|
extern struct expression GERMANIC_PLURAL attribute_hidden;
|
||||||
|
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
|
||||||
|
struct expression **pluralp,
|
||||||
|
unsigned long int *npluralsp))
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
#if !defined (_LIBC) && !defined (IN_LIBINTL)
|
||||||
|
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
||||||
|
unsigned long int n));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _PLURAL_EXP_H */
|
1518
intl/plural.c
Normal file
1518
intl/plural.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -30,25 +30,21 @@
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "gettextP.h"
|
#include "plural-exp.h"
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* The main function generated by the parser is called __gettextparse,
|
||||||
with existing names and they should follow ANSI C. But this source
|
but we want it to be called PLURAL_PARSE. */
|
||||||
code is also used in GNU C Library where the names have a __
|
#ifndef _LIBC
|
||||||
prefix. So we have to make a difference here. */
|
# define __gettextparse PLURAL_PARSE
|
||||||
#ifdef _LIBC
|
|
||||||
# define FREE_EXPRESSION __gettext_free_exp
|
|
||||||
#else
|
|
||||||
# define FREE_EXPRESSION gettext_free_exp__
|
|
||||||
# define __gettextparse gettextparse__
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||||
#define YYPARSE_PARAM arg
|
#define YYPARSE_PARAM arg
|
||||||
%}
|
%}
|
||||||
%pure_parser
|
%pure_parser
|
||||||
%expect 10
|
%expect 7
|
||||||
|
|
||||||
%union {
|
%union {
|
||||||
unsigned long int num;
|
unsigned long int num;
|
||||||
|
@ -404,13 +400,10 @@ yylex (lval, pexp)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
|
||||||
#define __attribute__(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
yyerror (str)
|
yyerror (str)
|
||||||
const char *str __attribute__ ((__unused__));
|
const char *str;
|
||||||
{
|
{
|
||||||
/* Do nothing. We don't print error messages here. */
|
/* Do nothing. We don't print error messages here. */
|
||||||
}
|
}
|
439
intl/relocatable.c
Normal file
439
intl/relocatable.c
Normal file
|
@ -0,0 +1,439 @@
|
||||||
|
/* Provide relocatable packages.
|
||||||
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Tell glibc's <stdio.h> to provide a prototype for getline().
|
||||||
|
This must come before <config.h> because <config.h> may include
|
||||||
|
<features.h>, and once <features.h> has been included, it's too late. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "relocatable.h"
|
||||||
|
|
||||||
|
#if ENABLE_RELOCATABLE
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef NO_XMALLOC
|
||||||
|
# define xmalloc malloc
|
||||||
|
#else
|
||||||
|
# include "xmalloc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DEPENDS_ON_LIBCHARSET
|
||||||
|
# include <libcharset.h>
|
||||||
|
#endif
|
||||||
|
#if DEPENDS_ON_LIBICONV && HAVE_ICONV
|
||||||
|
# include <iconv.h>
|
||||||
|
#endif
|
||||||
|
#if DEPENDS_ON_LIBINTL && ENABLE_NLS
|
||||||
|
# include <libintl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Faked cheap 'bool'. */
|
||||||
|
#undef bool
|
||||||
|
#undef false
|
||||||
|
#undef true
|
||||||
|
#define bool int
|
||||||
|
#define false 0
|
||||||
|
#define true 1
|
||||||
|
|
||||||
|
/* Pathname support.
|
||||||
|
ISSLASH(C) tests whether C is a directory separator character.
|
||||||
|
IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
|
||||||
|
*/
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
# define HAS_DEVICE(P) \
|
||||||
|
((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
|
||||||
|
&& (P)[1] == ':')
|
||||||
|
# define IS_PATH_WITH_DIR(P) \
|
||||||
|
(strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
|
||||||
|
# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define ISSLASH(C) ((C) == '/')
|
||||||
|
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
||||||
|
# define FILESYSTEM_PREFIX_LEN(P) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Original installation prefix. */
|
||||||
|
static char *orig_prefix;
|
||||||
|
static size_t orig_prefix_len;
|
||||||
|
/* Current installation prefix. */
|
||||||
|
static char *curr_prefix;
|
||||||
|
static size_t curr_prefix_len;
|
||||||
|
/* These prefixes do not end in a slash. Anything that will be concatenated
|
||||||
|
to them must start with a slash. */
|
||||||
|
|
||||||
|
/* Sets the original and the current installation prefix of this module.
|
||||||
|
Relocation simply replaces a pathname starting with the original prefix
|
||||||
|
by the corresponding pathname with the current prefix instead. Both
|
||||||
|
prefixes should be directory names without trailing slash (i.e. use ""
|
||||||
|
instead of "/"). */
|
||||||
|
static void
|
||||||
|
set_this_relocation_prefix (const char *orig_prefix_arg,
|
||||||
|
const char *curr_prefix_arg)
|
||||||
|
{
|
||||||
|
if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
|
||||||
|
/* Optimization: if orig_prefix and curr_prefix are equal, the
|
||||||
|
relocation is a nop. */
|
||||||
|
&& strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
|
||||||
|
{
|
||||||
|
/* Duplicate the argument strings. */
|
||||||
|
char *memory;
|
||||||
|
|
||||||
|
orig_prefix_len = strlen (orig_prefix_arg);
|
||||||
|
curr_prefix_len = strlen (curr_prefix_arg);
|
||||||
|
memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
|
||||||
|
#ifdef NO_XMALLOC
|
||||||
|
if (memory != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
|
||||||
|
orig_prefix = memory;
|
||||||
|
memory += orig_prefix_len + 1;
|
||||||
|
memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
|
||||||
|
curr_prefix = memory;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orig_prefix = NULL;
|
||||||
|
curr_prefix = NULL;
|
||||||
|
/* Don't worry about wasted memory here - this function is usually only
|
||||||
|
called once. */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the original and the current installation prefix of the package.
|
||||||
|
Relocation simply replaces a pathname starting with the original prefix
|
||||||
|
by the corresponding pathname with the current prefix instead. Both
|
||||||
|
prefixes should be directory names without trailing slash (i.e. use ""
|
||||||
|
instead of "/"). */
|
||||||
|
void
|
||||||
|
set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
|
||||||
|
{
|
||||||
|
set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
|
||||||
|
|
||||||
|
/* Now notify all dependent libraries. */
|
||||||
|
#if DEPENDS_ON_LIBCHARSET
|
||||||
|
libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
|
||||||
|
#endif
|
||||||
|
#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
|
||||||
|
libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
|
||||||
|
#endif
|
||||||
|
#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
|
||||||
|
libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convenience function:
|
||||||
|
Computes the current installation prefix, based on the original
|
||||||
|
installation prefix, the original installation directory of a particular
|
||||||
|
file, and the current pathname of this file. Returns NULL upon failure. */
|
||||||
|
#ifdef IN_LIBRARY
|
||||||
|
#define compute_curr_prefix local_compute_curr_prefix
|
||||||
|
static
|
||||||
|
#endif
|
||||||
|
const char *
|
||||||
|
compute_curr_prefix (const char *orig_installprefix,
|
||||||
|
const char *orig_installdir,
|
||||||
|
const char *curr_pathname)
|
||||||
|
{
|
||||||
|
const char *curr_installdir;
|
||||||
|
const char *rel_installdir;
|
||||||
|
|
||||||
|
if (curr_pathname == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Determine the relative installation directory, relative to the prefix.
|
||||||
|
This is simply the difference between orig_installprefix and
|
||||||
|
orig_installdir. */
|
||||||
|
if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
|
||||||
|
!= 0)
|
||||||
|
/* Shouldn't happen - nothing should be installed outside $(prefix). */
|
||||||
|
return NULL;
|
||||||
|
rel_installdir = orig_installdir + strlen (orig_installprefix);
|
||||||
|
|
||||||
|
/* Determine the current installation directory. */
|
||||||
|
{
|
||||||
|
const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
|
||||||
|
const char *p = curr_pathname + strlen (curr_pathname);
|
||||||
|
char *q;
|
||||||
|
|
||||||
|
while (p > p_base)
|
||||||
|
{
|
||||||
|
p--;
|
||||||
|
if (ISSLASH (*p))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
q = (char *) xmalloc (p - curr_pathname + 1);
|
||||||
|
#ifdef NO_XMALLOC
|
||||||
|
if (q == NULL)
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
memcpy (q, curr_pathname, p - curr_pathname);
|
||||||
|
q[p - curr_pathname] = '\0';
|
||||||
|
curr_installdir = q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the current installation prefix by removing the trailing
|
||||||
|
rel_installdir from it. */
|
||||||
|
{
|
||||||
|
const char *rp = rel_installdir + strlen (rel_installdir);
|
||||||
|
const char *cp = curr_installdir + strlen (curr_installdir);
|
||||||
|
const char *cp_base =
|
||||||
|
curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
|
||||||
|
|
||||||
|
while (rp > rel_installdir && cp > cp_base)
|
||||||
|
{
|
||||||
|
bool same = false;
|
||||||
|
const char *rpi = rp;
|
||||||
|
const char *cpi = cp;
|
||||||
|
|
||||||
|
while (rpi > rel_installdir && cpi > cp_base)
|
||||||
|
{
|
||||||
|
rpi--;
|
||||||
|
cpi--;
|
||||||
|
if (ISSLASH (*rpi) || ISSLASH (*cpi))
|
||||||
|
{
|
||||||
|
if (ISSLASH (*rpi) && ISSLASH (*cpi))
|
||||||
|
same = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS - case insignificant filesystem */
|
||||||
|
if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
|
||||||
|
!= (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
if (*rpi != *cpi)
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (!same)
|
||||||
|
break;
|
||||||
|
/* The last pathname component was the same. opi and cpi now point
|
||||||
|
to the slash before it. */
|
||||||
|
rp = rpi;
|
||||||
|
cp = cpi;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rp > rel_installdir)
|
||||||
|
/* Unexpected: The curr_installdir does not end with rel_installdir. */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
{
|
||||||
|
size_t curr_prefix_len = cp - curr_installdir;
|
||||||
|
char *curr_prefix;
|
||||||
|
|
||||||
|
curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
|
||||||
|
#ifdef NO_XMALLOC
|
||||||
|
if (curr_prefix == NULL)
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
memcpy (curr_prefix, curr_installdir, curr_prefix_len);
|
||||||
|
curr_prefix[curr_prefix_len] = '\0';
|
||||||
|
|
||||||
|
return curr_prefix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined PIC && defined INSTALLDIR
|
||||||
|
|
||||||
|
/* Full pathname of shared library, or NULL. */
|
||||||
|
static char *shared_library_fullname;
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
|
||||||
|
/* Determine the full pathname of the shared library when it is loaded. */
|
||||||
|
|
||||||
|
BOOL WINAPI
|
||||||
|
DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
|
||||||
|
{
|
||||||
|
(void) reserved;
|
||||||
|
|
||||||
|
if (event == DLL_PROCESS_ATTACH)
|
||||||
|
{
|
||||||
|
/* The DLL is being loaded into an application's address range. */
|
||||||
|
static char location[MAX_PATH];
|
||||||
|
|
||||||
|
if (!GetModuleFileName (module_handle, location, sizeof (location)))
|
||||||
|
/* Shouldn't happen. */
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!IS_PATH_WITH_DIR (location))
|
||||||
|
/* Shouldn't happen. */
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
shared_library_fullname = strdup (location);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* Unix */
|
||||||
|
|
||||||
|
static void
|
||||||
|
find_shared_library_fullname ()
|
||||||
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
/* Open the current process' maps file. It describes one VMA per line. */
|
||||||
|
fp = fopen ("/proc/self/maps", "r");
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
|
unsigned long address = (unsigned long) &find_shared_library_fullname;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
unsigned long start, end;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
|
||||||
|
break;
|
||||||
|
if (address >= start && address <= end - 1)
|
||||||
|
{
|
||||||
|
/* Found it. Now see if this line contains a filename. */
|
||||||
|
while (c = getc (fp), c != EOF && c != '\n' && c != '/')
|
||||||
|
continue;
|
||||||
|
if (c == '/')
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
ungetc (c, fp);
|
||||||
|
shared_library_fullname = NULL; size = 0;
|
||||||
|
len = getline (&shared_library_fullname, &size, fp);
|
||||||
|
if (len >= 0)
|
||||||
|
{
|
||||||
|
/* Success: filled shared_library_fullname. */
|
||||||
|
if (len > 0 && shared_library_fullname[len - 1] == '\n')
|
||||||
|
shared_library_fullname[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (c = getc (fp), c != EOF && c != '\n')
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fclose (fp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WIN32 / Unix */
|
||||||
|
|
||||||
|
/* Return the full pathname of the current shared library.
|
||||||
|
Return NULL if unknown.
|
||||||
|
Guaranteed to work only on Linux and Woe32. */
|
||||||
|
static char *
|
||||||
|
get_shared_library_fullname ()
|
||||||
|
{
|
||||||
|
#if !(defined _WIN32 || defined __WIN32__)
|
||||||
|
static bool tried_find_shared_library_fullname;
|
||||||
|
if (!tried_find_shared_library_fullname)
|
||||||
|
{
|
||||||
|
find_shared_library_fullname ();
|
||||||
|
tried_find_shared_library_fullname = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return shared_library_fullname;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* PIC */
|
||||||
|
|
||||||
|
/* Returns the pathname, relocated according to the current installation
|
||||||
|
directory. */
|
||||||
|
const char *
|
||||||
|
relocate (const char *pathname)
|
||||||
|
{
|
||||||
|
#if defined PIC && defined INSTALLDIR
|
||||||
|
static int initialized;
|
||||||
|
|
||||||
|
/* Initialization code for a shared library. */
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
/* At this point, orig_prefix and curr_prefix likely have already been
|
||||||
|
set through the main program's set_program_name_and_installdir
|
||||||
|
function. This is sufficient in the case that the library has
|
||||||
|
initially been installed in the same orig_prefix. But we can do
|
||||||
|
better, to also cover the cases that 1. it has been installed
|
||||||
|
in a different prefix before being moved to orig_prefix and (later)
|
||||||
|
to curr_prefix, 2. unlike the program, it has not moved away from
|
||||||
|
orig_prefix. */
|
||||||
|
const char *orig_installprefix = INSTALLPREFIX;
|
||||||
|
const char *orig_installdir = INSTALLDIR;
|
||||||
|
const char *curr_prefix_better;
|
||||||
|
|
||||||
|
curr_prefix_better =
|
||||||
|
compute_curr_prefix (orig_installprefix, orig_installdir,
|
||||||
|
get_shared_library_fullname ());
|
||||||
|
if (curr_prefix_better == NULL)
|
||||||
|
curr_prefix_better = curr_prefix;
|
||||||
|
|
||||||
|
set_relocation_prefix (orig_installprefix, curr_prefix_better);
|
||||||
|
|
||||||
|
initialized = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Note: It is not necessary to perform case insensitive comparison here,
|
||||||
|
even for DOS-like filesystems, because the pathname argument was
|
||||||
|
typically created from the same Makefile variable as orig_prefix came
|
||||||
|
from. */
|
||||||
|
if (orig_prefix != NULL && curr_prefix != NULL
|
||||||
|
&& strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
|
||||||
|
{
|
||||||
|
if (pathname[orig_prefix_len] == '\0')
|
||||||
|
/* pathname equals orig_prefix. */
|
||||||
|
return curr_prefix;
|
||||||
|
if (ISSLASH (pathname[orig_prefix_len]))
|
||||||
|
{
|
||||||
|
/* pathname starts with orig_prefix. */
|
||||||
|
const char *pathname_tail = &pathname[orig_prefix_len];
|
||||||
|
char *result =
|
||||||
|
(char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
|
||||||
|
|
||||||
|
#ifdef NO_XMALLOC
|
||||||
|
if (result != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
memcpy (result, curr_prefix, curr_prefix_len);
|
||||||
|
strcpy (result + curr_prefix_len, pathname_tail);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Nothing to relocate. */
|
||||||
|
return pathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
67
intl/relocatable.h
Normal file
67
intl/relocatable.h
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
/* Provide relocatable packages.
|
||||||
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _RELOCATABLE_H
|
||||||
|
#define _RELOCATABLE_H
|
||||||
|
|
||||||
|
/* This can be enabled through the configure --enable-relocatable option. */
|
||||||
|
#if ENABLE_RELOCATABLE
|
||||||
|
|
||||||
|
/* When building a DLL, we must export some functions. Note that because
|
||||||
|
this is a private .h file, we don't need to use __declspec(dllimport)
|
||||||
|
in any case. */
|
||||||
|
#if defined _MSC_VER && BUILDING_DLL
|
||||||
|
# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
# define RELOCATABLE_DLL_EXPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Sets the original and the current installation prefix of the package.
|
||||||
|
Relocation simply replaces a pathname starting with the original prefix
|
||||||
|
by the corresponding pathname with the current prefix instead. Both
|
||||||
|
prefixes should be directory names without trailing slash (i.e. use ""
|
||||||
|
instead of "/"). */
|
||||||
|
extern RELOCATABLE_DLL_EXPORTED void
|
||||||
|
set_relocation_prefix (const char *orig_prefix,
|
||||||
|
const char *curr_prefix);
|
||||||
|
|
||||||
|
/* Returns the pathname, relocated according to the current installation
|
||||||
|
directory. */
|
||||||
|
extern const char * relocate (const char *pathname);
|
||||||
|
|
||||||
|
/* Memory management: relocate() leaks memory, because it has to construct
|
||||||
|
a fresh pathname. If this is a problem because your program calls
|
||||||
|
relocate() frequently, think about caching the result. */
|
||||||
|
|
||||||
|
/* Convenience function:
|
||||||
|
Computes the current installation prefix, based on the original
|
||||||
|
installation prefix, the original installation directory of a particular
|
||||||
|
file, and the current pathname of this file. Returns NULL upon failure. */
|
||||||
|
extern const char * compute_curr_prefix (const char *orig_installprefix,
|
||||||
|
const char *orig_installdir,
|
||||||
|
const char *curr_pathname);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* By default, we use the hardwired pathnames. */
|
||||||
|
#define relocate(pathname) (pathname)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _RELOCATABLE_H */
|
|
@ -1,5 +1,5 @@
|
||||||
/* Implementation of the textdomain(3) function.
|
/* Implementation of the textdomain(3) function.
|
||||||
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU Library General Public License as published
|
under the terms of the GNU Library General Public License as published
|
||||||
|
@ -44,17 +44,17 @@
|
||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_default_domain _nl_default_default_domain__
|
# define _nl_default_default_domain libintl_nl_default_default_domain
|
||||||
# define _nl_current_default_domain _nl_current_default_domain__
|
# define _nl_current_default_domain libintl_nl_current_default_domain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
/* Name of the default text domain. */
|
/* Name of the default text domain. */
|
||||||
extern const char _nl_default_default_domain[];
|
extern const char _nl_default_default_domain[] attribute_hidden;
|
||||||
|
|
||||||
/* Default text domain in which entries for gettext(3) are to be found. */
|
/* Default text domain in which entries for gettext(3) are to be found. */
|
||||||
extern const char *_nl_current_default_domain;
|
extern const char *_nl_current_default_domain attribute_hidden;
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
|
@ -67,11 +67,11 @@ extern const char *_nl_current_default_domain;
|
||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define TEXTDOMAIN textdomain__
|
# define TEXTDOMAIN libintl_textdomain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
__libc_rwlock_define (extern, _nl_state_lock)
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
/* Set the current default message catalog to DOMAINNAME.
|
/* Set the current default message catalog to DOMAINNAME.
|
||||||
If DOMAINNAME is null, return the current default.
|
If DOMAINNAME is null, return the current default.
|
Loading…
Add table
Reference in a new issue