# Process this file with autoconf to produce a configure script. AC_INIT(Valgrind, 2.3.0.CVS, valgrind-users@lists.sourceforge.net) AC_CONFIG_SRCDIR(coregrind/vg_main.c) AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE AM_MAINTAINER_MODE # Where is VEX ? # Nb: For the 2nd arg, the help string, AS_HELP_STRING is the proper way, but # older autoconfs don't support it... here's what it would say: # # AS_HELP_STRING([--with-vex], [Vex directory (must be specified!)]), # AC_ARG_WITH(vex, [ --with-vex=/path/to/vex/dir Vex directory (must be specified!)], [ AC_CHECK_FILE($withval/pub/libvex.h, [VEX_DIR=$withval], [AC_MSG_ERROR([Directory '$withval' does not exist, or does not contain Vex])]) ], [ AC_MSG_ERROR([You must specify --with-vex=/path/to/vex/dir]) ]) AC_SUBST(VEX_DIR) # Checks for programs. CFLAGS="" AC_PROG_LN_S AC_PROG_CC ##AM_PROG_CC_C_O AC_PROG_CPP AC_PROG_CXX AC_PROG_RANLIB # Check for the compiler support if test "${GCC}" != "yes" ; then AC_MSG_ERROR([Valgrind relies on GCC to be compiled]) fi # figure out where perl lives AC_PATH_PROG(PERL, perl) # figure out where gdb lives AC_PATH_PROG(GDB, gdb) AC_DEFINE_UNQUOTED(GDB_PATH, "$GDB", [path to GDB]) # some older automake's don't have it so try something on our own ifdef([AM_PROG_AS],[AM_PROG_AS], [ AS="${CC}" AC_SUBST(AS) ASFLAGS="" AC_SUBST(ASFLAGS) ]) # This variable will collect the individual suppression files # depending on the results of autoconf DEFAULT_SUPP="" # We don't want gcc 2.7 AC_MSG_CHECKING([for a supported version of gcc]) gcc_version=`${CC} --version | head -n 1` case "${gcc_version}" in gcc-2.7.*) AC_MSG_RESULT([no (${gcc_version})]) AC_MSG_ERROR([please use a recent (>= gcc-2.95) version of gcc]) ;; *) AC_MSG_RESULT([ok (${gcc_version})]) ;; esac # Checks for the platform AC_CANONICAL_HOST AC_MSG_CHECKING([for a supported CPU]) AC_SUBST(VG_ARCH) AC_SUBST(VG_ARCH_ALL) VG_ARCH_ALL="amd64 arm x86" AC_SUBST(KICKSTART_BASE) AC_SUBST(ARCH_CORE_AM_CFLAGS) AC_SUBST(ARCH_TOOL_AM_CFLAGS) AC_SUBST(ARCH_CORE_AM_CCASFLAGS) case "${host_cpu}" in i?86) AC_MSG_RESULT([ok (${host_cpu})]) VG_ARCH="x86" KICKSTART_BASE="0xb0000000" ARCH_CORE_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@ -DELFSZ=32" ARCH_TOOL_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@" ARCH_CORE_AM_CCASFLAGS="" ;; x86_64) AC_MSG_RESULT([ok (${host_cpu})]) VG_ARCH="amd64" # XXX: relocations under amd64's "small model" are 32-bit signed # quantities; therefore going above 0x7fffffff doesn't work... this is # a problem. KICKSTART_BASE="0x70000000" ARCH_CORE_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@ -DELFSZ=64" # XXX: need to use -fpic, otherwise when linking tools I get this error # message: # relocation R_X86_64_32 can not be used when making a shared object; # recompile with -fPIC # # I don't understand... --njn ARCH_TOOL_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@ -fpic" ARCH_CORE_AM_CCASFLAGS="" ;; arm*) AC_MSG_RESULT([ok (${host_cpu})]) VG_ARCH="arm" KICKSTART_BASE="0xb0000000" ARCH_CORE_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@ -DELFSZ=32" ARCH_TOOL_AM_CFLAGS="-fomit-frame-pointer @PREFERRED_STACK_BOUNDARY@" ARCH_CORE_AM_CCASFLAGS="" ;; powerpc*) AC_MSG_RESULT([no (${host_cpu})]) VG_ARCH="ppc" KICKSTART_BASE="0x70000000" ARCH_CORE_AM_CFLAGS="-DELFSZ=32" ARCH_TOOL_AM_CFLAGS="-fpic" ARCH_CORE_AM_CCASFLAGS="-Wa,-maltivec" AC_MSG_ERROR([PowerPC not supported. Sorry]) ;; *) AC_MSG_RESULT([no (${host_cpu})]) AC_MSG_ERROR([Unsupported host architecture. Sorry]) ;; esac AC_MSG_CHECKING([for a supported OS]) AC_SUBST(VG_OS) AC_SUBST(VG_OS_ALL) VG_OS_ALL="linux" case "${host_os}" in *linux*) AC_MSG_RESULT([ok (${host_os})]) VG_OS="linux" # Ok, this is linux. Check the kernel version AC_MSG_CHECKING([for the kernel version]) kernel=`uname -r` case "${kernel}" in 2.6.*) AC_MSG_RESULT([2.6 family (${kernel})]) AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you're using Linux 2.6.x]) ;; 2.4.*) AC_MSG_RESULT([2.4 family (${kernel})]) AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you're using Linux 2.4.x]) ;; *) AC_MSG_RESULT([unsupported (${kernel})]) AC_MSG_ERROR([Valgrind works on kernels 2.4, 2.6]) ;; esac ;; *freebsd*) AC_MSG_RESULT([ok (${host_os})]) VG_OS="freebsd" ;; *) AC_MSG_RESULT([no (${host_os})]) AC_MSG_ERROR([Valgrind is operating system specific. Sorry. Please consider doing a port.]) ;; esac AC_MSG_CHECKING([for a supported CPU/OS combination]) AC_SUBST(VG_PLATFORM) AC_SUBST(VG_PLATFORM_ALL) VG_PLATFORM_ALL="amd64-linux arm-linux x86-linux" VG_PLATFORM="$VG_ARCH-$VG_OS" case $VG_PLATFORM in x86-linux|amd64-linux|arm-linux) AC_MSG_RESULT([ok (${host_cpu}-${host_os})]) ;; *) AC_MSG_RESULT([no (${host_cpu}-${host_os})]) AC_MSG_ERROR([Valgrind is platform specific. Sorry. Please consider doing a port.]) ;; esac AC_SUBST(DEFAULT_SUPP) glibc="" AC_EGREP_CPP([GLIBC_21], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 1) GLIBC_21 #endif #endif ], glibc="2.1") AC_EGREP_CPP([GLIBC_22], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2) GLIBC_22 #endif #endif ], glibc="2.2") AC_EGREP_CPP([GLIBC_23], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 3) GLIBC_23 #endif #endif ], glibc="2.3") AC_MSG_CHECKING([the glibc version]) case "${glibc}" in 2.1) AC_MSG_RESULT(2.1 family) AC_DEFINE([GLIBC_2_1], 1, [Define to 1 if you're using glibc 2.1.x]) DEFAULT_SUPP="${DEFAULT_SUPP} glibc-2.1.supp" ;; 2.2) AC_MSG_RESULT(2.2 family) AC_DEFINE([GLIBC_2_2], 1, [Define to 1 if you're using glibc 2.2.x]) DEFAULT_SUPP="${DEFAULT_SUPP} glibc-2.2.supp" ;; 2.3) AC_MSG_RESULT(2.3 family) AC_DEFINE([GLIBC_2_3], 1, [Define to 1 if you're using glibc 2.3.x]) DEFAULT_SUPP="${DEFAULT_SUPP} glibc-2.3.supp" ;; *) AC_MSG_RESULT(unsupported version) AC_MSG_ERROR([Valgrind requires the glibc version 2.1, 2.2 or 2.3]) ;; esac # APIs introduced in recent glibc versions AC_MSG_CHECKING([whether sched_param has a sched_priority member]) AC_CACHE_VAL(vg_have_sched_priority, [ AC_TRY_COMPILE([#include ],[ struct sched_param p; p.sched_priority=1;], vg_have_sched_priority=yes, vg_have_sched_priority=no) ]) AC_MSG_RESULT($vg_have_sched_priority) if test "$vg_have_sched_priority" = yes; then AC_DEFINE([HAVE_SCHED_PRIORITY], 1, [pthread / sched_priority exists]) fi # We don't know how to detect the X client library version # (detecting the server version is easy, bu no help). So we # just use a hack: always include the suppressions for both # versions 3 and 4. AC_PATH_X if test "${no_x}" != 'yes' ; then DEFAULT_SUPP="${DEFAULT_SUPP} xfree-4.supp" DEFAULT_SUPP="${DEFAULT_SUPP} xfree-3.supp" fi # does this compiler support -mpreferred-stack-boundary=2 ? AC_MSG_CHECKING([if gcc accepts -mpreferred-stack-boundary]) safe_CFLAGS=$CFLAGS CFLAGS="-mpreferred-stack-boundary=2" AC_TRY_COMPILE(, [ int main () { return 0 ; } ], [ PREFERRED_STACK_BOUNDARY="-mpreferred-stack-boundary=2" AC_MSG_RESULT([yes]) ], [ PREFERRED_STACK_BOUNDARY="" AC_MSG_RESULT([no]) ]) CFLAGS=$safe_CFLAGS AC_SUBST(PREFERRED_STACK_BOUNDARY) # Check for PIE support in the compiler and linker AC_CACHE_CHECK([for PIE support], vg_cv_pie, [safe_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -fpie" safe_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -pie" AC_TRY_LINK([int foo;], [], [vg_cv_pie=yes], [vg_cv_pie=no]) CFLAGS=$safe_CFLAGS LDFLAGS=$safe_LDFLAGS]) if test "$vg_cv_pie" = yes; then AC_DEFINE([HAVE_PIE], 1, [can create position-independent executables]) fi AM_CONDITIONAL(USE_PIE, test "$vg_cv_pie" = "yes") # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([sys/endian.h endian.h mqueue.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_UID_T AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_HEADER_TIME AC_CHECK_TYPES(__pthread_unwind_buf_t,,,[#include ]) # Checks for library functions. AC_FUNC_MEMCMP AC_FUNC_MMAP AC_TYPE_SIGNAL AC_CHECK_FUNCS([floor memchr memset mkdir strchr strdup strpbrk strrchr strstr semtimedop]) AC_OUTPUT( Makefile valgrind.spec valgrind.pc docs/Makefile tests/Makefile tests/vg_regtest tests/unused/Makefile include/valgrind.h include/Makefile include/amd64/Makefile include/arm/Makefile include/x86/Makefile include/linux/Makefile include/amd64-linux/Makefile include/arm-linux/Makefile include/x86-linux/Makefile auxprogs/Makefile coregrind/Makefile coregrind/demangle/Makefile coregrind/docs/Makefile coregrind/amd64/Makefile coregrind/arm/Makefile coregrind/x86/Makefile coregrind/linux/Makefile coregrind/amd64-linux/Makefile coregrind/arm-linux/Makefile coregrind/x86-linux/Makefile addrcheck/Makefile addrcheck/tests/Makefile addrcheck/docs/Makefile memcheck/Makefile memcheck/tests/Makefile memcheck/tests/amd64/Makefile memcheck/tests/arm/Makefile memcheck/tests/x86/Makefile memcheck/docs/Makefile cachegrind/Makefile cachegrind/amd64/Makefile cachegrind/arm/Makefile cachegrind/x86/Makefile cachegrind/tests/Makefile cachegrind/tests/amd64/Makefile cachegrind/tests/arm/Makefile cachegrind/tests/x86/Makefile cachegrind/docs/Makefile cachegrind/cg_annotate helgrind/Makefile helgrind/tests/Makefile helgrind/docs/Makefile massif/Makefile massif/hp2ps/Makefile massif/tests/Makefile massif/docs/Makefile corecheck/Makefile corecheck/tests/Makefile corecheck/docs/Makefile lackey/Makefile lackey/tests/Makefile lackey/docs/Makefile none/Makefile none/tests/Makefile none/tests/amd64/Makefile none/tests/arm/Makefile none/tests/x86/Makefile none/docs/Makefile ) cat< default.supp # This is a generated file, composed of the following suppression rules: # # ${DEFAULT_SUPP} # EOF for file in ${DEFAULT_SUPP} ; do cat ${srcdir}/$file >> default.supp done