====== alternatives ======
[[http://linux.die.net/man/8/update-alternatives|update-alternatives]] - maintain symbolic links determining default commands.
Default implementation in PLD Linux is provided by ''alternatives'' package from [[package>chkconfig]].
===== switching alternative =====
By default ''alternatives'' uses ''auto'' mode picking the "best" alternative.
//TODO: how to enforce sysadmin preference//
===== integrating =====
from [[http://git.pld-linux.org/?p=packages/php.git;a=commitdiff;h=82885e7c57e9ee9183eead2319352703c8278a35|phar-php example]]:
Requires: alternatives
...
%install
...
# touch for ghost
%{__rm} $RPM_BUILD_ROOT%{_bindir}/phar
touch $RPM_BUILD_ROOT%{_bindir}/phar
%post phar
update-alternatives \
--install %{_bindir}/phar phar %{_bindir}/phar%{ver_suffix}.phar %{ver_suffix} \
--slave %{_mandir}/man1/phar.1 phar.1 %{_mandir}/man1/phar%{ver_suffix}.1* || :
%postun phar
if [ $1 -eq 0 ]; then
update-alternatives --remove phar %{_bindir}/phar || :
fi
...
%files
...
%ghost %{_bindir}/phar
%ghost %{_mandir}/man1/phar.1
- add ''Requires: alternatives'' to runtime deps
- the path must be ghost and regular file, otherwise rpm will complin about file-conflicts
- use ''%%--install%%'' to setup the symlinks in package ''%post'' scriptlet.
- the ''%%--slave%%'' option is optional and may be repeated, use if you wish to "group" alternatives
- use proper ''%postun'' to remove alternative on package uninstall
Currently it remains unclear how to handle optional files, as for above example:
- ''%{_mandir}'' path can be missing if ''%_excludedocs'' is set
- ''%{_mandir}'' path could be ''.gz'' compressed or not, it's currently solved with a glob: ''%{_mandir}/man1/phar%{ver_suffix}.1*''