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 quelques modifications voire aucune. 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 Section 3.1, « Autoconf ») au
cas où un fichier nommé configure
existe dans le
répertoire parent de la distribution;
utiliser imake (voir Section 3.2, « 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
$ export CC=`which gcc` $ export CFLAGS=-O2 $ ./configure --with-gcc
$ CC=gcc CFLAGS=-O2 ./configure
Typiquement, il s'agit d'une erreur du style
configure: error: Cannot find library guile
(configure: erreur: je n'arrive pas à trouver la bibliothèque guile
)
(la plupart des erreurs de configure
ressemblent à cela).
Cela indique que 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 que la bibliothèque est accessible au compilateur.
Cela veut dire qu'elle se trouve 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 Section 4.5, « Et si ça ne fonctionne pas ? », partie 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+2.0-devel
au lieu de
libgtk2.0
). 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
-h pour visualiser les partitions de votre système, et
vérifiez les partitions pleines ou en passe de l'être.
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 Section 6.2, « Assistance technique »).
De
plus, vérifiez si une librairie donnée existe même si
configure affirme qu'elle n'existe pas (par
exemple, il serait très étrange qu'aucune bibliothèque
curses
ne soit présente sur votre
système). 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 aussi 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écompressé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é, recompilez et installez 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 (dans sa configuration par
défaut) 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 autre cas particulier est l'installation de modules perl. 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 Section 4.1, « Make ») et un fichier config.h
(mais ce nom n'est
qu'une convention).
Nous ne recommandons 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.