AC_INIT(conf.c)
AC_CONFIG_HEADER(autoconf.h)
AC_REVISION(: Configure for TeenyMUD 2.x)
AC_PREREQ(2.1)
dnl Packages
dbm_lib="${GDBMLIB}"
dbm_def="${GDBMDEF}"
dbm_src="${GDBMSRC}"
dbm_obj="${GDBMOBJ}"
AC_ARG_WITH(gdbm, [ --with-gdbm compile to use GNU dbm],
[
dbm_def=-DUSE_GDBM
dbm_src=gdbm.c
dbm_obj=gdbm.o])
AC_ARG_WITH(bsddbm, [ --with-bsddbm compile to use BSD dbm],
[
dbm_def=-DUSE_BSDDBM
dbm_src=bsddbm.c
dbm_obj=bsddbm.o])
dnl Specials
AC_ISC_POSIX
dnl Compiler
AC_PROG_CC
AC_PROG_CPP
dnl System stuff
AC_AIX
AC_MINIX
dnl Cross Compiling
AC_C_CROSS
if test $cross_compiling = yes; then
echo "Cross compiling is NOT supported by this package. Sorry."
exit 0
fi
dnl Programs
AC_CHECK_PROG(LORDER, lorder, lorder, echo)
AC_PROG_YACC
AC_PROG_RANLIB
AC_PROG_MAKE_SET
dnl Compiler stuff
AC_GCC_TRADITIONAL
AC_C_CONST
AC_C_INLINE
AC_WORDS_BIGENDIAN
AC_MSG_CHECKING(for void pointer support)
AC_TRY_COMPILE(
[#include <stdio.h>
void test_func1() { /* innocent whistle */ }
void test_func2() { /* innocent whistle */ }
struct table {
void (*function)();
};
struct table Table[] = {
test_func1, test_func2, NULL
};],
[
register void *ptr; /* register pointer. */
char buf[80];
ptr = (void *)malloc(1); /* cast. */
free(ptr);
/* assign. */
ptr = (void *)&buf[0];
/* void function pointers. */
(Table[0].function)();
(Table[1].function)();
], AC_DEFINE(HAVE_VOID_PTR) AC_MSG_RESULT(sure), AC_MSG_RESULT(nada))
dnl Headers
AC_CHECK_HEADERS(stdlib.h string.h unistd.h sys/select.h malloc.h \
sys/wait.h limits.h sys/time.h sys/params.h varargs.h \
dirent.h sys/ptem.h sys/pte.h sys/stream.h termcap.h \
termio.h stdarg.h)
AC_CHECK_HEADER(sys/file.h, ,AC_DEFINE(NO_SYS_FILE))
AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ioctl.h>], [int x = TIOCGWINSZ;],
AC_DEFINE(GWINSZ_IN_SYS_IOCTL) AC_MSG_RESULT(found),
AC_MSG_RESULT(not found))
AC_MSG_CHECKING(for sys/time.h and sys/select.h clash)
AC_TRY_COMPILE([#include <sys/types.h>],
[#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif], AC_MSG_RESULT(none), AC_DEFINE(NO_SELECT_H) AC_MSG_RESULT(yes))
dnl Types
AC_TYPE_SIGNAL
AC_TYPE_SIZE_T
AC_TYPE_OFF_T
dnl Stock AC_CHECK_SIZEOF(off_t) is broken!
AC_MSG_CHECKING(size of off_t)
AC_TRY_COMPILE([#include "confdefs.h"
#include <sys/types.h>], [size_t len = sizeof(off_t);],
[AC_TRY_RUN([#include "confdefs.h"
#include <sys/types.h>
#include <stdio.h>
main() {
FILE *fp = fopen("conftestval", "w");
if(!fp) exit(1);
fprintf(fp, "%d\n", sizeof(off_t));
fclose(fp);
exit(0);
}], sizeof_off_t=`cat conftestval`
AC_DEFINE_UNQUOTED(SIZEOF_OFF_T, $sizeof_off_t)
AC_MSG_RESULT($sizeof_off_t),
AC_DEFINE(SIZEOF_OFF_T, 0) AC_MSG_RESULT(0))],
AC_DEFINE(SIZEOF_OFF_T, 0) AC_MSG_RESULT(0))
dnl AC_CHECK_SIZEOF(off_t)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(int *)
dnl Libraries
AC_CHECK_LIB(m, main)
AC_CHECK_LIB(net, main)
dnl (this is for DYNIX/ptx...)
AC_CHECK_LIB(seq, main)
AC_CHECK_LIB(socket, connect,
AC_CHECK_LIB(socket, connect) \
AC_CHECK_LIB(inet, main) \
AC_CHECK_LIB(nsl, main), , -linet -lnsl -lc)
dnl (...end DYNIX/ptx)
dnl (this is for Solaris...)
unset ac_cv_lib_socket
AC_CHECK_LIB(socket, connect,
AC_CHECK_LIB(socket, connect) \
AC_CHECK_LIB(nsl, main), , -lnsl -lc)
AC_CHECK_LIB(malloc, mallopt)
dnl (...end Solaris)
dnl (this is for SCO...)
unset ac_cv_lib_socket
AC_CHECK_LIB(socket, socket, , , -lc)
dnl (...SCO)
AC_CHECK_LIB(nsl_s, main)
AC_CHECK_LIB(bsd, main)
AC_CHECK_LIB(resolv, gethostbyaddr, , , -lc)
dnl (termcap stuff)
realLIBS=$LIBS
LIBS=""
AC_CHECK_LIB(termcap, tgetent, termlib="-ltermcap",
[AC_CHECK_LIB(termlib, tgetent, termlib="-ltermlib",
AC_CHECK_LIB(curses, tgetent, termlib="-lcurses"))])
LIBS=$realLIBS
dnl Library routines
AC_FUNC_STRFTIME
AC_FUNC_ALLOCA
AC_FUNC_VPRINTF
AC_FUNC_WAIT3
AC_CHECK_FUNCS(snprintf strtol strtod strtoul random fmod strcasecmp strerror \
bcopy strchr strstr strtok gettimeofday ftime fsync \
setrlimit waitpid sys_errlist tzset setsid timezone \
on_exit atexit sighold getrusage getloadavg mallopt \
gethostname uname getdtablesize)
AC_MSG_CHECKING(if programs can declare prototypes for getpwent suite)
AC_TRY_COMPILE([#include <sys/types.h>
extern struct passwd *getpwuid();], [struct passwd *z; z = getpwuid(0);],
AC_MSG_RESULT(yes),
AC_DEFINE(HAVE_GETPW_DECLS) AC_MSG_RESULT(nope))
dnl Structures
AC_TIME_WITH_SYS_TIME
AC_STRUCT_TM
AC_STRUCT_TIMEZONE
AC_MSG_CHECKING(union wait)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/wait.h>],
[union wait status; int pid; pid = wait (&status);
#ifdef WEXITSTATUS
/* Some POSIXoid systems have both the new-style macros and the old
union wait type, and they do not work together. If union wait
conflicts with WEXITSTATUS et al, we don't want to use it at all. */
if (WEXITSTATUS (status) != 0) pid = -1;
#endif
#ifdef HAVE_WAITPID
/* Make sure union wait works with waitpid. */
pid = waitpid (-1, &status, 0);
#endif
],
AC_DEFINE(HAVE_UNION_WAIT) AC_MSG_RESULT(found),
AC_MSG_RESULT(not found))
AC_MSG_CHECKING(for struct linger)
AC_TRY_COMPILE([#include <stdio.h>
#include <sys/signal.h>],
[struct linger ll;],
AC_MSG_RESULT(found),
AC_DEFINE(NO_STRUCT_LINGER) AC_MSG_RESULT(not found))
AC_MSG_CHECKING(for ancient in_addr)
AC_TRY_COMPILE([#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>],
[struct in_addr ina; ina.S_un.S_addr = 0x00000000;],
AC_MSG_RESULT(you poor soul) AC_DEFINE(HAVE_ANCIENT_TCP),
AC_MSG_RESULT(no))
dnl Extras
AC_MSG_CHECKING(whether you have SystemV or BSD signals)
AC_TRY_RUN([#include <signal.h>
int count = 0;
RETSIGTYPE sighandle() {
count++;
if(count == 2)
exit(0); /* BSD */
}
main() {
signal(SIGINT, sighandle);
kill(getpid(), SIGINT); /* definately ignored. */
kill(getpid(), SIGINT); /* terminated under SysV */
exit(1);
}], AC_MSG_RESULT(bsd), AC_DEFINE(HAVE_SYSV_SIGNALS) AC_MSG_RESULT(sysv))
dnl Package configuration
if test $with_gdbm; then
unset ac_cv_lib_gdbm
AC_CHECK_LIB(gdbm, gdbm_open,
[dbm_lib="-lgdbm"
xdbm_lib="gdbm"], dbm_lib="-lgdbm")
if test $ac_cv_lib_gdbm = no; then
AC_MSG_WARN(no working GDBM library found.)
xdbm_lib="NONE"
fi
if test $xdbm_lib != "NONE"; then
unset ac_cv_lib_gdbm
AC_CHECK_LIB($xdbm_lib, gdbm_setopt, true,
AC_MSG_WARN(this package requires at least GDBM version 1.7.1.))
fi
fi
if test $with_bsddbm; then
dnl Here's a macro set for you!
unset ac_cv_lib_c
AC_CHECK_LIB(c, dbopen, dbm_lib="",
[AC_CHECK_LIB(db, dbopen, dbm_lib="-ldb",
[AC_CHECK_LIB(bsddb, dbopen,
dbm_lib="-lbsddb",
[AC_MSG_WARN(no working BSD dbm library found.)
dbm_lib="-ldb"])])])
fi
AC_SUBST(dbm_lib)
AC_SUBST(dbm_def)
AC_SUBST(dbm_src)
AC_SUBST(dbm_obj)
AC_SUBST(termlib)
dnl Done
AC_OUTPUT(Makefile hash/Makefile compat/Makefile sha/Makefile \
gnu/Makefile)