Un intérêt purement technique de la disposition des sources est le portage du logiciel. Un logiciel libre développé pour un UNIX (vaste famille de systèmes d'exploitation dont GNU/Linux fait partie) est utilisable sur tous les UNIX existants (libres ou non libres), avec cependant quelques modifications. Ceci nécessite une configuration du logiciel juste avant la compilation.
Il existe plusieurs systèmes de configuration, il va falloir utiliser celui prévu par l'auteur du logiciel (parfois, plusieurs sont prévus). Généralement :
utiliser autoconf (voir la section Autoconf) dans le cas où un fichier configure existe dans le répertoire parent de la distribution
utiliser Imake (voir la section Imake) dans le cas où un fichier 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 README)
autoconf permet de configurer correctement un logiciel. Il crée les fichiers nécessaires à la compilation (Makefile par exemple), et modifie parfois directement les sources (par exemple par le biais d'un fichier config.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 librairie utilise tu ?"). 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
Si on veut avoir un peu plus de contrôle sur ce que génère 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
Typiquement, il s'agit d'une erreur de type "configure: error: Cannot find library guile" (95% des erreurs du script configure).
Clairement, le script configure n'a pas réussi à trouver une librairie (dans notre exemple, la librairie guile). Le principe est que le script configure compile un petit programme de test qui utilise cette librairie. S'il n'arrive pas à compiler ce programme, c'est qu'il n'arrivera pas à compiler le logiciel. D'où une erreur.
Regardez d'où vient l'erreur rencontrée en regardant la fin du fichier config.log, qui contient une trace de toutes les étapes de la configuration. Le compilateur C est généralement assez explicite dans ses messages d'erreur. Cela vous aidera pour résoudre le problème.
Vérifiez que la librairie 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 configure. Une méthode efficace pour le vérifier est de rechercher le fichier matérialisant la librairie, qui est invariablement libnom.so. Par exemple,
$ find / -name libguile*ou encore :
$ locate libguile
Vérifiez qu'elle est accessible au compilateur. C'est à dire que la librairie est bien située dans un répertoire parmi : /usr/lib, /lib, /usr/X11R6/lib (ou parmi ceux spécifiés par la la variable d'environnement LD_LIBRARY_PATH, voir la partie LD_LIBRARY_PATH de la section Et si ça ne fonctionne pas ?"). Vérifiez que ce fichier est bien une librairie en faisant un "file libguile.so".
Vérifiez que les fichiers d'en-tête correspondant à la librairie sont bien installés à la bonne place (généralement /usr/include ou /usr/local/include ou /usr/X11R6/include. Si vous ne savez pas de quels fichiers d'en-tête vous avez besoin, vérifiez que vous avez bien installé la version de développement de la librairie nécessaire (par exemple, sous Debian GNU/Linux : libgtk-dev au lieu de libgtk). La version de développement de la bibliothèque est livrée avec les fichiers include nécessaires à la compilation d'un logiciel utilisant cette librairie.
Vérifiez que vous avez assez de place disque (le script configure a besoin d'un peu de place pour des fichiers temporaires). Utilisez 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 Support 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 au moins une librairie curses !). Dans ce 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 génère 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 XWindow. Mais Imake est utilisé dans le cas de beaucoup d'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é (çela arrive souvent avec Solaris par exemple), recompiler et installer X11R6 ! Je crois qu'il y a un moyen de ne récupérer et recompiler qu'Imake, mais par manque de temps je n'ai pas cherché, donc je suis preneur !
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. Après, 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 (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 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 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 (mais l'utilisateur est prévenu !). 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 (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.