#!/usr/bin/perl

$nom_fichier_liste = shift;
# 1° paramère à la ligne de commande
chomp $nom_fichier_liste;
# enlever le passage à la ligne (= \n = newline) s'il existe

if ($nom_fichier_liste eq "") {
	$nom_fichier_liste = "raf_liste";
	# valeur par défaut
	print "Utilisation du nom de fichier par défaut $nom_fichier_liste\n";
}
# le fichier $nom_fichier_liste doit contenir un couple 
# $nom_programme $alias_programme
# séparés par un espace dans chaque ligne

if ( ! -f $nom_fichier_liste ) {
	$nom_fichier_liste = "raf_liste";
	print "$nom_fichier_liste n'existe pas dans le répertoire\n";
	exit;
}

$id = `whoami`;
chomp $id;
if ($id ne "root") {
	print "Il faut être 'root' pour pouvoir installer des 'alias' en /usr/local/bin\n";
	exit;
}

open(LISTE, "<$nom_fichier_liste");
while (<LISTE>) {
	chomp;
	# enlever le passage à la ligne (= \n = newline) s'il existe (ce qui est le cas ici)
	($nom_programme, $alias_programme) = split;
	# partager le string (par défaut) $_ en composantes d'un vecteur
	# avec comme sépérateur (par défaut) un espace
	# affecter directement la 1° composante du vecteur à la variable $nom_programme
	# et affecter directement la 2° composante du vecteur à la variable $alias_programme
	# (si jamais il y avait plus de composantes, on ne s'en occupe pas et ça n'a pas d'importance)
	$ligne++;
	# incrémenter la variable $ligne, non déclarée, comme toutes les autres, 
	# mais ici son initialisation importe :
	# comme on l'incrémente elle est considérée comme un nombre, et donc initialisée à 0
	# lors du 1° passage dans la boucle while elle vaut donc 1 à cet endroit-ci

if ($nom_programme eq "") {
	print "\nA la ligne numéro $ligne du fichier $nom_fichier_liste :\n";
	print "$_\n";
	print "Il faut 2 paramètres (séparés par un espace) par ligne:\n";
	print "	1° = nom du programme existant\n";
	print "	2° = 'alias' désiré du programme\n";
	next;
	# passer à la passe suivante du while, donc à la ligne suivante
} else {
	# trouver l'exécutable
	$chemin_executable = `which $nom_programme 2>&1`;
	# ajouter la sortie erreur (2) à la sortie standard (1)
	$chemin_executable =~ s/which: .*/Not found/;
	# standardiser la réponse si pas trouvé
	chomp $chemin_executable;
	# vérifier qu'il existe
	if ($chemin_executable eq "Not found") {
		print "\n$nom_programme n'est pas un exécutable dans un des répertoires du \$PATH\n";
		next;
		# passer à la passe suivante du while, donc à la ligne suivante
	}
}

if ($alias_programme eq "") {
	print "\nA la ligne numéro $ligne :\n";
	print "$_\n";
	print "\nIl faut un 2° paramètre = 'alias' désiré du programme $chemin_executable\n";
	next;
	# passer à la passe suivante du while, donc à la ligne suivante
} else {
	# vérifier que n'existe pas déjà
	$chemin_executable = `which $nom_programme 2>&1`;
	# ajouter la sortie erreur (2) à la sortie standard (1)
	$chemin_executable =~ s/which: .*/Not found/;
	# standardiser la réponse si pas trouvé
	chomp $chemin_executable;
	if ($chemin_executable ne "Not found") {
		print "\n$alias_programme désigne déjà un exécutable dans un des répertoires du \$PATH :\n";
		system("which $alias_programme");
		next;
		# passer à la passe suivante du while, donc à la ligne suivante
	}
}

$chemin_script = "/usr/local/bin/$alias_programme";
open(SCRIPT, ">$chemin_script");
print SCRIPT "#!/bin/bash\n\n";
print SCRIPT "$chemin_executable \$1 &\n";
close SCRIPT;

$affichage_chmod = `/bin/chmod +x $chemin_script`;
$affichage_ll = `/bin/ls -l $chemin_script`;
if ($affichage_chmod eq "") {
	print "\nLe script bash $chemin_script lançant $chemin_executable a été créé :\n";
} else {
	print "\nIl y eu un problème pour créer le script bash $chemin_script lançant $chemin_executable :\n";
}
print "   $affichage_ll\n";

}
close LISTE;
exit;
