File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / confuse / m4 / gettext.m4
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:49:17 2021 UTC (3 years, 4 months ago) by misho
Branches: confuse, MAIN
CVS tags: v3_3, HEAD
confuse 3.3

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>