Home | History | Annotate | Download | only in m4macros
      1 # Copyright (C) 1995-2002 Free Software Foundation, Inc.
      2 # Copyright (C) 2001-2003,2004 Red Hat, Inc.
      3 #
      4 # This file is free software, distributed under the terms of the GNU
      5 # General Public License.  As a special exception to the GNU General
      6 # Public License, this file may be distributed as part of a program
      7 # that contains a configuration script generated by Autoconf, under
      8 # the same distribution terms as the rest of that program.
      9 #
     10 # This file can be copied and used freely without restrictions.  It can
     11 # be used in projects which are not available under the GNU Public License
     12 # but which still want to provide support for the GNU gettext functionality.
     13 #
     14 # Macro to add for using GNU gettext.
     15 # Ulrich Drepper <drepper (a] cygnus.com>, 1995, 1996
     16 #
     17 # Modified to never use included libintl. 
     18 # Owen Taylor <otaylor (a] redhat.com>, 12/15/1998
     19 #
     20 # Major rework to remove unused code
     21 # Owen Taylor <otaylor (a] redhat.com>, 12/11/2002
     22 #
     23 # Added better handling of ALL_LINGUAS from GNU gettext version 
     24 # written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
     25 #
     26 # Modified to require ngettext
     27 # Matthias Clasen <mclasen (a] redhat.com> 08/06/2004
     28 #
     29 # We need this here as well, since someone might use autoconf-2.5x
     30 # to configure GLib then an older version to configure a package
     31 # using AM_GLIB_GNU_GETTEXT
     32 AC_PREREQ(2.53)
     33 
     34 dnl
     35 dnl We go to great lengths to make sure that aclocal won't 
     36 dnl try to pull in the installed version of these macros
     37 dnl when running aclocal in the glib directory.
     38 dnl
     39 m4_copy([AC_DEFUN],[glib_DEFUN])
     40 m4_copy([AC_REQUIRE],[glib_REQUIRE])
     41 dnl
     42 dnl At the end, if we're not within glib, we'll define the public
     43 dnl definitions in terms of our private definitions.
     44 dnl
     45 
     46 # GLIB_LC_MESSAGES
     47 #--------------------
     48 glib_DEFUN([GLIB_LC_MESSAGES],
     49   [AC_CHECK_HEADERS([locale.h])
     50     if test $ac_cv_header_locale_h = yes; then
     51     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
     52       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
     53        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
     54     if test $am_cv_val_LC_MESSAGES = yes; then
     55       AC_DEFINE(HAVE_LC_MESSAGES, 1,
     56         [Define if your <locale.h> file defines LC_MESSAGES.])
     57     fi
     58   fi])
     59 
     60 # GLIB_PATH_PROG_WITH_TEST
     61 #----------------------------
     62 dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
     63 dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
     64 glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
     65 [# Extract the first word of "$2", so it can be a program name with args.
     66 set dummy $2; ac_word=[$]2
     67 AC_MSG_CHECKING([for $ac_word])
     68 AC_CACHE_VAL(ac_cv_path_$1,
     69 [case "[$]$1" in
     70   /*)
     71   ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
     72   ;;
     73   *)
     74   IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
     75   for ac_dir in ifelse([$5], , $PATH, [$5]); do
     76     test -z "$ac_dir" && ac_dir=.
     77     if test -f $ac_dir/$ac_word; then
     78       if [$3]; then
     79 	ac_cv_path_$1="$ac_dir/$ac_word"
     80 	break
     81       fi
     82     fi
     83   done
     84   IFS="$ac_save_ifs"
     85 dnl If no 4th arg is given, leave the cache variable unset,
     86 dnl so AC_PATH_PROGS will keep looking.
     87 ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
     88 ])dnl
     89   ;;
     90 esac])dnl
     91 $1="$ac_cv_path_$1"
     92 if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
     93   AC_MSG_RESULT([$]$1)
     94 else
     95   AC_MSG_RESULT(no)
     96 fi
     97 AC_SUBST($1)dnl
     98 ])
     99 
    100 # GLIB_WITH_NLS
    101 #-----------------
    102 glib_DEFUN([GLIB_WITH_NLS],
    103   dnl NLS is obligatory
    104   [USE_NLS=yes
    105     AC_SUBST(USE_NLS)
    106 
    107     gt_cv_have_gettext=no
    108 
    109     CATOBJEXT=NONE
    110     XGETTEXT=:
    111     INTLLIBS=
    112 
    113     AC_CHECK_HEADER(libintl.h,
    114      [gt_cv_func_dgettext_libintl="no"
    115       libintl_extra_libs=""
    116 
    117       #
    118       # First check in libc
    119       #
    120       AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
    121         [AC_TRY_LINK([
    122 #include <libintl.h>
    123 ],
    124          [return !ngettext ("","", 1)],
    125 	  gt_cv_func_ngettext_libc=yes,
    126           gt_cv_func_ngettext_libc=no)
    127         ])
    128   
    129       if test "$gt_cv_func_ngettext_libc" = "yes" ; then
    130 	      AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
    131         	[AC_TRY_LINK([
    132 #include <libintl.h>
    133 ],
    134 	          [return !dgettext ("","")],
    135 		  gt_cv_func_dgettext_libc=yes,
    136 	          gt_cv_func_dgettext_libc=no)
    137         	])
    138       fi
    139   
    140       if test "$gt_cv_func_ngettext_libc" = "yes" ; then
    141         AC_CHECK_FUNCS(bind_textdomain_codeset)
    142       fi
    143 
    144       #
    145       # If we don't have everything we want, check in libintl
    146       #
    147       if test "$gt_cv_func_dgettext_libc" != "yes" \
    148 	 || test "$gt_cv_func_ngettext_libc" != "yes" \
    149          || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
    150         
    151         AC_CHECK_LIB(intl, bindtextdomain,
    152 	    [AC_CHECK_LIB(intl, ngettext,
    153 		    [AC_CHECK_LIB(intl, dgettext,
    154 			          gt_cv_func_dgettext_libintl=yes)])])
    155 
    156 	if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
    157 	  AC_MSG_CHECKING([if -liconv is needed to use gettext])
    158 	  AC_MSG_RESULT([])
    159   	  AC_CHECK_LIB(intl, ngettext,
    160           	[AC_CHECK_LIB(intl, dcgettext,
    161 		       [gt_cv_func_dgettext_libintl=yes
    162 			libintl_extra_libs=-liconv],
    163 			:,-liconv)],
    164 		:,-liconv)
    165         fi
    166 
    167         #
    168         # If we found libintl, then check in it for bind_textdomain_codeset();
    169         # we'll prefer libc if neither have bind_textdomain_codeset(),
    170         # and both have dgettext and ngettext
    171         #
    172         if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
    173           glib_save_LIBS="$LIBS"
    174           LIBS="$LIBS -lintl $libintl_extra_libs"
    175           unset ac_cv_func_bind_textdomain_codeset
    176           AC_CHECK_FUNCS(bind_textdomain_codeset)
    177           LIBS="$glib_save_LIBS"
    178 
    179           if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
    180             gt_cv_func_dgettext_libc=no
    181           else
    182             if test "$gt_cv_func_dgettext_libc" = "yes" \
    183 		&& test "$gt_cv_func_ngettext_libc" = "yes"; then
    184               gt_cv_func_dgettext_libintl=no
    185             fi
    186           fi
    187         fi
    188       fi
    189 
    190       if test "$gt_cv_func_dgettext_libc" = "yes" \
    191 	|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
    192         gt_cv_have_gettext=yes
    193       fi
    194   
    195       if test "$gt_cv_func_dgettext_libintl" = "yes"; then
    196         INTLLIBS="-lintl $libintl_extra_libs"
    197       fi
    198   
    199       if test "$gt_cv_have_gettext" = "yes"; then
    200 	AC_DEFINE(HAVE_GETTEXT,1,
    201 	  [Define if the GNU gettext() function is already present or preinstalled.])
    202 	GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
    203 	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
    204 	if test "$MSGFMT" != "no"; then
    205           glib_save_LIBS="$LIBS"
    206           LIBS="$LIBS $INTLLIBS"
    207 	  AC_CHECK_FUNCS(dcgettext)
    208 	  MSGFMT_OPTS=
    209 	  AC_MSG_CHECKING([if msgfmt accepts -c])
    210 	  GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[
    211 msgid ""
    212 msgstr ""
    213 "Content-Type: text/plain; charset=UTF-8\n"
    214 "Project-Id-Version: test 1.0\n"
    215 "PO-Revision-Date: 2007-02-15 12:01+0100\n"
    216 "Last-Translator: test <foo (a] bar.xx>\n"
    217 "Language-Team: C <LL (a] li.org>\n"
    218 "MIME-Version: 1.0\n"
    219 "Content-Transfer-Encoding: 8bit\n"
    220 ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
    221 	  AC_SUBST(MSGFMT_OPTS)
    222 	  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
    223 	  GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
    224 	    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
    225 	  AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
    226 			 return _nl_msg_cat_cntr],
    227 	    [CATOBJEXT=.gmo 
    228              DATADIRNAME=share],
    229 	    [case $host in
    230 	    *-*-solaris*)
    231 	    dnl On Solaris, if bind_textdomain_codeset is in libc,
    232 	    dnl GNU format message catalog is always supported,
    233             dnl since both are added to the libc all together.
    234 	    dnl Hence, we'd like to go with DATADIRNAME=share and
    235 	    dnl and CATOBJEXT=.gmo in this case.
    236             AC_CHECK_FUNC(bind_textdomain_codeset,
    237 	      [CATOBJEXT=.gmo 
    238                DATADIRNAME=share],
    239 	      [CATOBJEXT=.mo
    240                DATADIRNAME=lib])
    241 	    ;;
    242 	    *)
    243 	    CATOBJEXT=.mo
    244             DATADIRNAME=lib
    245 	    ;;
    246 	    esac])
    247           LIBS="$glib_save_LIBS"
    248 	  INSTOBJEXT=.mo
    249 	else
    250 	  gt_cv_have_gettext=no
    251 	fi
    252       fi
    253     ])
    254 
    255     if test "$gt_cv_have_gettext" = "yes" ; then
    256       AC_DEFINE(ENABLE_NLS, 1,
    257         [always defined to indicate that i18n is enabled])
    258     fi
    259 
    260     dnl Test whether we really found GNU xgettext.
    261     if test "$XGETTEXT" != ":"; then
    262       dnl If it is not GNU xgettext we define it as : so that the
    263       dnl Makefiles still can work.
    264       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
    265         : ;
    266       else
    267         AC_MSG_RESULT(
    268 	  [found xgettext program is not GNU xgettext; ignore it])
    269         XGETTEXT=":"
    270       fi
    271     fi
    272 
    273     # We need to process the po/ directory.
    274     POSUB=po
    275 
    276     AC_OUTPUT_COMMANDS(
    277       [case "$CONFIG_FILES" in *po/Makefile.in*)
    278         sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
    279       esac])
    280 
    281     dnl These rules are solely for the distribution goal.  While doing this
    282     dnl we only have to keep exactly one list of the available catalogs
    283     dnl in configure.in.
    284     for lang in $ALL_LINGUAS; do
    285       GMOFILES="$GMOFILES $lang.gmo"
    286       POFILES="$POFILES $lang.po"
    287     done
    288 
    289     dnl Make all variables we use known to autoconf.
    290     AC_SUBST(CATALOGS)
    291     AC_SUBST(CATOBJEXT)
    292     AC_SUBST(DATADIRNAME)
    293     AC_SUBST(GMOFILES)
    294     AC_SUBST(INSTOBJEXT)
    295     AC_SUBST(INTLLIBS)
    296     AC_SUBST(PO_IN_DATADIR_TRUE)
    297     AC_SUBST(PO_IN_DATADIR_FALSE)
    298     AC_SUBST(POFILES)
    299     AC_SUBST(POSUB)
    300   ])
    301 
    302 # AM_GLIB_GNU_GETTEXT
    303 # -------------------
    304 # Do checks necessary for use of gettext. If a suitable implementation 
    305 # of gettext is found in either in libintl or in the C library,
    306 # it will set INTLLIBS to the libraries needed for use of gettext
    307 # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
    308 # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
    309 # on various variables needed by the Makefile.in.in installed by 
    310 # glib-gettextize.
    311 dnl
    312 glib_DEFUN([GLIB_GNU_GETTEXT],
    313   [AC_REQUIRE([AC_PROG_CC])dnl
    314    AC_REQUIRE([AC_HEADER_STDC])dnl
    315    
    316    GLIB_LC_MESSAGES
    317    GLIB_WITH_NLS
    318 
    319    if test "$gt_cv_have_gettext" = "yes"; then
    320      if test "x$ALL_LINGUAS" = "x"; then
    321        LINGUAS=
    322      else
    323        AC_MSG_CHECKING(for catalogs to be installed)
    324        NEW_LINGUAS=
    325        for presentlang in $ALL_LINGUAS; do
    326          useit=no
    327          if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
    328            desiredlanguages="$LINGUAS"
    329          else
    330            desiredlanguages="$ALL_LINGUAS"
    331          fi
    332          for desiredlang in $desiredlanguages; do
    333  	   # Use the presentlang catalog if desiredlang is
    334            #   a. equal to presentlang, or
    335            #   b. a variant of presentlang (because in this case,
    336            #      presentlang can be used as a fallback for messages
    337            #      which are not translated in the desiredlang catalog).
    338            case "$desiredlang" in
    339              "$presentlang"*) useit=yes;;
    340            esac
    341          done
    342          if test $useit = yes; then
    343            NEW_LINGUAS="$NEW_LINGUAS $presentlang"
    344          fi
    345        done
    346        LINGUAS=$NEW_LINGUAS
    347        AC_MSG_RESULT($LINGUAS)
    348      fi
    349 
    350      dnl Construct list of names of catalog files to be constructed.
    351      if test -n "$LINGUAS"; then
    352        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
    353      fi
    354    fi
    355 
    356    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
    357    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
    358    dnl Try to locate is.
    359    MKINSTALLDIRS=
    360    if test -n "$ac_aux_dir"; then
    361      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
    362    fi
    363    if test -z "$MKINSTALLDIRS"; then
    364      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
    365    fi
    366    AC_SUBST(MKINSTALLDIRS)
    367 
    368    dnl Generate list of files to be processed by xgettext which will
    369    dnl be included in po/Makefile.
    370    test -d po || mkdir po
    371    if test "x$srcdir" != "x."; then
    372      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
    373        posrcprefix="$srcdir/"
    374      else
    375        posrcprefix="../$srcdir/"
    376      fi
    377    else
    378      posrcprefix="../"
    379    fi
    380    rm -f po/POTFILES
    381    sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
    382 	< $srcdir/po/POTFILES.in > po/POTFILES
    383   ])
    384 
    385 # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
    386 # -------------------------------
    387 # Define VARIABLE to the location where catalog files will
    388 # be installed by po/Makefile.
    389 glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
    390 [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
    391 glib_save_prefix="$prefix"
    392 glib_save_exec_prefix="$exec_prefix"
    393 glib_save_datarootdir="$datarootdir"
    394 test "x$prefix" = xNONE && prefix=$ac_default_prefix
    395 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
    396 datarootdir=`eval echo "${datarootdir}"`
    397 if test "x$CATOBJEXT" = "x.mo" ; then
    398   localedir=`eval echo "${libdir}/locale"`
    399 else
    400   localedir=`eval echo "${datadir}/locale"`
    401 fi
    402 prefix="$glib_save_prefix"
    403 exec_prefix="$glib_save_exec_prefix"
    404 datarootdir="$glib_save_datarootdir"
    405 AC_DEFINE_UNQUOTED($1, "$localedir",
    406   [Define the location where the catalogs will be installed])
    407 ])
    408 
    409 dnl
    410 dnl Now the definitions that aclocal will find
    411 dnl
    412 ifdef(glib_configure_in,[],[
    413 AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
    414 AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
    415 ])dnl
    416 
    417 # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
    418 # 
    419 # Create a temporary file with TEST-FILE as its contents and pass the
    420 # file name to PROGRAM.  Perform ACTION-IF-PASS if PROGRAM exits with
    421 # 0 and perform ACTION-IF-FAIL for any other exit status.
    422 AC_DEFUN([GLIB_RUN_PROG],
    423 [cat >conftest.foo <<_ACEOF
    424 $2
    425 _ACEOF
    426 if AC_RUN_LOG([$1 conftest.foo]); then
    427   m4_ifval([$3], [$3], [:])
    428 m4_ifvaln([$4], [else $4])dnl
    429 echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
    430 sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
    431 fi])
    432 
    433