Rocco Rutte:
authorpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Mon, 22 Aug 2005 19:47:22 +0000 (19:47 +0000)
committerpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Mon, 22 Aug 2005 19:47:22 +0000 (19:47 +0000)
- upgrade included gettext to 0.14.5

git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@422 e385b8ad-14ed-0310-8656-cc95a2468c6d

54 files changed:
intl/COPYING.LIB-2.0 [new file with mode: 0644]
intl/COPYING.LIB-2.1 [new file with mode: 0644]
intl/ChangeLog
intl/Makefile.in
intl/VERSION
intl/bindtextdom.c
intl/config.charset
intl/dcgettext.c
intl/dcigettext.c
intl/dcngettext.c
intl/dgettext.c
intl/dngettext.c
intl/eval-plural.h [new file with mode: 0644]
intl/explodename.c
intl/finddomain.c
intl/gettext.c
intl/gettextP.h
intl/gmo.h [new file with mode: 0644]
intl/hash-string.h
intl/intl-compat.c
intl/l10nflist.c
intl/langprefs.c [new file with mode: 0644]
intl/libgnuintl.h.in [new file with mode: 0644]
intl/loadinfo.h
intl/loadmsgcat.c
intl/localcharset.c
intl/localcharset.h [new file with mode: 0644]
intl/locale.alias
intl/localealias.c
intl/localename.c [new file with mode: 0644]
intl/log.c [new file with mode: 0644]
intl/ngettext.c
intl/os2compat.c [new file with mode: 0644]
intl/os2compat.h [new file with mode: 0644]
intl/osdep.c [new file with mode: 0644]
intl/plural-exp.c [new file with mode: 0644]
intl/plural-exp.h [new file with mode: 0644]
intl/plural.c
intl/plural.y
intl/printf-args.c [new file with mode: 0644]
intl/printf-args.h [new file with mode: 0644]
intl/printf-parse.c [new file with mode: 0644]
intl/printf-parse.h [new file with mode: 0644]
intl/printf.c [new file with mode: 0644]
intl/ref-add.sin
intl/ref-del.sin
intl/relocatable.c [new file with mode: 0644]
intl/relocatable.h [new file with mode: 0644]
intl/textdomain.c
intl/vasnprintf.c [new file with mode: 0644]
intl/vasnprintf.h [new file with mode: 0644]
intl/vasnwprintf.h [new file with mode: 0644]
intl/wprintf-parse.h [new file with mode: 0644]
intl/xsize.h [new file with mode: 0644]

diff --git a/intl/COPYING.LIB-2.0 b/intl/COPYING.LIB-2.0
new file mode 100644 (file)
index 0000000..9c0633c
--- /dev/null
@@ -0,0 +1,482 @@
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library 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 of the License, or (at your option) any later version.
+
+    This library 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 library; if not, write to the Free
+    Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/intl/COPYING.LIB-2.1 b/intl/COPYING.LIB-2.1
new file mode 100644 (file)
index 0000000..c2c87d6
--- /dev/null
@@ -0,0 +1,516 @@
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+^L
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+^L
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it
+does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA 02110-1301, USA
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+You should also get your employer (if you work as a programmer) or
+your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
index 84e2b37..7d1d96e 100644 (file)
-2001-09-13  GNU  <bug-gnu-utils@gnu.org>
+2005-05-23  Bruno Haible  <bruno@clisp.org>
 
-       * Version 0.10.40 released.
+       * gettext-0.14.5 released.
 
+2005-04-11  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.14.4 released.
+
+2005-04-11  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 7:3:4.
+
+2005-03-16  Bruno Haible  <bruno@clisp.org>
+
+       Canonicalize locale names on MacOS X.
+       * localename.c (_nl_locale_name_canonicalize): New function.
+       (_nl_locale_name_default): Use it.
+       * langprefs.c (_nl_locale_name_canonicalize): New declaration.
+       (_nl_language_preferences_default): Use it.
+
+2005-03-14  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.14.3 released.
+
+2005-03-14  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (dist, distdir): Ignore a failure to copy Makefile.in.
+       Needed because the automake-1.9 generated dist rule of the parent
+       directory already copies this file.
+
+2005-03-08  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 7:2:4.
+
+2005-03-06  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (dist, distdir): Fail if some of the files to be
+       distributed do not exist or cannot be copied.
+       Suggested by Alexandre Duret-Lutz <adl@src.lip6.fr>.
+
+2005-02-24  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.14.2 released.
+
+2005-02-12  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (EOVERFLOW): Define to a fallback if needed.
+
+2005-02-11  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 7:1:4.
+
+2005-01-29  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.am (libintl.la, libgnuintl.la): Use INTL_MACOSX_LIBS
+       instead of INTL_MACOSX_LDFLAGS.
+
+2004-09-08  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (VASNPRINTF): Signal EOVERFLOW if the resulting length
+       is > INT_MAX.
+
+2005-01-01  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (guess_category_value): Let the environment variables
+       LC_ALL, LC_xxx, LANG take precedence over the system-dependent language
+       preference list.
+       * gettextP.h (_nl_language_preferences): Remove declaration.
+       (_nl_language_preferences_default): New declaration.
+       (_nl_locale_name_posix, _nl_locale_name_default): New declarations.
+       * langprefs.c (_nl_language_preferences_default): Renamed from
+       _nl_language_preferences. Remove handling of getenv("LANGUAGE").
+       * localename.c (_nl_locale_name_posix, _nl_locale_name_default): New
+       functions, extracted from _nl_locale_name.
+       (_nl_locale_name): Use them.
+
+2004-09-06  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (_nl_locale_name): Add code for MacOS X versions that
+       don't have the CFLocaleCopyCurrent() function.
+       * langprefs.c (_nl_language_preferences): Make code more robust.
+
+2004-09-05  Bruno Haible  <bruno@clisp.org>
+
+       * langprefs.c: New file.
+       * gettextP.h (_nl_language_preferences): New declaration.
+       * dcigettext.c (guess_category_value) [!_LIBC]: Use
+       _nl_language_preferences.
+       * Makefile.in (SOURCES): Add langprefs.c.
+       (OBJECTS): Add langprefs.$lo.
+       (langprefs.lo): New rule.
+       * Makefile.msvc (OBJECTS): Add langprefs.obj.
+       (langprefs.obj): New rule.
+       * Makefile.vms (OBJECTS): Add langprefs.obj.
+       (langprefs.obj): New rule.
+
+2004-09-03  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (_nl_locale_name): Use a more intelligent fallback on
+       MacOS X versions that have the CFLocaleCopyCurrent() function.
+       * Makefile.in (libintl.la, libgnuintl.la): Use the INTL_MACOSX_LDFLAGS.
+
+2004-09-01  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Add support for Darwin 7.
+
+2004-08-13  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h.in (__GNU_GETTEXT_SUPPORTED_REVISION): Treat major
+       revision 1 like major revision 0. Needed for 2004-01-09 change.
+
+2004-08-08  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c (FILE_SYSTEM_PREFIX_LEN): Renamed from
+       FILESYSTEM_PREFIX_LEN.
+       (compute_curr_prefix): Update.
+
+2004-05-14  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (VASNPRINTF): Correctly handle the case of a precision
+       that consists of a '.' followed by an empty digit string.
+       Patch by Tor Lillqvist <tml@iki.fi>.
+
+2004-04-28  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (ISSLASH, IS_ABSOLUTE_PATH, IS_PATH_WITH_DIR): Treat
+       Cygwin like Windows, since it now accepts Windows pathnames.
+       * l10nflist.c (ISSLASH, IS_ABSOLUTE_PATH): Treat Cygwin like Windows,
+       since it now accepts Windows pathnames.
+       * localcharset.c (ISSLASH): Treat Cygwin like Windows, since it now
+       accepts Windows pathnames.
+       * relocatable.c (ISSLASH, IS_PATH_WITH_DIR, FILESYSTEM_PREFIX_LEN):
+       Treat Cygwin like Windows, since it now accepts Windows pathnames.
+       (compute_curr_prefix): Likewise.
+       Reported by Derek Robert Price <derek@ximbiot.com>.
+
+2004-04-23  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (get_charset_aliases): Allow the CHARSETALIASDIR
+       environment variable to override LIBDIR.
+       Suggested by Matthias Clasen <mclasen@redhat.com>.
+
+2004-04-20  Jim Meyering  <jim@meyering.net>
+            Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (get_charset_aliases) [!VMS && !WIN32]: Don't leak
+       memory when realloc fails.
+
+2004-03-02  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (_nl_locale_name): Add info about default territory for
+       Basque, Mongolian, Russian, Tamil. Map Norwegian to nb, not no.
+
+2004-02-02  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (install-exec, installdirs, uninstall): Install
+       preloaded_libintl.so only on glibc systems, not on OpenBSD.
+       Reported by Han Boetes <han@mijncomputer.nl>.
+
+2004-01-29  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.14.1 released.
+
+2004-01-28  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.14 released.
+
+2004-01-21  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Add support for MacOS X (Darwin).
+
+2004-01-18  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (_nl_locale_name): Use two-letter ISO 639 codes for
+       Divehi, Fulfulde, Igbo, Kanuri, Venda.
+
+2004-01-17  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 7:0:4.
+
+2003-12-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * locale.alias: Use nb_NO instead of no_NO for bokmål.
+
+2003-11-03  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale.alias: nb_NO is now the correct name, not no_NO.
+
+2004-01-09  Bruno Haible  <bruno@clisp.org>
+
+       * gmo.h (MO_REVISION_NUMBER_WITH_SYSDEP_I): New definition.
+       * loadmsgcat.c (get_sysdep_segment_value): Handle "I".
+       (_nl_load_domain): Treat major revision 1 like major revision 0.
+
+2004-01-08  Bruno Haible  <bruno@clisp.org>
+
+       * loadmsgcat.c (_nl_load_domain): When a string pair uses a system
+       dependent segment not known to this version of the library, ignore
+       the string pair instead of crashing.
+
+2003-12-17  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.13.1 released.
+
+2003-12-17  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 6:1:4.
+
+2003-12-05  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (_nl_locale_name): Change result for Latin Uzbek locale
+       to match the glibc name.
+
+2003-12-02  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (LANG_AMHARIC, LANG_BURMESE, LANG_CAMBODIAN,
+       LANG_CHEROKEE, LANG_EDO, LANG_FRISIAN, LANG_FULFULDE, LANG_GUARANI,
+       LANG_HAUSA, LANG_HAWAIIAN, LANG_IBIBIO, LANG_IGBO, LANG_INUKTITUT,
+       LANG_KANURI, LANG_LAO, LANG_LATIN, LANG_OROMO, LANG_PAPIAMENTU,
+       LANG_PASHTO, LANG_SINHALESE, LANG_SOMALI, LANG_TAGALOG, LANG_TAJIK,
+       LANG_TAMAZIGHT, LANG_TIBETAN, LANG_TIGRINYA, LANG_TURKMEN, LANG_YI,
+       LANG_YIDDISH, LANG_YORUBA): New macros.
+       (LANG_GAELIC, LANG_MALTESE, LANG_RHAETO_ROMANCE, LANG_SAAMI, LANG_SUTU,
+       LANG_TSONGA, LANG_TSWANA, LANG_VENDA, LANG_WELSH, LANG_XHOSA,
+       LANG_ZULU): New macros, consistent with those found in Wine.
+       (SUBLANG_BENGALI_INDIA, SUBLANG_BENGALI_BANGLADESH,
+       SUBLANG_ENGLISH_INDONESIA, SUBLANG_ENGLISH_HONGKONG,
+       SUBLANG_ENGLISH_INDIA, SUBLANG_ENGLISH_MALAYSIA,
+       SUBLANG_ENGLISH_SINGAPORE, SUBLANG_FRENCH_WESTINDIES,
+       SUBLANG_FRENCH_REUNION, SUBLANG_FRENCH_CONGO, SUBLANG_FRENCH_SENEGAL,
+       SUBLANG_FRENCH_CAMEROON, SUBLANG_FRENCH_COTEDIVOIRE,
+       SUBLANG_FRENCH_MALI, SUBLANG_FRENCH_MOROCCO, SUBLANG_FRENCH_HAITI,
+       SUBLANG_PUNJABI_INDIA, SUBLANG_PUNJABI_PAKISTAN,
+       SUBLANG_ROMANIAN_ROMANIA, SUBLANG_ROMANIAN_MOLDOVA,
+       SUBLANG_SINDHI_INDIA, SUBLANG_SINDHI_PAKISTAN,
+       SUBLANG_TAMAZIGHT_ARABIC, SUBLANG_TAMAZIGHT_LATIN,
+       SUBLANG_TIGRINYA_ETHIOPIA, SUBLANG_TIGRINYA_ERITREA): New macros.
+       (_nl_locale_name) [WIN32]: Use them. Improve handling of Bengali,
+       Serbian, English, French, Punjabi, Romanian, Sindhi, Tamazight,
+       Tigrinya.
+
+2003-12-02  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Treat the new country name CS like the old country
+       name YU.
+
+2003-11-30  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.13 released.
+
+2003-11-23  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * printf-parse.h: Don't include sys/types.h.
+       (ARG_NONE): New macro.
+       (char_directive): Change type of *arg_index fields to size_t.
+       * wprintf-parse.h: Don't include sys/types.h.
+       (ARG_NONE): New macro.
+       (wchar_t_directive): Change type of *arg_index fields to size_t.
+       * printf-parse.c: Don't include sys/types.h.
+       (SSIZE_MAX): Remove macro.
+       (PRINTF_PARSE): Change the type of the arg_index variables to size_t.
+       Remove unnecessary overflow check.
+       * vasnprintf.c (VASNPRINTF): Update for type change of *arg_index
+       fields.
+
+2003-11-17  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (alloca): Remove fallback definition.
+       (freea): Remove definition.
+       (VASNPRINTF): Use alloca only for small sizes, say <= 4000 bytes.
+       Reported by Paul Eggert.
+
+2003-11-16  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       Protect against address arithmetic overflow.
+       * printf-args.h: Include stddef.h.
+       (arguments): Change type of field 'count' to size_t.
+       * printf-args.c (printf_fetchargs): Use size_t instead of
+       'unsigned int' where appropriate.
+       * printf-parse.h: Include sys/types.h.
+       (char_directive): Change type of *arg_index fields to ssize_t.
+       (char_directives): Change type of fields 'count', max_*_length to
+       size_t.
+       * wprintf-parse.h: Include sys/types.h.
+       (wchar_t_directive): Change type of *arg_index fields to ssize_t.
+       (wchar_t_directives): Change type of fields 'count', max_*_length to
+       size_t.
+       * printf-parse.c: Include sys/types.h and xsize.h.
+       (SSIZE_MAX): Define fallback value.
+       (PRINTF_PARSE): Use size_t instead of 'unsigned int' and ssize_t
+       instead of 'int' where appropriate. Check a_allocated, d_allocated
+       against overflow. Reject %m$ argument numbers > SSIZE_MAX + 1.
+       * vasnprintf.c: Include xsize.h.
+       (VASNPRINTF): Use size_t instead of 'unsigned int' where appropriate.
+       Check alloca, malloc, realloc, ENSURE_ALLOCATION arguments against
+       overflow. Avoid wraparound when converting a width or precision from
+       decimal to binary.
+       * xsize.h: New file, from gnulib.
+       * Makefile.in (HEADERS): Add xsize.h.
+       (printf.$lo): Depend on it.
+
+2003-11-16  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h.in (_INTL_REDIRECT_ASM): Don't define on AIX with gcc 2.
+       Reported by Kouichi Hashikawa <z01a7ksy@cs.ecip.tohoku.ac.jp>.
+
+2003-10-19  Bruno Haible  <bruno@clisp.org>
+
+       * hash-string.h (hash_string): Zero-extend each char from the string;
+       the old code did a sign-extend on some platforms.
+
+2003-10-19  Jim Meyering  <jim@meyering.net>
+
+       * vasnprintf.c (VASNPRINTF): Work around losing snprintf on HPUX 10.20.
+
+2003-10-09  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c: Include xalloc.h instead of xmalloc.h.
+
+2003-10-07  Bruno Haible  <bruno@clisp.org>
+
+       Assume ANSI C.
+       * libgnuintl.h.in (PARAMS): Remove macro.
+       (gettext, dgettext, dcgettext, ngettext, dngettext, dcngettext,
+       textdomain, bindtextdomain, bind_textdomain_codeset, fprintf, vfprintf,
+       printf, vprintf, sprintf, vsprintf, snprintf, vsnprintf, asprintf,
+       vasprintf, fwprintf, vfwprintf, wprintf, vwprintf, swprintf, vswprintf,
+       libintl_set_relocation_prefix): Use ANSI C function declarations.
+       * gettextP.h (PARAMS): Remove macro.
+       (_nl_locale_name, _nl_find_domain, _nl_load_domain, _nl_unload_domain,
+       _nl_init_domain_conv, _nl_free_domain_conv, _nl_find_msg, __gettext,
+       __dgettext, __dcgettext, __ngettext, __dngettext, __dcngettext,
+       __dcigettext, __textdomain, __bindtextdomain,
+       __bind_textdomain_codeset, libintl_dcigettext): Use ANSI C function
+       declarations.
+       * hash-string.h (PARAMS): Remove macro.
+       (hash_string): Use ANSI C function declaration.
+       * loadinfo.h (PARAMS): Remove macro.
+       (_nl_normalize_codeset, _nl_make_l10nflist, _nl_expand_alias,
+       _nl_explode_name, _nl_find_language): Use ANSI C function declarations.
+       * plural-exp.h (PARAMS): Remove macro.
+       (FREE_EXPRESSION, PLURAL_PARSE, GERMANIC_PLURAL,
+       EXTRACT_PLURAL_EXPRESSION): Use ANSI C function declarations.
+       * bindtextdom.c (set_binding_values, BINDTEXTDOMAIN,
+       BIND_TEXTDOMAIN_CODESET): Use ANSI C function declarations.
+       * dcgettext.c (DCGETTEXT): Likewise.
+       * dcigettext.c (transcmp, DCIGETTEXT, _nl_log_untranslated,
+       _nl_find_msg, plural_lookup, category_to_name, guess_category_value,
+       stpcpy, mempcpy): Likewise.
+       * dcngettext.c (DCNGETTEXT): Likewise.
+       * dgettext.c (DGETTEXT): Likewise.
+       * dngettext.c (DNGETTEXT): Likewise.
+       * eval-plural.h (plural_eval): Likewise.
+       * explodename.c (_nl_find_language, _nl_explode_name): Likewise.
+       * finddomain.c (_nl_find_domain): Likewise.
+       * gettext.c (GETTEXT): Likewise.
+       * intl-compat.c (gettext, dgettext, dcgettext, ngettext, dngettext,
+       dcngettext, textdomain, bindtextdomain, bind_textdomain_codeset):
+       Likewise.
+       * l10nflist.c (argz_count__, argz_stringify__, argz_next__, pop,
+       _nl_make_l10nflist, _nl_normalize_codeset, stpcpy): Likewise.
+       * loadmsgcat.c (get_sysdep_segment_value, _nl_init_domain_conv,
+       locale_charset, _nl_free_domain_conv, _nl_load_domain,
+       _nl_unload_domain): Likewise.
+       * localealias.c (_nl_expand_alias, read_alias_file, alias_compare):
+       Likewise.
+       * localename.c (_nl_locale_name): Likewise.
+       * log.c (print_escaped, _nl_log_untranslated): Likewise.
+       * ngettext.c (NGETTEXT): Likewise.
+       * plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Likewise.
+       * plural.y (new_exp, new_exp_0, new_exp_1, new_exp_2, new_exp_3,
+       FREE_EXPRESSION, yylex, yyerror): Likewise.
+       * textdomain.c (TEXTDOMAIN): Likewise.
+
+2003-09-17  Bruno Haible  <bruno@clisp.org>
+
+       * printf.c: Test HAVE_FWPRINTF, not HAVE_WPRINTF. Needed for
+       portability to Cygwin.
+
+2003-09-04  Bruno Haible  <bruno@clisp.org>
+
+       * dgettext.c: Include <locale.h> after gettextP.h, not before. This
+       ensures that libintl_dcgettext is correctly declared on Solaris.
+       (Needed because Solaris <locale.h> includes libintl.h.)
+       * dngettext.c: Likewise, for the libintl_dcngettext declaration.
+
+2003-08-29  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c: Test HAVE_DECL__SNPRINTF instead of HAVE__SNPRINTF.
+       Test HAVE_DECL__SNWPRINTF instead of HAVE__SNWPRINTF.
+       * printf.c: Likewise.
+
+2003-08-27  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (install-exec): Fix the 2003-04-06 patch.
+
+2003-08-24  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (local_wcslen): Protect against multiple definition.
+       (USE_SNPRINTF): Define also if only _snprintf() is available.
+       (SNPRINTF): Possibly define as _snprintf or _snwprintf.
+       * printf.c (DLL_EXPORTED): New macro.
+       Mark all functions as DLL_EXPORTED.
+       (system_vsnprintf): New macro.
+       (libintl_vsnprintf): Use it.
+       (system_vswprintf): New macro.
+       (libintl_vswprintf): Use it.
+
+2003-08-24  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h.in: Use <stdarg.h> when compiling with MSVC, even though
+       it doesn't define __STDC__ by default.
+
+2003-08-24  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.h: Make this file includable in C++ mode: add extern "C".
+
+2003-08-23  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 6:0:4.
+
+2003-08-20  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset (linux-gnulibc1*): Change hr_HR, ro_RO to ISO-8859-2.
+       Reported by Alain Guibert <derogaton+bgli@oreka.com>.
+
+2003-08-14  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Add support for Linux libc5. Based on data from
+       Alain Guibert <derogaton+bgli@oreka.com>.
+
+2003-08-11  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (local_wcslen): New function, for Solaris 2.5.1.
+       (VASNPRINTF): Use it instead of wcslen.
+
+2003-08-01  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c (find_shared_library_fullname): Disable the code on
+       Linux/libc5. Reported by Alain Guibert <derogaton+bgli@oreka.com>.
+
+2003-06-27  Bruno Haible  <bruno@clisp.org>
+
+       Avoid use of *_unlocked functions on Solaris 2.5.1.
+       * localcharset.c: Test HAVE_DECL_GETC_UNLOCKED, not HAVE_GETC_UNLOCKED.
+       * localealias.c: Test HAVE_DECL_*_UNLOCKED, not HAVE_*_UNLOCKED.
+       Reported by Eric Botcazou <ebotcazou@libertysurf.fr>.
+
+2003-06-22  Bruno Haible  <bruno@clisp.org>
+
+       Portability to mingw32.
+       * relocatable.c [WIN32]: Include <windows.h>.
+       Reported by Jeff Bonggren <jbon@cfl.rr.com>.
+
+2003-06-22  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c (compute_curr_prefix): Comment out this function in
+       the case when it is not used.
+       Reported by Pavel Roskin <proski@gnu.org>.
+
+2003-06-22  Bruno Haible  <bruno@clisp.org>
+
+       * gettextP.h: Undefine _INTL_REDIRECT_INLINE, _INTL_REDIRECT_MACROS,
+       possibly defined in config.h, before setting _INTL_REDIRECT_MACROS.
+       Reported by Pavel Roskin <proski@gnu.org>.
+
+2003-06-19  Bruno Haible  <bruno@clisp.org>
+
+       * printf-args.h: New file, from ../libasprintf.
+       * printf-args.c: New file, from ../libasprintf.
+       * printf-parse.h: New file, from ../libasprintf.
+       * printf-parse.c: New file, from ../libasprintf.
+       * vasnprintf.h: New file, from ../libasprintf.
+       * vasnprintf.c: New file, from ../libasprintf.
+       * wprintf-parse.h: New file.
+       * vasnwprintf.h: New file.
+       * printf.c: New file.
+       * libgnuintl.h.in (fprintf, vfprintf, printf, vprintf, sprintf,
+       vsprintf, snprintf, vsnprintf, asprintf, vasprintf, fwprintf,
+       vfwprintf, wprintf, vwprintf, swprintf, vswprintf): New fallback
+       macros.
+       * Makefile.in (HEADERS): Add printf-args.h, printf-args.c,
+       printf-parse.h, wprintf-parse.h, printf-parse.c, vasnprintf.h,
+       vasnwprintf.h, vasnprintf.c.
+       (SOURCES): Add printf.c.
+       (OBJECTS): Add printf.$lo.
+       (DISTFILES.gettext): Add libgnuintl.h_vms, libgnuintl.h.msvc-static.
+       (printf.lo): New rule.
+       (libgnuintl.h): Also perform some AC_SUBST substitutions.
+       (printf.$lo): New dependencies.
+       * Makefile.msvc (OBJECTS): Add printf.obj.
+       (libgnuintl.h): Use libgnuintl.h.msvc-static.
+       (printf.obj): New rule.
+       * Makefile.vms (libgnuintl.h): Use libgnuintl.h_vms.
+
+2003-06-12  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h (_INTL_REDIRECT_ASM): Don't define when using Mingw.
+       Reported by Tor Lillqvist <tml@iki.fi>.
+
+2003-06-08  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (getcwd) [VMS]: Pass 3 arguments.
+       Reported by Jouk Jansen <joukj@hrem.stm.tudelft.nl>.
+
+2003-05-22  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.12.1 released.
+
+2003-05-20  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (VPATH): Add back this variable, needed outside gettext
+       when $builddir != $srcdir.
+       Reported by Pavel Roskin <proski@gnu.org>.
+
+2003-05-18  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.msvc (DEBUGFLAGS): New variable.
+       (intl.lib): Use it.
+
+2003-05-17  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.12 released.
+
+2003-05-12  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.msvc (PICFLAGS, CFLAGS): Move BUILDING_* macros from
+       CFLAGS to PICFLAGS.
+       Reported by Perry Rapp.
+
+2003-05-07  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.vms (install): Fix mistake.
+
+2003-05-03  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LIBS): New variable.
+       (libintl.la, libgnuintl.la): Use it.
+       Reported by Andreas Buening <andreas.buening@nexgo.de>.
+
+2003-04-12  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.vms: New variables ABIFLAGS, DEFS. Avoid rules with no
+       lines. Update library creation rule. Don't use the force target.
+       Correct wildcard syntax.
+       Suggested by Jouk Jansen <joukj@hrem.stm.tudelft.nl>.
+
+2003-04-12  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (get_charset_aliases): Add special case for VMS.
+
+2003-04-06  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (install-exec): Remove the installed libintl.la if it
+       has hardwired pathnames in dependency_libs and the installed package
+       shall be relocatable.
+
+2003-04-05  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c: Rely on DEPENDS_ON_LIBCHARSET, DEPENDS_ON_LIBICONV,
+       DEPENDS_ON_LIBINTL, not on NO_LIBRARIES.
+       * Makefile.in (DEFS): Define DEPENDS_ON_LIBICONV, for relocatable.c.
+       * Makefile.msvc (CFLAGS): Also define DEPENDS_ON_LIBICONV.
+
+2003-04-05  Bruno Haible  <bruno@clisp.org>
+
+       * relocatable.c (_GNU_SOURCE): Define, to ensure getline() gets
+       declared by <stdio.h>.
+
+2003-04-04  Bruno Haible  <bruno@clisp.org>
+
+       * gettextP.h [!_LIBC]: Remove declarations of exported libintl_*
+       functions; include libgnuintl.h instead.
+       * intl-compat.c: Remove include of libgnuintl.h.
+       (DLL_EXPORTED): New macro.
+       (gettext, dgettext, dcgettext, ngettext, dngettext, dcngettext,
+       textdomain, bindtextdomain, bind_textdomain_codeset): Use it.
+
+2003-04-04  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h.in (libintl_set_relocation_prefix): Convert extern
+       declaration to K&R syntax.
+
+2003-03-30  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.vms: New file.
+       * Makefile.in (DISTFILES.gettext): Add Makefile.vms.
+
+2003-03-30  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (INCLUDES): Mention the current directory first.
+
+2003-03-17  Bruno Haible  <bruno@clisp.org>
+
+       Native Woe32/MSVC support.
+       * libgnuintl.h.in: Renamed from libgnuintl.h.
+       * Makefile.msvc: New file.
+       * README.woe32: New file.
+       * Makefile.in (HEADERS): Remove libgnuintl.h, add libgnuintl.h.in.
+       (DISTFILES.gettext): Add libgnuintl.h.msvc-shared, README.woe32,
+       Makefile.msvc.
+       (DISTFILES.obsolete): Add libgnuintl.h.
+       (libgnuintl.h): New rule.
+       (libintl.h, $(OBJECTS)): Expect libgnuintl.h in builddir, not in
+       srcdir.
+       (mostlyclean): Also remove libgnuintl.h.
+       * dcigettext.c (alloca): Add support for MSVC.
+       * loadmsgcat.c (alloca): Likewise.
+       * localealias.c (alloca): Likewise.
+       * relocatable.h (RELOCATABLE_DLL_EXPORTED): New macro.
+
+       * Makefile.in (loadmsgcat.$lo): Depend on hash-string.h.
+
+2003-02-28  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (localcharset.$lo): Depend on localcharset.h.
+
+2003-02-28  Bruno Haible  <bruno@clisp.org>
+
+       Support for relocatable installation.
+       * relocatable.h: New file.
+       * relocatable.c: New file.
+       * libgnuintl.h (libintl_set_relocation_prefix): New declaration.
+       * localealias.c: Include relocatable.h.
+       (read_alias_file): Relocate LOCALE_ALIAS_PATH element.
+       * localcharset.c: Include relocatable.h.
+       (get_charset_aliases): Relocate LIBDIR value.
+       * Makefile.in (DEFS): Define also ENABLE_RELOCATABLE, IN_LIBRARY,
+       INSTALLDIR, NO_XMALLOC, set_relocation_prefix, relocate.
+       (HEADERS): Add relocatable.h.
+       (SOURCES): Add relocatable.c.
+       (OBJECTS): Add relocatable.$lo.
+       (relocatable.$lo): New rule.
+
+2003-02-28  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (mkinstalldirs): Simplify. Prepending "$(top_builddir)/"
+       in the case of a relative $srcdir is now handled in gettext.m4.
+
+2003-02-28  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.h: Change copyright to LGPL. Enclose declaration in
+       extern "C", for C++ compilers.
+       * localcharset.c: Drop C linkage declaration.
+
+2003-02-18  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 5:0:3.
+
+2003-01-29  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Add an alias for CP1251 on Solaris.
+       Reported by Hidetoshi Tajima <hidetoshi.tajima@sun.com>.
+
+2003-02-16  Bruno Haible  <bruno@clisp.org>
+
+       * log.c: New file.
+       * dcigettext.c (DCIGETTEXT) [!_LIBC]: Before returning the
+       untranslated string, call _nl_log_untranslated.
+       * intl-compat.c: Comments.
+       * Makefile.in (SOURCES): Add log.c.
+       (OBJECTS): Add intl-compat.$lo unconditionally. Add log.$lo.
+       (log.lo): New rule.
+       (install-exec): Stop using @INTLOBJS@. Install preloadable_libintl.so.
+       (installdirs, uninstall): Update accordingly.
+
+2003-02-16  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (.sin.sed): Remove rule.
+       (ref-add.sed, ref-del.sed): New rules.
+
+2003-02-12  Bruno Haible  <bruno@clisp.org>
+
+       Big restructuring.
+       * Makefile.in: Make usable with $srcdir != $builddir even when not
+       using GNU make.
+       (VPATH): Remove variable.
+       (.c.lo): Remove rule. Use a separate rule for every object file.
+       (libintl.h, charset.alias, $(OBJECTS)): Refer to $srcdir where
+       appropriate.
+       (INCLUDES): Simplify.
+       (install-exec): Special case packages 'gettext-runtime' and
+       'gettext-tools'.
+       (install-data): Special case package 'gettext-tools'.
+       (installdirs, uninstall): Special case packages 'gettext-runtime' and
+       'gettext-tools'.
+       (distclean, dist): Likewise.
+       (Makefile): Work around autoconf error message.
+
+2003-01-12  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.h: New file.
+       * localcharset.c: Include it.
+       * Makefile.in (HEADERS): Add localcharset.h.
+       (COMHDRS): Remove variable, fold into HEADERS.
+       (COMSRCS): Remove variable, fold into SOURCES.
+
+2002-12-12  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (INTVARDEF): Correct fallback definition.
+
+2002-11-19  Ulrich Drepper  <drepper@redhat.com>
+
+       * localealias.c (read_alias_file): Use only about 400 bytes of stack
+       space instead of 16k.
+
+2002-10-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * finddomain.c (free_mem): Use libc_freeres_fn macro, remove
+       text_set_element.
+       * dcigettext.c (free_mem): Likewise.
+
+2002-10-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * localealias.c (libc_freeres_ptr): Define if !_LIBC.
+       (string_space, map): Add libc_freeres_ptr.
+       (free_mem): Remove.
+
+2002-09-19  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (DCIGETTEXT): Restore errno only right before
+       returning.
+
+2002-09-01  Roland McGrath  <roland@redhat.com>
+
+       * localealias.c [__GNUC__]: #undef alloca before #define.
+
+2002-08-30  Roland McGrath  <roland@redhat.com>
+
+       * dcigettext.c (DCIGETTEXT) [_LIBC]: Check for bogus CATEGORY.
+       [_LIBC] (category_to_name): Don't define the function.  Instead define
+       a macro using _nl_category_names.
+
+2002-08-04  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c: Define _nl_default_dirname_internal as hidden alias
+       and use it.
+       * bindtextdom.c: Use _nl_default_dirname_internal.
+
+2002-08-03  Roland McGrath  <roland@redhat.com>
+
+       * dcigettext.c (guess_category_value): Use __current_locale_name
+       instead of calling setlocale.
+
+2002-08-02  Roland McGrath  <roland@redhat.com>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Use _NL_CURRENT.
+
+2002-07-30  Roland McGrath  <roland@redhat.com>
+
+       * loadmsgcat.c [__GNUC__]: #undef alloca before defining it.
+
+2002-05-01  Ulrich Drepper  <drepper@redhat.com>
+
+       Revert 2002-04-09 change.
+       * dcngettext.c (__dcngettext_internal): Remove alias.
+       * dngettext.c: Use __dcngettext instead of __dcngettext_internal.
+       * ngettext.c: Likewise.
+
+2002-11-07  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (mostlyclean): Remove object files on OS/2 as well.
+       Reported by Andreas Buening <andreas.buening@nexgo.de>.
+
+2002-10-16  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (ps, pdf, html, ctags): New targets, for automake-1.7
+       compatibility.
+       (CTAGS): New rule.
+
+2002-09-18  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h (_INTL_REDIRECT_ASM): Don't define when using Apple cc.
+       Reported by Julien Chiron <julien.chiron@univ.u-3mrs.fr>.
+
+2002-08-06  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11.5 released.
+
+2002-07-25  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11.4 released.
+
+2002-07-25  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 4:0:2.
+
+2002-07-23  Bruno Haible  <bruno@clisp.org>
+
+       * loadmsgcat.c (PRI*): Redefine the macros if PRI_MACROS_BROKEN is set.
+
+2002-07-21  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h (__GNU_GETTEXT_SUPPORTED_REVISION): New macro.
+       * gmo.h (struct mo_file_header): New fields n_sysdep_segments,
+       sysdep_segments_offset, n_sysdep_strings, orig_sysdep_tab_offset,
+       trans_sysdep_tab_offset.
+       (struct sysdep_segment): New type.
+       (struct sysdep_string): New type.
+       (SEGMENTS_END): New macro.
+       * gettextP.h (struct sysdep_string_desc): New type.
+       (struct loaded_domain): New fields malloced, n_sysdep_strings,
+       orig_sysdep_tab, trans_sysdep_tab, must_swap_hash_tab. Make fields
+       orig_tab, trans_tab, hash_tab to const pointers because they point
+       into read-only memory.
+       * loadmsgcat.c: Include stdint.h, inttypes.h, hash-string.h.
+       (PRI*): Define fallback values.
+       (get_sysdep_segment_value): New function.
+       (_nl_load_domain): Distinguish major and minor revision parts. Add
+       support for minor revision 1 with system dependent strings.
+       (_nl_unload_domain): Also free the 'malloced' field.
+       * dcigettext.c (_nl_find_msg): Remove test for domain->hash_size, now
+       done in loadmsgcat.c. Add support for system dependent strings.
+
+2002-07-17  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11.3 released.
+
+2002-07-16  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 3:0:1.
+
+2002-07-13  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (freea): New macro.
+       (FREE_BLOCKS): Free also the registered blocks.
+       (DCIGETTEXT): Free the 'search' variable.
+       Reported by Andreas Fischer <a.fischer@asentics.de>.
+
+2002-06-13  Bruno Haible  <bruno@clisp.org>
+
+       Make absolute pathnames inside $LANGUAGE work.
+       * l10nflist.c (_nl_make_l10nflist): Ignore dirlist if language is an
+       absolute path. Fix sizes passed to malloc. Simplify linked list
+       handling.
+
+2002-06-13  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c [WIN32] (LANG_DIVEHI, LANG_GALICIAN, LANG_KYRGYZ,
+       LANG_MONGOLIAN, LANG_SYRIAC): Provide fallback definitions.
+       (_nl_locale_name): Add Amharic, Burmese, Cambodian, Cherokee, Divehi,
+       Edo, Frisian, Fulfulde, Gaelic, Guarani, Hausa, Hawaiian, Ibibio,
+       Igbo, Inuktitut, Kanuri, Kyrgyz, Lao, Latin, Maltese, Mongolian,
+       Oromo, Papiamentu, Pashto, Rhaeto-Romance, Sami, Sinhalese, Somali,
+       Syriac, Tagalog, Tajik, Tomazight, Tibetan, Tigrinya, Tsonga, Turkmen,
+       Venda, Welsh, Xhosa, Yi, Yiddish, Yoruba, Zulu. Fix Swahili, Tatar.
+
+2002-06-07  Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (INTDIV0_RAISES_SIGFPE): Define a fallback.
+       Include <signal.h>.
+       * eval-plural.h (plural_eval): Let division by zero cause SIGFPE on
+       all platforms.
+
+2002-05-30  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h (_INTL_REDIRECT_ASM, _INTL_REDIRECT_INLINE,
+       _INTL_REDIRECT_MACROS, _INTL_ASM, _INTL_ASMNAME, _INTL_STRINGIFY):
+       New macros. Use them instead of plain preprocessor level indirection
+       when appropriate.
+       * intl-compat.c: Define _INTL_REDIRECT_MACROS.
+
+2002-05-28  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c (LANG_SORBIAN): Provide a default value, for mingw32.
+       Reported by Michael Opdenacker <m-opdenacker@ti.com>
+       and Rob Leslie <rob@mars.org>.
+
+2002-05-09  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Update for newest glibc. Add canonical names
+       ISO-8859-14, KOI8-T, TCVN5712-1, GEORGIAN-PS.
+
+2002-05-09  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (get_charset_aliases): Add more Windows specific
+       aliases.
+
+2002-05-08  Owen Taylor  <otaylor@redhat.com>
+
+       * config.charset: A few additions for Solaris.
+
+2001-12-05  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (locale_charset): Don't return an empty string.
+
+2001-10-23  Bruno Haible  <haible@clisp.cons.org>
+
+       * config.charset: msdos in uk_UA uses CP1125.
+
+2001-08-05  Bruno Haible  <haible@clisp.cons.org>
+
+       Make it possible to build libcharset with CC=gcc CFLAGS="-x c++".
+       * localcharset.c (locale_charset): Declare as extern "C".
+       (get_charset_aliases): Cast malloc and realloc results to 'char *'.
+
+2002-04-30  Bruno Haible  <bruno@clisp.org>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Don't append //TRANSLIT to
+       the encoding if it already has slashes.
+       Reported by Perry Rapp <prapp@erols.com>.
+
+2002-04-27  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h: Redirect every function to the one prefixed with
+       "libintl_". Remove __OPTIMIZED variants.
+       * gettextP.h: Use prefix "libintl_" instead of suffix "__".
+       * dcigettext.c: Likewise.
+       * dcgettext.c: Likewise.
+       * dgettext.c: Likewise.
+       * gettext.c: Likewise.
+       * dcngettext.c: Likewise.
+       * dngettext.c: Likewise.
+       * ngettext.c: Likewise.
+       * textdomain.c: Likewise.
+       * bindtextdom.c: Likewise.
+       * plural-exp.h: Likewise.
+       * os2compat.c: Likewise.
+       * intl-compat.c: Likewise.
+
+2002-04-24  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11.2 released.
+
+2002-04-24  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 2:1:0.
+
+2002-04-19  Bruno Haible  <bruno@clisp.org>
+
+       * gettextP.h (attribute_hidden): Define as empty macro if not
+       already defined.
+
+2002-04-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcngettext.c [_LIBC]: Use INTUSE for __dcngettext.
+       * dngettext.c [_LIBC] (DCNGETTEXT): Use INTUSE.
+       * ngettext.c: Likewise.
+       * l10nflist.c [_LIBC]: Use INTUSE for __argz_count and
+       __argz_stringify.
+
+2002-04-08  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcgettext.c (__dcgettext): Use INTDEF to define alias.
+       * dgettext.c: Call __dcgettext_internal instead of __dcgettext.
+       * gettext.c: Likewise.
+
+2002-03-12  Ulrich Drepper  <drepper@redhat.com>
+
+       * plural-exp.h (attribute_hidden): Define as empty macro if not
+       already defined.
+       (GERMANIC_PLURAL): Declare as hidden.
+       * dcigettext.c (_nl_default_default_domain): Define as hidden.
+       (_nl_current_default_domain): Likewise
+       (_nl_state_lock): Likewise.
+       * textdomain.c (_nl_default_default_domain): Declare as hidden.
+       (_nl_current_default_domain): Likewise
+       (_nl_state_lock): Likewise.
+       * bindtextdom.c (_nl_state_lock): Likewise.
+
+2002-03-15  Andrew Zabolotny  <zap@cobra.ru>
+
+       * os2compat.h: Use prefix _nlos2 instead of _os2, to avoid any
+       possible name clashes.
+       * os2compat.c: Likewise.
+
+2002-03-15  Bruno Haible  <bruno@clisp.org>
+
+       * libgnuintl.h (LC_MESSAGES): Don't define on Solaris 2.5, to avoid
+       a warning.
+       Reported by Stephen Gildea <gildea@stop.mail-abuse.org>.
+
+2002-03-12  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11.1 released.
+
+2002-02-15  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset [msdosdjgpp]: For Russian, use CP866.
+
+2002-02-14  Andrew Zabolotny  <zap@cobra.ru>
+
+       * os2compat.c (_nl_default_dirname__): Renamed from
+       _nl_default_dirname.
+
+2002-02-10  Bruno Haible  <bruno@clisp.org>
+
+       * localename.c: Change copyright notice from GPL to LGPL.
+       * eval-plural.h: Likewise.
+
+2002-02-11  Bruno Haible  <bruno@clisp.org>
+
+       * config.charset: Add support for NetBSD.
+
+2002-01-31  Bruno Haible  <bruno@clisp.org>
+
+       * gettext-0.11 released.
+
+2002-01-31  Bruno Haible  <bruno@clisp.org>
+
+       * eval-plural.h: Renamed from plural-eval.c.
+       * dcigettext.c: Include eval-plural.h instead of plural-eval.c.
+       * Makefile.in (COMHDRS): Remove plural-eval.c, add eval-plural.h.
+       (DISTFILES.obsolete): Add plural-eval.c.
+
+2002-01-24  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (libintl.la): Use @LTLIBICONV@ instead of @LIBICONV@.
+
+2002-01-10  Andrew Zabolotny  <zap@cobra.ru>
+           Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (_nl_default_dirname): On OS/2, declare, not define.
+       * localcharset.c: Rework OS/2 support.
+       * config.charset: Add OS/2 support.
+       * os2compat.c: Renamed from os2.c.
+       (_nl_default_dirname): Define here.
+       * os2compat.h: Moved here from ../os2/.
+       * osdep.c: Update.
+       * Makefile.in (COMHDRS): Add os2compat.h.
+       (COMSRCS): Add os2compat.c, remove os2.c.
+
+2002-01-05  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (libintl.la): Add -lc. Needed on AIX.
+
+2002-01-02  Bruno Haible  <bruno@clisp.org>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Convert extern declaration to
+       K&R syntax.
+
+2002-01-02  Bruno Haible  <bruno@clisp.org>
+
+       * plural.y: Fix %expect count.
+
+2001-12-23  Bruno Haible  <bruno@clisp.org>
+
+       * os2.c (os2_initialize): Use LOCALEDIR_MAX macro.
+
+2001-12-21  Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c (ISSLASH): Provide definition for DOS-like systems.
+
+2001-12-21  Bruno Haible  <bruno@clisp.org>
+
+       * libgettext.h: Moved to ../lib/gettext.h.
+       * Makefile.in (HEADERS): Remove libgettext.h.
+       (DISTFILES.obsolete): Add libgettext.h.
+
+2001-12-21  Bruno Haible  <bruno@clisp.org>
+
+       * gmo.h: Renamed from gettext.h.
+       * gettext.h: Remove file.
+       * gettextP.h: Update accordingly.
+       * loadmsgcat.c: Likewise.
+       * Makefile.in (COMHDRS): Add gmo.h, remove gettext.h.
+       (DISTFILES.obsolete): Add gettext.h.
+       Update dependencies.
+
+2001-12-18  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 2:0:0.
+       Used to force an soname of at least libintl.so.2 on Solaris, which
+       already has a different libintl.so.1 in /usr/lib.
+
+2001-12-15  Andrew Zabolotny  <zap@cobra.ru>
+           Bruno Haible  <bruno@clisp.org>
+
+       * osdep.c: New file.
+       * os2.c: New file.
+       * dcigettext.c (DCIGETTEXT): Add backward compatibility support for
+       OS/2.
+       * localcharset.c: Add OS/2 support.
+       * localealias.c (_nl_expand_alias): Initialize locale_alias_path once,
+       but not statically.
+       * Makefile.in (COMSRCS): Add osdep.c, os2.c.
+       (OBJECTS): Add osdep.$lo.
+
+2001-12-12  Bruno Haible  <bruno@clisp.org>
+
+       * libgettext.h [!ENABLE_NLS]: Cast all function results to
+       'const char *'.
+       Reported by Alexandre Duret-Lutz <duret_g@lrde.epita.fr>.
+
+2001-12-03  Bruno Haible  <bruno@clisp.org>
+
+       * Makefile.in (install-exec): Don't create an empty libdir.
+       (installdirs): Update accordingly.
+
+2001-11-30  Bruno Haible  <bruno@clisp.org>
+
+       * plural-exp.h (plural_eval): Add back declaration.
+       * Makefile.in (OBJECTS): Remove plural-eval.$lo.
+       (COMSRCS): Remove plural-eval.c.
+       (COMHDRS): Add plural-eval.c.
+       (plural-eval.$lo): Remove dependency.
+       (dcigettext.$lo): Depend on plural-eval.c.
+
+2001-11-29  Bruno Haible  <bruno@clisp.org>
+
+       * gettextP.h (_nl_locale_name): Don't declare inside glibc.
+       * localename.c (_nl_locale_name): Remove _LIBC conditional.
+
+2001-11-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (guess_category_value): Inside glibc, use setlocale
+       directly, not _nl_locale_name.
+
+2001-11-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Modify #if expression.
+
+2001-11-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * plural-eval.c (plural_eval): Rename back from PLURAL_EVAL.
+       * plural-exp.h (PLURAL_EVAL): Remove declaration.
+       * dcigettext.c Include plural-eval.c.
+       (plural_lookup): Call plural_eval instead of PLURAL_EVAL.
+
+2001-11-22  Bruno Haible  <bruno@clisp.org>
+
+       * plural-exp.h (GERMANIC_PLURAL): New declaration.
+       * plural-exp.c (GERMANIC_PLURAL): Renamed from germanic_plural.
+       * loadmsgcat.c (_nl_unload_domain): Update.
+
+2001-07-17  Ulrich Drepper  <drepper@redhat.com>
+
+       * localealias.c (read_alias_file): Disable implicit locking
+       for the stream.  Use _unlocked functions for glibc.
+
+2001-11-11  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (dist): Avoid using hard links, because the automake-1.5
+       generated toplevel 'distdir' target chmods all the distributed files.
+
+2001-11-10  Bruno Haible  <haible@clisp.cons.org>
+
+       * libgnuintl.h (_INTL_PARAMS): Renamed from PARAMS, to avoid polluting
+       the user's namespace.
+       Also test for __GNUC__, __SUNPRO_C and __PROTOTYPES because on
+       64-bit Solaris, we need prototypes although __STDC__ is often defined
+       to 0. __GNUC__ covers GCC, __SUNPRO_C covers Sun cc, regardless of
+       compilation flags. __PROTOTYPES covers other compilers when compiling
+       programs using autoconf's AC_C_PROTOTYPES.
+       * gettextP.h (PARAMS): Also test for __SUNPRO_C, because 64-bit Solaris
+       cc needs prototypes although it defines __STDC__ to 0 by default.
+       Also test for __cplusplus and __PROTOTYPES, just for consistency with
+       libgnuintl.h.
+       * hash-string.h (PARAMS): Likewise.
+       * loadinfo.h (PARAMS): Likewise.
+       * plural-exp.h (PARAMS): Likewise.
+
+2001-10-31  Bruno Haible  <haible@clisp.cons.org>
+
+       * plural.y: Include <stddef.h>, needed for NULL with SunOS 4 cc.
+
+2001-10-31  Bruno Haible  <haible@clisp.cons.org>
+
+       * COPYING.LIB-2.0: Renamed from COPYING.LIB-2.
+       * Makefile.in (DISTFILES.gettext, install-data, uninstall): Update.
+       (DISTFILES.obsolete): Add COPYING.LIB-2.
+
+2001-10-09  Bruno Haible  <haible@clisp.cons.org>
+
+       * localcharset.c (getc): Define as getc_unlocked if available.
+
+2001-09-27  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (install-strip, installdirs): New rules.
+
+2001-09-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * localename.c: New file, integrating a function from
+       Tor Lillqvist <tml@iki.fi>.
+       * gettextP.h: New declaration.
+       * dcigettext.c (guess_category_value): Call _nl_locale_name.
+       * Makefile.in (COMSRCS): Add localename.c.
+       (OBJECTS): Add localename.$lo.
+
+2001-09-22  Bruno Haible  <haible@clisp.cons.org>
+
+       * plural-eval.c: New file, extracted from dcigettext.c.
+       * plural-exp.h (PLURAL_EVAL): New declaration.
+       * dcigettext.c (plural_eval): Remove function, moved to plural-eval.c.
+       (plural_lookup): Call PLURAL_EVAL instead of plural_eval.
+       * Makefile.in (COMSRCS): Add plural-eval.c.
+       (OBJECTS): Add plural-eval.$lo.
+
+2001-09-22  Bruno Haible  <haible@clisp.cons.org>
+
+       * plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Reject numbers that don't
+       start with a digit; nplurals must be positive.
+
+2001-10-20  Bruno Haible  <haible@clisp.cons.org>
+
+       Assume strchr() exists. (Without it, explodename.c wouldn't link
+       anyway.)
+       * dcigettext.c (strchr): Remove fallback definition; it conflicts with
+       the variable 'index' in plural_lookup.
+       * l10nflist.c (strchr): Likewise.
+       * localealias.c (strchr): Likewise.
+
+2001-09-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Also enable transliteration
+       when building on a glibc system but outside glibc.
+
+2001-09-02  Bruno Haible  <haible@clisp.cons.org>
+
+       * plural-exp.h: New file, extracted from gettextP.h.
+       * plural-exp.c: New file, extracted from loadmsgcat.c.
+       * gettextP.h (struct expression, struct parse_args,
+       __gettext_free_exp, __gettextparse): Move to plural-exp.h.
+       * loadmsgcat.c: Include plural-exp.h.
+       (PLURAL_PARSE): Move macro to plural-exp.h.
+       (plvar, plone, germanic_plural, INIT_GERMANIC_PLURAL): Move to
+       plural-exp.c.
+       (_nl_load_domain): Move plural handling code to plural-exp.c. Call
+       EXTRACT_PLURAL_EXPRESSION.
+       * dcigettext.c: Include plural-exp.h.
+       * plural.y: Include plural-exp.h, not gettextP.h.
+       (FREE_EXPRESSION): Move macro to plural-exp.h.
+       * Makefile.in (DEFS): Define IN_LIBINTL.
+       (COMHDRS): Add plural-exp.h.
+       (COMSRCS): Add plural-exp.c.
+       (OBJECTS): Add plural-exp.$lo.
+       Update dependencies.
+
+2001-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       * l10nflist.c (_nl_normalize_codeset): Cast isalnum, isalpha, isdigit,
+       tolower argument to 'unsigned char'.
+       * loadmsgcat.c (_nl_load_domain): Cast isspace argument to
+       'unsigned char'.
+       * localealias.c (read_alias_file): Cast isspace argument to
+       'unsigned char'.
+
+2001-07-23  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext.h: Assume <limits.h> exists.
+
+2001-09-13  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext-0.10.40 released.
+
+2001-07-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale.alias: Use he language code for hebrew, not iw.
+
+2001-09-13  Bruno Haible  <haible@clisp.cons.org>
+
+       * *.h, *.c, *.y, Makefile.in: Change copyright notice from GPL to LGPL.
+       This is a reaction to a blackmail from the GNOME project which
+       threatened to distribute an LGPLed clone of libintl.
+       * COPYING.LIB-2, COPYING.LIB-2.1: New files.
+       * Makefile.in (DISTFILES.gettext): Add them.
+       (install-data): Install them.
+       (uninstall): Uninstall them.
+
+2001-07-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext-0.10.39 released.
+
+2001-06-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * config.charset: Change canonical name of BIG5HKSCS to BIG5-HKSCS.
+       Change canonical name of SJIS to SHIFT_JIS.
+
+2001-06-12  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (DCIGETTEXT): Release the lock before returning.
+
+2001-04-30  Bruno Haible  <haible@clisp.cons.org>
+
+       Silence "gcc -Wall -Wwrite-strings" warnings.
+       * localcharset.c (charset_aliases): Change type to 'const char *'.
+       (get_charset_aliases): Change type of 'cp' to 'const char *'.
+
+2001-05-23  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext-0.10.38 released.
+
+2001-05-22  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (install-data): Install plural.c as well.
+       (uninstall): Uninstall plural.c as well.
+
+2001-05-18  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (dist): Don't assume $(srcdir) = ".". Distribute
+       file in either current directory or $(srcdir), whichever exists.
+
+2001-05-11  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (install-exec): Don't install charset.alias on glibc 2.1
+       systems.
+
+2001-04-30  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (getuid, getgid, geteuid, getegid): Provide default
+       definitions. Needed for mingw32.
+
+2001-04-19  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext-0.10.37 released.
+
+2001-04-19  Bruno Haible <haible@clisp.cons.org>
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 1:1:0.
+
+2001-04-19  Bruno Haible <haible@clisp.cons.org>
+
+       * loadmsgcat.c (_nl_init_domain_conv): Don't append //TRANSLIT when
+       the libiconv version is smaller than 1.5.
+
+2001-04-09  Bruno Haible <haible@clisp.cons.org>
+
+       * loadmsgcat.c: Don't use GNU C extensions if __APPLE_CC__ is defined.
+       Apple's MacOS X compiler has not all the features that the regular
+       GCC with the same version number has.
+
+2001-04-07  Bruno Haible <haible@clisp.cons.org>
+
+       * gettextP.h (struct loaded_domain): Add codeset_cntr field.
+       (struct binding): Add codeset_cntr field.
+       (_nl_load_domain): Add domainbinding argument.
+       (_nl_init_domain_conv, _nl_free_domain_conv): New declarations.
+       (_nl_find_msg): New declaration, moved here from loadinfo.h.
+       * loadinfo.h (struct loaded_l10nfile): Remove domainbinding field.
+       (_nl_make_l10nflist): Remove domainbinding argument.
+       (_nl_find_msg): Move declaration to gettextP.h.
+       * bindtextdom.c (set_binding_values): Initialize ->codeset_cntr to 0.
+       Increment it when ->codeset is changed.
+       * dcigettext.c (DCIGETTEXT): Pass binding to _nl_find_msg.
+       (_nl_find_msg): Add domainbinding argument. Reinitialize the converter
+       if domainbinding->codeset_cntr has been incremented.
+       * finddomain.c (_nl_find_domain): Don't pass domainbinding to
+       _nl_make_l10nflist(). Pass it to _nl_load_domain() instead.
+       * l10nflist.c (_nl_make_l10nflist): Remove domainbinding argument.
+       * loadmsgcat.c (_nl_init_domain_conv): New function, extracted from
+       _nl_load_domain. Append //TRANSLIT also when using libiconv.
+       (_nl_free_domain_conv): New function, extracted from _nl_unload_domain.
+       (_nl_load_domain): Add domainbinding argument. Call
+       _nl_init_domain_conv.
+       (_nl_unload_domain): Call _nl_free_domain_conv.
+
+2001-04-09  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (HAVE_LOCALE_NULL): Don't define if __GNU_LIBRARY__ < 2
+       (Linux libc5).
+
+2001-04-04  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (HAVE_LOCALE_NULL): Define also if __GNU_LIBRARY__.
+
+2001-04-04  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (libdir, includedir, datadir): Use the autoconf
+       determined value, in order to respect the configure arguments.
+       (gettextsrcdir): Use $(datadir), not @datadir@.
+
+2001-03-29  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettext-0.10.36 released.
+
+2001-03-25  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (install-data): Set execution bits on installed
+       config.charset.
+
+2001-03-23  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (YACC): Use @INTLBISON@ instead of bison.
+
+2001-03-21  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (_nl_state_lock): Mark as #ifdef _LIBC. AIX 3 xlc
+       chokes on empty macro arguments.
+       * plural.y: Add #pragma for alloca on AIX 3.
+
+2001-03-20  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (DISTFILES.generated): New variable.
+       (DISTFILES.gettext): Remove plural.c.
+       (dist): Use DISTFILES.generated.
+       (YACC): Use "bison -y" instead of @YACC@.
+       Needed for "make dist" to work in normal packages.
+
+2001-03-20  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (dist): Don't depend on $(DISTFILES). Instead, generate
+       the files to be distributed through a recursive 'make' call.
+
+2001-03-17  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettextP.h (struct expression): Add operators lnot, less_than,
+       greater_than, less_or_equal, greater_or_equal. Replace args2/args3
+       union by a 'nargs' counter and an 'args[]' array.
+       * plural.y: Don't include stdarg.h.
+       (new_exp): New function.
+       (new_exp_0, new_exp_2, new_exp_3): Rewritten to call new_exp.
+       (new_exp_1): New function.
+       ('?' ':'): Make right-associative.
+       (EQUOP2): New token, replaces '=' and '!'.
+       (CMPOP2): New token.
+       (ADDOP2): New token, replaces '+' and '-'.
+       (MULOP2): New token, replaces '*', '/' and '%'.
+       ('!'): New token.
+       (exp): Add rules for CMPOP2 and '!'. Don't call YYABORT.
+       (start): Call YYABORT here.
+       (FREE_EXPRESSION): Update.
+       (yylex): Don't skip "\\n". Recognize comparison and '!' operators.
+       Update for new token symbols.
+       * loadmsgcat.c (plvar, plone, germanic_plural, init_germanic_plural):
+       Update.
+       * dcigettext.c (_nl_find_msg): Optimize for space.
+       (plural_eval): Recognize comparison and '!' operators. Optimize for
+       space.
+
+       * dcigettext.c (transcmp): New declaration.
+
+2001-03-10  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (libintl.la): Pass -liconv and flag -no-undefined.
+       Needed on platforms like BeOS.
+
+       * Makefile.in (all-no-yes): Depend on libgnuintl.$la, not libintl.$la.
+       (libgnuintl.a, libgnuintl.la): New targets. Needed for linking
+       ../tests/tstgettext on systems which have gettext() in libintl.so.
+
+       * localcharset.c (locale_charset): Allow wildcard syntax. Resolve
+       alias also if codeset is empty.
+       * config.charset (BeOS): Use wildcard syntax.
+
+       * loadmsgcat.c (_nl_load_domain): locale_charset() doesn't return NULL
+       any more.
+
+2001-03-09  Bruno Haible  <haible@clisp.cons.org>
+
+       * config.charset: Update from libiconv-1.6.
+       * localcharset.c: Likewise.
+
+2001-02-25  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale.alias: Don't use nb_NO but define aliases for it.
+
+2001-01-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * loadmsgcat.c: Include <locale.h> for _LIBC.
+
+2001-03-09  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (transmem_block_t): Change to unsigned char, to avoid
+       compiler warning.
+       (_nl_find_msg): Add casts to avoid compiler warnings.
+
+2001-03-09  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (DISTFILES.common): Remove ChangeLog.
+       (DISTFILES.obsolete): New variable.
+       (install-data): Install ChangeLog.inst as ChangeLog. Remove the files
+       listed in DISTFILES.obsolete.
+       (uninstall): Simplify.
+       (distclean): Remove ChangeLog.inst.
+       (dist): Mention ChangeLog explicitly.
+
+2001-03-04  Bruno Haible  <haible@clisp.cons.org>
+       * dcigettext.c (ISSLASH, HAS_DEVICE, IS_ABSOLUTE_PATH,
+       IS_PATH_WITH_DIR): New macros.
+       (DCIGETTEXT): Use IS_ABSOLUTE_PATH and IS_PATH_WITH_DIR. Increment
+       path_max proportionally.
+       * loadinfo.h (PATH_SEPARATOR): New macro.
+       * l10nflist.c (_nl_make_l10nflist): Use PATH_SEPARATOR instead of ':'.
+       * localealias.c (_nl_expand_alias): Likewise.
+       * libgnuintl.h (gettext) [DJGPP]: Define as a macro as well.
+
+2001-03-06  Bruno Haible  <haible@clisp.cons.org>
+
+       * libgnuintl.h (LC_MESSAGES): Don't define on Solaris.
+
+2001-02-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c: Update comment about HAVE_LOCALE_NULL.
+
+2001-02-05  Bruno Haible  <haible@clisp.cons.org>
+
+       * libgnuintl.h (LC_MESSAGES): Provide a default value.
+
+2001-01-30  Bruno Haible  <haible@clisp.cons.org>
+
+       * config.charset: Update for FreeBSD 4.2.
+
+2001-01-21  Bruno Haible  <haible@clisp.cons.org>
+
+       Use libtool.
+       * Makefile.in (l): Use INTL_LIBTOOL_SUFFIX_PREFIX instead of l.
+       (all-no): When USE_INCLUDED_LIBINTL is 'no' but BUILD_INCLUDED_LIBINTL
+       is 'yes', still build libintl.$la because the testsuite needs it.
+       (libintl.la): Add $(CPPFLAGS) $(CFLAGS) $(XCFLAGS). Linking via $(CC)
+       must use all $(CFLAGS).
+       (install-exec): Use libtool to install libintl.$la.
+       (uninstall): Use libtool to uninstall libintl.$la.
+       (mostlyclean): Remove *.la and the .libs subdir.
+       * intl-compat.c: Reorder. Add comment.
+
+2001-01-20  Bruno Haible  <haible@clisp.cons.org>
+
+       * loadmsgcat.c (O_BINARY): Define on platforms that don't have it.
+       (_nl_load_domain): Open the catalog file in binary mode.
+
+2001-01-24  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettextP.h (SWAP): Remove declaration, to work around a compilation
+       failure on alphaev5-cray-unicosmk2.0.5.X.
+
+2001-01-15  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (_nl_find_msg): Cast the second iconv() arg, to avoid
+       a warning.
+
+2001-01-07  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettextP.h (__gettextdebug): Remove declaration.
+       (gettext_free_exp__, gettextparse__): New non-libc declarations.
+       * plural.y [!_LIBC]: Define gettextparse__, gettext_free_exp__, not
+       __gettextparse, __gettext_free_exp.
+       * loadmsgcat.c [!_LIBC]: Use gettextparse__, not __gettextparse.
+
+2001-01-07  Bruno Haible  <haible@clisp.cons.org>
+
+       * libgnuintl.h: Renamed from intlh.inst.in.
+       Remove comment about __builtin_constant_p.
+       (gettext): Use NULL.
+       * libgettext.h: Completely rewritten. Now a conditional wrapper around
+       <libintl.h>. Keep the handling of ENABLE_NLS and gettext_noop, remove
+       everything else.
+       * gettextP.h: Include gettext.h, for nls_uint32.
+       (gettext__, dgettext__, dcgettext__, textdomain__, bindtextdomain__,
+       bind_textdomain_codeset__): New declarations, from old libgettext.h.
+       * gettext.h: Don't include <stdio.h>.
+       * Makefile.in (HEADERS): Add libgnuintl.h.
+       (DISTFILES.gettext): Remove intlh.inst.in.
+       (all-yes): Depend on libintl.h instead of intlh.inst.
+       (libintl.h): New target. Create as a copy of libgnuintl.h.
+       (intlh.inst): Remove target.
+       (install-exec): Update.
+       ($(OBJECTS): Depend on libgnuintl.h, not libgettext.h.
+       (mostlyclean): Remove libintl.h instead of intlh.inst.
+       (dist-libc): Remove target.
+       * bindtextdom.c: Include libgnuintl.h instead of libgettext.h. Don't
+       include gettext.h.
+       * dcgettext.c: Likewise.
+       * dcigettext.c: Likewise.
+       * dcngettext.c: Likewise.
+       * dngettext.c: Likewise.
+       * finddomain.c: Likewise.
+       * ngettext.c: Likewise.
+       * textdomain.c: Likewise.
+       * dgettext.c: Include libgnuintl.h instead of libgettext.h. Include
+       gettextP.h.
+       * gettext.c: Likewise.
+       * intl-compat.c: Likewise.
+       * localealias.c: Don't include gettext.h.
+       * plural.y: Likewise.
+
+2001-01-07  Bruno Haible  <haible@clisp.cons.org>
+
+       Assume <stddef.h>, <stdlib.h>, <string.h>, <locale.h> exist.
+       * intlh.inst.in: Likewise.
+       * libgettext.h: Likewise.
+       * gettextP.h: Likewise.
+       * bindtextdom.c: Likewise.
+       * dcigettext.c: Likewise.
+       * dgettext.c: Likewise.
+       * dngettext.c: Likewise.
+       * explodename.c: Likewise.
+       * finddomain.c: Likewise.
+       * gettext.c: Likewise.
+       * l10nflist.c: Likewise.
+       * loadmsgcat.c: Likewise.
+       * localealias.c: Likewise.
+       * ngettext.c: Likewise.
+       * textdomain.c: Likewise.
+
+2001-01-06  Bruno Haible  <haible@clisp.cons.org>
+
+       Remove catgets fallback code.
+       - It does not handle message clash prevention through domains and
+         dgettext().
+       - It does not handle message catalog inheritance and the LANGUAGE
+         environment variable.
+       - It does not handle locale aliases.
+       - It does not handle automatic charset conversion.
+       - It does not handle plural form handling and ngettext().
+       - It uses a slow string to integer conversion.
+       - It is sensitive against installation problems.
+       * cat-compat.c: Remove file.
+       * po2msg.sin, po2tbl.sin: Remove files.
+       * Makefile.in (datadir): Assume DATADIRNAME = share.
+       (SOURCES): Remove cat-compat.c.
+       (DISTFILES.common): Remove po2msg.sin, po2tbl.sin.
+       (distclean): No need to remove po2msg.sed, po2tbl.sed.
+       (../po/cat-id-tbl.$lo): Remove rule.
+       * libgettext.h (_msg_ent): Remove.
+       (_msg_tbl, _msg_tbl_length): Remove declarations.
+       (gettext, dgettext, ngettext, dngettext): Don't depend on
+       !HAVE_CATGETS.
+
+2001-01-04  Ulrich Drepper  <drepper@redhat.com>
+
+       * plural.y (yylex): Minimal improvement in number scanner.
+
+2001-01-02  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (guess_category_value): Rewrite so that LANGUAGE value
+       is ignored if the selected locale is the C locale.
+
+2000-11-20  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (transcmp): Make s1 and s2 const.
+       * loadmsgcat.c (_nl_load_domain): Rearrange domain initialization to
+       avoid warning.
+
+2000-11-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale.alias: Add thai.
+       Patch by Chanop Silpa-Anan <chanop@syseng.anu.edu.au>.
+
+2001-01-05  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (INCLUDES): Remove reference to $(top_srcdir)/lib.
+       (.SUFFIXES): Put .c before .y, so that Solaris "make" uses the .c.o
+       rule, not the builtin .y.o rule.
+       (.y.c): Use $< instead of $^. $^ is not supported by SUSV2 "make"
+       specification. Remove $*.h explicitly: we don't need plural.h.
+       * gettextP.h: Include <stddef.h>.
+       (__gettext_free_exp, __gettextparse): Convert prototype to K&R C
+       syntax.
+       * bindtextdom.c (offsetof): Provide fallback for platforms that lack
+       it, like SunOS4.
+       (set_binding_values): Convert prototype to K&R C syntax.
+       * cat-compat.c: Include stdlib.h, string.h whenever possible.
+       * dcigettext.c: Ignore the value of C_ALLOCA, because libintl.a
+       must not depend on external .o files.
+       (offsetof): Provide fallback for platforms that lack it, like SunOS4.
+       (transcmp): Convert to K&R C syntax.
+       * explodename.c Include stdlib.h whenever possible.
+       (_nl_find_language): Convert to K&R C syntax.
+       * finddomain.c: Include stdlib.h whenever possible.
+       * l10nflist.c Include stdlib.h whenever possible.
+       (_nl_normalize_codeset): Use tolower, not _tolower.
+       * loadmsgcat.c: Include stdlib.h whenever possible.
+       Include headers needed for alloca().
+       (freea): New macro.
+       (_nl_load_domain): Add fallback code for platforms lacking strtoul,
+       like SunOS4. Add fallback code for platforms lacking alloca.
+       * localealias.c: Include stdlib.h whenever possible.
+       (ADD_BLOCK, FREE_BLOCK): Remove macros.
+       (freea): New macro.
+       (read_alias_file): Simplify fallback code for platforms lacking alloca.
+       * plural.y (new_exp_0, new_exp_2, new_exp_3): New functions.
+       (new_exp): Remove function.
+       (__gettext_free_exp, yylex, yyerror): Convert to K&R C syntax.
+       * textdomain.c: Include stdlib.h whenever possible.
+       * gettext.c: Likewise.
+       * ngettext.c: Likewise.
+       * localcharset.c (volatile): Define to empty if not using ANSI C.
+
+2001-01-01  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (mostlyclean): Remove intlh.inst, charset.alias,
+       ref-add.sed, ref-del.sed.
+       (distclean): In the gettext package, remove VERSION.
+
+2001-01-01  Bruno Haible  <haible@clisp.cons.org>
+
+       Finish implementation of plural form handling.
+       * dcigettext.c (known_translation_t): Rename 'domain' field to
+       'domainname'. Remove 'plindex' field. Add 'domain' and
+       'translation_length' fields.
+       (transcmp): Don't compare 'plindex' fields.
+       (plural_lookup): New function.
+       (DCIGETTEXT): Change cache handing in the plural case. Don't call
+       plural_eval before the translation and its catalog file have been
+       found. Remove plindex from cache key. Add 'translation_length' and
+       'domain' to cache result. 
+       (_nl_find_msg): Remove index argument, return length of translation
+       to the caller instead. Weaken comparison of string lengths, to account
+       for plural entries. Call iconv() on the entire result string, not
+       only on the portion needed so far.
+       * loadinfo.h (_nl_find_msg): Remove index argument, add lengthp
+       argument.
+       * loadmsgcat.c (_nl_load_domain): Adapt to _nl_find_msg change.
+
+       * intl-compat.c (dcngettext, dngettext, ngettext): New functions.
+       * libgettext.h (ngettext__, dngettext__, dcngettext__): New
+       declarations.
+       (ngettext, dngettext): Add missing macro argument.
+
+       * intlh.inst.in (ngettext, dngettext): Add missing macro argument.
+
+2000-12-31  Bruno Haible  <haible@clisp.cons.org>
+
+       * gettextP.h (ZERO): New macro.
+       (struct binding): Always use ZERO.
+       * bindtextdom.c (set_binding_values): Use offsetof, not sizeof.
+       Include <stddef.h> whenever possible.
+       * dcigettext.c (ZERO): Remove macro.
+       (struct transmem_list): Use ZERO.
+       (DCIGETTEXT): Use offsetof, not sizeof.
+       Include <stddef.h> whenever possible.
+
+       * config.charset: Update from libiconv-1.5.1.
+       * localcharset.c: Likewise.
+
+2000-12-30  Bruno Haible  <haible@clisp.cons.org>
+
+       * locale.alias: New file, moved here from ../misc/locale.alias. Add
+       "Packages using this file" line.
+       * Makefile.in (DISTFILES.common): Add locale.alias.
+       (install-exec, uninstall): Install/deinstall locale.alias.
+
+2000-10-30  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (guess_category_value): For libc always use the
+       setlocale() method.
+
+2000-10-20  Ulrich Drepper  <drepper@redhat.com>
+
+       * libintl.glibc (ngettext macro): Add missing parameter.
+       (dngettext macro): Likewise.
+
+2000-10-14  Ulrich Drepper  <drepper@redhat.com>
+
+       * localealias.c (read_alias_file): Update string pointers in map[]
+       if realloc() changed the values.
+       Patch by Jakub Jelinek <jakub@redhat.com>.
+
+2000-08-31  Ulrich Drepper  <drepper@redhat.com>
+
+       * loadmsgcat.c: Use *stat64 instead of *stat internally.
+
+       * dcigettext.c (free_mem): Correct freeing of _nl_domain_bindings
+       list.
+
+2000-08-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (DCIGETTEXT): Remove _nl_find_language in code to
+       determine invalid locale name.
+
+2000-08-20  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c: Unify use of function aliases to make more compact
+       PLT.
+
+       * loadmsgcat.c (_nl_unload_domain): Also free conv_tab element.
+       Pretty printing.
+       * plural.y (new_exp): Take number of optional parameters in second
+       parameter.  Test for correct number of parameters and free correctly
+       in case of failure.  Adjust all callers.
+       (yylex): Fix handling of '\0'.  Allow ';' as terminator character.
+
+2000-07-14  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (dcigettext): Call plural_eval on all platforms, not
+       only those having tsearch.
+
+2000-06-30  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (_nl_find_msg): Correct reallocation of buffers in
+       case the translation is too large.  Remember allocated memory blocks
+       in a list.
+       (free_mem): Free memory for translations.
+
+2000-06-16  Ulrich Drepper  <drepper@redhat.com>
+
+       * loadmsgcat.c (_nl_load_domain): Call norm_add_slashes with new
+       parameter to always enable transliteration.
+
+1998-10-20  Paul Eggert  <eggert@twinsun.com>
+
+       * po2tbl.sin: Escape trigraphs.
+
+2000-10-12  Bruno Haible  <haible@clisp.cons.org>
+
+       * finddomain.c: Remove unneeded includes.
+
+2000-10-12  Bruno Haible  <haible@clisp.cons.org>
+
+       * localealias.c (memcpy): Return first argument, just like the real
+       memcpy function does.
+       * bindtextdom.c (memcpy): Likewise.
+       * finddomain.c (memcpy): Likewise.
+       * l10nflist.c (memcpy): Likewise.
+       * textdomain.c (memcpy): Likewise.
+       From Paul Eggert <eggert@twinsun.com>.
+
+2000-09-29  Bruno Haible  <haible@clisp.cons.org>
+
+       * libintl.glibc: Update from current glibc version.
+
+2000-09-18  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c: Outside libc, use local variable names that don't
+       clash with those in libc.
+       * bindtextdom.c: Likewise.
+       * textdomain.c: Likewise.
+
+2000-07-31  Bruno Haible  <haible@clisp.cons.org>
+
+       * plural.y: Include config.h. Needed to define 'inline' away for C
+       compilers that don't support it.
+       (yylex): Don't use gcc specific case range syntax.
+       * loadmsgcat.y (INIT_GERMANIC_PLURAL): New macro, for old compilers.
+
+2000-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       Simplification: In all cases where $(gnulocaledir) is used, it is
+       identical to $(localedir).
+       * Makefile.in (DEFS): Remove setting for GNULOCALEDIR.
+       * dcigettext.c (_nl_default_dirname): Initialize with LOCALEDIR.
+
+2000-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       * xopen-msg.sed: Renamed to ...
+       * po2msg.sin: ... here.
+       * linux-msg.sed: Remove file.
+       * Makefile.in (DISTFILES.common): Update.
+
+2000-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       * po2tbl.sed.in: Renamed to ...
+       * po2tbl.sin: ... here.
+       * Makefile.in (DISTFILES.common): Update.
+
+2000-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (uninstall): Synchronize with the install target.
+       Really remove charset.alias when its reference count drops to 0.
+
+2000-07-28  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (mkinstalldirs): New macro. Needed when configured with
+       --srcdir=<relative pathname>; then ac_aux_dir will be a relative
+       pathname rooted at the top builddir, and @MKINSTALLDIRS@ likewise.
+       (install-exec, install-data): Use it.
+
+2000-07-26  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (install-exec, install-data): Use $(SHELL) for calling
+       $(MKINSTALLDIRS), don't rely on its execution permissions.
+
+       * Makefile.in (LTV_CURRENT, LTV_REVISION, LTV_AGE): New variables.
+       (libintl.la): Use them.
+
+       * Makefile.in (install-exec, install-data, uninstall): Provide DESTDIR
+       support, as recommended by GNU standards. Fix misapplied 2000-06-16
+       patch.
+
+2000-06-16  Bruno Haible  <haible@clisp.cons.org>
+
+       * Makefile.in (COMSRCS): Add localcharset.c.
+       (OBJECTS): Add localcharset.$lo.
+       (DISTFILES.common): Add config.charset, ref-{add,del}.sin.
+       (DEFS): Add -DLIBDIR.
+       (all-yes): Add charset.alias, ref-{add,del}.sed.
+       (.SUFFIXES): Add .sin and .sed.
+       (.sin.sed, charset.alias): New rules.
+       (install-exec, uninstall): Install/deinstall charset.alias.
+       * localcharset.c: New file, from fileutils-4.0u.
+       * config.charset: New file, from fileutils-4.0u.
+       * red-add.sin, ref-del.sin: New files, from fileutils-4.0u.
+
+       * intlh.inst.in (bind_textdomain_codeset): New declaration.
+       * libgettext.h (bind_textdomain_codeset, bind_textdomain_codeset__):
+       New declarations.
+       (bind_textdomain_codeset) [!ENABLE_NLS]: New macro.
+       * cat-compat.c (bind_textdomain_codeset): New function.
+       * intl-compat.c (bind_textdomain_codeset): New function.
+
+       * libgettext.h (ngettext, dngettext, dcngettext): New
+       declarations.
+       (dcgettext): Remove macro definition.
+       (textdomain, bindtextdomain) [!ENABLE_NLS]: Parenthesize argument.
+       * intlh.inst.in (ngettext, dngettext, dcngettext): New
+       declarations.
+       (dcgettext): Remove macro definition.
+
+       * *.h, *.c, *.y: Change copyright notice from LGPL to GPL.
+
+2000-05-21  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c: Fix typo in comment.
+
+2000-05-08  Andreas Jaeger  <aj@suse.de>
+
+       * bindtextdom.c (set_binding_values): Add prototype.
+
+2000-05-05  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (alignof): New macro.
+       (_nl_find_msg): Use it instead of __alignof__. Pass correct output
+       buffer length to __gconv/iconv. If malloc (freemem_size) fails, set
+       freemem_size to 0.
+
+2000-05-05  Bruno Haible  <haible@clisp.cons.org>
+
+       * dcigettext.c (dcigettext): Fix interpretation of tsearch
+       return value.
+
+2000-05-06  Ulrich Drepper  <drepper@redhat.com>
+
+       * dcigettext.c (DCIGETTEXT): Always define local variable `index'.
+       (mempcpy): Correct typo in parameter list.
+
+       * hash-string.h: Don't include <values.h>.
+
+       * *.c, *.h, *.y: Update from glibc version.
+
+1998-04-29  Paul Eggert  <eggert@twinsun.com>
+
+       * Makefile.in (aliaspath): Don't put `.' at the end.
+
+1998-06-01  Ulrich Drepper  <drepper@cygnus.com>
+
+       * localealias.c (read_alias_file): Undo last change.
+       * l10nflist.c (_nl_normalize_codeset): Likewise.
+       * loadinfo.h: Likewise.
+
+1998-05-23  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c: Don't use any alloca hack when C_ALLOCA is defined.
+
+1998-05-01 08:47  Ulrich Drepper  <drepper@cygnus.com>
+
+       * gettext-0.10.35 released.
+
+1998-04-29  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intl/localealias.c (read_alias_file): Use unsigned char for
+       local variables.  Remove unused variable tp.
+       * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
+       for type of codeset.  For loosing Solaris systems.
+       * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
+       * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
+       len if not needed.
+       Patches by Jim Meyering.
+
+1998-04-28  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
+       mmap is not supported.
+
+       * hash-string.h: Don't include <values.h>.
+
+1998-04-27  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Use strdup is available.
+
+       * localealias.c: Define HAVE_MEMPCPY so that we can use this
+       function.  Define and use semapahores to protect modfication of
+       global objects when compiling for glibc.  Add code to allow
+       freeing alias table.
+
+       * l10nflist.c: Don't assume stpcpy not being a macro.
+
+       * gettextP.h: Define internal_function macri if not already done.
+       Use glibc byte-swap macros instead of defining SWAP when compiled
+       for glibc.
+       (struct loaded_domain): Add elements to allow unloading.
+
+       * Makefile.in (distclean): Don't remove libintl.h here.
+
+       * bindtextdomain.c: Carry over changes from glibc.  Use strdup if
+       available.
+
+       * dcgettext.c: Don't assume stpcpy not being a macro.  Mark internal
+       functions.  Add memory freeing code for glibc.
+
+       * dgettext.c: Update copyright.
+
+       * explodename.c: Include stdlib.h and string.h only if they exist.
+       Use strings.h eventually.
+
+       * finddomain.c: Mark internal functions.  Use strdup if available.
+       Add memory freeing code for glibc.
+
+1997-10-10 20:00  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
+       They should return reasonable values.
+       Reported by Tom Tromey <tromey@cygnus.com>.
+
+1997-09-16 03:33  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
+       * intlh.inst.in: Likewise.
+       Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
+
+       * libintl.glibc: Update from current glibc version.
+
+1997-09-06 02:10  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Reformat copyright.
+
+1997-08-19 15:22  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (DCGETTEXT): Remove wrong comment.
+
+1997-08-16 00:13  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install-data): Don't change directory to install.
+
+1997-08-01 14:30  Ulrich Drepper  <drepper@cygnus.com>
+
+       * cat-compat.c: Fix copyright.
+
+       * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+
+       * loadmsgcat.c: Update copyright.  Fix typos.
+
+       * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+       (_nl_make_l10nflist): Handle sponsor and revision correctly.
+
+       * gettext.c: Update copyright.
+       * gettext.h: Likewise.
+       * hash-string.h: Likewise.
+
+       * finddomain.c: Remoave dead code.  Define strchr only if
+       !HAVE_STRCHR.
+
+       * explodename.c: Include <sys/types.h>.
+
+       * explodename.c: Reformat copyright text.
+       (_nl_explode_name): Fix typo.
+
+       * dcgettext.c: Define and use __set_errno.
+       (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+       not defined.
+
+       * bindtextdom.c: Pretty printing.
+
+1997-05-01 02:25  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (guess_category_value): Don't depend on
+       HAVE_LC_MESSAGES.  We don't need the macro here.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+       macro.  Instead use HAVE_LOCALE_NULL and define it when using
+       glibc, as in dcgettext.c.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * Makefile.in (CPPFLAGS): New variable.  Reported by François
+       Pinard.
+
+Mon Mar 10 06:51:17 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in: Implement handling of libtool.
+
+       * gettextP.h: Change data structures for use of generic lowlevel
+       i18n file handling.
+
+Wed Dec  4 20:21:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Put parentheses around arguments of memcpy macro
+       definition.
+       * localealias.c: Likewise.
+       * l10nflist.c: Likewise.
+       * finddomain.c: Likewise.
+       * bindtextdom.c: Likewise.
+       Reported by Thomas Esken.
+
+Mon Nov 25 22:57:51 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Move definition of `memcpy` macro to right
+       position.
+
+Fri Nov 22 04:01:58 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+       bcopy if not already defined.  Reported by Thomas Esken.
+       * bindtextdom.c: Likewise.
+       * l10nflist.c: Likewise.
+       * localealias.c: Likewise.
+       * textdomain.c: Likewise.
+
+Tue Oct 29 11:10:27 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (libdir): Change to use exec_prefix instead of
+       prefix.  Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
+
+Sat Aug 31 03:07:09 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+       so don't prepend uppercase `ISO' for only numeric arg.
+
+Fri Jul 19 00:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+       definition of _GNU_SOURCE.  Patch by Roland McGrath.
+
+       * Makefile.in (uninstall): Fix another bug with `for' loop and
+       empty arguments.  Patch by Jim Meyering.  Correct name os
+       uninstalled files: no intl- prefix anymore.
+
+       * Makefile.in (install-data): Again work around shells which
+       cannot handle mpty for list.  Reported by Jim Meyering.
+
+Sat Jul 13 18:11:35 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Split goal.  Now depend on install-exec
+        and install-data.
+       (install-exec, install-data): New goals.  Created from former
+       install goal.
+       Reported by Karl Berry.
+
+Sat Jun 22 04:58:14 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (MKINSTALLDIRS): New variable.  Path to
+        mkinstalldirs script.
+       (install): use MKINSTALLDIRS variable or if the script is not present
+       try to find it in the $top_scrdir).
+
+Wed Jun 19 02:56:56 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+       Grr.  Work around by renaming the static version and use macros
+       for renaming.
+
+Tue Jun 18 20:11:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Correct presence test macros of __argz_* functions.
+
+       * l10nflist.c: Include <argz.h> based on test of it instead when
+       __argz_* functions are available.
+       Reported by Andreas Schwab.
+
+Thu Jun 13 15:17:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * explodename.c, l10nflist.c: Define NULL for dumb systems.
+
+Tue Jun 11 17:05:13 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+       result to __result to prevent name clash.
+
+       * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+        get prototype for stpcpy and strcasecmp.
+
+       * intlh.inst.in, libgettext.h: Move declaration of
+       `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+       from gcc's -Wnested-extern option.
+
+Fri Jun  7 01:58:00 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Remove comment.
+
+Thu Jun  6 17:28:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Work around for another Buglix stupidity.
+       Always use an `else' close for `if's.  Reported by Nelson Beebe.
+
+       * Makefile.in (intlh.inst): Correct typo in phony rule.
+       Reported by Nelson Beebe.
+
+Thu Jun  6 01:49:52 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (read_alias_file): Rename variable alloca_list to
+       block_list as the macro calls assume.
+       Patch by Eric Backus.
+
+       * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+        malloc.
+       (read_alias_file): Rename varriabe alloca_list to block_list as the
+       macro calls assume.
+       Patch by Eric Backus.
+
+       * l10nflist.c: Correct conditional for <argz.h> inclusion.
+       Reported by Roland McGrath.
+
+       * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+        all-@USE_NLS@.
+
+       * Makefile.in (install): intlh.inst comes from local dir, not
+        $(srcdir).
+
+       * Makefile.in (intlh.inst): Special handling of this goal.  If
+       used in gettext, this is really a rul to construct this file.  If
+       used in any other package it is defined as a .PHONY rule with
+       empty body.
+
+       * finddomain.c: Extract locale file information handling into
+       l10nfile.c.  Rename local stpcpy__ function to stpcpy.
+
+       * dcgettext.c (stpcpy): Add local definition.
+
+       * l10nflist.c: Solve some portability problems.  Patches partly by
+       Thomas Esken.  Add local definition of stpcpy.
+
+Tue Jun  4 02:47:49 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Don't depend including <locale.h> on
+       HAVE_LOCALE_H.  Instead configure must rewrite this fiile
+       depending on the result of the configure run.
+
+       * Makefile.in (install): libintl.inst is now called intlh.inst.
+       Add rules for updating intlh.inst from intlh.inst.in.
+
+       * libintl.inst: Renamed to intlh.inst.in.
+
+       * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+        because gcc has __buitlin_alloca.
+       Reported by Roland McGrath.
+
+Mon Jun  3 00:32:16 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (installcheck): New goal to fulfill needs of
+        automake's distcheck.
+
+       * Makefile.in (install): Reorder commands so that VERSION is
+        found.
+
+       * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+        @datadir@/gettext.
+       (COMSRCS): Add l10nfile.c.
+       (OBJECTS): Add l10nfile.o.
+       (DISTFILES): Rename to DISTFILE.normal.  Remove $(DISTFILES.common).
+       (DISTFILE.gettext): Remove $(DISTFILES.common).
+       (all-gettext): Remove goal.
+       (install): If $(PACKAGE) = gettext install, otherwose do nothing.  No
+       package but gettext itself should install libintl.h + headers.
+       (dist): Extend goal to work for gettext, too.
+       (dist-gettext): Remove goal.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+
+Sun Jun  2 17:33:06 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+        find_l10nfile.
+
+Sat Jun  1 02:23:03 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (__argz_next): Add definition.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+       code.  Use new l10nfile handling.
+
+       * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+        alloca code.
+
+       * l10nflist.c: Initial revision.
+
+Tue Apr  2 18:51:18 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-gettext): New goal.  Same as all-yes.
+
+Thu Mar 28 23:01:22 1996  Karl Eichwalder  <ke@ke.central.de>
+
+       * Makefile.in (gettextsrcdir): Define using @datadir@.
+
+Tue Mar 26 12:39:14 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Include <ctype.h>.  Reported by Roland McGrath.
+
+Sat Mar 23 02:00:35 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+        with external declaration.
+
+Sat Mar  2 00:47:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-no): Rename from all_no.
+
+Sat Feb 17 00:25:59 1996  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h [loaded_domain]: Array `successor' must now contain up
+        to 63 elements (because of codeset name normalization).
+
+       * finddomain.c: Implement codeset name normalization.
+
+Thu Feb 15 04:39:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all): Define to `all-@USE_NLS@'.
+       (all-yes, all_no): New goals.  `all-no' is noop, `all-yes'
+       is former all.
+
+Mon Jan 15 21:46:01 1996  Howard Gayle  <howard@hal.com>
+
+       * localealias.c (alias_compare): Increment string pointers in loop
+        of strcasecmp replacement.
+
+Fri Dec 29 21:16:34 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Who commented this goal out ? :-)
+
+Fri Dec 29 15:08:16 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Save `errno'.  Failing system calls
+       should not effect it because a missing catalog is no error.
+       Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+
+Tue Dec 19 22:09:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+        shell scripts.
+
+Fri Dec 15 17:34:59 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (install-src): Only install library and header when
+       we use the own implementation.  Don't do it when using the
+       system's gettext or catgets functions.
+
+       * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+
+Sat Dec  9 16:24:37 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+       gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+       Use PARAMS instead of __P.  Suggested by Roland McGrath.
+
+Tue Dec  5 11:39:14 1995  Larry Schwimmer  <rosebud@cyclone.stanford.edu>
+
+       * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+       !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+
+Mon Dec  4 15:42:07 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src):
+       Install libintl.inst instead of libintl.h.install.
+
+Sat Dec  2 22:51:38 1995  Marcus Daniels  <marcus@sysc.pdx.edu>
+
+       * cat-compat.c (textdomain):
+       Reverse order in which files are tried you load.  First
+       try local file, when this failed absolute path.
+
+Wed Nov 29 02:03:53 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * cat-compat.c (bindtextdomain): Add missing { }.
+
+Sun Nov 26 18:21:41 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.inst: Add missing __P definition.  Reported by Nelson Beebe.
+
+       * Makefile.in:
+       Add dummy `all' and `dvi' goals.  Reported by Tom Tromey.
+
+Sat Nov 25 16:12:01 1995  François Pinard  <pinard@iro.umontreal.ca>
+
+       * hash-string.h: Capitalize arguments of macros.
+
+Sat Nov 25 12:01:36 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Prevent files names longer than 13
+       characters.  libintl.h.glibc->libintl.glibc,
+       libintl.h.install->libintl.inst.  Reported by Joshua R. Poulson.
+
+Sat Nov 25 11:31:12 1995  Eric Backus  <ericb@lsid.hp.com>
+
+       * dcgettext.c: Fix bug in preprocessor conditionals.
+
+Sat Nov 25 02:35:27 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * libgettext.h: Solaris cc does not understand
+        #if !SYMBOL1 && !SYMBOL2.  Sad but true.
+
+Thu Nov 23 16:22:14 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string):
+       Fix for machine with >32 bit `unsigned long's.
+
+       * dcgettext.c (DCGETTEXT):
+       Fix horrible bug in loop for alternative translation.
+
+Thu Nov 23 01:45:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+       Some further simplifications in message number generation.
+
+Mon Nov 20 21:08:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.h.glibc: Use __const instead of const in prototypes.
+
+       * Makefile.in (install-src):
+       Install libintl.h.install instead of libintl.h.  This
+       is a stripped-down version.  Suggested by Peter Miller.
+
+       * libintl.h.install, libintl.h.glibc: Initial revision.
+
+       * localealias.c (_nl_expand_alias, read_alias_file):
+       Protect prototypes in type casts by __P.
+
+Tue Nov 14 16:43:58 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h: Correct prototype for hash_string.
+
+Sun Nov 12 12:42:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string): Add prototype.
+
+       * gettextP.h: Fix copyright.
+       (SWAP): Add prototype.
+
+Wed Nov  8 22:56:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file): Forgot sizeof.
+       Avoid calling *printf function.  This introduces a big overhead.
+       Patch by Roland McGrath.
+
+Tue Nov  7 14:21:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+
+       * finddomain.c (stpcpy):
+       Define substitution function local.  The macro was to flaky.
+
+       * cat-compat.c: Fix typo.
+
+       * xopen-msg.sed, linux-msg.sed:
+       While bringing message number to right place only accept digits.
+
+       * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+       leading 0s we don't need to remove them.  Reported by Marcus
+       Daniels.
+
+       * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+       dependency.  Reported by Marcus Daniels.
+
+       * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+       Generally cleanup using #if instead of #ifndef.
+
+       * Makefile.in: Correct typos in comment.  By François Pinard.
+
+Mon Nov  6 00:27:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Don't install libintl.h and libintl.a
+       if we use an available gettext implementation.
+
+Sun Nov  5 22:02:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS.  Reported
+       by François Pinard.
+
+       * libgettext.h: Use #if instead of #ifdef/#ifndef.
+
+       * finddomain.c:
+       Comments describing what has to be done should start with FIXME.
+
+Sun Nov  5 19:38:01 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Split.  Use DISTFILES with normal meaning.
+       DISTFILES.common names the files common to both dist goals.
+       DISTFILES.gettext are the files only distributed in GNU gettext.
+
+Sun Nov  5 17:32:54 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+       This was necessary since a change in _nl_find_msg several weeks
+       ago.  I really don't know this is still not fixed.
+
+Sun Nov  5 12:43:12 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL.  This
+       might mark a special condition.
+
+       * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+
+       * Makefile.in (dist): Suppress error message when ln failed.
+       Get files from $(srcdir) explicitly.
+
+       * libgettext.h (gettext_const): Rename to gettext_noop.
+
+Fri Nov  3 07:36:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (make_entry_rec):
+       Protect against wrong locale names by testing mask.
+
+       * libgettext.h (gettext_const): Add macro definition.
+       Capitalize macro arguments.
+
+Thu Nov  2 23:15:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Test for pointer != NULL before accessing value.
+       Reported by Tom Tromey.
+
+       * gettext.c (NULL):
+       Define as (void*)0 instad of 0.  Reported by François Pinard.
+
+Mon Oct 30 21:28:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+
+Sat Oct 28 23:20:47 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+
+       * localealias.c (alias_compare):
+       Peter Miller reported that tolower in some systems is
+       even dumber than I thought.  Protect call by `isupper'.
+
+Fri Oct 27 22:22:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (libdir, includedir): New variables.
+       (install-src): Install libintl.a and libintl.h in correct dirs.
+
+Fri Oct 27 22:07:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+
+       * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+
+       * localealias.c:
+       Fix typo and superflous test.  Reported by Christian von Roques.
+
+Fri Oct  6 11:52:05 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Correct some remainder from the pre-CEN syntax.  Now
+       we don't have a constant number of successors anymore.
+
+Wed Sep 27 21:41:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Add libintl.h.glibc.
+
+       * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+       (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+
+       * loadmsgcat.c: Forget to continue #if line.
+
+       * localealias.c:
+       [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+       space clean.
+
+       * dcgettext.c, finddomain.c: Better comment to last change.
+
+       * loadmsgcat.c:
+       [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+       __fstat, __open, __close, __read, __mmap, and __munmap resp
+       to keep ANSI C name space clean.
+
+       * finddomain.c:
+       [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+
+       * dcgettext.c:
+       [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+       keep ANSI C name space clean.
+
+       * libgettext.h:
+       Include sys/types.h for those old SysV systems out there.
+       Reported by Francesco Potorti`.
+
+       * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+
+       * bindtextdom.c: Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * finddomain.c: Fix 2 times defiend -> defined.
+
+       * textdomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+
+       * gettext.c:
+       Include libintl.h instead of libgettext.h when compiling for glibc.
+       Get NULL from stddef.h if we compile for glibc.
+
+       * finddomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * dcgettext.c: Include all those standard headers unconditionally
+       if _LIBC is defined.
+
+       * dgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+
+       * dcgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+
+       * bindtextdom.c:
+       If compiled in glibc include libintl.h instead of libgettext.h.
+
+Mon Sep 25 22:23:06 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+       Reported by Marcus Daniels.
+
+       * cat-compat.c (bindtextdomain):
+       String used in putenv must not be recycled.
+       Reported by Marcus Daniels.
+
+       * libgettext.h (__USE_GNU_GETTEXT):
+       Additional symbol to signal that we use GNU gettext
+       library.
+
+       * cat-compat.c (bindtextdomain):
+       Fix bug with the strange stpcpy replacement.
+       Reported by Nelson Beebe.
+
+Sat Sep 23 08:23:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: Include <string.h> for stpcpy prototype.
+
+       * localealias.c (read_alias_file):
+       While expand strdup code temporary variable `cp' hided
+       higher level variable with same name.  Rename to `tp'.
+
+       * textdomain.c (textdomain):
+       Avoid warning by using temporary variable in strdup code.
+
+       * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+
+Thu Sep 21 15:51:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (alias_compare):
+       Use strcasecmp() only if available.  Else use
+       implementation in place.
+
+       * intl-compat.c:
+       Wrapper functions now call *__ functions instead of __*.
+
+       * libgettext.h: Declare prototypes for *__ functions instead for __*.
+
+       * cat-compat.c, loadmsgcat.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+       * bindtextdom.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Rename to bindtextdomain__ if not used in GNU C Library.
+
+       * dgettext.c:
+       Rename function to dgettext__ if not used in GNU C Library.
+
+       * gettext.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Functions now called gettext__ if not used in GNU C Library.
+
+       * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+Sun Sep 17 23:14:49 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Correct some bugs in handling of CEN standard
+       locale definitions.
+
+Thu Sep  7 01:49:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Implement CEN syntax.
+
+       * gettextP.h (loaded_domain): Extend number of successors to 31.
+
+Sat Aug 19 19:25:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (aliaspath): Remove path to X11 locale dir.
+
+       * Makefile.in: Make install-src depend on install.  This helps
+       gettext to install the sources and other packages can use the
+       install goal.
+
+Sat Aug 19 15:19:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (uninstall): Remove stuff installed by install-src.
+
+Tue Aug 15 13:13:53 1995  Ulrich Drepper  <drepper@myware>
+
+       * VERSION.in: Initial revision.
+
+       * Makefile.in (DISTFILES):
+       Add VERSION file.  This is not necessary for gettext, but
+       for other packages using this library.
+
+Tue Aug 15 06:16:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_find_domain):
+       New prototype after changing search strategy.
+
+       * finddomain.c (_nl_find_domain):
+       We now try only to find a specified catalog.  Fall back to other
+       catalogs listed in the locale list is now done in __dcgettext.
+
+       * dcgettext.c (__dcgettext):
+       Now we provide message fall back even to different languages.
+       I.e. if a message is not available in one language all the other
+       in the locale list a tried.  Formerly fall back was only possible
+       within one language.  Implemented by moving one loop from
+       _nl_find_domain to here.
+
+Mon Aug 14 23:45:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gettextsrcdir):
+       Directory where source of GNU gettext library are made
+       available.
+       (INSTALL, INSTALL_DATA): Programs used for installing sources.
+       (gettext-src): New.  Rule to install GNU gettext sources for use in
+       gettextize shell script.
+
+Sun Aug 13 14:40:48 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain):
+       Use mmap for loading only when munmap function is
+       also available.
+
+       * Makefile.in (install): Depend on `all' goal.
+
+Wed Aug  9 11:04:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file):
+       Do not overwrite '\n' when terminating alias value string.
+
+       * localealias.c (read_alias_file):
+       Handle long lines.  Ignore the rest not fitting in
+       the buffer after the initial `fgets' call.
+
+Wed Aug  9 00:54:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_load_domain):
+       Add prototype, replacing prototype for _nl_load_msg_cat.
+
+       * finddomain.c (_nl_find_domain):
+       Remove unneeded variable filename and filename_len.
+       (expand_alias): Remove prototype because functions does not
+       exist anymore.
+
+       * localealias.c (read_alias_file):
+       Change type of fname_len parameter to int.
+       (xmalloc): Add prototype.
+
+       * loadmsgcat.c: Better prototypes for xmalloc.
+
+Tue Aug  8 22:30:39 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Allow alias name to be constructed from the four components.
+
+       * Makefile.in (aliaspath): New variable.  Set to preliminary value.
+       (SOURCES): Add localealias.c.
+       (OBJECTS): Add localealias.o.
+
+       * gettextP.h: Add prototype for _nl_expand_alias.
+
+       * finddomain.c: Aliasing handled in intl/localealias.c.
+
+       * localealias.c: Aliasing for locale names.
+
+       * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+
+Mon Aug  7 23:47:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+
+       * cat-compat.c (bindtextdomain):
+       Correct implementation.  dirname parameter was not used.
+       Reported by Marcus Daniels.
+
+       * gettextP.h (loaded_domain):
+       New fields `successor' and `decided' for oo, lazy
+       message handling implementation.
+
+       * dcgettext.c:
+       Adopt for oo, lazy message handliing.
+       Now we can inherit translations from less specific locales.
+       (find_msg): New function.
+
+       * loadmsgcat.c, finddomain.c:
+       Complete rewrite.  Implement oo, lazy message handling :-).
+       We now have an additional environment variable `LANGUAGE' with
+       a higher priority than LC_ALL for the LC_MESSAGE locale.
+       Here we can set a colon separated list of specifications each
+       of the form `language[_territory[.codeset]][@modifier]'.
+
+Sat Aug  5 09:55:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (unistd.h):
+       Include to get _PC_PATH_MAX defined on system having it.
+
+Fri Aug  4 22:42:00 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Include prototype.
+
+       * Makefile.in (dist): Remove `copying instead' message.
+
+Wed Aug  2 18:52:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ID, TAGS): Do not use $^.
+
+Tue Aug  1 20:07:11 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (TAGS, ID): Use $^ as command argument.
+       (TAGS): Give etags -o option t write to current directory,
+       not $(srcdir).
+       (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+       (distclean): Remove ID.
+
+Sun Jul 30 11:51:46 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gnulocaledir):
+       New variable, always using share/ for data directory.
+       (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+
+       * finddomain.c (_nl_default_dirname):
+       Set to GNULOCALEDIR, because it always has to point
+       to the directory where GNU gettext Library writes it to.
+
+       * intl-compat.c (textdomain, bindtextdomain):
+       Undefine macros before function definition.
+
+Sat Jul 22 01:10:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h (_LIBINTL_H):
+       Protect definition in case where this file is included as
+       libgettext.h on Solaris machines.  Add comment about this.
+
+Wed Jul 19 02:36:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * intl-compat.c (textdomain): Correct typo.
+
+Wed Jul 19 01:51:35 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (dcgettext): Function now called __dcgettext.
+
+       * dgettext.c (dgettext): Now called __dgettext and calls
+       __dcgettext.
+
+       * gettext.c (gettext):
+       Function now called __gettext and calls __dgettext.
+
+       * textdomain.c (textdomain): Function now called __textdomain.
+
+       * bindtextdom.c (bindtextdomain): Function now called
+       __bindtextdomain.
+
+       * intl-compat.c: Initial revision.
+
+       * Makefile.in (SOURCES): Add intl-compat.c.
+       (OBJECTS): We always compile the GNU gettext library functions.
+       OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+       and intl-compat.o.
+       (GETTOBJS): Contains now only intl-compat.o.
+
+       * libgettext.h:
+       Re-include protection matches dualistic character of libgettext.h.
+       For all functions in GNU gettext library define __ counter part.
+
+       * finddomain.c (strchr): Define as index if not found in C library.
+       (_nl_find_domain): For relative paths paste / in between.
+
+Tue Jul 18 16:37:45 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+
+       * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+       A little bit better comments.
+
+Tue Jul 18 01:18:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       po-mode.el, makelinks, combine-sh are now found in ../misc.
+
+       * po-mode.el, makelinks, combine-sh, elisp-comp:
+       Moved to ../misc/.
+
+       * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+
+Sun Jul 16 22:33:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+       (install-data, uninstall): Install/uninstall .elc file.
+
+       * po-mode.el (Installation comment):
+       Add .pox as possible extension of .po files.
+
+Sun Jul 16 13:23:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * elisp-comp: Complete new version by François: This does not
+       fail when not compiling in the source directory.
+
+Sun Jul 16 00:12:17 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (../po/cat-id-tbl.o):
+       Use $(MAKE) instead of make for recursive make.
+
+       * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+       (install-exec): Add missing dummy goal.
+       (install-data, uninstall): @ in multi-line shell command at
+       beginning, not in front of echo.  Reported by Eric Backus.
+
+Sat Jul 15 00:21:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES):
+       Rename libgettext.perl to gettext.perl to fit in 14 chars
+       file systems.
+
+       * gettext.perl:
+       Rename to gettext.perl to fit in 14 chars file systems.
+
+Thu Jul 13 23:17:20 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+
+Thu Jul 13 20:55:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Pretty printing.
+
+       * linux-msg.sed, xopen-msg.sed:
+       Correct bugs with handling substitute flags in branches.
+
+       * hash-string.h (hash_string):
+       Old K&R compilers don't under stand `unsigned char'.
+
+       * gettext.h (nls_uint32):
+       Some old K&R compilers (eg HP) don't understand `unsigned int'.
+
+       * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+
+Thu Jul 13 01:34:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ELCFILES): New variable.
+       (DISTFILES): Add elisp-comp.
+       Add implicit rule for .el -> .elc compilation.
+       (install-data): install $ELCFILES
+       (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+
+       * elisp-comp: Initial revision
+
+Wed Jul 12 16:14:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       cat-id-tbl.c is now found in po/.  This enables us to use an identical
+       intl/ directory in all packages.
+
+       * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+
+       * textdomain.c: fix typo (#if def -> #if defined)
+
+Tue Jul 11 18:44:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+       (DISTFILES,distclean): move tupdate.perl to src/
+
+       * po-to-tbl.sed.in:
+       add additional jump to clear change flag to recognize multiline strings
+
+Tue Jul 11 01:32:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * textdomain.c: Protect inclusion of stdlib.h and string.h.
+
+       * loadmsgcat.c: Protect inclusion of stdlib.h.
+
+       * libgettext.h: Protect inclusion of locale.h.
+       Allow use in C++ programs.
+       Define NULL is not happened already.
+
+       * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+       po-to-tbl.sed.
+       (distclean): remove po-to-tbl.sed and tupdate.perl.
+
+       * tupdate.perl.in: Substitute Perl path even in exec line.
+       Don't include entries without translation from old .po file.
+
+Tue Jul  4 00:41:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: use "Updated: " in msgid "".
+
+       * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+       Define getenv if !__STDC__.
+
+       * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+       Define free if !__STDC__.
+
+       * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+       Define free if !__STDC__.
+
+       * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+
+Mon Jul  3 23:56:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+       Remove unneeded $(srcdir) from Makefile.in dependency.
+
+       * makelinks: Add copyright and short description.
+
+       * po-mode.el: Last version for 0.7.
+
+       * tupdate.perl.in: Fix die message.
+
+       * dcgettext.c: Protect include of string.h.
+
+       * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+
+       * finddomain.c: Some corrections in includes.
+
+       * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+
+       * po-to-tbl.sed: Adopt for new .po file format.
+
+       * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+
+Sun Jul  2 23:55:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: Complete rewrite for new .po file format.
+
+Sun Jul  2 02:06:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * First official release.  This directory contains all the code
+       needed to internationalize own packages.  It provides functions
+       which allow to use the X/Open catgets function with an interface
+       like the Uniforum gettext function.  For system which does not
+       have neither of those a complete implementation is provided.
index 19ed4a7..060ef49 100644 (file)
@@ -1,5 +1,5 @@
-# Makefile for directory with message catalog handling in GNU NLS Utilities.
-# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+# Makefile for directory with message catalog handling library of GNU gettext
+# Copyright (C) 1995-1998, 2000-2005 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
@@ -13,7 +13,7 @@
 #
 # 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,
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 # USA.
 
 PACKAGE = @PACKAGE@
@@ -24,7 +24,7 @@ SHELL = /bin/sh
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 top_builddir = ..
-VPATH = @srcdir@
+VPATH = $(srcdir)
 
 prefix = @prefix@
 exec_prefix = @exec_prefix@
@@ -40,7 +40,7 @@ subdir = intl
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
 
 l = @INTL_LIBTOOL_SUFFIX_PREFIX@
 
@@ -52,57 +52,93 @@ YACC = @INTLBISON@ -y -d
 YFLAGS = --name-prefix=__gettext
 
 DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
--DLIBDIR=\"$(libdir)\" @DEFS@
+-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \
+-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
+-Dset_relocation_prefix=libintl_set_relocation_prefix \
+-Drelocate=libintl_relocate \
+-DDEPENDS_ON_LIBICONV=1 @DEFS@
 CPPFLAGS = @CPPFLAGS@
 CFLAGS = @CFLAGS@
 LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
 
 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
+HEADERS = \
+  gmo.h \
+  gettextP.h \
+  hash-string.h \
+  loadinfo.h \
+  plural-exp.h \
+  eval-plural.h \
+  localcharset.h \
+  relocatable.h \
+  xsize.h \
+  printf-args.h printf-args.c \
+  printf-parse.h wprintf-parse.h printf-parse.c \
+  vasnprintf.h vasnwprintf.h vasnprintf.c \
+  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 \
+  langprefs.c \
+  localename.c \
+  log.c \
+  printf.c \
+  osdep.c \
+  os2compat.c \
+  intl-compat.c
+OBJECTS = \
+  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 \
+  plural-exp.$lo \
+  localcharset.$lo \
+  relocatable.$lo \
+  langprefs.$lo \
+  localename.$lo \
+  log.$lo \
+  printf.$lo \
+  osdep.$lo \
+  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) $<
-.c.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) $<
-
-.y.c:
-       $(YACC) $(YFLAGS) --output $@ $<
-       rm -f $*.h
-
-.sin.sed:
-       sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
-       mv t-$@ $@
-
-INCLUDES = -I.. -I. -I$(top_srcdir)/intl
+DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
+libgnuintl.h_vms Makefile.vms \
+libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
+COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
 
 all: all-@USE_INCLUDED_LIBINTL@
 all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
@@ -118,23 +154,104 @@ libintl.a libgnuintl.a: $(OBJECTS)
 libintl.la libgnuintl.la: $(OBJECTS)
        $(LIBTOOL) --mode=link \
          $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
-         $(OBJECTS) @LIBICONV@ \
+         $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) -lc \
          -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
          -rpath $(libdir) \
          -no-undefined
 
+# 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=7
+LTV_REVISION=3
+LTV_AGE=4
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+
+.c.o:
+       $(COMPILE) $<
+
+.y.c:
+       $(YACC) $(YFLAGS) --output $@ $<
+       rm -f $*.h
+
+bindtextdom.lo: $(srcdir)/bindtextdom.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
+dcgettext.lo: $(srcdir)/dcgettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
+dgettext.lo: $(srcdir)/dgettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
+gettext.lo: $(srcdir)/gettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
+finddomain.lo: $(srcdir)/finddomain.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
+loadmsgcat.lo: $(srcdir)/loadmsgcat.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
+localealias.lo: $(srcdir)/localealias.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
+textdomain.lo: $(srcdir)/textdomain.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
+l10nflist.lo: $(srcdir)/l10nflist.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
+explodename.lo: $(srcdir)/explodename.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
+dcigettext.lo: $(srcdir)/dcigettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
+dcngettext.lo: $(srcdir)/dcngettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
+dngettext.lo: $(srcdir)/dngettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
+ngettext.lo: $(srcdir)/ngettext.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
+plural.lo: $(srcdir)/plural.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
+plural-exp.lo: $(srcdir)/plural-exp.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
+localcharset.lo: $(srcdir)/localcharset.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
+relocatable.lo: $(srcdir)/relocatable.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
+langprefs.lo: $(srcdir)/langprefs.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/langprefs.c
+localename.lo: $(srcdir)/localename.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
+log.lo: $(srcdir)/log.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
+printf.lo: $(srcdir)/printf.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
+osdep.lo: $(srcdir)/osdep.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
+intl-compat.lo: $(srcdir)/intl-compat.c
+       $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
+
+ref-add.sed: $(srcdir)/ref-add.sin
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
+       mv t-ref-add.sed ref-add.sed
+ref-del.sed: $(srcdir)/ref-del.sin
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
+       mv t-ref-del.sed ref-del.sed
+
+INCLUDES = -I. -I$(srcdir) -I..
+
+libgnuintl.h: $(srcdir)/libgnuintl.h.in
+       sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
+           -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
+           -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
+           -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
+         < $(srcdir)/libgnuintl.h.in > libgnuintl.h
+
 libintl.h: libgnuintl.h
-       cp $(srcdir)/libgnuintl.h libintl.h
+       cp libgnuintl.h libintl.h
 
-charset.alias: config.charset
+charset.alias: $(srcdir)/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.
@@ -142,17 +259,36 @@ check: all
 # 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 \
+       if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+          && test '@USE_INCLUDED_LIBINTL@' = yes; 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; \
+         if test "@RELOCATABLE@" = yes; then \
+           dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
+           if test -n "$$dependencies"; then \
+             rm -f $(DESTDIR)$(libdir)/libintl.la; \
+           fi; \
+         fi; \
        else \
          : ; \
        fi
-       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+       if test "$(PACKAGE)" = "gettext-tools" \
+          && test '@USE_INCLUDED_LIBINTL@' = no \
+          && test @GLIBC2@ != no; then \
          $(mkinstalldirs) $(DESTDIR)$(libdir); \
+         $(LIBTOOL) --mode=install \
+           $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
+         rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+         $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+         $(LIBTOOL) --mode=uninstall \
+           rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
          temp=$(DESTDIR)$(libdir)/t-charset.alias; \
          dest=$(DESTDIR)$(libdir)/charset.alias; \
          if test -f $(DESTDIR)$(libdir)/charset.alias; then \
@@ -181,11 +317,11 @@ install-exec: all
          : ; \
        fi
 install-data: all
-       if test "$(PACKAGE)" = "gettext"; then \
+       if test "$(PACKAGE)" = "gettext-tools"; 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)"; \
+         dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
          for file in $$dists; do \
            $(INSTALL_DATA) $(srcdir)/$$file \
                            $(DESTDIR)$(gettextsrcdir)/$$file; \
@@ -205,18 +341,53 @@ install-data: all
          : ; \
        fi
 
+install-strip: install
+
+installdirs:
+       if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+          && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+       else \
+         : ; \
+       fi
+       if test "$(PACKAGE)" = "gettext-tools" \
+          && test '@USE_INCLUDED_LIBINTL@' = no \
+          && test @GLIBC2@ != no; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir); \
+       else \
+         : ; \
+       fi
+       if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+         test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+         $(mkinstalldirs) $(DESTDIR)$(localedir); \
+       else \
+         : ; \
+       fi
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+       else \
+         : ; \
+       fi
+
 # Define this as empty until I found a useful application.
 installcheck:
 
 uninstall:
-       if test "$(PACKAGE)" = "gettext" \
-          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+       if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+          && test '@USE_INCLUDED_LIBINTL@' = yes; then \
          rm -f $(DESTDIR)$(includedir)/libintl.h; \
          $(LIBTOOL) --mode=uninstall \
            rm -f $(DESTDIR)$(libdir)/libintl.$la; \
        else \
          : ; \
        fi
+       if test "$(PACKAGE)" = "gettext-tools" \
+          && test '@USE_INCLUDED_LIBINTL@' = no \
+          && test @GLIBC2@ != no; then \
+         rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+       else \
+         : ; \
+       fi
        if test '@USE_INCLUDED_LIBINTL@' = yes; then \
          if test -f $(DESTDIR)$(libdir)/charset.alias; then \
            temp=$(DESTDIR)$(libdir)/t-charset.alias; \
@@ -243,25 +414,36 @@ uninstall:
        else \
          : ; \
        fi
-       if test "$(PACKAGE)" = "gettext"; then \
-         for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
            rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
          done; \
        else \
          : ; \
        fi
 
-info dvi:
+info dvi ps pdf html:
 
 $(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
+bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
+explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
+dcigettext.$lo: $(srcdir)/eval-plural.h
+localcharset.$lo: $(srcdir)/localcharset.h
+localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
+printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
 
 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)
@@ -269,15 +451,15 @@ 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 *.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; then \
+       if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
          rm -f ChangeLog.inst $(DISTFILES.normal); \
        else \
          : ; \
@@ -292,21 +474,26 @@ maintainer-clean: distclean
 # 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)"; \
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         ; \
        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
+         if test "$(PACKAGE)" = "gettext-runtime"; 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; \
+           cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \
+         done; \
+       fi
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       cd $(top_builddir) && $(SHELL) ./config.status
+# This would be more efficient, but doesn't work any more with autoconf-2.57,
+# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
+#      cd $(top_builddir) && 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.
index cb8a01a..ea89761 100644 (file)
@@ -1 +1 @@
-GNU gettext library from gettext-0.10.40
+GNU gettext library from gettext-0.14.5
index c6a9bd1..7a26062 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the bindtextdomain(3) function
-   Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+   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
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
@@ -45,8 +45,8 @@
    names than the internal variables in GNU libc, otherwise programs
    using libintl.a cannot be linked statically.  */
 #if !defined _LIBC
-# define _nl_default_dirname _nl_default_dirname__
-# define _nl_domain_bindings _nl_domain_bindings__
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
 #endif
 
 /* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
 
 /* Contains the default location of the message catalogs.  */
 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.  */
 extern struct binding *_nl_domain_bindings;
 
 /* 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
@@ -77,15 +82,10 @@ __libc_rwlock_define (extern, _nl_state_lock)
 #  define strdup(str) __strdup (str)
 # endif
 #else
-# define BINDTEXTDOMAIN bindtextdomain__
-# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
 #endif
 
-/* Prototypes for local functions.  */
-static void set_binding_values PARAMS ((const char *domainname,
-                                       const char **dirnamep,
-                                       const char **codesetp));
-     
 /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
    to be used for the DOMAINNAME message catalog.
    If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
@@ -93,10 +93,8 @@ static void set_binding_values PARAMS ((const char *domainname,
    If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
    modified nor returned.  */
 static void
-set_binding_values (domainname, dirnamep, codesetp)
-     const char *domainname;
-     const char **dirnamep;
-     const char **codesetp;
+set_binding_values (const char *domainname,
+                   const char **dirnamep, const char **codesetp)
 {
   struct binding *binding;
   int modified;
@@ -146,8 +144,8 @@ set_binding_values (domainname, dirnamep, codesetp)
              char *result = binding->dirname;
              if (strcmp (dirname, result) != 0)
                {
-                 if (strcmp (dirname, _nl_default_dirname) == 0)
-                   result = (char *) _nl_default_dirname;
+                 if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+                   result = (char *) INTUSE(_nl_default_dirname);
                  else
                    {
 #if defined _LIBC || defined HAVE_STRDUP
@@ -162,7 +160,7 @@ set_binding_values (domainname, dirnamep, codesetp)
 
                  if (__builtin_expect (result != NULL, 1))
                    {
-                     if (binding->dirname != _nl_default_dirname)
+                     if (binding->dirname != INTUSE(_nl_default_dirname))
                        free (binding->dirname);
 
                      binding->dirname = result;
@@ -216,7 +214,7 @@ set_binding_values (domainname, dirnamep, codesetp)
     {
       /* Simply return the default values.  */
       if (dirnamep)
-       *dirnamep = _nl_default_dirname;
+       *dirnamep = INTUSE(_nl_default_dirname);
       if (codesetp)
        *codesetp = NULL;
     }
@@ -238,11 +236,11 @@ set_binding_values (domainname, dirnamep, codesetp)
 
          if (dirname == NULL)
            /* The default value.  */
-           dirname = _nl_default_dirname;
+           dirname = INTUSE(_nl_default_dirname);
          else
            {
-             if (strcmp (dirname, _nl_default_dirname) == 0)
-               dirname = _nl_default_dirname;
+             if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+               dirname = INTUSE(_nl_default_dirname);
              else
                {
                  char *result;
@@ -265,7 +263,7 @@ set_binding_values (domainname, dirnamep, codesetp)
        }
       else
        /* The default value.  */
-       new_binding->dirname = (char *) _nl_default_dirname;
+       new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
 
       new_binding->codeset_cntr = 0;
 
@@ -321,7 +319,7 @@ set_binding_values (domainname, dirnamep, codesetp)
       if (0)
        {
        failed_codeset:
-         if (new_binding->dirname != _nl_default_dirname)
+         if (new_binding->dirname != INTUSE(_nl_default_dirname))
            free (new_binding->dirname);
        failed_dirname:
          free (new_binding);
@@ -343,9 +341,7 @@ set_binding_values (domainname, dirnamep, codesetp)
 /* Specify that the DOMAINNAME message catalog will be found
    in DIRNAME rather than in the system locale data base.  */
 char *
-BINDTEXTDOMAIN (domainname, dirname)
-     const char *domainname;
-     const char *dirname;
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
 {
   set_binding_values (domainname, &dirname, NULL);
   return (char *) dirname;
@@ -354,9 +350,7 @@ BINDTEXTDOMAIN (domainname, dirname)
 /* Specify the character encoding in which the messages from the
    DOMAINNAME message catalog will be returned.  */
 char *
-BIND_TEXTDOMAIN_CODESET (domainname, codeset)
-     const char *domainname;
-     const char *codeset;
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
 {
   set_binding_values (domainname, NULL, &codeset);
   return (char *) codeset;
index f4f2611..9090c80 100644 (file)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Output a system dependent table of character encoding aliases.
 #
-#   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2004 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
@@ -15,7 +15,7 @@
 #
 #   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,
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 #   USA.
 #
 # The table consists of lines of the form
 # 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
+#       name              MIME?             used by which systems
+#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd darwin
+#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd darwin
+#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd darwin
+#   ISO-8859-3              Y   glibc solaris
+#   ISO-8859-4              Y   osf solaris freebsd darwin
+#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd darwin
+#   ISO-8859-6              Y   glibc aix hpux solaris
+#   ISO-8859-7              Y   glibc aix hpux irix osf solaris darwin
+#   ISO-8859-8              Y   glibc aix hpux osf solaris
+#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin
+#   ISO-8859-13                 glibc darwin
+#   ISO-8859-14                 glibc
+#   ISO-8859-15                 glibc aix osf solaris freebsd darwin
+#   KOI8-R                  Y   glibc solaris freebsd darwin
+#   KOI8-U                  Y   glibc freebsd darwin
+#   KOI8-T                      glibc
+#   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 darwin dos
+#   CP869                       dos
+#   CP874                       woe32 dos
+#   CP922                       aix
+#   CP932                       aix woe32 dos
+#   CP943                       aix
+#   CP949                       osf woe32 dos
+#   CP950                       woe32 dos
+#   CP1046                      aix
+#   CP1124                      aix
+#   CP1125                      dos
+#   CP1129                      aix
+#   CP1250                      woe32
+#   CP1251                      glibc solaris darwin woe32
+#   CP1252                      aix woe32
+#   CP1253                      woe32
+#   CP1254                      woe32
+#   CP1255                      glibc woe32
+#   CP1256                      woe32
+#   CP1257                      woe32
+#   GB2312                  Y   glibc aix hpux irix solaris freebsd darwin
+#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd darwin
+#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd darwin
+#   EUC-TW                      glibc aix hpux irix osf solaris
+#   BIG5                    Y   glibc aix hpux osf solaris freebsd darwin
+#   BIG5-HKSCS                  glibc solaris
+#   GBK                         glibc aix osf solaris woe32 dos
+#   GB18030                     glibc solaris
+#   SHIFT_JIS               Y   hpux osf solaris freebsd darwin
+#   JOHAB                       glibc solaris woe32
+#   TIS-620                     glibc aix hpux osf solaris
+#   VISCII                  Y   glibc
+#   TCVN5712-1                  glibc
+#   GEORGIAN-PS                 glibc
+#   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                   Y   glibc aix hpux osf solaris darwin
 #
 # Note: Names which are not marked as being a MIME name should not be used in
 # Internet protocols for information interchange (mail, news, etc.).
@@ -116,6 +121,105 @@ echo "# It was automatically generated from config.charset."
 # List of references, updated during installation:
 echo "# Packages using this file: "
 case "$os" in
+    linux-gnulibc1*)
+       # Linux libc5 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 "POSIX ASCII"
+       for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+                en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+                en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+                es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+                et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+                fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+                it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+                sv_FI sv_SE; do
+         echo "$l ISO-8859-1"
+         echo "$l.iso-8859-1 ISO-8859-1"
+         echo "$l.iso-8859-15 ISO-8859-15"
+         echo "$l.iso-8859-15@euro ISO-8859-15"
+         echo "$l@euro ISO-8859-15"
+         echo "$l.cp-437 CP437"
+         echo "$l.cp-850 CP850"
+         echo "$l.cp-1252 CP1252"
+         echo "$l.cp-1252@euro CP1252"
+         #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+         echo "$l.utf-8 UTF-8"
+         echo "$l.utf-8@euro UTF-8"
+       done
+       for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+                sl_SI sr sr_CS sr_YU; do
+         echo "$l ISO-8859-2"
+         echo "$l.iso-8859-2 ISO-8859-2"
+         echo "$l.cp-852 CP852"
+         echo "$l.cp-1250 CP1250"
+         echo "$l.utf-8 UTF-8"
+       done
+       for l in mk mk_MK ru ru_RU; do
+         echo "$l ISO-8859-5"
+         echo "$l.iso-8859-5 ISO-8859-5"
+         echo "$l.koi8-r KOI8-R"
+         echo "$l.cp-866 CP866"
+         echo "$l.cp-1251 CP1251"
+         echo "$l.utf-8 UTF-8"
+       done
+       for l in ar ar_SA; do
+         echo "$l ISO-8859-6"
+         echo "$l.iso-8859-6 ISO-8859-6"
+         echo "$l.cp-864 CP864"
+         #echo "$l.cp-868 CP868" # not a commonly used encoding
+         echo "$l.cp-1256 CP1256"
+         echo "$l.utf-8 UTF-8"
+       done
+       for l in el el_GR gr gr_GR; do
+         echo "$l ISO-8859-7"
+         echo "$l.iso-8859-7 ISO-8859-7"
+         echo "$l.cp-869 CP869"
+         echo "$l.cp-1253 CP1253"
+         echo "$l.cp-1253@euro CP1253"
+         echo "$l.utf-8 UTF-8"
+         echo "$l.utf-8@euro UTF-8"
+       done
+       for l in he he_IL iw iw_IL; do
+         echo "$l ISO-8859-8"
+         echo "$l.iso-8859-8 ISO-8859-8"
+         echo "$l.cp-862 CP862"
+         echo "$l.cp-1255 CP1255"
+         echo "$l.utf-8 UTF-8"
+       done
+       for l in tr tr_TR; do
+         echo "$l ISO-8859-9"
+         echo "$l.iso-8859-9 ISO-8859-9"
+         echo "$l.cp-857 CP857"
+         echo "$l.cp-1254 CP1254"
+         echo "$l.utf-8 UTF-8"
+       done
+       for l in lt lt_LT lv lv_LV; do
+         #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+         echo "$l ISO-8859-13"
+       done
+       for l in ru_UA uk uk_UA; do
+         echo "$l KOI8-U"
+       done
+       for l in zh zh_CN; do
+         #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+         echo "$l GB2312"
+       done
+       for l in ja ja_JP ja_JP.EUC; do
+         echo "$l EUC-JP"
+       done
+       for l in ko ko_KR; do
+         echo "$l EUC-KR"
+       done
+       for l in th th_TH; do
+         echo "$l TIS-620"
+       done
+       for l in fa fa_IR; do
+         #echo "$l ISIRI-3342" # a broken encoding
+         echo "$l.utf-8 UTF-8"
+       done
+       ;;
     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
@@ -217,6 +321,7 @@ case "$os" in
        echo "646 ASCII"
        echo "ISO8859-1 ISO-8859-1"
        echo "ISO8859-2 ISO-8859-2"
+       echo "ISO8859-3 ISO-8859-3"
        echo "ISO8859-4 ISO-8859-4"
        echo "ISO8859-5 ISO-8859-5"
        echo "ISO8859-6 ISO-8859-6"
@@ -225,20 +330,27 @@ case "$os" in
        echo "ISO8859-9 ISO-8859-9"
        echo "ISO8859-15 ISO-8859-15"
        echo "koi8-r KOI8-R"
+       echo "ansi-1251 CP1251"
        echo "BIG5 BIG5"
+       echo "Big5-HKSCS BIG5-HKSCS"
        echo "gb2312 GB2312"
+       echo "GBK GBK"
+       echo "GB18030 GB18030"
        echo "cns11643 EUC-TW"
        echo "5601 EUC-KR"
+       echo "ko_KR.johap92 JOHAB"
        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* | os2*)
        # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
        # localcharset.c falls back to using the full locale name
        # from the environment variables.
+       # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+       # reuse FreeBSD's locale data for OS/2.
        echo "C ASCII"
        echo "US-ASCII ASCII"
        for l in la_LN lt_LN; do
@@ -270,6 +382,91 @@ case "$os" in
        echo "ja_JP.Shift_JIS SHIFT_JIS"
        echo "ko_KR.EUC EUC-KR"
        ;;
+    netbsd*)
+       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-15 ISO-8859-15"
+       echo "eucCN GB2312"
+       echo "eucJP EUC-JP"
+       echo "eucKR EUC-KR"
+       echo "eucTW EUC-TW"
+       echo "BIG5 BIG5"
+       echo "SJIS SHIFT_JIS"
+       ;;
+    darwin[56]*)
+       # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+       # localcharset.c falls back to using the full locale name
+       # from the environment variables.
+       echo "C ASCII"
+       for l in en_AU en_CA en_GB en_US la_LN; do
+         echo "$l.US-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 nl_BE \
+                nl_NL no_NO pt_PT sv_SE; do
+         echo "$l ISO-8859-1"
+         echo "$l.ISO8859-1 ISO-8859-1"
+         echo "$l.ISO8859-15 ISO-8859-15"
+       done
+       for l in la_LN; do
+         echo "$l.ISO8859-1 ISO-8859-1"
+         echo "$l.ISO8859-15 ISO-8859-15"
+       done
+       for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+         echo "$l.ISO8859-2 ISO-8859-2"
+       done
+       for l in la_LN lt_LT; do
+         echo "$l.ISO8859-4 ISO-8859-4"
+       done
+       for l in ru_RU; do
+         echo "$l.KOI8-R KOI8-R"
+         echo "$l.ISO8859-5 ISO-8859-5"
+         echo "$l.CP866 CP866"
+       done
+       for l in bg_BG; do
+         echo "$l.CP1251 CP1251"
+       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 "ko_KR.EUC EUC-KR"
+       ;;
+    darwin*)
+       # Darwin 7.5 has nl_langinfo(CODESET), but it is useless:
+       # - It returns the empty string when LANG is set to a locale of the
+       #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+       #   LC_CTYPE file.
+       # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+       #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+       # - The documentation says:
+       #     "... all code that calls BSD system routines should ensure
+       #      that the const *char parameters of these routines are in UTF-8
+       #      encoding. All BSD system functions expect their string
+       #      parameters to be in UTF-8 encoding and nothing else."
+       #   It also says
+       #     "An additional caveat is that string parameters for files,
+       #      paths, and other file-system entities must be in canonical
+       #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+       #      characters are decomposed ..."
+       #   but this is not true: You can pass non-decomposed UTF-8 strings
+       #   to file system functions, and it is the OS which will convert
+       #   them to decomposed UTF-8 before accessing the file system.
+       # - The Apple Terminal application displays UTF-8 by default.
+       # - However, other applications are free to use different encodings:
+       #   - xterm uses ISO-8859-1 by default.
+       #   - TextEdit uses MacRoman by default.
+       # We prefer UTF-8 over decomposed UTF-8-MAC because one should
+       # minimize the use of decomposed Unicode. Unfortunately, through the
+       # Darwin file system, decomposed UTF-8 strings are leaked into user
+       # space nevertheless.
+       echo "* UTF-8"
+       ;;
     beos*)
        # BeOS has a single locale, and it has UTF-8 encoding.
        echo "* UTF-8"
@@ -284,7 +481,7 @@ case "$os" in
        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 "# and Bruno Haible <bruno@clisp.org>."
        echo "#"
        echo "C ASCII"
        # ISO-8859-1 languages
@@ -383,6 +580,7 @@ case "$os" in
        echo "sq CP852"
        echo "sq_AL CP852"
        echo "sr CP852"    # CP852 or CP866 or CP855 ??
+       echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
        echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
        # ISO-8859-3 languages
        echo "mt CP850"
@@ -394,8 +592,10 @@ case "$os" in
        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 ??
+       echo "ru CP866"
+       echo "ru_RU CP866"
+       echo "uk CP1125"
+       echo "uk_UA CP1125"
        # ISO-8859-6 languages
        echo "ar CP864"
        echo "ar_AE CP864"
index b7c9652..c2a63f0 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the dcgettext(3) 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
    under the terms of the GNU Library General Public License as published
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
 # define DCGETTEXT __dcgettext
 # define DCIGETTEXT __dcigettext
 #else
-# define DCGETTEXT dcgettext__
-# define DCIGETTEXT dcigettext__
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
 #endif
 
 /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
    locale.  */
 char *
-DCGETTEXT (domainname, msgid, category)
-     const char *domainname;
-     const char *msgid;
-     int category;
+DCGETTEXT (const char *domainname, const char *msgid, int category)
 {
   return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
 }
 
 #ifdef _LIBC
 /* Alias for function name in GNU C Library.  */
+INTDEF(__dcgettext)
 weak_alias (__dcgettext, dcgettext);
 #endif
index 2263c76..c7f4506 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the internal dcigettext function.
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000-2005 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
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for mempcpy().
 # define alloca __builtin_alloca
 # define HAVE_ALLOCA 1
 #else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-#  include <alloca.h>
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
 # else
-#  ifdef _AIX
- #pragma alloca
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
 #  else
-#   ifndef alloca
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
 char *alloca ();
+#    endif
 #   endif
 #  endif
 # endif
@@ -56,13 +61,7 @@ extern int errno;
 
 #include <stddef.h>
 #include <stdlib.h>
-
 #include <string.h>
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-#  define strchr index
-# endif
-#endif
 
 #if defined HAVE_UNISTD_H || defined _LIBC
 # include <unistd.h>
@@ -70,11 +69,26 @@ extern int errno;
 
 #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
 # include <sys/param.h>
 #endif
 
 #include "gettextP.h"
+#include "plural-exp.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
@@ -107,10 +121,10 @@ extern int errno;
    names than the internal variables in GNU libc, otherwise programs
    using libintl.a cannot be linked statically.  */
 #if !defined _LIBC
-# define _nl_default_default_domain _nl_default_default_domain__
-# define _nl_current_default_domain _nl_current_default_domain__
-# define _nl_default_dirname _nl_default_dirname__
-# define _nl_domain_bindings _nl_domain_bindings__
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
 #endif
 
 /* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
@@ -134,13 +148,17 @@ extern int errno;
 char *getwd ();
 #  define getcwd(buf, max) getwd (buf)
 # else
+#  if VMS
+#   define getcwd(buf, max) (getcwd) (buf, max, 0)
+#  else
 char *getcwd ();
+#  endif
 # endif
 # ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
+static char *stpcpy (char *dest, const char *src);
 # endif
 # ifndef HAVE_MEMPCPY
-static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+static void *mempcpy (void *dest, const void *src, size_t n);
 # endif
 #endif
 
@@ -182,8 +200,8 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
                         it may be concatenated to a directory pathname.
    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 */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
 # define ISSLASH(C) ((C) == '/' || (C) == '\\')
 # define HAS_DEVICE(P) \
     ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
@@ -198,16 +216,6 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
 # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
 #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
    are stored.  */
 struct known_translation_t
@@ -244,11 +252,8 @@ static void *root;
 # endif
 
 /* Function to compare two entries in the table of known translations.  */
-static int transcmp PARAMS ((const void *p1, const void *p2));
 static int
-transcmp (p1, p2)
-     const void *p1;
-     const void *p2;
+transcmp (const void *p1, const void *p2)
 {
   const struct known_translation_t *s1;
   const struct known_translation_t *s2;
@@ -272,41 +277,56 @@ transcmp (p1, p2)
 }
 #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
    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).  */
-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.  */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
 const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
 
 /* List with bindings of specific domains created by bindtextdomain()
    calls.  */
 struct binding *_nl_domain_bindings;
 
 /* Prototypes for local functions.  */
-static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
-                                   unsigned long int n,
-                                   const char *translation,
-                                   size_t translation_len))
+static char *plural_lookup (struct loaded_l10nfile *domain,
+                           unsigned long int n,
+                           const char *translation, size_t translation_len)
      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,
-                                                const char *categoryname))
+static const char *guess_category_value (int category,
+                                        const char *categoryname)
      internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category)    _nl_category_names[category]
+#else
+static const char *category_to_name (int category) internal_function;
+#endif
 
 
 /* For those loosing systems which don't have `alloca' we have to add
    some additional code emulating it.  */
 #ifdef HAVE_ALLOCA
 /* Nothing has to be done.  */
+# define freea(p) /* nothing */
 # define ADD_BLOCK(list, address) /* nothing */
-# define mem_free_BLOCKS(list) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
 #else
 struct block_list
 {
@@ -324,16 +344,18 @@ struct block_list
       (list) = newp;                                                         \
     }                                                                        \
   } while (0)
-# define mem_free_BLOCKS(list)                                               \
+# define FREE_BLOCKS(list)                                                   \
   do {                                                                       \
     while (list != NULL) {                                                   \
       struct block_list *old = list;                                         \
       list = list->next;                                                     \
+      free (old->address);                                                   \
       free (old);                                                            \
     }                                                                        \
   } while (0)
 # undef alloca
 # define alloca(size) (malloc (size))
+# define freea(p) free (p)
 #endif /* have alloca */
 
 
@@ -357,12 +379,12 @@ typedef unsigned char transmem_block_t;
 #ifdef _LIBC
 # define DCIGETTEXT __dcigettext
 #else
-# define DCIGETTEXT dcigettext__
+# define DCIGETTEXT libintl_dcigettext
 #endif
 
 /* Lock variable to protect the global data in the gettext implementation.  */
 #ifdef _LIBC
-__libc_rwlock_define_initialized (, _nl_state_lock)
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
 #endif
 
 /* Checking whether the binaries runs SUID must be done and glibc provides
@@ -395,17 +417,15 @@ static int enable_secure;
     }
 #endif
 
+/* Get the function to evaluate the plural expression.  */
+#include "eval-plural.h"
+
 /* Look up MSGID in the DOMAINNAME message catalog for the current
    CATEGORY locale and, if PLURAL is nonzero, search over string
    depending on the plural form determined by N.  */
 char *
-DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
-     const char *domainname;
-     const char *msgid1;
-     const char *msgid2;
-     int plural;
-     unsigned long int n;
-     int category;
+DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
+           int plural, unsigned long int n, int category)
 {
 #ifndef HAVE_ALLOCA
   struct block_list *block_list = NULL;
@@ -430,6 +450,15 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
   if (msgid1 == 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);
 
   /* If DOMAINNAME is NULL, we are interested in the default domain.  If
@@ -438,6 +467,12 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
   if (domainname == NULL)
     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
   msgid_len = strlen (msgid1) + 1;
 
@@ -450,6 +485,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
   search->category = category;
 
   foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+  freea (search);
   if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
     {
       /* Now deal with plural.  */
@@ -486,7 +522,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
     }
 
   if (binding == NULL)
-    dirname = (char *) _nl_default_dirname;
+    dirname = (char *) INTUSE(_nl_default_dirname);
   else if (IS_ABSOLUTE_PATH (binding->dirname))
     dirname = binding->dirname;
   else
@@ -514,17 +550,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
        }
 
       if (ret == NULL)
-       {
-         /* We cannot get the current working directory.  Don't signal an
-            error but simply return the default string.  */
-         mem_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);
-       }
+       /* We cannot get the current working directory.  Don't signal an
+          error but simply return the default string.  */
+       goto return_untranslated;
 
       stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
     }
@@ -581,16 +609,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
         domain.  Return the MSGID.  */
       if (strcmp (single_locale, "C") == 0
          || strcmp (single_locale, "POSIX") == 0)
-       {
-         mem_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);
-       }
-
+       break;
 
       /* Find structure describing the message catalog matching the
         DOMAINNAME and CATEGORY.  */
@@ -621,8 +640,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
            {
              /* Found the translation of MSGID1 in domain DOMAIN:
                 starting at RETVAL, RETLEN bytes.  */
-             mem_free_BLOCKS (block_list);
-             __set_errno (saved_errno);
+             FREE_BLOCKS (block_list);
 #if defined HAVE_TSEARCH || defined _LIBC
              if (foundp == NULL)
                {
@@ -661,6 +679,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
                  (*foundp)->translation_length = retlen;
                }
 #endif
+             __set_errno (saved_errno);
+
              /* Now deal with plural.  */
              if (plural)
                retval = plural_lookup (domain, n, retval, retlen);
@@ -670,19 +690,40 @@ 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 (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);
 }
 
 
 char *
 internal_function
-_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
-     struct loaded_l10nfile *domain_file;
-     struct binding *domainbinding;
-     const char *msgid;
-     size_t *lengthp;
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+             struct binding *domainbinding, const char *msgid,
+             size_t *lengthp)
 {
   struct loaded_domain *domain;
+  nls_uint32 nstrings;
   size_t act;
   char *result;
   size_t resultlen;
@@ -695,8 +736,10 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
 
   domain = (struct loaded_domain *) domain_file->data;
 
+  nstrings = domain->nstrings;
+
   /* Locate the MSGID and its translation.  */
-  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+  if (domain->hash_tab != NULL)
     {
       /* Use the hashing table.  */
       nls_uint32 len = strlen (msgid);
@@ -706,22 +749,30 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
 
       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)
            /* Hash table entry is empty.  */
            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
             are represented by strings with an embedded NUL.  */
-         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
-             && (strcmp (msgid,
-                         domain->data + W (domain->must_swap,
-                                           domain->orig_tab[nstr - 1].offset))
-                 == 0))
+         if (nstr < nstrings
+             ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+               && (strcmp (msgid,
+                           domain->data + W (domain->must_swap,
+                                             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;
            }
 
@@ -739,7 +790,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
       size_t top, bottom;
 
       bottom = 0;
-      top = domain->nstrings;
+      top = nstrings;
       while (bottom < top)
        {
          int cmp_val;
@@ -762,9 +813,17 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
  found:
   /* The translation was found at index ACT.  If we have to convert the
      string to use a different character set, this is the time.  */
-  result = ((char *) domain->data
-           + W (domain->must_swap, domain->trans_tab[act].offset));
-  resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+  if (act < nstrings)
+    {
+      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 (domain->codeset_cntr
@@ -797,8 +856,9 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
         NULs.  */
 
       if (domain->conv_tab == NULL
-         && ((domain->conv_tab = (char **) calloc (domain->nstrings,
-                                                   sizeof (char *)))
+         && ((domain->conv_tab =
+                (char **) calloc (nstrings + domain->n_sysdep_strings,
+                                  sizeof (char *)))
              == NULL))
        /* Mark that we didn't succeed allocating a table.  */
        domain->conv_tab = (char **) -1;
@@ -967,11 +1027,8 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
 /* Look up a plural variant.  */
 static char *
 internal_function
-plural_lookup (domain, n, translation, translation_len)
-     struct loaded_l10nfile *domain;
-     unsigned long int n;
-     const char *translation;
-     size_t translation_len;
+plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
+              const char *translation, size_t translation_len)
 {
   struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
   unsigned long int index;
@@ -1004,93 +1061,11 @@ plural_lookup (domain, n, translation, translation_len)
   return (char *) p;
 }
 
-
-/* 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;
-}
-
-
+#ifndef _LIBC
 /* Return string representation of locale CATEGORY.  */
 static const char *
 internal_function
-category_to_name (category)
-     int category;
+category_to_name (int category)
 {
   const char *retval;
 
@@ -1145,49 +1120,81 @@ category_to_name (category)
 
   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
+   or system-dependent defaults.  */
 static const char *
 internal_function
-guess_category_value (category, categoryname)
-     int category;
-     const char *categoryname;
+guess_category_value (int category, const char *categoryname)
 {
   const char *language;
-  const char *retval;
-
-  /* The highest priority value is the `LANGUAGE' environment
-     variable.  But we don't use the value if the currently selected
-     locale is the C locale.  This is a GNU extension.  */
-  language = getenv ("LANGUAGE");
-  if (language != NULL && language[0] == '\0')
-    language = NULL;
+  const char *locale;
+#ifndef _LIBC
+  const char *language_default;
+  int locale_defaulted;
+#endif
 
-  /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+  /* We use the settings in the following order:
+     1. The value of the environment variable 'LANGUAGE'.  This is a GNU
+        extension.  Its value can be a colon-separated list of locale names.
+     2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'.
+        More precisely, the first among these that is set to a non-empty value.
+        This is how POSIX specifies it.  The value is a single locale name.
+     3. A system-dependent preference list of languages.  Its value can be a
+        colon-separated list of locale names.
+     4. A system-dependent default locale name.
+     This way:
+       - System-dependent settings can be overridden by environment variables.
+       - If the system provides both a list of languages and a default locale,
+         the former is used.  */
+
+  /* Fetch the locale name, through the POSIX method of looking to `LC_ALL',
      `LC_xxx', and `LANG'.  On some systems this can be done by the
      `setlocale' function itself.  */
-#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
-  retval = setlocale (category, NULL);
+#ifdef _LIBC
+  locale = __current_locale_name (category);
 #else
-  /* Setting of LC_ALL overwrites all other.  */
-  retval = getenv ("LC_ALL");
-  if (retval == NULL || retval[0] == '\0')
+  locale = _nl_locale_name_posix (category, categoryname);
+  locale_defaulted = 0;
+  if (locale == NULL)
     {
-      /* 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";
-       }
+      locale = _nl_locale_name_default ();
+      locale_defaulted = 1;
     }
 #endif
 
-  return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+  /* Ignore LANGUAGE and its system-dependent analogon 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" or system-dependent information.  We allow such programs
+        to use gettext().  */
+  if (strcmp (locale, "C") == 0)
+    return locale;
+
+  /* The highest priority value is the value of the 'LANGUAGE' environment
+     variable.  */
+  language = getenv ("LANGUAGE");
+  if (language != NULL && language[0] != '\0')
+    return language;
+#ifndef _LIBC
+  /* The next priority value is the locale name, if not defaulted.  */
+  if (locale_defaulted)
+    {
+      /* The next priority value is the default language preferences list. */
+      language_default = _nl_language_preferences_default ();
+      if (language_default != NULL)
+        return language_default;
+    }
+  /* The least priority value is the locale name, if defaulted.  */
+#endif
+  return locale;
 }
 
 /* @@ begin of epilog @@ */
@@ -1198,9 +1205,7 @@ guess_category_value (category, categoryname)
    to be defined.  */
 #if !_LIBC && !HAVE_STPCPY
 static char *
-stpcpy (dest, src)
-     char *dest;
-     const char *src;
+stpcpy (char *dest, const char *src)
 {
   while ((*dest++ = *src++) != '\0')
     /* Do nothing. */ ;
@@ -1210,10 +1215,7 @@ stpcpy (dest, src)
 
 #if !_LIBC && !HAVE_MEMPCPY
 static void *
-mempcpy (dest, src, n)
-     void *dest;
-     const void *src;
-     size_t n;
+mempcpy (void *dest, const void *src, size_t n)
 {
   return (void *) ((char *) memcpy (dest, src, n) + n);
 }
@@ -1223,8 +1225,7 @@ mempcpy (dest, src, n)
 #ifdef _LIBC
 /* If we want to free all resources we have to do some work at
    program's end.  */
-static void __attribute__ ((unused))
-free_mem (void)
+libc_freeres_fn (free_mem)
 {
   void *old;
 
@@ -1232,7 +1233,7 @@ free_mem (void)
     {
       struct binding *oldp = _nl_domain_bindings;
       _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.  */
        free (oldp->dirname);
       free (oldp->codeset);
@@ -1254,6 +1255,4 @@ free_mem (void)
       free (old);
     }
 }
-
-text_set_element (__libc_subfreeres, free_mem);
 #endif
index c16af21..eb36833 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the dcngettext(3) 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
    under the terms of the GNU Library General Public License as published
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
 # define DCNGETTEXT __dcngettext
 # define DCIGETTEXT __dcigettext
 #else
-# define DCNGETTEXT dcngettext__
-# define DCIGETTEXT dcigettext__
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
 #endif
 
 /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
    locale.  */
 char *
-DCNGETTEXT (domainname, msgid1, msgid2, n, category)
-     const char *domainname;
-     const char *msgid1;
-     const char *msgid2;
-     unsigned long int n;
-     int category;
+DCNGETTEXT (const char *domainname,
+           const char *msgid1, const char *msgid2, unsigned long int n,
+           int category)
 {
   return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
 }
index 3651207..9b0d0de 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the dgettext(3) function.
-   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+   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
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
+#include "gettextP.h"
+
 #include <locale.h>
 
-#include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
    prefix.  So we have to make a difference here.  */
 #ifdef _LIBC
 # define DGETTEXT __dgettext
-# define DCGETTEXT __dcgettext
+# define DCGETTEXT INTUSE(__dcgettext)
 #else
-# define DGETTEXT dgettext__
-# define DCGETTEXT dcgettext__
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
 #endif
 
 /* Look up MSGID in the DOMAINNAME message catalog of the current
    LC_MESSAGES locale.  */
 char *
-DGETTEXT (domainname, msgid)
-     const char *domainname;
-     const char *msgid;
+DGETTEXT (const char *domainname, const char *msgid)
 {
   return DCGETTEXT (domainname, msgid, LC_MESSAGES);
 }
index f214e95..3278438 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the dngettext(3) function.
-   Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
+   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
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
+#include "gettextP.h"
+
 #include <locale.h>
 
-#include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
 # define DNGETTEXT __dngettext
 # define DCNGETTEXT __dcngettext
 #else
-# define DNGETTEXT dngettext__
-# define DCNGETTEXT dcngettext__
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
 #endif
 
 /* Look up MSGID in the DOMAINNAME message catalog of the current
    LC_MESSAGES locale and skip message according to the plural form.  */
 char *
-DNGETTEXT (domainname, msgid1, msgid2, n)
-     const char *domainname;
-     const char *msgid1;
-     const char *msgid2;
-     unsigned long int n;
+DNGETTEXT (const char *domainname,
+          const char *msgid1, const char *msgid2, unsigned long int n)
 {
   return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
 }
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
new file mode 100644 (file)
index 0000000..dacd003
--- /dev/null
@@ -0,0 +1,108 @@
+/* Plural expression evaluation.
+   Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value.  */
+STATIC
+unsigned long int
+internal_function
+plural_eval (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;
+}
index 2985064..1361418 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
    This program is free software; you can redistribute it and/or modify it
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
@@ -38,8 +38,7 @@
 /* @@ end of prolog @@ */
 
 char *
-_nl_find_language (name)
-     const char *name;
+_nl_find_language (const char *name)
 {
   while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
         && name[0] != '+' && name[0] != ',')
@@ -50,17 +49,11 @@ _nl_find_language (name)
 
 
 int
-_nl_explode_name (name, language, modifier, territory, codeset,
-                 normalized_codeset, special, sponsor, revision)
-     char *name;
-     const char **language;
-     const char **modifier;
-     const char **territory;
-     const char **codeset;
-     const char **normalized_codeset;
-     const char **special;
-     const char **sponsor;
-     const char **revision;
+_nl_explode_name (char *name,
+                 const char **language, const char **modifier,
+                 const char **territory, const char **codeset,
+                 const char **normalized_codeset, const char **special,
+                 const char **sponsor, const char **revision)
 {
   enum { undecided, xpg, cen } syntax;
   char *cp;
index 2f103d5..498f858 100644 (file)
@@ -1,5 +1,5 @@
 /* Handle list of needed message catalogs
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@gnu.org>, 1995.
 
    This program is free software; you can redistribute it and/or modify it
@@ -14,7 +14,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
@@ -47,11 +47,8 @@ static struct loaded_l10nfile *_nl_loaded_domains;
    established bindings.  */
 struct loaded_l10nfile *
 internal_function
-_nl_find_domain (dirname, locale, domainname, domainbinding)
-     const char *dirname;
-     char *locale;
-     const char *domainname;
-     struct binding *domainbinding;
+_nl_find_domain (const char *dirname, char *locale,
+                const char *domainname, struct binding *domainbinding)
 {
   struct loaded_l10nfile *retval;
   const char *language;
@@ -178,8 +175,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
 
 
 #ifdef _LIBC
-static void __attribute__ ((unused))
-free_mem (void)
+libc_freeres_fn (free_mem)
 {
   struct loaded_l10nfile *runp = _nl_loaded_domains;
 
@@ -193,6 +189,4 @@ free_mem (void)
       free (here);
     }
 }
-
-text_set_element (__libc_subfreeres, free_mem);
 #endif
index 22a6c24..d82d439 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of gettext(3) function.
-   Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
+   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
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifdef HAVE_CONFIG_H
    prefix.  So we have to make a difference here.  */
 #ifdef _LIBC
 # define GETTEXT __gettext
-# define DCGETTEXT __dcgettext
+# define DCGETTEXT INTUSE(__dcgettext)
 #else
-# define GETTEXT gettext__
-# define DCGETTEXT dcgettext__
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
 #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).  */
 char *
-GETTEXT (msgid)
-     const char *msgid;
+GETTEXT (const char *msgid)
 {
   return DCGETTEXT (NULL, msgid, LC_MESSAGES);
 }
index 43de1cd..0816bfb 100644 (file)
@@ -1,5 +1,5 @@
 /* Header describing internals of libintl library.
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000-2005 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
 
    This program is free software; you can redistribute it and/or modify it
@@ -14,7 +14,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifndef _GETTEXTP_H
 
 #include "loadinfo.h"
 
-#include "gettext.h"           /* Get nls_uint32.  */
+#include "gmo.h"               /* Get nls_uint32.  */
 
 /* @@ end of prolog @@ */
 
-#ifndef PARAMS
-# if __STDC__
-#  define PARAMS(args) args
-# else
-#  define PARAMS(args) ()
-# endif
-#endif
-
 #ifndef internal_function
 # define internal_function
 #endif
 
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
 /* Tell the compiler when a conditional or integer expression is
    almost always true or almost always false.  */
 #ifndef HAVE_BUILTIN_EXPECT
@@ -72,63 +68,50 @@ SWAP (i)
 #endif
 
 
-/* This is the representation of the expressions to determine the
-   plural form.  */
-struct expression
+/* In-memory representation of system dependent string.  */
+struct sysdep_string_desc
 {
-  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,                    /* 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;
+  /* Length of addressed string, including the trailing NUL.  */
+  size_t length;
+  /* Pointer to addressed string.  */
+  const char *pointer;
 };
 
-/* 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.  */
 struct loaded_domain
 {
+  /* Pointer to memory containing the .mo file.  */
   const char *data;
+  /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed.  */
   int use_mmap;
+  /* Size of mmap()ed memory.  */
   size_t mmap_size;
+  /* 1 if the .mo file uses a different endianness than this machine.  */
   int must_swap;
+  /* Pointer to additional malloc()ed memory.  */
+  void *malloced;
+
+  /* Number of static strings pairs.  */
   nls_uint32 nstrings;
-  struct string_desc *orig_tab;
-  struct string_desc *trans_tab;
+  /* Pointer to descriptors of original strings in the file.  */
+  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_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;
 #ifdef _LIBC
   __gconv_t conv;
@@ -167,84 +150,67 @@ struct binding
    This variable is part of the external ABI of the GNU libintl.  */
 extern int _nl_msg_cat_cntr;
 
-struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
-                                                char *__locale,
-                                                const char *__domainname,
-                                             struct binding *__domainbinding))
+#ifndef _LIBC
+const char *_nl_language_preferences_default (void);
+const char *_nl_locale_name_posix (int category, const char *categoryname);
+const char *_nl_locale_name_default (void);
+const char *_nl_locale_name (int category, const char *categoryname);
+#endif
+
+struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
+                                        const char *__domainname,
+                                        struct binding *__domainbinding)
      internal_function;
-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
-                             struct binding *__domainbinding))
+void _nl_load_domain (struct loaded_l10nfile *__domain,
+                     struct binding *__domainbinding)
      internal_function;
-void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+void _nl_unload_domain (struct loaded_domain *__domain)
      internal_function;
-const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
-                                         struct loaded_domain *__domain,
-                                         struct binding *__domainbinding))
+const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
+                                 struct loaded_domain *__domain,
+                                 struct binding *__domainbinding)
      internal_function;
-void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+void _nl_free_domain_conv (struct loaded_domain *__domain)
      internal_function;
 
-char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
-                           struct binding *domainbinding,
-                           const char *msgid, size_t *lengthp))
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+                   struct binding *domainbinding, const char *msgid,
+                   size_t *lengthp)
      internal_function;
 
 #ifdef _LIBC
-extern char *__gettext PARAMS ((const char *__msgid));
-extern char *__dgettext PARAMS ((const char *__domainname,
-                                const char *__msgid));
-extern char *__dcgettext PARAMS ((const char *__domainname,
-                                 const char *__msgid, int __category));
-extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
-                                unsigned long int __n));
-extern char *__dngettext PARAMS ((const char *__domainname,
-                                 const char *__msgid1, const char *__msgid2,
-                                 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));
+extern char *__gettext (const char *__msgid);
+extern char *__dgettext (const char *__domainname, const char *__msgid);
+extern char *__dcgettext (const char *__domainname, const char *__msgid,
+                         int __category);
+extern char *__ngettext (const char *__msgid1, const char *__msgid2,
+                        unsigned long int __n);
+extern char *__dngettext (const char *__domainname,
+                         const char *__msgid1, const char *__msgid2,
+                         unsigned long int n);
+extern char *__dcngettext (const char *__domainname,
+                          const char *__msgid1, const char *__msgid2,
+                          unsigned long int __n, int __category);
+extern char *__dcigettext (const char *__domainname,
+                          const char *__msgid1, const char *__msgid2,
+                          int __plural, unsigned long int __n,
+                          int __category);
+extern char *__textdomain (const char *__domainname);
+extern char *__bindtextdomain (const char *__domainname,
+                              const char *__dirname);
+extern char *__bind_textdomain_codeset (const char *__domainname,
+                                       const char *__codeset);
 #else
-extern char *gettext__ PARAMS ((const char *__msgid));
-extern char *dgettext__ PARAMS ((const char *__domainname,
-                                const char *__msgid));
-extern char *dcgettext__ PARAMS ((const char *__domainname,
-                                 const char *__msgid, int __category));
-extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
-                                unsigned long int __n));
-extern char *dngettext__ PARAMS ((const char *__domainname,
-                                 const char *__msgid1, const char *__msgid2,
-                                 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));
+/* Declare the exported libintl_* functions, in a way that allows us to
+   call them under their real name.  */
+# undef _INTL_REDIRECT_INLINE
+# undef _INTL_REDIRECT_MACROS
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+extern char *libintl_dcigettext (const char *__domainname,
+                                const char *__msgid1, const char *__msgid2,
+                                int __plural, unsigned long int __n,
+                                int __category);
 #endif
 
 /* @@ begin of epilog @@ */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644 (file)
index 0000000..26515fe
--- /dev/null
@@ -0,0 +1,149 @@
+/* Description of GNU message catalog format: general file layout.
+   Copyright (C) 1995, 1997, 2000-2002, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   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
+   when cross-compiling.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+
+  /* The following are only used in .mo files with major revision 0 or 1.  */
+
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translated strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hash table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hash table entry.  */
+  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
+{
+  /* Length of addressed string, not including the trailing NUL.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  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 @@ */
+
+#endif /* gettext.h  */
index ccb7acc..2c9a3a5 100644 (file)
@@ -1,5 +1,5 @@
 /* Description of GNU message catalog format: string hashing function.
-   Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1997-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
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 /* @@ end of prolog @@ */
 
-#ifndef PARAMS
-# if __STDC__
-#  define PARAMS(Args) Args
-# else
-#  define PARAMS(Args) ()
-# endif
-#endif
-
 /* We assume to have `unsigned long int' value with at least 32 bits.  */
 #define HASHWORDBITS 32
 
 /* Defines the so called `hashpjw' function by P.J. Weinberger
    [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
    1986, 1987 Bell Telephone Laboratories, Inc.]  */
-static unsigned long int hash_string PARAMS ((const char *__str_param));
-
 static inline unsigned long int
-hash_string (str_param)
-     const char *str_param;
+hash_string (const char *str_param)
 {
   unsigned long int hval, g;
   const char *str = str_param;
@@ -47,7 +36,7 @@ hash_string (str_param)
   while (*str != '\0')
     {
       hval <<= 4;
-      hval += (unsigned long int) *str++;
+      hval += (unsigned char) *str++;
       g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
       if (g != 0)
        {
index 0a06ce9..15be09c 100644 (file)
@@ -1,6 +1,6 @@
 /* intl-compat.c - Stub functions to call gettext functions from GNU gettext
    Library.
-   Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
+   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
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    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.  */
+/* 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 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;
+gettext (const char *msgid)
 {
-  return gettext__ (msgid);
+  return libintl_gettext (msgid);
 }
 
 
+DLL_EXPORTED
 char *
-dgettext (domainname, msgid)
-     const char *domainname;
-     const char *msgid;
+dgettext (const char *domainname, const char *msgid)
 {
-  return dgettext__ (domainname, msgid);
+  return libintl_dgettext (domainname, msgid);
 }
 
 
+DLL_EXPORTED
 char *
-dcgettext (domainname, msgid, category)
-     const char *domainname;
-     const char *msgid;
-     int category;
+dcgettext (const char *domainname, const char *msgid, int category)
 {
-  return dcgettext__ (domainname, msgid, category);
+  return libintl_dcgettext (domainname, msgid, category);
 }
 
 
+DLL_EXPORTED
 char *
-ngettext (msgid1, msgid2, n)
-     const char *msgid1;
-     const char *msgid2;
-     unsigned long int n;
+ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
 {
-  return ngettext__ (msgid1, msgid2, 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;
+dngettext (const char *domainname,
+          const char *msgid1, const char *msgid2, unsigned long int n)
 {
-  return dngettext__ (domainname, msgid1, msgid2, 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;
+dcngettext (const char *domainname,
+           const char *msgid1, const char *msgid2, unsigned long int n,
+           int category)
 {
-  return dcngettext__ (domainname, msgid1, msgid2, n, category);
+  return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
 }
 
 
+DLL_EXPORTED
 char *
-textdomain (domainname)
-     const char *domainname;
+textdomain (const char *domainname)
 {
-  return textdomain__ (domainname);
+  return libintl_textdomain (domainname);
 }
 
 
+DLL_EXPORTED
 char *
-bindtextdomain (domainname, dirname)
-     const char *domainname;
-     const char *dirname;
+bindtextdomain (const char *domainname, const char *dirname)
 {
-  return bindtextdomain__ (domainname, dirname);
+  return libintl_bindtextdomain (domainname, dirname);
 }
 
 
+DLL_EXPORTED
 char *
-bind_textdomain_codeset (domainname, codeset)
-     const char *domainname;
-     const char *codeset;
+bind_textdomain_codeset (const char *domainname, const char *codeset)
 {
-  return bind_textdomain_codeset__ (domainname, codeset);
+  return libintl_bind_textdomain_codeset (domainname, codeset);
 }
index 8e2605b..0501b97 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
    This program is free software; you can redistribute it and/or modify it
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for stpcpy().
 #endif
 
 #include <string.h>
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-#  define strchr index
-# endif
-#endif
 
 #if defined _LIBC || defined HAVE_ARGZ_H
 # include <argz.h>
 # endif
 #else
 # ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
+static char *stpcpy (char *dest, const char *src);
 # 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 __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, 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.  */
 
 #if !defined _LIBC && !defined HAVE___ARGZ_COUNT
 /* Returns the number of strings in ARGZ.  */
-static size_t argz_count__ PARAMS ((const char *argz, size_t len));
-
 static size_t
-argz_count__ (argz, len)
-     const char *argz;
-     size_t len;
+argz_count__ (const char *argz, size_t len)
 {
   size_t count = 0;
   while (len > 0)
@@ -90,18 +99,17 @@ argz_count__ (argz, len)
 }
 # undef __argz_count
 # 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 */
 
 #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
 /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
    except the last into the character SEP.  */
-static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
-
 static void
-argz_stringify__ (argz, len, sep)
-     char *argz;
-     size_t len;
-     int sep;
+argz_stringify__ (char *argz, size_t len, int sep)
 {
   while (len > 0)
     {
@@ -114,17 +122,16 @@ argz_stringify__ (argz, len, sep)
 }
 # undef __argz_stringify
 # 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 */
 
 #if !defined _LIBC && !defined HAVE___ARGZ_NEXT
-static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
-                                 const char *entry));
-
 static char *
-argz_next__ (argz, argz_len, entry)
-     char *argz;
-     size_t argz_len;
-     const char *entry;
+argz_next__ (char *argz, size_t argz_len, const char *entry)
 {
   if (entry)
     {
@@ -145,11 +152,8 @@ argz_next__ (argz, argz_len, entry)
 
 
 /* Return number of bits set in X.  */
-static int pop PARAMS ((int x));
-
 static inline int
-pop (x)
-     int x;
+pop (int x)
 {
   /* We assume that no more than 16 bits are used.  */
   x = ((x & ~0x5555) >> 1) + (x & 0x5555);
@@ -162,31 +166,27 @@ pop (x)
 
 \f
 struct loaded_l10nfile *
-_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
-                   territory, codeset, normalized_codeset, modifier, special,
-                   sponsor, revision, filename, do_allocate)
-     struct loaded_l10nfile **l10nfile_list;
-     const char *dirlist;
-     size_t dirlist_len;
-     int mask;
-     const char *language;
-     const char *territory;
-     const char *codeset;
-     const char *normalized_codeset;
-     const char *modifier;
-     const char *special;
-     const char *sponsor;
-     const char *revision;
-     const char *filename;
-     int do_allocate;
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+                   const char *dirlist, size_t dirlist_len,
+                   int mask, const char *language, const char *territory,
+                   const char *codeset, const char *normalized_codeset,
+                   const char *modifier, const char *special,
+                   const char *sponsor, const char *revision,
+                   const char *filename, int do_allocate)
 {
   char *abs_filename;
-  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile **lastp;
   struct loaded_l10nfile *retval;
   char *cp;
+  size_t dirlist_count;
   size_t entries;
   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.  */
   abs_filename = (char *) malloc (dirlist_len
                                  + strlen (language)
@@ -204,7 +204,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
                                  + (((mask & CEN_SPONSOR) != 0
                                      || (mask & CEN_REVISION) != 0)
                                     ? (1 + ((mask & CEN_SPONSOR) != 0
-                                            ? strlen (sponsor) + 1 : 0)
+                                            ? strlen (sponsor) : 0)
                                        + ((mask & CEN_REVISION) != 0
                                           ? strlen (revision) + 1 : 0)) : 0)
                                  + 1 + strlen (filename) + 1);
@@ -212,14 +212,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
   if (abs_filename == NULL)
     return NULL;
 
-  retval = NULL;
-  last = NULL;
-
   /* Construct file name.  */
-  memcpy (abs_filename, dirlist, dirlist_len);
-  __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
-  cp = abs_filename + (dirlist_len - 1);
-  *cp++ = '/';
+  cp = abs_filename;
+  if (dirlist_len > 0)
+    {
+      memcpy (cp, dirlist, dirlist_len);
+      __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+      cp += dirlist_len;
+      cp[-1] = '/';
+    }
+
   cp = stpcpy (cp, language);
 
   if ((mask & TERRITORY) != 0)
@@ -266,7 +268,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
 
   /* Look in list of already loaded domains whether it is already
      available.  */
-  last = NULL;
+  lastp = l10nfile_list;
   for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
     if (retval->filename != NULL)
       {
@@ -281,7 +283,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
            break;
          }
 
-       last = retval;
+       lastp = &retval->next;
       }
 
   if (retval != NULL || do_allocate == 0)
@@ -290,48 +292,66 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
       return retval;
     }
 
-  retval = (struct loaded_l10nfile *)
-    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
-                               * (1 << pop (mask))
-                               * sizeof (struct loaded_l10nfile *)));
+  dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+  /* Allocate a new 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)
     return NULL;
 
   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_NORM_CODESET) != 0));
   retval->data = NULL;
 
-  if (last == NULL)
-    {
-      retval->next = *l10nfile_list;
-      *l10nfile_list = retval;
-    }
-  else
-    {
-      retval->next = last->next;
-      last->next = retval;
-    }
+  retval->next = *lastp;
+  *lastp = retval;
 
   entries = 0;
-  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
-     a real file.  So we have to use the DIRLIST separation mechanism
-     of the inner loop.  */
-  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
-  for (; cnt >= 0; --cnt)
+  /* Recurse to fill the inheritance list of RETVAL.
+     If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+     entry does not correspond to a real file; retval->filename contains
+     colons.  In this case we loop across all elements of DIRLIST and
+     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
        && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
        && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
       {
-       /* Iterate over all elements of the DIRLIST.  */
-       char *dir = NULL;
-
-       while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
-              != NULL)
+       if (dirlist_count > 1)
+         {
+           /* Iterate over all elements of the DIRLIST.  */
+           char *dir = NULL;
+
+           while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+                  != 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++]
-           = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
-                                 language, territory, codeset,
+           = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+                                 cnt, language, territory, codeset,
                                  normalized_codeset, modifier, special,
                                  sponsor, revision, filename, 1);
       }
@@ -345,9 +365,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
    names.  The return value is dynamically allocated and has to be
    freed by the caller.  */
 const char *
-_nl_normalize_codeset (codeset, name_len)
-     const char *codeset;
-     size_t name_len;
+_nl_normalize_codeset (const char *codeset, size_t name_len)
 {
   int len = 0;
   int only_digit = 1;
@@ -394,9 +412,7 @@ _nl_normalize_codeset (codeset, name_len)
    to be defined.  */
 #if !_LIBC && !HAVE_STPCPY
 static char *
-stpcpy (dest, src)
-     char *dest;
-     const char *src;
+stpcpy (char *dest, const char *src)
 {
   while ((*dest++ = *src++) != '\0')
     /* Do nothing. */ ;
diff --git a/intl/langprefs.c b/intl/langprefs.c
new file mode 100644 (file)
index 0000000..20137b6
--- /dev/null
@@ -0,0 +1,130 @@
+/* Determine the user's language preferences.
+   Copyright (C) 2004-2005 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <string.h>
+# include <CFPreferences.h>
+# include <CFPropertyList.h>
+# include <CFArray.h>
+# include <CFString.h>
+extern void _nl_locale_name_canonicalize (char *name);
+#endif
+
+/* Determine the user's language preferences, as a colon separated list of
+   locale names in XPG syntax
+     language[_territory[.codeset]][@modifier]
+   The result must not be freed; it is statically allocated.
+   The LANGUAGE environment variable does not need to be considered; it is
+   already taken into account by the caller.  */
+
+const char *
+_nl_language_preferences_default (void)
+{
+#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
+  {
+    /* Cache the preferences list, since CoreFoundation calls are expensive.  */
+    static const char *cached_languages;
+    static int cache_initialized;
+
+    if (!cache_initialized)
+      {
+       CFTypeRef preferences =
+         CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"),
+                                    kCFPreferencesCurrentApplication);
+       if (preferences != NULL
+           && CFGetTypeID (preferences) == CFArrayGetTypeID ())
+         {
+           CFArrayRef prefArray = (CFArrayRef)preferences;
+           int n = CFArrayGetCount (prefArray);
+           char buf[256];
+           size_t size = 0;
+           int i;
+
+           for (i = 0; i < n; i++)
+             {
+               CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i);
+               if (element != NULL
+                   && CFGetTypeID (element) == CFStringGetTypeID ()
+                   && CFStringGetCString ((CFStringRef)element,
+                                          buf, sizeof (buf),
+                                          kCFStringEncodingASCII))
+                 {
+                   _nl_locale_name_canonicalize (buf);
+                   size += strlen (buf) + 1;
+                   /* Most GNU programs use msgids in English and don't ship
+                      an en.mo message catalog.  Therefore when we see "en"
+                      in the preferences list, arrange for gettext() to
+                      return the msgid, and ignore all further elements of
+                      the preferences list.  */
+                   if (strcmp (buf, "en") == 0)
+                     break;
+                 }
+               else
+                 break;
+             }
+           if (size > 0)
+             {
+               char *languages = (char *) malloc (size);
+
+               if (languages != NULL)
+                 {
+                   char *p = languages;
+
+                   for (i = 0; i < n; i++)
+                     {
+                       CFTypeRef element =
+                         CFArrayGetValueAtIndex (prefArray, i);
+                       if (element != NULL
+                           && CFGetTypeID (element) == CFStringGetTypeID ()
+                           && CFStringGetCString ((CFStringRef)element,
+                                                  buf, sizeof (buf),
+                                                  kCFStringEncodingASCII))
+                         {
+                           _nl_locale_name_canonicalize (buf);
+                           strcpy (p, buf);
+                           p += strlen (buf);
+                           *p++ = ':';
+                           if (strcmp (buf, "en") == 0)
+                             break;
+                         }
+                       else
+                         break;
+                     }
+                   *--p = '\0';
+
+                   cached_languages = languages;
+                 }
+             }
+         }
+       cache_initialized = 1;
+      }
+    if (cached_languages != NULL)
+      return cached_languages;
+  }
+#endif
+
+  return NULL;
+}
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
new file mode 100644 (file)
index 0000000..d1df17e
--- /dev/null
@@ -0,0 +1,383 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000-2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   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 || (major) == 1 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+#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 __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (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 (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 (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 (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 (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 (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 (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 (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 (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 (const char *__domainname,
+                                     const char *__codeset)
+       _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for format strings with positions in *printf(), following the
+   POSIX/XSI specification.
+   Note: These replacements for the *printf() functions are visible only
+   in source files that #include <libintl.h> or #include "gettext.h".
+   Packages that use *printf() in source files that don't refer to _()
+   or gettext() but for which the format string could be the return value
+   of _() or gettext() need to add this #include.  Oh well.  */
+
+#if !@HAVE_POSIX_PRINTF@
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list.  */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if @HAVE_SNPRINTF@
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if @HAVE_ASPRINTF@
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if @HAVE_WPRINTF@
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#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 (const char *orig_prefix,
+                                     const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
index b861260..d6408f2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 #ifndef _LOADINFO_H
 #define _LOADINFO_H    1
 
-#ifndef PARAMS
-# if __STDC__
-#  define PARAMS(args) args
-# else
-#  define PARAMS(args) ()
-# endif
-#endif
+/* 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 internal_function
 # define internal_function
@@ -77,33 +81,65 @@ struct loaded_l10nfile
    names.  Normalization allows the user to use any of the common
    names.  The return value is dynamically allocated and has to be
    freed by the caller.  */
-extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
-                                                 size_t name_len));
-
+extern const char *_nl_normalize_codeset (const char *codeset,
+                                         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 *
-_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
-                           const char *dirlist, size_t dirlist_len, int mask,
-                           const char *language, const char *territory,
-                           const char *codeset,
-                           const char *normalized_codeset,
-                           const char *modifier, const char *special,
-                           const char *sponsor, const char *revision,
-                           const char *filename, int do_allocate));
-
-
-extern const char *_nl_expand_alias PARAMS ((const char *name));
-
-/* normalized_codeset is dynamically allocated and has to be freed by
-   the caller.  */
-extern int _nl_explode_name PARAMS ((char *name, const char **language,
-                                    const char **modifier,
-                                    const char **territory,
-                                    const char **codeset,
-                                    const char **normalized_codeset,
-                                    const char **special,
-                                    const char **sponsor,
-                                    const char **revision));
-
-extern char *_nl_find_language PARAMS ((const char *name));
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+                   const char *dirlist, size_t dirlist_len, int mask,
+                   const char *language, const char *territory,
+                   const char *codeset, const char *normalized_codeset,
+                   const char *modifier, const char *special,
+                   const char *sponsor, const char *revision,
+                   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 (const char *name);
+
+/* Split a locale name NAME into its pieces: language, modifier,
+   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 (char *name, const char **language,
+                            const char **modifier, const char **territory,
+                            const char **codeset,
+                            const char **normalized_codeset,
+                            const char **special, const char **sponsor,
+                            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 (const char *name);
 
 #endif /* loadinfo.h */
index a06134a..0d59ad8 100644 (file)
@@ -1,5 +1,5 @@
 /* Load needed message catalogs.
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000-2004 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
@@ -13,7 +13,7 @@
 
    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,
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for mempcpy().
 #include <sys/stat.h>
 
 #ifdef __GNUC__
+# undef  alloca
 # define alloca __builtin_alloca
 # define HAVE_ALLOCA 1
 #else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-#  include <alloca.h>
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
 # else
-#  ifdef _AIX
- #pragma alloca
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
 #  else
-#   ifndef alloca
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
 char *alloca ();
+#    endif
 #   endif
 #  endif
 # endif
@@ -71,13 +77,380 @@ char *alloca ();
 # undef HAVE_MMAP
 #endif
 
-#include "gettext.h"
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
 #include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
 
 #ifdef _LIBC
 # include "../locale/localeinfo.h"
 #endif
 
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+   Note that our fallback values need not be literal strings, because we don't
+   use them with preprocessor string concatenation.  */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+  (sizeof (void *) == sizeof (long) ? "ld" : \
+   sizeof (void *) == sizeof (int) ? "d" : \
+   "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+  (sizeof (void *) == sizeof (long) ? "li" : \
+   sizeof (void *) == sizeof (int) ? "i" : \
+   "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+  (sizeof (void *) == sizeof (long) ? "lo" : \
+   sizeof (void *) == sizeof (int) ? "o" : \
+   "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+  (sizeof (void *) == sizeof (long) ? "lu" : \
+   sizeof (void *) == sizeof (int) ? "u" : \
+   "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+  (sizeof (void *) == sizeof (long) ? "lx" : \
+   sizeof (void *) == sizeof (int) ? "x" : \
+   "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+  (sizeof (void *) == sizeof (long) ? "lX" : \
+   sizeof (void *) == sizeof (int) ? "X" : \
+   "llX")
+#endif
+
 /* @@ end of prolog @@ */
 
 #ifdef _LIBC
@@ -91,16 +464,6 @@ char *alloca ();
 # 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
@@ -127,87 +490,287 @@ char *alloca ();
 # 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".  */
-static const struct expression plvar =
-{
-  .nargs = 0,
-  .operation = var,
-};
-static const struct expression plone =
-{
-  .nargs = 0,
-  .operation = num,
-  .val =
-  {
-    .num = 1
-  }
-};
-static struct expression germanic_plural =
+/* Expand a system dependent string segment.  Return NULL if unsupported.  */
+static const char *
+get_sysdep_segment_value (const char *name)
 {
-  .nargs = 2,
-  .operation = not_equal,
-  .val =
-  {
-    .args =
+  /* Test for an ISO C 99 section 7.8.1 format string directive.
+     Syntax:
+     P R I { d | i | o | u | x | X }
+     { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR }  */
+  /* We don't use a table of 14 times 6 'const char *' strings here, because
+     data relocations cost startup time.  */
+  if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
     {
-      [0] = (struct expression *) &plvar,
-      [1] = (struct expression *) &plone
+      if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+         || name[3] == 'x' || name[3] == 'X')
+       {
+         if (name[4] == '8' && name[5] == '\0')
+        &nb