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
32 AC_PREREQ(2.53)
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
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])
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 ])
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)
107 gt_cv_have_gettext=no
109 CATOBJEXT=NONE
110 XGETTEXT=:
111 INTLLIBS=
113 AC_CHECK_HEADER(libintl.h,
114 [gt_cv_func_dgettext_libintl="no"
115 libintl_extra_libs=""
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 ])
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
140 if test "$gt_cv_func_ngettext_libc" = "yes" ; then
141 AC_CHECK_FUNCS(bind_textdomain_codeset)
142 fi
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
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)])])
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
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"
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
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
195 if test "$gt_cv_func_dgettext_libintl" = "yes"; then
196 INTLLIBS="-lintl $libintl_extra_libs"
197 fi
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@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 *-*-openbsd*)
243 CATOBJEXT=.mo
244 DATADIRNAME=share
245 ;;
246 *)
247 CATOBJEXT=.mo
248 DATADIRNAME=lib
249 ;;
250 esac])
251 LIBS="$glib_save_LIBS"
252 INSTOBJEXT=.mo
253 else
254 gt_cv_have_gettext=no
255 fi
256 fi
257 ])
259 if test "$gt_cv_have_gettext" = "yes" ; then
260 AC_DEFINE(ENABLE_NLS, 1,
261 [always defined to indicate that i18n is enabled])
262 fi
264 dnl Test whether we really found GNU xgettext.
265 if test "$XGETTEXT" != ":"; then
266 dnl If it is not GNU xgettext we define it as : so that the
267 dnl Makefiles still can work.
268 if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
269 : ;
270 else
271 AC_MSG_RESULT(
272 [found xgettext program is not GNU xgettext; ignore it])
273 XGETTEXT=":"
274 fi
275 fi
277 # We need to process the po/ directory.
278 POSUB=po
280 AC_OUTPUT_COMMANDS(
281 [case "$CONFIG_FILES" in *po/Makefile.in*)
282 sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
283 esac])
285 dnl These rules are solely for the distribution goal. While doing this
286 dnl we only have to keep exactly one list of the available catalogs
287 dnl in configure.ac.
288 for lang in $ALL_LINGUAS; do
289 GMOFILES="$GMOFILES $lang.gmo"
290 POFILES="$POFILES $lang.po"
291 done
293 dnl Make all variables we use known to autoconf.
294 AC_SUBST(CATALOGS)
295 AC_SUBST(CATOBJEXT)
296 AC_SUBST(DATADIRNAME)
297 AC_SUBST(GMOFILES)
298 AC_SUBST(INSTOBJEXT)
299 AC_SUBST(INTLLIBS)
300 AC_SUBST(PO_IN_DATADIR_TRUE)
301 AC_SUBST(PO_IN_DATADIR_FALSE)
302 AC_SUBST(POFILES)
303 AC_SUBST(POSUB)
304 ])
306 # AM_GLIB_GNU_GETTEXT
307 # -------------------
308 # Do checks necessary for use of gettext. If a suitable implementation
309 # of gettext is found in either in libintl or in the C library,
310 # it will set INTLLIBS to the libraries needed for use of gettext
311 # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
312 # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
313 # on various variables needed by the Makefile.in.in installed by
314 # glib-gettextize.
315 dnl
316 AU_DEFUN([GLIB_GNU_GETTEXT],
317 [AC_REQUIRE([AC_PROG_CC])dnl
319 GLIB_LC_MESSAGES
320 GLIB_WITH_NLS
322 if test "$gt_cv_have_gettext" = "yes"; then
323 if test "x$ALL_LINGUAS" = "x"; then
324 LINGUAS=
325 else
326 AC_MSG_CHECKING(for catalogs to be installed)
327 NEW_LINGUAS=
328 for presentlang in $ALL_LINGUAS; do
329 useit=no
330 if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
331 desiredlanguages="$LINGUAS"
332 else
333 desiredlanguages="$ALL_LINGUAS"
334 fi
335 for desiredlang in $desiredlanguages; do
336 # Use the presentlang catalog if desiredlang is
337 # a. equal to presentlang, or
338 # b. a variant of presentlang (because in this case,
339 # presentlang can be used as a fallback for messages
340 # which are not translated in the desiredlang catalog).
341 case "$desiredlang" in
342 "$presentlang"*) useit=yes;;
343 esac
344 done
345 if test $useit = yes; then
346 NEW_LINGUAS="$NEW_LINGUAS $presentlang"
347 fi
348 done
349 LINGUAS=$NEW_LINGUAS
350 AC_MSG_RESULT($LINGUAS)
351 fi
353 dnl Construct list of names of catalog files to be constructed.
354 if test -n "$LINGUAS"; then
355 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
356 fi
357 fi
359 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
360 dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
361 dnl Try to locate is.
362 MKINSTALLDIRS=
363 if test -n "$ac_aux_dir"; then
364 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
365 fi
366 if test -z "$MKINSTALLDIRS"; then
367 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
368 fi
369 AC_SUBST(MKINSTALLDIRS)
371 dnl Generate list of files to be processed by xgettext which will
372 dnl be included in po/Makefile.
373 test -d po || mkdir po
374 if test "x$srcdir" != "x."; then
375 if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
376 posrcprefix="$srcdir/"
377 else
378 posrcprefix="../$srcdir/"
379 fi
380 else
381 posrcprefix="../"
382 fi
383 rm -f po/POTFILES
384 sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
385 < $srcdir/po/POTFILES.in > po/POTFILES
386 ],
387 [[$0: This macro is deprecated. You should use upstream gettext instead.]])
389 # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
390 # -------------------------------
391 # Define VARIABLE to the location where catalog files will
392 # be installed by po/Makefile.
393 glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
394 [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
395 glib_save_prefix="$prefix"
396 glib_save_exec_prefix="$exec_prefix"
397 glib_save_datarootdir="$datarootdir"
398 test "x$prefix" = xNONE && prefix=$ac_default_prefix
399 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
400 datarootdir=`eval echo "${datarootdir}"`
401 if test "x$CATOBJEXT" = "x.mo" ; then
402 localedir=`eval echo "${libdir}/locale"`
403 else
404 localedir=`eval echo "${datadir}/locale"`
405 fi
406 prefix="$glib_save_prefix"
407 exec_prefix="$glib_save_exec_prefix"
408 datarootdir="$glib_save_datarootdir"
409 AC_DEFINE_UNQUOTED($1, "$localedir",
410 [Define the location where the catalogs will be installed])
411 ])
413 dnl
414 dnl Now the definitions that aclocal will find
415 dnl
416 ifdef(glib_configure_ac,[],[
417 AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
418 AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
419 ])dnl
421 # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
422 #
423 # Create a temporary file with TEST-FILE as its contents and pass the
424 # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with
425 # 0 and perform ACTION-IF-FAIL for any other exit status.
426 AC_DEFUN([GLIB_RUN_PROG],
427 [cat >conftest.foo <<_ACEOF
428 $2
429 _ACEOF
430 if AC_RUN_LOG([$1 conftest.foo]); then
431 m4_ifval([$3], [$3], [:])
432 m4_ifvaln([$4], [else $4])dnl
433 echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
434 sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
435 fi])