1# gettext.m4 serial 60 (gettext-0.17) 2dnl Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 3dnl 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. 4dnl This file is free software; the Free Software Foundation 5dnl gives unlimited permission to copy and/or distribute it, 6dnl with or without modifications, as long as this notice is preserved. 7dnl 8dnl This file can can be used in projects which are not available under 9dnl the GNU General Public License or the GNU Library General Public 10dnl License but which still want to provide support for the GNU gettext 11dnl functionality. 12dnl Please note that the actual code of the GNU gettext library is covered 13dnl by the GNU Library General Public License, and the rest of the GNU 14dnl gettext package package is covered by the GNU General Public License. 15dnl They are *not* in the public domain. 16 17dnl Authors: 18dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. 19dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006. 20 21dnl Macro to add for using GNU gettext. 22 23dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). 24dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The 25dnl default (if it is not specified or empty) is 'no-libtool'. 26dnl INTLSYMBOL should be 'external' for packages with no intl directory, 27dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. 28dnl If INTLSYMBOL is 'use-libtool', then a libtool library 29dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, 30dnl depending on --{enable,disable}-{shared,static} and on the presence of 31dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library 32dnl $(top_builddir)/intl/libintl.a will be created. 33dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext 34dnl implementations (in libc or libintl) without the ngettext() function 35dnl will be ignored. If NEEDSYMBOL is specified and is 36dnl 'need-formatstring-macros', then GNU gettext implementations that don't 37dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. 38dnl INTLDIR is used to find the intl libraries. If empty, 39dnl the value `$(top_builddir)/intl/' is used. 40dnl 41dnl The result of the configuration is one of three cases: 42dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled 43dnl and used. 44dnl Catalog format: GNU --> install in $(datadir) 45dnl Catalog extension: .mo after installation, .gmo in source tree 46dnl 2) GNU gettext has been found in the system's C library. 47dnl Catalog format: GNU --> install in $(datadir) 48dnl Catalog extension: .mo after installation, .gmo in source tree 49dnl 3) No internationalization, always use English msgid. 50dnl Catalog format: none 51dnl Catalog extension: none 52dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. 53dnl The use of .gmo is historical (it was needed to avoid overwriting the 54dnl GNU format catalogs when building on a platform with an X/Open gettext), 55dnl but we keep it in order not to force irrelevant filename changes on the 56dnl maintainers. 57dnl 58AC_DEFUN([AM_GNU_GETTEXT], 59[ 60 dnl Argument checking. 61 ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , 62 [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT 63])])])])]) 64 ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , 65 [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT 66])])])]) 67 define([gt_included_intl], 68 ifelse([$1], [external], 69 ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), 70 [yes])) 71 define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) 72 gt_NEEDS_INIT 73 AM_GNU_GETTEXT_NEED([$2]) 74 75 AC_REQUIRE([AM_PO_SUBDIRS])dnl 76 ifelse(gt_included_intl, yes, [ 77 AC_REQUIRE([AM_INTL_SUBDIR])dnl 78 ]) 79 80 dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. 81 AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) 82 AC_REQUIRE([AC_LIB_RPATH]) 83 84 dnl Sometimes libintl requires libiconv, so first search for libiconv. 85 dnl Ideally we would do this search only after the 86 dnl if test "$USE_NLS" = "yes"; then 87 dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then 88 dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT 89 dnl the configure script would need to contain the same shell code 90 dnl again, outside any 'if'. There are two solutions: 91 dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. 92 dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. 93 dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not 94 dnl documented, we avoid it. 95 ifelse(gt_included_intl, yes, , [ 96 AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) 97 ]) 98 99 dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. 100 gt_INTL_MACOSX 101 102 dnl Set USE_NLS. 103 AC_REQUIRE([AM_NLS]) 104 105 ifelse(gt_included_intl, yes, [ 106 BUILD_INCLUDED_LIBINTL=no 107 USE_INCLUDED_LIBINTL=no 108 ]) 109 LIBINTL= 110 LTLIBINTL= 111 POSUB= 112 113 dnl Add a version number to the cache macros. 114 case " $gt_needs " in 115 *" need-formatstring-macros "*) gt_api_version=3 ;; 116 *" need-ngettext "*) gt_api_version=2 ;; 117 *) gt_api_version=1 ;; 118 esac 119 gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" 120 gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" 121 122 dnl If we use NLS figure out what method 123 if test "$USE_NLS" = "yes"; then 124 gt_use_preinstalled_gnugettext=no 125 ifelse(gt_included_intl, yes, [ 126 AC_MSG_CHECKING([whether included gettext is requested]) 127 AC_ARG_WITH(included-gettext, 128 [ --with-included-gettext use the GNU gettext library included here], 129 nls_cv_force_use_gnu_gettext=$withval, 130 nls_cv_force_use_gnu_gettext=no) 131 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) 132 133 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" 134 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then 135 ]) 136 dnl User does not insist on using GNU NLS library. Figure out what 137 dnl to use. If GNU gettext is available we use this. Else we have 138 dnl to fall back to GNU NLS library. 139 140 if test $gt_api_version -ge 3; then 141 gt_revision_test_code=' 142#ifndef __GNU_GETTEXT_SUPPORTED_REVISION 143#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) 144#endif 145changequote(,)dnl 146typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; 147changequote([,])dnl 148' 149 else 150 gt_revision_test_code= 151 fi 152 if test $gt_api_version -ge 2; then 153 gt_expression_test_code=' + * ngettext ("", "", 0)' 154 else 155 gt_expression_test_code= 156 fi 157 158 AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], 159 [AC_TRY_LINK([#include <libintl.h> 160$gt_revision_test_code 161extern int _nl_msg_cat_cntr; 162extern int *_nl_domain_bindings;], 163 [bindtextdomain ("", ""); 164return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], 165 [eval "$gt_func_gnugettext_libc=yes"], 166 [eval "$gt_func_gnugettext_libc=no"])]) 167 168 if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then 169 dnl Sometimes libintl requires libiconv, so first search for libiconv. 170 ifelse(gt_included_intl, yes, , [ 171 AM_ICONV_LINK 172 ]) 173 dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL 174 dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) 175 dnl because that would add "-liconv" to LIBINTL and LTLIBINTL 176 dnl even if libiconv doesn't exist. 177 AC_LIB_LINKFLAGS_BODY([intl]) 178 AC_CACHE_CHECK([for GNU gettext in libintl], 179 [$gt_func_gnugettext_libintl], 180 [gt_save_CPPFLAGS="$CPPFLAGS" 181 CPPFLAGS="$CPPFLAGS $INCINTL" 182 gt_save_LIBS="$LIBS" 183 LIBS="$LIBS $LIBINTL" 184 dnl Now see whether libintl exists and does not depend on libiconv. 185 AC_TRY_LINK([#include <libintl.h> 186$gt_revision_test_code 187extern int _nl_msg_cat_cntr; 188extern 189#ifdef __cplusplus 190"C" 191#endif 192const char *_nl_expand_alias (const char *);], 193 [bindtextdomain ("", ""); 194return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], 195 [eval "$gt_func_gnugettext_libintl=yes"], 196 [eval "$gt_func_gnugettext_libintl=no"]) 197 dnl Now see whether libintl exists and depends on libiconv. 198 if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then 199 LIBS="$LIBS $LIBICONV" 200 AC_TRY_LINK([#include <libintl.h> 201$gt_revision_test_code 202extern int _nl_msg_cat_cntr; 203extern 204#ifdef __cplusplus 205"C" 206#endif 207const char *_nl_expand_alias (const char *);], 208 [bindtextdomain ("", ""); 209return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], 210 [LIBINTL="$LIBINTL $LIBICONV" 211 LTLIBINTL="$LTLIBINTL $LTLIBICONV" 212 eval "$gt_func_gnugettext_libintl=yes" 213 ]) 214 fi 215 CPPFLAGS="$gt_save_CPPFLAGS" 216 LIBS="$gt_save_LIBS"]) 217 fi 218 219 dnl If an already present or preinstalled GNU gettext() is found, 220 dnl use it. But if this macro is used in GNU gettext, and GNU 221 dnl gettext is already preinstalled in libintl, we update this 222 dnl libintl. (Cf. the install rule in intl/Makefile.in.) 223 if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ 224 || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ 225 && test "$PACKAGE" != gettext-runtime \ 226 && test "$PACKAGE" != gettext-tools; }; then 227 gt_use_preinstalled_gnugettext=yes 228 else 229 dnl Reset the values set by searching for libintl. 230 LIBINTL= 231 LTLIBINTL= 232 INCINTL= 233 fi 234 235 ifelse(gt_included_intl, yes, [ 236 if test "$gt_use_preinstalled_gnugettext" != "yes"; then 237 dnl GNU gettext is not found in the C library. 238 dnl Fall back on included GNU gettext library. 239 nls_cv_use_gnu_gettext=yes 240 fi 241 fi 242 243 if test "$nls_cv_use_gnu_gettext" = "yes"; then 244 dnl Mark actions used to generate GNU NLS library. 245 BUILD_INCLUDED_LIBINTL=yes 246 USE_INCLUDED_LIBINTL=yes 247 LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" 248 LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" 249 LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` 250 fi 251 252 CATOBJEXT= 253 if test "$gt_use_preinstalled_gnugettext" = "yes" \ 254 || test "$nls_cv_use_gnu_gettext" = "yes"; then 255 dnl Mark actions to use GNU gettext tools. 256 CATOBJEXT=.gmo 257 fi 258 ]) 259 260 if test -n "$INTL_MACOSX_LIBS"; then 261 if test "$gt_use_preinstalled_gnugettext" = "yes" \ 262 || test "$nls_cv_use_gnu_gettext" = "yes"; then 263 dnl Some extra flags are needed during linking. 264 LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" 265 LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" 266 fi 267 fi 268 269 if test "$gt_use_preinstalled_gnugettext" = "yes" \ 270 || test "$nls_cv_use_gnu_gettext" = "yes"; then 271 AC_DEFINE(ENABLE_NLS, 1, 272 [Define to 1 if translation of program messages to the user's native language 273 is requested.]) 274 else 275 USE_NLS=no 276 fi 277 fi 278 279 AC_MSG_CHECKING([whether to use NLS]) 280 AC_MSG_RESULT([$USE_NLS]) 281 if test "$USE_NLS" = "yes"; then 282 AC_MSG_CHECKING([where the gettext function comes from]) 283 if test "$gt_use_preinstalled_gnugettext" = "yes"; then 284 if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then 285 gt_source="external libintl" 286 else 287 gt_source="libc" 288 fi 289 else 290 gt_source="included intl directory" 291 fi 292 AC_MSG_RESULT([$gt_source]) 293 fi 294 295 if test "$USE_NLS" = "yes"; then 296 297 if test "$gt_use_preinstalled_gnugettext" = "yes"; then 298 if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then 299 AC_MSG_CHECKING([how to link with libintl]) 300 AC_MSG_RESULT([$LIBINTL]) 301 AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) 302 fi 303 304 dnl For backward compatibility. Some packages may be using this. 305 AC_DEFINE(HAVE_GETTEXT, 1, 306 [Define if the GNU gettext() function is already present or preinstalled.]) 307 AC_DEFINE(HAVE_DCGETTEXT, 1, 308 [Define if the GNU dcgettext() function is already present or preinstalled.]) 309 fi 310 311 dnl We need to process the po/ directory. 312 POSUB=po 313 fi 314 315 ifelse(gt_included_intl, yes, [ 316 dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL 317 dnl to 'yes' because some of the testsuite requires it. 318 if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then 319 BUILD_INCLUDED_LIBINTL=yes 320 fi 321 322 dnl Make all variables we use known to autoconf. 323 AC_SUBST(BUILD_INCLUDED_LIBINTL) 324 AC_SUBST(USE_INCLUDED_LIBINTL) 325 AC_SUBST(CATOBJEXT) 326 327 dnl For backward compatibility. Some configure.ins may be using this. 328 nls_cv_header_intl= 329 nls_cv_header_libgt= 330 331 dnl For backward compatibility. Some Makefiles may be using this. 332 DATADIRNAME=share 333 AC_SUBST(DATADIRNAME) 334 335 dnl For backward compatibility. Some Makefiles may be using this. 336 INSTOBJEXT=.mo 337 AC_SUBST(INSTOBJEXT) 338 339 dnl For backward compatibility. Some Makefiles may be using this. 340 GENCAT=gencat 341 AC_SUBST(GENCAT) 342 343 dnl For backward compatibility. Some Makefiles may be using this. 344 INTLOBJS= 345 if test "$USE_INCLUDED_LIBINTL" = yes; then 346 INTLOBJS="\$(GETTOBJS)" 347 fi 348 AC_SUBST(INTLOBJS) 349 350 dnl Enable libtool support if the surrounding package wishes it. 351 INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix 352 AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) 353 ]) 354 355 dnl For backward compatibility. Some Makefiles may be using this. 356 INTLLIBS="$LIBINTL" 357 AC_SUBST(INTLLIBS) 358 359 dnl Make all documented variables known to autoconf. 360 AC_SUBST(LIBINTL) 361 AC_SUBST(LTLIBINTL) 362 AC_SUBST(POSUB) 363]) 364 365 366dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. 367m4_define([gt_NEEDS_INIT], 368[ 369 m4_divert_text([DEFAULTS], [gt_needs=]) 370 m4_define([gt_NEEDS_INIT], []) 371]) 372 373 374dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) 375AC_DEFUN([AM_GNU_GETTEXT_NEED], 376[ 377 m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) 378]) 379 380 381dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) 382AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) 383