AC_INIT(interpret.c) AC_PROG_CC OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -pipe" OPTIMIZE="" AC_COMPILE_CHECK(-pipe, [ ], [ exit(0); ], [ OPTIMIZE="$OPTIMIZE -pipe" AC_VERBOSE(-pipe found) ], [ CFLAGS="$OLD_CFLAGS" AC_VERBOSE(-pipe not found) ] ) OLD_CFLAGS="$CFLAGS" CFLAGS="$OLD_CFLAGS -O2" AC_COMPILE_CHECK(-O2, [ ], [ exit(0); ], [ OPTIMIZE="$OPTIMIZE -O2" AC_VERBOSE(-O2 found) ], [ AC_VERBOSE(-O2 not found) CFLAGS="$OLD_CFLAGS -O" AC_COMPILE_CHECK(-O, [ ], [ exit(0); ], [ OPTIMIZE="$OPTIMIZE -O" AC_VERBOSE(-O found) ], [ AC_VERBOSE(-O not found) ]) ]) for a in -g -W -Wunused -Wformat do CFLAGS="$CFLAGS $OPTIMIZE $a" AC_COMPILE_CHECK($a, [ ], [ exit(0); ], [ OPTIMIZE="$OPTIMIZE $a" AC_VERBOSE($a found) ], [ AC_VERBOSE($a not found) ]) done CFLAGS="$OLD_CFLAGS" AC_CHECKING(mudlib and source dir) [ basedir=`(cd $srcdir; cd ..; pwd | sed 's#^/tmp_mnt##' )` MUD_LIB=$basedir/lib BINDIR=$basedir/bin ] AC_PROG_INSTALL AC_CONFIG_HEADER(machine.h) AC_PROG_YACC AC_PROG_CPP AC_SET_MAKE AC_PROGRAM_CHECK(COMPARE,diff,diff -wh >/dev/null 2>/dev/null,cmp -s) [ if test "$COMPARE" = "diff -wh >/dev/null 2>/dev/null" ; then cat >conftest.tmp1 <<END a simple test a simple test END cat >conftest.tmp2 <<END a simple test a simple test END cat >conftest.tmp3 <<END a simple test a hard test END if diff -hw >/dev/null 2>/dev/null conftest.tmp1 conftest.tmp2; then if diff -hw >/dev/null 2>/dev/null conftest.tmp1 conftest.tmp3; then COMPARE="cmp -s" else COMPARE="diff -wh >/dev/null 2>/dev/null" fi else COMPARE="cmp -s" fi rm -f conftest.tmp1 conftest.tmp2 conftest.tmp3 fi ] AC_CHECKING(first yacc define) [ cat >conftest.y <<\EOF %token GURKA %% all: GURKA %% EOF foffset=257; if $YACC -d conftest.y ; then if test -f y.tab.h; then foffset=`egrep GURKA y.tab.h | sed 's/^#[^0-9]*\([0-9]*\)[^0-9]*$/\1/'` echo $foffset >conftest.out if egrep '^[0-9]+$' conftest.out >/dev/null 2>&1; then echo >/dev/null else foffset=257 fi fi fi ] AC_DEFINE_UNQUOTED(F_OFFSET,$foffset) rm -rf conftest.y y.tab.c y.tab.h conftest.out AC_HAVE_HEADERS(sys/rusage.h sys/time.h unistd.h stdlib.h memory.h values.h \ string.h fcntl.h sys/filio.h sys/sockio.h netinet/in.h crypt.h \ sys/socketvar.h) AC_STDC_HEADERS AC_DIR_HEADER AC_SIZEOF_TYPE(char *) AC_SIZEOF_TYPE(long) AC_SIZEOF_TYPE(int) AC_SIZEOF_TYPE(short) AC_SIZE_T AC_PID_T AC_UID_T AC_RETSIGTYPE AC_HAVE_FUNCS(memset memcpy memchr memcmp strchr strrchr fchmod getrusage \ strcspn crypt _crypt getwd getcwd strtod strtok getenv vfprintf bzero bcopy \ strtol rindex vsprintf) AC_HEADER_EGREP(strchr,string.h, , AC_HEADER_EGREP(strchr,unistd.h, , AC_HEADER_EGREP(strchr,stdlib.h, , AC_DEFINE(STRCHR_DECL_MISSING)))) AC_HEADER_EGREP(malloc,memory.h, , AC_HEADER_EGREP(malloc,unistd.h, , AC_HEADER_EGREP(malloc,stdlib.h, , AC_DEFINE(MALLOC_DECL_MISSING)))) AC_HEADER_EGREP(getpeername,sys/socket.h, , AC_HEADER_EGREP(getpeername,sys/socketvar.h, , AC_HEADER_EGREP(getpeername,sys/sockio.h, , AC_DEFINE(GETPEERNAME_DECL_MISSING)))) AC_HEADER_EGREP(popen,stdio.h, , AC_DEFINE(POPEN_DECL_MISSING)) AC_HEADER_EGREP(getenv,unistd.h, , AC_HEADER_EGREP(getenv,stdlib.h, , AC_DEFINE(GETENV_DECL_MISSING))) AC_COMPILE_CHECK(return type of free, [ #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) #include <memory.h> #endif void free(); ],, AC_DEFINE(FREE_RETURNS_VOID)) AC_COMPILE_CHECK([void* or char* from malloc], [ #include <sys/types.h> #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) #include <memory.h> #endif #define POINTER void * POINTER malloc(size_t); #ifdef FREE_RETURNS_VOID void free(POINTER); #else int free(POINTER); #endif ],,AC_DEFINE(POINTER, void *), AC_DEFINE(POINTER, char *)) AC_HEADER_EGREP(gethostname,unistd.h, ,AC_DEFINE(GETHOSTNAME_DECL_MISSING)) AC_ALLOCA AC_CONST AC_INLINE AC_HAVE_LIBRARY(m) AC_HAVE_LIBRARY(socket) dnl AC_HAVE_LIBRARY(ucb, LIBS="$LIBS -lc -lucb") case "$DEFS" in *HAVE_LIBSOCKET* | *HAVE_LIBUCB*) AC_HAVE_LIBRARY(nsl) ;; esac AC_REPLACE_FUNCS(ualarm) case "$LIBOBJS" in *ualarm.o*) ;; *) AC_DEFINE(HAVE_UALARM) ;; esac AC_CHECKING(unaligned read/writes) AC_TEST_PROGRAM([ int main() { char *c; c=(char *)malloc(100); *((int *)(c+0))=0x1243abcd; if(*((int *)(c+0))!=0x1243abcd) return 1; *((int *)(c+1))=0x1243abcd; if(*((int *)(c+1))!=0x1243abcd) return 1; *((int *)(c+2))=0x1243abcd; if(*((int *)(c+2))!=0x1243abcd) return 1; *((int *)(c+3))=0x1243abcd; if(*((int *)(c+3))!=0x1243abcd) return 1; *((short *)(c+1))=0x1243; if(*((short *)(c+1))!=0x1243) return 1; *((short *)(c+0))=0x1243; if(*((short *)(c+0))!=0x1243) return 1; return 0; } ],AC_DEFINE(HANDLES_UNALIGNED_MEMORY_ACCESS)) AC_CHECKING(for working memmem) AC_TEST_PROGRAM([ #include <string.h> char *a="foo bar gazonk"; char *b="foo"; char *c="bar"; char *d="gazonk"; void main() { if(memmem(b,strlen(b),a,strlen(a))!=a || memmem(c,strlen(c),a,strlen(a))!=(a+4) || memmem(d,strlen(d),a,strlen(a))!=(a+8) || memmem(d,0,a,strlen(a))!=a || memmem(d,strlen(d)+1,a,strlen(a))!=0) exit(1); exit(0); } ],AC_DEFINE(HAVE_MEMMEM)) AC_CHECKING(how to extract an unsigned char) AC_TEST_PROGRAM([ void main() { char i,*p; i=-10; p=&i; if(*(unsigned char *)(p)!= 0x100 - 10) exit(1); exit(0); } ],AC_DEFINE(EXTRACT_UCHAR_BY_CAST)) case "$DEFS" in *HAVE_GETRUSAGE*) AC_COMPILE_CHECK(full availability of struct rusage members, [ #include <sys/time.h> #ifdef HAVE_SYS_RUSAGE_H #include <sys/rusage.h> #endif #include <sys/resource.h> #ifndef RUSAGE_SELF #define RUSAGE_SELF 0 #endif ],[ struct rusage rus; long *v = (long *)main; getrusage(RUSAGE_SELF, &rus); *v++ = rus.ru_maxrss; *v++ = rus.ru_ixrss; *v++ = rus.ru_idrss; *v++ = rus.ru_isrss; *v++ = rus.ru_minflt; *v++ = rus.ru_majflt; *v++ = rus.ru_nswap; *v++ = rus.ru_inblock; *v++ = rus.ru_oublock; *v++ = rus.ru_msgsnd; *v++ = rus.ru_msgrcv; *v++ = rus.ru_nsignals; *v++ = rus.ru_nvcsw; *v++ = rus.ru_nivcsw; ],, AC_DEFINE(GETRUSAGE_RESTRICTED)) ;; *) AC_COMPILE_CHECK(getrusage() through procfs, [ #include <sys/procfs.h> #include <sys/fcntl.h> int proc_fd; char proc_name[20]; ],[ sprintf(proc_name, "/proc/%05d", getpid()); proc_fd = open(proc_name, O_RDONLY); ], AC_DEFINE(GETRUSAGE_THROUGH_PROCFS) AC_DEFINE(HAVE_GETRUSAGE)) ;; esac AC_CHECKING(for pragma alloca) AC_TEST_PROGRAM([ #pragma alloca void main() { char *a=alloca(); exit(0); } ], AC_DEFINE(USE_PRAGMA_ALLOCA)) AC_COMPILE_CHECK(checking for volatile, [ ],[ volatile int foo=1; ],AC_DEFINE(VOLATILE,volatile),AC_DEFINE(VOLATILE,)) AC_CHECKING(for gcc function attributes) AC_TEST_PROGRAM([ #include <stdarg.h> void fatal(char *foo,...) __attribute__ ((noreturn,format (printf,1,2))); int sqr(int x) __attribute__ ((const)); int sqr(int x) { return x*x; } void fatal(char *foo,...) { va_list args; va_start(foo,args); printf(foo,args); va_end(args); exit(2); } main() { exit(0); } ], AC_DEFINE(HAVE_FUNCTION_ATTRIBUTES)) AC_CHECKING(how to set things nonblocking) AC_TEST_PROGRAM([ #define TESTING #define USE_FCNTL_FNDELAY #include "$srcdir/socket_ctrl.c" ],AC_DEFINE(USE_FCNTL_FNDELAY), AC_TEST_PROGRAM([ #define TESTING #define USE_FCNTL_O_NDELAY #include "$srcdir/socket_ctrl.c" ],AC_DEFINE(USE_FCNTL_O_NDELAY), AC_TEST_PROGRAM([ #define TESTING #define USE_FCNTL_NONBLOCK #include "$srcdir/socket_ctrl.c" ],AC_DEFINE(USE_FCNTL_NONBLOCK), AC_TEST_PROGRAM([ #define TESTING #define USE_IOCTL_FIONBIO #include "$srcdir/socket_ctrl.c" ],AC_DEFINE(USE_IOCTL_FIONBIO), echo "Couldn't find nonblock method." )))) AC_SUBST(WARN) AC_SUBST(COMPARE) AC_SUBST(OPTIMIZE) AC_SUBST(EXTRA_OBJS) AC_SUBST(MUD_LIB) AC_SUBST(BINDIR) AC_OUTPUT(Makefile)