838 lines
24 KiB
Plaintext
Executable File
838 lines
24 KiB
Plaintext
Executable File
#
|
|
# Process this file with autoconf to produce a configure script.
|
|
#
|
|
# Copyright 2003 by Gray Watson
|
|
#
|
|
# This file is part of the dmalloc package.
|
|
#
|
|
# Permission to use, copy, modify, and distribute this software for
|
|
# any purpose and without fee is hereby granted, provided that the
|
|
# above copyright notice and this permission notice appear in all
|
|
# copies, and that the name of Gray Watson not be used in
|
|
# advertising or publicity pertaining to distribution of the
|
|
# document or software without specific, written prior permission.
|
|
#
|
|
# Gray Watson makes no representations about the suitability of the
|
|
# software described herein for any purpose. It is provided "as is"
|
|
# without express or implied warranty.
|
|
#
|
|
# The author may be contacted via http://dmalloc.com/
|
|
#
|
|
# $Id: //BBN_Linux/Branch/Branch_for_Rel_TP_ASEAN_20161216/tclinux_phoenix/apps/public/tools/dmalloc-5.5.2/configure.ac#1 $
|
|
#
|
|
AC_REVISION($Revision: #1 $)
|
|
AC_INIT(dmalloc, 5.5.2, [http://dmalloc.com/])
|
|
AC_CONFIG_SRCDIR(dmalloc.c)
|
|
AC_CONFIG_HEADER(conf.h)
|
|
|
|
AC_MSG_NOTICE([configurations for the dmalloc library])
|
|
|
|
##############################################################################
|
|
# arguments
|
|
|
|
AC_ARG_ENABLE(cxx,
|
|
[ AC_HELP_STRING([--disable-cxx],
|
|
[do not build in C++ support (enabled by default)] ) ],
|
|
[ # enable_cxx set by default ],
|
|
[ enable_cxx=yes ]
|
|
)
|
|
AC_ARG_ENABLE(threads,
|
|
[ AC_HELP_STRING([--enable-threads],
|
|
[build in thread support (disabled by default)] ) ],
|
|
[ # enable_threads set by default ],
|
|
[ enable_threads=no ]
|
|
)
|
|
AC_ARG_ENABLE(shlib,
|
|
[ AC_HELP_STRING([--enable-shlib],
|
|
[build shared libraries (disabled by default)] ) ],
|
|
[ # enable_shlib set by default ],
|
|
[ enable_shlib=no ]
|
|
)
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([build utilities])
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CXX
|
|
|
|
# see if we actually have a CXX program
|
|
if test "$ac_cv_prog_CXX" = "" -o ! -x "$ac_cv_prog_CXX"; then
|
|
AC_MSG_WARN(could not find C++ compiler $ac_cv_prog_CXX)
|
|
enable_cxx=no
|
|
fi
|
|
|
|
# hopefully we have a stdc c-compiler
|
|
if test "$ac_cv_prog_cc_stdc" = "no" ; then
|
|
AC_MSG_WARN()
|
|
AC_MSG_WARN(no ansi compiler. this build may fail.)
|
|
AC_MSG_WARN()
|
|
fi
|
|
AC_PROG_INSTALL
|
|
AC_PROG_RANLIB
|
|
AC_C_CONST
|
|
|
|
# we need this for various settings
|
|
AC_HEADER_STDC
|
|
AC_CHECK_HEADER([stdarg.h],
|
|
[AC_DEFINE(HAVE_STDARG_H,1) AC_SUBST([HAVE_STDARG_H],1)],
|
|
[AC_DEFINE(HAVE_STDARG_H,0) AC_SUBST([HAVE_STDARG_H],0)])
|
|
AC_CHECK_HEADER([stdlib.h],
|
|
[AC_DEFINE(HAVE_STDLIB_H,1) AC_SUBST([HAVE_STDLIB_H],1)],
|
|
[AC_DEFINE(HAVE_STDLIB_H,0) AC_SUBST([HAVE_STDLIB_H],0)])
|
|
AC_CHECK_HEADER([string.h],
|
|
[AC_DEFINE(HAVE_STRING_H,1) AC_SUBST([HAVE_STRING_H],1)],
|
|
[AC_DEFINE(HAVE_STRING_H,0) AC_SUBST([HAVE_STRING_H],0)])
|
|
AC_CHECK_HEADER([unistd.h],
|
|
[AC_DEFINE(HAVE_UNISTD_H,1) AC_SUBST([HAVE_UNISTD_H],1)],
|
|
[AC_DEFINE(HAVE_UNISTD_H,0) AC_SUBST([HAVE_UNISTD_H],0)])
|
|
AC_CHECK_HEADER([sys/types.h],
|
|
[AC_DEFINE(HAVE_SYS_TYPES_H,1) AC_SUBST([HAVE_SYS_TYPES_H],1)],
|
|
[AC_DEFINE(HAVE_SYS_TYPES_H,0) AC_SUBST([HAVE_SYS_TYPES_H],0)])
|
|
AC_CHECK_HEADER([sys/mman.h],
|
|
[AC_DEFINE(HAVE_SYS_MMAN_H,1) AC_SUBST([HAVE_SYS_MMAN_H],1)],
|
|
[AC_DEFINE(HAVE_SYS_MMAN_H,0) AC_SUBST([HAVE_SYS_MMAN_H],0)])
|
|
|
|
###############################################################################
|
|
# shared library handling
|
|
|
|
#
|
|
# check to see where we should install our shared libraries
|
|
# DONT CACHE in case the change the --prefix
|
|
#
|
|
# This is pretty tricky here and should be handled by autoconf
|
|
# automatically. I try to see if there is a shlib directory
|
|
# to install by shlibs there. If not I use the $libdir. Some
|
|
# of the variables have values of '${exec_prefix}' and the like
|
|
# so the quoting is very important.
|
|
#
|
|
# We first try and find the true directory where we are
|
|
# installing.
|
|
#
|
|
if test "x$exec_prefix" = xNONE; then
|
|
if test "x$prefix" = xNONE; then
|
|
shlibprefix="$ac_default_prefix"
|
|
else
|
|
shlibprefix="$prefix"
|
|
fi
|
|
else
|
|
shlibprefix="$exec_prefix"
|
|
fi
|
|
#
|
|
# Then we see if there is a special shlib directory to use.
|
|
#
|
|
if test -d $shlibprefix/shlib; then
|
|
shlibdir='${exec_prefix}/shlib'
|
|
else
|
|
shlibdir="$libdir"
|
|
fi
|
|
AC_SUBST(shlibdir)
|
|
|
|
# see how the local system builds shared libraries
|
|
AC_MSG_CHECKING([shared library link args])
|
|
AC_COMPILE_IFELSE([ int foo(int val) { return val + 1; } ],[
|
|
# so now we try to create an archive from the compiled .o file
|
|
(ar cr conftest.a conftest.o) 2>&5
|
|
# see which shared-library ld commands work
|
|
#
|
|
# Darwin/Mac OS X - Terry Teague
|
|
# username terry_teague at domain users.sourceforge.net
|
|
ac_cv_shared_lib_link_objs=no
|
|
if test `uname` = "Darwin"; then
|
|
if (ld -dylib -o conftest.so.t -lc conftest.a) 2>&5; then
|
|
# By convention on some platforms
|
|
# libLLL.so, libLLL.X.so are symlinks to libLLL.X.Y.Z.so
|
|
# where X.Y.Z is version # (major.minor.increment) of the library
|
|
# (API)
|
|
# For the moment set the Mac OS X dylib compatibility version # to
|
|
# 1.0 and don't create any symlinks or versioned library names.
|
|
# Perhaps this could be the version of the dmalloc library
|
|
# (e.g. 5.4.0)
|
|
ac_cv_shared_link_args='$(CXX) -dynamiclib -install_name $@ -compatibility_version 1 -current_version 1 -o $@.t'
|
|
# linking static archives into a dynamic lib doesn't seem to work
|
|
# explicitly link the object files
|
|
ac_cv_shared_lib_link_objs=yes
|
|
else
|
|
# oh well, toss an error
|
|
ac_cv_shared_link_args='# Could not configure shlib linking'
|
|
enable_shlib=no
|
|
fi
|
|
elif (ld -shared --whole-archive -soname conftest.so -o conftest.so.t conftest.a) 2>&5; then
|
|
ac_cv_shared_link_args='ld -shared --whole-archive -soname $@ -o $@.t'
|
|
elif (ld -shared -o conftest.so.t -all -soname conftest.so.t -none -lc -all conftest.a) 2>&5; then
|
|
ac_cv_shared_link_args='ld -shared -o $@.t -all -soname $@ -none -lc -all'
|
|
elif (ld -G -o conftest.so.t conftest.a) 2>&5; then
|
|
ac_cv_shared_link_args='ld -G -o $@.t'
|
|
else
|
|
# oh well, toss an error
|
|
ac_cv_shared_link_args='# Could not configure shlib linking'
|
|
enable_shlib=no
|
|
fi
|
|
],[
|
|
# oh well, toss an error
|
|
ac_cv_shared_link_args='# Could not configure shlib linking'
|
|
enable_shlib=no
|
|
])
|
|
shlinkargs="$ac_cv_shared_link_args"
|
|
AC_SUBST(shlinkargs)
|
|
if test "$ac_cv_shared_lib_link_objs" = "yes"; then
|
|
AC_MSG_RESULT([$ac_cv_shared_link_args objectfiles...])
|
|
else
|
|
AC_MSG_RESULT([$ac_cv_shared_link_args])
|
|
fi
|
|
|
|
###############################################################################
|
|
|
|
AC_MSG_CHECKING([shared library extension])
|
|
if test `uname` = "Darwin"; then
|
|
# Darwin/Mac OS X - Terry Teague
|
|
# username terry_teague at domain users.sourceforge.net
|
|
ac_cv_shared_lib_suffix=dylib
|
|
else
|
|
ac_cv_shared_lib_suffix=so
|
|
fi
|
|
shlibext="$ac_cv_shared_lib_suffix"
|
|
AC_MSG_RESULT([$ac_cv_shared_lib_suffix])
|
|
AC_SUBST(shlibext)
|
|
|
|
###############################################################################
|
|
|
|
AC_MSG_CHECKING([C++ support])
|
|
if test "$enable_cxx" = "yes"; then
|
|
AC_SUBST([CXX_ON],[])
|
|
AC_SUBST([CXX_OFF],[#])
|
|
AC_MSG_RESULT([enabled])
|
|
else
|
|
AC_SUBST([CXX_ON],[#])
|
|
AC_SUBST([CXX_OFF],[])
|
|
AC_MSG_RESULT([disabled])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([thread support])
|
|
if test "$enable_threads" = "yes"; then
|
|
AC_SUBST([TH_ON],[])
|
|
AC_SUBST([TH_OFF],[#])
|
|
AC_MSG_RESULT([enabled])
|
|
else
|
|
AC_SUBST([TH_ON],[#])
|
|
AC_SUBST([TH_OFF],[])
|
|
AC_MSG_RESULT([disabled])
|
|
fi
|
|
|
|
# shlib support
|
|
AC_MSG_CHECKING(shlib support)
|
|
if test "$enable_shlib" = "yes"; then
|
|
AC_SUBST([SL_ON],[])
|
|
AC_SUBST([SL_OFF],[#])
|
|
AC_MSG_RESULT(enabled)
|
|
else
|
|
AC_SUBST([SL_ON],[#])
|
|
AC_SUBST([SL_OFF],[])
|
|
AC_MSG_RESULT(disabled)
|
|
fi
|
|
|
|
###############################################################################
|
|
#
|
|
# check for size_t
|
|
#
|
|
AC_TYPE_SIZE_T
|
|
if test "$ac_cv_type_size_t" = "yes"; then
|
|
AC_DEFINE(DMALLOC_SIZE,size_t)
|
|
else
|
|
AC_DEFINE(DMALLOC_SIZE,unsigned long)
|
|
fi
|
|
|
|
#
|
|
# check for unsigned-ness
|
|
#
|
|
AC_MSG_CHECKING([dmalloc size unsigned])
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#if HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#if HAVE_STDLIB_H
|
|
# include <stdlib.h>
|
|
#endif
|
|
main() { DMALLOC_SIZE x = -1; if (x >= 0) exit(0); else exit(1); }
|
|
]])],
|
|
[AC_DEFINE(DMALLOC_SIZE_UNSIGNED,1) AC_MSG_RESULT([yes])],
|
|
[AC_DEFINE(DMALLOC_SIZE_UNSIGNED,0) AC_MSG_RESULT([no])],
|
|
[AC_DEFINE(DMALLOC_SIZE_UNSIGNED,0) AC_MSG_RESULT([no])]
|
|
)
|
|
|
|
#
|
|
# check for strdup macro (linux)
|
|
#
|
|
AC_MSG_CHECKING([strdup macro])
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#if HAVE_STDLIB_H
|
|
# include <string.h>
|
|
#endif
|
|
|
|
#ifdef strdup
|
|
main() { exit(0); }
|
|
#else
|
|
main() { exit(1); }
|
|
#endif
|
|
]])],
|
|
[ac_cv_strdup_macro=yes],
|
|
[ac_cv_strdup_macro=no],
|
|
[ac_cv_strdup_macro=no]
|
|
)
|
|
AC_MSG_RESULT([$ac_cv_strdup_macro])
|
|
|
|
#
|
|
# check for existance of mprotect and associated defines
|
|
#
|
|
AC_CHECK_FUNCS(mprotect)
|
|
AC_MSG_CHECKING([mprotect works])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#if HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#if HAVE_SYS_MMAN_H
|
|
# include <sys/mman.h>
|
|
#endif
|
|
]],[[
|
|
int prot = PROT_NONE | PROT_READ | PROT_WRITE;
|
|
(void)mprotect(0, 0, prot);
|
|
]])],
|
|
[ AC_DEFINE(PROTECT_ALLOWED,1) AC_MSG_RESULT([yes]) ],
|
|
[ AC_DEFINE(PROTECT_ALLOWED,0) AC_MSG_RESULT([no]) ]
|
|
)
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([important functionality])
|
|
|
|
AC_CHECK_FUNCS(mmap)
|
|
AC_CHECK_FUNCS(sbrk)
|
|
|
|
if test x$ac_cv_func_mmap != xyes && x$ac_cv_func_sbrk != xyes; then
|
|
AC_MSG_WARN()
|
|
AC_MSG_WARN(no mmap nor sbrk function. See INTERNAL_MEMORY_SPACE in settings.dist.)
|
|
AC_MSG_WARN()
|
|
fi
|
|
|
|
AC_MSG_CHECKING([mmap usage])
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#if HAVE_SYS_TYPES_H
|
|
# include <sys/types.h>
|
|
#endif
|
|
#if HAVE_SYS_MMAN_H
|
|
# include <sys/mman.h>
|
|
#endif
|
|
main() {
|
|
/* we could open /dev/zero and map to that but I did not want the library
|
|
to open another file-descriptor */
|
|
char *dest, *src, *src_p, *dest_p;
|
|
src = "0123456789";
|
|
dest = (char *)mmap(0L, 10, PROT_READ | PROT_WRITE | PROT_EXEC,
|
|
MAP_PRIVATE | MAP_ANON, -1 /* no fd */,
|
|
0 /* no offset */);
|
|
src_p = src; dest_p = dest;
|
|
while (src_p < src + 10) { *dest_p++ = *src_p++; }
|
|
src_p = src; dest_p = dest;
|
|
while (src_p < src + 10) {
|
|
if (*src_p++ != *dest_p++) { exit(1); }
|
|
}
|
|
exit(0);
|
|
}
|
|
]])],
|
|
[ AC_DEFINE(USE_MMAP, 1) ac_cv_use_mmap=yes],
|
|
[ AC_DEFINE(USE_MMAP, 0) ac_cv_use_mmap=no],
|
|
[ AC_DEFINE(USE_MMAP, 0) ac_cv_use_mmap=no]
|
|
)
|
|
AC_MSG_RESULT([$ac_cv_use_mmap])
|
|
|
|
#
|
|
# check for basic block size
|
|
#
|
|
AC_CHECK_FUNCS(getpagesize)
|
|
AC_MSG_CHECKING([basic-block size])
|
|
ac_cv_page_size=0
|
|
if test $ac_cv_page_size = 0; then
|
|
AC_RUN_IFELSE([main() { if (getpagesize()<=2048) exit(0); else exit(1); }],
|
|
[ ac_cv_page_size=11 ] )
|
|
fi
|
|
if test $ac_cv_page_size = 0; then
|
|
AC_RUN_IFELSE([main() { if (getpagesize()<=4096) exit(0); else exit(1); }],
|
|
[ ac_cv_page_size=12 ] )
|
|
fi
|
|
if test $ac_cv_page_size = 0; then
|
|
AC_RUN_IFELSE([main() { if (getpagesize()<=8192) exit(0); else exit(1); }],
|
|
[ ac_cv_page_size=13 ] )
|
|
fi
|
|
if test $ac_cv_page_size = 0; then
|
|
AC_RUN_IFELSE([main() { if (getpagesize()<=16384) exit(0); else exit(1); }],
|
|
[ ac_cv_page_size=14 ] )
|
|
fi
|
|
if test $ac_cv_page_size = 0; then
|
|
ac_cv_page_size=15
|
|
fi
|
|
AC_DEFINE_UNQUOTED([BASIC_BLOCK],[$ac_cv_page_size])
|
|
AC_MSG_RESULT([$ac_cv_page_size])
|
|
|
|
#
|
|
# data-alignment size...
|
|
#
|
|
AC_CHECK_SIZEOF(long)
|
|
AC_MSG_CHECKING([data-alignment size])
|
|
if test $ac_cv_sizeof_long = 4; then
|
|
# we have to make a special case for sun sparc idiocy
|
|
ac_cv_data_align=8
|
|
else
|
|
ac_cv_data_align=$ac_cv_sizeof_long
|
|
fi
|
|
AC_DEFINE_UNQUOTED([ALLOCATION_ALIGNMENT],[$ac_cv_data_align])
|
|
AC_MSG_RESULT([$ac_cv_data_align])
|
|
|
|
#
|
|
# check the safety of the abort function
|
|
#
|
|
AC_CHECK_FUNCS(abort)
|
|
AC_MSG_CHECKING([abort safe])
|
|
AC_RUN_IFELSE([[
|
|
static int main_b = 0;
|
|
static char heap_mem[102400], *heap_p = heap_mem;
|
|
free () { if (main_b) _exit(0); }
|
|
char *malloc (int size) {
|
|
char *pnt;
|
|
if (main_b) _exit(0);
|
|
pnt = heap_p;
|
|
heap_p += size;
|
|
return pnt;
|
|
}
|
|
char *calloc (int number, int size) {
|
|
char *start, *pnt, *end;
|
|
if (main_b) _exit(0);
|
|
/* it should be already 0s */
|
|
start = malloc (number * size);
|
|
pnt = start;
|
|
end = start + size;
|
|
while (pnt < end) { *pnt++ = '\0'; }
|
|
return start;
|
|
}
|
|
char *realloc (char *old_pnt, int new_size) {
|
|
char *start, *pnt, *end;
|
|
if (main_b) _exit(0);
|
|
start = malloc (new_size);
|
|
pnt = start;
|
|
end = start + new_size;
|
|
while (pnt < end) { *pnt++ = *old_pnt++; }
|
|
return start;
|
|
}
|
|
main() { main_b = 1; abort(); _exit(1); }
|
|
]],
|
|
# NOTE: this is reversed because abort core dumps and doesn't exit with
|
|
# 0 which means that it should fail
|
|
[ AC_DEFINE(ABORT_OKAY, 0) AC_MSG_RESULT([no]) ],
|
|
# if it succeeds then something called free on the way out
|
|
[ AC_DEFINE(ABORT_OKAY, 1) AC_MSG_RESULT([yes]) ],
|
|
[ AC_DEFINE(ABORT_OKAY, 0) AC_MSG_RESULT([no]) ]
|
|
)
|
|
|
|
AC_TYPE_SIGNAL
|
|
AC_MSG_CHECKING([signal works])
|
|
AC_CHECK_HEADER([signal.h],
|
|
[AC_DEFINE(HAVE_SIGNAL_H,1) AC_SUBST([HAVE_SIGNAL_H],1)],
|
|
[AC_DEFINE(HAVE_SIGNAL_H,0) AC_SUBST([HAVE_SIGNAL_H],0)])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#if HAVE_SIGNAL_H
|
|
#include <signal.h>
|
|
#endif
|
|
]], [[
|
|
(void)signal(SIGHUP, SIG_IGN);
|
|
(void)signal(SIGINT, SIG_IGN);
|
|
(void)signal(SIGTERM, SIG_IGN);
|
|
]])],
|
|
[ AC_DEFINE(SIGNAL_OKAY, 1) AC_MSG_RESULT([yes]) ],
|
|
[ AC_DEFINE(SIGNAL_OKAY, 0) AC_MSG_RESULT([no]) ]
|
|
)
|
|
|
|
#
|
|
# check the safety of the getenv function
|
|
#
|
|
AC_CHECK_FUNCS(getenv)
|
|
AC_MSG_CHECKING([getenv safe])
|
|
AC_RUN_IFELSE([[
|
|
static char heap_mem[102400], *heap_p = heap_mem;
|
|
free (char *pnt) {
|
|
}
|
|
char *malloc (int size) {
|
|
char *pnt;
|
|
getenv("PATH");
|
|
pnt = heap_p;
|
|
heap_p += size;
|
|
return pnt;
|
|
}
|
|
char *calloc (int number, int size) {
|
|
char *start, *pnt, *end;
|
|
getenv("PATH");
|
|
/* it should be already 0s */
|
|
start = malloc (number * size);
|
|
pnt = start;
|
|
end = start + size;
|
|
while (pnt < end) { *pnt++ = '\0'; }
|
|
return start;
|
|
}
|
|
char *realloc (char *old_pnt, int new_size) {
|
|
char *start, *pnt, *end;
|
|
getenv("PATH");
|
|
start = malloc (new_size);
|
|
pnt = start;
|
|
end = start + new_size;
|
|
while (pnt < end) { *pnt++ = *old_pnt++; }
|
|
return start;
|
|
}
|
|
main() { malloc(10); _exit(0); }
|
|
]],
|
|
[ AC_DEFINE(GETENV_SAFE, 1)
|
|
AC_MSG_RESULT([yes])
|
|
getenv_safe=yes ],
|
|
# if it succeeds then something called free on the way out
|
|
[ AC_DEFINE(GETENV_SAFE, 0)
|
|
AC_MSG_RESULT([no])
|
|
getenv_safe=no ],
|
|
[ AC_DEFINE(GETENV_SAFE, 1)
|
|
AC_MSG_RESULT([yes])
|
|
getenv_safe=yes ]
|
|
)
|
|
|
|
# now check to see if we can replace getenv with GetEnvironmentVariableA
|
|
AC_CHECK_HEADER([sys/cygwin.h],
|
|
[AC_DEFINE(HAVE_SYS_CYGWIN_H,1) AC_SUBST([HAVE_SYS_CYGWIN_H],1)],
|
|
[AC_DEFINE(HAVE_SYS_CYGWIN_H,0) AC_SUBST([HAVE_SYS_CYGWIN_H],0)])
|
|
AC_CHECK_HEADER([w32api/windef.h],
|
|
[AC_DEFINE(HAVE_W32API_WINDEF_H,1) AC_SUBST([HAVE_W32API_WINDEF_H],1)],
|
|
[AC_DEFINE(HAVE_W32API_WINDEF_H,0) AC_SUBST([HAVE_W32API_WINDEF_H],0)])
|
|
AC_CHECK_HEADER([w32api/winbase.h],
|
|
[AC_DEFINE(HAVE_W32API_WINBASE_H,1) AC_SUBST([HAVE_W32API_WINBASE_H],1)],
|
|
[AC_DEFINE(HAVE_W32API_WINBASE_H,0) AC_SUBST([HAVE_W32API_WINBASE_H],0)],
|
|
[[
|
|
#if HAVE_W32API_WINDEF_H
|
|
# include <w32api/windef.h>
|
|
#endif]])
|
|
AC_MSG_CHECKING([for GetEnvironmentVariableA])
|
|
AC_RUN_IFELSE([[
|
|
#if HAVE_SYS_CYGWIN_H
|
|
# include <sys/cygwin.h>
|
|
#endif
|
|
#if HAVE_STDARG_H
|
|
# include <stdarg.h>
|
|
#endif
|
|
#if HAVE_W32API_WINDEF_H
|
|
# include <w32api/windef.h>
|
|
#endif
|
|
#if HAVE_W32API_WINBASE_H
|
|
# include <w32api/winbase.h>
|
|
#endif
|
|
main() {
|
|
char env_buf[256];
|
|
GetEnvironmentVariableA("PATH", env_buf, sizeof(env_buf));
|
|
}
|
|
]],
|
|
[ AC_DEFINE(HAVE_GETENVIRONMENTVARIABLEA, 1)
|
|
AC_MSG_RESULT([yes])
|
|
have_getenvironmentvariablea=yes ],
|
|
[ AC_DEFINE(HAVE_GETENVIRONMENTVARIABLEA, 0)
|
|
AC_MSG_RESULT([no])
|
|
have_getenvironmentvariablea=no ],
|
|
[ AC_DEFINE(HAVE_GETENVIRONMENTVARIABLEA, 1)
|
|
AC_MSG_RESULT([yes])
|
|
have_getenvironmentvariablea=yes ]
|
|
)
|
|
|
|
if test x$getenv_safe != xyes && x$have_getenvironmentvariablea != xyes ; then
|
|
AC_MSG_WARN([Since getenv is not safe, you MUST add the following])
|
|
AC_MSG_WARN([code to the front of main():])
|
|
AC_MSG_WARN([[ #ifdef DMALLOC]])
|
|
AC_MSG_WARN([[ dmalloc_debug_setup(getenv("DMALLOC_OPTIONS"));]])
|
|
AC_MSG_WARN([[ #endif]])
|
|
AC_MSG_WARN([You will need to compile your program with: -DDMALLOC])
|
|
fi
|
|
|
|
############
|
|
|
|
#
|
|
# check for constructor attribute support
|
|
#
|
|
AC_MSG_CHECKING([constructor attribute])
|
|
AC_RUN_IFELSE([[
|
|
/* if we call the loc_con constructor then exit with error code 0 */
|
|
static void loc_con() __attribute__((constructor));
|
|
static void loc_con() { exit(0); }
|
|
int main() { exit(1); }
|
|
]],
|
|
[ AC_DEFINE(CONSTRUCTOR_WORKS, 1) AC_MSG_RESULT([yes]) ],
|
|
[ AC_DEFINE(CONSTRUCTOR_WORKS, 0) AC_MSG_RESULT([no]) ],
|
|
[ AC_DEFINE(CONSTRUCTOR_WORKS, 1) AC_MSG_RESULT([yes]) ]
|
|
)
|
|
|
|
#
|
|
# check for destructor attribute support
|
|
#
|
|
AC_MSG_CHECKING([destructor attribute])
|
|
AC_RUN_IFELSE([[
|
|
/* if we call the loc_decon destructor then exit with error code 0 */
|
|
static void loc_decon() __attribute__((destructor));
|
|
static void loc_decon() { exit(0); }
|
|
int main() { return 1; }
|
|
]],
|
|
[ AC_DEFINE(DESTRUCTOR_WORKS, 1)
|
|
AC_MSG_RESULT([yes])
|
|
destructor_works=yes ],
|
|
[ AC_DEFINE(DESTRUCTOR_WORKS, 0)
|
|
AC_MSG_RESULT([no])
|
|
destructor_works=no ],
|
|
[ AC_DEFINE(DESTRUCTOR_WORKS, 1)
|
|
AC_MSG_RESULT([yes])
|
|
destructor_works=yes ],
|
|
)
|
|
|
|
##############################################################################
|
|
|
|
#
|
|
# check if the return.h macros work
|
|
#
|
|
AC_MSG_CHECKING([return.h macros work])
|
|
AC_RUN_IFELSE([
|
|
|
|
#define __CONF_H__
|
|
#define USE_RETURN_MACROS 1
|
|
#define RETURN_MACROS_WORK 1
|
|
|
|
#include "return.h"
|
|
|
|
static void foo (void)
|
|
{
|
|
char *ret_addr;
|
|
GET_RET_ADDR(ret_addr);
|
|
}
|
|
|
|
main()
|
|
{
|
|
foo();
|
|
exit(0);
|
|
}
|
|
],
|
|
[ AC_DEFINE(RETURN_MACROS_WORK, 1) AC_MSG_RESULT([yes]) ],
|
|
[ AC_DEFINE(RETURN_MACROS_WORK, 0) AC_MSG_RESULT([no]) ],
|
|
[ AC_DEFINE(RETURN_MACROS_WORK, 0) AC_MSG_RESULT([no]) ]
|
|
)
|
|
|
|
##############################################################################
|
|
|
|
#
|
|
# check to see if ident workds
|
|
#
|
|
AC_MSG_CHECKING([if ident works])
|
|
AC_COMPILE_IFELSE([
|
|
#ident "$Id: //BBN_Linux/Branch/Branch_for_Rel_TP_ASEAN_20161216/tclinux_phoenix/apps/public/tools/dmalloc-5.5.2/configure.ac#1 $"
|
|
static void foo (void) { }
|
|
],
|
|
[AC_DEFINE(IDENT_WORKS, 1) AC_MSG_RESULT([yes])],
|
|
[AC_DEFINE(IDENT_WORKS, 0) AC_MSG_RESULT([no])]
|
|
)
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([pthread particulars])
|
|
|
|
XX_OLD_LIBS=$LIBS
|
|
|
|
AC_SEARCH_LIBS(pthread_mutex_init, pthread pthreads c_r)
|
|
AC_CHECK_HEADER([pthread.h],
|
|
[AC_DEFINE(HAVE_PTHREAD_H,1) AC_SUBST([HAVE_PTHREAD_H],1)],
|
|
[AC_DEFINE(HAVE_PTHREAD_H,0) AC_SUBST([HAVE_PTHREAD_H],0)])
|
|
AC_CHECK_HEADER([pthreads.h],
|
|
[AC_DEFINE(HAVE_PTHREADS_H,1) AC_SUBST([HAVE_PTHREADS_H],1)],
|
|
[AC_DEFINE(HAVE_PTHREADS_H,0) AC_SUBST([HAVE_PTHREADS_H],0)])
|
|
|
|
AC_CHECK_FUNCS(pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock)
|
|
|
|
AC_MSG_CHECKING([pthread mutex type])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#if HAVE_PTHREAD_H
|
|
# include <pthread.h>
|
|
#endif
|
|
#if HAVE_PTHREADS_H
|
|
# include <pthreads.h>
|
|
#endif
|
|
]],[[
|
|
pthread_mutex_t dmalloc_mutex;
|
|
]])],
|
|
[AC_DEFINE(THREAD_MUTEX_T,pthread_mutex_t) AC_MSG_RESULT([pthread_mutex_t])],
|
|
[AC_MSG_RESULT([unknown])]
|
|
)
|
|
|
|
AC_MSG_CHECKING([pthread attribute initialization])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#if HAVE_PTHREAD_H
|
|
# include <pthread.h>
|
|
#endif
|
|
#if HAVE_PTHREADS_H
|
|
# include <pthreads.h>
|
|
#endif
|
|
]], [[
|
|
THREAD_MUTEX_T dmalloc_mutex;
|
|
pthread_mutex_init(&dmalloc_mutex, pthread_mutexattr_default);
|
|
]])],
|
|
[AC_DEFINE(THREAD_LOCK_INIT_VAL,pthread_mutexattr_default)
|
|
AC_MSG_RESULT([pthread_mutexattr_default])],
|
|
[AC_DEFINE(THREAD_LOCK_INIT_VAL,0)
|
|
AC_MSG_RESULT([0])]
|
|
)
|
|
|
|
LIBS=$XX_OLD_LIBS
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([functions])
|
|
|
|
# auto-shutdown functions
|
|
AC_CHECK_FUNCS(atexit on_exit)
|
|
if test $ac_cv_func_atexit = no \
|
|
&& test $ac_cv_func_on_exit = no \
|
|
&& test $destructor_works = no; then
|
|
AC_MSG_WARN()
|
|
AC_MSG_WARN(The library cannot automatically shut itself down without)
|
|
AC_MSG_WARN(atexit, on_exit, or destructor support. You will need to)
|
|
AC_MSG_WARN(call dmalloc_shutdown directly before exit to get get the)
|
|
AC_MSG_WARN(final statistics and unfreed memory information.)
|
|
AC_MSG_WARN()
|
|
fi
|
|
|
|
# other bells and whistles
|
|
AC_CHECK_FUNCS(fork gethostname getpid getuid time ctime)
|
|
AC_CHECK_FUNCS(vprintf snprintf vsnprintf)
|
|
AC_CHECK_FUNCS(recalloc memalign valloc)
|
|
|
|
# required although we have code for them in compat.c
|
|
AC_CHECK_FUNCS(memcmp memcpy memmove memset)
|
|
AC_CHECK_FUNCS(strchr strrchr)
|
|
AC_CHECK_FUNCS(strlen strcmp strcpy strsep)
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([various functions for argv files])
|
|
|
|
# NOTE: some duplicated from above
|
|
AC_CHECK_FUNCS(atoi atol getenv)
|
|
AC_CHECK_FUNCS(strchr strcmp strcpy strlen strncmp strncpy strsep)
|
|
|
|
##############################################################################
|
|
AC_MSG_NOTICE([various functions for argument checking])
|
|
|
|
# NOTE: some duplicated from above
|
|
AC_CHECK_FUNCS(atoi atol)
|
|
AC_CHECK_FUNCS(bcmp bcopy bzero)
|
|
AC_CHECK_FUNCS([[index]])
|
|
AC_CHECK_FUNCS(memccpy memchr memcmp memcpy memmove memset)
|
|
AC_CHECK_FUNCS(rindex)
|
|
AC_CHECK_FUNCS(strcasecmp strcat strchr strcmp strcpy strcspn strlen)
|
|
AC_CHECK_FUNCS(strncasecmp strncat strncmp strncpy)
|
|
AC_CHECK_FUNCS(strpbrk strrchr strspn strstr strtok)
|
|
|
|
AC_CONFIG_FILES(Makefile)
|
|
|
|
AC_CONFIG_COMMANDS([dmalloc.h.2],
|
|
[
|
|
newfile=dmalloc.h.2
|
|
rm -f $newfile.t
|
|
echo '/* this is dmalloc.h.2 */' > $newfile.t
|
|
echo '/* produced by configure, inserted into dmalloc.h */' >> $newfile.t
|
|
echo '' >> $newfile.t
|
|
|
|
if test "$ac_cv_c_const" = "yes"; then
|
|
echo '/* const is available */' >> $newfile.t
|
|
else
|
|
echo '/* const is not available */' >> $newfile.t
|
|
echo '#ifndef const' >> $newfile.t
|
|
echo '#define const' >> $newfile.t
|
|
echo '#endif' >> $newfile.t
|
|
fi
|
|
|
|
if test "$ac_cv_strdup_macro" = "yes"; then
|
|
echo '/* strdup is a macro */' >> $newfile.t
|
|
echo '#define DMALLOC_STRDUP_MACRO' >> $newfile.t
|
|
else
|
|
echo '/* strdup is not a macro */' >> $newfile.t
|
|
echo '#undef DMALLOC_STRDUP_MACRO' >> $newfile.t
|
|
fi
|
|
echo '' >> $newfile.t
|
|
|
|
echo '/*' >> $newfile.t
|
|
echo ' * the definition of DMALLOC_SIZE' >> $newfile.t
|
|
echo ' *' >> $newfile.t
|
|
echo ' * NOTE: some architectures have malloc, realloc, etc.' >> $newfile.t
|
|
echo ' * using unsigned instead of unsigned long. You may' >> $newfile.t
|
|
echo ' * have to edit this by hand to fix any compilation' >> $newfile.t
|
|
echo ' * warnings or errors.' >> $newfile.t
|
|
echo ' */' >> $newfile.t
|
|
if test "$ac_cv_type_size_t" = "yes"; then
|
|
echo "#include <sys/types.h>" >> $newfile.t
|
|
echo "#define DMALLOC_SIZE size_t" >> $newfile.t
|
|
else
|
|
echo "/* no include file needed */" >> $newfile.t
|
|
echo "#define DMALLOC_SIZE unsigned long" >> $newfile.t
|
|
fi
|
|
echo '' >> $newfile.t
|
|
echo '/*' >> $newfile.t
|
|
echo ' * We use stdarg.h for the dmalloc_message and' >> $newfile.t
|
|
echo ' * dmalloc_vmessage functions.' >> $newfile.t
|
|
echo ' */' >> $newfile.t
|
|
if test "$ac_cv_header_stdarg_h" = "yes"; then
|
|
echo "#include <stdarg.h>" >> $newfile.t
|
|
echo "#define DMALLOC_STDARG 1" >> $newfile.t
|
|
else
|
|
echo "/* no stdarg.h available */" >> $newfile.t
|
|
echo "#define DMALLOC_STDARG 0" >> $newfile.t
|
|
fi
|
|
echo '' >> $newfile.t
|
|
if cmp -s $newfile $newfile.t 2>/dev/null; then
|
|
AC_MSG_NOTICE([$newfile is unchanged])
|
|
rm -f $newfile.t
|
|
else
|
|
rm -f $newfile
|
|
mv $newfile.t $newfile
|
|
fi
|
|
],
|
|
[
|
|
# initialization commands
|
|
ac_cv_c_const=$ac_cv_c_const
|
|
ac_cv_strdup_macro=$ac_cv_strdup_macro
|
|
ac_cv_type_size_t=$ac_cv_type_size_t
|
|
ac_cv_header_stdarg_h=$ac_cv_header_stdarg_h
|
|
])
|
|
|
|
AC_CONFIG_COMMANDS([settings.h],
|
|
[
|
|
newfile=settings.h
|
|
rm -f $newfile.t
|
|
echo '/*' > $newfile.t
|
|
echo ' * WARNING: this file was produced from settings.dist' >> $newfile.t
|
|
echo ' * by the configure program. The configure script, when' >> $newfile.t
|
|
echo ' * run again, will overwrite changed made here.' >> $newfile.t
|
|
echo ' */' >> $newfile.t
|
|
echo '' >> $newfile.t
|
|
cat $srcdir/settings.dist >> $newfile.t
|
|
|
|
if cmp -s $newfile.t $newfile 2>/dev/null; then
|
|
AC_MSG_NOTICE([$newfile is unchanged])
|
|
rm -f $newfile.t
|
|
else
|
|
rm -f $newfile
|
|
mv $newfile.t $newfile
|
|
fi
|
|
])
|
|
AC_OUTPUT
|
|
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([Please check-out Makefile and conf.h to make sure that])
|
|
AC_MSG_NOTICE([sane configuration values were a result.])
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([You may want to change values in settings.h before])
|
|
AC_MSG_NOTICE([running 'make'.])
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([To run the basic library tests, you can execute:])
|
|
AC_MSG_NOTICE([ make light])
|
|
AC_MSG_NOTICE([or])
|
|
AC_MSG_NOTICE([ make heavy])
|
|
AC_MSG_NOTICE([])
|