#!/bin/sh

# Check (almost) all PostgreSQL include files for C++ compatibility.
#
# Argument 1 is the top-level source directory, argument 2 the
# top-level build directory (they might be the same). If not set, they
# default to the current directory.
#
# Needs to be run after configuring and creating all generated headers.
# It's advisable to configure --with-perl --with-python, else you're
# likely to get errors from associated headers.
#
# No output if everything is OK, else compiler errors.
#
# src/tools/pginclude/cpluspluscheck
# Copyright (c) 2009-2021, PostgreSQL Global Development Group

if [ -z "$1" ]; then
    srcdir="."
else
    srcdir="$1"
fi

if [ -z "$2" ]; then
    builddir="."
else
    builddir="$2"
fi

me=`basename $0`

# These switches are g++ specific, you may override if necessary.
CXXFLAGS=${CXXFLAGS:- -fsyntax-only -Wall}

# Pull some info from configure's results.
MGLOB="$builddir/src/Makefile.global"
CPPFLAGS=`sed -n 's/^CPPFLAGS[ 	]*=[ 	]*//p' "$MGLOB"`
CXX=`sed -n 's/^CXX[ 	]*=[ 	]*//p' "$MGLOB"`
perl_includespec=`sed -n 's/^perl_includespec[ 	]*=[ 	]*//p' "$MGLOB"`
python_includespec=`sed -n 's/^python_includespec[ 	]*=[ 	]*//p' "$MGLOB"`

# Extract any -I and -D switches from CPPFLAGS.
# (If necessary, user can pass more switches by presetting EXTRAFLAGS.)
for flag in $CPPFLAGS; do
  case $flag in
    -I*|-D*) EXTRAFLAGS="$EXTRAFLAGS $flag";;
  esac
done

# Create temp directory.
tmp=`mktemp -d /tmp/$me.XXXXXX`

trap 'rm -rf $tmp' 0 1 2 3 15

# Scan all of src/ and contrib/ for header files.
for f in `cd "$srcdir" && find src contrib -name '*.h' -print`
do
	# Ignore files that are unportable or intentionally not standalone.

	# These files are platform-specific, and c.h will include the
	# one that's relevant for our current platform anyway.
	test "$f" = src/include/port/aix.h && continue
	test "$f" = src/include/port/cygwin.h && continue
	test "$f" = src/include/port/darwin.h && continue
	test "$f" = src/include/port/freebsd.h && continue
	test "$f" = src/include/port/hpux.h && continue
	test "$f" = src/include/port/linux.h && continue
	test "$f" = src/include/port/netbsd.h && continue
	test "$f" = src/include/port/openbsd.h && continue
	test "$f" = src/include/port/solaris.h && continue
	test "$f" = src/include/port/win32.h && continue

	# Additional Windows-specific headers.
	test "$f" = src/include/port/win32_port.h && continue
	test "$f" = src/include/port/win32/sys/socket.h && continue
	test "$f" = src/include/port/win32_msvc/dirent.h && continue
	test "$f" = src/include/port/win32_msvc/utime.h && continue
	test "$f" = src/port/pthread-win32.h && continue

	# Likewise, these files are platform-specific, and the one
	# relevant to our platform will be included by atomics.h.
	test "$f" = src/include/port/atomics/arch-arm.h && continue
	test "$f" = src/include/port/atomics/arch-hppa.h && continue
	test "$f" = src/include/port/atomics/arch-ia64.h && continue
	test "$f" = src/include/port/atomics/arch-ppc.h && continue
	test "$f" = src/include/port/atomics/arch-x86.h && continue
	test "$f" = src/include/port/atomics/fallback.h && continue
	test "$f" = src/include/port/atomics/generic.h && continue
	test "$f" = src/include/port/atomics/generic-acc.h && continue
	test "$f" = src/include/port/atomics/generic-gcc.h && continue
	test "$f" = src/include/port/atomics/generic-msvc.h && continue
	test "$f" = src/include/port/atomics/generic-sunpro.h && continue

	# rusagestub.h is also platform-specific, and will be included
	# by utils/pg_rusage.h if necessary.
	test "$f" = src/include/rusagestub.h && continue

	# sepgsql.h depends on headers that aren't there on most platforms.
	test "$f" = contrib/sepgsql/sepgsql.h && continue

	# These files are not meant to be included standalone, because
	# they contain lists that might have multiple use-cases.
	test "$f" = src/include/access/rmgrlist.h && continue
	test "$f" = src/include/parser/kwlist.h && continue
	test "$f" = src/pl/plpgsql/src/pl_reserved_kwlist.h && continue
	test "$f" = src/pl/plpgsql/src/pl_unreserved_kwlist.h && continue
	test "$f" = src/interfaces/ecpg/preproc/c_kwlist.h && continue
	test "$f" = src/interfaces/ecpg/preproc/ecpg_kwlist.h && continue
	test "$f" = src/include/regex/regerrs.h && continue
	test "$f" = src/include/tcop/cmdtaglist.h && continue
	test "$f" = src/pl/plpgsql/src/plerrcodes.h && continue
	test "$f" = src/pl/plpython/spiexceptions.h && continue
	test "$f" = src/pl/tcl/pltclerrcodes.h && continue

	# Also not meant to be included standalone.
	test "$f" = src/include/common/unicode_combining_table.h && continue

	# We can't make these Bison output files compilable standalone
	# without using "%code require", which old Bison versions lack.
	# parser/gram.h will be included by parser/gramparse.h anyway.
	test "$f" = src/include/parser/gram.h && continue
	test "$f" = src/backend/parser/gram.h && continue
	test "$f" = src/pl/plpgsql/src/pl_gram.h && continue
	test "$f" = src/interfaces/ecpg/preproc/preproc.h && continue

	# ppport.h is not under our control, so we can't make it standalone.
	test "$f" = src/pl/plperl/ppport.h && continue

	# regression.h is not actually C, but ECPG code.
	test "$f" = src/interfaces/ecpg/test/regression.h && continue
	# printf_hack.h produces "unused function" warnings.
	test "$f" = src/interfaces/ecpg/test/printf_hack.h && continue

	# pg_trace.h and utils/probes.h can include sys/sdt.h from SystemTap,
	# which itself contains C++ code and so won't compile with a C++
	# compiler under extern "C" linkage.
	test "$f" = src/include/pg_trace.h && continue
	test "$f" = src/include/utils/probes.h && continue

	# pg_dump is not C++-clean because it uses "public" and "namespace"
	# as field names, which is unfortunate but we won't change it now.
	test "$f" = src/bin/pg_dump/compress_io.h && continue
	test "$f" = src/bin/pg_dump/parallel.h && continue
	test "$f" = src/bin/pg_dump/pg_backup_archiver.h && continue
	test "$f" = src/bin/pg_dump/pg_dump.h && continue

	# OK, create .c file to include this .h file.
	{
	    echo 'extern "C" {'
	    test "$f" != src/include/postgres_fe.h && echo '#include "postgres.h"'
	    echo "#include \"$f\""
	    echo '};'
	} >$tmp/test.cpp

	# Some subdirectories need extra -I switches.
	case "$f" in
	    src/pl/plperl/*)
		EXTRAINCLUDES="$perl_includespec" ;;
	    src/pl/plpython/*)
		EXTRAINCLUDES="$python_includespec" ;;
	    src/interfaces/ecpg/*)
		EXTRAINCLUDES="-I $builddir/src/interfaces/ecpg/include -I $srcdir/src/interfaces/ecpg/include" ;;
	    *)
		EXTRAINCLUDES="" ;;
	esac

	# Run the test.
	${CXX:-g++} -I $builddir -I $srcdir \
		-I $builddir/src/include -I $srcdir/src/include \
		-I $builddir/src/interfaces/libpq -I $srcdir/src/interfaces/libpq \
		$EXTRAINCLUDES $EXTRAFLAGS $CXXFLAGS -c $tmp/test.cpp

done
