mirror of https://github.com/postgres/postgres
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.depull/128/head
parent
b44e5fced3
commit
156c049bee
@ -1,10 +1,4 @@ |
|||||||
# Global excludes across all subdirectories |
|
||||||
*.o |
|
||||||
*.obj |
|
||||||
*.exe |
|
||||||
|
|
||||||
# Local excludes in root directory |
|
||||||
/pg_bsd_indent |
/pg_bsd_indent |
||||||
/*.out |
# Generated by test suite |
||||||
/*.list |
/log/ |
||||||
/tests.diff |
/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"
|
PGFILEDESC = "pg_bsd_indent - indent C code nicely"
|
||||||
PGAPPICON = win32
|
PGAPPICON = win32
|
||||||
|
|
||||||
PROGRAM = pg_bsd_indent
|
subdir = src/tools/pg_bsd_indent
|
||||||
OBJS = args.o err.o indent.o io.o lexi.o parse.o pr_comment.o $(WIN32RES)
|
top_builddir = ../../..
|
||||||
|
include $(top_builddir)/src/Makefile.global |
||||||
|
|
||||||
# clean junk left behind by "make test"
|
OBJS = \
|
||||||
EXTRA_CLEAN = *.out *.list tests.diff
|
$(WIN32RES) \
|
||||||
|
args.o \
|
||||||
|
err.o \
|
||||||
|
indent.o \
|
||||||
|
io.o \
|
||||||
|
lexi.o \
|
||||||
|
parse.o \
|
||||||
|
pr_comment.o
|
||||||
|
|
||||||
PG_CONFIG = pg_config
|
all: pg_bsd_indent |
||||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
|
||||||
include $(PGXS) |
|
||||||
|
|
||||||
# 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 |
.PHONY: test |
||||||
|
|
||||||
test: $(PROGRAM) |
test: pg_bsd_indent |
||||||
@rm -f tests.diff
|
$(prove_installcheck)
|
||||||
@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.
|
|
||||||
|
@ -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?) |
|
@ -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(); |
Loading…
Reference in new issue