#!/usr/bin/perl -w

#########################################################################################
#
# Script d'installation des liens si necessaire pour G'MIC
#    
#    Le script base son analyse sur la production de la ligne de commande:
#    	$ ldd /usr/bin/gmic | grep libGraphicsMagick
#		libGraphicsMagick++.so.1 => /usr/lib/libGraphicsMagick++.so.1 (0xb7d19000)
#		libGraphicsMagick.so.1 => /usr/lib/libGraphicsMagick.so.1 (0xb75d7000)
#
#    L'algo est le suivant:
#    Si le lien n'existe pas (ex: libGraphicsMagick++.so.1)
#        Si le lien initial existe (ex: libGraphicsMagick++.so)
#            Link libGraphicsMagick++.so, libGraphicsMagick++.so.1
#        SiNon
#            Analyse de la table pour une creation de lien
#        FinSi
#    FinSI
#
#########################################################################################
#
#     Script cree par:
#        -b52         http://www.xcfa.tuxfamily.org/
#        -ZondeR      ...............................
#        -xxxxxx      ...............................
#
#########################################################################################
#
# Licence GPL 2
#
# GNU General Public License
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# OLD ADRESS:
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# NEW ADRESS:
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################################


my $VERSION = '0.0.2';
my $PACKAGE = 'gmic_link_install.pl';


use constant {
	LINK_SRC	=> 0,	# Nom du PacKage DEBIAN 32 bits		my $LePaquet
	LINK_DEST	=> 1,	# Nom du PacKage RPM 64 bits		my $LePaquet
};

my @tableau = (

# LENNY
[ "/usr/lib/libGraphicsMagick++.so.1",	"/usr/lib/libGraphicsMagick++.so.1.0.3"	],
[ "/usr/lib/libGraphicsMagick.so.1",	"/usr/lib/libGraphicsMagick.so.1.0.11"	],
# JAUNTY
[ "/usr/lib/libGraphicsMagick++.so.1",	"/usr/lib/libGraphicsMagick++.so.1.0.3"	],
[ "/usr/lib/libGraphicsMagick.so.1",	"/usr/lib/libGraphicsMagick.so.1.0.11"	],
# KARMIC
[ "/usr/lib/libGraphicsMagick++.so.1",	"/usr/lib/libGraphicsMagick++.so.3"	],
[ "/usr/lib/libGraphicsMagick.so.3",	"/usr/lib/libGraphicsMagick.so.3.0.5"	],
# SQUEEZE
[ "/usr/lib/libGraphicsMagick++.so.1",	"/usr/lib/libGraphicsMagick.so"		],
[ "",					""					]
);

my $cpt_line_line;		# Compteur de lignes
my $cpt;			# Compteur
my @string_line = "";		# Decoupe de lignes
my @string_cut = "";		# Decoupe de @string_line
my @string_link = "";		# Decoupe de @string_cut
my $string_link_one = "";	# Le lien initian: LibLink.so
my $le_fichier = "";		# Est le lien avec le chemin
my $line_command = "";		# Ligne de commande


#########################################################################################
# RAFFRAICHIR LA CONSOLE
#########################################################################################
system('clear');


#########################################################################################
# DETECTION SI MODE ADMINISTRATEUR
#########################################################################################
my $ModeAdministrateur = ($> != 0) ? "FALSE" : "TRUE";


#########################################################################################
# PRESENTAION DE LA BESTIOLLE
#########################################################################################
print " ______________________________________________________________________
|                                                                      |
|          $PACKAGE                    $VERSION               |
|______________________________________________________________________|
|                                                                      |
|  SCRIPT D\'INSTALLATION DE LIENS, SI NECESSAIRE, POUR G'MIC           |
|                                                                      |
|     Script cree par:                                                 |
|     -b52         http://www.xcfa.tuxfamily.org/                      |
|     -ZondeR      ...............................                     |
|     -xxxxxx      ...............................                     |
|     Licence GPL 2                                                    |
|______________________________________________________________________|
|                                                                      |","\n";

#########################################################################################
# ROOT ?
#########################################################################################

if ($ModeAdministrateur =~ "TRUE") {
	print "|      VOUS ETES ADMINISTRATEUR : ET L'INSTALLATION S'EFFECTUERA       |\n";
	print "|      Pour une simulation, connectez vous en simple utilisateur       |\n";

} else {
	print "|   VOUS N'ETES PAS ADMINISTRATEUR : UNE SIMULATION SERA EFFECTUEE     |\n";
	print "|   Pour une installation, connectez vous en administrateur            |\n";
}
print "|______________________________________________________________________|\n\n";


#########################################################################################
# RECUPERATION LIGNE DE COMMANDE
#########################################################################################
my $tabldd=`ldd /usr/bin/gmic | grep libGraphicsMagick`;
if (length($tabldd) == 0) {
	print "\tG'MIC est absent !\n\tAnalyse impossible  :/\n\n";
	exit 0;
}
print "[ LECTURE ]\n";
print "ldd /usr/bin/gmic | grep libGraphicsMagick\n";
print "$tabldd\n";


#########################################################################################
# POUR TOUTES LES LIGNES
#########################################################################################
@string_line = split(/\n+/, $tabldd);
for ($cpt_line = 0; $cpt_line <= $#string_line; $cpt_line ++) {
	
	print "[ ANALYSE ]: $string_line[ $cpt_line ]\n";
	
	#########################################################################################
	# SPLIT LIGNE :: TABULATIONS
	#########################################################################################
	@string_cut = split(/\t+/, $string_line[ $cpt_line ]);
	
	#########################################################################################
	# SPLIT LIGNE :: ESPACES
	#########################################################################################
	@string_link = split(/ +/, $string_cut[ 1 ]);
	
	#########################################################################################
	# RECUP. DU LIEN
	#########################################################################################
	$le_fichier = "/usr/lib/";
	$le_fichier .= $string_link[ 0 ];
	
	#########################################################################################
	# POUR VISUALISER AVEC UN LS
	#########################################################################################
	$line_command = "ls -l ";
	$line_command .= $le_fichier;
	print "$line_command\n";
	system($line_command);
	print "LE LIEN ",$le_fichier;
	
	if ( -l $le_fichier) {
		#########################################################################################
		# RIEN A FAIRE
		#########################################################################################
		print " EST PRESENT\n\n";
	}
	else {
		#########################################################################################
		# LE BOULOT COMMENCE ICI
		#########################################################################################
		print " EST ABSENT\n";
		
		$string_link_one = substr($le_fichier, 0, index($le_fichier, '.')) . ".so";
		print "LE LIEN INITIAL $string_link_one";
		if ( -l $string_link_one) {
			#########################################################################################
			# LE LIEN INITIAL (EXTENTION .SO) SERA RELIE AU LIEN DONNE PAR LDD
			#########################################################################################
			print " EST PRESENT\n";

			#########################################################################################
			# symlink ("nom","lien")
			#########################################################################################
			# Attend comme paramètre:
			# 1. le fichier déjà existant depuis lequel une nouvelle représentation doit être créée
			#    si nécessaire avec le nom de chemin et répertoires,
			# 2. la nouvelle représentation à créer du fichier, si nécessaire avec le nom de chemin.
			# Retour
			#    1 = OK
			#    0 = BAD
			print "*) ";
			if ($ModeAdministrateur =~ "FALSE") {
				print "PASSEZ EN MODE ADMINISTRATEUR POUR LA ==> ";
			}
			print "CREATION DE LIEN:\n";
			print "\tLINK ($string_link_one, $le_fichier);\n";
			print "\n";
			if ($ModeAdministrateur =~ "TRUE") {
				my $link_dest;
				symlink($string_link_one, $le_fichier);
				if ($link_dest = readlink ($le_fichier)) {
					print "SUCCES: Le lien ",$_fichier," pointe vers ",$link_dest;
				} else {
					print "ECHEC :/";
				}
			}
			print "\n\n";
		}
		else {
			#########################################################################################
			# LE LIEN DONNE PAR LDD POINTERA LE LIEN CONTENU DANS LA TABLEAU DE REFRENCES
			#########################################################################################
			print " EST ABSENT\n";
			
			#########################################################################################
			# TESTER LES DATAS DU TABLEAU
			#########################################################################################
			for ($cpt = 0; $cpt < @tableau; $cpt++) {
				if ($tableau [ $cpt ] [ LINK_SRC ] =~ "") {
					if ( ! -l $tableau [ $cpt ] [ LINK_SRC ]) {
						# print "SRC  ",$tableau [ $cpt ] [ LINK_SRC ],"\n";
						if ( -f $tableau [ $cpt ] [ LINK_DEST ]) {
							# print "DEST ",$tableau [ $cpt ] [ LINK_DEST ],"\n";
							#########################################################################################
							# symlink ("nom","lien")
							#########################################################################################
							# Attend comme paramètre:
							# 1. le fichier déjà existant depuis lequel une nouvelle représentation doit être créée
							#    si nécessaire avec le nom de chemin et répertoires,
							# 2. la nouvelle représentation à créer du fichier, si nécessaire avec le nom de chemin.
							# Retour
							#    1 = OK
							#    0 = BAD
							print "**) ";
							if ($ModeAdministrateur =~ "FALSE") {
								print "PASSEZ EN MODE ADMINISTRATEUR POUR LA ==> ";
							}
							print "CREATION DE LIEN:\n";
							print "\tLINK (",$tableau [ $cpt ] [ LINK_DEST ],", ", $tableau [ $cpt ] [ LINK_SRC ],");\n";
							if ($ModeAdministrateur =~ "TRUE") {
								my $link_dest;
								symlink($tableau [ $cpt ] [ LINK_DEST ], $tableau [ $cpt ] [ LINK_SRC ]);
								if ($link_dest = readlink ($tableau [ $cpt ] [ LINK_SRC ])) {
									print "SUCCES: Le lien ",$tableau [ $cpt ] [ LINK_SRC ]," pointe vers ",$link_dest;
								} else {
									print "ECHEC :/";
								}
								print "\n";
							}
							print ";\n";
						}
					}
				}
			}
		}
	}
	@string_link_one = "";
	@string_cut = "";
	@string_link = "";
}

print "\n\n";

exit 0;

