make shave.m4 work on autoconf 2.59 where ac_pwd does not exist
[platform/upstream/gst-common.git] / m4 / 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             *)
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