mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-03 19:03:24 +00:00
Simplify Emacs part of pthread_sigmask support.
* Makefile.in (GNULIB_TOOL_FLAGS): Do not avoid sigprocmask. * configure.in (AC_TYPE_UID_T): New dummy macro. Configure gnulib after adjusting LIBS, so that gnulib can assume the libraries in LIBS. * lib/pthread_sigmask.c, lib/sigprocmask.c, m4/signalblocking.m4: New files, automatically imported from gnulib. * lib/gnulib.mk, m4/gl-comp.m4: Regenerate. * src/Makefile.in (LIB_PTHREAD_SIGMASK): New macro. (LIBES): Use it.
This commit is contained in:
parent
1692ae2dd5
commit
2a84b02da8
15 changed files with 677 additions and 139 deletions
10
ChangeLog
10
ChangeLog
|
@ -2,15 +2,17 @@
|
||||||
|
|
||||||
Add gnulib support for pthread_sigmask (Bug#9010).
|
Add gnulib support for pthread_sigmask (Bug#9010).
|
||||||
* Makefile.in (GNULIB_MODULES): Add pthread_sigmask.
|
* Makefile.in (GNULIB_MODULES): Add pthread_sigmask.
|
||||||
(GNULIB_TOOL_FLAGS): Avoid sigprocmask. Emacs does its own
|
* configure.in (AC_TYPE_UID_T): New dummy macro.
|
||||||
implementation of 'sigprocmask' on Windows, and it assumes
|
Configure gnulib after adjusting LIBS,
|
||||||
'sigprocmask' on non-Windows hosts, so it doesn't need the
|
so that gnulib can assume the libraries in LIBS.
|
||||||
sigprocmask module.
|
|
||||||
* lib/signal.in.h, m4/pthread_sigmask.m4, m4/signal_h.m4:
|
* lib/signal.in.h, m4/pthread_sigmask.m4, m4/signal_h.m4:
|
||||||
|
* lib/pthread_sigprocmask.c, lib/sigprocmask.c, m4/signalblocking.m4:
|
||||||
New files, automatically imported from gnulib.
|
New files, automatically imported from gnulib.
|
||||||
* lib/gnulib.mk, m4/gl-comp.m4: Automatically-imported update
|
* lib/gnulib.mk, m4/gl-comp.m4: Automatically-imported update
|
||||||
due to the above changes.
|
due to the above changes.
|
||||||
* .bzrignore: Add lib/signal.h.
|
* .bzrignore: Add lib/signal.h.
|
||||||
|
* src/Makefile.in (LIB_PTHREAD_SIGMASK): New macro.
|
||||||
|
(LIBES): Use it.
|
||||||
|
|
||||||
2011-07-07 Andreas Schwab <schwab@linux-m68k.org>
|
2011-07-07 Andreas Schwab <schwab@linux-m68k.org>
|
||||||
|
|
||||||
|
|
|
@ -339,7 +339,6 @@ GNULIB_MODULES = \
|
||||||
mktime pthread_sigmask readlink \
|
mktime pthread_sigmask readlink \
|
||||||
socklen stdarg stdio strftime strtoumax symlink sys_stat
|
socklen stdarg stdio strftime strtoumax symlink sys_stat
|
||||||
GNULIB_TOOL_FLAGS = \
|
GNULIB_TOOL_FLAGS = \
|
||||||
--avoid=sigprocmask \
|
|
||||||
--conditional-dependencies --import --no-changelog --no-vc-files \
|
--conditional-dependencies --import --no-changelog --no-vc-files \
|
||||||
--makefile-name=gnulib.mk
|
--makefile-name=gnulib.mk
|
||||||
sync-from-gnulib: $(gnulib_srcdir)
|
sync-from-gnulib: $(gnulib_srcdir)
|
||||||
|
|
11
configure.in
11
configure.in
|
@ -984,6 +984,8 @@ fi
|
||||||
|
|
||||||
# Suppress obsolescent Autoconf test for size_t; Emacs assumes C89 or better.
|
# Suppress obsolescent Autoconf test for size_t; Emacs assumes C89 or better.
|
||||||
AC_DEFUN([AC_TYPE_SIZE_T])
|
AC_DEFUN([AC_TYPE_SIZE_T])
|
||||||
|
# Likewise for obsolescent test for uid_t, gid_t; Emacs assumes them.
|
||||||
|
AC_DEFUN([AC_TYPE_UID_T])
|
||||||
|
|
||||||
dnl Do this early because it can frob feature test macros for Unix-98 &c.
|
dnl Do this early because it can frob feature test macros for Unix-98 &c.
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
@ -2725,11 +2727,6 @@ AC_FUNC_FSEEKO
|
||||||
|
|
||||||
AC_FUNC_GETPGRP
|
AC_FUNC_GETPGRP
|
||||||
|
|
||||||
# Configure gnulib.
|
|
||||||
gl_ASSERT_NO_GNULIB_POSIXCHECK
|
|
||||||
gl_ASSERT_NO_GNULIB_TESTS
|
|
||||||
gl_INIT
|
|
||||||
|
|
||||||
# UNIX98 PTYs.
|
# UNIX98 PTYs.
|
||||||
AC_CHECK_FUNCS(grantpt)
|
AC_CHECK_FUNCS(grantpt)
|
||||||
|
|
||||||
|
@ -3333,6 +3330,10 @@ AC_SUBST(CYGWIN_OBJ)
|
||||||
AC_SUBST(PRE_ALLOC_OBJ)
|
AC_SUBST(PRE_ALLOC_OBJ)
|
||||||
AC_SUBST(POST_ALLOC_OBJ)
|
AC_SUBST(POST_ALLOC_OBJ)
|
||||||
|
|
||||||
|
# Configure gnulib here, now that we know LIBS.
|
||||||
|
gl_ASSERT_NO_GNULIB_POSIXCHECK
|
||||||
|
gl_ASSERT_NO_GNULIB_TESTS
|
||||||
|
gl_INIT
|
||||||
|
|
||||||
case "$opsys" in
|
case "$opsys" in
|
||||||
aix4-2) LD_SWITCH_SYSTEM_TEMACS="-Wl,-bnodelcsect" ;;
|
aix4-2) LD_SWITCH_SYSTEM_TEMACS="-Wl,-bnodelcsect" ;;
|
||||||
|
|
11
lib/getopt.c
11
lib/getopt.c
|
@ -829,7 +829,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
|
||||||
return '?';
|
return '?';
|
||||||
}
|
}
|
||||||
/* Convenience. Treat POSIX -W foo same as long option --foo */
|
/* Convenience. Treat POSIX -W foo same as long option --foo */
|
||||||
if (temp[0] == 'W' && temp[1] == ';' && longopts)
|
if (temp[0] == 'W' && temp[1] == ';')
|
||||||
{
|
{
|
||||||
char *nameend;
|
char *nameend;
|
||||||
const struct option *p;
|
const struct option *p;
|
||||||
|
@ -839,6 +839,9 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
|
||||||
int indfound = 0;
|
int indfound = 0;
|
||||||
int option_index;
|
int option_index;
|
||||||
|
|
||||||
|
if (longopts == NULL)
|
||||||
|
goto no_longs;
|
||||||
|
|
||||||
/* This is an option that requires an argument. */
|
/* This is an option that requires an argument. */
|
||||||
if (*d->__nextchar != '\0')
|
if (*d->__nextchar != '\0')
|
||||||
{
|
{
|
||||||
|
@ -1046,8 +1049,10 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
|
||||||
}
|
}
|
||||||
return pfound->val;
|
return pfound->val;
|
||||||
}
|
}
|
||||||
d->__nextchar = NULL;
|
|
||||||
return 'W'; /* Let the application handle it. */
|
no_longs:
|
||||||
|
d->__nextchar = NULL;
|
||||||
|
return 'W'; /* Let the application handle it. */
|
||||||
}
|
}
|
||||||
if (temp[1] == ':')
|
if (temp[1] == ':')
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
# the same distribution terms as the rest of that program.
|
# the same distribution terms as the rest of that program.
|
||||||
#
|
#
|
||||||
# Generated by gnulib-tool.
|
# Generated by gnulib-tool.
|
||||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --avoid=sigprocmask --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoumax symlink sys_stat
|
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoumax symlink sys_stat
|
||||||
|
|
||||||
|
|
||||||
MOSTLYCLEANFILES += core *.stackdump
|
MOSTLYCLEANFILES += core *.stackdump
|
||||||
|
@ -294,6 +294,15 @@ EXTRA_libgnu_a_SOURCES += mktime.c
|
||||||
|
|
||||||
## end gnulib module mktime
|
## end gnulib module mktime
|
||||||
|
|
||||||
|
## begin gnulib module pthread_sigmask
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += pthread_sigmask.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += pthread_sigmask.c
|
||||||
|
|
||||||
|
## end gnulib module pthread_sigmask
|
||||||
|
|
||||||
## begin gnulib module readlink
|
## begin gnulib module readlink
|
||||||
|
|
||||||
|
|
||||||
|
@ -322,6 +331,7 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
|
-e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
|
||||||
-e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
|
-e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
|
||||||
-e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
|
-e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
|
||||||
|
-e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
|
||||||
-e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
|
-e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
|
||||||
-e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
|
-e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
|
||||||
-e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
|
-e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
|
||||||
|
@ -341,6 +351,17 @@ EXTRA_DIST += signal.in.h
|
||||||
|
|
||||||
## end gnulib module signal
|
## end gnulib module signal
|
||||||
|
|
||||||
|
## begin gnulib module sigprocmask
|
||||||
|
|
||||||
|
if gl_GNULIB_ENABLED_sigprocmask
|
||||||
|
|
||||||
|
endif
|
||||||
|
EXTRA_DIST += sigprocmask.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += sigprocmask.c
|
||||||
|
|
||||||
|
## end gnulib module sigprocmask
|
||||||
|
|
||||||
## begin gnulib module stat
|
## begin gnulib module stat
|
||||||
|
|
||||||
if gl_GNULIB_ENABLED_stat
|
if gl_GNULIB_ENABLED_stat
|
||||||
|
|
29
lib/pthread_sigmask.c
Normal file
29
lib/pthread_sigmask.c
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* POSIX compatible signal blocking for threads.
|
||||||
|
Copyright (C) 2011 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask)
|
||||||
|
{
|
||||||
|
int ret = sigprocmask (how, new_mask, old_mask);
|
||||||
|
return (ret < 0 ? errno : 0);
|
||||||
|
}
|
|
@ -20,8 +20,17 @@
|
||||||
#endif
|
#endif
|
||||||
@PRAGMA_COLUMNS@
|
@PRAGMA_COLUMNS@
|
||||||
|
|
||||||
#if defined __need_sig_atomic_t || defined __need_sigset_t
|
#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
|
||||||
/* Special invocation convention inside glibc header files. */
|
/* Special invocation convention:
|
||||||
|
- Inside glibc header files.
|
||||||
|
- On glibc systems we have a sequence of nested includes
|
||||||
|
<signal.h> -> <ucontext.h> -> <signal.h>.
|
||||||
|
In this situation, the functions are not yet declared, therefore we cannot
|
||||||
|
provide the C++ aliases.
|
||||||
|
- On glibc systems with GCC 4.3 we have a sequence of nested includes
|
||||||
|
<csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
|
||||||
|
In this situation, some of the functions are not yet declared, therefore
|
||||||
|
we cannot provide the C++ aliases. */
|
||||||
|
|
||||||
# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
|
# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
|
||||||
|
|
||||||
|
@ -30,6 +39,8 @@
|
||||||
|
|
||||||
#ifndef _@GUARD_PREFIX@_SIGNAL_H
|
#ifndef _@GUARD_PREFIX@_SIGNAL_H
|
||||||
|
|
||||||
|
#define _GL_ALREADY_INCLUDING_SIGNAL_H
|
||||||
|
|
||||||
/* Define pid_t, uid_t.
|
/* Define pid_t, uid_t.
|
||||||
Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
|
Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
|
||||||
On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
|
On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
|
||||||
|
@ -39,9 +50,20 @@
|
||||||
/* The include_next requires a split double-inclusion guard. */
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
|
#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
|
||||||
|
|
||||||
|
#undef _GL_ALREADY_INCLUDING_SIGNAL_H
|
||||||
|
|
||||||
#ifndef _@GUARD_PREFIX@_SIGNAL_H
|
#ifndef _@GUARD_PREFIX@_SIGNAL_H
|
||||||
#define _@GUARD_PREFIX@_SIGNAL_H
|
#define _@GUARD_PREFIX@_SIGNAL_H
|
||||||
|
|
||||||
|
/* MacOS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
|
||||||
|
pthread_sigmask in <pthread.h>, not in <signal.h>.
|
||||||
|
But avoid namespace pollution on glibc systems.*/
|
||||||
|
#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
|
||||||
|
&& ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
|
||||||
|
&& ! defined __GLIBC__
|
||||||
|
# include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
||||||
|
|
||||||
/* The definition of _GL_ARG_NONNULL is copied here. */
|
/* The definition of _GL_ARG_NONNULL is copied here. */
|
||||||
|
@ -104,9 +126,23 @@ typedef void (*sighandler_t) (int);
|
||||||
|
|
||||||
#if @GNULIB_PTHREAD_SIGMASK@
|
#if @GNULIB_PTHREAD_SIGMASK@
|
||||||
# if @REPLACE_PTHREAD_SIGMASK@
|
# if @REPLACE_PTHREAD_SIGMASK@
|
||||||
# undef pthread_sigmask
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
# define pthread_sigmask sigprocmask
|
# undef pthread_sigmask
|
||||||
|
# define pthread_sigmask rpl_pthread_sigmask
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (pthread_sigmask, int,
|
||||||
|
(int how, const sigset_t *new_mask, sigset_t *old_mask));
|
||||||
|
_GL_CXXALIAS_RPL (pthread_sigmask, int,
|
||||||
|
(int how, const sigset_t *new_mask, sigset_t *old_mask));
|
||||||
|
# else
|
||||||
|
# if !@HAVE_PTHREAD_SIGMASK@
|
||||||
|
_GL_FUNCDECL_SYS (pthread_sigmask, int,
|
||||||
|
(int how, const sigset_t *new_mask, sigset_t *old_mask));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (pthread_sigmask, int,
|
||||||
|
(int how, const sigset_t *new_mask, sigset_t *old_mask));
|
||||||
# endif
|
# endif
|
||||||
|
_GL_CXXALIASWARN (pthread_sigmask);
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef pthread_sigmask
|
# undef pthread_sigmask
|
||||||
# if HAVE_RAW_DECL_PTHREAD_SIGMASK
|
# if HAVE_RAW_DECL_PTHREAD_SIGMASK
|
||||||
|
|
329
lib/sigprocmask.c
Normal file
329
lib/sigprocmask.c
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
/* POSIX compatible signal blocking.
|
||||||
|
Copyright (C) 2006-2011 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2006.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* We assume that a platform without POSIX signal blocking functions
|
||||||
|
also does not have the POSIX sigaction() function, only the
|
||||||
|
signal() function. We also assume signal() has SysV semantics,
|
||||||
|
where any handler is uninstalled prior to being invoked. This is
|
||||||
|
true for Woe32 platforms. */
|
||||||
|
|
||||||
|
/* We use raw signal(), but also provide a wrapper rpl_signal() so
|
||||||
|
that applications can query or change a blocked signal. */
|
||||||
|
#undef signal
|
||||||
|
|
||||||
|
/* Provide invalid signal numbers as fallbacks if the uncatchable
|
||||||
|
signals are not defined. */
|
||||||
|
#ifndef SIGKILL
|
||||||
|
# define SIGKILL (-1)
|
||||||
|
#endif
|
||||||
|
#ifndef SIGSTOP
|
||||||
|
# define SIGSTOP (-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias
|
||||||
|
for the signal SIGABRT. Only one signal handler is stored for both
|
||||||
|
SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */
|
||||||
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
|
# undef SIGABRT_COMPAT
|
||||||
|
# define SIGABRT_COMPAT 6
|
||||||
|
#endif
|
||||||
|
#ifdef SIGABRT_COMPAT
|
||||||
|
# define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT)
|
||||||
|
#else
|
||||||
|
# define SIGABRT_COMPAT_MASK 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void (*handler_t) (int);
|
||||||
|
|
||||||
|
/* Handling of gnulib defined signals. */
|
||||||
|
|
||||||
|
#if GNULIB_defined_SIGPIPE
|
||||||
|
static handler_t SIGPIPE_handler = SIG_DFL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GNULIB_defined_SIGPIPE
|
||||||
|
static handler_t
|
||||||
|
ext_signal (int sig, handler_t handler)
|
||||||
|
{
|
||||||
|
switch (sig)
|
||||||
|
{
|
||||||
|
case SIGPIPE:
|
||||||
|
{
|
||||||
|
handler_t old_handler = SIGPIPE_handler;
|
||||||
|
SIGPIPE_handler = handler;
|
||||||
|
return old_handler;
|
||||||
|
}
|
||||||
|
default: /* System defined signal */
|
||||||
|
return signal (sig, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# define signal ext_signal
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
sigismember (const sigset_t *set, int sig)
|
||||||
|
{
|
||||||
|
if (sig >= 0 && sig < NSIG)
|
||||||
|
{
|
||||||
|
#ifdef SIGABRT_COMPAT
|
||||||
|
if (sig == SIGABRT_COMPAT)
|
||||||
|
sig = SIGABRT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return (*set >> sig) & 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sigemptyset (sigset_t *set)
|
||||||
|
{
|
||||||
|
*set = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sigaddset (sigset_t *set, int sig)
|
||||||
|
{
|
||||||
|
if (sig >= 0 && sig < NSIG)
|
||||||
|
{
|
||||||
|
#ifdef SIGABRT_COMPAT
|
||||||
|
if (sig == SIGABRT_COMPAT)
|
||||||
|
sig = SIGABRT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*set |= 1U << sig;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sigdelset (sigset_t *set, int sig)
|
||||||
|
{
|
||||||
|
if (sig >= 0 && sig < NSIG)
|
||||||
|
{
|
||||||
|
#ifdef SIGABRT_COMPAT
|
||||||
|
if (sig == SIGABRT_COMPAT)
|
||||||
|
sig = SIGABRT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*set &= ~(1U << sig);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
sigfillset (sigset_t *set)
|
||||||
|
{
|
||||||
|
*set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set of currently blocked signals. */
|
||||||
|
static volatile sigset_t blocked_set /* = 0 */;
|
||||||
|
|
||||||
|
/* Set of currently blocked and pending signals. */
|
||||||
|
static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */;
|
||||||
|
|
||||||
|
/* Signal handler that is installed for blocked signals. */
|
||||||
|
static void
|
||||||
|
blocked_handler (int sig)
|
||||||
|
{
|
||||||
|
/* Reinstall the handler, in case the signal occurs multiple times
|
||||||
|
while blocked. There is an inherent race where an asynchronous
|
||||||
|
signal in between when the kernel uninstalled the handler and
|
||||||
|
when we reinstall it will trigger the default handler; oh
|
||||||
|
well. */
|
||||||
|
signal (sig, blocked_handler);
|
||||||
|
if (sig >= 0 && sig < NSIG)
|
||||||
|
pending_array[sig] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sigpending (sigset_t *set)
|
||||||
|
{
|
||||||
|
sigset_t pending = 0;
|
||||||
|
int sig;
|
||||||
|
|
||||||
|
for (sig = 0; sig < NSIG; sig++)
|
||||||
|
if (pending_array[sig])
|
||||||
|
pending |= 1U << sig;
|
||||||
|
*set = pending;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The previous signal handlers.
|
||||||
|
Only the array elements corresponding to blocked signals are relevant. */
|
||||||
|
static volatile handler_t old_handlers[NSIG];
|
||||||
|
|
||||||
|
int
|
||||||
|
sigprocmask (int operation, const sigset_t *set, sigset_t *old_set)
|
||||||
|
{
|
||||||
|
if (old_set != NULL)
|
||||||
|
*old_set = blocked_set;
|
||||||
|
|
||||||
|
if (set != NULL)
|
||||||
|
{
|
||||||
|
sigset_t new_blocked_set;
|
||||||
|
sigset_t to_unblock;
|
||||||
|
sigset_t to_block;
|
||||||
|
|
||||||
|
switch (operation)
|
||||||
|
{
|
||||||
|
case SIG_BLOCK:
|
||||||
|
new_blocked_set = blocked_set | *set;
|
||||||
|
break;
|
||||||
|
case SIG_SETMASK:
|
||||||
|
new_blocked_set = *set;
|
||||||
|
break;
|
||||||
|
case SIG_UNBLOCK:
|
||||||
|
new_blocked_set = blocked_set & ~*set;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
to_unblock = blocked_set & ~new_blocked_set;
|
||||||
|
to_block = new_blocked_set & ~blocked_set;
|
||||||
|
|
||||||
|
if (to_block != 0)
|
||||||
|
{
|
||||||
|
int sig;
|
||||||
|
|
||||||
|
for (sig = 0; sig < NSIG; sig++)
|
||||||
|
if ((to_block >> sig) & 1)
|
||||||
|
{
|
||||||
|
pending_array[sig] = 0;
|
||||||
|
if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR)
|
||||||
|
blocked_set |= 1U << sig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (to_unblock != 0)
|
||||||
|
{
|
||||||
|
sig_atomic_t received[NSIG];
|
||||||
|
int sig;
|
||||||
|
|
||||||
|
for (sig = 0; sig < NSIG; sig++)
|
||||||
|
if ((to_unblock >> sig) & 1)
|
||||||
|
{
|
||||||
|
if (signal (sig, old_handlers[sig]) != blocked_handler)
|
||||||
|
/* The application changed a signal handler while the signal
|
||||||
|
was blocked, bypassing our rpl_signal replacement.
|
||||||
|
We don't support this. */
|
||||||
|
abort ();
|
||||||
|
received[sig] = pending_array[sig];
|
||||||
|
blocked_set &= ~(1U << sig);
|
||||||
|
pending_array[sig] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
received[sig] = 0;
|
||||||
|
|
||||||
|
for (sig = 0; sig < NSIG; sig++)
|
||||||
|
if (received[sig])
|
||||||
|
raise (sig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Install the handler FUNC for signal SIG, and return the previous
|
||||||
|
handler. */
|
||||||
|
handler_t
|
||||||
|
rpl_signal (int sig, handler_t handler)
|
||||||
|
{
|
||||||
|
/* We must provide a wrapper, so that a user can query what handler
|
||||||
|
they installed even if that signal is currently blocked. */
|
||||||
|
if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP
|
||||||
|
&& handler != SIG_ERR)
|
||||||
|
{
|
||||||
|
#ifdef SIGABRT_COMPAT
|
||||||
|
if (sig == SIGABRT_COMPAT)
|
||||||
|
sig = SIGABRT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (blocked_set & (1U << sig))
|
||||||
|
{
|
||||||
|
/* POSIX states that sigprocmask and signal are both
|
||||||
|
async-signal-safe. This is not true of our
|
||||||
|
implementation - there is a slight data race where an
|
||||||
|
asynchronous interrupt on signal A can occur after we
|
||||||
|
install blocked_handler but before we have updated
|
||||||
|
old_handlers for signal B, such that handler A can see
|
||||||
|
stale information if it calls signal(B). Oh well -
|
||||||
|
signal handlers really shouldn't try to manipulate the
|
||||||
|
installed handlers of unrelated signals. */
|
||||||
|
handler_t result = old_handlers[sig];
|
||||||
|
old_handlers[sig] = handler;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return signal (sig, handler);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if GNULIB_defined_SIGPIPE
|
||||||
|
/* Raise the signal SIG. */
|
||||||
|
int
|
||||||
|
rpl_raise (int sig)
|
||||||
|
# undef raise
|
||||||
|
{
|
||||||
|
switch (sig)
|
||||||
|
{
|
||||||
|
case SIGPIPE:
|
||||||
|
if (blocked_set & (1U << sig))
|
||||||
|
pending_array[sig] = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handler_t handler = SIGPIPE_handler;
|
||||||
|
if (handler == SIG_DFL)
|
||||||
|
exit (128 + SIGPIPE);
|
||||||
|
else if (handler != SIG_IGN)
|
||||||
|
(*handler) (sig);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
default: /* System defined signal */
|
||||||
|
return raise (sig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
141
lib/unistd.in.h
141
lib/unistd.in.h
|
@ -117,78 +117,77 @@
|
||||||
/* The definition of _GL_WARN_ON_USE is copied here. */
|
/* The definition of _GL_WARN_ON_USE is copied here. */
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_GETHOSTNAME@
|
/* Hide some function declarations from <winsock2.h>. */
|
||||||
/* Get all possible declarations of gethostname(). */
|
|
||||||
# if @UNISTD_H_HAVE_WINSOCK2_H@
|
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
|
||||||
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
|
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
|
||||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
# undef socket
|
# undef socket
|
||||||
# define socket socket_used_without_including_sys_socket_h
|
# define socket socket_used_without_including_sys_socket_h
|
||||||
# undef connect
|
# undef connect
|
||||||
# define connect connect_used_without_including_sys_socket_h
|
# define connect connect_used_without_including_sys_socket_h
|
||||||
# undef accept
|
# undef accept
|
||||||
# define accept accept_used_without_including_sys_socket_h
|
# define accept accept_used_without_including_sys_socket_h
|
||||||
# undef bind
|
# undef bind
|
||||||
# define bind bind_used_without_including_sys_socket_h
|
# define bind bind_used_without_including_sys_socket_h
|
||||||
# undef getpeername
|
# undef getpeername
|
||||||
# define getpeername getpeername_used_without_including_sys_socket_h
|
# define getpeername getpeername_used_without_including_sys_socket_h
|
||||||
# undef getsockname
|
# undef getsockname
|
||||||
# define getsockname getsockname_used_without_including_sys_socket_h
|
# define getsockname getsockname_used_without_including_sys_socket_h
|
||||||
# undef getsockopt
|
# undef getsockopt
|
||||||
# define getsockopt getsockopt_used_without_including_sys_socket_h
|
# define getsockopt getsockopt_used_without_including_sys_socket_h
|
||||||
# undef listen
|
# undef listen
|
||||||
# define listen listen_used_without_including_sys_socket_h
|
# define listen listen_used_without_including_sys_socket_h
|
||||||
# undef recv
|
# undef recv
|
||||||
# define recv recv_used_without_including_sys_socket_h
|
# define recv recv_used_without_including_sys_socket_h
|
||||||
# undef send
|
# undef send
|
||||||
# define send send_used_without_including_sys_socket_h
|
# define send send_used_without_including_sys_socket_h
|
||||||
# undef recvfrom
|
# undef recvfrom
|
||||||
# define recvfrom recvfrom_used_without_including_sys_socket_h
|
# define recvfrom recvfrom_used_without_including_sys_socket_h
|
||||||
# undef sendto
|
# undef sendto
|
||||||
# define sendto sendto_used_without_including_sys_socket_h
|
# define sendto sendto_used_without_including_sys_socket_h
|
||||||
# undef setsockopt
|
# undef setsockopt
|
||||||
# define setsockopt setsockopt_used_without_including_sys_socket_h
|
# define setsockopt setsockopt_used_without_including_sys_socket_h
|
||||||
# undef shutdown
|
# undef shutdown
|
||||||
# define shutdown shutdown_used_without_including_sys_socket_h
|
# define shutdown shutdown_used_without_including_sys_socket_h
|
||||||
# else
|
# else
|
||||||
_GL_WARN_ON_USE (socket,
|
_GL_WARN_ON_USE (socket,
|
||||||
"socket() used without including <sys/socket.h>");
|
"socket() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (connect,
|
_GL_WARN_ON_USE (connect,
|
||||||
"connect() used without including <sys/socket.h>");
|
"connect() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (accept,
|
_GL_WARN_ON_USE (accept,
|
||||||
"accept() used without including <sys/socket.h>");
|
"accept() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (bind,
|
_GL_WARN_ON_USE (bind,
|
||||||
"bind() used without including <sys/socket.h>");
|
"bind() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (getpeername,
|
_GL_WARN_ON_USE (getpeername,
|
||||||
"getpeername() used without including <sys/socket.h>");
|
"getpeername() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (getsockname,
|
_GL_WARN_ON_USE (getsockname,
|
||||||
"getsockname() used without including <sys/socket.h>");
|
"getsockname() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (getsockopt,
|
_GL_WARN_ON_USE (getsockopt,
|
||||||
"getsockopt() used without including <sys/socket.h>");
|
"getsockopt() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (listen,
|
_GL_WARN_ON_USE (listen,
|
||||||
"listen() used without including <sys/socket.h>");
|
"listen() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (recv,
|
_GL_WARN_ON_USE (recv,
|
||||||
"recv() used without including <sys/socket.h>");
|
"recv() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (send,
|
_GL_WARN_ON_USE (send,
|
||||||
"send() used without including <sys/socket.h>");
|
"send() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (recvfrom,
|
_GL_WARN_ON_USE (recvfrom,
|
||||||
"recvfrom() used without including <sys/socket.h>");
|
"recvfrom() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (sendto,
|
_GL_WARN_ON_USE (sendto,
|
||||||
"sendto() used without including <sys/socket.h>");
|
"sendto() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (setsockopt,
|
_GL_WARN_ON_USE (setsockopt,
|
||||||
"setsockopt() used without including <sys/socket.h>");
|
"setsockopt() used without including <sys/socket.h>");
|
||||||
_GL_WARN_ON_USE (shutdown,
|
_GL_WARN_ON_USE (shutdown,
|
||||||
"shutdown() used without including <sys/socket.h>");
|
"shutdown() used without including <sys/socket.h>");
|
||||||
# endif
|
|
||||||
# endif
|
# endif
|
||||||
# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
|
# endif
|
||||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
|
||||||
# undef select
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
# define select select_used_without_including_sys_select_h
|
# undef select
|
||||||
# else
|
# define select select_used_without_including_sys_select_h
|
||||||
_GL_WARN_ON_USE (select,
|
# else
|
||||||
"select() used without including <sys/select.h>");
|
_GL_WARN_ON_USE (select,
|
||||||
# endif
|
"select() used without including <sys/select.h>");
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
83
m4/getopt.m4
83
m4/getopt.m4
|
@ -1,4 +1,4 @@
|
||||||
# getopt.m4 serial 35
|
# getopt.m4 serial 38
|
||||||
dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -89,15 +89,15 @@ AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
|
||||||
AC_CACHE_CHECK([whether getopt is POSIX compatible],
|
AC_CACHE_CHECK([whether getopt is POSIX compatible],
|
||||||
[gl_cv_func_getopt_posix],
|
[gl_cv_func_getopt_posix],
|
||||||
[
|
[
|
||||||
dnl BSD getopt_long uses an incompatible method to reset
|
dnl BSD getopt_long uses an incompatible method to reset option
|
||||||
dnl option processing. Existence of the variable, in and of
|
dnl processing. Existence of the optreset variable, in and of
|
||||||
dnl itself, is not a reason to replace getopt, but knowledge
|
dnl itself, is not a reason to replace getopt, but knowledge
|
||||||
dnl of the variable is needed to determine how to reset and
|
dnl of the variable is needed to determine how to reset and
|
||||||
dnl whether a reset reparses the environment. Solaris
|
dnl whether a reset reparses the environment. Solaris
|
||||||
dnl supports neither optreset nor optind=0, but keeps no state
|
dnl supports neither optreset nor optind=0, but keeps no state
|
||||||
dnl that needs a reset beyond setting optind=1; detect Solaris
|
dnl that needs a reset beyond setting optind=1; detect Solaris
|
||||||
dnl by getopt_clip.
|
dnl by getopt_clip.
|
||||||
AC_COMPILE_IFELSE(
|
AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[[#include <unistd.h>]],
|
[[#include <unistd.h>]],
|
||||||
[[int *p = &optreset; return optreset;]])],
|
[[int *p = &optreset; return optreset;]])],
|
||||||
|
@ -121,22 +121,20 @@ int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
int argc = 0;
|
static char program[] = "program";
|
||||||
char *argv[10];
|
static char a[] = "-a";
|
||||||
|
static char foo[] = "foo";
|
||||||
|
static char bar[] = "bar";
|
||||||
|
char *argv[] = { program, a, foo, bar, NULL };
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
argv[argc++] = "program";
|
|
||||||
argv[argc++] = "-a";
|
|
||||||
argv[argc++] = "foo";
|
|
||||||
argv[argc++] = "bar";
|
|
||||||
argv[argc] = NULL;
|
|
||||||
optind = OPTIND_MIN;
|
optind = OPTIND_MIN;
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
|
|
||||||
c = getopt (argc, argv, "ab");
|
c = getopt (4, argv, "ab");
|
||||||
if (!(c == 'a'))
|
if (!(c == 'a'))
|
||||||
return 1;
|
return 1;
|
||||||
c = getopt (argc, argv, "ab");
|
c = getopt (4, argv, "ab");
|
||||||
if (!(c == -1))
|
if (!(c == -1))
|
||||||
return 2;
|
return 2;
|
||||||
if (!(optind == 2))
|
if (!(optind == 2))
|
||||||
|
@ -144,22 +142,20 @@ main ()
|
||||||
}
|
}
|
||||||
/* Some internal state exists at this point. */
|
/* Some internal state exists at this point. */
|
||||||
{
|
{
|
||||||
int argc = 0;
|
static char program[] = "program";
|
||||||
char *argv[10];
|
static char donald[] = "donald";
|
||||||
|
static char p[] = "-p";
|
||||||
|
static char billy[] = "billy";
|
||||||
|
static char duck[] = "duck";
|
||||||
|
static char a[] = "-a";
|
||||||
|
static char bar[] = "bar";
|
||||||
|
char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
argv[argc++] = "program";
|
|
||||||
argv[argc++] = "donald";
|
|
||||||
argv[argc++] = "-p";
|
|
||||||
argv[argc++] = "billy";
|
|
||||||
argv[argc++] = "duck";
|
|
||||||
argv[argc++] = "-a";
|
|
||||||
argv[argc++] = "bar";
|
|
||||||
argv[argc] = NULL;
|
|
||||||
optind = OPTIND_MIN;
|
optind = OPTIND_MIN;
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
|
|
||||||
c = getopt (argc, argv, "+abp:q:");
|
c = getopt (7, argv, "+abp:q:");
|
||||||
if (!(c == -1))
|
if (!(c == -1))
|
||||||
return 4;
|
return 4;
|
||||||
if (!(strcmp (argv[0], "program") == 0))
|
if (!(strcmp (argv[0], "program") == 0))
|
||||||
|
@ -181,7 +177,9 @@ main ()
|
||||||
}
|
}
|
||||||
/* Detect MacOS 10.5, AIX 7.1 bug. */
|
/* Detect MacOS 10.5, AIX 7.1 bug. */
|
||||||
{
|
{
|
||||||
char *argv[3] = { "program", "-ab", NULL };
|
static char program[] = "program";
|
||||||
|
static char ab[] = "-ab";
|
||||||
|
char *argv[3] = { program, ab, NULL };
|
||||||
optind = OPTIND_MIN;
|
optind = OPTIND_MIN;
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
if (getopt (2, argv, "ab:") != 'a')
|
if (getopt (2, argv, "ab:") != 'a')
|
||||||
|
@ -239,19 +237,22 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
|
and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
|
||||||
OSF/1 5.1, Solaris 10. */
|
OSF/1 5.1, Solaris 10. */
|
||||||
{
|
{
|
||||||
char *myargv[3];
|
static char conftest[] = "conftest";
|
||||||
myargv[0] = "conftest";
|
static char plus[] = "-+";
|
||||||
myargv[1] = "-+";
|
char *argv[3] = { conftest, plus, NULL };
|
||||||
myargv[2] = 0;
|
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
if (getopt (2, myargv, "+a") != '?')
|
if (getopt (2, argv, "+a") != '?')
|
||||||
result |= 1;
|
result |= 1;
|
||||||
}
|
}
|
||||||
/* This code succeeds on glibc 2.8, mingw,
|
/* This code succeeds on glibc 2.8, mingw,
|
||||||
and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
|
and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
|
||||||
IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
|
IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
|
||||||
{
|
{
|
||||||
char *argv[] = { "program", "-p", "foo", "bar", NULL };
|
static char program[] = "program";
|
||||||
|
static char p[] = "-p";
|
||||||
|
static char foo[] = "foo";
|
||||||
|
static char bar[] = "bar";
|
||||||
|
char *argv[] = { program, p, foo, bar, NULL };
|
||||||
|
|
||||||
optind = 1;
|
optind = 1;
|
||||||
if (getopt (4, argv, "p::") != 'p')
|
if (getopt (4, argv, "p::") != 'p')
|
||||||
|
@ -265,7 +266,10 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
}
|
}
|
||||||
/* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
|
/* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
|
||||||
{
|
{
|
||||||
char *argv[] = { "program", "foo", "-p", NULL };
|
static char program[] = "program";
|
||||||
|
static char foo[] = "foo";
|
||||||
|
static char p[] = "-p";
|
||||||
|
char *argv[] = { program, foo, p, NULL };
|
||||||
optind = 0;
|
optind = 0;
|
||||||
if (getopt (3, argv, "-p") != 1)
|
if (getopt (3, argv, "-p") != 1)
|
||||||
result |= 16;
|
result |= 16;
|
||||||
|
@ -274,13 +278,26 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
}
|
}
|
||||||
/* This code fails on glibc 2.11. */
|
/* This code fails on glibc 2.11. */
|
||||||
{
|
{
|
||||||
char *argv[] = { "program", "-b", "-a", NULL };
|
static char program[] = "program";
|
||||||
|
static char b[] = "-b";
|
||||||
|
static char a[] = "-a";
|
||||||
|
char *argv[] = { program, b, a, NULL };
|
||||||
optind = opterr = 0;
|
optind = opterr = 0;
|
||||||
if (getopt (3, argv, "+:a:b") != 'b')
|
if (getopt (3, argv, "+:a:b") != 'b')
|
||||||
result |= 64;
|
result |= 64;
|
||||||
else if (getopt (3, argv, "+:a:b") != ':')
|
else if (getopt (3, argv, "+:a:b") != ':')
|
||||||
result |= 64;
|
result |= 64;
|
||||||
}
|
}
|
||||||
|
/* This code dumps core on glibc 2.14. */
|
||||||
|
{
|
||||||
|
static char program[] = "program";
|
||||||
|
static char w[] = "-W";
|
||||||
|
static char dummy[] = "dummy";
|
||||||
|
char *argv[] = { program, w, dummy, NULL };
|
||||||
|
optind = opterr = 1;
|
||||||
|
if (getopt (3, argv, "W;") != 'W')
|
||||||
|
result |= 128;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_func_getopt_gnu=yes],
|
[gl_cv_func_getopt_gnu=yes],
|
||||||
|
|
|
@ -55,6 +55,7 @@ AC_DEFUN([gl_EARLY],
|
||||||
# Code from module pthread_sigmask:
|
# Code from module pthread_sigmask:
|
||||||
# Code from module readlink:
|
# Code from module readlink:
|
||||||
# Code from module signal:
|
# Code from module signal:
|
||||||
|
# Code from module sigprocmask:
|
||||||
# Code from module socklen:
|
# Code from module socklen:
|
||||||
# Code from module ssize_t:
|
# Code from module ssize_t:
|
||||||
# Code from module stat:
|
# Code from module stat:
|
||||||
|
@ -142,7 +143,10 @@ if test $REPLACE_MKTIME = 1; then
|
||||||
fi
|
fi
|
||||||
gl_TIME_MODULE_INDICATOR([mktime])
|
gl_TIME_MODULE_INDICATOR([mktime])
|
||||||
gl_MULTIARCH
|
gl_MULTIARCH
|
||||||
gl_PTHREAD_SIGMASK
|
gl_FUNC_PTHREAD_SIGMASK
|
||||||
|
if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then
|
||||||
|
AC_LIBOBJ([pthread_sigmask])
|
||||||
|
fi
|
||||||
gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask])
|
gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask])
|
||||||
gl_FUNC_READLINK
|
gl_FUNC_READLINK
|
||||||
if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
|
if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
|
||||||
|
@ -184,6 +188,7 @@ AC_REQUIRE([AC_C_INLINE])
|
||||||
gl_UNISTD_H
|
gl_UNISTD_H
|
||||||
gl_gnulib_enabled_dosname=false
|
gl_gnulib_enabled_dosname=false
|
||||||
gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false
|
gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false
|
||||||
|
gl_gnulib_enabled_sigprocmask=false
|
||||||
gl_gnulib_enabled_stat=false
|
gl_gnulib_enabled_stat=false
|
||||||
gl_gnulib_enabled_strtoull=false
|
gl_gnulib_enabled_strtoull=false
|
||||||
gl_gnulib_enabled_verify=false
|
gl_gnulib_enabled_verify=false
|
||||||
|
@ -201,6 +206,18 @@ AC_SUBST([LTLIBINTL])
|
||||||
gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=true
|
gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=true
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
func_gl_gnulib_m4code_sigprocmask ()
|
||||||
|
{
|
||||||
|
if ! $gl_gnulib_enabled_sigprocmask; then
|
||||||
|
gl_SIGNALBLOCKING
|
||||||
|
if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
|
||||||
|
AC_LIBOBJ([sigprocmask])
|
||||||
|
gl_PREREQ_SIGPROCMASK
|
||||||
|
fi
|
||||||
|
gl_SIGNAL_MODULE_INDICATOR([sigprocmask])
|
||||||
|
gl_gnulib_enabled_sigprocmask=true
|
||||||
|
fi
|
||||||
|
}
|
||||||
func_gl_gnulib_m4code_stat ()
|
func_gl_gnulib_m4code_stat ()
|
||||||
{
|
{
|
||||||
if ! $gl_gnulib_enabled_stat; then
|
if ! $gl_gnulib_enabled_stat; then
|
||||||
|
@ -246,7 +263,7 @@ gl_STDLIB_MODULE_INDICATOR([strtoull])
|
||||||
if test $REPLACE_LSTAT = 1; then
|
if test $REPLACE_LSTAT = 1; then
|
||||||
func_gl_gnulib_m4code_stat
|
func_gl_gnulib_m4code_stat
|
||||||
fi
|
fi
|
||||||
if test $REPLACE_PTHREAD_SIGMASK = 1; then
|
if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then
|
||||||
func_gl_gnulib_m4code_sigprocmask
|
func_gl_gnulib_m4code_sigprocmask
|
||||||
fi
|
fi
|
||||||
if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
|
if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
|
||||||
|
@ -261,6 +278,7 @@ gl_STDLIB_MODULE_INDICATOR([strtoull])
|
||||||
m4_pattern_allow([^gl_GNULIB_ENABLED_])
|
m4_pattern_allow([^gl_GNULIB_ENABLED_])
|
||||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname])
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname])
|
||||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36])
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36])
|
||||||
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_sigprocmask], [$gl_gnulib_enabled_sigprocmask])
|
||||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat])
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat])
|
||||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull])
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull])
|
||||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_verify], [$gl_gnulib_enabled_verify])
|
AM_CONDITIONAL([gl_GNULIB_ENABLED_verify], [$gl_gnulib_enabled_verify])
|
||||||
|
@ -434,6 +452,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/md5.h
|
lib/md5.h
|
||||||
lib/mktime-internal.h
|
lib/mktime-internal.h
|
||||||
lib/mktime.c
|
lib/mktime.c
|
||||||
|
lib/pthread_sigmask.c
|
||||||
lib/readlink.c
|
lib/readlink.c
|
||||||
lib/sha1.c
|
lib/sha1.c
|
||||||
lib/sha1.h
|
lib/sha1.h
|
||||||
|
@ -442,6 +461,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/sha512.c
|
lib/sha512.c
|
||||||
lib/sha512.h
|
lib/sha512.h
|
||||||
lib/signal.in.h
|
lib/signal.in.h
|
||||||
|
lib/sigprocmask.c
|
||||||
lib/stat.c
|
lib/stat.c
|
||||||
lib/stdarg.in.h
|
lib/stdarg.in.h
|
||||||
lib/stdbool.in.h
|
lib/stdbool.in.h
|
||||||
|
@ -485,6 +505,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
m4/sha256.m4
|
m4/sha256.m4
|
||||||
m4/sha512.m4
|
m4/sha512.m4
|
||||||
m4/signal_h.m4
|
m4/signal_h.m4
|
||||||
|
m4/signalblocking.m4
|
||||||
m4/socklen.m4
|
m4/socklen.m4
|
||||||
m4/ssize_t.m4
|
m4/ssize_t.m4
|
||||||
m4/st_dm_mode.m4
|
m4/st_dm_mode.m4
|
||||||
|
|
|
@ -1,26 +1,77 @@
|
||||||
# pthread_sigmask.m4 serial 2
|
# pthread_sigmask.m4 serial 7
|
||||||
dnl Copyright (C) 2011 Free Software Foundation, Inc.
|
dnl Copyright (C) 2011 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
dnl with or without modifications, as long as this notice is preserved.
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
AC_DEFUN([gl_PTHREAD_SIGMASK],
|
AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
|
||||||
[
|
[
|
||||||
|
AC_CHECK_FUNCS_ONCE([pthread_sigmask])
|
||||||
|
LIB_PTHREAD_SIGMASK=
|
||||||
m4_ifdef([gl_THREADLIB], [
|
m4_ifdef([gl_THREADLIB], [
|
||||||
AC_REQUIRE([gl_THREADLIB])
|
AC_REQUIRE([gl_THREADLIB])
|
||||||
if test "$gl_threads_api" = posix; then
|
if test "$gl_threads_api" = posix; then
|
||||||
gl_save_LIBS="$LIBS"
|
if test $ac_cv_func_pthread_sigmask = yes; then
|
||||||
LIBS="$LIBS $LIBMULTITHREAD"
|
dnl pthread_sigmask is available without -lpthread.
|
||||||
AC_CHECK_FUNCS([pthread_sigmask])
|
:
|
||||||
LIBS="$gl_save_LIBS"
|
else
|
||||||
|
if test -n "$LIBMULTITHREAD"; then
|
||||||
|
AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD],
|
||||||
|
[gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD],
|
||||||
|
[gl_save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS $LIBMULTITHREAD"
|
||||||
|
AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[#include <pthread.h>
|
||||||
|
#include <signal.h>
|
||||||
|
]],
|
||||||
|
[[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
|
||||||
|
],
|
||||||
|
[gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes],
|
||||||
|
[gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no])
|
||||||
|
LIBS="$gl_save_LIBS"
|
||||||
|
])
|
||||||
|
if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
|
||||||
|
dnl pthread_sigmask is available with -lpthread.
|
||||||
|
LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD"
|
||||||
|
else
|
||||||
|
dnl pthread_sigmask is not available at all.
|
||||||
|
HAVE_PTHREAD_SIGMASK=0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dnl pthread_sigmask is not available at all.
|
||||||
|
HAVE_PTHREAD_SIGMASK=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
ac_cv_func_pthread_sigmask=no
|
dnl pthread_sigmask may exist but does not interoperate with the chosen
|
||||||
|
dnl multithreading facility.
|
||||||
|
dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask,
|
||||||
|
dnl but it is equivalent to sigprocmask, so we choose to emulate
|
||||||
|
dnl pthread_sigmask with sigprocmask also in this case. This yields fewer
|
||||||
|
dnl link dependencies.
|
||||||
|
if test $ac_cv_func_pthread_sigmask = yes; then
|
||||||
|
REPLACE_PTHREAD_SIGMASK=1
|
||||||
|
else
|
||||||
|
HAVE_PTHREAD_SIGMASK=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
] ,[
|
||||||
|
dnl gl_THREADLIB is not in use. Assume the application wants
|
||||||
|
dnl POSIX semantics.
|
||||||
|
if test $ac_cv_func_pthread_sigmask != yes; then
|
||||||
|
gl_save_LIBS=$LIBS
|
||||||
|
AC_SEARCH_LIBS([pthread_sigmask], [pthread c_r])
|
||||||
|
LIBS=$gl_save_LIBS
|
||||||
|
if test "$ac_cv_search_pthread_sigmask" = no; then
|
||||||
|
HAVE_PTHREAD_SIGMASK=0
|
||||||
|
elif test "$ac_cv_search_pthread_sigmask" != 'none required'; then
|
||||||
|
LIB_PTHREAD_SIGMASK=$ac_cv_search_pthread_sigmask
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
], [
|
|
||||||
AC_CHECK_FUNCS_ONCE([pthread_sigmask])
|
|
||||||
])
|
])
|
||||||
|
AC_SUBST([LIB_PTHREAD_SIGMASK])
|
||||||
if test $ac_cv_func_pthread_sigmask = no; then
|
dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when
|
||||||
REPLACE_PTHREAD_SIGMASK=1
|
dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the
|
||||||
fi
|
dnl same: either both empty or both "-lpthread".
|
||||||
])
|
])
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# signal_h.m4 serial 14
|
# signal_h.m4 serial 16
|
||||||
dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
|
dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -64,6 +64,7 @@ AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
|
||||||
GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION])
|
GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION])
|
||||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
|
HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
|
||||||
|
HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK])
|
||||||
HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T])
|
HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T])
|
||||||
HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T])
|
HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T])
|
||||||
HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION])
|
HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION])
|
||||||
|
|
25
m4/signalblocking.m4
Normal file
25
m4/signalblocking.m4
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# signalblocking.m4 serial 12
|
||||||
|
dnl Copyright (C) 2001-2002, 2006-2011 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.
|
||||||
|
|
||||||
|
# Determine available signal blocking primitives. Three different APIs exist:
|
||||||
|
# 1) POSIX: sigemptyset, sigaddset, sigprocmask
|
||||||
|
# 2) SYSV: sighold, sigrelse
|
||||||
|
# 3) BSD: sigblock, sigsetmask
|
||||||
|
# For simplicity, here we check only for the POSIX signal blocking.
|
||||||
|
AC_DEFUN([gl_SIGNALBLOCKING],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
|
||||||
|
AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
|
||||||
|
if test $gl_cv_type_sigset_t = yes; then
|
||||||
|
AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1])
|
||||||
|
fi
|
||||||
|
if test -z "$gl_cv_func_sigprocmask"; then
|
||||||
|
HAVE_POSIX_SIGNALBLOCKING=0
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/sigprocmask.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:])
|
|
@ -269,6 +269,8 @@ LIBSELINUX_LIBS = @LIBSELINUX_LIBS@
|
||||||
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
||||||
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
||||||
|
|
||||||
|
LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
|
||||||
|
|
||||||
INTERVALS_H = dispextern.h intervals.h composite.h
|
INTERVALS_H = dispextern.h intervals.h composite.h
|
||||||
|
|
||||||
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
|
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
|
||||||
|
@ -383,7 +385,7 @@ LIBES = $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \
|
||||||
$(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
|
$(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
|
||||||
$(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
|
$(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
|
||||||
$(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
|
$(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
|
||||||
$(LIBGNUTLS_LIBS) \
|
$(LIBGNUTLS_LIBS) $(LIB_PTHREAD_SIGMASK) \
|
||||||
$(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC)
|
$(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC)
|
||||||
|
|
||||||
all: emacs$(EXEEXT) $(OTHER_FILES)
|
all: emacs$(EXEEXT) $(OTHER_FILES)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue