This is the mail archive of the cygwin-apps@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFD: gettext, iconv, packaging...


Background:
the gettext package is currently build without libtool. The dll's are created by hand. Current dll version is "1" -- e.g. libintl1.dll. I've been messing around with gettext-0.11.2 lately, and attempting to use the libtool support (after re-libtoolizing with our "devel" version of libtool) to build the DLLs. I have discovered that the new DLL version number, as specified by -version-info, is actually "2".

So, I'll need to release a new "libintl2" package to coexist with the libintl1 package. Not a problem.

Discussion:
However, this would be a good time to change dependencies and things (otherwise, if we -- for instance -- LATER add libiconv as a dependency of gettext, then we'd need to bump the DLL number again -- and it would then be out of sync with the "official" versioning.

So, I propose to
a) add a libiconv dependency (*)
b) add a libexpat dependency -- yes, 0.11.2 can use expat if it is there.

(*) Yes, I'll provide/maintain libiconv-1.8.0 -- but I would appreciate if someone who has been whining about the lack of libiconv would take over maintainership of my zip and unzip packages (Gerrit??). They are low maintainance, but I would like to reduce the total number of packages I'm responsible for. I still feel that, as a non-multilingual, latin-alphabet user, I'm not the best person to answer questions about using libiconv -- but as long as the package passes its own built-in selftests...and heck, I've been "maintaining" the gettext package for years. So, consider this an "ITP: libiconv"

Packaging:
Bruno included some "packaging hints" in the latest distro. However, they don't really seem to address the issue of two-part libintl shared libs, and having multiple versions coexist, or 3rd party packages depending on specific versions of the shared lib... He suggests:
gettext:
bin/gettext.exe
bin/ngettext.exe
man pages for above
small amount of other docu
lib/libintl*
lib/charset.alias
share/locale/locale.alias
include/libintl.h

gettext-tools: requires gettext
bin/other tools
other man pages & info & docu
API docu
lib/libgettextlib* (**)
lib/libgettextsrc* (**)
lib/gettext/*
share/gettext/*
share/locale/*/LC_MESSAGES/gettext.mo
share/aclocal/*.m4
share/emacs/site-list/*

(*) of course, being unix centric, nothing is said about two-part shared libs (e.g. we know where libintl.dll.a should go and in which package, but nothing is said about cygintl-2.dll).

(**) The "other" tools -- msg*.exe, xgettext, gettextize -- now depend on additional libraries, which are built as shared (and static) libs -- although the tools are linked dynamically. These new libs are:
cyggettextsrc-0.11.2.dll and cyggettextlib-0.11.2.dll
Note that they are NOT versioned according to the -version-info rules; they are versioned under the -release 0.11.2 rule. this is because these libraries are NOT for public use. They are for the use of the gettext tools themselves (but are not used by gettext.exe or ngettext.exe).
This point is further emphasized by the following quote from Bruno in PACKAGING:

Note: Although installed by "make install", the static libraries
$prefix/lib/libgettextlib.a
$prefix/lib/libgettextsrc.a
don't need to be included in binary distributions; they are redundant.

e.g. nobody but the extra gettext tools themselves links to these libs. Also, their source is not included in packages when you run "gettextize".

What does this mean? It means that EVERY new release of gettext will include new versions of cyggettextsrc*.dll and cyggettextlib*.dll -- but there is no need for various versions to coexist. Just ship these two dlls with the exe's that use them -- since it is guaranteed that only those specific gettext programs will ever use them; no third parties ever.

So, my packaging proposal for the next release of gettext:

libintl2:
bin/cygintl-2.dll

gettext: requires libintl2
bin/gettext.exe
bin/ngettext.exe
man pages for above
small amount of other docu
lib/libintl*
lib/charset.alias
share/locale/locale.alias
include/libintl.h

gettext-devel: requires gettext and libintl2
bin/other tools
bin/cyggettextsrc-0.11.2.dll
bin/cyggettextlib-0.11.2.dll
other man pages & info & docu
API docu
lib/gettext/*
share/gettext/*
share/locale/*/LC_MESSAGES/gettext.mo
share/aclocal/*.m4
share/emacs/site-list/*

BUT:
lib/libgettextlib*
lib/libgettextsrc*
are NOT included. Third parties never need to link against them, so all we need provide are the dlls.

Changes in my proposal, relative to Bruno's recommendations:
libintl shared lib gets it own package
don't ship any import or static libs for libgettextsrc / libgettextlib
use the name "gettext-devel" instead of "gettext-tools"

Comments/Discussion?

--Chuck



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]