On 2017-05-18 18:13, Tom Lane wrote: > Piotr Stefaniak <postg...@piotr-stefaniak.me> writes: >> That, I assume, would be me. Coincidentally, I'm about to push my fixes >> upstream (FreeBSD). Before that happens, my changes can be obtained from >> https://github.com/pstef/freebsd_indent and tested, if anyone wishes. > > I spent a little bit of time on portability testing, because we are > certainly going to insist that this tool be portable to more than > just FreeBSD. Things are not very good as it stands: > > * Makefile is 100% BSD-specific. Possibly we could just agree to > disagree on that point, and include a PG-style makefile that is not > like upstream's. I attach the one I used for test purposes.
This would have to live outside of FreeBSD for obvious (or not) reasons. Most likely as a part of pg_bsd_indent. I use the original ("BSD") Makefile on Linux, feeding it to bmake(1). But I don't expect bmake to become a requirement for pg_bsd_indent. > * __FBSDID() macros fail to compile anywhere else than FreeBSD. > Couldn't you hide those inside #if 0, as you're already doing for > the ancient sccsid strings? The use of __FBSDID macro won't be going anywhere from FreeBSD indent, I'm afraid. But I think it could be if-def'd out under systems other than FreeBSD. > * Please put the copyright string in indent.c inside #if 0 too, > as that draws unreferenced-variable warnings on some compilers. > > * There's one use of bcopy(), please replace with memmove(). These could probably be done upstream. I'd like to convert the strings to comments. > * References to <sys/cdefs.h> and <err.h> are problematic, as both > are BSD-isms not found in POSIX. They seem to be available anyway > on Linux, but I bet not on Windows or SysV-tradition boxes. > I removed the <sys/cdefs.h> includes and didn't see any problems, > but removing <err.h> exposes calls to err() and errx(), which > we'd have to find replacements for. Maybe just change them to > standard-conforming printf() + exit()? I'll look into why indent includes sys/cdefs.h. I don't expect to be allowed to replace err() and errx() with equivalent solutions based on ISO C and POSIX. I fear the idea of detecting err*() support prior to compilation... Probably a much simpler solution would be to replace err*() with equivalent solutions in the PG's fork of indent. printf() and exit() would probably be insufficient, you'd also need strerror(), I think. -- Sent via pgsql-hackers mailing list (firstname.lastname@example.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers