gnulib: import select

A few sims use this to emulate the syscall & provide network
functionality.
This commit is contained in:
Mike Frysinger
2021-05-29 12:55:39 -04:00
parent 172a7ff54b
commit d20bc12288
20 changed files with 2402 additions and 26 deletions

604
gnulib/configure vendored
View File

@@ -776,6 +776,16 @@ GNULIB_SIGPROCMASK
GNULIB_SIGNAL_H_SIGPIPE
GNULIB_RAISE
GNULIB_PTHREAD_SIGMASK
LIB_SELECT
LIBSOCKET
HAVE_SYS_SELECT_H
NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H
NEXT_SYS_SELECT_H
REPLACE_SELECT
REPLACE_PSELECT
HAVE_PSELECT
GNULIB_SELECT
GNULIB_PSELECT
GL_GENERATE_NETINET_IN_H_FALSE
GL_GENERATE_NETINET_IN_H_TRUE
NETINET_IN_H
@@ -3783,6 +3793,7 @@ as_fn_append ac_func_list " openat"
as_fn_append ac_func_list " pipe"
as_fn_append ac_func_list " readlink"
as_fn_append ac_func_list " link"
as_fn_append ac_header_list " sys/select.h"
as_fn_append ac_func_list " setenv"
as_fn_append ac_func_list " strerror_r"
as_fn_append ac_func_list " __xpg_strerror_r"
@@ -6813,6 +6824,7 @@ fi
# Code from module same-inode:
# Code from module save-cwd:
# Code from module scratch_buffer:
# Code from module select:
# Code from module setenv:
# Code from module setlocale-null:
# Code from module signal-h:
@@ -6820,6 +6832,8 @@ fi
# Code from module snippet/arg-nonnull:
# Code from module snippet/c++defs:
# Code from module snippet/warn-on-use:
# Code from module socketlib:
# Code from module sockets:
# Code from module socklen:
# Code from module ssize_t:
# Code from module stat:
@@ -6845,6 +6859,7 @@ fi
# Code from module strstr-simple:
# Code from module strtok_r:
# Code from module sys_random:
# Code from module sys_select:
# Code from module sys_socket:
# Code from module sys_stat:
# Code from module sys_time:
@@ -16475,6 +16490,409 @@ _ACEOF
GNULIB_PSELECT=0;
GNULIB_SELECT=0;
HAVE_PSELECT=1;
REPLACE_PSELECT=0;
REPLACE_SELECT=0;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/select.h> is self-contained" >&5
$as_echo_n "checking whether <sys/select.h> is self-contained... " >&6; }
if ${gl_cv_header_sys_select_h_selfcontained+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/select.h>
int
main ()
{
struct timeval b;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gl_cv_header_sys_select_h_selfcontained=yes
else
gl_cv_header_sys_select_h_selfcontained=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test $gl_cv_header_sys_select_h_selfcontained = yes; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/select.h>
int
main ()
{
int memset; int bzero;
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/select.h>
int
main ()
{
#undef memset
#define memset nonexistent_memset
extern
#ifdef __cplusplus
"C"
#endif
void *memset (void *, int, unsigned long);
#undef bzero
#define bzero nonexistent_bzero
extern
#ifdef __cplusplus
"C"
#endif
void bzero (void *, unsigned long);
fd_set fds;
FD_ZERO (&fds);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
else
gl_cv_header_sys_select_h_selfcontained=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_select_h_selfcontained" >&5
$as_echo "$gl_cv_header_sys_select_h_selfcontained" >&6; }
if test $gl_cv_have_include_next = yes; then
gl_cv_next_sys_select_h='<'sys/select.h'>'
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/select.h>" >&5
$as_echo_n "checking absolute name of <sys/select.h>... " >&6; }
if ${gl_cv_next_sys_select_h+:} false; then :
$as_echo_n "(cached) " >&6
else
if test $ac_cv_header_sys_select_h = yes; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/select.h>
_ACEOF
case "$host_os" in
aix*) gl_absname_cpp="$ac_cpp -C" ;;
*) gl_absname_cpp="$ac_cpp" ;;
esac
case "$host_os" in
mingw*)
gl_dirsep_regex='[/\\]'
;;
*)
gl_dirsep_regex='\/'
;;
esac
gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
gl_header_literal_regex=`echo 'sys/select.h' \
| sed -e "$gl_make_literal_regex_sed"`
gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
s|^/[^/]|//&|
p
q
}'
gl_cv_absolute_sys_select_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
sed -n "$gl_absolute_header_sed"`
gl_header=$gl_cv_absolute_sys_select_h
gl_cv_next_sys_select_h='"'$gl_header'"'
else
gl_cv_next_sys_select_h='<'sys/select.h'>'
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_select_h" >&5
$as_echo "$gl_cv_next_sys_select_h" >&6; }
fi
NEXT_SYS_SELECT_H=$gl_cv_next_sys_select_h
if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
# INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
gl_next_as_first_directive='<'sys/select.h'>'
else
# INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
gl_next_as_first_directive=$gl_cv_next_sys_select_h
fi
NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H=$gl_next_as_first_directive
if test $ac_cv_header_sys_select_h = yes; then
HAVE_SYS_SELECT_H=1
else
HAVE_SYS_SELECT_H=0
fi
if test $ac_cv_header_sys_socket_h != yes; then
for ac_header in winsock2.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
if test "x$ac_cv_header_winsock2_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_WINSOCK2_H 1
_ACEOF
fi
done
fi
if test "$ac_cv_header_winsock2_h" = yes; then
HAVE_WINSOCK2_H=1
UNISTD_H_HAVE_WINSOCK2_H=1
SYS_IOCTL_H_HAVE_WINSOCK2_H=1
else
HAVE_WINSOCK2_H=0
fi
if test $ac_cv_header_sys_socket_h != yes; then
for ac_header in winsock2.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
if test "x$ac_cv_header_winsock2_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_WINSOCK2_H 1
_ACEOF
fi
done
fi
if test "$ac_cv_header_winsock2_h" = yes; then
HAVE_WINSOCK2_H=1
UNISTD_H_HAVE_WINSOCK2_H=1
SYS_IOCTL_H_HAVE_WINSOCK2_H=1
else
HAVE_WINSOCK2_H=0
fi
LIBSOCKET=
if test $HAVE_WINSOCK2_H = 1; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WSAStartup" >&5
$as_echo_n "checking for WSAStartup... " >&6; }
if ${gl_cv_func_wsastartup+:} false; then :
$as_echo_n "(cached) " >&6
else
gl_save_LIBS="$LIBS"
LIBS="$LIBS -lws2_32"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
#endif
int
main ()
{
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
int err = WSAStartup(wVersionRequested, &wsaData);
WSACleanup ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
gl_cv_func_wsastartup=yes
else
gl_cv_func_wsastartup=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS="$gl_save_LIBS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wsastartup" >&5
$as_echo "$gl_cv_func_wsastartup" >&6; }
if test "$gl_cv_func_wsastartup" = "yes"; then
$as_echo "#define WINDOWS_SOCKETS 1" >>confdefs.h
LIBSOCKET='-lws2_32'
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5
$as_echo_n "checking for library containing setsockopt... " >&6; }
if ${gl_cv_lib_socket+:} false; then :
$as_echo_n "(cached) " >&6
else
gl_cv_lib_socket=
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern
#ifdef __cplusplus
"C"
#endif
char setsockopt();
int
main ()
{
setsockopt();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
else
gl_save_LIBS="$LIBS"
LIBS="$gl_save_LIBS -lsocket"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern
#ifdef __cplusplus
"C"
#endif
char setsockopt();
int
main ()
{
setsockopt();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
gl_cv_lib_socket="-lsocket"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$gl_cv_lib_socket"; then
LIBS="$gl_save_LIBS -lnetwork"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern
#ifdef __cplusplus
"C"
#endif
char setsockopt();
int
main ()
{
setsockopt();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
gl_cv_lib_socket="-lnetwork"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$gl_cv_lib_socket"; then
LIBS="$gl_save_LIBS -lnet"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
extern
#ifdef __cplusplus
"C"
#endif
char setsockopt();
int
main ()
{
setsockopt();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
gl_cv_lib_socket="-lnet"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
fi
LIBS="$gl_save_LIBS"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$gl_cv_lib_socket"; then
gl_cv_lib_socket="none needed"
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_socket" >&5
$as_echo "$gl_cv_lib_socket" >&6; }
if test "$gl_cv_lib_socket" != "none needed"; then
LIBSOCKET="$gl_cv_lib_socket"
fi
fi
:
ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default"
if test "x$ac_cv_have_decl_setenv" = xyes; then :
ac_have_decl=1
@@ -27598,6 +28016,188 @@ $as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h
if test "$ac_cv_header_winsock2_h" = yes; then
REPLACE_SELECT=1
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select supports a 0 argument" >&5
$as_echo_n "checking whether select supports a 0 argument... " >&6; }
if ${gl_cv_func_select_supports0+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then :
case "$host_os" in
# Guess no on Interix.
interix*) gl_cv_func_select_supports0="guessing no";;
# Guess yes otherwise.
*) gl_cv_func_select_supports0="guessing yes";;
esac
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/time.h>
#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
int main ()
{
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 5;
return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
gl_cv_func_select_supports0=yes
else
gl_cv_func_select_supports0=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_supports0" >&5
$as_echo "$gl_cv_func_select_supports0" >&6; }
case "$gl_cv_func_select_supports0" in
*yes) ;;
*) REPLACE_SELECT=1 ;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select detects invalid fds" >&5
$as_echo_n "checking whether select detects invalid fds... " >&6; }
if ${gl_cv_func_select_detects_ebadf+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then :
case "$host_os" in
# Guess yes on Linux systems.
linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;;
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;;
# If we don't know, obey --enable-cross-guesses.
*) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;;
esac
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/time.h>
#if HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
#include <unistd.h>
#include <errno.h>
$gl_mda_defines
int
main ()
{
fd_set set;
dup2(0, 16);
FD_ZERO(&set);
FD_SET(16, &set);
close(16);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 5;
return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF;
;
return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
gl_cv_func_select_detects_ebadf=yes
else
gl_cv_func_select_detects_ebadf=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_detects_ebadf" >&5
$as_echo "$gl_cv_func_select_detects_ebadf" >&6; }
case $gl_cv_func_select_detects_ebadf in
*yes) ;;
*) REPLACE_SELECT=1 ;;
esac
fi
LIB_SELECT="$LIBSOCKET"
if test $REPLACE_SELECT = 1; then
case "$host_os" in
mingw*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int
main ()
{
MsgWaitForMultipleObjects (0, NULL, 0, 0, 0);
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
else
LIB_SELECT="$LIB_SELECT -luser32"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
;;
esac
fi
if test $REPLACE_SELECT = 1; then
gl_LIBOBJS="$gl_LIBOBJS select.$ac_objext"
fi
GNULIB_SELECT=1
$as_echo "#define GNULIB_TEST_SELECT 1" >>confdefs.h
if test $ac_cv_func_setenv = no; then
HAVE_SETENV=0
else
@@ -28113,6 +28713,8 @@ fi
ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "
/* <sys/types.h> is not needed according to POSIX, but the
<sys/socket.h> in i386-unknown-freebsd4.10 and
@@ -29918,6 +30520,8 @@ $as_echo "$gl_cv_next_sys_random_h" >&6; }