mirror of https://github.com/postgres/postgres
Integrate pg_bsd_indent into our build/test infrastructure.
Update the Makefile and build directions for in-tree build, and add Meson build infrastructure. Also convert the ad-hoc test target into a TAP test. Currently, the Make build system will not build pg_bsd_indent by default, while the Meson system will. Both will test it during "make check-world" or "ninja test". Neither will install it automatically. (We might change some of these decisions later.) Also fix a few portability nits noted during early testing. Also, exclude pg_bsd_indent from pgindent's purview; at least for now, we'll leave it formatted similarly to the FreeBSD original. Tom Lane and Andres Freund Discussion: https://postgr.es/m/3935719.1675967430@sss.pgh.pa.us Discussion: https://postgr.es/m/20200812223409.6di3y2qsnvynao7a@alap3.anarazel.de
This commit is contained in:
parent
b44e5fced3
commit
156c049bee
|
@ -68,7 +68,7 @@ check check-tests installcheck installcheck-parallel installcheck-tests: CHECKPR
|
|||
check check-tests installcheck installcheck-parallel installcheck-tests: submake-generated-headers
|
||||
$(MAKE) -C src/test/regress $@
|
||||
|
||||
$(call recurse,check-world,src/test src/pl src/interfaces contrib src/bin,check)
|
||||
$(call recurse,check-world,src/test src/pl src/interfaces contrib src/bin src/tools/pg_bsd_indent,check)
|
||||
$(call recurse,checkprep, src/test src/pl src/interfaces contrib src/bin)
|
||||
|
||||
$(call recurse,installcheck-world,src/test src/pl src/interfaces contrib src/bin,installcheck)
|
||||
|
|
|
@ -66,11 +66,13 @@ clean:
|
|||
$(MAKE) -C test $@
|
||||
$(MAKE) -C tutorial NO_PGXS=1 $@
|
||||
$(MAKE) -C test/isolation $@
|
||||
$(MAKE) -C tools/pg_bsd_indent $@
|
||||
|
||||
distclean maintainer-clean:
|
||||
$(MAKE) -C test $@
|
||||
$(MAKE) -C tutorial NO_PGXS=1 $@
|
||||
$(MAKE) -C test/isolation $@
|
||||
$(MAKE) -C tools/pg_bsd_indent $@
|
||||
rm -f Makefile.port Makefile.global
|
||||
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ subdir('pl')
|
|||
|
||||
subdir('interfaces')
|
||||
|
||||
subdir('tools/pg_bsd_indent')
|
||||
|
||||
|
||||
### Generate a Makefile.global that's complete enough for PGXS to work.
|
||||
#
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
# Global excludes across all subdirectories
|
||||
*.o
|
||||
*.obj
|
||||
*.exe
|
||||
|
||||
# Local excludes in root directory
|
||||
/pg_bsd_indent
|
||||
/*.out
|
||||
/*.list
|
||||
/tests.diff
|
||||
# Generated by test suite
|
||||
/log/
|
||||
/tmp_check/
|
||||
|
|
|
@ -1,35 +1,55 @@
|
|||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Makefile for pg_bsd_indent
|
||||
# src/tools/pg_bsd_indent/Makefile
|
||||
#
|
||||
# Copyright (c) 2017, PostgreSQL Global Development Group
|
||||
# Copyright (c) 2017-2023, PostgreSQL Global Development Group
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
PGFILEDESC = "pg_bsd_indent - indent C code nicely"
|
||||
PGAPPICON = win32
|
||||
|
||||
PROGRAM = pg_bsd_indent
|
||||
OBJS = args.o err.o indent.o io.o lexi.o parse.o pr_comment.o $(WIN32RES)
|
||||
subdir = src/tools/pg_bsd_indent
|
||||
top_builddir = ../../..
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
|
||||
# clean junk left behind by "make test"
|
||||
EXTRA_CLEAN = *.out *.list tests.diff
|
||||
OBJS = \
|
||||
$(WIN32RES) \
|
||||
args.o \
|
||||
err.o \
|
||||
indent.o \
|
||||
io.o \
|
||||
lexi.o \
|
||||
parse.o \
|
||||
pr_comment.o
|
||||
|
||||
PG_CONFIG = pg_config
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
include $(PGXS)
|
||||
all: pg_bsd_indent
|
||||
|
||||
# pgxs.mk assumes too much about what "make check" means, so call it "test"
|
||||
pg_bsd_indent: $(OBJS) | submake-libpgport
|
||||
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
|
||||
|
||||
install: all installdirs
|
||||
$(INSTALL_PROGRAM) pg_bsd_indent$(X) '$(DESTDIR)$(bindir)/pg_bsd_indent$(X)'
|
||||
|
||||
installdirs:
|
||||
$(MKDIR_P) '$(DESTDIR)$(bindir)'
|
||||
|
||||
uninstall:
|
||||
rm -f '$(DESTDIR)$(bindir)/pg_bsd_indent$(X)'
|
||||
|
||||
clean distclean maintainer-clean:
|
||||
rm -f pg_bsd_indent$(X) $(OBJS)
|
||||
rm -rf log/ tmp_check/
|
||||
|
||||
check: pg_bsd_indent
|
||||
$(prove_check)
|
||||
|
||||
installcheck:
|
||||
$(prove_installcheck)
|
||||
|
||||
# Provide this alternate test name to allow testing pg_bsd_indent
|
||||
# without building all of the surrounding Postgres installation.
|
||||
.PHONY: test
|
||||
|
||||
test: $(PROGRAM)
|
||||
@rm -f tests.diff
|
||||
@cp $(srcdir)/tests/*.list .
|
||||
@for testsrc in $(srcdir)/tests/*.0; do \
|
||||
test=`basename "$$testsrc" .0`; \
|
||||
./$(PROGRAM) $$testsrc $$test.out -P$(srcdir)/tests/$$test.pro || echo FAILED >>$$test.out; \
|
||||
diff -u $$testsrc.stdout $$test.out >>tests.diff 2>&1 || true; \
|
||||
done
|
||||
@cat tests.diff
|
||||
@test '!' -s tests.diff
|
||||
@echo Tests complete.
|
||||
test: pg_bsd_indent
|
||||
$(prove_installcheck)
|
||||
|
|
|
@ -1,3 +1,40 @@
|
|||
src/tools/pg_bsd_indent/README
|
||||
|
||||
This is a lightly modified version of the "indent" program maintained
|
||||
by the FreeBSD project. The modifications are mostly to make it portable
|
||||
to non-BSD-ish platforms, though we do have one formatting switch we
|
||||
couldn't convince upstream to take.
|
||||
|
||||
To build it, configure the surrounding Postgres source tree,
|
||||
then run "make" in this directory.
|
||||
Optionally, run "make test" for some simple tests.
|
||||
|
||||
You'll need to install pg_bsd_indent somewhere in your PATH before
|
||||
using it. Most likely, if you're a developer, you don't want to
|
||||
put it in the same place as where the surrounding Postgres build
|
||||
gets installed. Therefore, do this part with something like
|
||||
|
||||
make install prefix=/usr/local
|
||||
|
||||
If you are using Meson to build, the standard build targets will
|
||||
build pg_bsd_indent and also test it, but there is not currently
|
||||
provision for installing it anywhere. Manually copy the built
|
||||
executable from build/src/tools/pg_bsd_indent/pg_bsd_indent to
|
||||
wherever you want to put it.
|
||||
|
||||
|
||||
If you happen to be hacking upon the indent source code, the closest
|
||||
approximation to the existing indentation style seems to be
|
||||
|
||||
./pg_bsd_indent -i4 -l79 -di12 -nfc1 -nlp -sac somefile.c
|
||||
|
||||
although this has by no means been rigorously adhered to.
|
||||
(What was that saw about the shoemaker's children?)
|
||||
We're not planning to re-indent to Postgres style, because that
|
||||
would make it difficult to compare to the FreeBSD sources.
|
||||
|
||||
----------
|
||||
|
||||
The FreeBSD originals of the files in this directory bear the
|
||||
"4-clause" version of the BSD license. We have removed the
|
||||
"advertising" clauses, as per UC Berkeley's directive here:
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
pg_bsd_indent
|
||||
|
||||
This is a lightly modified version of the "indent" program maintained
|
||||
by the FreeBSD project. The modifications are mostly to make it portable
|
||||
to non-BSD-ish platforms, though we do have one formatting switch we
|
||||
couldn't convince upstream to take.
|
||||
|
||||
To build it, you will need a Postgres installation, version 9.5 or newer.
|
||||
(Once built, the program doesn't depend on that installation.)
|
||||
|
||||
To build, just say "make"; or if pg_config from your Postgres installation
|
||||
isn't in your PATH, say
|
||||
make PG_CONFIG=path/to/pg_config
|
||||
Optionally, run "make test" for some simple sanity checks.
|
||||
|
||||
To install, copy pg_bsd_indent to somewhere in your usual PATH.
|
||||
(If you say "make install", it will try to put it in your Postgres
|
||||
installation directory, which is most likely not what you want for
|
||||
long-term use.)
|
||||
|
||||
TODO: add build support and instructions for Windows
|
||||
|
||||
|
||||
If you happen to be hacking upon the indent source code, the closest
|
||||
approximation to the existing indentation style seems to be
|
||||
|
||||
./pg_bsd_indent -i4 -l79 -di12 -nfc1 -nlp -sac somefile.c
|
||||
|
||||
although this has by no means been rigorously adhered to.
|
||||
(What was that saw about the shoemaker's children?)
|
|
@ -176,7 +176,7 @@ void
|
|||
set_profile(const char *profile_name)
|
||||
{
|
||||
FILE *f;
|
||||
char fname[PATH_MAX];
|
||||
char fname[MAXPGPATH];
|
||||
static char prof[] = ".indent.pro";
|
||||
|
||||
if (profile_name == NULL)
|
||||
|
|
|
@ -60,7 +60,7 @@ const char *in_name = "Standard Input"; /* will always point to name of input
|
|||
* file */
|
||||
const char *out_name = "Standard Output"; /* will always point to name
|
||||
* of output file */
|
||||
char bakfile[MAXPATHLEN] = "";
|
||||
char bakfile[MAXPGPATH] = "";
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
|
@ -207,7 +207,7 @@ main(int argc, char **argv)
|
|||
* the file */
|
||||
errx(1, "input and output files must be different");
|
||||
}
|
||||
output = fopen(out_name, "w");
|
||||
output = fopen(out_name, "wb");
|
||||
if (output == NULL) /* check for create error */
|
||||
err(1, "%s", out_name);
|
||||
continue;
|
||||
|
@ -1232,7 +1232,7 @@ bakcopy(void)
|
|||
if (input == NULL)
|
||||
err(1, "%s", bakfile);
|
||||
/* now the original input file will be the output */
|
||||
output = fopen(in_name, "w");
|
||||
output = fopen(in_name, "wb");
|
||||
if (output == NULL) {
|
||||
unlink(bakfile);
|
||||
err(1, "%s", in_name);
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
__FBSDID("$FreeBSD: head/usr.bin/indent/indent.h 303746 2016-08-04 15:27:09Z pfg $");
|
||||
#endif
|
||||
|
||||
#define nitems(array) (sizeof (array) / sizeof (array[0]))
|
||||
#define nitems(x) (sizeof((x)) / sizeof((x)[0]))
|
||||
|
||||
void add_typename(const char *);
|
||||
void alloc_typenames(void);
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright (c) 2022-2023, PostgreSQL Global Development Group
|
||||
|
||||
pg_bsd_indent_sources = files(
|
||||
'args.c',
|
||||
'err.c',
|
||||
'indent.c',
|
||||
'io.c',
|
||||
'lexi.c',
|
||||
'parse.c',
|
||||
'pr_comment.c',
|
||||
)
|
||||
|
||||
if host_system == 'windows'
|
||||
pg_bsd_indent_sources += rc_bin_gen.process(win32ver_rc, extra_args: [
|
||||
'--NAME', 'pg_bsd_indent',
|
||||
'--FILEDESC', 'pg_bsd_indent - indent C code nicely'])
|
||||
endif
|
||||
|
||||
pg_bsd_indent = executable('pg_bsd_indent',
|
||||
pg_bsd_indent_sources,
|
||||
dependencies: [frontend_code],
|
||||
include_directories: include_directories('.'),
|
||||
kwargs: default_bin_args + {
|
||||
'install': false,
|
||||
# possibly at some point do this:
|
||||
# 'install_dir': dir_pgxs / 'src/tools/pg_bsd_indent',
|
||||
},
|
||||
)
|
||||
bin_targets += pg_bsd_indent
|
||||
|
||||
tests += {
|
||||
'name': 'pg_bsd_indent',
|
||||
'sd': meson.current_source_dir(),
|
||||
'bd': meson.current_build_dir(),
|
||||
'tap': {
|
||||
'tests': [
|
||||
't/001_pg_bsd_indent.pl',
|
||||
],
|
||||
},
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
# pg_bsd_indent: some simple tests
|
||||
|
||||
# The test cases come from FreeBSD upstream, but this test scaffolding is ours.
|
||||
# Copyright (c) 2017-2023, PostgreSQL Global Development Group
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Cwd qw(getcwd);
|
||||
use File::Copy "cp";
|
||||
use File::Spec;
|
||||
|
||||
use PostgreSQL::Test::Utils;
|
||||
use Test::More;
|
||||
|
||||
# We expect to be started in the source directory (even in a VPATH build);
|
||||
# we want to run pg_bsd_indent in the tmp_check directory to reduce clutter.
|
||||
# (Also, it's caller's responsibility that pg_bsd_indent be in the PATH.)
|
||||
my $src_dir = getcwd;
|
||||
chdir ${PostgreSQL::Test::Utils::tmp_check};
|
||||
|
||||
# Basic tests: pg_bsd_indent knows --version but not much else.
|
||||
program_version_ok('pg_bsd_indent');
|
||||
|
||||
# Run pg_bsd_indent on pre-fab test cases.
|
||||
# Any diffs in the generated files will be accumulated here.
|
||||
my $diff_file = "tests.diff";
|
||||
|
||||
# Copy support files to current dir, so *.pro files don't need to know path.
|
||||
while (my $file = glob("$src_dir/tests/*.list"))
|
||||
{
|
||||
cp($file, ".") || die "cp $file failed: $!";
|
||||
}
|
||||
|
||||
while (my $test_src = glob("$src_dir/tests/*.0"))
|
||||
{
|
||||
# extract test basename
|
||||
my ($volume, $directories, $test) = File::Spec->splitpath($test_src);
|
||||
$test =~ s/\.0$//;
|
||||
# run pg_bsd_indent
|
||||
command_ok(
|
||||
[
|
||||
'pg_bsd_indent', $test_src,
|
||||
"$test.out", "-P$src_dir/tests/$test.pro"
|
||||
],
|
||||
"pg_bsd_indent succeeds on $test");
|
||||
# check result matches, adding any diff to $diff_file
|
||||
my $result = run_log([ 'diff', '-upd', "$test_src.stdout", "$test.out" ],
|
||||
'>>', $diff_file);
|
||||
ok($result, "pg_bsd_indent output matches for $test");
|
||||
}
|
||||
|
||||
done_testing();
|
|
@ -47,6 +47,10 @@ src/pl/plperl/ppport\.h$
|
|||
src/pl/plperl/SPI\.c$
|
||||
src/pl/plperl/Util\.c$
|
||||
#
|
||||
# pg_bsd_indent has its own, idiosyncratic indentation style.
|
||||
# We'll stick to that to permit comparison with the FreeBSD upstream.
|
||||
src/tools/pg_bsd_indent/.*
|
||||
#
|
||||
# Exclude any temporary installations that may be in the tree.
|
||||
/tmp_check/
|
||||
/tmp_install/
|
||||
|
|
Loading…
Reference in New Issue