File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srcm4 / gettext.m4
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 9 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: # gettext.m4 serial 69 (gettext-0.20)
    2: dnl Copyright (C) 1995-2014, 2016, 2018-2019 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 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 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 not documented, we avoid it.
   95:   ifelse(gt_included_intl, yes, , [
   96:     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   97:   ])
   98: 
   99:   dnl Sometimes, on Mac OS 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
  145: changequote(,)dnl
  146: typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  147: changequote([,])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_LINK_IFELSE(
  160:             [AC_LANG_PROGRAM(
  161:                [[
  162: #include <libintl.h>
  163: #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  164: extern int _nl_msg_cat_cntr;
  165: extern int *_nl_domain_bindings;
  166: #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
  167: #else
  168: #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
  169: #endif
  170: $gt_revision_test_code
  171:                ]],
  172:                [[
  173: bindtextdomain ("", "");
  174: return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
  175:                ]])],
  176:             [eval "$gt_func_gnugettext_libc=yes"],
  177:             [eval "$gt_func_gnugettext_libc=no"])])
  178: 
  179:         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
  180:           dnl Sometimes libintl requires libiconv, so first search for libiconv.
  181:           ifelse(gt_included_intl, yes, , [
  182:             AM_ICONV_LINK
  183:           ])
  184:           dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
  185:           dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
  186:           dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
  187:           dnl even if libiconv doesn't exist.
  188:           AC_LIB_LINKFLAGS_BODY([intl])
  189:           AC_CACHE_CHECK([for GNU gettext in libintl],
  190:             [$gt_func_gnugettext_libintl],
  191:            [gt_save_CPPFLAGS="$CPPFLAGS"
  192:             CPPFLAGS="$CPPFLAGS $INCINTL"
  193:             gt_save_LIBS="$LIBS"
  194:             LIBS="$LIBS $LIBINTL"
  195:             dnl Now see whether libintl exists and does not depend on libiconv.
  196:             AC_LINK_IFELSE(
  197:               [AC_LANG_PROGRAM(
  198:                  [[
  199: #include <libintl.h>
  200: #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  201: extern int _nl_msg_cat_cntr;
  202: extern
  203: #ifdef __cplusplus
  204: "C"
  205: #endif
  206: const char *_nl_expand_alias (const char *);
  207: #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
  208: #else
  209: #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
  210: #endif
  211: $gt_revision_test_code
  212:                  ]],
  213:                  [[
  214: bindtextdomain ("", "");
  215: return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
  216:                  ]])],
  217:               [eval "$gt_func_gnugettext_libintl=yes"],
  218:               [eval "$gt_func_gnugettext_libintl=no"])
  219:             dnl Now see whether libintl exists and depends on libiconv.
  220:             if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
  221:               LIBS="$LIBS $LIBICONV"
  222:               AC_LINK_IFELSE(
  223:                 [AC_LANG_PROGRAM(
  224:                    [[
  225: #include <libintl.h>
  226: #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  227: extern int _nl_msg_cat_cntr;
  228: extern
  229: #ifdef __cplusplus
  230: "C"
  231: #endif
  232: const char *_nl_expand_alias (const char *);
  233: #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
  234: #else
  235: #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
  236: #endif
  237: $gt_revision_test_code
  238:                    ]],
  239:                    [[
  240: bindtextdomain ("", "");
  241: return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
  242:                    ]])],
  243:                 [LIBINTL="$LIBINTL $LIBICONV"
  244:                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
  245:                  eval "$gt_func_gnugettext_libintl=yes"
  246:                 ])
  247:             fi
  248:             CPPFLAGS="$gt_save_CPPFLAGS"
  249:             LIBS="$gt_save_LIBS"])
  250:         fi
  251: 
  252:         dnl If an already present or preinstalled GNU gettext() is found,
  253:         dnl use it.  But if this macro is used in GNU gettext, and GNU
  254:         dnl gettext is already preinstalled in libintl, we update this
  255:         dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
  256:         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
  257:            || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
  258:                 && test "$PACKAGE" != gettext-runtime \
  259:                 && test "$PACKAGE" != gettext-tools; }; then
  260:           gt_use_preinstalled_gnugettext=yes
  261:         else
  262:           dnl Reset the values set by searching for libintl.
  263:           LIBINTL=
  264:           LTLIBINTL=
  265:           INCINTL=
  266:         fi
  267: 
  268:     ifelse(gt_included_intl, yes, [
  269:         if test "$gt_use_preinstalled_gnugettext" != "yes"; then
  270:           dnl GNU gettext is not found in the C library.
  271:           dnl Fall back on included GNU gettext library.
  272:           nls_cv_use_gnu_gettext=yes
  273:         fi
  274:       fi
  275: 
  276:       if test "$nls_cv_use_gnu_gettext" = "yes"; then
  277:         dnl Mark actions used to generate GNU NLS library.
  278:         BUILD_INCLUDED_LIBINTL=yes
  279:         USE_INCLUDED_LIBINTL=yes
  280:         LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
  281:         LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
  282:         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
  283:       fi
  284: 
  285:       CATOBJEXT=
  286:       if test "$gt_use_preinstalled_gnugettext" = "yes" \
  287:          || test "$nls_cv_use_gnu_gettext" = "yes"; then
  288:         dnl Mark actions to use GNU gettext tools.
  289:         CATOBJEXT=.gmo
  290:       fi
  291:     ])
  292: 
  293:     if test -n "$INTL_MACOSX_LIBS"; then
  294:       if test "$gt_use_preinstalled_gnugettext" = "yes" \
  295:          || test "$nls_cv_use_gnu_gettext" = "yes"; then
  296:         dnl Some extra flags are needed during linking.
  297:         LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
  298:         LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
  299:       fi
  300:     fi
  301: 
  302:     if test "$gt_use_preinstalled_gnugettext" = "yes" \
  303:        || test "$nls_cv_use_gnu_gettext" = "yes"; then
  304:       AC_DEFINE([ENABLE_NLS], [1],
  305:         [Define to 1 if translation of program messages to the user's native language
  306:    is requested.])
  307:     else
  308:       USE_NLS=no
  309:     fi
  310:   fi
  311: 
  312:   AC_MSG_CHECKING([whether to use NLS])
  313:   AC_MSG_RESULT([$USE_NLS])
  314:   if test "$USE_NLS" = "yes"; then
  315:     AC_MSG_CHECKING([where the gettext function comes from])
  316:     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
  317:       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
  318:         gt_source="external libintl"
  319:       else
  320:         gt_source="libc"
  321:       fi
  322:     else
  323:       gt_source="included intl directory"
  324:     fi
  325:     AC_MSG_RESULT([$gt_source])
  326:   fi
  327: 
  328:   if test "$USE_NLS" = "yes"; then
  329: 
  330:     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
  331:       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
  332:         AC_MSG_CHECKING([how to link with libintl])
  333:         AC_MSG_RESULT([$LIBINTL])
  334:         AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
  335:       fi
  336: 
  337:       dnl For backward compatibility. Some packages may be using this.
  338:       AC_DEFINE([HAVE_GETTEXT], [1],
  339:        [Define if the GNU gettext() function is already present or preinstalled.])
  340:       AC_DEFINE([HAVE_DCGETTEXT], [1],
  341:        [Define if the GNU dcgettext() function is already present or preinstalled.])
  342:     fi
  343: 
  344:     dnl We need to process the po/ directory.
  345:     POSUB=po
  346:   fi
  347: 
  348:   ifelse(gt_included_intl, yes, [
  349:     dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
  350:     dnl to 'yes' because some of the testsuite requires it.
  351:     if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
  352:       BUILD_INCLUDED_LIBINTL=yes
  353:     fi
  354: 
  355:     dnl Make all variables we use known to autoconf.
  356:     AC_SUBST([BUILD_INCLUDED_LIBINTL])
  357:     AC_SUBST([USE_INCLUDED_LIBINTL])
  358:     AC_SUBST([CATOBJEXT])
  359: 
  360:     dnl For backward compatibility. Some configure.ins may be using this.
  361:     nls_cv_header_intl=
  362:     nls_cv_header_libgt=
  363: 
  364:     dnl For backward compatibility. Some Makefiles may be using this.
  365:     DATADIRNAME=share
  366:     AC_SUBST([DATADIRNAME])
  367: 
  368:     dnl For backward compatibility. Some Makefiles may be using this.
  369:     INSTOBJEXT=.mo
  370:     AC_SUBST([INSTOBJEXT])
  371: 
  372:     dnl For backward compatibility. Some Makefiles may be using this.
  373:     GENCAT=gencat
  374:     AC_SUBST([GENCAT])
  375: 
  376:     dnl For backward compatibility. Some Makefiles may be using this.
  377:     INTLOBJS=
  378:     if test "$USE_INCLUDED_LIBINTL" = yes; then
  379:       INTLOBJS="\$(GETTOBJS)"
  380:     fi
  381:     AC_SUBST([INTLOBJS])
  382: 
  383:     dnl Enable libtool support if the surrounding package wishes it.
  384:     INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
  385:     AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
  386:   ])
  387: 
  388:   dnl For backward compatibility. Some Makefiles may be using this.
  389:   INTLLIBS="$LIBINTL"
  390:   AC_SUBST([INTLLIBS])
  391: 
  392:   dnl Make all documented variables known to autoconf.
  393:   AC_SUBST([LIBINTL])
  394:   AC_SUBST([LTLIBINTL])
  395:   AC_SUBST([POSUB])
  396: ])
  397: 
  398: 
  399: dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
  400: m4_define([gt_NEEDS_INIT],
  401: [
  402:   m4_divert_text([DEFAULTS], [gt_needs=])
  403:   m4_define([gt_NEEDS_INIT], [])
  404: ])
  405: 
  406: 
  407: dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
  408: AC_DEFUN([AM_GNU_GETTEXT_NEED],
  409: [
  410:   m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
  411: ])
  412: 
  413: 
  414: dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
  415: AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
  416: 
  417: 
  418: dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
  419: AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])

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