2016-12-03 4 views
0

Dans mon répertoire src je le fichier d'interface neoleo.i qui est utilisé par rasade pour créer neoleo_wrap.c via la règle:faire distcheck permission refusée

neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h 
     swig -tcl8 $(srcdir)/neoleo.i 

Lorsque je tape make dist ; make distcheck il sorties:

swig -tcl8 ../../../src/neoleo.i 
Unable to open file ../../../src/neoleo_wrap.c: Permission denied 
make[2]: *** [Makefile:1313: neoleo_wrap.c] Error 1 

Que dois-je faire pour résoudre ce problème?

Certaines parties pertinentes de mon Makefile.am:

EXTRA_DIST = $(srcdir)/neoleo.i 
BUILT_SOURCES = getdate.c parse.c parse.h posixtm.c posixtm.h neoleo_wrap.c 
nodist_libneoleo_la_SOURCES = neoleo_wrap.c 
neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h 
     swig -tcl8 $(srcdir)/neoleo.i 

complet Makefile.am ici:

Makefile.am

+0

Ceci est une question automake, pas une question makefile. S'il vous plaît ajuster vos tags. – MadScientist

+0

Question de suivi: est-ce une convention d'inclure ou d'exclure le code wrapper généré avec l'archive tar? – blippy

+0

La plupart du temps, vous incluez le wrapper généré dans l'archive, afin que les utilisateurs puissent créer le résultat sans avoir à installer swig. Mais s'ils en ont besoin pour une raison ou pour une autre, cela n'a pas vraiment d'importance. – MadScientist

Répondre

3

automake distcheck vérifie que votre système de construction se comporte correctement selon ses normes et une partie de c'est que le répertoire source n'est pas modifié de quelque façon que ce soit. distcheck utilise des permissions pour cela. Dans votre cas, swig tente d'écrire son fichier de sortie dans le répertoire source qui n'est pas correct (selon automake): ce répertoire ne doit pas être modifié.

Même si cela ne vous tenait pas à cœur, votre makefile est erroné car il indique que votre règle va générer neoleo_wrap.c, mais votre ligne de commande swig créera en réalité ../../src/neoleo_wrap.c; ne pardonnera pas cette trahison.

Donc, vous devez changer votre commande swig à quelque chose comme:

neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h 
     swig -tcl8 -o [email protected] $< 
+0

Je ne peux pas vous remercier assez! Cela résout le problème. Je semble avoir passé plus de temps à cajoler autotools à faire ce que je veux que la programmation C réelle. J'ai rendu le fichier src/Makefile.am disponible à titre de référence à titre de référence: https://gist.github.com/blippy/6120a53c10ae438c37399c29e795ef53 – blippy

+0

La chose à propos de l'utilisation des autotools, c'est que vous considérez les besoins de l'utilisateur final à l'avance avant que quelqu'un vous envoyer un rapport de bogue à ce sujet: les utilisateurs veulent construire à partir de l'arbre, ils veulent utiliser des compilateurs croisés, ils veulent d'autres choses. autoconf et automake s'assurent que toutes ces choses sont disponibles dans votre paquet ... mais bien sûr, pour les obtenir, vous devez vous assurer qu'il se comporte correctement. – MadScientist