]> granicus.if.org Git - postgresql/commitdiff
Rearrange cpluspluscheck to check just one .h file at a time.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Dec 2010 17:51:44 +0000 (12:51 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 27 Dec 2010 17:51:44 +0000 (12:51 -0500)
This is slower than the original coding but avoids the problem of
including files in an unpredictable order.  Aside from being more
trustworthy, we can get rid of some exclusions that were formerly
made for what turn out to be ordering or re-inclusion problems.

I also modified it to include libpq's exported files in the check.
ecpg should be included as well, but I'm unclear on which ecpg .h
files are meant to be included by clients.

src/tools/pginclude/cpluspluscheck

index b4ec64e25398e227692a3b90f46e3127dc7e79df..d6b04f5b6407b2553f7b1f9e56c1af76d78b4636 100644 (file)
@@ -1,35 +1,36 @@
 #!/bin/sh
 
-# Check all include files in or below the current directory for C++
-# compatibility.  Typically, run this in PostgreSQL's src/include/ directory.
+# Check all exported PostgreSQL include files for C++ compatibility.
+# Run this from the top-level source directory after performing a build.
 # No output if everything is OK, else compiler errors.
 
-set -e
-
 me=`basename $0`
 
-trap 'rm -rf $tmp' 0 1 2 3 15
 tmp=`mktemp -d /tmp/$me.XXXXXX`
 
-{
-echo ' extern "C" {'
-echo '#include "postgres.h"'
+trap 'rm -rf $tmp' 0 1 2 3 15
 
-# Omit port/, because it's platform specific, and c.h includes the relevant
-# file anyway.
-# Omit regex/ and snowball/, because those files came from elsewhere, and
-# they would need extra work if someone cared to fix them.
-# gram.h will be included by ./parser/gramparse.h.
-# kwlist.h is not meant to be included without having defined PG_KEYWORD.
-# rusagestub.h will be included by ./utils/pg_rusage.h if necessary.
-for file in `find . \( -name port -prune -o -name regex -prune -o -name snowball -prune \) -o -name '*.h' -not -name gram.h -not -name kwlist.h -not -name rusagestub.h -print`; do
-       f=`echo $file | sed 's,^\./,,'`
-       echo "#include \"$f\""
+# Omit src/include/port/, because it's platform specific, and c.h includes
+# the relevant file anyway.
+# rusagestub.h is also platform-specific, and will be included by
+# utils/pg_rusage.h if necessary.
+# regex/regerrs.h is not meant to be included standalone.
+# parser/gram.h will be included by parser/gramparse.h.
+# parser/kwlist.h is not meant to be included standalone.
+
+for f in `find src/include src/interfaces/libpq/libpq-fe.h src/interfaces/libpq/libpq-events.h -name '*.h' -print | \
+    grep -v -e ^src/include/port/ \
+       -e ^src/include/rusagestub.h -e ^src/include/regex/regerrs.h \
+       -e ^src/include/parser/gram.h -e ^src/include/parser/kwlist.h`
+do
+       {
+           echo ' extern "C" {'
+           echo '#include "postgres.h"'
+           echo "#include \"$f\""
+           echo '};'
+       } >$tmp/test.cpp
+
+       # -fno-operator-names omits the definition of bitand and bitor, which
+       # collide with varbit.h.  Could be fixed, if one were so inclined.
+       ${CXX:-g++} -I . -I src/include -fsyntax-only -fno-operator-names -Wall -c $tmp/test.cpp
 done
-
-echo '};'
-} >$tmp/test.cpp
-
-# -fno-operator-names omits the definition of bitand and bitor, which would
-# collide with varbit.h.  Could be fixed, if one were so inclined.
-${CXX:-g++} -I. -fsyntax-only -fno-operator-names -Wall -c $tmp/test.cpp