bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: make check fails: modules/ioctl uses AC_CHECK_FUNCS


From: Bruno Haible
Subject: Re: make check fails: modules/ioctl uses AC_CHECK_FUNCS
Date: Mon, 19 Apr 2010 22:27:27 +0200
User-agent: KMail/1.9.9

Hi,

Ian Beckwith wrote:
> 'make check' fails because modules/ioctl uses AC_CHECK_FUNCS:
> 
> $ make check
> git grep -w -l AC_CHECK_FUNCS modules && \
>       { echo use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS in modules/
>       1>&2; \
>                       exit 1; } || :
>               modules/ioctl
>               use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS in modules/
>               make: *** [sc_prefer_ac_check_funcs_once] Error 1

When we introduced this check, Jim Meyering said [1]:
  "if there's enough logic, then you can argue it belongs in a .m4 file
   and not in the module file's configure.ac section."
[1] http://lists.gnu.org/archive/html/bug-gnulib/2009-10/msg00147.html

This fixes the error:


2010-04-19  Bruno Haible  <address@hidden>

        ioctl: Move autoconf macro to a .m4 file.
        * m4/ioctl.m4: New file, extracted from modules/ioctl.
        * modules/ioctl (Files): Add it.
        (configure.ac): Simply invoke gl_FUNC_IOCTL.
        Reported by Ian Beckwith <address@hidden>.

================================= m4/ioctl.m4 =================================
# ioctl.m4 serial 1
dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

AC_DEFUN([gl_FUNC_IOCTL],
[
  AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])
  AC_REQUIRE([gl_HEADER_SYS_SOCKET])
  if test "$ac_cv_header_winsock2_h" = yes; then
    dnl Even if the 'socket' module is not used here, another part of the
    dnl application may use it and pass file descriptors that refer to
    dnl sockets to the ioctl() function. So enable the support for sockets.
    AC_LIBOBJ([ioctl])
    gl_REPLACE_SYS_IOCTL_H
  else
    AC_CHECK_FUNCS([ioctl])
    dnl On glibc systems, the second parameter is 'unsigned long int request',
    dnl not 'int request'. We cannot simply cast the function pointer, but
    dnl instead need a wrapper.
    AC_CACHE_CHECK([for ioctl with POSIX signature],
      [gl_cv_func_ioctl_posix_signature],
      [AC_COMPILE_IFELSE(
         [AC_LANG_PROGRAM(
            [[#include <sys/ioctl.h>]],
            [[extern int ioctl (int, int, ...);]])
         ],
         [gl_cv_func_ioctl_posix_signature=yes],
         [gl_cv_func_ioctl_posix_signature=no])
      ])
    if test $gl_cv_func_ioctl_posix_signature != yes; then
      REPLACE_IOCTL=1
      AC_LIBOBJ([ioctl])
      gl_REPLACE_SYS_IOCTL_H
    fi
  fi
])
===============================================================================
--- modules/ioctl.orig  Mon Apr 19 22:23:25 2010
+++ modules/ioctl       Mon Apr 19 22:07:11 2010
@@ -4,6 +4,7 @@
 Files:
 lib/ioctl.c
 lib/w32sock.h
+m4/ioctl.m4
 
 Depends-on:
 sys_ioctl
@@ -11,35 +12,7 @@
 errno
 
 configure.ac:
-AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])
-AC_REQUIRE([gl_HEADER_SYS_SOCKET])
-if test "$ac_cv_header_winsock2_h" = yes; then
-  dnl Even if the 'socket' module is not used here, another part of the
-  dnl application may use it and pass file descriptors that refer to
-  dnl sockets to the ioctl() function. So enable the support for sockets.
-  AC_LIBOBJ([ioctl])
-  gl_REPLACE_SYS_IOCTL_H
-else
-  AC_CHECK_FUNCS([ioctl])
-  dnl On glibc systems, the second parameter is 'unsigned long int request',
-  dnl not 'int request'. We cannot simply cast the function pointer, but
-  dnl instead need a wrapper.
-  AC_CACHE_CHECK([for ioctl with POSIX signature],
-    [gl_cv_func_ioctl_posix_signature],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/ioctl.h>]],
-          [[extern int ioctl (int, int, ...);]])
-       ],
-       [gl_cv_func_ioctl_posix_signature=yes],
-       [gl_cv_func_ioctl_posix_signature=no])
-    ])
-  if test $gl_cv_func_ioctl_posix_signature != yes; then
-    REPLACE_IOCTL=1
-    AC_LIBOBJ([ioctl])
-    gl_REPLACE_SYS_IOCTL_H
-  fi
-fi
+gl_FUNC_IOCTL
 gl_SYS_IOCTL_MODULE_INDICATOR([ioctl])
 
 Makefile.am:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]