dnl Process this file with autoconf to produce a configure script dnl Initialization AC_INIT(beecrypt.c) AC_CANONICAL_SYSTEM AC_CONFIG_HEADERS AM_INIT_AUTOMAKE(beecrypt, 2.2.0) AM_CONFIG_HEADER(config.h) dnl Automake AM_DISABLE_STATIC AC_LIBTOOL_WIN32_DLL dnl Check system type case $target_os in cygwin*) AC_DEFINE(CYGWIN) AC_DEFINE(WIN32) ;; darwin*) AC_DEFINE(DARWIN) ;; freebsd*) AC_DEFINE(FREEBSD) ;; linux*) AC_DEFINE(LINUX) ;; netbsd*) AC_DEFINE(NETBSD) ;; openbsd*) AC_DEFINE(OPENBSD) ;; osf*) AC_DEFINE(OSF) ;; *qnx) AC_DEFINE(QNX) ;; solaris*) AC_DEFINE(SOLARIS) ;; sysv*uv*) AC_DEFINE(SCO_UNIX) ;; *) AC_MSG_WARN([Operating system type $target_os currently not supported and/or tested]) ;; esac case $target_os in cygwin* | darwin*) AC_DEFINE(LEADING_UNDERSCORE) ;; *) AC_DEFINE(NO_UNDERSCORES) ;; esac dnl Checks for programs. AC_PROG_CC AC_PROG_CPP AC_PROG_LN_S AM_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) AC_C_INLINE if test "$ac_cv_prog_gcc" != yes; then AC_CACHE_CHECK([whether we are using Sun Workshop C], ac_cv_prog_SUNPRO_CC, [ AC_EGREP_CPP(yes, [ #ifdef __SUNPRO_C yes; #endif ], ac_cv_prog_SUNPRO_CC=yes, ac_cv_prog_SUNPRO_CC=no) ]) if test "$ac_cv_prog_SUNPRO_CC" != yes; then AC_CACHE_CHECK([whether we are using Compaq's C compiler], ac_cv_prog_DECC, [ AC_EGREP_CPP(yes, [ #ifdef __DECC yes; #endif ], ac_cv_prog_DECC=yes, ac_cv_prog_DECC=no) ]) fi fi AC_ARG_ENABLE(debug, [ --enable-debug creates debugging code [default=no]], [ if test "$enableval" = no; then ac_enable_debug=no else ac_enable_debug=yes fi ], [ ac_enable_debug=no]) dnl Check if we need to disable optimizations AC_ARG_ENABLE(optimized, [ --enable-optimized enables the assembler optimizations [default depends on --enable-debug value]], [ if test "$enableval" = no; then ac_enable_optimized=no else ac_enable_optimized=yes fi ], [ if test "$ac_enable_debug" = no; then ac_enable_optimized=yes else ac_enable_optimized=no fi ]) dnl Check if we have the necessary java components installed AC_ARG_WITH(javaglue, [ --with-javaglue creates the java glue code [default=yes]], [ if test "$withval" = no; then ac_with_javaglue=no else ac_with_javaglue=yes fi ], [ ac_with_javaglue=yes ]) if test "$ac_with_javaglue" = yes ; then AC_CHECK_PROG(ac_cv_have_gcj, gcj, yes, no) if test "$ac_cv_have_gcj" = yes; then AC_CACHE_CHECK([for java native interface headers], ac_cv_java_include, [ cat > conftest.java << EOF public class conftest { public static void main(String[[]] argv) { System.out.println(System.getProperty("java.home")); } } EOF java_home="`gcj --main=conftest -o conftest conftest.java; ./conftest`" if test -d "$ac_cv_java_include" ; then ac_cv_java_headers=yes else case $target_os in linux*) gcjpath="/usr/lib/gcc-lib/`gcj -dumpmachine`/`gcj -dumpversion`" if test -f $gcjpath/include/jni.h; then ac_cv_java_include="$gcjpath/include" fi ;; *) ac_cv_java_include="$java_home"/../include ;; esac if test "X$ac_cv_java_include" != X -a -d "$ac_cv_java_include" ; then ac_cv_java_headers=yes else AC_MSG_WARN([java headers not found, disabling javaglue]) ac_cv_java_headers=no ac_with_javaglue=no fi fi rm -fr conftest* ]) else AC_CHECK_PROG(ac_cv_have_java, java, yes, no) if test "$ac_cv_have_java" = yes; then AC_CHECK_PROG(ac_cv_have_javac, javac, yes, no) if test "$ac_cv_have_javac" = yes; then AC_CACHE_CHECK([for java native interface headers], ac_cv_java_include, [ cat > conftest.java << EOF public class conftest { public static void main(String[[]] argv) { System.out.println(System.getProperty("java.home")); } } EOF java_home=`javac conftest.java; java -classpath . conftest` case $target_os in cygwin*) java_home=`cygpath -u -p "$java_home"` ;; esac if test -d "$ac_cv_java_include" ; then ac_cv_java_headers=yes else case $target_os in darwin*) ac_cv_java_include="$java_home"/../../../Headers ;; *) ac_cv_java_include="$java_home"/../include esac if test -d "$ac_cv_java_include" ; then ac_cv_java_headers=yes else AC_MSG_WARN([java headers not found, disabling javaglue]) ac_cv_java_headers=no ac_with_javaglue=no fi fi rm -fr conftest* ]) else AC_MSG_WARN([javac not found, disabling javaglue]) ac_cv_java_headers=no ac_with_javaglue=no fi fi fi fi if test "$ac_with_javaglue" = yes ; then AC_DEFINE(JAVAGLUE,1) else AC_DEFINE(JAVAGLUE,0) fi dnl Check if we want to enable threads AC_ARG_ENABLE(threads, [ --enable-threads enables multithread safety [default=yes]], [ if test "$enableval" = no; then ac_enable_threads=no else ac_enable_threads=yes fi ], [ ac_enable_threads=yes ]) dnl Check if we want to enable aio AC_ARG_ENABLE(aio, [ --enable-aio enables asynchronous i/o for entropy gathering [default=yes]], [ if test "$enableval" = no; then ac_enable_aio=no else ac_enable_aio=yes fi ], [ ac_enable_aio=yes ]) dnl Check if we want to use mtmalloc AC_ARG_WITH(mtmalloc, [ --with-mtmalloc links against the mtmalloc library [default=no]], [ if test "$withval" = no; then ac_with_mtmalloc=no else ac_with_mtmalloc=yes fi ], [ ac_with_mtmalloc=no ]) dnl Product and version AC_SUBST(CC) AC_SUBST(CPP) AC_SUBST(LD) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T dnl Checks for library functions. AC_FUNC_MEMCMP dnl Checks for header files. AC_CHECK_HEADERS(errno.h string.h ctype.h stdlib.h) AC_CHECK_HEADERS(unistd.h fcntl.h) AC_CHECK_HEADERS(sys/types.h sys/stat.h) AC_CHECK_HEADERS(termio.h termios.h) AC_CHECK_HEADERS(sys/audioio.h sys/ioctl.h sys/soundcard.h) AC_CHECK_HEADERS(time.h sys/time.h) if test "$ac_cv_header_sys_time_h" = yes; then AC_CHECK_FUNC(gettimeofday, [ AC_DEFINE(HAVE_GETTIMEOFDAY, 1) ]) AC_CHECK_FUNC(gethrtime, [ AC_DEFINE(HAVE_GETHRTIME, 1) ]) fi case $target_os in cygwin*) ;; *) if test "$ac_enable_threads" = yes; then AC_DEFINE(ENABLE_THREADS, 1) AC_CHECK_HEADERS(thread.h pthread.h synch.h semaphore.h) if test "$ac_cv_header_thread_h" = yes; then AC_HAVE_LIBRARY(thread) elif test "$ac_cv_header_pthread_h" = yes; then AC_HAVE_LIBRARY(pthread) else AC_MSG_WARN([Can't find any thread libraries]) AC_DEFINE(ENABLE_THREADS, 0) fi fi if test "$ac_enable_aio" = yes; then AC_CHECK_HEADERS(aio.h) if test "$ac_cv_header_aio_h" = yes; then AC_SEARCH_LIBS(aio_read, [c rt aio posix4], [ ], [ AC_MSG_ERROR([no library containing aio routines found]) ]) AC_CACHE_CHECK([whether aio works], ac_cv_have_working_aio, [ cat > conftest.aio << EOF The quick brown fox jumps over the lazy dog. EOF AC_TRY_RUN([ #if HAVE_ERRNO_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_UNISTD_H # include #endif #include #include main() { struct aiocb a; const struct aiocb* a_list = &a; struct timespec a_timeout; char buffer[32]; int i, rc, fd = open("conftest.aio", O_RDONLY); if (fd < 0) exit(1); memset(&a, 0, sizeof(struct aiocb)); a.aio_fildes = fd; a.aio_offset = 0; a.aio_reqprio = 0; a.aio_buf = buffer; a.aio_nbytes = sizeof(buffer); a.aio_sigevent.sigev_notify = SIGEV_NONE; a_timeout.tv_sec = 1; a_timeout.tv_nsec = 0; if (aio_read(&a) < 0) exit(1); if (aio_suspend(&a_list, 1, &a_timeout) < 0) { #if HAVE_ERRNO_H /* some linux systems don't await timeout and return instantly */ if (errno == EAGAIN) { nanosleep(&a_timeout, (struct timespec*) 0); if (aio_suspend(&a_list, 1, &a_timeout) < 0) exit(1); } else exit(1); #else exit(1); #endif } if (aio_error(&a) < 0) exit(1); if (aio_return(&a) < 0) exit(1); exit(0); } ], ac_cv_have_working_aio=yes, ac_cv_have_working_aio=no) ]) if test "$ac_cv_have_working_aio" = yes; then AC_DEFINE(ENABLE_AIO, 1) fi rm -fr conftest* fi fi if test "$ac_with_mtmalloc" = yes; then AC_CHECK_HEADERS(mtmalloc.h) AC_HAVE_LIBRARY(mtmalloc) fi ;; esac dnl Checks for compiler flags CFLAGS="" CPPFLAGS="" LDFLAGS="" if test "$ac_enable_optimized" = yes; then case $target_cpu in alpha*) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_ALPHA" ;; arm*) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_ARM" ;; ia64) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_IA64" ;; i386) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I386" ;; i486) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I486" ;; i586) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I586" ;; i686) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_I686" ;; ia64) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_IA64" ;; powerpc) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_POWERPC" ;; sparcv8) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_SPARCV8" ;; sparcv8plus*) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_SPARCV8PLUS" CFLAGS="$CFLAGS -Wa,-xarch=v8plus" ;; sparcv9) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_SPARCV9" CFLAGS="$CFLAGS -Wa,-xarch=v9" ;; sparcv9a) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_SPARCV9" CFLAGS="$CFLAGS -Wa,-xarch=v9a" ;; sparcv9b) CPPFLAGS="$CPPFLAGS -DOPTIMIZE_SPARCV9" CFLAGS="$CFLAGS -Wa,-xarch=v9b" ;; x86) # QNX Neutrino doesn't list the exact cpu type ;; esac fi if test "$ac_enable_debug" = yes; then CFLAGS="$CFLAGS -g" if test "$ac_cv_prog_gcc" = yes; then CFLAGS="$CFLAGS -Wall" elif test "$ac_cv_prog_SUNPRO_CC" = yes; then if test "$ac_enable_threads" = yes; then CFLAGS="$CFLAGS -mt" fi fi else if test "$ac_cv_prog_gcc" = yes; then CFLAGS="$CFLAGS -O3 -g" if test "$ac_enable_optimized" = yes; then case $target_cpu in # This switch makes the mp32 routines slower by about 10%, so it's disabled # alphaev6) # CFLAGS="$CFLAGS -mcpu=ev6" # ;; arm*) CFLAGS="$CFLAGS -fomit-frame-pointer" ;; i386) CFLAGS="$CFLAGS -mcpu=i386 -march=i386 -fomit-frame-pointer" ;; i486) CFLAGS="$CFLAGS -mcpu=i386 -march=i486 -fomit-frame-pointer" ;; i586) CFLAGS="$CFLAGS -mcpu=i386 -march=i586 -fomit-frame-pointer" ;; i686) CFLAGS="$CFLAGS -mcpu=i386 -march=i686 -fomit-frame-pointer" ;; sparc) CFLAGS="$CFLAGS -m32 -mtune=ultrasparc" ;; sparcv8) CFLAGS="$CFLAGS -mv8" ;; # This actually performs WORSE on gcc up to 2.95.3! # sparcv8plus*) # CFLAGS="$CFLAGS -mv8plus" # ;; sparcv9*) CFLAGS="$CFLAGS -m32 -mcpu=ultrasparc" ;; sparc64) CFLAGS="$CFLAGS -m64 -mcpu=ultrasparc" ;; esac fi elif test "$ac_cv_prog_SUNPRO_CC" = yes; then CFLAGS="$CFLAGS -fast" if test "$ac_enable_threads" = yes; then CFLAGS="$CFLAGS -mt" fi if test "$ac_enable_optimized" = yes; then case $target_cpu in sparcv8) CFLAGS="$CFLAGS -xtarget=generic -xarch=v8" ;; sparcv8plus) CFLAGS="$CFLAGS -xtarget=generic -xarch=v8plus" ;; sparcv8plusa) CFLAGS="$CFLAGS -xtarget=generic -xarch=v8plusa" ;; sparcv8plusb) CFLAGS="$CFLAGS -xtarget=generic -xarch=v8plusb" ;; sparcv9) CFLAGS="-xarch=v9" CFLAGS="$CFLAGS -xtarget=generic64 -xarch=v9" LDFLAGS="$LDFLAGS -64" ;; sparcv9a) CFLAGS="-xarch=v9" CFLAGS="$CFLAGS -xtarget=generic64 -xarch=v9a" LDFLAGS="$LDFLAGS -64" ;; sparcv9b) CFLAGS="-xarch=v9" CFLAGS="$CFLAGS -xtarget=generic64 -xarch=v9b" LDFLAGS="$LDFLAGS -64" ;; esac fi elif test "$ac_cv_prog_DECC" = yes; then CFLAGS="$CFLAGS -fast" if test "$ac_enable_threads" = yes; then CFLAGS="$CFLAGS -pthread" fi else CFLAGS="$CFLAGS -O2" fi fi case $target_os in freebsd*) if test "$ac_enable_threads" = yes; then CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; esac if test "$ac_with_javaglue" = yes ; then if test "$ac_cv_have_gcj" = no; then CFLAGS="$CFLAGS -I$ac_cv_java_include" fi case $target_os in cygwin*) CFLAGS="$CFLAGS -I$ac_cv_java_include"/win32 ;; darwin*) ;; linux*) if test "$ac_cv_have_gcj" = no; then CFLAGS="$CFLAGS -I$ac_cv_java_include"/linux fi ;; osf*) CFLAGS="$CFLAGS -I$ac_cv_java_include"/osf ;; solaris*) CFLAGS="$CFLAGS -I$ac_cv_java_include"/solaris ;; *) AC_MSG_WARN([please add appropriate -I$ac_cv_java_include/ flag]) ;; esac fi dnl Checks for endianness AC_C_BIGENDIAN dnl Checks for word sizes AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(unsigned char) if test "$ac_cv_sizeof_char" -eq 1; then AC_SUBST(int8_type, "char") else AC_MSG_ERROR([compiler has no 1 byte char]) fi if test "$ac_cv_sizeof_unsigned_char" -eq 1; then AC_SUBST(uint8_type, "unsigned char") else AC_MSG_ERROR([compiler has no 1 byte unsigned char]) fi AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(unsigned short) if test "$ac_cv_sizeof_short" -eq 2; then AC_SUBST(int16_type, "short") else AC_MSG_ERROR([compiler has no 2 byte short]) fi if test "$ac_cv_sizeof_unsigned_short" -eq 2; then AC_SUBST(uint16_type, "unsigned short") else AC_MSG_ERROR([compiler has no 2 byte unsigned short]) fi AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(unsigned int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(unsigned long) if test "$ac_cv_sizeof_int" -eq 4; then AC_SUBST(int32_type, "int") elif test "$ac_cv_sizeof_long" -eq 4; then AC_SUBST(int32_type, "long") else AC_MSG_ERROR([compiler has no 4 byte integer]) fi if test "$ac_cv_sizeof_unsigned_int" -eq 4; then AC_SUBST(uint32_type, "unsigned int") elif test "$ac_cv_sizeof_unsigned_long" -eq 4; then AC_SUBST(uint32_type, "unsigned long") else AC_MSG_ERROR([compiler has no 4 byte unsigned integer]) fi if test "$ac_cv_sizeof_long" -eq 8; then AC_SUBST(int64_type, "long") else AC_CHECK_SIZEOF(long long) if test "$ac_cv_sizeof_long_long" -eq 8; then AC_DEFINE(HAVE_LONG_LONG) AC_SUBST(int64_type, "long long") else AC_MSG_ERROR([compiler has no 8 byte integer]) fi fi if test "$ac_cv_sizeof_unsigned_long" -eq 8; then AC_SUBST(uint64_type, "unsigned long") else AC_CHECK_SIZEOF(unsigned long long) if test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG) AC_SUBST(uint64_type, "unsigned long long") else AC_MSG_ERROR([compiler has no 8 byte unsigned integer]) fi fi AC_CHECK_SIZEOF(float) if test "$ac_cv_sizeof_float" -eq 4; then AC_SUBST(float4_type, "float") else AC_MSG_ERROR([compiler has no 4 byte float]) fi AC_CHECK_SIZEOF(double) if test "$ac_cv_sizeof_double" -eq 8; then AC_SUBST(double8_type, "double") else AC_MSG_ERROR([compiler has no 8 byte double]) fi dnl Checks for devices AC_CHECKING(for specific entropy devices) case $target_os in cygwin*) AC_MSG_CHECKING([for wavein]) AC_MSG_RESULT(yes) AC_MSG_CHECKING([for wincrypt]) AC_MSG_RESULT(yes) AC_MSG_CHECKING([for console]) AC_MSG_RESULT(yes) ;; linux*) AC_CACHE_CHECK([for /dev/dsp], ac_cv_have_dev_dsp, [ if test -r /dev/dsp; then ac_cv_have_dev_dsp=yes else ac_cv_have_dev_dsp=no fi ]) if test "$ac_cv_have_dev_dsp" = yes; then AC_DEFINE(HAVE_DEV_DSP, 1) fi ;; solaris*) AC_CACHE_CHECK([for /dev/audio], ac_cv_have_dev_audio, [ if test -r /dev/audio; then ac_cv_have_dev_audio=yes else ac_cv_have_dev_audio=no fi ]) if test "$ac_cv_have_dev_audio" = yes; then AC_DEFINE(HAVE_DEV_AUDIO, 1) fi ;; *) AC_MSG_WARN(no specific entropy devices present) ;; esac case $target_os in cygwin*) ;; *) AC_CHECKING(for generic entropy devices) AC_CACHE_CHECK([for /dev/random], ac_cv_have_dev_random, [ if test -r /dev/random; then ac_cv_have_dev_random=yes else ac_cv_have_dev_random=no fi ]) if test "$ac_cv_have_dev_random" = yes; then AC_DEFINE(HAVE_DEV_RANDOM, 1) fi AC_CACHE_CHECK([for /dev/urandom], ac_cv_have_dev_urandom, [ if test -r /dev/urandom; then ac_cv_have_dev_urandom=yes else ac_cv_have_dev_urandom=no fi ]) if test "$ac_cv_have_dev_urandom" = yes; then AC_DEFINE(HAVE_DEV_URANDOM, 1) fi AC_CACHE_CHECK([for /dev/tty], ac_cv_have_dev_tty, [ if test -r /dev/tty; then ac_cv_have_dev_tty=yes else ac_cv_have_dev_tty=no fi ]) if test "$ac_cv_have_dev_tty" = yes; then AC_DEFINE(HAVE_DEV_TTY, 1) fi ;; esac dnl Generate the assembler optimizations rm -f $srcdir/blowfishopt.c $srcdir/blowfishopt.S rm -f $srcdir/fips180opt.c $srcdir/fips180opt.S rm -f $srcdir/mp32opt.c $srcdir/mp32opt.S if test "$ac_enable_optimized" = yes; then case $target_cpu in arm*) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.arm.S" EOF ;; i[[34]]86) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.i386.S" EOF ;; i[[56]]86) cat > $srcdir/blowfishopt.S << EOF #include "gas/blowfishopt.i586.S" EOF cat > $srcdir/fips180opt.S << EOF #include "gas/fips180opt.i586.S" EOF cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.i386.S" EOF ;; ia64) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.ia64.S" EOF ;; powerpc) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.powerpc.S" EOF ;; sparcv8) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.sparcv8.S" EOF ;; sparcv8plus* | sparcv9*) cat > $srcdir/mp32opt.S << EOF #include "gas/mp32opt.sparcv9.S" EOF ;; esac fi if test ! -r $srcdir/blowfishopt.S; then cat > $srcdir/blowfishopt.c << EOF EOF fi if test ! -r $srcdir/fips180opt.S; then cat > $srcdir/fips180opt.c << EOF EOF fi if test ! -r $srcdir/mp32opt.S; then cat > $srcdir/mp32opt.c << EOF EOF fi dnl Output AC_OUTPUT([ Doxyfile Makefile beecrypt.spec types.h docs/Makefile gas/Makefile masm/Makefile mwerks/Makefile tests/Makefile ], [ echo timestamp > stamp-h.in ] )