svn commit: r334008 - head/bin/sh

Jilles Tjoelker jilles at stack.nl
Tue May 22 20:23:02 UTC 2018


On Tue, May 22, 2018 at 10:17:41AM +0200, O. Hartmann wrote:
> On Mon, 21 May 2018 21:45:53 -0700
> Cy Schubert <Cy.Schubert at cschubert.com> wrote:
> > In message <20180522061339.2149763e at freyja.zeit4.iv.bundesimmobilien.de>
> > , "O. H
> > artmann" writes:
> > > On Mon, 21 May 2018 21:52:48 +0000 (UTC)
> > > Jilles Tjoelker <jilles at FreeBSD.org> wrote:

> > > > Author: jilles
> > > > Date: Mon May 21 21:52:48 2018
> > > > New Revision: 334008
> > > > URL: https://svnweb.freebsd.org/changeset/base/334008

> > > > Log:
> > > >   sh: Split CNL syntax category to avoid a check on state[level].syntax

> > > >   No functional change is intended.

> > > > Modified:
> > > >   head/bin/sh/mksyntax.c
> > > >   head/bin/sh/parser.c
> [snip]

> > > Have this been tested? Doesn't compile for me:

> > > [...]
> > > Building /usr/obj/usr/src/amd64.amd64/kerberos5/libexec/hprop/hprop
> > > --- all_subdir_rescue ---
> > > --- parser.o ---
> > > /usr/src/bin/sh/parser.c:1440:9: error: use of undeclared identifier 'CQNL'
> > >                         case CQNL:
> > >                              ^
> > > --- all_subdir_gnu ---
> > > Building /usr/obj/usr/src/amd64.amd64/gnu/usr.bin/gdb/libgdb/amd64bsd-nat.o
> > > --- all_subdir_rescue ---
> > > 1 error generated.
> > > *** [parser.o] Error code 1

> > > make[6]: stopped in /usr/src/bin/sh

> > CQNL is defined in /usr/obj/opt/src/svn-current/amd64.amd64/bin/sh/synta
> > x.h, generated by mksyntax.

> > slippy$ ag -s CQNL /export/obj/opt/src/svn-current/amd64.amd64/bin/sh/*.
> > h
> > /export/obj/opt/src/svn-current/amd64.amd64/bin/sh/syntax.h
> > 11:#define CQNL 2			/* newline character in quotes */
> > slippy$ 

> > Remove the file if it's not defined in your syntax.h.

> > Just out of interest, do you use meta mode?

> I think such a question is of common interest if errors/bugs like that occur:
> Yes, I use/compile world/kernel with META mode.

The change itself is fine. It built for me and for Jenkins
(ci.freebsd.org). What is not fine is an incremental build with meta
mode. Apparently, the  syntax.h: .NOMETA  rule added in r301285 causes
bmake to build some files against the old syntax.h, even though syntax.c
and syntax.h will be rebuilt.

To fix this, it may be possible to generate a meta file for syntax.h
based on the one for syntax.c. The same would be done for builtins.[ch]
and nodes.[ch].

Conceptually simpler is accepting what make would like: one command
generates one file only. This is not really new with meta mode since a
somewhat ugly .ORDER declaration had been necessary before. The .c
content can go inside a #ifdef in the .h file so the .c file need not be
autogenerated, or the tools can be run twice, once to generate the .c
file and once to generate the .h file. In both cases, the tools will be
somewhat uglier in order to simplify the build system.

-- 
Jilles Tjoelker


More information about the svn-src-head mailing list