Erreur dans un makefile

Bonjour à tous,

Mon problème initial :
A partir des fichiers xml du “Guide avancé d’écriture des scripts Bash”, je voulais générer les fichiers html puis le pdf de leur dernière traduction française…
J’ai donc récupéré, à priori, tout ce qu’il fallait… dont le makefile que voici :

[code]VERSION := $(shell grep “” abs-book.xml | tr -d "[a-z]<>/ ")
BASEDIR := $(HOME)/ABS-$(VERSION)
PDF_OUTPUT := abs-$(VERSION).pdf
NOCHUNKS_OUTPUT := abs-$(VERSION).html
CHUNK_QUIET=0
XSLROOTDIR=/usr/share/xml/docbook/stylesheet/nwalsh
VPATH = $(BASEDIR)
src = *.xml *.sh

all: html pdf

html: index.html
index.html: $(src)
[ -d $(BASEDIR) ] || mkdir $(BASEDIR)
xsltproc --xinclude --nonet -stringparam profile.condition html
-stringparam profile.attribute “standalone” -stringparam profile.value “no”
-stringparam chunk.quietly $(CHUNK_QUIET)
-stringparam base.dir $(BASEDIR)/
stylesheets/abs-chunked.xsl abs-book.xml

    [ -d $(BASEDIR)/stylesheets ] || mkdir $(BASEDIR)/stylesheets
    cp stylesheets/*.css $(BASEDIR)/stylesheets

    [ -d $(BASEDIR)/images ] || mkdir $(BASEDIR)/images
    cp images/*.png $(BASEDIR)/images
    cd $(BASEDIR)/; sed -i -e "s@../stylesheets@stylesheets@g" *.html
    cd $(BASEDIR)/; sed -i -e "s@../images@images@g" *.html

    for filename in `find $(BASEDIR) -name "*.html"`; do \
      tidy -config tidy.conf $$filename; \
      true; \
      sed -i -e "s@text/html@application/xhtml+xml@g" $$filename; \
    done;

pdf: $(PDF_OUTPUT)
$(PDF_OUTPUT): $(src)
[ -d $(BASEDIR) ] || mkdir $(BASEDIR)
xsltproc --xinclude --nonet --stringparam profile.condition pdf
–output $(BASEDIR)/abs-pdf.xml stylesheets/abs-profile.xsl abs-book.xml
xsltproc --nonet --output $(BASEDIR)/abs-pdf.fo stylesheets/abs-pdf.xsl
$(BASEDIR)/abs-pdf.xml
sed -i -e “s/inherit/all/” $(BASEDIR)/abs-pdf.fo
fop.sh $(BASEDIR)/abs-pdf.fo $(BASEDIR)/$(PDF_OUTPUT)
rm $(BASEDIR)/abs-pdf.xml $(BASEDIR)/abs-pdf.fo

nochunks: $(NOCHUNKS_OUTPUT)
$(NOCHUNKS_OUTPUT): $(src)
[ -d $(BASEDIR) ] || mkdir $(BASEDIR)
xsltproc --xinclude --nonet -stringparam profile.condition html
–output $(BASEDIR)/$(NOCHUNKS_OUTPUT)
stylesheets/abs-nochunks.xsl abs-book.xml

    tidy -config tidy.conf $(BASEDIR)/$(NOCHUNKS_OUTPUT) || true

    sed -i -e "s@text/html@application/xhtml+xml@g"  \
      $(BASEDIR)/$(NOCHUNKS_OUTPUT)

validate:
xmllint --noout --nonet --xinclude --postvalid abs-book.xml
[/code]
et qui lors d’un :

(comme indiqué ici) me donne l’erreur suivante :

N’ayant aucune connaissance sur make, j’ai cherché un peu sur le Net ici, ou encore , mais j’avoue ne pas y comprendre grand chose à ces histoires de tabulation ! (il semble pourtant y en avoir dans ce makefile, non ?)

:arrow_right: Je suis un newbie en Linux (et pas du tout programmeur) : je cherchais justement à apprendre le langage Bash grâce à ce guide…

Quelqu’un peut-il avoir la gentillesse de m’expliquer, svp, ou de me donner la solution afin que ce make fonctionne correctement ???
Merci beaucoup d’avance !
@+
Eric.

Dans la ligne [quote] [ -d $(BASEDIR) ] || mkdir $(BASEDIR)
[/quote]vérifie qui tu as bien un tab en début de ligne et non des blancs.

Par ailleurs l’option -p de mkdir devrait t’intéresser. Ce que tu as écrit est réalisé par

Et probablement toutes les autres lignes ont le meme problème.

Whaouh !!!
1/4h plus tard et j’ai la bonne réponse !!!

Merci les gars !
C’est effectivemment (pour l’instant) un pb d’espace que j’ai cru être des TABs… (Je comprends un peu mieux les remarques du post au pb similaire)

@fran.b :
Pour info, concernant l’option -p de mkdir, en fait j’ai recopié “bêtement” le makefile qui était mis à dispo sur leur site… (sans le comprendre :blush: )

Je vais, bien évidemment, essayer de “l’éplucher” un peu… et pour débuter, par exemple, j’ai voulu afficher à chaque fois les variables comme VERSION, en faisant un :

à la deuxième ligne mais il me fait une autre erreur :

Ben oui, c’est pas un script bash.

[quote] Un Makefile est un fichier constitué de plusieurs règles de la forme :

cible: dependance commandes
[/quote]
Ta commande (echo $VERSION) n’étant liée à aucune cible, elle ne sert à rien. make détecte alors une erreur, et refuse de s’exécuter…
Si tu mets ta commande dans la cible index.html :

index.html: $(src) echo $VERSION [ -d $(BASEDIR) ] || mkdir $(BASEDIR) ...
(avec une vraie tabulation, hein ? :smiley: )
tu verras alors s’afficher la version quand tu lanceras :

(ou make html : la règle html ne faisant rien d’autre que d’avoir index.html comme dépendance).

Super, merci beaucoup kna !

C’est un peu compliqué pour moi toutes ces notions (je débute) mais je pense avoir pigé !!!
J’ai ajouté donc là où il fallait :wink: et avec les tabs qu’il fallait :laughing: ça :

@echo 'Version = ' $(VERSION) mkdir -p $(BASEDIR)
Et maintenant j’ai bien mon N° de version qui s’affiche !!! (et le dir est bien créée de façon plus “propre” :wink: )

Sauf que maintenant, j’obtiens d’autre erreurs :

[code]$ make html
Version = 6.0.21
mkdir -p /home/int13h/ABS-6.0.21
xsltproc --xinclude --nonet -stringparam profile.condition html
-stringparam profile.attribute “standalone” -stringparam profile.value “no”
-stringparam chunk.quietly 0
-stringparam base.dir /home/int13h/ABS-6.0.21/
stylesheets/abs-chunked.xsl abs-book.xml
abs-part1.xml:13: parser error : Opening and ending tag mismatch: anchor line 13 and para

^
abs-part1.xml:30: parser error : Opening and ending tag mismatch: para line 13 and partintro

^
warning: failed to load external entity "ex1a.sh"
abs-part1.xml:293: parser error : Failure to process entity ex1a
&ex1a;
^
abs-part1.xml:293: parser error : Entity ‘ex1a’ not defined
&ex1a;
^
abs-part1.xml:311: parser error : Opening and ending tag mismatch: anchor line 311 and para
* * *
^
abs-part1.xml:379: parser error : Opening and ending tag mismatch: anchor line 313 and para

^
abs-part1.xml:606: parser error : Opening and ending tag mismatch: para line 313 and chapter

^
abs-part1.xml:609: parser error : Opening and ending tag mismatch: para line 311 and part

Etc, etc…[/code]
Et là, j’ai beau être un peu nullos sur les bords, je vois bien que le pb ne vient plus du makefile.
Et dommage pour moi, je n’y connais strictement rien non-plus en xml… :unamused:

Tous ça, je vous le rappelle, pour apprendre à la base à parler Bash !!!

:arrow_right: Je clos donc ce post et ouvre celui-ci puisque le pb est différent…

Merci encore à vous tous pour votre aide !
@+
Eric