• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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@cygnus.com>, 1995, 1996
16#
17# Modified to never use included libintl.
18# Owen Taylor <otaylor@redhat.com>, 12/15/1998
19#
20# Major rework to remove unused code
21# Owen Taylor <otaylor@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@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
32AC_PREREQ(2.53)
33
34dnl
35dnl We go to great lengths to make sure that aclocal won't
36dnl try to pull in the installed version of these macros
37dnl when running aclocal in the glib directory.
38dnl
39m4_copy([AC_DEFUN],[glib_DEFUN])
40m4_copy([AC_REQUIRE],[glib_REQUIRE])
41dnl
42dnl At the end, if we're not within glib, we'll define the public
43dnl definitions in terms of our private definitions.
44dnl
45
46# GLIB_LC_MESSAGES
47#--------------------
48glib_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#----------------------------
62dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
63dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
64glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
65[# Extract the first word of "$2", so it can be a program name with args.
66set dummy $2; ac_word=[$]2
67AC_MSG_CHECKING([for $ac_word])
68AC_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"
85dnl If no 4th arg is given, leave the cache variable unset,
86dnl so AC_PATH_PROGS will keep looking.
87ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
88])dnl
89  ;;
90esac])dnl
91$1="$ac_cv_path_$1"
92if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
93  AC_MSG_RESULT([$]$1)
94else
95  AC_MSG_RESULT(no)
96fi
97AC_SUBST($1)dnl
98])
99
100# GLIB_WITH_NLS
101#-----------------
102glib_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],[
211msgid ""
212msgstr ""
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@bar.xx>\n"
217"Language-Team: C <LL@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.
311dnl
312glib_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.
389glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
390[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
391glib_save_prefix="$prefix"
392glib_save_exec_prefix="$exec_prefix"
393glib_save_datarootdir="$datarootdir"
394test "x$prefix" = xNONE && prefix=$ac_default_prefix
395test "x$exec_prefix" = xNONE && exec_prefix=$prefix
396datarootdir=`eval echo "${datarootdir}"`
397if test "x$CATOBJEXT" = "x.mo" ; then
398  localedir=`eval echo "${libdir}/locale"`
399else
400  localedir=`eval echo "${datadir}/locale"`
401fi
402prefix="$glib_save_prefix"
403exec_prefix="$glib_save_exec_prefix"
404datarootdir="$glib_save_datarootdir"
405AC_DEFINE_UNQUOTED($1, "$localedir",
406  [Define the location where the catalogs will be installed])
407])
408
409dnl
410dnl Now the definitions that aclocal will find
411dnl
412ifdef(glib_configure_in,[],[
413AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
414AC_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.
422AC_DEFUN([GLIB_RUN_PROG],
423[cat >conftest.foo <<_ACEOF
424$2
425_ACEOF
426if AC_RUN_LOG([$1 conftest.foo]); then
427  m4_ifval([$3], [$3], [:])
428m4_ifvaln([$4], [else $4])dnl
429echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
430sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
431fi])
432
433