This is the mail archive of the cygwin-apps 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]

Re: New Setup for Cygwin 1.7 on

Corinna Vinschen wrote:

>> I thought the whole point was to install cygwin first.  How can you run base
>> packages first in a new install when there is no cygwin1.dll?
> The installation order doesn't matter.  Only the order in which scripts
> run matters.  And I don't see another way how to make sure that the
> base-* scripts always run first.

Well, what we have is a dependency-group.  You want cygwin, base-*
installed at the same time. Then you want the base-* postinstall scripts
to run.

Maybe a meta-package?

cygwin : no dependencies
base-* : depends on cygwin
cygwin-meta : depends on cygwin, base-*

everything else, that currently depends on cygwin, depends instead on

====> revision for less ripple:

what we now call the 'cygwin' package gets renamed to 'cygwin-core'
base-*: depend on cygwin-core
the new 'cygwin' package is now a meta-package with dependencies on
cygwin-core and base-*.

everything else continues to depend on cygwin, as before.

The drawback to this plan is:
    cygcheck -cd cygwin
will report the version number of the meta-package, which will probably
be 1.0, and will hardly ever change.

This doesn't solve the loop back to cygwin/bash with base-*:

   base-passwd, setup.hint:
      requries: cygwin bash
      NOTE: uses coreutils (cp, rm, chmod) and sed, but
            does not include them in its requires:.

   base-files, setup.hint
      requries:  cygwin bash findutils sed
      NOTE: uses coreutils, diffutils (uname, [, ln,
                 /bin/echo, /bin/touch,
                 /bin/cp, /bin/cmp, /bin/rm ) but does
                 not include them in its requires:.
      FWIW, does NOT seem to use sed or findutils!

   bash: requires cygwin libintl8 libreadline6
   libintl8: requires cygwin libiconv2
   libreadline6: requires cygwin libncurses8
   libiconv2: requries cygwin
   libncurses8: requires cygwin terminfo
   terminfo: requires bash coreutils
      NOTE: the only reason this pulls in coreutils is because the
      postinstall script does this:
	(cd ${libdir};
	  rm -f terminfo  ; ln -fs ../share/terminfo terminfo ;
      which (a) I need to change to make an absolute link, instead
      of a relative one, and (b) is it really necessary?  Must
      we have a /usr/lib/terminfo/ path?

   <--- HERE --->

   coreutils: requires bash crypt cygwin libiconv2 libintl8 tzcode
   crypt: cygwin
   tzcode: cygwin bash gawk
   gawk: bash cygwin libintl8

   findutils: requires: bash coreutils cygwin libintl8
   sed: requires: bash cygwin libintl3 libiconv2
   libintl3: requires: cygwin libiconv2

   diffutils: requires: bash cygwin libintl2 libiconv2
   libintl2: requires: cygwin libiconv2

But I think it would solve the script execution order issue.  Also, if we
  (a) removed terminfo's postinstall script and coreutils dependency
  (b) removed the useless findutils and sed dependnecy of base-files
then the dependency chain of (base-* + cygwin-core == new cygwin meta
package) would stop at HERE.  This scheme would then rely on the Base
category to ensure that coreutils, findutils, diffutils, sed, and all
their dependencies are all properly installed, which should be safe enough.

Better, in the group above HERE, the following are true;
  (a) DLL packages don't typically have postinstall scripts
  (b) terminfo won't have a postinstall script [1]
  (c) leaving only bash, and base-* postinstall
      (1) but since bash dep on cygwin (meta), which would dep on
          cygwin-core (no postinstall), and base-*, but base-*
          dep on bash...
still leaves a cycle.

Hmm...what if we deliberatly drop the bash dependency from base-*,
relying on the Base category to ensure it gets installed? Then, there
are no loops at all (in the cygwin meta group):

  base-passwd --> cygwin-core <-- base-files
             ^         ^          ^
              \        |         /
               \       |        /
           bash, coreutils, etc...


[1] alternatively, if we DO need a /usr/lib/terminfo symlink, then we
can keep the postinstall script but deliberately drop the dependency on
coreutils (relying on Base category). Then, we still guarantee base-*
scripts go first, because terminfo would depend on bash

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