pkg-config

Un article de Wikipédia, l'encyclopédie libre.

pkg-config

Informations
Développé par Tollef Fog Heen / freedesktop.org
Dernière version 0.29.2 ()
Dépôt git://anongit.freedesktop.org/pkg-configVoir et modifier les données sur Wikidata
Écrit en C
Système d'exploitation Type UnixVoir et modifier les données sur Wikidata
Environnement de type Unix
Type outil de développement
Licences GNU GPL
Site web pkg-config.freedesktop.org

pkg-config est un logiciel qui fournit une interface unifiée pour interroger les bibliothèques installées lors de la compilation de code source qui utilise une de ces bibliothèques.

Historique[modifier | modifier le code]

La première implémentation de cet outil a été développée en script shell par James Henstridge, et les premiers prototypes sont réalisés en . En 2005, le programme est entièrement réécrit en langage C par Havoc Pennington. Des versions bêta sont ainsi distribuées une fois par an, excepté en 2009, jusqu'en , date de la dernière réalisation.

Caractéristiques techniques[modifier | modifier le code]

Il a été conçu à l'origine pour GNU/Linux, mais est aujourd'hui également disponible pour divers systèmes BSD, pour Microsoft Windows, Mac OS X et Solaris.

pkg-config fournit diverses informations au sujet des bibliothèques installées. Ces informations peuvent comprendre :

  • des paramètres pour un compilateur C ou C++
  • des paramètres pour l'éditeur de liens
  • la version de la bibliothèque en question
  • indique la présence des bibliothèques installées ou pas avec un intervalle de version requis

Fonctionnement[modifier | modifier le code]

Quand une bibliothèque est installée à partir d'un gestionnaire de paquets ou directement par la compilation du code source, un fichier .pc est installé dans un certain répertoire prévu à cet effet (l'emplacement de ce répertoire dépend du système et devrait être indiqué dans la documentation du paquet pkg-config).

Ce fichier comprend plusieurs entrées. Les différentes entrées classiques que l'on peut y trouver sont les paramètres nécessaires pour compiler avec la bibliothèque, l'emplacement des fichiers d'en-tête, la version et une description.

Voici un exemple de fichier d'extension .pc pour la bibliothèque logicielle libpng (qui sous GNU/Linux devrait se trouver à l'emplacement /usr/lib/pkgconfig/libpng.pc) :

prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include/libpng12
 
Name: libpng12
Description: Loads and saves PNG files
Version: 1.2.31
Libs: -L${libdir} -lpng12
Libs.private: -lz -lm 
Cflags: -I${includedir}

Ce fichier nous indique ainsi que la bibliothèque peut être trouvée dans le dossier /usr/lib et les en-têtes dans le dossier /usr/include/, que son nom est libpng12 et sa version 1.2.31. Il fournit aussi les paramètres nécessaire pour compiler avec cette bibliothèque.

Voici un exemple d'utilisation de pkg-config lors de la compilation :

gcc -o test test.c $(pkg-config --libs --cflags libpng)

Parfois lors de l'installation d'une bibliothèque à partir de ses sources il n'y a pas de fichier d'extension .pc d'installé et l'utilisateur devra créer ce fichier s'il veut pouvoir utiliser pkg-config pour compiler avec cette bibliothèque.

Alternative : le projet pkgconf[modifier | modifier le code]

pkgconf[1] est un programme développé indépendamment du projet pkg-config durant l'été 2011 dans le but de le remplacer.

Comme toutes les implémentations du logiciel pkg-config, cet outil permet donc de définir les options de compilation et de liaison. Une option de compilation est une option envoyée à un compilateur pour lui dire de faire autre chose que sa valeur par défaut. Elles sont généralement écrites sous la forme d'un paramètre, et sont dans de nombreux cas écrites en ligne de commande et envoyées au compilateur en tant qu'arguments. Les deux outils utilisent les scripts produits par autoconf pour automatiser la configuration du code source. La vérification des dépendances des bibliothèques logicielles est en grande partie assurée par le préprocesseur de macro m4, via la macro d'autoconf PKG_CHECK_MODULES.

À la différence de pkg-config, ce programme ne dépend pas de la bibliothèque logicielle GLib, alors que pkg-config nécessite GLib pour être compilé, la bibliothèque Glib a aussi besoin de pkg-config pour compiler, ce qui provoque une dépendance circulaire. Heureusement depuis la version en développement pkg-config intègre sa propre copie de GLib, ce qui permet de compiler pkg-config sans dépendance.

Notes et références[modifier | modifier le code]

  1. (en) « Code source du projet pkgconf », sur GitHub, (consulté le )

Liens externes[modifier | modifier le code]