dnl macros to configure g10 dnl GNUPG_MSG_PRINT(STRING) dnl print a message dnl define(GNUPG_MSG_PRINT, [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG ]) dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME) dnl Check whether a typedef exists and create a #define $2 if it exists dnl AC_DEFUN(GNUPG_CHECK_TYPEDEF, [ AC_MSG_CHECKING(for $1 typedef) AC_CACHE_VAL(gnupg_cv_typedef_$1, [AC_TRY_COMPILE([#include #include ], [ #undef $1 int a = sizeof($1); ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )]) AC_MSG_RESULT($gnupg_cv_typedef_$1) if test "$gnupg_cv_typedef_$1" = yes; then AC_DEFINE($2) fi ]) dnl GNUPG_LINK_FILES( SRC, DEST ) dnl same as AC_LINK_FILES, but collect the files to link in dnl some special variables and do the link dnl when GNUPG_DO_LINK_FILES is called dnl This is a workaround for AC_LINK_FILES, because it does not work dnl correct when using a caching scheme dnl define(GNUPG_LINK_FILES, [ if test "x$wk_link_files_src" = "x"; then wk_link_files_src="$1" wk_link_files_dst="$2" else wk_link_files_src="$wk_link_files_src $1" wk_link_files_dst="$wk_link_files_dst $2" fi ]) define(GNUPG_DO_LINK_FILES, [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst ) ]) dnl GNUPG_CHECK_ENDIAN dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST dnl define(GNUPG_CHECK_ENDIAN, [ if test "$cross_compiling" = yes; then AC_MSG_WARN(cross compiling; assuming little endianess) fi AC_MSG_CHECKING(endianess) AC_CACHE_VAL(gnupg_cv_c_endian, [ gnupg_cv_c_endian=unknown # See if sys/param.h defines the BYTE_ORDER macro. AC_TRY_COMPILE([#include #include ], [ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif], [# It does; now see whether it defined to BIG_ENDIAN or not. AC_TRY_COMPILE([#include #include ], [ #if BYTE_ORDER != BIG_ENDIAN not big endian #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)]) if test "$gnupg_cv_c_endian" = unknown; then AC_TRY_RUN([main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); }], gnupg_cv_c_endian=little, gnupg_cv_c_endian=big, gnupg_cv_c_endian=little ) fi ]) AC_MSG_RESULT([$gnupg_cv_c_endian]) if test "$gnupg_cv_c_endian" = little; then AC_DEFINE(LITTLE_ENDIAN_HOST) else AC_DEFINE(BIG_ENDIAN_HOST) fi ]) dnl GNUPG_CHECK_CACHE dnl define(GNUPG_CHECK_CACHE, [ AC_MSG_CHECKING(cached information) gnupg_hostcheck="$target" AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ]) if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then AC_MSG_RESULT(changed) AC_MSG_WARN(config.cache exists!) AC_MSG_ERROR(you must do 'make distclean' first to compile for different target or different parameters.) else AC_MSG_RESULT(ok) fi ]) ###################################################################### # Check for -fPIC etc (taken from libtool) # This sets CFLAGS_PIC to the required flags # NO_PIC to yes if it is not possible to # generate PIC ###################################################################### dnl GNUPG_CHECK_PIC dnl define(GNUPG_CHECK_PIC, [ AC_MSG_CHECKING(for option to create PIC) CFLAGS_PIC= NO_PIC=no if test "$cross_compiling" = yes; then AC_MSG_RESULT(assume none) else if test "$GCC" = yes; then CFLAGS_PIC="-fPIC" else case "$host_os" in aix3* | aix4*) # All rs/6000 code is PIC # but is there any non-rs/6000 AIX platform? ;; hpux9* | hpux10*) CFLAGS_PIC="+Z" ;; irix5* | irix6*) # PIC (with -KPIC) is the default. ;; osf3* | osf4*) # FIXME - pic_flag is probably required for # hppa*-osf* and i860-osf* ;; sco3.2v5*) CFLAGS_PIC='-Kpic' ;; solaris2* | solaris7* ) CFLAGS_PIC='-KPIC' ;; sunos4*) CFLAGS_PIC='-PIC' ;; *) NO_PIC=yes ;; esac fi case "$host_cpu" in rs6000 | powerpc | powerpcle) # Yippee! All RS/6000 and PowerPC code is position-independent. CFLAGS_PIC="" ;; esac if test "$NO_PIC" = yes; then AC_MSG_RESULT(not possible) else if test -z "$CFLAGS_PIC"; then AC_MSG_RESULT(none) else AC_MSG_RESULT($CFLAGS_PIC) fi fi fi ]) ###################################################################### # Check for rdynamic flag # This sets CFLAGS_RDYNAMIC to the required flags ###################################################################### dnl GNUPG_CHECK_RDYNAMIC dnl define(GNUPG_CHECK_RDYNAMIC, [ AC_MSG_CHECKING(how to specify -rdynamic) CFLAGS_RDYNAMIC= if test "$cross_compiling" = yes; then AC_MSG_RESULT(assume none) else case "$host_os" in solaris* ) CFLAGS_RDYNAMIC="-Wl,-dy" ;; freebsd2* | osf4* ) CFLAGS_RDYNAMIC="" ;; * ) CFLAGS_RDYNAMIC="-Wl,-export-dynamic" ;; esac AC_MSG_RESULT($CFLAGS_RDYNAMIC) fi ]) ##################################################################### # Check for SysV IPC (from GIMP) # And see whether we have a SHM_LOCK (FreeBSD does not have it). ##################################################################### dnl GNUPG_CHECK_IPC dnl define(GNUPG_CHECK_IPC, [ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h) if test "$ac_cv_header_sys_shm_h" = "yes"; then AC_MSG_CHECKING(whether IPC_RMID allowes subsequent attaches) AC_CACHE_VAL(gnupg_cv_ipc_rmid_deferred_release, AC_TRY_RUN([ #include #include #include int main() { int id; char *shmaddr; id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777); if (id == -1) exit (2); shmaddr = shmat (id, 0, 0); shmctl (id, IPC_RMID, 0); if ((char*) shmat (id, 0, 0) == (char*) -1) { shmdt (shmaddr); exit (1); } shmdt (shmaddr); shmdt (shmaddr); exit (0); } ], gnupg_cv_ipc_rmid_deferred_release="yes", gnupg_cv_ipc_rmid_deferred_release="no", gnupg_cv_ipc_rmid_deferred_release="assume-no") ) if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then AC_DEFINE(IPC_RMID_DEFERRED_RELEASE) AC_MSG_RESULT(yes) else if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then AC_MSG_RESULT(no) else AC_MSG_RESULT([assuming no]) fi fi AC_MSG_CHECKING(whether SHM_LOCK is available) AC_CACHE_VAL(gnupg_cv_ipc_have_shm_lock, AC_TRY_COMPILE([#include #include #include ],[ int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); } ], gnupg_cv_ipc_have_shm_lock="yes", gnupg_cv_ipc_have_shm_lock="no" ) ) if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then AC_DEFINE(IPC_HAVE_SHM_LOCK) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi fi ]) ###################################################################### # Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock # is not called from uid 0 (not tested whether uid 0 works) ###################################################################### dnl GNUPG_CHECK_MLOCK dnl define(GNUPG_CHECK_MLOCK, [ AC_CHECK_FUNCS(mlock) if test "$ac_cv_func_mlock" = "yes"; then AC_MSG_CHECKING(whether mlock is broken) AC_CACHE_VAL(gnupg_cv_have_broken_mlock, AC_TRY_RUN([ #include #include #include #include #include #include int main() { char *pool; int err; long int pgsize = getpagesize(); pool = malloc( 4096 + pgsize ); if( !pool ) return 2; pool += (pgsize - ((long int)pool % pgsize)); err = mlock( pool, 4096 ); if( !err || errno == EPERM ) return 0; /* okay */ return 1; /* hmmm */ } ], gnupg_cv_have_broken_mlock="no", gnupg_cv_have_broken_mlock="yes", gnupg_cv_have_broken_mlock="assume-no" ) ) if test "$gnupg_cv_have_broken_mlock" = "yes"; then AC_DEFINE(HAVE_BROKEN_MLOCK) AC_MSG_RESULT(yes) else if test "$gnupg_cv_have_broken_mlock" = "no"; then AC_MSG_RESULT(no) else AC_MSG_RESULT(assuming no) fi fi fi ]) dnl *-*wedit:notab*-* Please keep this as the last line.