Alternative system for conflicting files
Rainer Müller
raimue at macports.org
Thu May 15 07:18:58 PDT 2008
Blair Zajac wrote:
> MacPorts needs a alternative system so that multiple ports can be installed that
> provide the same file.
Because nobody else commented on this, I just want to send a short mail
to show that I agree with you.
> Debian systems have a system, call alternatives. Take java, which is provided
> by 5 or so different packages. There's /usr/bin/java which is a symlink to
> /etc/alternatives/java which is then a symlink to the real java,
> /usr/lib/jvm/java-6-sun/jre/bin/java on my system. There's a
> update-alternatives binary which is used to update these symlinks.
I never understood why there is an extra level of symlinks. Why is the
symlink not directly /usr/bin/java -> /usr/lib/.../jre/bin/java? Is
there any benefit from using /etc/alternatives? I can only think of
backup purposes where you only save /etc, but as long as the current
selection is saved in /etc and can be re-applied, this extra level
should not be necessary.
> http://blog.stevenkroon.com/2006/08/29/debian-update-alternatives/
>
> We need this for MacPorts. If we don't come up with a MacPorts solution, then
> each package that has a conflict will either result in 1) the author not
> bothering to allow simultaneous installs, which is the easy route or 2) bake
> their own solution, such as gcc_select and python_select. The solution for
> MacPorts should be general enough to subsume gcc_select and python_select,
> allowing those scripts to become wrappers around MacPort's alternatives.
I fully agree with you. gcc_select and python_select have been more
workarounds until we get a proper implementation. Well, interim
solutions often last the longest :-)
It would be good to have a way in the Portfile to register (a set of)
files as alternatives for a select group. Then a port select command
could make symlinks (as gcc_select and python_select currently do). Of
course if there is only one alternative installed for a select group it
should be automatically selected.
Debian's update-alternatives also allows you to register your own files
for specific groups which is a nice feature but might be dangerous for
us. At the moment we try to avoid the use of external dependencies
because they cause a lot of problems and make it hard to debug things
(for example people often request to use the python provided by Mac OS X
itself, but it might be an older version, being patched, have another
feature set, behave differently etc.).
But to make such a system fully usable, a better dependency engine would
also be needed. So one can specify a dependency on python>=2.4 and any
port of python{24,25,26,30} will satisfy this dependency.
Rainer
More information about the macports-dev
mailing list