Linux-Mandrake: Manuel de référence | ||
---|---|---|
Page précédente | Chapitre 15. Installation d'un logiciel libre | Page suivante |
Un intérêt purement technique du fait de disposer des sources est le portage du logiciel. Un logiciel libre développé pour un Unix est utilisable sur tous les Unix existants (libres ou propriétaires), avec cependant quelques modifications. Ceci implique une configuration du logiciel juste avant la compilation.
Il existe plusieurs systèmes de configuration, il va falloir utiliser celui que l'auteur du logiciel a prévu (parfois, plusieurs sont au programme). Généralement, vous pouvez :
utiliser Autoconf (voir la section Autoconf) au cas où un fichier nommé configure existe dans le répertoire parent de la distribution;
utiliser Imake (voir la section Imake) dans le cas où un fichier nommé Imakefile existe dans le répertoire parent de la distribution;
exécuter un script shell (par exemple install.sh) selon ce que dit le fichier INSTALL (ou le fichier README).
Autoconf permet de configurer correctement un logiciel. Il crée les fichiers nécessaires à la compilation (par exemple, Makefile), et modifie parfois directement les sources (comme par le biais d'un fichier config.h.in).
Le principe d'Autoconf est simple :
l'auteur du logiciel sait quels tests sont nécessaires pour configurer son logiciel (ex : « quelle version de cette bibliothèque est utilisée? »). Il les écrit dans un fichier nommé configure.in, en suivant une syntaxe précise;
il exécute Autoconf. Ce dernier génère, à partir du fichier configure.in, un script de configuration appelé configure. Ce script est celui qui effectuera les tests nécessaires à la configuration du programme;
l'utilisateur final exécute ce script, et Autoconf se charge de configurer tout ce qui est nécessaire à la compilation.
Un exemple d'utilisation d'Autoconf :
$ ./configure loading cache ./config.cache checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for main in -lX11... yes checking for main in -lXpm... yes checking for main in -lguile... yes checking for main in -lm... yes checking for main in -lncurses... yes checking how to run the C preprocessor... gcc -E checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include checking for ANSI C header files... yes checking for unistd.h... yes checking for working const... yes updating cache ./config.cache creating ./config.status creating lib/Makefile creating src/Makefile creating Makefile |
Dans le cas où on désirerait avoir un peu plus de contrôle sur ce qu'engendre la commande configure, on peut lui passer des options via la ligne de commande ou des variables d'environnement. Exemple :
$ ./configure --with-gcc --prefix=/opt/GNU |
ou encore (sous Bash) :
$ export CC=`which gcc` $ export CFLAGS=-O2 $ ./configure --with-gcc |
ou :
$ CC=gcc CFLAGS=-O2 ./configure |
Typiquement, il s'agit d'une erreur de type configure: error: Cannot find library guile (configure: erreur: je n'arrive pas à trouver la bibliothèque guile) (cela couvre la plupart des erreurs du script configure).
Clairement, le script configure n'a pas réussi à trouver une bibliothèque (dans notre exemple, la bibliothèque guile). Le principe est que le script configure compile un petit programme de test qui utilise cette bibliothèque. S'il n'arrive pas à le compiler, c'est qu'il n'arrivera pas à compiler le logiciel. D'où l'erreur !
Regardez d'où vient l'erreur rencontrée en examinant la fin du fichier config.log, qui contient une trace de toutes les étapes de la configuration. Le compilateur de langage C est généralement assez explicite dans ses messages d'erreur. Cela vous aidera à résoudre le problème.
Vérifiez que la bibliothèque en question est bien installée. Si ce n'est pas le cas, installez-la (à partir des sources ou d'un binaire précompilé) et exécutez à nouveau le script configure. Une méthode efficace pour vérifier l'installation est de rechercher le fichier matérialisant la bibliothèque, qui porte invariablement le nom lib<nom>.so. Par exemple,
$ find / -name 'libguile*' |
$ locate libguile |
Vérifiez qu'elle est accessible au compilateur, c'est-à-dire que la bibliothèque est bien située dans un répertoire parmi : /usr/lib, /lib, /usr/X11R6/lib; ou parmi ceux spécifiés par la variable d'environnement LD_LIBRARY_PATH (expliquée dans Et si ça ne fonctionne pas? numéro 5.b). Vérifiez que ce fichier est bien une bibliothèque en tapant file libguile.so.
Vérifiez que les fichiers d'en-têtes correspondant à la bibliothèque sont bien installés à la bonne place (généralement, /usr/include, /usr/local/include, ou /usr/X11R6/include). Si vous ne savez pas de quels fichiers d'en-têtes vous avez besoin, vérifiez que vous avez bien installé la version de développement de la bibliothèque nécessaire (par exemple, gtk+-devel au lieu de libgtk). La version de développement de la bibliothèque est livrée avec les fichiers de type include (à inclure) nécessaires à la compilation d'un logiciel utilisant cette bibliothèque.
Vérifiez que vous avez assez de place disque (en effet le script configure a besoin d'un peu de place pour des fichiers temporaires). Utilisez la commande df -k pour visualiser les partitions de votre système, et ne vous préoccupez que des partitions pleines ou presque.
Si vous ne comprenez pas le message d'erreur stocké dans le fichier config.log, n'hésitez pas à demander aide et assistance à la communauté du logiciel libre (voir la section Assistance technique).
De plus, méfiez-vous si configure répond 100% de No ou s'il répond No alors que vous êtes certain qu'une bibliothèque existe (par exemple il serait très étrange qu'il n'existe pas sur votre système au moins une bibliothèque curses). Dans de tels cas, on est probablement en présence d'une variable LD_LIBRARY_PATH mal positionnée!
Imake permet de configurer un logiciel libre en créant un fichier Makefile à partir de règles simples. Ces règles déterminent quels fichiers ont besoin d'être compilés pour construire le binaire, et Imake engendre le Makefile correspondant. Ces règles sont spécifiées dans un fichier appelé Imakefile.
Là où Imake prend tout son intérêt, c'est qu'il utilise des informations dépendantes du site (de l'architecture de la machine). C'est assez pratique dans le cas d'applications utilisant X Window System. Mais Imake est utilisé dans le cas de nombreuses autres applications.
L'utilisation la plus simple de Imake est de se rendre dans le répertoire principal de l'archive décompactée, et ensuite d'exécuter le script xmkmf, qui fera appel au programme Imake :
$ xmkmf -a imake -DUseInstalled -I/usr/X11R6/lib/X11/config make Makefiles |
Si le site est mal installé, recompiler et installer X11R6!
Lisez le fichier INSTALL ou README pour de plus amples informations. Généralement, il va vous falloir exécuter un fichier de type install.sh ou configure.sh. Ensuite, soit le script d'installation sera silencieux (et déterminera tout seul ce dont il a besoin), soit il vous demandera des informations sur votre système (par exemple, des chemins).
Si vous n'arrivez pas à déterminer le fichier que vous devez exécuter, vous pouvez (sous Bash) taper ./, et ensuite taper deux fois la touche TAB (touche de tabulation). Bash complétera automatiquement par un éventuel fichier exécutable du répertoire (donc, un éventuel script de configuration). Dans le cas où plusieurs fichiers sont exécutables, il vous en donnera une liste. Il ne vous reste plus qu'à choisir le bon.
Un cas particulier est l'installation de modules Perl (mais pas seulement). L'installation de tels modules se fait par l'exécution d'un script de configuration lui-même écrit en Perl. La commande à effectuer est généralement :
$ perl Makefile.PL |
Certaines distributions de logiciels libres sont mal organisées, surtout lors des premières phases de développement (et un homme prévenu en vaut deux !). Elles nécessitent parfois de retoucher « à la main » les fichiers de configuration. Généralement, ces fichiers sont un fichier Makefile (voir la section make) et un fichier config.h (mais ce nom n'est qu'une convention).
Je ne recommande ces manipulations qu'à des utilisateurs sachant ce qu'ils font. C'est un travail qui nécessite des connaissances réelles et une motivation nécessaire pour réussir. Mais c'est en forgeant qu'on devient forgeron.
Page précédente | Début | Page suivante |
Décompactage | Remonter | Compilation |