Message-Id: <200105021633.MAA15973@delorie.com> From: "Juan Manuel Guerrero" Organization: Darmstadt University of Technology To: djgpp-announce AT delorie DOT com Date: Wed, 2 May 2001 16:42:31 +0200 Content-type: text/plain; charset=US-ASCII Subject: ANNOUNCE: DJGPP port of GNU gettext 0.10.37 Reply-To: djgpp AT delorie DOT com This is a port of GNU Gettext 0.10.37 to MSDOS/DJGPP. The GNU gettext package provides the needed tools and library functions for authors or maintainers of other packages or programs which they want to see internationalized. Starting with GNU Gettext 0.10.36, the official GNU gettext distribution has build-in DJGPP support, so you should be able to build future official GNU distributions out-of-the-box, as soon as djdev204.zip has been released. As long as you use djdev203.zip, you should ***ALWAYS*** download the DJGPP port of GNU gettext. The reason for this is the well known name clash existing between the BORLAND-compatibility gettext() function declared in conio.h provided by libc.a and the GNU gettext() function declared in libintl.h and provided by libintl.a. Only the binary package of the DJGPP ports of GNU gettext will provide the required files to patch your C library. The binaries, docs and source packages can be downloaded from Simtel.NET and mirrors as: It should be noticed that GNU gettext **DEPENDS** on the GNU libiconv distribution. This implies that the DJGPP port of libiconv (licv161b.zip or later) **MUST** be downloaded and installed too. The GNU libiconv port provides the required functionality for on-the-fly recoding from UNIX charsets to the appropiate MSDOS codepages to the DJGPP port of GNU gettext. This port is available from Simtel.NET and mirrors as: The installation of GNU libiconv is **NOT** optional, neither for rebuilding this package from sources nor for using this package in your own aplications. All future DJGPP ports of GNU distributions that want to provide NLS support will depend on **BOTH** ports, GNU gettext **AND** GNU libiconv. For using GNU gettext in your own projects, you must **ALWAYS** link with a command like this: -lintl -liconv If you link your projects with libintl.a but without libiconv.a you will get linker errors about unresolved external references in libintl.a. Users not interested in the on-the-fly recoding capability will have to reconfigure and recompile the DJGPP port of GNU gettext from scratch. In this case follow the following steps: 1) Deinstall **ANY** existing DJGPP port of libiconv. 2) Install the source package of the DJGPP port of GNU gettext in an appropiate directory. 3) From the gnu/gtxt-010.37 directory run the following commands: make distclean djgpp\config make make check 4) To install the products run the command: make install prefix=x:/some/appropiate/directory Replace prefix with an apropiate installation path. If no prefix is given at all the default prefix, this is /dev/env/DJDIR, will be used. Although, gettext has build-in DJGPP support, it can not be used with the stock djdev203.zip distribution. This is because a name conflict between a libc function and a libintl function existes. DJGPP's libc contains a BORLAND-compatibility function called gettext. This name collides with the gettext function provided by libintl. This DJGPP port of GNU gettext provides a new conio.h and a recompiled conio.o file that will remove the existing name clash. If you install the binary package you will find both files in the %DJDIR%/gnu/gtxt-010.37/djgpp/djdev-2.03 subdirectory (%DJDIR% is the path to your DJGPP installation tree). To update your libc.a proceed as follows: 1) Cd into the %DJDIR%/gnu/gtxt-010.37/djgpp/djdev-2.03 directory. First, you should backup your old header and library. For this task, run the following commands: copy %DJDIR%\include\conio.h %DJDIR%\include\conio.bak copy %DJDIR%\lib\libc.a %DJDIR%\lib\libc.bak Substitute %DJDIR% by the path to your DJGPP installation. 2) Now you can copy the new header into your include directory running the command: copy conio.h %DJDIR%\include 3) Now you can substitute the old conio.o file in libc.a with the new one. For this task you will need the `ar' program from binutils installed. Run the command: ar -rv %DJDIR%\lib\libc.a conio.o This will replace in your libc.a the existing conio.o by this new one. Substitute %DJDIR% by the path to your DJGPP installation. You are done. Now the name conflict between the BORLAND-Compatibility gettext function and the GNU gettext function has been removed. To remove this conflict, the BORLAND -compatibility function has been renamed into _conio_gettext. At the same time a code snippet has been added to conio.h. This code will check if libintl.h has **NOT** been included by the source file. If this is true a macro called gettext will be defined to _conio_gettext will be defined. At the same time, libintl.h will **ALWAYS** redefine the macro gettext to gettext. This implies that the keyword gettext is **ALWAYS** assigned to the GNU gettext function and never to the BORLAND_compatibility function from libc.a if both headers, libintl.h and conio.h, are included by the same source file. Of course, the goal of all this is not only to remove the name clash between both functions, but also to keep the user visible changes as small as possible. All this has the following implications: 1) Sources that use BORLAND-compatibility gettext() and do **NOT** use GNU gettext() can still be compiled without any change and/or difficulty with the new C library and header. This is because this sources will include conio.h and **NOT** libintl.h so the gettext keyword will continue making reference to the BORLAND-compatibility function defined in conio.c. In this case the updated DJGPP libc.a will not exhibit any user visible change. 2) Sources that use GNU gettext() and do **NOT** use BORLAND-compatibility gettext() can also still be compiled without any change and/or difficulty. This sources will include libintl.h and **NOT** conio.h so the sources will never see the BORLAND-compatibility gettext() declaration in conio.h. In this case the updated DJGPP libc.a will not exhibit any user visible change. 3) Sources that use GNU gettext() **AND** BORLAND-compatibility gettext() can **NOT** be compiled without some changes. This sources will include both headers libintl.h **AND** conio.h. In this case the keyword gettext will be reserved for the GNU gettext() and will ***NEVER*** make reference to the BORLAND-compatibility gettext function. This function will now be available as _conio_gettext. The user will have to replace *EVERY* occurence of the BORLAND-compatibility gettext function by new keyword _conio_gettext in the sources. ***PLEASE*** read the readme file in the djgpp directory to become familiar with all this. The binary package gtxt037b.zip contains all needed files to get NLS support for the following DJGPP ports: bison-1.28 (bsn128s.zip) enscript-1.5.0 (ens150s.zip) enscript-1.6.1 (ens161s.zip) enscript-1.6.2 (ens162s.zip) fileutils-3.16 (fil316s.zip) fileutils-4.0 (fil40s-beta1.zip from http://www.phekda.freeserve.co.uk/richdawe/djgpp/fileutils/) grep-2.4 (grep24s.zip) id-utils-3.2 (idu32s.zip) make-3.79.1 (mak3791s.zip) recode-3.5 (rcode35s.zip) sed-3.02.80 (sed-3.02.80.tar.gz from ftp://alpha.gnu.org/pub/gnu/sed) sharutils-4.2c (shar42cs.zip) sh-utils-2.0i (shl20is.zip) sh-utils-2.0j (shl20js.zip) tar-1.12a (tar112as.zip) texinfo-4.0 (txi40s.zip) textutils-2.0 (txt20s.zip) Send GNU gettext specific bug reports to . Send suggestions and bug reports concerning the DJGPP port to comp.os.msdos.djgpp or . Guerrero, Juan Manuel