I decided to test out the snapshots of GCC 4 that are available to see if tetex would compile... There is one failure in dvipng - and it stems from the use of autoconf-2.13 that is used in the tree..
It appears in the dvipng directory, there is a shipped configure.ac.orig - which is probably from the dvipng maintainers and an configure.in - that looks like one writtern for tetex. The failure is in the test for uint64_t. AC_CHECK_TYPE is used. In autoconf 2.13 this essentially does includes #if STDC_HEADERS #include <stdlib.h> #include <stddef.h> #endif In newer versions of autoconf - the following is added: #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif So under linux, in which inttypes.h is present, the inttypes.h file is not included by configure to test if uint64_t is defined... So a define is placed in dvipng.h... This define then causes a conflict when inttypes.h is included and we get a line that reads a "long long long" GCC 4.0 complains that it cannot honor this width and errors out... So, my fix is to configure.in... Instead of using AC_CHECK_TYPE, I have written MY_CHECK_TYPE which is identical to the autoconf 2.13 code - with the extra includes added in... With this change, tetex compiles and runs under linux with GCC 4.0. *** configure.in 2005/01/12 15:20:40 1.1 --- configure.in 2005/01/12 15:32:17 *************** *** 7,12 **** --- 7,39 ---- AC_DEFINE(PACKAGE_VERSION, ["1.4"]) AC_DEFINE(PACKAGE_STRING, ["dvipng 1.4"]) + # We need a special form of AC_CHECK_TYPE that will include inttypes.h if + # present. This is done in newer acutoconfs. + AC_DEFUN(MY_CHECK_TYPE, + [AC_REQUIRE([AC_HEADER_STDC])dnl + AC_MSG_CHECKING(for $1) + AC_CACHE_VAL(ac_cv_type_$1, + [AC_EGREP_CPP(dnl + changequote(<<,>>)dnl + <<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl + changequote([,]), [#include <sys/types.h> + #if STDC_HEADERS + #include <stdlib.h> + #include <stddef.h> + #endif + #if HAVE_INTTYPES_H + # include <inttypes.h> + #else + # if HAVE_STDINT_H + # include <stdint.h> + # endif + #endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl + AC_MSG_RESULT($ac_cv_type_$1) + if test $ac_cv_type_$1 = no; then + AC_DEFINE($1, $2) + fi + ]) + dnl # Checks for programs. AC_SET_MAKE AC_PROG_CC *************** *** 41,49 **** # is present in most modern compilers. Using a #define rather than a # typedef can be a problem, but in dvipng int64_t only is used as # typecast, and there are no problems. ! ! AC_CHECK_TYPE(int64_t, long long) ! AC_CHECK_TYPE(uint64_t, unsigned long long) fi # Checks for library functions. --- 68,77 ---- # is present in most modern compilers. Using a #define rather than a # typedef can be a problem, but in dvipng int64_t only is used as # typecast, and there are no problems. ! # Note... AC_CHECK_TYPE in autoconf does not include inttypes_h if present. ! # This is present in newer versions of autoconf, so we use our own macro ! MY_CHECK_TYPE(int64_t, long long) ! MY_CHECK_TYPE(uint64_t, unsigned long long) fi # Checks for library functions.