Files
CHESS/Compilateur.sh
gaston667 85b5127f8b push
2026-03-19 15:21:09 +01:00

136 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# ======================
# CONFIGURATION
# ======================
OUT="out"
MAIN_CLASS="Main" # Si Main est dans un package, ex: monpackage.Main
# ======================
# Se placer dans le dossier du script
cd "$(dirname "$0")"
cmd="${1:-help}"
clean() {
if [ -d "$OUT" ]; then
echo "Suppression du dossier '$OUT'..."
rm -rf "$OUT"
else
echo "Aucun dossier '$OUT' à supprimer."
fi
}
build() {
if ! command -v javac >/dev/null 2>&1; then
echo "[ERREUR] javac introuvable dans le PATH"
return 1
fi
mkdir -p "$OUT"
echo "Création de la liste des sources..."
mapfile -t sources < <(find . -type f -name "*.java")
COUNT="${#sources[@]}"
if [ "$COUNT" -eq 0 ]; then
echo "[ERREUR] Aucun fichier .java trouvé dans $PWD"
return 1
fi
echo "$COUNT fichiers trouvés. Compilation..."
javac -d "$OUT" "${sources[@]}"
ERR=$?
if [ "$ERR" -eq 0 ]; then
echo "Compilation réussie !"
else
echo "[ERREUR] Compilation (code $ERR)"
fi
return $ERR
}
run() {
build
if [ $? -eq 0 ]; then
echo
echo "Exécution de $MAIN_CLASS ..."
java -cp "$OUT" "$MAIN_CLASS"
fi
}
count() {
COUNT=$(find . -type f -name "*.java" | wc -l)
echo "$COUNT fichiers Java trouvés."
LIGNES=0
while IFS= read -r file; do
NB=$(wc -l < "$file")
LIGNES=$((LIGNES + NB))
done < <(find . -type f -name "*.java")
echo "$LIGNES lignes Java trouvées."
}
watch() {
echo "Mode surveillance activé : recompilation à chaque changement..."
echo "Ctrl+C pour quitter."
LASTSTATE=""
while true; do
CURRENTSTATE=$(find . -type f -name "*.java" -exec stat -c "%n %Y" {} \;)
if [ "$CURRENTSTATE" != "$LASTSTATE" ]; then
LASTSTATE="$CURRENTSTATE"
build
fi
sleep 2
done
}
purge() {
echo "Suppression des .class hors de '$OUT'..."
find . -type f -name "*.class" ! -path "./$OUT/*" -delete
}
rebuild() {
clean
purge
build
}
help() {
echo "Usage: ./build.sh [option]"
echo
echo " build - Compile le projet"
echo " clean - Supprime le dossier de sortie '$OUT'"
echo " run - Compile puis lance $MAIN_CLASS"
echo " count - Compte les fichiers et les lignes Java"
echo " watch - Recompile automatiquement si un fichier change"
echo " purge - Supprime les .class hors de '$OUT'"
echo " rebuild - Nettoie, purge et recompile le projet"
echo " help - Affiche cette aide"
}
case "$cmd" in
clean) clean ;;
build) build ;;
run) run ;;
count) count ;;
watch) watch ;;
purge) purge ;;
rebuild) rebuild ;;
help|*) help ;;
esac