#!/bin/bash
[ -e /etc/autodist/config ] || {
   echo "ERROR: missing configuration file /etc/autodist/config."
   exit 1
}

. /etc/autodist/config

function usage() {
   echo "\
${me[0]} ${me[1]}
"$"Copyright (C) 2025 Silvan Calarco <silvan.calarco@mambasoft.it>""
"$"Released under the terms of the GNU GPL v3 license"
   echo "
"$"Usage"":
   $me [--help] [--simulate]
"

}

for ((i=1; i<=$#; i++)); do
   case ${!i} in
      -h|--help) usage; exit 1 ;;
      -s|--simulate) SIMULATE="echo" ;;
      *) usage; exit 1 ;;
   esac
done

ARCH=`uname -m`
[ "$ARCH" = "i686" -o "$ARCH" = "i486" -o "$ARCH" = "i386" ] && ARCH="i586"
REP=devel-autodist
REPURL=${REPS_BASE_URL}/${REP}
EXCLUDEPKGS="perl"

eval "$(autodist-distroquery repository $REP 2>/dev/null)"

if [ "$ARCH" = "x86_64" ]; then
   # remove .i586 -devel packages
   rpm -qa --last|grep "\-devel"|awk '{ print $1 }'| sort|uniq -c|grep -v " 1 " | while read line; do
      set -- $line
      PKG="$2"
      echo "* Removing $PKG.i586 and reinstalling $PKG..."
      $SIMULATE sudo rpm -e $PKG.i586
      $SIMULATE sudo dnf reinstall -y $PKG
   done
fi

for p in ${pkg_list[*]}; do
   EXCLUDED=
   pkg=$p
   for o in $EXCLUDEPKGS; do
      [ "$pkg" = "$o" ] && { EXCLUDED=1; break; }
   done
   [ "$EXCLUDED" ] && continue
   eval "$(autodist-distroquery package $REP $pkg $ARCH 2>/dev/null)"
   eval "$(autodist-distroquery package-needrebuild $REP $pkg $ARCH 2>/dev/null)"
   if [ "${pkg_needrebuild[*]}" -a "${pkg_builds[*]}" ]; then
      pkgrep=$pkg_repository
      pkgver=$pkg_version
      pkgrel=$pkg_release
      pkgarch=$pkg_arch
      [ "$pkgrep" = "$REP" ] || continue
      pkg_devel=
      pkg_lib=
      pkg_trylib=
      pkg_others=
      for b in ${pkg_builds[*]}; do
         [ "$b" != "${b/-devel}" ] && { pkg_devel="$b"; break; break; }
      done
      for b in ${pkg_builds[*]}; do
         [ "$b" = "${pkg_devel/-devel}" ] && pkg_lib="$b"
      done
      for b in ${pkg_builds[*]}; do
         [ "$b" != "${pkg_lib}" -a "$b" != "${pkg_devel}" -a "$b" = "${b/-debug}" -a "$b" = "${b/-apidocs}" ] && \
            pkg_others="${pkg_others} $b"
      done
      [ "${pkg_lib}" -a "${pkg_devel}" ] || continue
      rpm -q ${pkg_lib}-$pkgver.$pkgarch > /dev/null && continue # Already installed
      echo "* Hard-upgrading ${pkg}-$pkgver: lib=${pkg_lib} devel=${pkg_devel} others=${pkg_others}"
      $SIMULATE sudo rpm -i $REPURL/RPMS.$ARCH/${pkg_lib}-$pkgver-$pkgrel.$pkgarch.rpm || {
         echo "! Error trying hard-upgrade of ${pkg_lib}-$pkgver-$pkgrel.$pkgarch.rpm; skipping."
         continue
      }
      $SIMULATE sudo rpm -U $REPURL/RPMS.$ARCH/${pkg_devel}-$pkgver-$pkgrel.$pkgarch.rpm --nodeps
   fi
done
