Blame config/acinclude.m4

Packit df99a1
dnl Copyright (c) 2002  Leon Bottou and Yann Le Cun.
Packit df99a1
dnl Copyright (c) 2001  AT&T
Packit df99a1
dnl
Packit df99a1
dnl Most of these macros are derived from macros listed
Packit df99a1
dnl at the GNU Autoconf Macro Archive
Packit df99a1
dnl http://www.gnu.org/software/ac-archive/
Packit df99a1
dnl
Packit df99a1
dnl This program is free software; you can redistribute it and/or modify
Packit df99a1
dnl it under the terms of the GNU General Public License as published by
Packit df99a1
dnl the Free Software Foundation; either version 2 of the License, or
Packit df99a1
dnl (at your option) any later version.
Packit df99a1
dnl
Packit df99a1
dnl This program is distributed in the hope that it will be useful,
Packit df99a1
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit df99a1
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit df99a1
dnl GNU General Public License for more details.
Packit df99a1
dnl
Packit df99a1
dnl You should have received a copy of the GNU General Public License
Packit df99a1
dnl along with this program; if not, write to the Free Software
Packit df99a1
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111 USA
Packit df99a1
dnl
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CHECK_CXX_OPT(OPTION,
Packit df99a1
dnl               ACTION-IF-OKAY,ACTION-IF-NOT-OKAY)
Packit df99a1
dnl Check if compiler accepts option OPTION.
Packit df99a1
dnl Default action is to add option to CXXFLAGS.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CHECK_CXX_OPT],[
Packit df99a1
 opt="$1"
Packit df99a1
 AC_MSG_CHECKING([if $CXX accepts $opt])
Packit df99a1
 echo 'void f(){}' > conftest.cc
Packit df99a1
 if test -z "`${CXX} ${CXXFLAGS} $opt -c conftest.cc 2>&1`"; then
Packit df99a1
    AC_MSG_RESULT(yes)
Packit df99a1
    rm conftest.* 
Packit df99a1
    ifelse($2,,[CXXFLAGS="$CXXFLAGS $opt"],$2)
Packit df99a1
 else
Packit df99a1
    AC_MSG_RESULT(no)
Packit df99a1
    rm conftest.*
Packit df99a1
    ifelse($3,,:,$3)
Packit df99a1
 fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CHECK_CC_OPT(OPTION,
Packit df99a1
dnl               ACTION-IF-OKAY,ACTION-IF-NOT-OKAY)
Packit df99a1
dnl Check if compiler accepts option OPTION.
Packit df99a1
dnl Default action is to add option to CFLAGS.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CHECK_CC_OPT],[
Packit df99a1
 opt="$1"
Packit df99a1
 AC_MSG_CHECKING([if $CXX accepts $opt])
Packit df99a1
 echo 'void f(){}' > conftest.c
Packit df99a1
 if test -z "`${CC} ${CFLAGS} $opt -c conftest.c 2>&1`"; then
Packit df99a1
    AC_MSG_RESULT(yes)
Packit df99a1
    rm conftest.* 
Packit df99a1
    ifelse($2,,[CFLAGS="$CFLAGS $opt"],$2)
Packit df99a1
 else
Packit df99a1
    AC_MSG_RESULT(no)
Packit df99a1
    rm conftest.*
Packit df99a1
    ifelse($3,,:,$3)
Packit df99a1
 fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl ------------------------------------------------------
Packit df99a1
dnl @synopsis AC_REMOVE_OPTIONS(VAR,PATTERN)
Packit df99a1
dnl ------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_REMOVE_OPTIONS],[
Packit df99a1
   saved_var=${$1}
Packit df99a1
   $1=
Packit df99a1
   for opt in ${saved_var} ; do
Packit df99a1
     case "$opt" in 
Packit df99a1
      $2) ;;
Packit df99a1
      *) $1="${$1} $opt" ;;
Packit df99a1
     esac
Packit df99a1
   done
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_OPTIMIZE
Packit df99a1
dnl Setup option --enable-debug
Packit df99a1
dnl Determine optimization options
Packit df99a1
dnl Add them to CFLAGS and CXXFLAGS
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_OPTIMIZE],[
Packit df99a1
   AC_REQUIRE([AC_CANONICAL_HOST])
Packit df99a1
   AC_ARG_ENABLE(debug,
Packit df99a1
        AS_HELP_STRING([--enable-debug],
Packit df99a1
                       [Compile with debugging options (default: no)]),
Packit df99a1
        [ac_debug=$enableval],[ac_debug=no])
Packit df99a1
   defines=
Packit df99a1
   if test x$ac_debug = xno ; then
Packit df99a1
     AC_REMOVE_OPTIONS([CFLAGS],[-O*])
Packit df99a1
     AC_REMOVE_OPTIONS([CXXFLAGS],[-O*])
Packit df99a1
     if test x$GCC != xyes ; then
Packit df99a1
       AC_REMOVE_OPTIONS([CFLAGS],[-g*])
Packit df99a1
       AC_REMOVE_OPTIONS([CXXFLAGS],[-g*])
Packit df99a1
     fi
Packit df99a1
     defines="-DNDEBUG"
Packit df99a1
     AC_CHECK_CC_OPT([-O3],,[AC_CHECK_CC_OPT([-O2])])
Packit df99a1
     AC_CHECK_CXX_OPT([-O3],,[AC_CHECK_CXX_OPT([-O2])])
Packit df99a1
     cpu=`uname -m 2>/dev/null`
Packit df99a1
     test -z "$cpu" && cpu=${host_cpu}
Packit df99a1
     case "${host_cpu}" in
Packit df99a1
        i?86)
Packit df99a1
           opt="-mtune=${host_cpu}"
Packit df99a1
           AC_CHECK_CXX_OPT([-mtune=${host_cpu}],,
Packit df99a1
                [AC_CHECK_CXX_OPT([-mcpu=${host_cpu}])])
Packit df99a1
           AC_CHECK_CC_OPT([-mtune=${host_cpu}],,
Packit df99a1
                [AC_CHECK_CC_OPT([-mcpu=${host_cpu}])])
Packit df99a1
           ;;
Packit df99a1
      esac
Packit df99a1
   else
Packit df99a1
     AC_REMOVE_OPTIONS([CFLAGS],[-O*|-g*])
Packit df99a1
     AC_REMOVE_OPTIONS([CXXFLAGS],[-O*|-g*])
Packit df99a1
     AC_CHECK_CC_OPT([-g])
Packit df99a1
     AC_CHECK_CXX_OPT([-g])
Packit df99a1
     AC_CHECK_CXX_OPT([-Wno-non-virtual-dtor])
Packit df99a1
   fi
Packit df99a1
   AC_CHECK_CC_OPT([-Wall])
Packit df99a1
   AC_CHECK_CXX_OPT([-Wall])
Packit df99a1
   case x"$ac_debug" in
Packit df99a1
changequote(<<, >>)dnl
Packit df99a1
     x[0-9]) defines="-DDEBUGLVL=$ac_debug" ;;
Packit df99a1
     xr*)    defines="-DRUNTIME_DEBUG_ONLY" ;;
Packit df99a1
changequote([, ])dnl 
Packit df99a1
   esac
Packit df99a1
   CFLAGS="$CFLAGS $defines"
Packit df99a1
   CXXFLAGS="$CXXFLAGS $defines"
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_INTEL_ATOMIC_BUILTINS
Packit df99a1
dnl If the compiler supports intel atomic builtins.
Packit df99a1
dnl define HAVE_INTEL_ATOMIC_BUILTINS
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_INTEL_ATOMIC_BUILTINS],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler supports intel atomic builtins,
Packit df99a1
ac_cv_cxx_intel_atomic_builtins,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_LINK_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
static int volatile l;
Packit df99a1
  ]],
Packit df99a1
  [
Packit df99a1
__sync_lock_test_and_set(&l,1);
Packit df99a1
__sync_lock_release(&l);
Packit df99a1
__sync_add_and_fetch(&l,1);
Packit df99a1
__sync_bool_compare_and_swap(&l,&l,1);
Packit df99a1
__sync_synchronize();
Packit df99a1
return 0;
Packit df99a1
  ])],
Packit df99a1
 [ac_cv_cxx_intel_atomic_builtins=yes],
Packit df99a1
 [ac_cv_cxx_intel_atomic_builtins=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_intel_atomic_builtins" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_INTEL_ATOMIC_BUILTINS,1,
Packit df99a1
        [define if the compiler supports intel atomic builtins])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_MEMBER_TEMPLATES
Packit df99a1
dnl If the compiler supports member templates, 
Packit df99a1
dnl define HAVE_MEMBER_TEMPLATES.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_MEMBER_TEMPLATES],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler supports member templates,
Packit df99a1
ac_cv_cxx_member_templates,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
template<class T, int N> class A
Packit df99a1
{ public:
Packit df99a1
  template<int N2> A<T,N> operator=(const A<T,N2>& z) { return A<T,N>(); }
Packit df99a1
};
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
A<double,4> x; A<double,7> y;
Packit df99a1
x = y;
Packit df99a1
return 0;
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_member_templates=yes],
Packit df99a1
 [ac_cv_cxx_member_templates=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_member_templates" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_MEMBER_TEMPLATES,1,
Packit df99a1
        [define if the compiler supports member templates])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_NAMESPACES
Packit df99a1
dnl Define HAVE_NAMESPACES if the compiler supports
Packit df99a1
dnl namespaces.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_NAMESPACES],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler implements namespaces,
Packit df99a1
ac_cv_cxx_namespaces,
Packit df99a1
[ AC_LANG_PUSH([C++])
Packit df99a1
  AC_COMPILE_IFELSE(
Packit df99a1
  [AC_LANG_PROGRAM(
Packit df99a1
   [[
Packit df99a1
namespace Outer { namespace Inner { int i = 0; }}
Packit df99a1
   ]],
Packit df99a1
   [[
Packit df99a1
using namespace Outer::Inner;
Packit df99a1
return i;
Packit df99a1
   ]])],
Packit df99a1
  [ac_cv_cxx_namespaces=yes],
Packit df99a1
  [ac_cv_cxx_namespaces=no])
Packit df99a1
  AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_namespaces" = yes && test "$ac_debug" = no; then
Packit df99a1
  AC_DEFINE(HAVE_NAMESPACES,1,
Packit df99a1
             [define if the compiler implements namespaces])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_TYPENAME
Packit df99a1
dnl Define HAVE_TYPENAME if the compiler recognizes 
Packit df99a1
dnl keyword typename.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_TYPENAME],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler recognizes typename,
Packit df99a1
ac_cv_cxx_typename,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
template<typename T>class X {public:X(){}};
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
X<float> z;
Packit df99a1
return 0;
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_typename=yes],
Packit df99a1
 [ac_cv_cxx_typename=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_typename" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_TYPENAME,1,[define if the compiler recognizes typename])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_STDINCLUDES
Packit df99a1
dnl Define HAVE_STDINCLUDES if the compiler has the
Packit df99a1
dnl new style include files (without the .h)
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_STDINCLUDES],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler comes with standard includes,
Packit df99a1
ac_cv_cxx_stdincludes,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
#include <new>
Packit df99a1
struct X { int a; X(int a):a(a){} };
Packit df99a1
X* foo(void *x) { return new(x) X(2); }
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_stdincludes=yes],
Packit df99a1
 [ac_cv_cxx_stdincludes=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_stdincludes" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_STDINCLUDES,1,
Packit df99a1
    [define if the compiler comes with standard includes])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_BOOL
Packit df99a1
dnl If the compiler recognizes bool as a separate built-in type,
Packit df99a1
dnl define HAVE_BOOL. Note that a typedef is not a separate
Packit df99a1
dnl type since you cannot overload a function such that it 
Packit df99a1
dnl accepts either the basic type or the typedef.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_BOOL],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler recognizes bool as a built-in type,
Packit df99a1
ac_cv_cxx_bool,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
int f(int  x){return 1;}
Packit df99a1
int f(char x){return 1;}
Packit df99a1
int f(bool x){return 1;}
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
bool b = true;
Packit df99a1
return f(b);
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_bool=yes],
Packit df99a1
 [ac_cv_cxx_bool=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_bool" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_BOOL,1,[define if bool is a built-in type])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_EXCEPTIONS
Packit df99a1
dnl If the C++ compiler supports exceptions handling (try,
Packit df99a1
dnl throw and catch), define HAVE_EXCEPTIONS.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_EXCEPTIONS],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler supports exceptions,
Packit df99a1
ac_cv_cxx_exceptions,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
try { throw  1; } catch (int i) { return i; }
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_exceptions=yes],
Packit df99a1
 [ac_cv_cxx_exceptions=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_exceptions" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_EXCEPTIONS,1,[define if the compiler supports exceptions])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
dnl @synopsis AC_CXX_GCCTLS
Packit df99a1
dnl Define HAVE_GCCTLS if the compiler recognizes 
Packit df99a1
dnl keyword __thread for TLS variables.
Packit df99a1
dnl -------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_CXX_GCCTLS],
Packit df99a1
[AC_CACHE_CHECK(whether the compiler supports keyword __thread,
Packit df99a1
ac_cv_cxx_gcctls,
Packit df99a1
[AC_LANG_PUSH([C++])
Packit df99a1
 AC_COMPILE_IFELSE(
Packit df99a1
 [AC_LANG_PROGRAM(
Packit df99a1
  [[
Packit df99a1
__thread int i;
Packit df99a1
  ]],
Packit df99a1
  [[
Packit df99a1
return i;
Packit df99a1
  ]])],
Packit df99a1
 [ac_cv_cxx_gcctls=yes],
Packit df99a1
 [ac_cv_cxx_gcctls=no])
Packit df99a1
 AC_LANG_POP([C++])
Packit df99a1
])
Packit df99a1
if test "$ac_cv_cxx_gcctls" = yes; then
Packit df99a1
  AC_DEFINE(HAVE_GCCTLS,1,[define if the compiler supports keyword __thread])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
dnl @synopsis AC_PATH_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
Packit df99a1
dnl This macro figures out how to build C programs using POSIX
Packit df99a1
dnl threads.  It sets the PTHREAD_LIBS output variable to the threads
Packit df99a1
dnl library and linker flags, and the PTHREAD_CFLAGS output variable
Packit df99a1
dnl to any special C compiler flags that are needed.  (The user can also
Packit df99a1
dnl force certain compiler flags/libs to be tested by setting these
Packit df99a1
dnl environment variables.).  
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
AC_DEFUN([AC_PATH_PTHREAD], [
Packit df99a1
AC_REQUIRE([AC_CANONICAL_HOST])
Packit df99a1
acx_pthread_ok=no
Packit df99a1
# First, check if the POSIX threads header, pthread.h, is available.
Packit df99a1
# If it isn't, don't bother looking for the threads libraries.
Packit df99a1
AC_CHECK_HEADER(pthread.h, , acx_pthread_ok=noheader)
Packit df99a1
# We must check for the threads library under a number of different
Packit df99a1
# names; the ordering is very important because some systems
Packit df99a1
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
Packit df99a1
# libraries is broken (non-POSIX).
Packit df99a1
# First of all, check if the user has set any of the PTHREAD_LIBS,
Packit df99a1
# etcetera environment variables, and if threads linking works.
Packit df99a1
if test x${PTHREAD_LIBS+set} = xset ||
Packit df99a1
   test x${PTHREAD_CFLAGS+set} = xset ; then
Packit df99a1
        save_CFLAGS="$CFLAGS"
Packit df99a1
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        save_CXXFLAGS="$CXXFLAGS"
Packit df99a1
        CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        save_LIBS="$LIBS"
Packit df99a1
        LIBS="$PTHREAD_LIBS $LIBS"
Packit df99a1
        AC_MSG_CHECKING([provided PTHREAD_LIBS/PTHREAD_CFLAGS.])
Packit df99a1
        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
Packit df99a1
        AC_MSG_RESULT($acx_pthread_ok)
Packit df99a1
        if test x"$acx_pthread_ok" = xno; then
Packit df99a1
                PTHREAD_LIBS=""
Packit df99a1
                PTHREAD_CFLAGS=""
Packit df99a1
        fi
Packit df99a1
        LIBS="$save_LIBS"
Packit df99a1
        CFLAGS="$save_CFLAGS"
Packit df99a1
        CXXFLAGS="$save_CXXFLAGS"
Packit df99a1
fi
Packit df99a1
# Create a list of thread flags to try.  Items starting with a "-" are
Packit df99a1
# C compiler flags, and other items are library names, except for "none"
Packit df99a1
# which indicates that we try without any flags at all. Also, combinations
Packit df99a1
# of items (for instance, both a compiler flag and a library name) can be 
Packit df99a1
# specified using a colon separator.
Packit df99a1
acx_pthread_flags="pthreads none -Kthread -kthread lthread 
Packit df99a1
                   -pthread -pthreads -mt -mthreads pthread
Packit df99a1
                   --thread-safe"
Packit df99a1
# The ordering *is* (sometimes) important.  
Packit df99a1
# Some notes on the individual items follow:
Packit df99a1
# pthreads: AIX (must check this before -lpthread)
Packit df99a1
# none: in case threads are in libc; should be tried before -Kthread and
Packit df99a1
#       other compiler flags to prevent continual compiler warnings
Packit df99a1
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
Packit df99a1
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
Packit df99a1
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
Packit df99a1
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
Packit df99a1
# -pthreads: Solaris/gcc
Packit df99a1
# -mt: HP aCC (check before -mthreads)
Packit df99a1
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
Packit df99a1
#      doesn't hurt to check since this sometimes defines pthreads too;
Packit df99a1
#      also defines -D_REENTRANT)
Packit df99a1
# -mthreads: Mingw32/gcc, Lynx/gcc
Packit df99a1
# pthread: Linux, etcetera
Packit df99a1
# --thread-safe: KAI C++
Packit df99a1
case "${host_cpu}-${host_os}" in
Packit df99a1
        *solaris*)
Packit df99a1
        # On Solaris (at least, for some versions), libc contains stubbed
Packit df99a1
        # (non-functional) versions of the pthreads routines, so link-based
Packit df99a1
        # tests will erroneously succeed.  (We need to link with -pthread or
Packit df99a1
        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
Packit df99a1
        # a function called by this macro, so we could check for that, but
Packit df99a1
        # who knows whether they'll stub that too in a future libc.)  So,
Packit df99a1
        # we'll just look for -pthreads and -lpthread first:
Packit df99a1
        acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags"
Packit df99a1
        ;;
Packit df99a1
esac
Packit df99a1
case "${host_os}-${GCC}" in
Packit df99a1
        *linux*-yes | *kfreebsd*-yes )
Packit df99a1
        # On Linux/GCC, libtool uses -nostdlib for linking, which cancel part
Packit df99a1
        # of the -pthread flag effect (libpthread is not automatically linked).
Packit df99a1
        # So we'll try to link with both -pthread and -lpthread first:
Packit df99a1
        acx_pthread_flags="-pthread:pthread $acx_pthread_flags"
Packit df99a1
        ;;
Packit df99a1
esac
Packit df99a1
if test x"$acx_pthread_ok" = xno; then
Packit df99a1
for flag in $acx_pthread_flags; do
Packit df99a1
        case $flag in
Packit df99a1
                none)
Packit df99a1
                AC_MSG_CHECKING([whether pthreads work without any flags])
Packit df99a1
                ;;
Packit df99a1
                *:*)
Packit df99a1
                PTHREAD_CFLAGS=""
Packit df99a1
                PTHREAD_LIBS=""
Packit df99a1
                message="whether pthreads work with"
Packit df99a1
                while test x"$flag" != x; do
Packit df99a1
                        subflag=`echo $flag | cut -d: -f1`
Packit df99a1
                        case $subflag in
Packit df99a1
                                -*)
Packit df99a1
                                PTHREAD_CFLAGS="$PTHREAD_CFLAGS $subflag"
Packit df99a1
                                message="$message $subflag"
Packit df99a1
                                ;;
Packit df99a1
                                *)
Packit df99a1
                                PTHREAD_LIBS="$PTHREAD_LIBS -l$subflag"
Packit df99a1
                                message="$message -l$subflag"
Packit df99a1
                                ;;
Packit df99a1
                        esac
Packit df99a1
                        flag=`echo $flag | cut -s -d: -f2-`
Packit df99a1
                done
Packit df99a1
                AC_MSG_CHECKING([$message])
Packit df99a1
                ;;
Packit df99a1
                -*)
Packit df99a1
                AC_MSG_CHECKING([whether pthreads work with $flag])
Packit df99a1
                PTHREAD_CFLAGS="$flag"
Packit df99a1
                ;;
Packit df99a1
                *)
Packit df99a1
                AC_MSG_CHECKING([for the pthreads library -l$flag])
Packit df99a1
                PTHREAD_LIBS="-l$flag"
Packit df99a1
                ;;
Packit df99a1
        esac
Packit df99a1
        save_LIBS="$LIBS"
Packit df99a1
        save_CFLAGS="$CFLAGS"
Packit df99a1
        save_CXXFLAGS="$CXXFLAGS"
Packit df99a1
        LIBS="$PTHREAD_LIBS $LIBS"
Packit df99a1
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        # Check for various functions.  We must include pthread.h,
Packit df99a1
        # since some functions may be macros.  (On the Sequent, we
Packit df99a1
        # need a special flag -Kthread to make this header compile.)
Packit df99a1
        # We check for pthread_join because it is in -lpthread on IRIX
Packit df99a1
        # while pthread_create is in libc.  We check for pthread_attr_init
Packit df99a1
        # due to DEC craziness with -lpthreads.  We check for
Packit df99a1
        # pthread_cleanup_push because it is one of the few pthread
Packit df99a1
        # functions on Solaris that doesn't have a non-functional libc stub.
Packit df99a1
        # We try pthread_create on general principles.
Packit df99a1
        AC_LINK_IFELSE(
Packit df99a1
        [AC_LANG_PROGRAM(
Packit df99a1
         [[
Packit df99a1
#include <pthread.h>
Packit df99a1
         ]],
Packit df99a1
         [
Packit df99a1
pthread_t th; pthread_join(th, 0);
Packit df99a1
pthread_attr_init(0); pthread_cleanup_push(0, 0);
Packit df99a1
pthread_create(0,0,0,0); pthread_cleanup_pop(0);
Packit df99a1
         ])],
Packit df99a1
         [acx_pthread_ok=yes],
Packit df99a1
         [acx_pthread_ok=no])
Packit df99a1
        LIBS="$save_LIBS"
Packit df99a1
        CFLAGS="$save_CFLAGS"
Packit df99a1
        CXXFLAGS="$save_CXXFLAGS"
Packit df99a1
        AC_MSG_RESULT($acx_pthread_ok)
Packit df99a1
        if test "x$acx_pthread_ok" = xyes; then
Packit df99a1
                break;
Packit df99a1
        fi
Packit df99a1
        PTHREAD_LIBS=""
Packit df99a1
        PTHREAD_CFLAGS=""
Packit df99a1
done
Packit df99a1
fi
Packit df99a1
# Various other checks:
Packit df99a1
if test "x$acx_pthread_ok" = xyes; then
Packit df99a1
        save_LIBS="$LIBS"
Packit df99a1
        LIBS="$PTHREAD_LIBS $LIBS"
Packit df99a1
        save_CFLAGS="$CFLAGS"
Packit df99a1
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        save_CXXFLAGS="$CXXFLAGS"
Packit df99a1
        CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
Packit df99a1
        AC_MSG_CHECKING([if more special flags are required for pthreads])
Packit df99a1
        flag=no
Packit df99a1
        case "${host_cpu}-${host_os}" in
Packit df99a1
                *-aix* | *-freebsd*)     flag="-D_THREAD_SAFE";;
Packit df99a1
                *solaris* | alpha*-osf*) flag="-D_REENTRANT";;
Packit df99a1
        esac
Packit df99a1
        AC_MSG_RESULT(${flag})
Packit df99a1
        if test "x$flag" != xno; then
Packit df99a1
                PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
Packit df99a1
        fi
Packit df99a1
        LIBS="$save_LIBS"
Packit df99a1
        CFLAGS="$save_CFLAGS"
Packit df99a1
        CXXFLAGS="$save_CXXFLAGS"
Packit df99a1
fi
Packit df99a1
AC_ARG_VAR(PTHREAD_LIBS, [Flags for linking pthread programs.])
Packit df99a1
AC_ARG_VAR(PTHREAD_CFLAGS, [Flags for compiling pthread programs.])
Packit df99a1
# execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
Packit df99a1
if test x"$acx_pthread_ok" = xyes; then
Packit df99a1
        AC_DEFINE(HAVE_PTHREAD,1,[Define if pthreads are available])
Packit df99a1
        ifelse([$1],,:,[$1])
Packit df99a1
else
Packit df99a1
        ifelse([$2],,:,[$2])
Packit df99a1
fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
dnl @synopsis AC_PATH_JPEG([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
Packit df99a1
dnl Process option --with-jpeg.
Packit df99a1
dnl Search JPEG. Define HAVE_JPEG.
Packit df99a1
dnl Set output variable JPEG_CFLAGS and JPEG_LIBS
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
Packit df99a1
AC_DEFUN([AC_PATH_JPEG],
Packit df99a1
[
Packit df99a1
  AC_ARG_VAR(JPEG_LIBS)
Packit df99a1
  AC_ARG_VAR(JPEG_CFLAGS)
Packit df99a1
  ac_jpeg=no
Packit df99a1
  AC_ARG_WITH(jpeg,
Packit df99a1
     AS_HELP_STRING([--with-jpeg=DIR],
Packit df99a1
                    [where the IJG jpeg library is located]),
Packit df99a1
     [ac_jpeg=$withval], [ac_jpeg=yes] )
Packit df99a1
  # Process specification
Packit df99a1
  if test x$ac_jpeg = xyes ; then
Packit df99a1
     test x${JPEG_LIBS+set} != xset && JPEG_LIBS="-ljpeg"
Packit df99a1
  elif test x$ac_jpeg != xno ; then
Packit df99a1
     test x${JPEG_LIBS+set} != xset && JPEG_LIBS="-L$ac_jpeg/lib -ljpeg"
Packit df99a1
     test x${JPEG_CFLAGS+set} != xset && JPEG_CFLAGS="-I$ac_jpeg/include"
Packit df99a1
  fi
Packit df99a1
  # Try linking
Packit df99a1
  if test x$ac_jpeg != xno ; then
Packit df99a1
     AC_MSG_CHECKING([for jpeg library])
Packit df99a1
     save_CFLAGS="$CFLAGS"
Packit df99a1
     save_CXXFLAGS="$CXXFLAGS"
Packit df99a1
     save_LIBS="$LIBS"
Packit df99a1
     CFLAGS="$CFLAGS $JPEG_CFLAGS"
Packit df99a1
     CXXFLAGS="$CXXFLAGS $JPEG_CFLAGS"
Packit df99a1
     LIBS="$LIBS $JPEG_LIBS"
Packit df99a1
     AC_LINK_IFELSE(
Packit df99a1
     [AC_LANG_PROGRAM(
Packit df99a1
      [[
Packit df99a1
#ifdef __cplusplus
Packit df99a1
extern "C" {
Packit df99a1
#endif
Packit df99a1
#include <stdio.h>
Packit df99a1
#include <jpeglib.h>
Packit df99a1
#ifdef __cplusplus
Packit df99a1
}
Packit df99a1
#endif
Packit df99a1
      ]],
Packit df99a1
      [
Packit df99a1
jpeg_CreateDecompress(0,0,0);
Packit df99a1
      ])],
Packit df99a1
      [ac_jpeg=yes],
Packit df99a1
      [ac_jpeg=no])
Packit df99a1
     CFLAGS="$save_CFLAGS"
Packit df99a1
     CXXFLAGS="$save_CXXFLAGS"
Packit df99a1
     LIBS="$save_LIBS"
Packit df99a1
     AC_MSG_RESULT($ac_jpeg)
Packit df99a1
   fi
Packit df99a1
   # Finish
Packit df99a1
   if test x$ac_jpeg = xno; then
Packit df99a1
      JPEG_CFLAGS= ; JPEG_LIBS=
Packit df99a1
      ifelse([$2],,:,[$2])
Packit df99a1
   else
Packit df99a1
      AC_DEFINE(HAVE_JPEG,1,[Define if you have the IJG JPEG library.])
Packit df99a1
      dnl AC_MSG_RESULT([setting JPEG_CFLAGS=$JPEG_CFLAGS])
Packit df99a1
      dnl AC_MSG_RESULT([setting JPEG_LIBS=$JPEG_LIBS])
Packit df99a1
      ifelse([$1],,:,[$1])
Packit df99a1
   fi
Packit df99a1
])
Packit df99a1
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
dnl @synopsis AC_PATH_TIFF([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
Packit df99a1
dnl Process option --with-tiff
Packit df99a1
dnl Search LIBTIFF. Define HAVE_TIFF.
Packit df99a1
dnl Set output variable TIFF_CFLAGS and TIFF_LIBS
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
Packit df99a1
AC_DEFUN([AC_PATH_TIFF],
Packit df99a1
[
Packit df99a1
  AC_ARG_VAR(TIFF_LIBS)
Packit df99a1
  AC_ARG_VAR(TIFF_CFLAGS)
Packit df99a1
  ac_tiff=no
Packit df99a1
  AC_ARG_WITH(tiff,
Packit df99a1
     AS_HELP_STRING([--with-tiff=DIR],
Packit df99a1
                    [where libtiff is located]),
Packit df99a1
     [ac_tiff=$withval], [ac_tiff=yes] )
Packit df99a1
  # Process specification
Packit df99a1
  if test x$ac_tiff = xyes ; then
Packit df99a1
     test x${TIFF_LIBS+set} != xset && TIFF_LIBS="-ltiff"
Packit df99a1
  elif test x$ac_tiff != xno ; then
Packit df99a1
     test x${TIFF_LIBS+set} != xset && TIFF_LIBS="-L$ac_tiff/lib -ltiff"
Packit df99a1
     test x${TIFF_CFLAGS+set} != xset && TIFF_CFLAGS="-I$ac_tiff/include"
Packit df99a1
  fi
Packit df99a1
  # Try linking
Packit df99a1
  if test x$ac_tiff != xno ; then
Packit df99a1
     AC_MSG_CHECKING([for the libtiff library])
Packit df99a1
     save_CFLAGS="$CFLAGS"
Packit df99a1
     save_CXXFLAGS="$CXXFLAGS"
Packit df99a1
     save_LIBS="$LIBS"
Packit df99a1
     CFLAGS="$CFLAGS $TIFF_CFLAGS"
Packit df99a1
     CXXFLAGS="$CXXFLAGS $TIFF_CFLAGS"
Packit df99a1
     LIBS="$LIBS $TIFF_LIBS"
Packit df99a1
     AC_LINK_IFELSE(
Packit df99a1
     [AC_LANG_PROGRAM(
Packit df99a1
      [[
Packit df99a1
#ifdef __cplusplus
Packit df99a1
extern "C" {
Packit df99a1
#endif
Packit df99a1
#include <stdio.h>
Packit df99a1
#include <tiffio.h>
Packit df99a1
#ifdef __cplusplus
Packit df99a1
}
Packit df99a1
#endif
Packit df99a1
      ]],
Packit df99a1
      [
Packit df99a1
TIFFOpen(0,0);
Packit df99a1
      ])],
Packit df99a1
      [ac_tiff=yes],
Packit df99a1
      [ac_tiff=no])
Packit df99a1
     CFLAGS="$save_CFLAGS"
Packit df99a1
     CXXFLAGS="$save_CXXFLAGS"
Packit df99a1
     LIBS="$save_LIBS"
Packit df99a1
     AC_MSG_RESULT($ac_tiff)
Packit df99a1
   fi
Packit df99a1
   # Finish
Packit df99a1
   if test x$ac_tiff = xno; then
Packit df99a1
      TIFF_CFLAGS= ; TIFF_LIBS=
Packit df99a1
      ifelse([$2],,:,[$2])
Packit df99a1
   else
Packit df99a1
      AC_DEFINE(HAVE_TIFF,1,[Define if you have libtiff.])
Packit df99a1
      dnl AC_MSG_RESULT([setting TIFF_CFLAGS=$TIFF_CFLAGS])
Packit df99a1
      dnl AC_MSG_RESULT([setting TIFF_LIBS=$TIFF_LIBS])
Packit df99a1
      ifelse([$1],,:,[$1])
Packit df99a1
   fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
dnl @synopsis AC_PROG_PKG_CONFIG([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
Packit df99a1
dnl Sets output variables PKG_CONFIG
Packit df99a1
dnl ------------------------------------------------------------------
Packit df99a1
Packit df99a1
Packit df99a1
AC_DEFUN([AC_PROG_PKG_CONFIG], 
Packit df99a1
[
Packit df99a1
  AC_ARG_VAR(PKG_CONFIG,[Location of the pkg-config program.])
Packit df99a1
  AC_ARG_VAR(PKG_CONFIG_PATH, [Path for pkg-config descriptors.])
Packit df99a1
  AC_PATH_PROG(PKG_CONFIG, pkg-config)
Packit df99a1
  if test -z "$PKG_CONFIG" ; then
Packit df99a1
      ifelse([$2],,:,[$2])
Packit df99a1
  else
Packit df99a1
      ifelse([$1],,:,[$1])
Packit df99a1
  fi
Packit df99a1
])
Packit df99a1
Packit df99a1
Packit df99a1
Packit df99a1
Packit df99a1