Tweak configure script generation to check that all symbols produced
authorKen Raeburn <raeburn@mit.edu>
Tue, 25 Apr 2006 02:36:31 +0000 (02:36 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 25 Apr 2006 02:36:31 +0000 (02:36 +0000)
via AC_DEFINE are also present in the applicable configure-generated
header file, and error out otherwise.  Currently doesn't apply in appl
and test trees.

* util/check-ac-syms: New script.
* config/post.in (.acsyms_okay): New target; runs check-ac-syms, unless we're
in the appl or tests trees.
(configure): Depend on .acsyms_okay.
* config/pre.in (AUTOCONF_HEADER): New variable.
* plugins/kdb/db2/libdb2/Makefile.in (AUTOCONF_HEADER): New variable.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@17955 dc483132-0cff-0310-8789-dd5450dbe970

src/config/post.in
src/config/pre.in
src/plugins/kdb/db2/libdb2/Makefile.in
src/util/check-ac-syms [new file with mode: 0755]

index 237ceb3181938d5b247f6d9316877f9cd4e63e1f..300f0fcf308026d0ffc198884ce7c97e1de84c81 100644 (file)
@@ -135,6 +135,7 @@ $(thisconfigdir)/config.status: $(srcdir)/$(thisconfigdir)/configure
 # mixing.  So nuke it.
 $(srcdir)/$(thisconfigdir)/configure: @MAINT@ \
                $(srcdir)/$(thisconfigdir)/configure.in \
+               $(thisconfigdir)/.acsyms_okay \
                $(SRCTOP)/patchlevel.h \
                $(SRCTOP)/aclocal.m4
        -$(RM) -r $(srcdir)/$(thisconfigdir)/autom4te.cache
@@ -142,6 +143,17 @@ $(srcdir)/$(thisconfigdir)/configure: @MAINT@ \
                $(AUTOCONF) --include=$(CONFIG_RELTOPDIR) $(AUTOCONFFLAGS)
        -$(RM) -r $(srcdir)/$(thisconfigdir)/autom4te.cache
 
+$(thisconfigdir)/.acsyms_okay: @MAINT@ \
+               $(srcdir)/$(thisconfigdir)/configure.in \
+               $(SRCTOP)/patchlevel.h \
+               $(SRCTOP)/aclocal.m4
+       case "$(myfulldir)" in \
+       "" ) echo myfulldir not set in makefile ; exit 1 ;; \
+       appl* | tests* ) echo skipping ac syms check here ;; \
+       *) $(SRCTOP)/util/check-ac-syms $(srcdir) $(BUILDTOP) $(AUTOCONF_HEADER) ;; \
+       esac
+       touch .acsyms_okay
+
 RECURSE_TARGETS=all-recurse clean-recurse distclean-recurse install-recurse \
        generate-files-mac-recurse \
        check-recurse depend-recurse Makefiles-recurse install-headers-recurse
index bea1c7a86e832b293c10bb16ac2ee06f7bd4f7b9..9391f649809b8b24c36a82539cd744432eb6904d 100644 (file)
@@ -551,6 +551,9 @@ EXTRA_FILES=@EXTRA_FILES@
 # variable settings with "@RUN_ENV@ KRB5_CONFIG=foo ..."
 MAYBE_VALGRIND= # valgrind --tool=memcheck --log-file=$(BUILDTOP)/valgrind.out --trace-children=yes -v --leak-check=yes env
 
+#
+AUTOCONF_HEADER=$(SRCTOP)/include/autoconf.h.in
+
 ##
 ## end of pre.in
 ############################################################
index 5e53de4238ca4b858434621b304abf206eb99272..93fed6f3c0d8265da3bd91c0339d85fe908950b9 100644 (file)
@@ -15,6 +15,8 @@ RELDIR=../plugins/kdb/db2/libdb2
 HDRDIR=$(BUILDTOP)/include
 HDRS = $(HDRDIR)/db.h $(HDRDIR)/db-config.h $(HDRDIR)/db-ndbm.h
 
+AUTOCONF_HEADER=$(SRCTOP)/plugins/kdb/db2/libdb2/include/config.h.in
+
 all-unix:: includes all-libs
 all-prerecurse: include/config.h include/db-config.h
 clean-unix:: clean-libs clean-includes
diff --git a/src/util/check-ac-syms b/src/util/check-ac-syms
new file mode 100755 (executable)
index 0000000..a54a990
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# args: srcdir srctop-from-srcdir header-path
+
+d=`pwd`
+head -1 $1/configure.in > config-in.tmp
+echo "AC_CONFIG_HEADER(fooconfig.h:$d/fooconfig-h.tmp)" >> config-in.tmp
+tail +2 $1/configure.in | grep -v AC_CONFIG_HEADER >> config-in.tmp
+mv -f config-in.tmp config-in.ac~
+
+if (cd $1 && autoheader --include=$2 $d/config-in.ac~) > /dev/null; then
+  rm -rf $1/autom4te.cache config-in.ac~
+else
+  rm -rf $1/autom4te.cache
+# config-in.ac~ fooconfig-h.tmp
+  echo autoheader failed, eek
+  exit 1
+fi
+
+awk '/^#undef/ { print $2; }' < fooconfig-h.tmp | sort > acsyms.here
+rm -f fooconfig-h.tmp
+awk '/^#undef/ { print $2; }' < $3 | sort > acsyms.there
+
+comm -23 acsyms.here acsyms.there > acsyms.extra
+rm -f acsyms.here acsyms.there
+
+if test -s acsyms.extra; then
+  echo ERROR: Symbol or symbols defined here but not in `basename $3`: `cat acsyms.extra`
+  rm -f acsyms.extra
+  exit 1
+fi
+rm -f acsyms.extra
+exit 0