Newer
Older
dnl Check to see if we have a working 64-bit integer type.
dnl This breaks down into two steps:
dnl (1) figure out if the compiler has a 64-bit int type with working
dnl arithmetic, and if so
dnl (2) see whether snprintf() can format the type correctly. (Currently,
dnl snprintf is the only library routine we really need for int8 support.)
dnl It's entirely possible to have a compiler that handles a 64-bit type
dnl when the C library doesn't; this is fairly likely when using gcc on
dnl an older platform, for example.
dnl If there is no native snprintf() or it does not handle the 64-bit type,
dnl we force our own version of snprintf() to be used instead.
dnl Note this test must be run after our initial check for snprintf/vsnprintf.
HAVE_LONG_INT_64=0
AC_MSG_CHECKING(whether 'long int' is 64 bits)
AC_TRY_RUN([typedef long int int64;
/* These are globals to discourage the compiler from folding all the
* arithmetic tests down to compile-time constants.
*/
int64 a = 20000001;
int64 b = 40000005;
int does_int64_work()
{
int64 c,d;
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
/* Do perfunctory checks to see if 64-bit arithmetic seems to work */
c = a * b;
d = (c + b) / b;
if (d != a+1)
return 0;
return 1;
}
main() {
exit(! does_int64_work());
}],
[HAVE_LONG_INT_64=1
AC_DEFINE(HAVE_LONG_INT_64)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming not on target machine))
HAVE_LONG_LONG_INT_64=0
if [[ $HAVE_LONG_INT_64 -eq 0 ]] ; then
AC_MSG_CHECKING(whether 'long long int' is 64 bits)
AC_TRY_RUN([typedef long long int int64;
/* These are globals to discourage the compiler from folding all the
* arithmetic tests down to compile-time constants.
*/
int64 a = 20000001;
int64 b = 40000005;
int does_int64_work()
{
int64 c,d;
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
/* Do perfunctory checks to see if 64-bit arithmetic seems to work */
c = a * b;
d = (c + b) / b;
if (d != a+1)
return 0;
return 1;
}
main() {
exit(! does_int64_work());
}],
[HAVE_LONG_LONG_INT_64=1
AC_DEFINE(HAVE_LONG_LONG_INT_64)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming not on target machine))
fi
dnl If we found "long int" is 64 bits, assume snprintf handles it.
dnl If we found we need to use "long long int", better check.
dnl We cope with snprintfs that use either %lld or %qd as the format.
dnl If neither works, fall back to our own snprintf emulation (which we
dnl know uses %lld).
if [[ $HAVE_LONG_LONG_INT_64 -eq 1 ]] ; then
if [[ x$SNPRINTF = x ]] ; then
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
AC_TRY_RUN([#include <stdio.h>
typedef long long int int64;
#define INT64_FORMAT "%lld"
int64 a = 20000001;
int64 b = 40000005;
int does_int64_snprintf_work()
{
int64 c;
char buf[100];
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
c = a * b;
snprintf(buf, 100, INT64_FORMAT, c);
if (strcmp(buf, "800000140000005") != 0)
return 0; /* either multiply or snprintf is busted */
return 1;
}
main() {
exit(! does_int64_snprintf_work());
}],
INT64_FORMAT='"%lld"'
],
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
[ AC_MSG_RESULT(no)
AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd)
AC_TRY_RUN([#include <stdio.h>
typedef long long int int64;
#define INT64_FORMAT "%qd"
int64 a = 20000001;
int64 b = 40000005;
int does_int64_snprintf_work()
{
int64 c;
char buf[100];
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
c = a * b;
snprintf(buf, 100, INT64_FORMAT, c);
if (strcmp(buf, "800000140000005") != 0)
return 0; /* either multiply or snprintf is busted */
return 1;
}
main() {
exit(! does_int64_snprintf_work());
}],
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
[ AC_MSG_RESULT(yes)
INT64_FORMAT='"%qd"'
],
[ AC_MSG_RESULT(no)
# Force usage of our own snprintf, since system snprintf is broken
SNPRINTF='snprintf.o'
INT64_FORMAT='"%lld"'
],
[ AC_MSG_RESULT(assuming not on target machine)
# Force usage of our own snprintf, since we cannot test foreign snprintf
SNPRINTF='snprintf.o'
INT64_FORMAT='"%lld"'
]) ],
[ AC_MSG_RESULT(assuming not on target machine)
# Force usage of our own snprintf, since we cannot test foreign snprintf
SNPRINTF='snprintf.o'
INT64_FORMAT='"%lld"'
])
else
# here if we previously decided we needed to use our own snprintf
INT64_FORMAT='"%lld"'
fi
else
# Here if we are not using 'long long int' at all
INT64_FORMAT='"%ld"'
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT)
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
dnl Determine memory alignment requirements for the basic C datatypes.
dnl CHECK_ALIGNOF(TYPE)
dnl This is modeled on the standard autoconf macro AC_CHECK_SIZEOF,
dnl except it finds the alignment requirement of the type instead of the size.
dnl The defined symbol is named ALIGNOF_TYPE, where the type name is
dnl converted in the same way as for AC_CHECK_SIZEOF.
dnl If cross-compiling, sizeof(type) is used as a default assumption.
AC_DEFUN(CHECK_ALIGNOF,
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(alignof_$1, [a-z *], [A-Z_P]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(ac_cv_alignof_$1, [ *], [_p]))dnl
changequote([, ])dnl
AC_MSG_CHECKING(alignment of $1)
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([#include <stdio.h>
struct { char filler; $1 field; } mystruct;
main()
{
FILE *f=fopen("conftestval", "w");
if (!f) exit(1);
fprintf(f, "%d\n", ((char*) & mystruct.field) - ((char*) & mystruct));
exit(0);
}], AC_CV_NAME=`cat conftestval`,
AC_CV_NAME='sizeof($1)',
AC_CV_NAME='sizeof($1)')])dnl
AC_MSG_RESULT($AC_CV_NAME)
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
undefine([AC_TYPE_NAME])dnl
undefine([AC_CV_NAME])dnl
])
CHECK_ALIGNOF(short)
CHECK_ALIGNOF(int)
CHECK_ALIGNOF(long)
if [[ $HAVE_LONG_LONG_INT_64 -eq 1 ]] ; then
CHECK_ALIGNOF(long long int)
fi
CHECK_ALIGNOF(double)
dnl Compute maximum alignment of any basic type.
dnl We assume long's alignment is at least as strong as char, short, or int;
dnl but we must check long long (if it exists) and double.
if [[ $ac_cv_alignof_double != 'sizeof(double)' ]] ; then
MAX_ALIGNOF="$ac_cv_alignof_long"
if [[ $MAX_ALIGNOF -lt $ac_cv_alignof_double ]] ; then
MAX_ALIGNOF="$ac_cv_alignof_double"
fi
if [[ $HAVE_LONG_LONG_INT_64 -eq 1 ]] ; then
if [[ $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ]] ; then
MAX_ALIGNOF="$ac_cv_alignof_long_long_int"
fi
fi
else
dnl cross-compiling: assume that double's alignment is worst case
MAX_ALIGNOF="$ac_cv_alignof_double"
fi
AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF)
dnl Check to see if platform has POSIX signal interface.
dnl NOTE: if this test fails then POSIX signals definitely don't work.
dnl It could be that the test compiles but the POSIX routines don't
dnl really work ... in that case the platform-specific port files
dnl can unset USE_POSIX_SIGNALS and HAVE_POSIX_SIGNALS. (The former
dnl goes into config.h, the latter into Makefile.global.)
AC_MSG_CHECKING(for POSIX signal interface)
AC_TRY_LINK([#include <signal.h>],
[struct sigaction act, oact;
sigemptyset(&act.sa_mask);
act.sa_flags = SA_RESTART;
sigaction(0, &act, &oact);],
[AC_DEFINE(USE_POSIX_SIGNALS)
HAVE_POSIX_SIGNALS="1"
AC_MSG_RESULT(yes)],
[HAVE_POSIX_SIGNALS=""
AC_MSG_RESULT(no)])
AC_SUBST(HAVE_POSIX_SIGNALS)
dnl Check for Tcl configuration script tclConfig.sh
dnl If --with-tclconfig was given, don't check for tclsh, tcl
if test -z "$TCL_DIRS"
AC_PATH_PROG(TCLSH, tclsh)
if test -z "$TCLSH"
then
AC_PATH_PROG(TCLSH, tcl)
if test -z "$TCLSH"
then
AC_MSG_WARN(TCL/TK support disabled; tcl shell is not in your path)
USE_TCL=
fi
fi
fi
if test "$USE_TCL" = true
then
AC_MSG_CHECKING(for tclConfig.sh)
TCL_CONFIG_SH=
library_dirs=
if test -z "$TCL_DIRS"
then
library_dirs=`echo 'puts $auto_path' | $TCLSH`
fi
library_dirs="$TCL_DIRS $TK_DIRS $library_dirs"
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
for dir in $library_dirs; do
if test -d "$dir" -a -r "$dir/tclConfig.sh"; then
TCL_CONFIG_SH=$dir/tclConfig.sh
break
fi
done
if test -z "$TCL_CONFIG_SH"; then
AC_MSG_RESULT(no)
AC_MSG_WARN(TCL/TK support disabled; Tcl configuration script missing)
USE_TCL=
else
AC_MSG_RESULT($TCL_CONFIG_SH)
AC_SUBST(TCL_CONFIG_SH)
fi
fi
USE_TK=$USE_TCL # If TCL is disabled, disable TK
dnl Check for Tk configuration script tkConfig.sh
if test "$USE_TK" = true
then
AC_MSG_CHECKING(for tkConfig.sh)
TK_CONFIG_SH=
# library_dirs are set in the check for TCL
for dir in $library_dirs
do
if test -d "$dir" -a -r "$dir/tkConfig.sh"
then
TK_CONFIG_SH=$dir/tkConfig.sh
break
fi
done
if test -z "$TK_CONFIG_SH"
then
AC_MSG_RESULT(no)
AC_MSG_WARN(TK support disabled; Tk configuration script missing)
USE_TK=
else
AC_MSG_RESULT($TK_CONFIG_SH)
AC_SUBST(TK_CONFIG_SH)
fi
fi
USE_X=$USE_TK
dnl Check for X libraries
if test "$USE_X" = true; then
ice_save_LIBS="$LIBS"
ice_save_CFLAGS="$CFLAGS"
ice_save_CPPFLAGS="$CPPFLAGS"
ice_save_LDFLAGS="$LDFLAGS"
LIBS="$LIBS $X_EXTRA_LIBS"
CFLAGS="$CFLAGS $X_CFLAGS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
LDFLAGS="$LDFLAGS $X_LIBS"
X11_LIBS=""
AC_CHECK_LIB(X11, XOpenDisplay, X11_LIBS="-lX11",,${X_PRE_LIBS})
if test "$X11_LIBS" = ""; then
dnl Not having X is bad news for pgtksh. Let the user fix this.
AC_MSG_WARN([The X11 library '-lX11' could not be found,
so TK support will be disabled. To enable TK support,
please use the configure options '--x-includes=DIR'
and '--x-libraries=DIR' to specify the X location.
See the file 'config.log' for further diagnostics.])
USE_TK=
fi
AC_SUBST(X_LIBS)
AC_SUBST(X11_LIBS)
AC_SUBST(X_PRE_LIBS)
LIBS="$ice_save_LIBS"
CFLAGS="$ice_save_CFLAGS"
CPPFLAGS="$ice_save_CPPFLAGS"
LDFLAGS="$ice_save_LDFLAGS"
dnl cause configure to recurse into subdirectories with their own configure
dnl Darn, setting AC_CONFIG_SUBDIRS sets a list $subdirs$ in the configure output
dnl file, but then configure doesn't bother using that list. Probably a bug in
dnl this version of autoconf.
dnl So at the moment interfaces/odbc gets configured unconditionally.
dnl - thomas 1998-10-05
#if test "X$USE_ODBC" = "Xtrue"
#then
# AC_CONFIG_SUBDIRS(interfaces/odbc)
#fi
Thomas G. Lockhart
committed
if test "$USE_ODBC" = "true"
then
PWD_INCDIR=no
AC_CHECK_HEADER(pwd.h, PWD_INCDIR=yes)
if test "$PWD_INCDIR" = "no"; then
AC_MSG_WARN(odbc support disabled; pwd.h missing)
USE_ODBC=
fi
AC_SUBST(USE_ODBC)
fi
dnl Output files that are neither makefiles nor shell scripts probably
dnl need fully-expanded substitutions, rather than partial expansions
dnl that include references to other variables. Currently the only
dnl such item that's needed is an expanded version of libdir, but
dnl others may be needed someday. NOTE: 'eval' technique only copes
dnl with one level of indirect reference per expansion; two levels is
dnl currently enough for libdir, but it's ugly...
dnl First we have to force 'NONE' prefix to be expanded itself.
dnl For some reason, autoconf 2.13 doesn't do this until AC_OUTPUT,
dnl which is too late...
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
eval expanded_libdir="$libdir"
eval expanded_libdir="$expanded_libdir"
AC_SUBST(expanded_libdir)
dnl Finally ready to produce output files ...
AC_OUTPUT(
src/GNUmakefile
src/Makefile.global
src/backend/port/Makefile
src/backend/catalog/genbki.sh
src/backend/utils/Gen_fmgrtab.sh
src/bin/pg_dump/Makefile
src/bin/pg_version/Makefile
src/bin/pgtclsh/mkMakefile.tcldefs.sh
src/bin/pgtclsh/mkMakefile.tkdefs.sh
src/bin/psql/Makefile
src/include/version.h
src/interfaces/Makefile
src/interfaces/libpq/Makefile
src/interfaces/ecpg/lib/Makefile
src/interfaces/ecpg/preproc/Makefile
src/interfaces/perl5/GNUmakefile
src/interfaces/libpq++/Makefile
src/interfaces/libpgeasy/Makefile
src/interfaces/libpgtcl/Makefile
src/interfaces/odbc/GNUmakefile
src/interfaces/odbc/Makefile.global
src/interfaces/python/GNUmakefile
src/pl/Makefile
src/pl/plpgsql/src/Makefile
src/pl/plpgsql/src/mklang.sql
src/pl/tcl/mkMakefile.tcldefs.sh
src/pl/plperl/GNUmakefile
src/test/regress/GNUmakefile