This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
Re: New Setup for Cygwin 1.7 on cygwin.com
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
cygwin-meta.
====> 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
^ ^ ^
\ | /
\ | /
-----cygwin-----
^
|
bash, coreutils, etc...
--
Chuck
[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