www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-apps/2001/12/16/23:37:39

Mailing-List: contact cygwin-apps-help AT cygwin DOT com; run by ezmlm
Sender: cygwin-apps-owner AT cygwin DOT com
List-Subscribe: <mailto:cygwin-apps-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-apps/>
List-Post: <mailto:cygwin-apps AT cygwin DOT com>
List-Help: <mailto:cygwin-apps-help AT cygwin DOT com>, <http://sources.redhat.com/lists.html#faqs>
Delivered-To: mailing list cygwin-apps AT cygwin DOT com
MIME-Version: 1.0
Subject: RE: Restructuring gettext
content-class: urn:content-classes:message
X-MimeOLE: Produced By Microsoft Exchange V6.0.4417.0
Date: Mon, 17 Dec 2001 15:37:34 +1100
Message-ID: <FC169E059D1A0442A04C40F86D9BA7606291@itdomain003.itdomain.net.au>
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Thread-Topic: Restructuring gettext
Thread-Index: AcGGpmSieN1J/SU9Ra+GK7ZujH11zwAB5ikQ
From: "Robert Collins" <robert DOT collins AT itdomain DOT com DOT au>
To: "Charles Wilson" <cwilson AT ece DOT gatech DOT edu>
Cc: <cygwin-apps AT cygwin DOT com>
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id fBH4bcs10318


> -----Original Message-----
> From: Charles Wilson [mailto:cwilson AT ece DOT gatech DOT edu]
> > Right. But the one package could provide the same .dll 
> twice (until all
> > dependent packages are rebuilt).
> I'd prefer not to complicate the "libfooX" package by 
> starting down the 
> path where "libfoo1" contains both cygfoo-1.dll and cygfoo.dll.  I'd 
> rather insure that libfooX contains only cygfoo-X.dll -- and put 
> cygfoo.dll into libfoo0 or just plain libfoo.

I was approaching this from two angles.
1) On unix you'd promably symlink or hardlink to provide this. In point
of fact all you need is a tarball with a hardlink to the old library
name, and cygwin will work just fine.
2) You're adding a package that can never get pulled in by anyone else -
because there is no -dev for it - and that is binary compatible with the
current package. Doesn't make sense to me, but that's just my view :} -
do as makes sense to you.
 
> setup automatically determined that I needed to:
>    a) update gettext from 0.10.38-2 to 0.10.40-1
>    b) install the "new" libintl0-0.10.38-3 package
>    c) install the new libintl1-0.10.40-1 package
> 
> Since "g"ettext comes before "l"ibintl0, the 
> uninstall/reinstall occured 
> in the proper order, and I still had a working system. Unlike 
> ncurses, 
> alphabetization works for us here -- it would be bad if libintl0 was 
> installed (replacing cygintl.dll with the "new" version), and THEN 
> gettext was uninstalled (removing cygintl.dll) followed by installing 
> the new gettext (which contains no cygintl.dll).
> 
> I don't know how to deal with the problem above -- which 
> occurs if the 
> package being split (ncurses, readline, gettext) follows rather than 
> precedes 'l'ibXXXX in the alphabet...but we can deal with 
> that when/as 
> it occurs.  (Perhaps upgrades of currently installed packages should 
> ALWAYS precede installation of new packages?)

See my wishlist item regarding sorting of activities. 

upgrades of current packages first is one sort parameter. Dependency
ordered installs is another. File conflict detection and atomic installs
is a related and needed issue. So the logic goes something like:

build two ordered graphs of packages (where two nodes are joined if node
A is required by node B for the first one, and conflicts with for the
second).

Then sort the packages.
a) if two packages are not related in the graph (no path joins them in
either direction) then they are ordered by installed status - installed
packages first.
b) packages that can be reached from other packages come before those
packages. (ie A depends on B, A gets installed first, and if D 1.0
conflicts with C < 1.2, and C1.1 is installed, then D is after C).
c) packages that are mutually reachable (or co-dependent) have the
required version number decide. i.e. if bash needs profile-setting > 2
(and 2 is installed) , and profile-setting needs bash, then
profile-setting would be done first, as otherwise the bash install would
potentially fail. 

When installing, if a file conflict arises, (ie the libncurses package
conflict with older ncurses) and the conflicts clause doesn't explicitly
mark this, then the package being installed is rolled back, and the
install skips over all packages that can reach it in the dependency
graph. 
After installing everything else, the failed package is tried again. If
a conflict still exists, then the dependenct packages that are satisfied
by the currently installed version of the failing package are installed.
if the conflicting package can reach the failing package in the install
graph (regardless of whether the conflicting package depends on the
failing package) then it is tried as soon as any other dependencies are
met.

Thoughts?

Rob

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019