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]

[RFD] ncurses update


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
# This file is automatically generated.  If you edit it, your
# edits will be discarded next time the file is generated.
# See http://cygwin.com/setup.html for details.
#
setup-timestamp: 995306402
setup-version: 2.78.2.3

@ libncurses5
[test]
version: 5.2-1
install: contrib/ncurses/libncurses5-5.2-1.tar.bz2 181942
source:  contrib/ncurses/ncurses-5.2-5-src.tar.gz 1822746

@ ncurses
version: 5.2-5
install: contrib/ncurses/ncurses-5.2-5.tar.gz 1116768
source:  contrib/ncurses/ncurses-5.2-5-src.tar.bz2 1822746
[prev]
version: 5.2-4
install: latest/ncurses/ncurses-5.2-4.tar.gz 2479155
source:  latest/ncurses/ncurses-5.2-4-src.tar.gz 1802426
[test]
version: 5.2-6
install: contrib/ncurses/ncurses-5.2-6.tar.bz2 822182
source:  contrib/ncurses/ncurses-5.2-6-src.tar.bz2 1367293

@ terminfo
[test]
version: 5.2-1
install: contrib/terminfo/terminfo-5.2-1.tar.bz2 170736
source:  contrib/terminfo/terminfo-5.2-1-src.tar.bz2 261953

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