Petit manuel d'empaquetage façon Slackware

Sébastien Boillod

Ce petit manuel vise à donner au lecteur des clés pour mieux comprendre la fabrication des paquets Slackware et pouvoir à son tour en produire. Il aborde une à une les questions liées à cette procédure, de la recherche des sources jusqu'à l'obtention d'un paquet bien formé, cela en essayant de mettre chaque fois en relief leurs tenants et aboutissants.

Préface

Slackware est une marque déposée par Patrick Volkerding et Slackware Linux, Inc. Ce document et les informations qu'il contient n'émanent pas du projet Linux Slackware et n'ont donc aucun caractère officiel.

Copyright © 2005-2006 Sébastien Boillod

Document originellement publié sur internet avec pour titre " Petit manuel d'empaquetage façon Slackware ", selon les termes de la licence Microbe v. 1.0. Conformément aux conditions de cette licence, vous êtes libre de copier, modifier et diffuser le présent document. En exerçant une de ces libertés, vous reconnaissez avoir pris connaissance et être en accord avec les conditions de la dite licence. Vos éventuelles versions modifiées ne doivent pas reprendre le nom de branche de cette version qui est " Araucaria ".

Historique des versions

Version 1.0 (Araucaria)
Première version intégrale sous le titre " Petit manuel d'empaquetage façon Slackware ". Changement de licence vers la licence Microbe. Première publication sur Slackfr. [SB.- 21 Mai 2006]

Versions 0.9.0 - 0.9.6
Phase de rédaction : six versions de brouillon publiées selon les termes de la GNU Free Documentation License sur le défunt site du groupe LInux Slackware Autonome (LISA) sous le titre « Petit manuel d'empaquetage Slackware ou Comment descendre des sources au .tgz en SlackBuild ». [SB.- 27 août 2005 - 29 Janvier 2006]

Remarque

Ce qui va suivre n'ayant aucune prétention à la perfection, critiques, suggestions, précisions et corrections (même et surtout les petites coquilles) sont les bienvenues à cette adresse : tapamilastiko+free(fr) (remplacez « + » par « @ » et les deux parenthèses par un seul point à gauche de leur contenu).

Introduction

Sous Slackware comme sous les autres distributions, il est bien rare de n'être pas un jour ou l'autre confronté au déroutant problème des sources et aux questions qui le suivent et le déclinent. Comment procéder ? À quoi sert-donc cette curieuse opération que l'on nomme « compilation » ? et surtout Pourquoi (diable) cela ne marche-t-il pas ? C'est à peu près comme cela que commence généralement le tortueux chemin qui mène d'une console syncopée d'erreurs à l'obtention de paquets s'intégrant parfaitement au reste du système.

Ce qui va suivre vise tout simplement à vous faire gagner du temps par un exposé aussi explicite que possible des points à aborder pour réussir un paquet. Je tiens à préciser tout de suite que je ne suis nullement un spécialiste du "bash" ou de quelqu'autre langage de programmation. Tout ce que j'écris ici n'est que le résultat de lectures diverses (tutoriels, man-pages, forums,… ) et de longs tatônnements. Sa lecture ne requiert d'ailleurs que des connaissances basiques en ligne de commande : "cd, cp, mv, installpkg, upgradepkg, et bien sûr l'indispensable man", voilà qui devrait être amplement suffisant pour suivre.

Bien que le seul objet de ce manuel soit l'élaboration de paquets Slackware, l'exposé commencera par aborder des notions très générales sur la compilation des logiciels sous GNU/Linux. Il sera ainsi plus facile d'entrer ensuite dans les subtilités propres à la création des paquets de la Slackware et d'introduire la question des scripts de compilation (ou "SlackBuild"). Après cela, et pour finir, quelques clés de personnalisation pour vos propres scripts seront examinées.

Obtenir un paquet

Nous avons défini notre objectif dans l'obtention de paquets Slackware, vaste sujet en vérité qui mérite donc un bon dégrossissage préalable. C'est pourquoi avant de travailler « l'orthodoxie » de nos paquets nous règlerons d'abord les questions permettant d'avoir un paquet « tout court ».

Les sources

Qu'est-ce donc que les sources ?

Pour faire concis et rester au niveau de mes compétences : la résolution d'un problème de communication. Voici comment on peut poser ce problème : « Sachant que nous avons d'un côté un humain ne comprenant que des mots et des concepts souvent équivoques, et de l'autre une machine ne réagissant qu'à "0" (absence de courant) et "1" (présence de courant), comment les faire interagir pour qu'ils donnent des logiciels ? »

La solution a consisté à prémâcher le travail de traduction pour la machine en simplifiant le langage humain. Ainsi naquirent les langages de programmation, caractérisés par un vocabulaire pauvre (en comparaison d'une langue naturelle) et une syntaxe rigide, mais ayant l'immense avantage d'être relativement faciles à transposer en "0" et "1" tout en restant maîtrisables par des humains.

La partie humaine de cette solution est ce qu'on désigne par sources, soit un fichier texte redigé conformément à un (au minimum) langage de programmation. La partie machine, quant à elle, est appelée binaire, en référence au 0|1 qui compose la totalité du langage de celle-ci. Le passage de l'un à l'autre, enfin, s'effectue en ce qui nous concerne (mais non-exclusivement) par une opération nommée « compilation », qui traduit les sources en binaire.

Les sources sont donc le code tel qu'écrit par les programmeurs et leur disponibilité ou non pour l'utilisateur final est un des critères distingant les logiciels libres des logiciels propriétaires. Car à moins de parler couramment le "1" et le "0", il est pratiquement impossible de modifier un binaire. Avec les sources à l'inverse, et pour peu qu'on maîtrise le langage de programmation dans lequel elles ont été écrites, toutes les adaptations et modifications sont envisageables.

Quel est l'intérêt de compiler des sources ?

Récapitulons : les sources sont du code, rédigé par un humain, appelé à être compilé pour être utilisable par la machine, et le libre permet de les obtenir. D'accord, ça a l'air très joli en théorie mais l'intérêt de la chose échappe encore. Pourquoi après tout ne pas se contenter des binaires disponibles dans notre chère Slackware ?

Il n'y a effectivement rien d'impérieux à se lancer dans la compilation des sources, mais s'y mettre ouvre tout de même des perspectives intéressantes :

  • En premier lieu, elle permet de retravailler les paquets de la Slackware. Comme nous le verrons, les sources proposent souvent des options de compilation qui modulent les capacités des binaires obtenus. Il se peut donc parfaitement que Patrick Volkerding (fondateur et unique mainteneur de la Slackware), pour une raison ou une autre, en ait écartées que nous souhaiterions exploiter. Dans pareil cas une recompilation est le seul moyen de remédier à la chose (ou du moins de découvrir pourquoi les options en question n'ont pas été retenues).
  • En deuxième lieu, la Slackware a la particularité de n'être maintenue que par un seul homme. Il est donc bien évident qu'il doit faire un choix dans la gamme de binaires mis à disposition s'il veut pouvoir en assurer un maintien sérieux. Apprendre à compiler soi-même est alors un bon moyen (parfois le seul) pour utiliser des logiciels indisponibles dans la distribution officielle.
  • Enfin, compiler permet de participer à la vie du libre [1]. Il existe en effet énormément de petits projets en développement qui n'attendent que des utilisateurs pour progresser et se faire connaître. Or ils ne peuvent souvent proposer guère plus que des sources. Refuser de se laisser intimider par la compilation permet donc aussi de jouer les explorateurs en terre de développement, voir même de participer à la diffusion des logiciels qu'on aura appréciés en proposant le binaire ou la recette de compilation.

Il existe probablement d'autres bonnes raisons pour se mettre à compiler les sources. Ne serait-ce que la curiosité et l'envie d'apprendre des choses nouvelles. Celles citées devraient cependant suffire pour se convaincre que l'enjeu en vaut la peine.

Où trouver les sources ?

Heureux celui qui a réalisé l'intérêt des sources, mais encore faut-il pour les compiler qu'il les trouve. En la matière il n'existe pas de règle incontournable, on peut toutefois donner quelques pistes selon que les sources recherchées font partie ou non de la distribution officielle.

Si l'on veut récupérer les sources employées par Patrick Volkerding pour faire ses paquets, deux endroits sont à fouiller :

  • Les CD #3 et #4 de la distribution qu'on a installée. C'est bête à dire, mais il n'y a pas plus simple pour trouver les sources de sa Slackware.
  • Les miroirs Slackware : les sources sont contenues et rangées par familles de paquet dans le dossier "/slackware-<version>/source/" de la version recherchée.

Si l'on cherche des sources de logiciels non-proposés dans la Slackware officielle voici quelques bonnes adresses :

  • Freshmeat : un index référençant des milliers de projets de toutes tailles, classés par plate-formes, domaines, licences, etc… c'est un très bon moyen pour trouver les sites hébergeant les projets.
  • Sourceforge : un hébergeur pour le développement libre sur lequel on trouve énormément de projets.
  • Savannah.gnu.org : héberge les projets en rapport avec GNU [2]. Il en existe également une version pour les projets libres non-affiliés, Savannah.non-gnu.org.
  • Gna ! : un autre hébergeur de projets libres.

Cette liste n'est bien évidemment pas exhaustive mais elle devrait néanmoins constituer un bon point de départ. Vos marque-pages se compléteront très bien tous seuls par la suite, au gré de vos découvertes.

La méthode de compilation « standard »

À présent que nous voici un peu mieux renseignés sur les sources, il est temps de traiter de la compilation à proprement parler. Pour commencer, il nous faut d'une part installer un compilateur et d'autre part trouver des sources à compiler.

Pour ce qui est du compilateur, nous avons à disposition sous Slackware la GNU Compiler Collection, de très loin ce qui est le plus utilisé sous GNU/Linux. Le paquet est disponible dans le dossier "d/ de la Slackware, sous le nom de gcc" [3].

Pour ce qui est des sources on peut bien entendu prendre n'importe lesquelles, cependant nous avons choisi pour le reste de cette partie de nous pencher sur l'éditeur de texte Bluefish. À l'heure où nous écrivons, la version la plus avancée est la 1.0.5.

Récupérer et préparer l'archive

Si nous avons esquissé une explication de ce qu'étaient les sources, nous n'avons en revanche rien dit sur la manière de les identifier. La plupart du temps les sources se présentent sous formes d'archives compressées par "gzip ou bzip2 : <nom_du_logiciel.tar.gz> [4] ou <nom_du_logiciel.tar.bz2>". Parfois certains projets laissent le choix, si vous avez peu de place sur votre disque dur ou une connexion bas-débit, l'archive compressée par "bzip2" est à préférer car de taille plus réduite.

Une fois l'archive téléchargée, la première chose à faire est de la décompresser en employant la commande "tar" dans votre terminal préféré, la même qui a servi à sa compression.

" mushroom@packman:~$ tar xvfj bluefish-1.0.5.tar.bz2
[…]
bluefish-1.0.5/TODO
bluefish-1.0.5/config.guess
bluefish-1.0.5/AUTHORS
bluefish-1.0.5/Makefile.in
bluefish-1.0.5/NEWS
bluefish-1.0.5/README
bluefish-1.0.5/config.sub
bluefish-1.0.5/INSTALL
bluefish-1.0.5/configure
bluefish-1.0.5/COPYING
bluefish-1.0.5/install-sh
bluefish-1.0.5/aclocal.m4
bluefish-1.0.5/ChangeLog
bluefish-1.0.5/configure.ac
bluefish-1.0.5/INSTALL.Debian
"


Le "x suivant la commande tar indique qu'il faut extraire le contenu de l'archive, le v demande de donner le maximum d'informations via la sortie standard (en l'occurrence la fenêtre du terminal), le f appelle l'archive et le j indique que celle-ci est a été compressée avec bzip2 (si elle l'avait été par gzip, on aurait dû mettre z" à sa place [5]).

Il ne reste plus qu'à entrer dans le dossier généré par la décompression à l'aide de la commande "cd" :

" mushroom@packman:~$ cd bluefish-1.0.5/
mushroom@packman:bluefish-1.0.5$
"

Les sources décompressées, il faut savoir que celles-ci ont toujours besoin de binaires extérieurs pour être compilées. Ces binaires sont ce qu'on appelle des « dépendances » et c'est grâce à leur action ou à leur contenu que la compilation va s'effectuer. La première chose à faire est de les identifier en consultant le fichier "README contenu dans l'archive (parfois francisé en LISEZ-MOI") :

" mushroom@packman:bluefish-1.0.5$ less README
This is the Bluefish HTML editor.

It has (among others) the following major features

Customizable syntax highlighting based on Perl Compatible regular expressions,
Multiple encodings support
Wizards for startup, tables, frames, and others
Dialogs for many HTML tags, with all their attributes
User-customizable toolbar for quick access to often used functions
A custom menu, specify your own tags or sets of code, and define your own dialogs
Custom search and replace pattern support for the Custom menu
Function reference browser, including reference files for PHP, HTML, CSS, PYTHON
User customizable integration of many programs, including weblint, tidy, make
Projects for quick access of frequently used sets of files

Installation:
See INSTALL file for information on how to install Bluefish
[…]
"


La commande "less" a pour effet d'éditer le fichier en paginant la sortie.

Cas fréquent, nous sommes ici renvoyés à un fichier "INSTALL", spécialement dédié aux questions d'installation (et donc de compilation).

" mushroom@packman:bluefish-1.0.5$ less INSTALL
To install Bluefish from source:

1) get the required libraries (You will need the header files for
these packages, usually these are packaged seperately with the prefix
-dev, like libgtk2.0-dev or libpcre-dev):
*libgtk2 (preferrably 2.2.2 or newer)
*libpcre
*gnome-vfs2 (Optional; for remote file handling)
*aspell (Optional; for spell checking)
*grep and find are required to use the Advance Open function

2) run ./configure –help
for information about possible options.
(This step is usually not required)

3) configure and compile
./configure [options-you-like-most-here]
make

4) install everything
su
make install
[…]
"

Nous avons de la chance car l'"INSTALL de Bluefish" est riche en informations. Ainsi nous pouvons connaître les dépendances requises et nous voyons que nous sommes en présence d'une procédure de compilation très classique (quasi-standard) passant par la séquence « "configure/make/make install" ».

La liste des dépendances n'est jamais exhaustive dans la mesure où elles s'étalent sur plusieurs générations [6] : z nécessite que y soit installé, qui nécessite lui même x,… Les ancêtres se situant toujours dans les couches profondes de GNU/Linux, ils sont souvent considérés comme allant de soi. En général ne sont donnés que les parents et (parfois) les grands-parents du logiciel. Il ne faut donc pas s'étonner si même après avoir installé les paquets requis la compilation échoue à trouver certains éléments. Le tout est en fait de savoir comment identifier les dépendances manquantes.

" checking for gnome-vfs >= 2.2… no
checking for gnome-vfs >= 2.6… no
checking for libgnomeui >= 2.6… no
checking for pcre-config… no
configure: error: pcre-config not found please install libpcre3-dev or similar
mushroom@packman:bluefish-1.0.5$
"

Dans l'exemple de sortie en erreur ci-dessus, il nous est demandé "pcre-config (en général, les messages d'erreur contenant <quelque_chose> not found" relèvent d'un problème de dépendance). La première question qui doit venir à l'esprit est « La dépendance manquante est-elle disponible dans la Slackware ? », elle économisera du temps et préviendra pas mal de problèmes. Pour répondre à cette question, deux ressources sont à notre disposition :

  • Le gestionnaire de paquets du site Slackware : il suffit de taper le nom de la dépendance dans le moteur de recherche, et celui-ci indiquera dans quel paquet elle se trouve, si toutefois elle est bien disponible dans la Slackware [7].
  • Les fichiers "MANIFEST : situés dans les répertoires slackware/ des CD#1 et #2, ils listent le contenu des paquets de leur CD respectif. Ils sont compressés par bzip2. Le mieux est généralement de les copier sur le disque dur (ici nous avons mis le MANIFEST du premier CD dans notre dossier utilisateur). Il vous suffit ensuite d'utiliser la commande suivante où <pattern>" sera le nom de la dépendance recherchée :

    bzcat MANIFEST.bz2 | sed "{/<pattern>\|Package:/p}" -n | less

La commande "bzcat affiche le contenu du fichier compressé par bzip2, puis l'envoie à la commande sed. Celle-ci ne retiendra que les lignes contenant <pattern> ou Package: qu'elle transmettra à less que nous venons de voir. Voici un exemple avec pcre-config" :

" mushroom@packman:~$ bzcat MANIFEST.bz2 | sed "{/pcre-config\|Package:/p}" -n | less\\ \\  [...]\\ \\  || Package: ./l/netpbm-10.18.12-i486-1.tgz\\  || Package: ./l/pango-1.8.2-i486-1.tgz\\  || Package: ./l/pcre-6.4-i486-1.tgz\\  -rwxr-xr-x root/bin 1192 2005-09-12 17:25:14 usr/bin/pcre-config\\  || Package: ./l/pilot-link-0.11.8-i486-2.tgz\\  || Package: ./l/popt-1.7-i386-1.tgz\\ \\  [...]\\ "\\
De la présente sortie, nous pouvons conclure que "pcre-config est dans le paquet ./l/pcre-6.4-i486-1.tgz"

Ici nous avons donc trouvé ce que nous cherchions dans le paquet "pcre (répertoire l/" ), il n'en va hélas pas toujours ainsi. Même si la Slackware est plutôt bien pourvue pour satisfaire les dépendances des logiciels hors-distribution, il arrive en effet qu'il faille compiler certaines dépendances. Pour trouver celles-ci, le plus simple est de chercher sur le site du logiciel car il est bien rare qu'il n'y ait pas de lien vers les sites hébergeant le développement de ses dépendances. Si cette voie échoue, il ne restera alors plus qu'à recourir aux moyens que nous avons déjà évoqués (cf. Où trouver les sources ?).

Configurer les sources

Les questions liées à la préparation de l'archive étant théoriquement réglées nous pouvons aborder celle de la configuration des sources. « Théoriquement » car, limitation de la liste des dépendances annoncées oblige, les deux phases se chevauchent souvent dans les faits.

La configuration des sources, dans la grande majorité des cas, est assurée via un script exécutable nommé "configure". Son rôle est double : d'une part il permet à l'utilisateur de moduler les caractéristiques du binaire final, d'autre part il collecte des informations sur le système pour connaître son type, l'emplacement des binaires requis, le compilateur utilisé, etc… Avec un peu d'expérience, vous remarquerez que certaines options et syntaxes reviennent souvent d'un "configure à l'autre, il n'en demeure pas moins qu'un configure est toujours propre aux sources qu'il configure. Regardons un peu plus en détail celui de Bluefish" dans ses éléments les plus communément rencontrés :

" mushroom@packman:bluefish-1.0.5$ ./configure –help
1 `configure' configures this package to adapt to many kinds of systems.
2
3 Usage: ./configure [OPTION]… [VAR=VALUE]…
4
5 To assign environment variables (e.g., CC, CFLAGS…), specify them as
6 VAR=VALUE. See below for descriptions of some of the useful variables.
7
8 Defaults for the options are specified in brackets.

[…]

20
21 Installation directories:
22 –prefix=PREFIX install architecture-independent files in PREFIX
23 [/usr/local]
24 –exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
25 [PREFIX]
26
27 By default, `make install' will install all the files in
28 `/usr/local/bin', `/usr/local/lib' etc. You can specify
29 an installation prefix other than `/usr/local' using `–prefix',
30 for instance `–prefix=$HOME'.
31
"Les numéros de lignes ont étés ajoutés içi pour des besoins d'explications et n'apparaissent normalement pas à l'écran.

  • Dans l'invite de commande, "./ indique que le fichier est dans le répertoire courant et l'option –help demande des informations quand à l'usage de ce configure . Cette option fonctionne vraisemblablement avec tous les fichiers de type configure" (et même avec la plupart des commandes).
  • L'option "–prefix=<répertoire> (l. 22) est sans doute l'option la plus communément utilisée avec les configure". Elle permet de définir dans quel dossier sera installé le binaire final. En règle générale les logiciels sont paramétrés par défaut pour s'installer dans "/usr/local/. C'est un choix compréhensible dans la mesure où /usr/local" est justement prévu pour accueillir les logiciels hors-distribution. Il faut cependant prendre garde car certains éléments ne sont pas toujours localisés par le système lorsqu'ils sont dans ce répertoire. Cela peut poser problème, notamment si ces éléments sont requis en tant que dépendances par d'autres logiciels. C'est pourquoi on peut lui préférer le répertoire "/usr/".

" 32 For better control, use the options below.
33
34 Fine tuning of the installation directories:
35 –bindir=DIR user executables [EPREFIX/bin]
36 –sbindir=DIR system admin executables [EPREFIX/sbin]
37 –libexecdir=DIR program executables [EPREFIX/libexec]
38 –datadir=DIR read-only architecture-independent data [PREFIX/share]
39 –sysconfdir=DIR read-only single-machine data [PREFIX/etc]
40 –sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
41 –localstatedir=DIR modifiable single-machine data [PREFIX/var]
42 –libdir=DIR object code libraries [EPREFIX/lib]
43 –includedir=DIR C header files [PREFIX/include]
44 –oldincludedir=DIR C header files for non-gcc [/usr/include]
45 –infodir=DIR info documentation [PREFIX/info]
46 –mandir=DIR man documentation [PREFIX/man]
47
"

  • Les options de préfixation, lignes 34 à 46, fonctionnent comme "–prefix=<répertoire>", à cette différence qu'elles paramètrent le répertoire d'installation d'un élément précis du logiciel. Par exemple, si le logiciel dans son entier est préfixé pour s'installer dans "/usr/local, –sysconfdir=/etc permet d'installer les élements du logiciel concernant la configuration système dans /etc, la place qui leur est normalement dévolue, au lieu de /usr/local/etc".

" 48 Program names:
49 –program-prefix=PREFIX prepend PREFIX to installed program names
50 –program-suffix=SUFFIX append SUFFIX to installed program names

[…]

53 System types:
54 –build=BUILD configure for building on BUILD [guessed]
55 –host=HOST cross-compile to build programs to run on HOST [BUILD]
56
57 Optional Features:
58 –disable-FEATURE do not include FEATURE (same as –enable-FEATURE=no)
59 –enable-FEATURE[=ARG] include FEATURE [ARG=yes]

[…]

89
90 Optional Packages:
91 –with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
92 –without-PACKAGE do not use PACKAGE (same as –with-PACKAGE=no)

[…]
"

  • Les options lignes 49 et 50 servent à ajouter du texte avant ou après le nom du programme. Elles sont utiles lorsque, par exemple, on a besoin d'installer sur une machine un même logiciel sous des versions différentes.
  • L'option "–build=<architecture>" (l. 54) permet d'indiquer l'architecture du système sur lequel est compilé le programme afin que le compilateur puisse optimiser la compilation. L'option "–host=<architecture> (souvent appelée –target=<architecture>), ligne 55, quant à elle, sert à spécifier l'architecture du système de destination du futur binaire [8]. Il existe beaucoup de configure" qui, à l'instar de celui-ci (« guessed » signifie « déduit »), déterminent automatiquement l'architecture du système sur lequel ils sont lancés et ordonnent une optimisation pour et à partir de celle-ci.
  • Les options "–disable-<quelque_chose> et –enable-<quelque_chose>" (l. 58-59) sont très communes. Elle servent à désactiver ou à activer le support de certaines options par le logiciel. Cela peut être utilisé lorsqu'on ne veut pas installer certaines dépendances requises du seul fait d'un support.
  • Les options lignes 91 et 92 sont proches des "–disable/enable-<quelque_chose>" mais elles visent une dépendance plutôt qu'un support. Par exemple, elles sont utiles lorsqu'on a une une dépendance optionnelle installée sur son système mais qu'on ne veut pas que le logiciel en tienne compte (les "configure" ont souvent tendance à utiliser tout ce qui leur tombe sous la main pour paramétrer la compilation).

" 117 Some influential environment variables:
118 CC C compiler command
119 CFLAGS C compiler flags
120 LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
121 nonstandard directory <lib dir>
122 CPPFLAGS C/C preprocessor flags, e.g. -I<include dir> if you have\\ 123 headers in a nonstandard directory <include dir>\\ 124 CPP C preprocessor\\ 125 \\ 126 Use these variables to override the choices made by `configure' or to help\\ 127 it to find libraries and programs with nonstandard names/locations.\\ 128\\ " * Ces options permettent de préciser les paramètres de compilation. Entre autres, on peut ainsi préciser le compilateur utilisé, le degré, la portée (faire un binaire compatible ou non avec des architectures proches de celle utilisée) et le sens des optimisations (par exemple, faire un binaire le plus petit possible). Pour ce qui est des deux options "LDFLAGS et CPPFLAGS", elles aident le compilateur à s'y retrouver sur des systèmes un peu exotiques. La liste des options proposées peut paraître à première vue longue et difficile à appréhender. On aurait dans une large mesure tort car il faut bien voir que toutes ces options sont d'abord conçues pour ceux qui maintiennent des distributions. Dans le cadre d'un empaquetage « artisanal » on n'a souvent à manier guère plus que "--prefix=<répertoire>", comme ici : " mushroom@packman:bluefish-1.0.5$ ./configure --prefix=/usr/local/\\ checking for gcc... gcc\\ checking for C compiler default output file name... a.out\\ \\ [...]\\ \\ checking for a BSD-compatible install... /usr/bin/ginstall -c\\ checking build system type... i686-pc-linux-gnu\\ checking host system type... i686-pc-linux-gnu\\ \\ [...]\\ \\ checking for GNU gettext in libc... yes\\ checking for dcgettext... yes\\ checking for msgfmt... /usr/bin/msgfmt\\ checking for gmsgfmt... /usr/bin/msgfmt 1\\ checking for xgettext... /usr/bin/xgettext\\ checking for bison... no\\ checking for catalogs to be installed... bg cs da de es fi fr hu it ja no pl pt pt_BR ru sr sv ta tr zh_CN zh_TW \\ checking for msgmerge... /usr/bin/msgmerge\\ checking for gettext in -lintl... no\\ configure: creating ./config.status\\ config.status: creating Makefile\\ config.status: creating icons/Makefile\\ config.status: creating src/Makefile 2\\ config.status: creating po/Makefile\\ config.status: creating data/Makefile\\ config.status: creating src/config.h\\ config.status: executing default-1 commands\\ -----------\\ If you like this program, please let me know and send me\\ a postcard and tell me what city/country you're from:\\ \\ Olivier Sessink\\ Thorbeckestraat 470 3\\ 6702 CJ\\ Wageningen\\ The Netherlands\\ -----------\\ " * Ce "configure teste si les gettext-tools" sont présents. Ceux-ci sont couramment utilisés pour internationnaliser les logiciels. Si vous souhaitez que les logiciels que vous compilez comportent une version française (quand elle est disponible, comme ici où la ligne "checking for catalogs to be installed comporte fr), installez le paquet gettext-tools contenu dans le répertoire d/" de la Slackware. * Une fois tous les tests effectués, le "configure crée les Makefile", fichiers contenant les instructions pour la compilation. * Il arrive que certains "configure" se terminent par un petit résumé des options retenues pour la compilation. Ce n'est pas le cas ici mais nous avons tout de même droit à un gentil clin d'oeil. Soulignons pour finir sur les "configure" qu'il arrive hélas que certaines sources, anciennes ou avec une procédure de compilation inhabituelle, n'en contiennent pas. Dans pareil cas il convient de lire attentivement le "README" pour saisir comment la prise en main par l'utilisateur final a été pensée par les développeurs et agir en conséquence (en général cela passe par l'édition d'un "Makefile", nous présenterons plus tard un mode de gestion pour ce cas, cf. [[#patchdyn+ Makefile_ok 2006-01-23 22:51:06.000000000 +0100
@@ -2,9 +2,9 @@
# Makefile - Un faux Makefile.
#

-PREFIX=/usr
+PREFIX=${FINAL_DIR}
BINDIR=${PREFIX}/bin
-DESTDIR=
+DESTDIR=${TMP_DIR}
MANDIR=${PREFIX}/man

# fin_de_fichier
"

Voici à quoi ressemble le contenu de notre fichier correctif au format unifié. Le principe en est en fait très simple : il indique que chaque ligne commençant par un "- sera remplacée par la ligne suivante commençant par un +", les lignes sans marques servant à évaluer le contexte de chaque changement.

On remarque également en haut, précédés de "— et de + le nom des fichiers concernés. Cela est important car patch" en tirera deux informations : d'une part que les fichiers sont dans un même répertoire, d'autre part que le fichier cible se nomme "Makefile". " patch -sp0 << P4TCH_F1N\\ --- Makefile 2006-01-23 22:50:48.000000000 +0100\\ +++ Makefile_ok 2006-01-23 22:51:06.000000000 +0100\\ @@ -2,9 +2,9 @@\\ # Makefile - Un faux Makefile.\\ #\\ -PREFIX=/usr\\ +PREFIX=${FINAL_DIR}\\ BINDIR=\${PREFIX}/bin\\ -DESTDIR=\\ +DESTDIR=${TMP_DIR}\\ MANDIR=\${PREFIX}/man\\ \\ # fin_de_fichier\\ \\ P4TCH_F1N\\ " À présent, il ne nous reste plus qu'à embarquer notre patch dans notre script. Nous procédons pour ce faire comme précédemment avec "cat. Tout ce qui est compris entre la commande patch et P4TCH_F1N lui sera passé. L'argument s indique de ne pas imprimer le rapport d'exécution sur la sortie standard. L'argument p0, pour sa part, demande de conserver les chemins indiqués en haut du différentiel. Ainsi le fichier Makefile" ne sera recherché que dans le répertoire courant, ce qui implique que la commande soit exécutée à partir du répertoire des sources [[#note_33

 
slackfr.txt · Last modified: 2011/12/15 21:18 by chris
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki