J'ai un projet autotool où une partie du code source est téléchargée dynamiquement à partir du réseau (à cause des droits IP empêchant la redistribution directe) et ensuite construite.Makefile.am - Prérequis manuel de la cible + addprefix?
J'ai un Makefile.am qui fonctionne mais je ne suis pas content de certains de ses aspects.
Ici, il est:
INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
AM_CFLAGS = -fPIC -Wall ${SYMBOL_VISIBILITY}
LIBVERSION=0:0:0
REFSRC_PATH=refsrc
REFSRC_SRC=refsrc/dtx.c refsrc/globdefs.c refsrc/host.c refsrc/mathhalf.c refsrc/sp_enc.c refsrc/sp_rom.c refsrc/vad.c refsrc/err_conc.c refsrc/homing.c refsrc/mathdp31.c refsrc/sp_dec.c refsrc/sp_frm.c refsrc/sp_sfrm.c
${REFSRC_PATH}/.downloaded:
./fetch_sources.py "${REFSRC_PATH}"
for f in `ls -1 "${REFSRC_PATH}"/*.{c,h}`; do \
sed -i -e"s/round/round_l2s/" "$$f"; \
done
touch [email protected]
${REFSRC_PATH}/dtx.c: ${REFSRC_PATH}/.downloaded
lib_LTLIBRARIES = libgsmhr.la
libgsmhr_la_SOURCES = libgsmhr.c $(REFSRC_SRC)
clean-local:
-rm -rf ${REFSRC_PATH}
Donc, essentiellement, libgsmhr.c est mon emballage principal, puis-je télécharger le code source dans un RefSrc/sous-répertoire et le patch un peu.
Le premier problème est que dans REFSRC_SRC j'aurais aimé utiliser un $ (addprefix ...) au lieu de répéter refsrc/devant chaque fichier .c. Mais cela ne semble pas fonctionner et autoreconf se plaint un peu.
détails de défaillance (lors du retrait du RefSrc/préfixe de REFSRC_SRC = et en utilisant $ (addprefix $ {REFSRC_PATH}/$ {REFSRC_SRC}) sur la liste des dépendances):
bash$ autoreconf -i
libgsmhr/Makefile.am:19: addprefix ${REFSRC_PATH}/, ${REFSRC_SRC}: non-POSIX variable name
libgsmhr/Makefile.am:19: (probably a GNU make extension)
(configure works fine)
bash$ make
...
make[2]: Entering directory `/tmp/ram/gapk.build/libgsmhr'
CC libgsmhr.lo
CCLD libgsmhr.la
make[2]: Leaving directory `/tmp/ram/gapk.build/libgsmhr'
...
(Comme vous voyez la compilation fonctionne parce que libgsmhr.c est un stub qui n'utilise pas encore les symboles dans ces fichiers)
Deuxième problème Cette règle est-elle:
${REFSRC_PATH}/dtx.c: ${REFSRC_PATH}/.downloaded
Je dois liste le premier fichier explicitement (dtx.c) au lieu d'utiliser un caractère générique comme:
${REFSRC_PATH}/%.c: ${REFSRC_PATH}/.downloaded
Si je tente d'utiliser le caractère générique, puis autoreconf et se plaint aussi ne fonctionne tout simplement pas .. (le motif ne correspond pas d'une manière ou d'une autre).
détail d'échec:
bash$ autoreconf -i
libgsmhr/Makefile.am:16: `%'-style pattern rules are a GNU make extension
(configure works fine)
bash$ make
...
make[2]: *** No rule to make target `refsrc/dtx.c', needed by `dtx.lo'. Stop.
...
Sylvain
Soyez plus précis: montrez les messages d'autoreconf et montrez ce qui se passe au lieu de fonctionner. (Je suis assez sûr que je sais ce que vous attendez ici, mais le mode d'échec n'est pas évident.) – zwol
Incidemment, "' pour f dans $ (ls -1 "$ {REFSRC_PATH}"/*. {C, h}) '" peut devenir juste "' pour f dans "$ {REFSRC_PATH}"/*. {c, h} '". (Les backticks ont été remplacés par $ (...) 'pour éviter tout conflit avec Markdown.) – zwol
Mise à jour avec plus de détails sur les problèmes. – 246tNt