[GRASS-dev] compilation of grass on AIX 7.1
Glynn Clements
glynn at gclements.plus.com
Fri Mar 22 17:47:56 PDT 2013
Markus Neteler wrote:
> >> /afs/cluster/myuser/private/software/grass-7.0.svn/lib/db/sqlp> make
> >> sqlp.yy.c:1: error: expected identifier or '(' before numeric constant
> >
> > You'll need to post your sqlp.yy.c file; it's generated by yacc/bison,
Oops; *.yy.c is generated by lex/flex, not bison.
> > so there's no guarantee that yours is the same as anyone else's.
>
> OK - file attached: gcc_sqlp.yy.c.gz
Line 1:
0: (Warning) Unknown option s
Grass.make hard-codes:
# lexical analyzer and default options
LFLAGS = -s
GNU flex has a -s switch:
-s, --nodefault
suppress default rule to ECHO unmatched text
but that's not specified by POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/lex.html
We should remove that flag.
But we should also fix the lex files:
sqlp.l:209: warning, -s option given but default rule can be matched
mapcalc.l:216: warning, -s option given but default rule can be matched
This indicates that there are certain character sequences which don't
match any token. Without -s, flex will add a rule to echo unmatched
characters to stdout, which is undesirable.
r55504 removes the -s from LFLAGS and adds error rules to sqlp.l and
mapcalc.l.
> > It's possible that AIX' yacc generates code which requires xlc.
>
> After distclean I have reconfigured and recompiled with xlc but this leads to:
> "sqlp.yy.c", line 1.1: 1506-046 (S) Syntax error.
Yep; the generated file won't work with any C compiler. This is partly
the fault of AIX' lex for writing the error message to stdout (which
is where the generated C source code is written when -t is used).
> However, the resulting files are identical:
> diff -u gcc_sqlp.yy.c aix_sqlp.yy.c
> -> no difference
lex doesn't know which C compiler you will be using.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list