[PATCH weston v2] Makefile: Fix compilation error when git commit message has quotes

Pekka Paalanen ppaalanen at gmail.com
Wed Apr 13 14:45:33 UTC 2016


On Thu, 7 Apr 2016 10:56:23 -0700
Bryce Harrington <bryce at osg.samsung.com> wrote:

> On Thu, Apr 07, 2016 at 04:53:31PM +0000, Chokshi, Mitul wrote:
> > 
> > A double-quote in log message prematurely ends the enquoted string
> > in src/git-version.h, causing an error during compilation.
> > Used stream editor to replace " with \"
> > 
> > Signed-off-by: Mitul Chokshi <mitul.chokshi at intel.com>
> > ---
> >  Makefile.am | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/Makefile.am b/Makefile.am
> > index d1644ac..a09ea0b 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -162,7 +162,7 @@ endif
> >  
> >  if HAVE_GIT_REPO
> >  src/git-version.h : $(top_srcdir)/.git/logs/HEAD
> > -	$(AM_V_GEN)echo "#define BUILD_ID \"$(shell git --git-dir=$(top_srcdir)/.git describe --always --dirty) $(shell git --git-dir=$(top_srcdir)/.git log -1 --format='%s (%ci)')\"" > $@
> > +	$(AM_V_GEN)echo "#define BUILD_ID \"$(shell git --git-dir=$(top_srcdir)/.git describe --always --dirty) $(shell git --git-dir=$(top_srcdir)/.git log -1 --format='%s (%ci)' | $(SED) 's|\"|\\\"|g' )\"" > $@
> >  else
> >  src/git-version.h :
> >  	$(AM_V_GEN)echo "#define BUILD_ID \"unknown (not built from git or tarball)\"" > $@  
> 
> Confirmed:
> 
> $ echo "foo" >> README
> $ git commit README -m "testing \""
> 
> $ make
> make  all-am
> make[1]: Entering directory `/home/bryce/src/Wayland/weston'
> /bin/bash: -c: line 0: syntax error near unexpected token `('
> /bin/bash: -c: line 0: `echo "  GEN     " src/git-version.h;echo "#define BUILD_ID \"1.9.0-168-gb1f52e1 testing " (2016-04-07 10:53:15 -0700)\"" > src/git-version.h'
> make[1]: *** [src/git-version.h] Error 1
> make[1]: Leaving directory `/home/bryce/src/Wayland/weston'
> make: *** [all] Error 2
> 
> With the patch applied, the make passes properly.
> 
> Tested-by: Bryce Harrington <bryce at osg.samsung.com>

Hi,

hmm, it doesn't work for me. I did the same test, having the subject
line 'testing "', and I get:

$ make
make  all-am
make[1]: Entering directory '/home/pq/build/weston'
  GEN      src/git-version.h
  CC       src/weston-compositor.o
In file included from /home/pq/git/weston/src/compositor.c:62:0:
./src/git-version.h:1:81: warning: missing terminating " character [enabled by default]
 #define BUILD_ID "1.10.0-90-g610e0a7-dirty testing " (2016-04-13 17:32:41 +0300)"
                                                                                 ^
  CC       src/weston-main.o
In file included from /home/pq/git/weston/src/main.c:47:0:
./src/git-version.h:1:81: warning: missing terminating " character [enabled by default]
 #define BUILD_ID "1.10.0-90-g610e0a7-dirty testing " (2016-04-13 17:32:41 +0300)"
                                                                                 ^
/home/pq/git/weston/src/main.c: In function ‘main’:
./src/git-version.h:1:66: error: expected ‘)’ before numeric constant
 #define BUILD_ID "1.10.0-90-g610e0a7-dirty testing " (2016-04-13 17:32:41 +0300)"
                                                                  ^
/home/pq/git/weston/src/main.c:737:6: note: in expansion of macro ‘BUILD_ID’
      BUILD_ID);
      ^
./src/git-version.h:1:54: error: called object is not a function or function pointer
 #define BUILD_ID "1.10.0-90-g610e0a7-dirty testing " (2016-04-13 17:32:41 +0300)"
                                                      ^
/home/pq/git/weston/src/main.c:737:6: note: in expansion of macro ‘BUILD_ID’
      BUILD_ID);
      ^
./src/git-version.h:1:66: error: missing terminating " character
 #define BUILD_ID "1.10.0-90-g610e0a7-dirty testing " (2016-04-13 17:32:41 +0300)"
                                                                  ^
/home/pq/git/weston/src/main.c:737:6: note: in expansion of macro ‘BUILD_ID’
      BUILD_ID);
      ^
Makefile:5398: recipe for target 'src/weston-main.o' failed
make[1]: *** [src/weston-main.o] Error 1
make[1]: Leaving directory '/home/pq/build/weston'
Makefile:2982: recipe for target 'all' failed
make: *** [all] Error 2


So even if the Makefile command invocation was fixed, the C
preprocessor token is still broken. Touching just README probably did
not cause any .c files to be rebuilt.

Maybe the git strings should not go as arguments to 'echo', so we avoid
one level of quoting. So something like this in bash:

( echo -n '#define BUILD_ID "' &&
  ( git --git-dir=$(top_srcdir)/.git describe --always --dirty &&
    git --git-dir=$(top_srcdir)/.git log -1 --format='%s (%ci)' ) | sed ... &&
  echo '"' ) > $@

An excercise for the reader is to figure out if there are any bashisms
in that, how to write it in Makefile.am, and what the sed script needs
to be. And perhaps make sure to remove stray newlines from the string.


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20160413/30ddfa57/attachment-0001.sig>


More information about the wayland-devel mailing list