[RFD] ncurses update
Charles Wilson
cwilson@ece.gatech.edu
Sat Sep 15 12:03:00 GMT 2001
I've made a few changes in the latest ncurses package -- which bring up
a few setup.exe-related issues.
WHAT I DID:
#1. Now use the auto-import stuff instead of __declspec(dllXXport)
modifiers. No more need for *compile-time* flags at all; only linktime
flags: -static or -Wl,--enable-auto-import. However, ncurses does some
of the "bad" things (the ones that today's binutils warns about, but the
previous binutils created buggy code for). The fix for this requires
changes in the ncurses library code (specifically, configure using
BROKEN_LINKER -- which changes some of the exported DATA into functions.
If you recompile apps, you don't need to worry about this though; it's
transparently handled in ncurses_cfg.h/curses.h).
This is an ABI change, requiring the DLL number to be bumped, and apps
to be recompiled. (e.g. we now have cygncurses6.dll, etc)
On the upside, this change reduces the source code patch from 450k to
about 55k (and most of the remaining stuff is just my wordy documentation)
#2. To keep old apps working, I created a new package, called
'libncurses5' which contains only the DLLs from the previous ncurses
package (cygncurses5.dll, etc)
#3. I split the terminfo database apart from the ncurses package. It
has its own source package (minimum autotools files, plus terminfo.src).
Currently, it is synced with the terminfo.src in the newest ncurses
source package, but I expect they will diverge. (I'll sumbit the
changes back to GNU, so these packages should automagically 'resync' at
each new official GNU release of ncurses.) This release includes
various changes and fixes from Egor Duda (July 10) and Kazuhiro Fujieda
(Sep 3).
(Note that this means that packages which currently depend on 'ncurses'
will actually depend on libncurses5 and terminfo; new packages built
against ncurses will depend on ncurses and terminfo (until DLL version 7
comes out, at which point the dependencies will change to libncurses6
and terminfo for the then-current dependent packages. Should we skip
this and just split the new DLL's out into libncurses6 right away, or
fold the old version 5 DLLs back into the ncurses package and skip this
whole libncursesX stuff? More below)
Anyway, we now have:
contrib/ncurses/ncurses-5.2-6.tar.bz2
contrib/ncurses/ncurses-5.2-6-src.tar.bz2
contrib/ncurses/libncurses5-5.2-1.tar.bz2
contrib/ncurses/ncurses-5.2-5-src.tar.gz
(note that the source package has a different name than the binary
package, for libncurses5)
contrib/terminfo/terminfo-5.2-1.tar.bz2
contrib/terminfo/terminfo-5.2-1-src.tar.bz2
ISSUES
[test] doesn't seem to work.
----------------------------
I created a fake setup.ini to install these on my own machine
(attached). I labelled the new versions 'test' -- but they still show
up immediately as "new" versions. This is true both for the new packages
(terminfo and libncurses5) but also for the updated package (ncurses).
'test' versions should be hidden unless you click the 'Exp' radio
button, right?
Installation order
------------------
Because the old ncurses contains certain files that are now in other
packages, you MUST upgrade in order:
1) upgrade ncurses-5.2-5 to ncurses-5.2-6
you now have a broken installation, because the version 5 DLLs were
uninstalled, and the terminfo database was removed
2) install the new libncurses5 and terminfo packages
If you don't do it in this order, then you'll have problems. For
instance, setup is alphabetical, so the default order will be
libncurses5, ncurses, terminfo. What will happen is: libncurses5 is
installed (replacing the version 5 DLLs from the current ncurses
install). Then, ncurses-5.2-5 is uninstalled -- *removing* those
version 5 DLLs (as well as removing the terminfo database) Next,
ncurses-5.2-6 is installed (with its version 6 DLLs). Then, the new
terminfo package is installed.
Oops.
similar problems will happen if you install the terminfo package before
updating the ncurses package. However, I can't just release the new
ncurses package and wait a week for everybody to update THAT, and THEN
release the new libncurses5 and terminfo packages -- because everyone's
system would be broken during that week.
How should this be handled? (Do you *really* think a blurb in the
release announcement, like this
WARNING WARNING!!!
You must run setup twice to handle thsi upgrade. FIRST, *deselect* the
terminfo and libncurses5 packages, and ONLY upgrade the ncurses package.
Continue until setup exits. THEN, immediately folloing that, run
setup AGAIN, and this time install the new terminfo and libncurses5
packages.
will do the trick?
What do you think about the following?
---------------------------------------
a) the --enable-auto-import change to ncurses (and its related 'bump the
DLL number requirement)
b) the new libncurses5 package? (should I just put the old DLLs inside
ncurses-5.2-6 package? should the new DLL's themselves be split from
the ncurses package and put in libncurses6 package?) What about the
source code naming difference (libncurses5 != ncurses)?
c) splitting the terminfo package (and forking the source code) For:
allows me to update the terminfo database more frequently and easier.
Against: forking is bad.
I have these packages ready to go, but I don't want to upload them to
sourceware at least until the [test] thing is corrected and we reach a
consensus on these other issues. FWIW, I've installed these new
packages on my system and it seems to work okay.
--Chuck
More information about the Cygwin-apps
mailing list