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 |
||||
/*.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,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