Création package compilable avec Autotools
Bonjour à tous,
J'ai bien avancé sur un projet et je souhaite dans quelques temps pouvoir le distribuer, càd qu'il puisse s'installer sur divers systèmes Linux. Jusqu'à présent pour mes tests, je compilais mon projet selon la commande suivante :
Code:
~/ gcc -Wall main.c goopatch.c `pkg-config --libs gtk+-2.0 goocanvas gmodule-2.0 --cflags` -o cc10kx
J'ai suivi divers tuto pour la création d'un Makefile y compris celui présent ici, mais ce dernier utilise une méthode plus "manuel". Il me semble qu'il vaudrait mieux passer par les autotools, enfin c'est l'opinion que je me suis fait, notamment en décortiquant des Makefile de projets open source. Le problème, c'est que c'est la galère pour trouver un tuto clair sur le sujet. Bon, heureusement j'ai fini par me dépatouiller et voici comment je procède.
J'ai crée d'abord un configure.ac modifié aux besoins, sur la base d'autoscan :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.60])
AC_INIT([goode], [0.1])
AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2])
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_INSTALL
AC_PROG_LIBTOOL
AC_PROG_MAKE_SET
AM_PATH_GTK_2_0([2.10.0],,AC_MSG_ERROR([Gtk+ 2.10.0 or higher required.]))
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT |
J'ai ensuite crée un Makefile.am pour chaque niveau de répertoire.
Makefile.am en racine :
Code:
1 2 3 4 5 6
| SUBDIRS=src src/interface
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = HACKING
CLEANFILES = *~ |
Makefile.am dans le dossier src :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| bin_PROGRAMS=goode
goode_LDADD = \
$(GTK_LIBS) \
$(GOOCANVAS_LIBS)
@GTK_LIBS@
goode_CFLAGS = \
$(GTK_CFLAGS) \
$(GOOCANVAS_CFLAGS) \
@GTK_CFLAGS@ \
$(PLATFORM_CFLAGS)
goode_INCLUDES = \
$(GTK_CFLAGS) \
$(GOOCANVAS_CFLAGS)
goode_SOURCES = \
main.c main.h \
goopatch.c goopatch.h \
callback.c \
asm_editor.c asm_editor.h \
config.c config.h \
functions.c functions.h \
patches.c patches.h \
presets.c presets.h \
routing.c routing.h \ |
Ensuite, je lance dans l'ordre suivant les autotools pour créer les scripts :
autoheader --------> création du config.h.in
libtoolize -----------> création de scripts libtool
aclocal -------------> scripts aclocal
autoconf -----------> création du script .configure
automake -a -c ----> création du Makefile final
Tout se passe bien, je fais le classique ./configure, ok, pas de problème, puis le tout aussi classique make, là la compilation échoue puisqu'il ne trouve pas les libs de goocanvas. Je ne sais pas comment renseigner dans les divers fichiers de scripts de rechercher la présence de la lib goocanvas. A noter que je ne veux pas recopier les headers de goocanvas dans mon projet, je veux que les utilisateurs voulant le compiler doivent avoir la lib goocanvas d'installer.
Quelqu'un aurait une idée de comment renseigner l'utilisation de la lib goocanvas ?
Merci d'avance.