%prepare_alternative(t:) \
%define alternative_target %{-t:%{-t*}}%{!-t:%{_bindir}/%1} \
rm -f %{buildroot}%{alternative_target} \
alternative_target="%{alternative_target}" \
if [[ "$alternative_target" == %{_mandir}* ]]; then \
    rm -f %{buildroot}${alternative_target%%%%%{ext_man}} \
    rm -f %{buildroot}%{alternative_target}%{ext_man} \
fi \
if [ %{with libalternatives} -eq 1 ] ; then \
mkdir -p %{buildroot}%{_datadir}/libalternatives \
if [[ "$alternative_target" != %{_mandir}* ]]; then \
ln -sf %{_bindir}/alts %{buildroot}%{alternative_target} \
fi \
else \
mkdir -p %{buildroot}%{_sysconfdir}/alternatives \
touch %{buildroot}%{_sysconfdir}/alternatives/%1 \
ln -sf %{_sysconfdir}/alternatives/%1 %{buildroot}%{alternative_target} \
fi \
%{nil}

%install_alternative(s:t:p:n:) \
%define alternative_name %{-n:%{-n*}}%{!-n:%1} \
%define alternative_source %{-s:%{-s*}}%{!-s:%{_bindir}/%{alternative_name}} \
%define alternative_target %{-t:%{-t*}}%{!-t:%2} \
%define alternative_priority %{-p:%{-p*}}%{!-p:%3} \
update-alternatives --install \\\
    %{alternative_source} \\\
    %{alternative_name} \\\
    %{alternative_target} \\\
    %{alternative_priority}

%uninstall_alternative(n:t:) \
%define alternative_name %{-n:%{-n*}}%{!-n:%1} \
%define alternative_target %{-t:%{-t*}}%{!-t:%2} \
if [ ! -e "%{alternative_target}" ]; then \
    update-alternatives --quiet --remove "%{alternative_name}" "%{alternative_target}" \
fi \
%{nil}

%reset_alternative(n:t:) \
%define alternative_name %{-n:%{-n*}}%{!-n:%1} \
%define alternative_target %{-t:%{-t*}}%{!-t:%2} \
if [ "$1" -gt 0 ] && [ -f %{_sbindir}/update-alternatives ]; then \
    update-alternatives --quiet --remove "%{alternative_name}" "%{alternative_target}" \
fi \
%{nil}

%alternative_for() \
%1 \
%ghost %{_sysconfdir}/alternatives/%{basename:%1}

%python_flavored_alternatives(v:) \
%{!-v:set +x} \
%{python_expand # provide libalternatives and update-alternatives in the current flavor version when shuffling the build dir \
mkdir -p build/xdgflavorconfig \
export XDG_CONFIG_HOME=$PWD/build/xdgflavorconfig \
if [ -d /usr/share/libalternatives/ ]; then \
  for b in /usr/share/libalternatives/*; do \
    if [ -e "${b}/%{$python_version_nodots}.conf" ]; then \
        baseb=$(basename ${b}) \
        alts -n ${baseb} -p %{$python_version_nodots} \
        echo "Using libalternatives variant %{$python_version_nodots} for ${baseb} in XDG_CONFIG_HOME during Python %{$python_version} expansions." \
    fi \
  done \
fi \
mkdir -p build/flavorbin \
for bin in %{_bindir}/*-%{$python_bin_suffix} %{buildroot}%{_bindir}/*-%{$python_bin_suffix}; do \
  if [ -x "${bin}" ]; then \
    # four percent into 1 by rpm/python expansions \
    mainbin="${bin%%%%-%{$python_bin_suffix}}" \
    basemain="$(basename ${mainbin})" \
    if [ "$(readlink ${mainbin})" = "/etc/alternatives/${basemain}" ]; then \
      ln -sf "${bin}" "build/flavorbin/${basemain}" \
      echo "Using alternative $(basename ${bin}) for ${basemain} in ./build/flavorbin during Python %{$python_version} expansions." \
    fi \
  fi \
done \
} \
%{!-v:set -x} \
export PATH=$PWD/build/flavorbin:$PATH \
%{nil}

%python_group_libalternatives() \
if [ %{with libalternatives} -eq 1 ] ; then \
  group="%{**}" \
  for f in %{buildroot}%{_datadir}/libalternatives/%1/*.conf; do \
    for name in %{**}; do \
        sed -n -i -e '/^group=/!p' -e '$'"a group=${group// /, }" ${f/\\/%{1}\\//\\/$name\\/} \
    done \
  done \
fi \
%{nil}
