%define running_kernel_ver          $(uname -r)
%define modules_backup_loc          /tmp/.%{running_kernel_ver}
%define running_kernel_modules_dir  /lib/modules/%{running_kernel_ver}

# delete dead symlinks and empty dirs at top level only
# if running kernel is re-installed, remove the symlink
%define do_libmodules_housekeeping \
if [ -d "%{running_kernel_modules_dir}" ]; then \
  find /lib/modules -mindepth 1 -maxdepth 1 -xtype l -delete \
  find /lib/modules -mindepth 1 -maxdepth 1 -type d -empty -delete \
  if [ "%{running_kernel_ver}" = "%{uname_r}" ] && [ -L "%{running_kernel_modules_dir}" ]; then \
    rm -f %{running_kernel_modules_dir} \
  fi \
fi \
%{nil}

%pre
%do_libmodules_housekeeping
if [ "%{running_kernel_ver}" = "%{uname_r}" ]; then
  rm -rf %{modules_backup_loc}
fi

%postun
if [ ! -e /boot/photon.cfg ]; then
  list="$(basename "$(ls -1 -tu /boot/linux-*.cfg 2>/dev/null | head -n1)")"
  test -n "$list" && ln -sf "$list" /boot/photon.cfg
fi

if [ ! -s /boot/linux-%{uname_r}.cfg ]; then
  rm -f %{_sharedstatedir}/rpm-state/initramfs/pending/%{uname_r} \
        /boot/initrd.img-%{uname_r}
  echo "initrd of kernel %{uname_r} removed" >&2
fi

if [ -d "%{modules_backup_loc}" ]; then
  if [ ! -s /boot/linux-%{running_kernel_ver}.cfg ]; then

    %do_libmodules_housekeeping

    # if running kernel's modules dir doesn't exist
    # create a symlink which points to backup dir
    if [ ! -d "%{running_kernel_modules_dir}" ]; then
      ln -sfn "%{modules_backup_loc}" "%{running_kernel_modules_dir}"
    fi
  else
    rm -rf "%{modules_backup_loc}"
  fi
fi

%filetriggerun -- /lib/modules/
%do_libmodules_housekeeping
if [ "%{running_kernel_ver}" = "%{uname_r}" ] && [ ! -d "%{modules_backup_loc}" ]; then
  cp -pr "%{running_kernel_modules_dir}" "%{modules_backup_loc}"
fi