Обсуждение: pgindent
Hi All,
I just tried to get pgindent to work and I ran into a few snags
1)
I tried the src/tools/pgindent/indent.bsd.patch on two recent
versions of bsd indent. One from the current version of openbsd, and
one from freebsd RELENG_3. In neither case the patch applied cleanly.
The code in indent around the area of the second patch segment
*** 186,192 **** *e_token++ = *buf_ptr++; } }
! if (*buf_ptr == 'L' || *buf_ptr == 'l') *e_token++ = *buf_ptr++; } else
now looks like this
while (1) { if (!(seensfx & 1) && (*buf_ptr == 'U' || *buf_ptr == 'u'))
{ CHECK_SIZE_TOKEN; *e_token++ = *buf_ptr++; seensfx |= 1;
continue; } if (!(seensfx & 2) && (*buf_ptr == 'L' ||
*buf_ptr== 'l')) { CHECK_SIZE_TOKEN; if (buf_ptr[1] == buf_ptr[0])
*e_token++ = *buf_ptr++; *e_token++ = *buf_ptr++; seensfx |= 2;
continue; } break;
Without understanding what the code is meant to do, I am guessing that
the second patch is no longer necessary.
Also, in the openbsd source the specials buffer is automatically
resized, so it seems that neither part of the patch is necessary for
recent openbsd sources.
2)
I compiled and tried both bsd distributions. And ran into the
following problem with pgindent.
The test in pgindent for the gnu vesion doesn't work.
indent -version -npro </dev/null >/dev/null 2>&1
if [ "$?" -eq 0 ]
then echo "You appear to have GNU indent rather than BSD indent." >&2 echo "See the pgindent/README file for a
descriptionof its
problems." >
&2 EXTRA_OPTS="-ncdb -bli0 -npcs -cli4"
else echo "Hope you installed /src/tools/pgindent/indent.bsd.patch."
>&2 EXTRA_OPTS="-bbb -cli1"
fi
I think that you need to use
indent --version -npro </dev/null >/dev/null 2>&1
On my system (Redhat Linux 5.?) I get
aims2-bernie:$ indent --version GNU indent 1.9.1 aims2-bernie:$ echo $? 0 aims2-bernie:$ bsdindent --version
bsdindent:Command line: unknown parameter "--version" aims2-bernie:$ echo $? 1
( That is with 'bsdindent' as the patched freebsd indent )
3)
Finally, the result of running
find . -name '*.[ch]' -type f -print | egrep -v '\+\+|/odbc/|s_lock.h'
| xargs -n100 pgindent
on a fresh copy of the 6.5 sources with either the openbsd or patched
bsd indent is the following
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
./backend/parser/gram.c
Error@5251: #if stack overflow
Error@5252: #if stack overflow
Error@5263: Unmatched #endif
Error@5264: Unmatched #endif
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
Hope you installed /src/tools/pgindent/indent.bsd.patch.
./interfaces/ecpg/test/header_test.h
Error@19: Stuff missing from end of file.
Are the errors normal or do I still not have a correctly working
version?
Bernie Frankpitt
> Hi All,
>
> I just tried to get pgindent to work and I ran into a few snags
> }
> }
> ! if (*buf_ptr == 'L' || *buf_ptr == 'l')
> *e_token++ = *buf_ptr++;
> }
>
> while (1) {
> if (!(seensfx & 1) &&
> (*buf_ptr == 'U' || *buf_ptr == 'u')) {
> CHECK_SIZE_TOKEN;
> *e_token++ = *buf_ptr++;
> seensfx |= 1;
> Also, in the openbsd source the specials buffer is automatically
> resized, so it seems that neither part of the patch is necessary for
> recent openbsd sources.
Great. Your version looks nice. BSDI also has fixed the buffer size
problem, but it was easier to just send people a patch to apply, rather
than illegally sending out their changes.
>
> I think that you need to use
> indent --version -npro </dev/null >/dev/null 2>&1
>
> On my system (Redhat Linux 5.?) I get
>
> aims2-bernie:$ indent --version
> GNU indent 1.9.1
> aims2-bernie:$ echo $?
> 0
> aims2-bernie:$ bsdindent --version
> bsdindent: Command line: unknown parameter "--version"
> aims2-bernie:$ echo $?
> 1
>
> ( That is with 'bsdindent' as the patched freebsd indent )
Good. OK, new test is:
indent --version </dev/null >/dev/null 2>&1if [ "$?" -eq 0 ]then echo "You do not appear to have 'indent' installed
onyoursystem." >&2 exit 1fi
>
>
> 3)
>
> Finally, the result of running
>
> find . -name '*.[ch]' -type f -print | egrep -v '\+\+|/odbc/|s_lock.h'
> | xargs -n100 pgindent
>
> on a fresh copy of the 6.5 sources with either the openbsd or patched
> bsd indent is the following
>
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> ./backend/parser/gram.c
> Error@5251: #if stack overflow
> Error@5252: #if stack overflow
> Error@5263: Unmatched #endif
> Error@5264: Unmatched #endif
This is expected. Gram.c is generated from gram.y, so there is no real
need to indent it.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> Hope you installed /src/tools/pgindent/indent.bsd.patch.
> ./interfaces/ecpg/test/header_test.h
> Error@19: Stuff missing from end of file.
I haven't seen the egcs problem. In this case, it is getting confused
by the inline SQL commands. No cause for concern.
-- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610)
853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill,
Pennsylvania19026