diff options
-rw-r--r-- | lib/gnulib.mk | 17 | ||||
-rw-r--r-- | m4/gl-comp.m4 | 10 | ||||
-rw-r--r-- | m4/inttypes.m4 | 109 | ||||
-rw-r--r-- | m4/strtoumax.m4 | 1 |
4 files changed, 128 insertions, 9 deletions
diff --git a/lib/gnulib.mk b/lib/gnulib.mk index d79f3c2b571..f686137d38d 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk @@ -174,7 +174,7 @@ EXTRA_DIST += intprops.h ## end gnulib module intprops -## begin gnulib module inttypes-h +## begin gnulib module inttypes-incomplete BUILT_SOURCES += inttypes.h @@ -214,7 +214,7 @@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t EXTRA_DIST += inttypes.in.h -## end gnulib module inttypes-h +## end gnulib module inttypes-incomplete ## begin gnulib module lstat @@ -574,12 +574,21 @@ EXTRA_libgnu_a_SOURCES += strftime.c ## end gnulib module strftime +## begin gnulib module strtoull + + +EXTRA_DIST += strtol.c strtoul.c strtoull.c + +EXTRA_libgnu_a_SOURCES += strtol.c strtoul.c strtoull.c + +## end gnulib module strtoull + ## begin gnulib module strtoumax -EXTRA_DIST += strtoimax.c strtol.c strtoul.c strtoull.c strtoumax.c +EXTRA_DIST += strtoimax.c strtoumax.c -EXTRA_libgnu_a_SOURCES += strtoimax.c strtol.c strtoul.c strtoull.c strtoumax.c +EXTRA_libgnu_a_SOURCES += strtoimax.c strtoumax.c ## end gnulib module strtoumax diff --git a/m4/gl-comp.m4 b/m4/gl-comp.m4 index 16f62236e27..3b7bdfc5673 100644 --- a/m4/gl-comp.m4 +++ b/m4/gl-comp.m4 @@ -43,7 +43,7 @@ AC_DEFUN([gl_EARLY], # Code from module ignore-value: # Code from module include_next: # Code from module intprops: - # Code from module inttypes-h: + # Code from module inttypes-incomplete: # Code from module lstat: # Code from module mktime: # Code from module multiarch: @@ -57,6 +57,7 @@ AC_DEFUN([gl_EARLY], # Code from module stdio: # Code from module stdlib: # Code from module strftime: + # Code from module strtoull: # Code from module strtoumax: # Code from module symlink: # Code from module sys_stat: @@ -111,8 +112,8 @@ AC_DEFUN([gl_INIT], AC_REQUIRE([AC_C_INLINE]) # Code from module include_next: # Code from module intprops: - # Code from module inttypes-h: - gl_INTTYPES_H + # Code from module inttypes-incomplete: + gl_INTTYPES_INCOMPLETE # Code from module lstat: gl_FUNC_LSTAT gl_SYS_STAT_MODULE_INDICATOR([lstat]) @@ -143,6 +144,9 @@ AC_DEFUN([gl_INIT], gl_STDLIB_H # Code from module strftime: gl_FUNC_GNU_STRFTIME + # Code from module strtoull: + gl_FUNC_STRTOULL + gl_STDLIB_MODULE_INDICATOR([strtoull]) # Code from module strtoumax: gl_FUNC_STRTOUMAX gl_INTTYPES_MODULE_INDICATOR([strtoumax]) diff --git a/m4/inttypes.m4 b/m4/inttypes.m4 index 920f72db755..1e81990bda2 100644 --- a/m4/inttypes.m4 +++ b/m4/inttypes.m4 @@ -1,4 +1,4 @@ -# inttypes.m4 serial 19 +# inttypes.m4 serial 23 dnl Copyright (C) 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, @@ -9,6 +9,12 @@ dnl Test whether <inttypes.h> is supported or must be substituted. AC_DEFUN([gl_INTTYPES_H], [ + AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) + gl_INTTYPES_PRI_SCN +]) + +AC_DEFUN([gl_INTTYPES_INCOMPLETE], +[ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) @@ -40,6 +46,105 @@ AC_DEFUN([gl_INTTYPES_H], ]], [imaxabs imaxdiv strtoimax strtoumax]) ]) +# Ensure that the PRI* and SCN* macros are defined appropriately. +AC_DEFUN([gl_INTTYPES_PRI_SCN], +[ + AC_REQUIRE([gt_INTTYPES_PRI]) + + PRIPTR_PREFIX= + if test -n "$STDINT_H"; then + dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'. + PRIPTR_PREFIX='"l"' + else + dnl Using the system's <stdint.h>. + for glpfx in '' l ll I64; do + case $glpfx in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + I64) gltype1='__int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <stdint.h> + extern intptr_t foo; + extern $gltype1 foo;]])], + [PRIPTR_PREFIX='"'$glpfx'"']) + test -n "$PRIPTR_PREFIX" && break + done + fi + AC_SUBST([PRIPTR_PREFIX]) + + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT32_MAX_LT_INTMAX_MAX], + [defined INT32_MAX && defined INTMAX_MAX], + [INT32_MAX < INTMAX_MAX], + [sizeof (int) < sizeof (long long int)]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT64_MAX_EQ_LONG_MAX], + [defined INT64_MAX], + [INT64_MAX == LONG_MAX], + [sizeof (long long int) == sizeof (long int)]) + else + INT64_MAX_EQ_LONG_MAX=-1 + fi + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT32_MAX_LT_UINTMAX_MAX], + [defined UINT32_MAX && defined UINTMAX_MAX], + [UINT32_MAX < UINTMAX_MAX], + [sizeof (unsigned int) < sizeof (unsigned long long int)]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT64_MAX_EQ_ULONG_MAX], + [defined UINT64_MAX], + [UINT64_MAX == ULONG_MAX], + [sizeof (unsigned long long int) == sizeof (unsigned long int)]) + else + UINT64_MAX_EQ_ULONG_MAX=-1 + fi +]) + +# Define the symbol $1 to be 1 if the condition is true, 0 otherwise. +# If $2 is true, the condition is $3; otherwise if long long int is supported +# approximate the condition with $4; otherwise, assume the condition is false. +# The condition should work on all C99 platforms; the approximations should be +# good enough to work on all practical pre-C99 platforms. +# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. +AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], +[ + AC_CACHE_CHECK([whether $3], + [gl_cv_test_$1], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if $2 + #define CONDITION ($3) + #elif HAVE_LONG_LONG_INT + #define CONDITION ($4) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1];]])], + [gl_cv_test_$1=yes], + [gl_cv_test_$1=no])]) + if test $gl_cv_test_$1 = yes; then + $1=1; + else + $1=0; + fi + AC_SUBST([$1]) +]) + AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. @@ -58,8 +163,10 @@ AC_DEFUN([gl_INTTYPES_H_DEFAULTS], HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) + INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) + UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) diff --git a/m4/strtoumax.m4 b/m4/strtoumax.m4 index 3ca38cdbc93..7fa563642a8 100644 --- a/m4/strtoumax.m4 +++ b/m4/strtoumax.m4 @@ -23,5 +23,4 @@ AC_DEFUN([gl_FUNC_STRTOUMAX], AC_DEFUN([gl_PREREQ_STRTOUMAX], [ AC_CHECK_DECLS([strtoull]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - gl_FUNC_STRTOULL ]) |