# Pkg-config

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

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 septembre 2003. 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 mai 2011, date de la dernière réalisation.

## Caractéristiques techniques

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

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) :
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 :
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

pkgconf 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.