Supposons que vous ayez un projet avec un répertoire appelé src
Nous allons donc suivre les étapes suivantes pour construire et empaqueter une extension python en utilisant autotools :
Créer les fichiers Makefile.am
Tout d'abord, vous devez créer un Makefile.am dans la racine de votre projet, listant essentiellement (mais pas exclusivement) les sous-répertoires qui doivent également être traités. Vous obtiendrez quelque chose comme ceci :
SUBDIRS = src
Le second, à l'intérieur du src
contiendra les instructions pour compiler réellement votre extension python. Il ressemblera à ceci :
myextdir = $(pkgpythondir)
myext_PYTHON = file1.py file2.py
pyexec_LTLIBRARIES = _myext.la
_myext_la_SOURCES = myext.cpp
_myext_la_CPPFLAGS = $(PYTHON_CFLAGS)
_myext_la_LDFLAGS = -module -avoid-version -export-symbols-regex initmyext
_myext_la_LIBADD = $(top_builddir)/lib/libhollow.la
EXTRA_DIST = myext.h
Écrire le fichier configure.ac
Ce fichier doit être créé dans le répertoire racine du projet et doit énumérer toutes les bibliothèques, programmes ou tout type d'outil dont votre projet a besoin pour être construit, comme un compilateur, un linker, des bibliothèques, etc.
Les paresseux, comme moi, n'ont pas l'habitude de le créer à partir de zéro, je préfère utiliser l'outil d'analyse de l'environnement. autoscan
qui recherche les choses que vous utilisez et génère un configure.scan
qui peut être utilisé comme base pour votre véritable configure.ac
.
Pour informer automake
que vous aurez besoin de matériel python, vous pouvez l'ajouter à vos configure.ac
:
dnl python checks (you can change the required python version bellow)
AM_PATH_PYTHON(2.7.0)
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
PYTHON_LIBS="-lpython$PYTHON_VERSION"
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
AC_SUBST([PYTHON_LIBS])
AC_SUBST([PYTHON_CFLAGS])
Récapitulation
En gros, automake
dispose d'une extension intégrée qui sait comment gérer le matériel python, il suffit de l'ajouter à l'interface de l'utilisateur. configure.ac
et ensuite tirer profit de cette fonctionnalité dans votre Makefile.am
.
PyGtk est sans aucun doute un exemple génial, mais il est assez volumineux, alors peut-être voudrez-vous consulter un autre projet, tel que Guake