m4/as-linux.m4: don't use backported pcmcia_loop_tuple()
[comedi.git] / m4 / as-linux.m4
index 74fcb416d5b8c354df2b4f2aa8b156e0ab58737f..15b086958acd434fbff640e6131a0bf29eedf5c5 100644 (file)
@@ -100,7 +100,7 @@ AC_DEFUN([AS_LINUX],
        dnl the versioned AS_LINUX macros just use the global variables
        dnl this could be cleaned up later on if we feel like it
        case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
-               2.6)
+               2.6 | 3.[[0-9]]*)
                        AS_LINUX_2_6()
                        ;;
                2.[[01234]])
@@ -180,6 +180,10 @@ AC_DEFUN([AS_LINUX_SRC_DIR],
        if test "${LINUX_SRC_DIR}" = "default" ; then
                AC_MSG_CHECKING(for separate Linux source and build directory)
                dir=`sed -n -e 's/^KERNELSRC *:= *\(.*\)/\1/p' "$1/Makefile"`
+               if test -z "$dir"; then
+                       # 2.6.25
+                       dir=`sed -n -e 's/^MAKEARGS *:= *-C *\([[^[:space:]]]*\).*/\1/p' "$1/Makefile"`
+               fi
                if test -z "$dir"; then
                        AC_MSG_RESULT([no])
                        LINUX_SRC_DIR="$1"
@@ -236,7 +240,10 @@ dnl first argument is the Linux build directory
 AC_DEFUN([AS_LINUX_OVERRIDE_KERNEL_RELEASE],
 [
        INCDIR="$1/include"
-       UTSINC="${INCDIR}/linux/utsrelease.h"
+       UTSINC="${INCDIR}/generated/utsrelease.h"
+       if ! test -f "${UTSINC}"; then
+               UTSINC="${INCDIR}/linux/utsrelease.h"
+       fi
        if ! test -f "${UTSINC}"; then
                UTSINC="${INCDIR}/linux/version.h"
        fi
@@ -265,7 +272,7 @@ AC_DEFUN([AS_LINUX_MACHINE],
                [LINUX_MACHINE=`uname -m`])
         if test "x$LINUX_MACHINE" = "xyes";
         then
-               LINUX_MACHINE=`uname -r`
+               LINUX_MACHINE=`uname -m`
         fi
         AC_MSG_NOTICE([Using $LINUX_MACHINE as the uname -m value])
 ])
@@ -434,10 +441,10 @@ AC_DEFUN([AS_CHECK_REDHAT_PRE_FC2],
         HAVE_REDHAT_KERNEL=false
         ac_save_CFLAGS="$CFLAGS"
         CFLAGS="$CFLAGS -I${LINUX_DIR}/include/linux"
-        AC_COMPILE_IFELSE(AC_LANG_PROGRAM([
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include "rhconfig.h"
 int code = RED_HAT_LINUX_KERNEL;
-       ]),
+       ]])],
         AC_MSG_RESULT(found); HAVE_REDHAT_KERNEL=true,
         AC_MSG_RESULT(not found))
        dnl restore CFLAGS
@@ -768,7 +775,7 @@ AC_DEFUN([COMEDI_CHECK_LINUX_KBUILD],
 #
 # Check if kernel pcmcia support is new enough to have a probe member in the pcmcia_driver
 # struct.
-AC_DEFUN([COMEDI_CHECK_PCMCIA_PROBE],
+AC_DEFUN([COMEDI_CHECK_PCMCIA_DRIVER_PROBE],
 [
        AC_REQUIRE([AC_PROG_EGREP])
        AC_MSG_CHECKING([$1 for probe in pcmcia_driver struct])
@@ -782,6 +789,153 @@ AC_DEFUN([COMEDI_CHECK_PCMCIA_PROBE],
        fi
 ])
 
+# COMEDI_CHECK_PCMCIA_DRIVER_NAME([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is new enough to have a name member in the pcmcia_driver
+# struct.
+AC_DEFUN([COMEDI_CHECK_PCMCIA_DRIVER_NAME],
+[
+       AC_REQUIRE([AC_PROG_EGREP])
+       AC_MSG_CHECKING([$1 for name in pcmcia_driver struct])
+       cat "$1/include/pcmcia/ds.h" | tr \\n ' ' | [$EGREP "struct[[:space:]]+pcmcia_driver[[:space:]]*[{][^}]*name"] > /dev/null
+       if (($?)); then
+               AC_MSG_RESULT([no])
+               $3
+       else
+               AC_MSG_RESULT([yes])
+               $2
+       fi
+])
+
+# COMEDI_CHECK_PCMCIA_LOOP_TUPLE([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is new enough to have the pcmcia_loop_tuple
+# function.
+#
+# RedHat back-ported it to their 2.6.32 kernel but didn't change prototypes
+# of pcmcia_request_window() and pcmcia_map_mem_page() at the same time.
+# They kept the older mechanism using pcmcia_get_first_tuple() and
+# pcmcia_get_next_tuple(), so ignore backported pcmcia_loop_tuple() if
+# pcmcia_get_next_tuple() is defined.
+AC_DEFUN([COMEDI_CHECK_PCMCIA_LOOP_TUPLE],
+[
+       AC_MSG_CHECKING([$1 for pcmcia_loop_tuple function])
+       if [grep -q 'int[[:space:]]\+pcmcia_loop_tuple[[:space:]]*(' "$1/include/pcmcia/ds.h"] 2>/dev/null ; then
+               if [grep -q '^[[:space:]]*#[[:space:]]*define[[:space:]]\+pcmcia_get_first_tuple(' "$1/include/pcmcia/ds.h"] 2>/dev/null ; then
+                       AC_MSG_RESULT([yes but ignoring backport])
+                       $3
+               else
+                       AC_MSG_RESULT([yes])
+                       $2
+               fi
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_DS_DEV_NODE_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the dev_node_t type
+# in pcmcia/ds.h.
+AC_DEFUN([COMEDI_CHECK_DS_DEV_NODE_T],
+[
+       AC_MSG_CHECKING([$1 for dev_node_t in pcmcia/ds.h (removed in 2.6.35)])
+       if [grep -q dev_node_t "$1/include/pcmcia/ds.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_CS_IRQ_REQ_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the irq_req_t type
+# in pcmcia/cs.h.
+AC_DEFUN([COMEDI_CHECK_CS_IRQ_REQ_T],
+[
+       AC_MSG_CHECKING([$1 for irq_req_t in pcmcia/cs.h (removed in 2.6.35)])
+       if [grep -q irq_req_t "$1/include/pcmcia/cs.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_CS_IO_REQ_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the io_req_t type
+# in pcmcia/cs.h.
+AC_DEFUN([COMEDI_CHECK_CS_IO_REQ_T],
+[
+       AC_MSG_CHECKING([$1 for io_req_t in pcmcia/cs.h (removed in 2.6.36)])
+       if [grep -q io_req_t "$1/include/pcmcia/cs.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_CS_MEMREQ_T([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel pcmcia support is old enough to have the memreq_t type
+# in pcmcia/cs.h.
+AC_DEFUN([COMEDI_CHECK_CS_MEMREQ_T],
+[
+       AC_MSG_CHECKING([$1 for memreq_t in pcmcia/cs.h (removed in 2.6.36)])
+       if [grep -q memreq_t "$1/include/pcmcia/cs.h"] 2>/dev/null ; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_HAVE_CS_TYPES_H([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel has <pcmcia/cs_types.h> file.
+AC_DEFUN([COMEDI_CHECK_HAVE_CS_TYPES_H],
+[
+       AC_MSG_CHECKING([$1 for include/pcmcia/cs_types.h (removed in 2.6.36)])
+       if test -f "$1/include/pcmcia/cs_types.h"; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_HAVE_CS_H([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel has <pcmcia/cs.h> file.
+AC_DEFUN([COMEDI_CHECK_HAVE_CS_H],
+[
+       AC_MSG_CHECKING([$1 for include/pcmcia/cs.h (removed in 2.6.37)])
+       if test -f "$1/include/pcmcia/cs.h"; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
 # COMEDI_CHECK_HAVE_MUTEX_H([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
 # -------------------------------------------------------------
 #
@@ -797,3 +951,57 @@ AC_DEFUN([COMEDI_CHECK_HAVE_MUTEX_H],
                $3
        fi
 ])
+
+# COMEDI_CHECK_HAVE_LINUX_SEMAPHORE_H([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check if kernel has <linux/semaphore.h> file.
+AC_DEFUN([COMEDI_CHECK_HAVE_LINUX_SEMAPHORE_H],
+[
+       AC_MSG_CHECKING([$1 for include/linux/semaphore.h])
+       if test -f "$1/include/linux/semaphore.h"; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_HAVE_GENERIC_BOOL_TYPE([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# -------------------------------------------------------------
+# Check if kernel is new enough to have generic 'bool' type in <linux/types.h>
+# and 'false' and 'true' enum constants in <linux/stddef.h>.  This was added
+# in vanilla 2.6.19, but backported to RHEL5 2.6.18.
+AC_DEFUN([COMEDI_CHECK_HAVE_GENERIC_BOOL_TYPE],
+[
+       AC_MSG_CHECKING([$1 for 'bool' in include/linux/types.h])
+       if grep -q 'bool;' "$1/include/linux/types.h" 2>/dev/null; then
+               AC_MSG_RESULT([yes])
+               $2
+       else
+               AC_MSG_RESULT([no])
+               $3
+       fi
+])
+
+# COMEDI_CHECK_REQUEST_FIRMWARE_NOWAIT_HAS_GFP([LINUX_SOURCE_PATH], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# -------------------------------------------------------------
+# Check if the kernel's request_firmware_nowait() function has the gfp
+# parameter.  This was added in vanilla 2.6.33 but Red Hat backported it
+# to their 2.6.32 kernel.
+AC_DEFUN([COMEDI_CHECK_REQUEST_FIRMWARE_NOWAIT_HAS_GFP],
+[
+       AC_REQUIRE([AC_PROG_EGREP])
+       AC_MSG_CHECKING([$1 for gfp parameter in request_firmware_nowait()])
+       $EGREP -q gfp_t "$1/include/linux/firmware.h"
+       if (($?)); then
+               AC_MSG_RESULT([no])
+               $3
+       else
+               AC_MSG_RESULT([yes])
+               $2
+       fi
+])