groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Groff] building process stuck when building groff-current using Min


From: Keith MARSHALL
Subject: Re: [Groff] building process stuck when building groff-current using MinGW
Date: Fri, 7 Sep 2007 15:37:54 +0100




> > > mkdir -p -- D:/groff-cvs/share/groff/1.19 .3
> > > mkdir: cannot create directory `D:/groff-cvs/share/groff/1.19\001.3':
> > > No such file or directory
> >
> > This looks like a broken `cat' program on msys which doesn't handle
> >
> >   version=`cat $(top_srcdir)/VERSION`
>
> This is line 49 in Makefile. Line 51 says,
>
>   revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
>
> I wonder the meaning of $$.

As you correctly noted, in your follow up message, it's a requirement of
make's substitution mechanism, to get a single `$' into the command line.

> I tried this command in linux manually.
> After some experiment(revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$//'
> REVISION`, remove .& from the command), I found the pattern is not
> found. So... maybe the Makefile is also responsible?

So no, the Makefile is correct, in these two definitions.

However, your problem is quite specific, and I happen to have spent some
time analysing the particular circumstances which cause it.  It is caused,
very specifically, by a command substitution of the form:

  $ some command "anything`command producing CRLF output`anything" ...

I've grepped all the Makefiles in my build tree, and I can find only one
place where such a construct occurs:

  $ grep -n '$(version)$(revision)' `find . -iname Makefile\*`
  ./doc/Makefile:79:<TAB>sed -e "s;@VERSION@;$(version)$(revision);" $< \
  [...other matches, with no quoted substitutions, snipped...]

Note that, because of the definitions for version and revision, which you've
already specified, make will transform this into a form which triggers the
substitution bug in MSYS shell.  Studying, your diagnostic, I see a stray
\01 byte inserted after your `$(version)' substitution, but not after the
`$(revision)' substitution.  Since I know that the circumstances triggering
this bug are very specific, I can deduce:

  1) The cat command being invoked by the `$(version)' substitution is *not*
     the MSYS cat; it is a CRLF output format variant you've obtained from
     some other source, and you need to get it out of the MSYS PATH.

  2) The sed command used by the `$(revision)' substitution *is* the MSYS
     sed, (or it is an alternative which produces LF only text output).

You might also like to try the new version of bash-3.1, for MSYS, which I
mentioned in an earlier post.

Regards,
Keith.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]