New Setup for Cygwin 1.7 on

Corinna Vinschen
Wed Aug 27 17:15:00 GMT 2008

On Aug 25 13:22, Christopher Faylor wrote:
> On Mon, Aug 25, 2008 at 06:16:34PM +0200, Corinna Vinschen wrote:
> >On Aug 25 11:57, Christopher Faylor wrote:
> >> On Mon, Aug 25, 2008 at 05:37:53PM +0200, Corinna Vinschen wrote:
> >> >On Aug 25 11:27, Christopher Faylor wrote:
> >> >> On Mon, Aug 25, 2008 at 10:33:00AM -0400, Christopher Faylor wrote:
> >> >> >Making tweaks by removing valid dependencies in the hopes of improving
> >> >> >things is not going to be a win in the long run.  We seem to be in a
> >> >> >situation that is only solvable by changing setup.exe.
> >> >> 
> >> >> That said, however, I can manage to get base-cygwin first in the
> >> >> dependency order by changing all of the "requires: ...cygwin" to
> >> >> "requires: ...base-cygwin".  base-passwd is still off in the weeds
> >> >> somewhere.  Maybe those two packages should just be combined?
> >> >
> >> >The terminfo change would be much simpler.  Everything else seems
> >> >to fall into place then.
> >> 
> >> I'd consider changes like the terminfo change a rather fragile way of
> >> fixing the problem.  It looks like all we'd need is for libintl8 to add
> >> similar dependencies and everything would fall apart again.  And we
> >> wouldn't know about it for some time.
> >> 
> >> Creating a package which is designed to be relied on by everyone and is
> >> a "terminal node" should ensure that it is always run first.  upset could
> >> be modified to make sure that everything relies on base-cygwin, too.
> >> 
> >> Btw, did you try running setup after removing terminfo?  I get this
> >
> >I don't understand.  Removing terminfo from where?  If you mean,
> >removing its dependencies...
> >> order (from setup.log.full):
> >> 
> >>     Dependency order of packages: terminfo libintl3 texinfo
>                                      ^^^^^^^^
> I meant removing the dependencies.  Doing so doesn't seem to solve any
> problems.

I looked a while into the algorithm doing the dependency ordering.  What
it does is to create an ordered list sorted by using the algorithm to
find the strongly connected components in a directed graph.  The problem
is that this algorithm works fine and creates a nice dependeny ordered
list unless there are loops in the dependencies.  In this case you just
get a list of strongly connected components in arbitrary order.

Today I tried a simple trick.  The algorithm now iterates through the
package list twice.  The first run only visits the packages which itself
have no dependencies and puts them first in the dependency ordered list.
The second run then visits all other packages.  I didn't expect a lot,
just a bit better.  But the resul was surprisingly good:

  Dependency order of packages: base-cygwin base-passwd cygwin libiconv2
  libintl8 libintl3 alternatives texinfo _update-info-dir gawk tzcode
  coreutils terminfo libncurses8 libreadline6 bash ash findutils sed
  base-files libbz2_1 bzip2 libpopt0 cygutils groff gzip termcap
  libpcre0 less man cygwin-doc editrights grep ipc-utils login rebase
  run tar which

Maybe that's just coincidence.  I think I'll apply this patch and
tomorrow I'll try to add another loop between the above loops.  That
loop would only visit packages which have exactly one dependency, and
that dependency is to one of the packages which have no dependencies.
Or, maybe just visiting packages which have exactly one dependency, no
matter what.

Anybody having another funny idea?


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

More information about the Cygwin-apps mailing list