Re: GNU make ne manque pas d'echo

Top Page

Reply to this message
Author: Marc
Date:  
To: guilde
Subject: Re: GNU make ne manque pas d'echo
Le 07/01/2013 10:33, Yves Martin a écrit :
> Bonjour,
>
> Sous ce titre se cache un mini casse-tête...
> Je viens de me battre un moment pour comprendre pourquoi des "vieux" cas tests écrits dans un Makefile ne voulaient plus passer "comme avant" sous mon ancienne Mandriva, alors que maintenant ils tournent sur Debian Wheezy.
>
> default:
>     echo -e "A\nB" > test-make-echo.log
>     wc test-make-echo.log

>
> En fait, "make" produit un fichier "test-make-echo.log" étrange. L'option "-e" a fini dans le fichier !
>
> Et tout le problème est de savoir quel est ce "echo": la version interne du Bash ou la version externe "/bin/echo"...
>
> Après m'être posé pleins de questions, j'ai compris que:
> - make utilise "/bin/sh" comme SHELL
> - sur Debian il s'agit de "Dash" et non pas "Bash"
> - la fonction interne "echo" de Dash ne connaît que l'option "-n", le remplacement des échappements étant appliqué par défaut
>
> La guerre des Shell a encore frappé. Il y a probablement plein de bonnes raisons pour ne pas respecter la syntaxe de "/bin/echo" dans une (re-)implémentation interne mais c'est vraiment terrible pour la portabilité.
>
> La solution est simple: ajouter "SHELL = /bin/bash" dans le Makefile... Car je me suis dit que changer le lien "/bin/sh" (qui n'est pas une "alternative") par "bash" avait toutes les chances de faire planter le boot de Debian.
>


Et si tu mets le chemin complet "/bin/echo" ?

--
Marc BERLIOUX
"Quand on a raison 24 heures avant le commun des mortels,
on passe pour n'avoir pas le sens commun pendant 24 heures"