Encore une modification du script build-art… La vérification d’une nouvelle version sur la base du checksum SHA-256 de l’archive ne fonctionne pas, car les mises à jour ne remplacent pas les anciennes versions, mais sont rajoutées en plus des anciennes !
Finalement, le script est modifié pour qu’il détecte le numéro de version. S’il change, la compilation s’exécute. De plus, les dossiers créés lors de la compilation sont supprimés à la fin de celle-ci, afin de nettoyer un peu !
#!/usr/bin/env bash
# Adapté pour le dépôt compressé de ART
# Version 2024-12-20
# Ce script télécharge et compile automatiquement la dernière version stable d'ART.
# Nom du programme
prog="art"
# Nom de l'exécutable compilé
exe="ART"
# Sous-dossier relatif au chemin d'installation de l'exécutable
exeRelativePath=""
# URL de base pour les fichiers compressés des versions
repoBase="https://github.com/artpixls/ART/archive/refs/tags"
# Dossier de téléchargement et de compilation
sourceDir="$HOME/programs/code-${prog}"
buildDir="$sourceDir/build"
installDir="$HOME/programs/${prog}"
archiveVersionFile="$HOME/${prog}_version.txt"
# Fonction pour afficher les messages
echo_info() {
echo -e "\033[1;32m$1\033[0m"
}
# Récupérer la dernière version stable disponible
echo_info "Récupération de la dernière version stable..."
latestVersion=$(wget -qO- "https://github.com/artpixls/ART/releases" |
grep '/artpixls/ART/releases/tag/' |
grep -v 'nightly' |
head -n 1 |
sed -E 's|.*tag/([^"\>]+).*|\1|')
if [[ -z "$latestVersion" ]]; then
echo_info "Impossible de déterminer la dernière version stable."
exit 1
fi
repo="$repoBase/$latestVersion.tar.gz"
# Vérification de la version actuelle
echo_info "Vérification des mises à jour de la version..."
previousVersion=$(cat "$archiveVersionFile" 2>/dev/null || echo "")
if [[ "$latestVersion" == "$previousVersion" ]]; then
echo_info "Aucune mise à jour détectée. Version actuelle : $latestVersion."
exit 0
else
echo "$latestVersion" > "$archiveVersionFile"
echo_info "Nouvelle version détectée : $latestVersion. Téléchargement et recompilation nécessaires."
fi
# Vérifier et créer les dossiers nécessaires
if [[ -d "$sourceDir" ]]; then
echo_info "Suppression de l'ancien dossier source..."
rm -rf "$sourceDir"
fi
mkdir -p "$sourceDir" "$buildDir" "$installDir"
# Télécharger et extraire les sources
echo_info "Téléchargement de l'archive source..."
wget "$repo" -O "$HOME/${prog}.tar.gz" || exit 1
echo_info "Extraction des fichiers..."
tar -xzf "$HOME/${prog}.tar.gz" -C "$sourceDir" --strip-components=1 || exit 1
rm "$HOME/${prog}.tar.gz"
# Détecter le nombre de cœurs CPU
cpuCount="$(nproc --all)"
if [[ ! ( $cpuCount -ge 1 && $cpuCount -le 64 ) ]]; then
cpuCount=1
fi
# Compiler le programme
echo_info "Configuration de la compilation avec CMake..."
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DPROC_TARGET_NUMBER="2" \
-DBUILD_BUNDLE="ON" \
-DBUNDLE_BASE_INSTALL_DIR="$installDir" \
-DOPTION_OMP="ON" \
-DWITH_LTO="OFF" \
-DWITH_PROF="OFF" \
-DWITH_SAN="OFF" \
-DWITH_SYSTEM_KLT="OFF" \
-DWITH_BENCHMARK="OFF" \
-DENABLE_LIBRAW="ON" \
-DENABLE_OCIO="ON" \
-DENABLE_CTL="ON" \
"$sourceDir" || exit 1
make --jobs="$cpuCount" install || exit 1
# Supprimer les dossiers indésirables dans le répertoire personnel
echo_info "Nettoyage des dossiers CMakeFiles, rtgui, rtengine et rtdata..."
rm -rf "$HOME/CMakeFiles" "$HOME/rtgui" "$HOME/rtengine" "$HOME/rtdata"
# Finalisation
echo_info "Compilation terminée. Pour exécuter ${prog}, utilisez :"
echo "$installDir/${exePath}"