GSettings: deprecate 'schema' property
[platform/upstream/glib.git] / m4macros / glib-gettext.m4
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)
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@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     ])
258
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
263
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
276
277     # We need to process the po/ directory.
278     POSUB=po
279
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])
284
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
292
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   ])
305
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 glib_DEFUN([GLIB_GNU_GETTEXT],
317   [AC_REQUIRE([AC_PROG_CC])dnl
318    AC_REQUIRE([AC_HEADER_STDC])dnl
319    
320    GLIB_LC_MESSAGES
321    GLIB_WITH_NLS
322
323    if test "$gt_cv_have_gettext" = "yes"; then
324      if test "x$ALL_LINGUAS" = "x"; then
325        LINGUAS=
326      else
327        AC_MSG_CHECKING(for catalogs to be installed)
328        NEW_LINGUAS=
329        for presentlang in $ALL_LINGUAS; do
330          useit=no
331          if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
332            desiredlanguages="$LINGUAS"
333          else
334            desiredlanguages="$ALL_LINGUAS"
335          fi
336          for desiredlang in $desiredlanguages; do
337            # Use the presentlang catalog if desiredlang is
338            #   a. equal to presentlang, or
339            #   b. a variant of presentlang (because in this case,
340            #      presentlang can be used as a fallback for messages
341            #      which are not translated in the desiredlang catalog).
342            case "$desiredlang" in
343              "$presentlang"*) useit=yes;;
344            esac
345          done
346          if test $useit = yes; then
347            NEW_LINGUAS="$NEW_LINGUAS $presentlang"
348          fi
349        done
350        LINGUAS=$NEW_LINGUAS
351        AC_MSG_RESULT($LINGUAS)
352      fi
353
354      dnl Construct list of names of catalog files to be constructed.
355      if test -n "$LINGUAS"; then
356        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
357      fi
358    fi
359
360    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
361    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
362    dnl Try to locate is.
363    MKINSTALLDIRS=
364    if test -n "$ac_aux_dir"; then
365      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
366    fi
367    if test -z "$MKINSTALLDIRS"; then
368      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
369    fi
370    AC_SUBST(MKINSTALLDIRS)
371
372    dnl Generate list of files to be processed by xgettext which will
373    dnl be included in po/Makefile.
374    test -d po || mkdir po
375    if test "x$srcdir" != "x."; then
376      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
377        posrcprefix="$srcdir/"
378      else
379        posrcprefix="../$srcdir/"
380      fi
381    else
382      posrcprefix="../"
383    fi
384    rm -f po/POTFILES
385    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
386         < $srcdir/po/POTFILES.in > po/POTFILES
387   ])
388
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 ])
412
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
420
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])
436