mirror of
https://github.com/nmap/nmap.git
synced 2025-12-16 12:49:02 +00:00
Use a more sophisticated configure check for epoll.
This is from the GNU Autoconf archive. http://www.gnu.org/software/autoconf-archive/ax_have_epoll.html http://seclists.org/nmap-dev/2012/q3/598 http://seclists.org/nmap-dev/2012/q3/657
This commit is contained in:
104
nsock/src/acinclude.m4
Normal file
104
nsock/src/acinclude.m4
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# http://www.gnu.org/software/autoconf-archive/ax_have_epoll.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_HAVE_EPOLL([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
# AX_HAVE_EPOLL_PWAIT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro determines whether the system supports the epoll I/O event
|
||||||
|
# interface. A neat usage example would be:
|
||||||
|
#
|
||||||
|
# AX_HAVE_EPOLL(
|
||||||
|
# [AX_CONFIG_FEATURE_ENABLE(epoll)],
|
||||||
|
# [AX_CONFIG_FEATURE_DISABLE(epoll)])
|
||||||
|
# AX_CONFIG_FEATURE(
|
||||||
|
# [epoll], [This platform supports epoll(7)],
|
||||||
|
# [HAVE_EPOLL], [This platform supports epoll(7).])
|
||||||
|
#
|
||||||
|
# The epoll interface was added to the Linux kernel in version 2.5.45, and
|
||||||
|
# the macro verifies that a kernel newer than this is installed. This
|
||||||
|
# check is somewhat unreliable if <linux/version.h> doesn't match the
|
||||||
|
# running kernel, but it is necessary regardless, because glibc comes with
|
||||||
|
# stubs for the epoll_create(), epoll_wait(), etc. that allow programs to
|
||||||
|
# compile and link even if the kernel is too old; the problem would then
|
||||||
|
# be detected only at runtime.
|
||||||
|
#
|
||||||
|
# Linux kernel version 2.6.19 adds the epoll_pwait() call in addition to
|
||||||
|
# epoll_wait(). The availability of that function can be tested with the
|
||||||
|
# second macro. Generally speaking, it is safe to assume that
|
||||||
|
# AX_HAVE_EPOLL would succeed if AX_HAVE_EPOLL_PWAIT has, but not the
|
||||||
|
# other way round.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Peter Simons <simons@cryp.to>
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
|
# warranty.
|
||||||
|
|
||||||
|
#serial 10
|
||||||
|
|
||||||
|
AC_DEFUN([AX_HAVE_EPOLL], [dnl
|
||||||
|
ax_have_epoll_cppflags="${CPPFLAGS}"
|
||||||
|
AC_CHECK_HEADER([linux/version.h], [CPPFLAGS="${CPPFLAGS} -DHAVE_LINUX_VERSION_H"])
|
||||||
|
AC_MSG_CHECKING([for Linux epoll(7) interface])
|
||||||
|
AC_CACHE_VAL([ax_cv_have_epoll], [dnl
|
||||||
|
AC_LINK_IFELSE([dnl
|
||||||
|
AC_LANG_PROGRAM([dnl
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#ifdef HAVE_LINUX_VERSION_H
|
||||||
|
# include <linux/version.h>
|
||||||
|
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,45)
|
||||||
|
# error linux kernel version is too old to have epoll
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
], [dnl
|
||||||
|
int fd, rc;
|
||||||
|
struct epoll_event ev;
|
||||||
|
fd = epoll_create(128);
|
||||||
|
rc = epoll_wait(fd, &ev, 1, 0);])],
|
||||||
|
[ax_cv_have_epoll=yes],
|
||||||
|
[ax_cv_have_epoll=no])])
|
||||||
|
CPPFLAGS="${ax_have_epoll_cppflags}"
|
||||||
|
AS_IF([test "${ax_cv_have_epoll}" = "yes"],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
$1],[AC_MSG_RESULT([no])
|
||||||
|
$2])
|
||||||
|
])dnl
|
||||||
|
|
||||||
|
AC_DEFUN([AX_HAVE_EPOLL_PWAIT], [dnl
|
||||||
|
ax_have_epoll_cppflags="${CPPFLAGS}"
|
||||||
|
AC_CHECK_HEADER([linux/version.h],
|
||||||
|
[CPPFLAGS="${CPPFLAGS} -DHAVE_LINUX_VERSION_H"])
|
||||||
|
AC_MSG_CHECKING([for Linux epoll(7) interface with signals extension])
|
||||||
|
AC_CACHE_VAL([ax_cv_have_epoll_pwait], [dnl
|
||||||
|
AC_LINK_IFELSE([dnl
|
||||||
|
AC_LANG_PROGRAM([dnl
|
||||||
|
#ifdef HAVE_LINUX_VERSION_H
|
||||||
|
# include <linux/version.h>
|
||||||
|
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
|
||||||
|
# error linux kernel version is too old to have epoll_pwait
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#include <signal.h>
|
||||||
|
], [dnl
|
||||||
|
int fd, rc;
|
||||||
|
struct epoll_event ev;
|
||||||
|
fd = epoll_create(128);
|
||||||
|
rc = epoll_wait(fd, &ev, 1, 0);
|
||||||
|
rc = epoll_pwait(fd, &ev, 1, 0, (sigset_t const *)(0));])],
|
||||||
|
[ax_cv_have_epoll_pwait=yes],
|
||||||
|
[ax_cv_have_epoll_pwait=no])])
|
||||||
|
CPPFLAGS="${ax_have_epoll_cppflags}"
|
||||||
|
AS_IF([test "${ax_cv_have_epoll_pwait}" = "yes"],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
$1],[AC_MSG_RESULT([no])
|
||||||
|
$2])
|
||||||
|
])dnl
|
||||||
208
nsock/src/aclocal.m4
vendored
208
nsock/src/aclocal.m4
vendored
@@ -10,118 +10,108 @@ dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|||||||
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
dnl PARTICULAR PURPOSE.
|
dnl PARTICULAR PURPOSE.
|
||||||
|
|
||||||
# Do all the work for Automake. This macro actually does too much --
|
# ===========================================================================
|
||||||
# some checks are only needed if your package does certain things.
|
# http://www.gnu.org/software/autoconf-archive/ax_have_epoll.html
|
||||||
# But this isn't really a big deal.
|
# ===========================================================================
|
||||||
|
|
||||||
# serial 1
|
|
||||||
|
|
||||||
dnl Usage:
|
|
||||||
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
|
||||||
|
|
||||||
AC_DEFUN(AM_INIT_AUTOMAKE,
|
|
||||||
[AC_REQUIRE([AC_PROG_INSTALL])
|
|
||||||
PACKAGE=[$1]
|
|
||||||
AC_SUBST(PACKAGE)
|
|
||||||
VERSION=[$2]
|
|
||||||
AC_SUBST(VERSION)
|
|
||||||
dnl test to see if srcdir already configured
|
|
||||||
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
|
||||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
|
||||||
fi
|
|
||||||
ifelse([$3],,
|
|
||||||
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
|
||||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
|
|
||||||
AC_REQUIRE([AM_SANITY_CHECK])
|
|
||||||
AC_REQUIRE([AC_ARG_PROGRAM])
|
|
||||||
dnl FIXME This is truly gross.
|
|
||||||
missing_dir=`cd $ac_aux_dir && pwd`
|
|
||||||
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
|
||||||
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
|
||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
|
||||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check to make sure that the build environment is sane.
|
# SYNOPSIS
|
||||||
#
|
#
|
||||||
|
# AX_HAVE_EPOLL([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
# AX_HAVE_EPOLL_PWAIT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro determines whether the system supports the epoll I/O event
|
||||||
|
# interface. A neat usage example would be:
|
||||||
|
#
|
||||||
|
# AX_HAVE_EPOLL(
|
||||||
|
# [AX_CONFIG_FEATURE_ENABLE(epoll)],
|
||||||
|
# [AX_CONFIG_FEATURE_DISABLE(epoll)])
|
||||||
|
# AX_CONFIG_FEATURE(
|
||||||
|
# [epoll], [This platform supports epoll(7)],
|
||||||
|
# [HAVE_EPOLL], [This platform supports epoll(7).])
|
||||||
|
#
|
||||||
|
# The epoll interface was added to the Linux kernel in version 2.5.45, and
|
||||||
|
# the macro verifies that a kernel newer than this is installed. This
|
||||||
|
# check is somewhat unreliable if <linux/version.h> doesn't match the
|
||||||
|
# running kernel, but it is necessary regardless, because glibc comes with
|
||||||
|
# stubs for the epoll_create(), epoll_wait(), etc. that allow programs to
|
||||||
|
# compile and link even if the kernel is too old; the problem would then
|
||||||
|
# be detected only at runtime.
|
||||||
|
#
|
||||||
|
# Linux kernel version 2.6.19 adds the epoll_pwait() call in addition to
|
||||||
|
# epoll_wait(). The availability of that function can be tested with the
|
||||||
|
# second macro. Generally speaking, it is safe to assume that
|
||||||
|
# AX_HAVE_EPOLL would succeed if AX_HAVE_EPOLL_PWAIT has, but not the
|
||||||
|
# other way round.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Peter Simons <simons@cryp.to>
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
|
# warranty.
|
||||||
|
|
||||||
AC_DEFUN(AM_SANITY_CHECK,
|
#serial 10
|
||||||
[AC_MSG_CHECKING([whether build environment is sane])
|
|
||||||
# Just in case
|
|
||||||
sleep 1
|
|
||||||
echo timestamp > conftestfile
|
|
||||||
# Do `set' in a subshell so we don't clobber the current shell's
|
|
||||||
# arguments. Must try -L first in case configure is actually a
|
|
||||||
# symlink; some systems play weird games with the mod time of symlinks
|
|
||||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
|
||||||
# directory).
|
|
||||||
if (
|
|
||||||
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
|
|
||||||
if test "[$]*" = "X"; then
|
|
||||||
# -L didn't work.
|
|
||||||
set X `ls -t $srcdir/configure conftestfile`
|
|
||||||
fi
|
|
||||||
if test "[$]*" != "X $srcdir/configure conftestfile" \
|
|
||||||
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
|
|
||||||
|
|
||||||
# If neither matched, then we have a broken ls. This can happen
|
AC_DEFUN([AX_HAVE_EPOLL], [dnl
|
||||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
ax_have_epoll_cppflags="${CPPFLAGS}"
|
||||||
# broken ls alias from the environment. This has actually
|
AC_CHECK_HEADER([linux/version.h], [CPPFLAGS="${CPPFLAGS} -DHAVE_LINUX_VERSION_H"])
|
||||||
# happened. Such a system could not be considered "sane".
|
AC_MSG_CHECKING([for Linux epoll(7) interface])
|
||||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
AC_CACHE_VAL([ax_cv_have_epoll], [dnl
|
||||||
alias in your environment])
|
AC_LINK_IFELSE([dnl
|
||||||
fi
|
AC_LANG_PROGRAM([dnl
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#ifdef HAVE_LINUX_VERSION_H
|
||||||
|
# include <linux/version.h>
|
||||||
|
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,45)
|
||||||
|
# error linux kernel version is too old to have epoll
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
], [dnl
|
||||||
|
int fd, rc;
|
||||||
|
struct epoll_event ev;
|
||||||
|
fd = epoll_create(128);
|
||||||
|
rc = epoll_wait(fd, &ev, 1, 0);])],
|
||||||
|
[ax_cv_have_epoll=yes],
|
||||||
|
[ax_cv_have_epoll=no])])
|
||||||
|
CPPFLAGS="${ax_have_epoll_cppflags}"
|
||||||
|
AS_IF([test "${ax_cv_have_epoll}" = "yes"],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
$1],[AC_MSG_RESULT([no])
|
||||||
|
$2])
|
||||||
|
])dnl
|
||||||
|
|
||||||
test "[$]2" = conftestfile
|
AC_DEFUN([AX_HAVE_EPOLL_PWAIT], [dnl
|
||||||
)
|
ax_have_epoll_cppflags="${CPPFLAGS}"
|
||||||
then
|
AC_CHECK_HEADER([linux/version.h],
|
||||||
# Ok.
|
[CPPFLAGS="${CPPFLAGS} -DHAVE_LINUX_VERSION_H"])
|
||||||
:
|
AC_MSG_CHECKING([for Linux epoll(7) interface with signals extension])
|
||||||
else
|
AC_CACHE_VAL([ax_cv_have_epoll_pwait], [dnl
|
||||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
AC_LINK_IFELSE([dnl
|
||||||
Check your system clock])
|
AC_LANG_PROGRAM([dnl
|
||||||
fi
|
#ifdef HAVE_LINUX_VERSION_H
|
||||||
rm -f conftest*
|
# include <linux/version.h>
|
||||||
AC_MSG_RESULT(yes)])
|
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
|
||||||
|
# error linux kernel version is too old to have epoll_pwait
|
||||||
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
|
# endif
|
||||||
dnl The program must properly implement --version.
|
#endif
|
||||||
AC_DEFUN(AM_MISSING_PROG,
|
#include <sys/epoll.h>
|
||||||
[AC_MSG_CHECKING(for working $2)
|
#include <signal.h>
|
||||||
# Run test in a subshell; some versions of sh will print an error if
|
], [dnl
|
||||||
# an executable is not found, even if stderr is redirected.
|
int fd, rc;
|
||||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
struct epoll_event ev;
|
||||||
if ($2 --version) < /dev/null > /dev/null 2>&1; then
|
fd = epoll_create(128);
|
||||||
$1=$2
|
rc = epoll_wait(fd, &ev, 1, 0);
|
||||||
AC_MSG_RESULT(found)
|
rc = epoll_pwait(fd, &ev, 1, 0, (sigset_t const *)(0));])],
|
||||||
else
|
[ax_cv_have_epoll_pwait=yes],
|
||||||
$1="$3/missing $2"
|
[ax_cv_have_epoll_pwait=no])])
|
||||||
AC_MSG_RESULT(missing)
|
CPPFLAGS="${ax_have_epoll_cppflags}"
|
||||||
fi
|
AS_IF([test "${ax_cv_have_epoll_pwait}" = "yes"],
|
||||||
AC_SUBST($1)])
|
[AC_MSG_RESULT([yes])
|
||||||
|
$1],[AC_MSG_RESULT([no])
|
||||||
AC_DEFUN(AC_C___ATTRIBUTE__, [
|
$2])
|
||||||
AC_MSG_CHECKING(for __attribute__)
|
])dnl
|
||||||
AC_CACHE_VAL(ac_cv___attribute__, [
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <stdlib.h>
|
|
||||||
],
|
|
||||||
[
|
|
||||||
static void foo(void) __attribute__ ((noreturn));
|
|
||||||
|
|
||||||
static void
|
|
||||||
foo(void)
|
|
||||||
{
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ac_cv___attribute__=yes,
|
|
||||||
ac_cv___attribute__=no)])
|
|
||||||
if test "$ac_cv___attribute__" = "yes"; then
|
|
||||||
AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($ac_cv___attribute__)
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|||||||
1139
nsock/src/configure
vendored
1139
nsock/src/configure
vendored
File diff suppressed because it is too large
Load Diff
@@ -112,7 +112,7 @@ if test "$pcap_enabled" != "no"; then
|
|||||||
AC_DEFINE(HAVE_PCAP)
|
AC_DEFINE(HAVE_PCAP)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_FUNCS(epoll_create epoll_ctl epoll_wait, [AC_DEFINE(HAVE_EPOLL)], )
|
AX_HAVE_EPOLL([AC_DEFINE(HAVE_EPOLL)], )
|
||||||
|
|
||||||
dnl Checks for programs.
|
dnl Checks for programs.
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
|||||||
Reference in New Issue
Block a user