gnulib-common.m4 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # gnulib-common.m4 serial 7
  2. dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
  3. dnl This file is free software; the Free Software Foundation
  4. dnl gives unlimited permission to copy and/or distribute it,
  5. dnl with or without modifications, as long as this notice is preserved.
  6. # gl_COMMON
  7. # is expanded unconditionally through gnulib-tool magic.
  8. AC_DEFUN([gl_COMMON], [
  9. dnl Use AC_REQUIRE here, so that the code is expanded once only.
  10. AC_REQUIRE([gl_COMMON_BODY])
  11. ])
  12. AC_DEFUN([gl_COMMON_BODY], [
  13. AH_VERBATIM([isoc99_inline],
  14. [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
  15. the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
  16. earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
  17. __APPLE__ && __MACH__ test for MacOS X.
  18. __APPLE_CC__ tests for the Apple compiler and its version.
  19. __STDC_VERSION__ tests for the C99 mode. */
  20. #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
  21. # define __GNUC_STDC_INLINE__ 1
  22. #endif])
  23. AH_VERBATIM([unused_parameter],
  24. [/* Define as a marker that can be attached to function parameter declarations
  25. for parameters that are not used. This helps to reduce warnings, such as
  26. from GCC -Wunused-parameter. */
  27. #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
  28. # define _UNUSED_PARAMETER_ __attribute__ ((__unused__))
  29. #else
  30. # define _UNUSED_PARAMETER_
  31. #endif
  32. ])
  33. ])
  34. # gl_MODULE_INDICATOR([modulename])
  35. # defines a C macro indicating the presence of the given module.
  36. AC_DEFUN([gl_MODULE_INDICATOR],
  37. [
  38. AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
  39. [Define to 1 when using the gnulib module ]$1[.])
  40. ])
  41. # m4_foreach_w
  42. # is a backport of autoconf-2.59c's m4_foreach_w.
  43. # Remove this macro when we can assume autoconf >= 2.60.
  44. m4_ifndef([m4_foreach_w],
  45. [m4_define([m4_foreach_w],
  46. [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
  47. # AC_PROG_MKDIR_P
  48. # is a backport of autoconf-2.60's AC_PROG_MKDIR_P.
  49. # Remove this macro when we can assume autoconf >= 2.60.
  50. m4_ifdef([AC_PROG_MKDIR_P], [], [
  51. AC_DEFUN([AC_PROG_MKDIR_P],
  52. [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
  53. MKDIR_P='$(mkdir_p)'
  54. AC_SUBST([MKDIR_P])])])
  55. # AC_C_RESTRICT
  56. # This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
  57. # so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
  58. # works.
  59. # This definition can be removed once autoconf >= 2.62 can be assumed.
  60. AC_DEFUN([AC_C_RESTRICT],
  61. [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
  62. [ac_cv_c_restrict=no
  63. # The order here caters to the fact that C++ does not require restrict.
  64. for ac_kw in __restrict __restrict__ _Restrict restrict; do
  65. AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
  66. [[typedef int * int_ptr;
  67. int foo (int_ptr $ac_kw ip) {
  68. return ip[0];
  69. }]],
  70. [[int s[1];
  71. int * $ac_kw t = s;
  72. t[0] = 0;
  73. return foo(t)]])],
  74. [ac_cv_c_restrict=$ac_kw])
  75. test "$ac_cv_c_restrict" != no && break
  76. done
  77. ])
  78. AH_VERBATIM([restrict],
  79. [/* Define to the equivalent of the C99 'restrict' keyword, or to
  80. nothing if this is not supported. Do not define if restrict is
  81. supported directly. */
  82. #undef restrict
  83. /* Work around a bug in Sun C++: it does not support _Restrict, even
  84. though the corresponding Sun C compiler does, which causes
  85. "#define restrict _Restrict" in the previous line. Perhaps some future
  86. version of Sun C++ will work with _Restrict; if so, it'll probably
  87. define __RESTRICT, just as Sun C does. */
  88. #if defined __SUNPRO_CC && !defined __RESTRICT
  89. # define _Restrict
  90. #endif])
  91. case $ac_cv_c_restrict in
  92. restrict) ;;
  93. no) AC_DEFINE([restrict], []) ;;
  94. *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
  95. esac
  96. ])