Re: make check fails: modules/ioctl uses AC_CHECK_FUNCS

2010-04-19 Thread Bruno Haible
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  

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 .

= 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 ]],
[[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 ]],
-  [[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:




make check fails: modules/ioctl uses AC_CHECK_FUNCS

2010-04-19 Thread Ian Beckwith
Hi,

'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

Ian.

-- 
Ian Beckwith - i...@erislabs.net - http://erislabs.net/ianb/
GPG fingerprint: AF6C C0F1 1E74 424B BCD5  4814 40EC C154 A8BA C1EA
Listening to: Death in Vegas - The Contino Sessions - Flying


signature.asc
Description: Digital signature