On Thu, 7 Apr 2016 10:56:23 -0700
Bryce Harrington <br...@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.chok...@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 <br...@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

Attachment: pgpNeAyrENop5.pgp
Description: OpenPGP digital signature

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to