Bruno Haible [Sun, 1 Sep 2019 15:34:03 +0000 (17:34 +0200)]
gitsub.sh: Add support for shallow-cloning of subdirectories.
* top/gitsub.sh (func_usage): Document allowed git options with
'git pull'.
(func_pull): Accept GIT_OPTIONS argument.
(pull): Parse git options before complaining about too many arguments.
Pass the git options to func_pull.
Bruno Haible [Wed, 28 Aug 2019 16:03:43 +0000 (18:03 +0200)]
isfinite, isinf, isnan, signbit: Fix error in C++ mode on mingw.
Reported by Martin Storsjö <martin@martin.st> in
<https://lists.gnu.org/archive/html/bug-gnulib/2019-08/msg00075.html>.
* lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Add more arguments.
(isfinite, isinf, isnan, signbit): On platforms that use C++ include
files from GCC 6 or newer, use an override through '#define', because
the inline definitions in the platform's <cmath> cannot be overridden
in another way.
Bruno Haible [Wed, 28 Aug 2019 08:34:40 +0000 (10:34 +0200)]
isfinite, isinf, isnan, signbit: Fix error in C++ mode on mingw.
Reported by Martin Storsjö <martin@martin.st> in
<https://lists.gnu.org/archive/html/bug-gnulib/2019-08/msg00075.html>.
* lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Add more arguments.
(isfinite, isinf, isnan, signbit): On mingw, use an override through
'#define', because the inline definitions in the platform's <cmath>
cannot be overridden in another way.
Paul Eggert [Wed, 28 Aug 2019 01:04:03 +0000 (18:04 -0700)]
Revert macOS INT_MULTIPLY_WRAPV patch
Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2019-08/msg00076.html
* lib/intprops.h (_GL_HAS___builtin_mul_overflow): Remove.
(_GL_HAS_BUILTIN_MUL_OVERFLOW):
Go back to working around the Clang bug on macOS.
Paul Eggert [Tue, 27 Aug 2019 11:23:44 +0000 (04:23 -0700)]
Speed up INT_MULTIPLY_WRAPV on macOS
Assume that __builtin_mul_overflow works OK with Clang on macOS.
Mattias Engdegård says it’s safe to assume the relevant library
is always available there.
* lib/intprops.h (_GL_HAS___builtin_mul_overflow):
New temporary internal macro.
(_GL_HAS_BUILTIN_MUL_OVERFLOW):
No need to work around the Clang bug on macOS.
Paul Eggert [Mon, 26 Aug 2019 02:29:15 +0000 (19:29 -0700)]
intprops.h, verify.h: port better to clang
Improve code generated by INT_ADD_WRAPV and INT_SUBTRACT_WRAPV
with Clang. Problem reported privately by Mattias Engdegård.
Also, insulate intprops.h and verify.h better against each other’s
definitions of __has_builtin on non-Clang hosts.
* lib/intprops.h (__has_builtin): Define a temporary substitute
if __has_builtin is not already defined.
(_GL_HAS___builtin_add_overflow, _GL_TEMPDEF___has_builtin):
New temporary internal macros.
(_GL_HAS_BUILTIN_ADD_OVERFLOW, _GL_HAS_BUILTIN_MUL_OVERFLOW):
Now two separate macros, replacing the old
_GL_HAS_BUILTIN_OVERFLOW, since we no longer assume that
__builtin_mul_overflow is like the rest. All uses changed.
(INT_ADD_WRAPV, INT_SUBTRACT_WRAPV, INT_MULTIPLY_WRAPV):
Adjust to above changes.
(_GL_INT_OP_WRAPV): Remove ‘builtin’ arg, since it’s no
longer relevant. All uses changed.
* lib/verify.h (__has_builtin): Treat like intprops.h,
so that the two .h files do not collide with each other.
(_GL_HAS___builtin_unreachable, _GL_HAS___builtin_trap)
(_GL_TEMPDEF___has_builtin): New temporary internal macros.
Bruno Haible [Sat, 24 Aug 2019 15:34:29 +0000 (17:34 +0200)]
crypto/gc-sha256, crypto/gc-sha512: New modules.
* lib/gc.h (gc_sha256, gc_sha512): New declarations.
* lib/gc-gnulib.c: Include sha256.h, sha512.h.
(MAX_DIGEST_SIZE): Set to 64.
(_gc_hash_ctx, gc_hash_open, gc_hash_digest_length, gc_hash_write,
gc_hash_read, gc_hash_buffer): Add support for sha256 and sha512.
(gc_sha256, gc_sha512): New functions.
* lib/gc-libgcrypt.c (gc_sha256, gc_sha512): New functions.
* modules/crypto/gc-sha256: New file, based on modules/crypto/gc-sha1.
* modules/crypto/gc-sha512: New file, based on modules/crypto/gc-sha1.
Bruno Haible [Sat, 24 Aug 2019 14:16:33 +0000 (16:16 +0200)]
crypto/gc-sm3: Fix compilation error with --with-libgcrypt.
* m4/gc-sm3.m4 (gl_GC_SM3): Test whether libgcrypt supports SM3. Define
LIBGCRYPT_HAS_MD_SM3.
* lib/gc-libgcrypt.c: Include sm3.h.
(_gc_hash_ctx, gc_hash_open, gc_hash_hmac_setkey, gc_hash_write,
gc_hash_read, gc_hash_close, gc_hash_buffer, gc_sm3): Use the gnulib
implementation if libgcrypt does not support SM3.
Bruno Haible [Sat, 24 Aug 2019 12:28:15 +0000 (14:28 +0200)]
crypto/gc-{md[24],rijndael} tests: Fix link error with --with-libgcrypt.
* modules/crypto/gc-md2-tests (test_gc_md2_LDADD): New variable.
* modules/crypto/gc-md4-tests (test_gc_md4_LDADD): New variable.
* modules/crypto/gc-rijndael-tests (test_gc_rijndael_LDADD): New
variable.
Bruno Haible [Sat, 24 Aug 2019 09:07:23 +0000 (11:07 +0200)]
gc: Fix configuration with --with-libgcrypt.
* m4/libgcrypt.m4: New file, copied from libgcrypt/src/libgcrypt.m4.
* modules/crypto/gc (Files): Add it.
* m4/gc.m4 (gl_GC): Assume AM_PATH_LIBGCRYPT is defined.
Eric Blake [Tue, 20 Aug 2019 16:34:34 +0000 (11:34 -0500)]
accept4: Support SOCK_NONBLOCK, if defined
Ideally, we would improve our replacement <sys/socket.h> to define a
replacement SOCK_NONBLOCK on all platforms, and teach socket() to
honor it as well; but that's a bigger task. In the meantime, if the
platform already has SOCK_NONBLOCK, we should honor it when doing a
fallback.
* lib/accept4.c (accept4): If SOCK_NONBLOCK is defined, honor it.
Eric Blake [Tue, 20 Aug 2019 16:26:17 +0000 (11:26 -0500)]
accept4: Fix compilation when native accept4() exists.
Reported by Richard W.M. Jones <rjones@redhat.com> in
https://lists.gnu.org/archive/html/bug-gnulib/2019-08/msg00029.html
* lib/accept4.c (accept4): Match witness symbol to m4 file update.
Paul Eggert [Thu, 15 Aug 2019 05:24:49 +0000 (22:24 -0700)]
intprops: support uchar, ushort _WRAPV dests
* lib/intprops.h (_GL_INT_OP_WRAPV_SMALLISH): New macro, defined
when __builtin_add_overflow etc. and _Generic are not used.
(_GL_INT_OP_WRAPV): Use it to support destinations that
are unsigned char or unsigned short, even in compilers
that lack __typeof__ and are not C11-compatible.
Paul Eggert [Thu, 15 Aug 2019 01:05:57 +0000 (18:05 -0700)]
intprops: pacify picky GCC
* lib/intprops.h (_GL_BUILTIN_MUL_OVERFLOW):
Pacify GCC’s complaints about ignoring __builtin_mul_overflow’s
possibly-incorrect result.
(_GL_INT_MULTIPLY_RANGE_OVERFLOW): Pacify GCC’s complaints
about (A) used as a boolean, when A is an expression like 3 * 4.
Paul Eggert [Thu, 15 Aug 2019 00:43:46 +0000 (17:43 -0700)]
intprops: support unsigned *_WRAPV results
Add support for unsigned, unsigned long, and unsigned long long
results to INT_ADD_WRAPV, INT_SUBTRACT_WRAPV, and
INT_MULTIPLY_WRAPV. Also, work around GCC bug 91450, and fix a
bug with unsigned inputs reported by Eli Zaretskii in:
https://lists.gnu.org/r/bug-gnulib/2019-08/msg00012.html
* config/srclist.txt: Break the glibc connection for intprops.h
temporarily, while more testing is done in Gnulib-using apps.
* lib/intprops.h (INT_ADD_WRAPV, INT_SUBTRACT_WRAPV)
(INT_MULTIPLY_WRAPV, _GL_INT_OP_WRAPV, _GL_INT_OP_WRAPV_LONGISH):
Support unsigned results no narrower than unsigned int. Report
overflow correctly if some arguments are unsigned.
(_GL_BUILTIN_MUL_OVERFLOW): New macro, to work around GCC bug 91450.
(_GL_INT_OP_CALC): Simplify now that the OVERFLOW argument does
the right thing with narrow args.
(_GL_INT_OP_CALC1): Remove. All callers removed.
(_GL_INT_ADD_RANGE_OVERFLOW, _GL_INT_SUBTRACT_RANGE_OVERFLOW)
(_GL_INT_MULTIPLY_RANGE_OVERFLOW): New macros.
* tests/test-intprops.c: Check for bugs and test new behavior.
Paul Eggert [Mon, 12 Aug 2019 21:57:08 +0000 (14:57 -0700)]
verify: improve diagnostic quality in recent GCC
If ‘verify’ fails in a deeply-nested macro, GCC does not output a
useful line number containing the top-level caller of the macro.
So, bring back the older way of issuing a diagnostic containing
the top-level call’s arg, so that it is easier to diagnose
‘verify’ failures with recent GCC.
* lib/verify.h (_GL_VERIFY_TRUE, _GL_VERIFY_TYPE):
Bring back DIAGNOSTIC arg. All callers changed.
(verify): Just use _GL_VERIFY.
Assaf Gordon [Sat, 10 Aug 2019 19:17:49 +0000 (13:17 -0600)]
parse-datetime: fix 'T' military timezone handling
* lib/parse-datetime.y (zone):
follow-up to the previous commit: the 'T' case is handled outside the
conversion table (used as either military timezone UTC-7 or ISO8601
separator). Change it from "HOUR(7)" to "-HOUR(7)" to match other
timezone letters.
Paul Eggert [Fri, 9 Aug 2019 20:47:41 +0000 (13:47 -0700)]
parse-datetime: fix military timezone letters
Problem and trivial fix reported by Neil Hoggarth in:
https://lists.gnu.org/r/bug-gnulib/2019-08/msg00005.html
* lib/parse-datetime.y (military_table):
Do it the right way, not the RFC 822 way.
Eric Blake [Thu, 8 Aug 2019 03:03:31 +0000 (22:03 -0500)]
configmake: Avoid namespace pollution issue on mingw.
Mingw includes a header that declares an enum typedef named DATADIR,
pulled in when including <winsock2.h>; compilation fails if DATADIR
has already been defined as a macro expanding to a string prior to
that inclusion. Although the configmake module documents that it
should generally be included only after system headers, it is just as
easy to make configmake.h robust to this particular issue by including
the system header first if it exists.
* modules/configmake (Makefile.am): If the project uses
<winsock2.h>, include that header before defining DATADIR.
Reported by libvirt: https://lists.gnu.org/archive/html/bug-gnulib/2019-07/msg00089.html
Bruno Haible [Thu, 25 Jul 2019 01:19:53 +0000 (03:19 +0200)]
pthread-h: Fix definitions of types and macros on mingw.
* lib/pthread.in.h (pthread_t, pthread_attr_t, PTHREAD_CREATE_JOINABLE,
PTHREAD_CREATE_DETACHED): Define also when module 'pthread-thread' is
not in use.
(pthread_once_t, PTHREAD_ONCE_INIT): Define also when module
'pthread-once' is not in use.
(pthread_mutex_t, pthread_mutexattr_t, PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_ERRORCHECK,
PTHREAD_MUTEX_RECURSIVE): Define also when module 'pthread-mutex' is not
in use.
(pthread_rwlock_t, pthread_rwlockattr_t, PTHREAD_RWLOCK_INITIALIZER):
Define also when module 'pthread-rwlock' is not in use.
(pthread_cond_t, pthread_condattr_t, PTHREAD_COND_INITIALIZER): Define
also when module 'pthread-cond' is not in use.
(pthread_key_t, PTHREAD_DESTRUCTOR_ITERATIONS): Define also when module
'pthread-tss' is not in use.
(pthread_spinlock_t): Define also when module 'pthread-spin' is not in
use.
Bruno Haible [Fri, 19 Jul 2019 03:00:10 +0000 (05:00 +0200)]
parse-datetime: Require Bison 2.4 or newer.
* m4/parse-datetime.m4 (gl_PARSE_DATETIME): Set PARSE_DATETIME_BISON.
Code taken from gettext's intl.m4.
* modules/parse-datetime (Makefile.am): Use PARSE_DATETIME_BISON instead
of YACC.
Bernhard Voelker [Thu, 18 Jul 2019 23:17:25 +0000 (01:17 +0200)]
parse-datetime: avoid "%pure-parser" deprecation warning from Bison 3.4
* lib/parse-datetime.y: Use "%define api.pure" rather than obsolescent
"%pure-parser". The former is available since Bison 2.3b (2008, [1]),
while the latter is marked as obsolete since version 3.4 (May 2019, [2]):
Bruno Haible [Mon, 15 Jul 2019 00:41:09 +0000 (02:41 +0200)]
pthread-once: Add tests.
* tests/test-pthread-once1.c: New file, based on tests/test-once.c and
tests/test-call_once.c.
* tests/test-pthread-once2.c: New file, based on tests/test-lock.c and
tests/test-mtx.c.
* modules/pthread-once-tests: New file.
Bruno Haible [Mon, 15 Jul 2019 00:37:41 +0000 (02:37 +0200)]
pthread-once: New module.
* lib/pthread-once.c: New file.
* m4/pthread-once.m4: New file.
* modules/pthread-once: New file.
* doc/posix-functions/pthread_once.texi: Mention the new module.
Bruno Haible [Mon, 15 Jul 2019 00:36:28 +0000 (02:36 +0200)]
pthread-h: Prepare for adding new modules.
* lib/pthread.in.h: Define the types and macros for each of the
facilities separately.
* m4/pthread_h.m4 (gl_PTHREAD_H): Set HAVE_PTHREAD_CREATE_DETACHED,
HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_MUTEX_ROBUST,
HAVE_PTHREAD_PROCESS_SHARED.
(gl_PTHREAD_H_DEFAULTS): Initialize HAVE_PTHREAD_CREATE_DETACHED,
HAVE_PTHREAD_MUTEX_RECURSIVE, HAVE_PTHREAD_MUTEX_ROBUST,
HAVE_PTHREAD_PROCESS_SHARED.
* modules/pthread-h (Makefile.am): Substitute
HAVE_PTHREAD_CREATE_DETACHED, HAVE_PTHREAD_MUTEX_RECURSIVE,
HAVE_PTHREAD_MUTEX_ROBUST, HAVE_PTHREAD_PROCESS_SHARED.
Bruno Haible [Mon, 15 Jul 2019 00:36:21 +0000 (02:36 +0200)]
pthread-h: Respect --enable-threads={posix|windows} option on mingw.
* m4/pthread_h.m4 (gl_PTHREAD_H): Require gl_THREADLIB. Set
HAVE_PTHREAD_H if gl_threads_api is 'windows'.
(LIB_PTHREAD): Rely on $LIBMULTITHREAD from threadlib.m4.
* modules/pthread (Link): Change to $(LIBMULTITHREAD).
* modules/pthread-h (Depends-on): Add threadlib.
(Link): Change to $(LIBTHREAD).
* modules/pthread-h-c++-tests (test_pthread_c___LDADD): Use
$(LIBMULTITHREAD) instead of $(LIB_PTHREAD).
Bruno Haible [Mon, 15 Jul 2019 00:36:13 +0000 (02:36 +0200)]
pthread-h: New module.
* lib/pthread.in.h: Define replacement functions only if GNULIB_PTHREAD
is 1.
* m4/pthread_h.m4: Renamed from m4/pthread.m4.
(gl_PTHREAD_H): Renamed from gl_PTHREAD_CHECK. Don't test whether
<pthread.h> pollutes the namespace; instead, prepare for generating a
pthread.h always. Substitute HAVE_PTHREAD_H here.
(gl_PTHREAD_H_DEFAULTS): Renamed from gl_PTHREAD_DEFAULTS. Initialize
GNULIB_PTHREAD. Don't initialize HAVE_PTHREAD_H here.
* modules/pthread-h: New file, based on modules/pthread.
* modules/pthread: Rely on 'pthread-h'.
* m4/pthread_mutex_timedlock.m4 (gl_FUNC_PTHREAD_MUTEX_TIMEDLOCK):
Update.
* modules/pthread_mutex_timedlock (Depends-on): Add pthread-h. Remove
pthread.
Bruno Haible [Mon, 15 Jul 2019 00:36:10 +0000 (02:36 +0200)]
sched_yield: New module.
* lib/sched.in.h: Add _GL_FUNCDECL_RPL, _GL_WARN_ON_USE placeholders.
(sched_yield): New declaration.
* lib/sched_yield.c: New file.
* m4/sched_yield.m4: New file.
* m4/sched_h.m4 (gl_SCHED_H): Require gl_SCHED_H_DEFAULTS. Arrange to
provide a replacement sched.h always. Test whether sched_yield is
declared.
(gl_SCHED_MODULE_INDICATOR, gl_SCHED_H_DEFAULTS): New macros.
* modules/sched (Depends-on): Add snippet/c++defs, snippet/warn-on-use.
(Makefile.am): Provide a replacement sched.h always. Substitute
GNULIB_SCHED_YIELD, HAVE_SCHED_YIELD, REPLACE_SCHED_YIELD,
_GL_FUNCDECL_RPL, _GL_WARN_ON_USE.
* modules/sched_yield: New file.
* doc/posix-functions/sched_yield.texi: Mention the new module.
Bruno Haible [Mon, 15 Jul 2019 00:36:05 +0000 (02:36 +0200)]
windows-timedrwlock: New module.
* lib/windows-timedrwlock.h: New file, based on windows-rwlock.h.
* lib/windows-timedrwlock.c: New file, based on windows-rwlock.c and
windows-cond.c.
* lib/windows-cond.h (struct glwthread_waitqueue_link): Protect against
redefinition conflict with windows-timedrwlock.h.
* modules/windows-timedrwlock: New file.
Paul Eggert [Sun, 7 Jul 2019 02:25:24 +0000 (19:25 -0700)]
areadlink-with-size: avoid realloc when size==0
* lib/areadlink-with-size.c (areadlink_with_size):
* lib/areadlinkat-with-size.c (areadlinkat_with_size):
Reallocate at the end to the actual size, to avoid memory waste,
as suggested by Bruno Haible. But when the guessed size is zero -
useful when the size is unknown - do the initial small readlink
into the stack, to avoid that realloc in the usual case.
Replace manually crafted hex regexes with [:xdigit:]
* build-aux/gitlog-to-changelog (parse_amend_file)
(git_dir_option):
Replace various combinations of [0-9a-fA-F] with [[:xdigit:]].
This patch is backported from Emacs (Bug#36167).