* doc/posix-headers/stdint.texi: Document this.
* lib/stdint.in.h: Add support for INTMAX_WIDTH. etc.
* m4/stdint.m4 (gl_STDINT_H): Require gl_LIMITS_H. Check for
support for INTMAX_WIDTH, etc. as well as for support for just C99.
* modules/stdint (Depends-on): Add limits-h.
(Makefile.am): Substitute HAVE_C99_STDINT_H.
* modules/stdint-tests (Depends-on): Add extensions, so that
INTMAX_MAX etc. are defined.
* tests/test-stdint.c: Verify the new macros.
* lib/stdint.in.h: Include wchar.h only when HAVE_WCHAR_H is 1. Also
include the necessary prerequisites.
* m4/stdint.m4 (gl_STDINT_H): Test whether wchar.h exists.
* modules/stdint (Depends-on): Remove wchar.
(Makefile.am): Substitute HAVE_WCHAR_H.
This reverts part of a 2007-01-06 commit. Reported by Paul Eggert.
Back out yesterday's big merge from the libposix branch, except for the
openat-die.c change that was reviewed and approved by Paul Eggert.
Put the ChangeLog entry at the top, to reflect the order of changes in the
master branch.
Modify gnulib-tool to strip them from generated Makefile.am-s where
they are not needed. Also, replace M4 macro prefixes when requested.
Finally, omit calls to error() for libposix.
32-bit unsigned int. Problem reported by Matthew Woehlke in:
http://lists.gnu.org/archive/html/bug-coreutils/2006-10/msg00062.html
More generally, don't assume that 64-bit signed int is available
if unsigned int is, and vice versa.
* lib/inttypes_.h (_PRIu64_PREFIX, _SCNu64_PREFIX): Depend on
unsigned symbols, not on their signed counterparts.
* lib/stdint_.h (uint64_t, uint_least64_t, uint_fast64_t, uintmax_t):
(UINT64_MAX, UINT_LEAST64_MAX, UINT_FAST64_MAX, UINTMAX_MAX):
(UINT64_C, UINTMAX_C):
Likewise.
* lib/strtoimax.c (strtoll): Depend on signed symbols, not their
unsigned counterparts.
(Have_long_long, Unsigned): New macros.
(Int): Renamed from INT.
(strtoimax): Use the new macros.
* m4/stdint.m4 (gl_STDINT_H): Require AC_TYPE_UNSIGNED_LONG_LONG_INT
and substitute HAVE_UNSIGNED_LONG_LONG_INT.
* modules/inttypes (inttypes.h): Substitute
HAVE_UNSIGNED_LONG_LONG_INT.
* modules/stdint (stdint.h): Likewise.
(Files): Add m4/ulonglong.m4.
people. However, do retain the ability to work when targets are
read-only: remove the destination and temporary files before writing
them (when generated via sed or echo), or by using the -f option for
both cp and mv commands. Suggestion to use -f from Paul Eggert.
* modules/alloca-opt, modules/argz, modules/arpa_inet:
* modules/byteswap, modules/configmake, modules/fcntl:
* modules/fnmatch, modules/getopt, modules/glob, modules/inttypes:
* modules/localcharset, modules/netinet_in, modules/poll:
* modules/stdbool, modules/stdint, modules/sys_select:
* modules/sys_socket, modules/sys_stat, modules/sysexits:
* modules/alloca-opt (Makefile.am): Work also when $@ is read-only.
Ensure that each generated file is now read-only.
* modules/argz: Likewise.
* modules/arpa_inet: Likewise.
* modules/byteswap: Likewise.
* modules/configmake: Likewise.
* modules/fcntl: Likewise.
* modules/fnmatch: Likewise.
* modules/getopt: Likewise.
* modules/glob: Likewise.
* modules/inttypes: Likewise.
* modules/netinet_in: Likewise.
* modules/poll: Likewise.
* modules/stdbool: Likewise.
* modules/stdint: Likewise.
* modules/sys_select: Likewise.
* modules/sys_socket: Likewise.
* modules/sys_stat: Likewise.
* modules/sysexits: Likewise.
* modules/localcharset: Same as above, but continue using temporary
file named "t-$@" (why different?) rather than the "$@-t" used
everywhere else.
* modules/sysexits (Makefile.am): Replace literal occurrences
of "sysexit.h" more readable, and more consistent, "$@".
Include @ABSOLUTE_INTTYPES_H@ if available, but do nothing else.
* lib/stdint_.h (_GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H): Define
just before including <inttypes.h>, to avoid circular inclusion.
* m4/inttypes.m4 (gl_INTTYPES_H): Move ABSOLUTE_INTTYPES_H code here...
* m4/stdint.m4 (gl_STDINT_H): ... from here. This undoes the most recent
change to stdint.m4, since we're now addressing the problem in a
different way.
* modules/stdint (Makefile.am): Do not substitute ABSOLUTE_INTTYPES_H.
This is to keep the terminology clean; POSIX talks about
"absolute pathnames", not "full pathnames", but the GNU
Coding Standards say to use "path" for something else;
so use "absolute" to keep both sides happy.
(gl_ABSOLUTE_HEADER): Renamed from gl_FULL_HEADER_PATH.
Set gl_absolute_header, not gl_full_header_path.
Set gl_cv_absolute_<header>, not gl_full_path_<header>.
Define ABSOLUTE_<HEADER>, not FULL_PATH_<HEADER>.
All uses changed.
* modules/inttypes (Depends-on): No longer depends on stdint.
* modules/stdint (Description): Say more about assumptions.
Say that the fast types might differ. Say macros are used.
(Files): Remove m4/size_max.m4, m4/wchar_t.m4. Add m4/longlong.m4.
(Makefile.am): Revise list of substituted symbols to match
new stdint.m4.
* modules/stdint-tests (Files): Add m4/wchar_t.m4, m4/wint_t.m4.
(configure.ac): Add gt_TYPE_WCHAR_T, gt_TYPE_WINT_T.
* tests/test-stdint.c (verify_same_types)
[! (__GNUC__ >= 2 && DO_PEDANTIC)]: Put in a decl, so that
the code conforms to C99/C89.
Test for WCHAR_MIN and WCHAR_MAX only if HAVE_WCHAR_T.
Test for WINT_MIN and WINT_MAX only if HAVE_WINT_T.
* lib/stdint_.h (_GL_STDINT_H): Renamed from _STDINT_H, to avoid
possible collision with system files.
(<stdio.h>, <time.h>, <wchar.h>) [defined __cplusplus && ! defined
__STDC_CONSTANT_MACROS)]: Do not include, since we don't need
WCHAR_MIN and WCHAR_MAX in this case.
(<stddef.h>): Do not include; no longer needed.
(<sys/types.h>): Include if @HAVE_SYS_TYPES_H@, not if
(defined(__OpenBSD__) || defined(__bsdi__) || defined(__sgi)).
(<sys/inttypes.h>): Include if @HAVE_SYS_INTTYPES_H@ &&
!@HAVE_INTTYPES_H@, not if (defined(__FreeBSD__)
&& (__FreeBSD__ >= 3) && (__FreeBSD__ <= 4)).
(__STDINT_H__) [@HAVE_STDINT_H@ && defined __sgi && ! defined
__c99]: Define, to work around IRIX <stdint.h> incompatibility.
(@FULL_PATH_STDINT_H@) [!(defined(__sgi) && @HAVE_INTTYPES_H@ &&
!defined(__c99))]: Include in this case too, since it's harmless
now.
(<inttypes.h>) [@HAVE_INTTYPES_H@]: Include, since it's no longer
dangerous to do so.
(@FULL_PATH_INTTYPES_H@) [(defined(__hpux) || defined(_AIX)) &&
@HAVE_INTTYPES_H@]: Do not include, since we now include <inttypes.h>.
(_STDINT_MIN, _STDINT_MAX): New macros.
(int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t):
(uint64_t, int_least8_t, uint_least8_t, int_least16_t):
(uint_least16_t, int_least32_t, uint_least32_t, int_least64_t):
(uint_least64_t, int_fast8_t, uint_fast8_t, int_fast16_t):
(uint_fast16_t, int_fast32_t, uint_fast32_t, int_fast64_t):
(uint_fast64_t, intptr_t, uintptr_t, intmax_t, uintmax_t): Now
macros, not typedefs; this simplifies things quite a bit.
Use long int for all types narrower than int64_t.
(intmax_t, uintmax_t, INTMAX_C, UINTMAX_C):
Define in terms of long long int or int64_t or long int,
not int64_t or int32_t. This saves some compile-time testing.
(INT8_MIN, INT8_MAX, UINT8_MAX, INT16_MIN, INT16_MAX, UINT16_MAX):
(INT32_MIN, INT32_MAX, UINT32_MAX, INT64_MIN, INT64_MAX):
(UINT64_MAX, INT_LEAST8_MIN, INT_LEAST8_MAX, UINT_LEAST8_MAX):
(INT_LEAST16_MIN, INT_LEAST16_MAX, UINT_LEAST16_MAX):
(INT_LEAST32_MIN, INT_LEAST32_MAX, UINT_LEAST32_MAX):
(INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX, INT_FAST8_MIN):
(INT_FAST8_MAX, UINT_FAST8_MAX, INT_FAST16_MIN, INT_FAST16_MAX):
(UINT_FAST16_MAX, INT_FAST32_MIN, INT_FAST32_MAX, UINT_FAST32_MAX):
(INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX, INTPTR_MIN):
(INTPTR_MAX, UINTPTR_MAX, INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX):
(PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX):
(SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX):
undef any previous version and define our own version, for
simplicity and consistency with the new macros for types.
(PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX):
(SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX):
Simplify definitions by using _STDINT_MIN and _STDINT_MAX
where appropriate. Rely on new symbols @PTRDIFF_T_SUFFIX@,
@SIG_ATOMIC_T_SUFFIX@, @SIZE_T_SUFFIX@, @WCHAR_T_SUFFIX@,
@WINT_T_SUFFIX@ to keep things simple here.
(UINT8_C, UINT16_C, UINT32_C, INT64_C, UINT64_C):
Simplify by assuming typical 8/16/32/64 host, since we're
already doing that elsewhere anyway.
Use (LONG_MAX >> 31 >> 31 == 1) rather than @HAVE_LONG_64BIT@,
and assume long long int is 64 bits if available. This
speeds up 'configure'.
* m4/longlong.m4 (AC_TYPE_LONG_LONG_INT): Backport from Autoconf 2.60,
but fix a bug, by requiring at least 64 bits.
* m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Likewise.
* m4/longlong.m4 (gl_AC_TYPE_LONG_LONG): Now just call
AC_TYPE_LONG_LONG_INT. This macro is obsolete and will go soon.
* m4/ulonglong.m4 (gl_AC_TYPE_UNSIGNED_LONG_LONG) Likewise.
* m4/stdint.m4 (gl_STDINT_H): Rewrite to accommodate stdint_.h
changes. Make 2.59 a prerequisite. Check and substitute for
HAVE_LONG_LONG_INT. Rely on Autoconf to check for stdint.h and
inttypes.h. Do not use special include files; just use the
defaults. Check for sys/inttypes.h and sys/bitypes.h in the usual
way now. Remove no-longer-needed tests for HAVE_LONG_64BIT,
HAVE_LONG_LONG_64BIT, int8_t, int16_t, int32_t, int64_t, uint8_t,
uint16_t, uint32_t uint64_t, int_least8_t, int_least16_t,
int_least32_t, int_least64_t, uint_least8_t, uint_least16_t,
uint_least32_t, uint_least64_t, int_fast8_t, int_fast16_t,
int_fast32_t, int_fast64_t, uint_fast8_t uint_fast16_t,
uint_fast32_t, uint_fast64_t, intptr_t, uintptr_t, intmax_t,
uintmax_t, INT8_MIN, INT8_MAX, UINT8_MAX, INT16_MIN, INT16_MAX,
UINT16_MAX, INT32_MIN, INT32_MAX, UINT32_MAX, INT64_MIN,
INT64_MAX, UINT64_MAX, INT_LEAST8_MIN, INT_LEAST8_MAX,
UINT_LEAST8_MAX, INT_LEAST16_MIN, INT_LEAST16_MAX,
UINT_LEAST16_MAX, INT_LEAST32_MIN, INT_LEAST32_MAX,
UINT_LEAST32_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX,
UINT_LEAST64_MAX, INT_FAST8_MIN, INT_FAST8_MAX, UINT_FAST8_MAX,
INT_FAST16_MIN, INT_FAST16_MAX, UINT_FAST16_MAX, INT_FAST32_MIN,
INT_FAST32_MAX, UINT_FAST32_MAX, INT_FAST64_MIN, INT_FAST64_MAX,
UINT_FAST64_MAX, INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX, INTMAX_MIN,
INTMAX_MAX, UINTMAX_MAX, PTRDIFF_MIN, PTRDIFF_MAX, SIG_ATOMIC_MIN,
SIG_ATOMIC_MAX, SIZE_MAX, WCHAR_MIN, WCHAR_MAX, WINT_MIN,
WINT_MAX. Check for C99 conformance more strictly, by detecting
bugs in glibc 2.4, Solaris 10, and OpenBSD 3.9. On the other hand do
not check for things that C99 does not require, e.g., int8_t. If
a test isn't needed unless <stdint.h> isn't working, and is
unlikely to be needed for any other reason, then don't do it
unless <stdint.h> isn't working. Do not check for ptrdiff_t or
size_t, since we assume C89 freestanding at least. Do not check
for sig_atomic_t, wchar_t, or wint_t, since the code now does
the right thing even if the types are not defined. Instead use:
(gl_STDINT_TYPE_PROPERTIES): New macro.
(gl_HEADER_STDINT_H, gl_HEADER_INTTYPES_H): Remove. Don't bother
testing whether <sys/types.h> clashes, as Autoconf does this for
us now. All uses removed.
(gl_STDINT_CHECK_TYPES, gl_STDINT_MISSING_BOUND):
(gl_STDINT_MISSING_BOUNDS, gl_STDINT_MISSING_BOUNDS2):
(gl_CHECK_TYPE_SAME):
Remove; no longer needed.
(gl_STDINT_BITSIZEOF): Don't bother to check whether the type
exists, since we'll return 0 anyway in that case.
(gl_INTEGER_TYPE_SUFFIX, gl_STDINT_INCLUDES): New macros.