Upload: bash-3.0-3 [test]

Charles Wilson cygwin@cwilson.fastmail.fm
Sat Jul 2 23:07:00 GMT 2005


Igor Pechtchanski wrote:

> I would guess that bash itself won't need to do anything special -- it's a
> question of the alternatives package having reasonable defaults.  Whatever
> the case, whatever sets this up will need to run before other postinstall
> scripts.  It may even be worth it to get setup.exe to recognize and treat
> the alternatives postinstall/preremove scripts specially.

Nope, that's not how alternatives works.  It provides the facilities; 
individual packagers "hook in" to the system.  For instance, here's the 
postinstall script from automake1.9:

------------------begin----------------
#!/bin/sh
prefix=/usr
bindir=${prefix}/bin
sbindir=${prefix}/sbin

${sbindir}/update-alternatives \
   --install ${bindir}/automake automake ${bindir}/automake-1.9 50 \
   --slave   ${bindir}/aclocal  aclocal  ${bindir}/aclocal-1.9
------------------end----------------


and the pre-remove script from the same package:


------------------begin----------------
#!/bin/sh
prefix=/usr
bindir=${prefix}/bin
sbindir=${prefix}/sbin

${sbindir}/update-alternatives --remove automake ${bindir}/automake-1.9
------------------end----------------


Each of the other "alternativized" automake packages have similar 
scripts -- but with different "priorities" for the 'auto-prioritization' 
process.  (automake1.9 has priority 50; 1.8 == 40, ... 1.4p6 == 10).

The evolving process of these postinstall scripts being run creates the 
/var/lib/alternatives/automake file, which looks like this on my system:

------------------begin----------------
auto
/usr/bin/automake
aclocal
/usr/bin/aclocal

/usr/bin/automake-1.4
10
/usr/bin/aclocal-1.4
/usr/bin/automake-1.6
20
/usr/bin/aclocal-1.6
/usr/bin/automake-1.7
30
/usr/bin/aclocal-1.7
/usr/bin/automake-1.8
40
/usr/bin/aclocal-1.8
/usr/bin/automake-1.9
50
/usr/bin/aclocal-1.9
------------------end----------------


But the alternatives package does not itself install or provide this 
database entry.  It is *created* by the postinstall scripts of the 
alterntivized automake1.X packages themselves.

Thus (and let's pretend that symlinks are OK in this application, 
ignoring the whole binary-wrap issue), to use the alternatives 
framework, you'd do the following:

(1) the ash package would include commands similar to those above in its 
post-install/pre-remove scripts, with (for instance) a priority of 10.

(2) the bash package would do so as well, but with a higher priority.

(3) ditto the ksh package.

The 'auto' mode would ensure that the alternatives system keeps the 
symlinks set up to "activate" the highest-priority, currently-installed 
"alternative" within this set {sh, ash, ksh}.  If the end-user wants to 
make her own selection, she'd issue the appropriate 'update-alternatives 
--manual' command (or, personally change the links in /etc/alternatives; 
the system is smart enough to figure that out next time one of the 
post-install scripts is run, and change the database to manual).

Yes, this requires cooperation between the maintainers of alternativized 
packages -- AND an agreement as to which package will have the higher 
priority.  THAT's something that should be hashed out on this list, for 
any alternative-set.

--
Chuck



More information about the Cygwin-apps mailing list