Directives relatives à la création de paquets avec CMake

Ce document décrit les meilleures pratiques d’utilisation du système de compilation CMake pour la création de paquets Fedora.

Dépendances de compilation

Le BuildRequires suivant DOIT être ajouté :

BuildRequires: cmake

Macros disponibles

Dans vos specs, vous utiliserez généralement les macros suivantes :

%cmake

Définit CFLAGS, LDFLAGS, etc. et appelle %__cmake avec les paramètres appropriés (-DCMAKE_INSTALL_PREFIX:PATH=/usr etc.). Vous pouvez passer -Doption=valeur à cette macro afin de définir des options du système de compilation.

%cmake_build

Compile le projet (en utilisant %__cmake --build).

%cmake_install

Installe le projet compilé (en utilisant %__cmake --install).

%ctest

Exécute les tests définis avec add_test() dans le projet (en utilisant %__ctest).

En créant des paquets pour les logiciels KDE, vous voudrez probablement remplacer %cmake par %cmake_kf5 ou %cmake_kf6. Pour plus d’informations, consultez Directives relatives à la création de paquets KDE.

Il est rarement nécessaire (mais permis) d’utiliser ou d’altérer les macros suivantes :

Toutes les macros commençant par un double underscore sont à considérer comme étant privées et INSTABLES et sont susceptibles d’être supprimées à l’avenir.
%__cmake

Chemin d’accès à l’exécutable cmake.

%__ctest

Chemin d’accès à l’exécutable ctest.

%__cmake_in_source_build

Contrôle si la compilation est effectuée out-of-source (non défini, par défaut) ou in-source (si défini). Si possible, vous devriez utiliser la compilation out-of-source ; en effet, il s’agit de la direction dans laquelle se dirige Fedora et l’upstream CMake.

%__cmake_builddir

Contient l’emplacement du répertoire où la compilation a été effectuée. Pour les compilations out-of-source, cette macro contient la même valeur que %_vpath_builddir. Pour les compilations in-source, cette macro contient le répertoire utilisé pour la compilation.

Cette macro existe uniquement à des fins de compatibilité très spécifiques. Pour les compilations out-of-source classiques, cette macro équivaut à %_vpath_builddir. Elle sera peut-être supprimée à l’avenir.

Exemple d’utilisation

%build
%cmake
%cmake_build

%install
%cmake_install

%check
%ctest

Remarques

-DCMAKE_SKIP_RPATH:BOOL=ON. Avec cmake à partir de la version 2.4, cette option ne doit pas être utilisée. Dans les versions récentes, CMake devrait être en mesure de gérer correctement les RPATH. Définir CMAKE_SKIP_RPATH sur une telle version aurait pour effet de désactiver les RPATH également dans build-dir. Cela pourrait avoir pour effet de lier les binaires aux bibliothèques système (par exemple, lorsqu’une version précédente du paquet est déjà installée) à la place des bibliothèques créées lors de la compilation.

Néanmoins, il se peut que des problèmes liés aux RPATH se produisent si CMake n’est pas utilisé correctement. Par exemple, installer une cible avec INSTALL(FILES ... RENAME ...) n’a pas pour effet de retirer les RPATH ; pour y remédier, INSTALL(TARGETS ...) doit être utilisé, et la propriété OUTPUT_NAME doit être modifiée.

Il existe deux documentations de qualité pour CMake :