Code

Added initial i18n support
[ncmpc.git] / m4 / glib-gettext.m4
1 # Copyright (C) 1995-2002 Free Software Foundation, Inc.
2 # Copyright (C) 2001-2003 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
26 #
27 # We need this here as well, since someone might use autoconf-2.5x
28 # to configure GLib then an older version to configure a package
29 # using AM_GLIB_GNU_GETTEXT
30 AC_PREREQ(2.53)
32 dnl
33 dnl We go to great lengths to make sure that aclocal won't 
34 dnl try to pull in the installed version of these macros
35 dnl when running aclocal in the glib directory.
36 dnl
37 m4_copy([AC_DEFUN],[glib_DEFUN])
38 m4_copy([AC_REQUIRE],[glib_REQUIRE])
39 dnl
40 dnl At the end, if we're not within glib, we'll define the public
41 dnl definitions in terms of our private definitions.
42 dnl
44 # GLIB_LC_MESSAGES
45 #--------------------
46 glib_DEFUN([GLIB_LC_MESSAGES],
47   [AC_CHECK_HEADERS([locale.h])
48     if test $ac_cv_header_locale_h = yes; then
49     AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
50       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
51        am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
52     if test $am_cv_val_LC_MESSAGES = yes; then
53       AC_DEFINE(HAVE_LC_MESSAGES, 1,
54         [Define if your <locale.h> file defines LC_MESSAGES.])
55     fi
56   fi])
58 # GLIB_PATH_PROG_WITH_TEST
59 #----------------------------
60 dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
61 dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
62 glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
63 [# Extract the first word of "$2", so it can be a program name with args.
64 set dummy $2; ac_word=[$]2
65 AC_MSG_CHECKING([for $ac_word])
66 AC_CACHE_VAL(ac_cv_path_$1,
67 [case "[$]$1" in
68   /*)
69   ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
70   ;;
71   *)
72   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
73   for ac_dir in ifelse([$5], , $PATH, [$5]); do
74     test -z "$ac_dir" && ac_dir=.
75     if test -f $ac_dir/$ac_word; then
76       if [$3]; then
77         ac_cv_path_$1="$ac_dir/$ac_word"
78         break
79       fi
80     fi
81   done
82   IFS="$ac_save_ifs"
83 dnl If no 4th arg is given, leave the cache variable unset,
84 dnl so AC_PATH_PROGS will keep looking.
85 ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
86 ])dnl
87   ;;
88 esac])dnl
89 $1="$ac_cv_path_$1"
90 if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
91   AC_MSG_RESULT([$]$1)
92 else
93   AC_MSG_RESULT(no)
94 fi
95 AC_SUBST($1)dnl
96 ])
98 # GLIB_WITH_NLS
99 #-----------------
100 glib_DEFUN([GLIB_WITH_NLS],
101   dnl NLS is obligatory
102   [USE_NLS=yes
103     AC_SUBST(USE_NLS)
105     gt_cv_have_gettext=no
107     CATOBJEXT=NONE
108     XGETTEXT=:
109     INTLLIBS=
111     AC_CHECK_HEADER(libintl.h,
112      [gt_cv_func_dgettext_libintl="no"
113       libintl_extra_libs=""
115       #
116       # First check in libc
117       #
118       AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
119         [AC_TRY_LINK([
120 #include <libintl.h>
121 ],
122           [return (int) dgettext ("","")],
123           gt_cv_func_dgettext_libc=yes,
124           gt_cv_func_dgettext_libc=no)
125         ])
126   
127       if test "$gt_cv_func_dgettext_libc" = "yes" ; then
128         AC_CHECK_FUNCS(bind_textdomain_codeset)
129       fi
131       #
132       # If we don't have everything we want, check in libintl
133       #
134       if test "$gt_cv_func_dgettext_libc" != "yes" \
135          || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
136         
137         AC_CHECK_LIB(intl, bindtextdomain,
138             [AC_CHECK_LIB(intl, dgettext,
139                           gt_cv_func_dgettext_libintl=yes)])
141         if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
142           AC_MSG_CHECKING([if -liconv is needed to use gettext])
143           AC_MSG_RESULT([])
144           AC_CHECK_LIB(intl, dcgettext,
145                        [gt_cv_func_dgettext_libintl=yes
146                         libintl_extra_libs=-liconv],
147                         :,-liconv)
148         fi
150         #
151         # If we found libintl, then check in it for bind_textdomain_codeset();
152         # we'll prefer libc if neither have bind_textdomain_codeset(),
153         # and both have dgettext
154         #
155         if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
156           glib_save_LIBS="$LIBS"
157           LIBS="$LIBS -lintl $libintl_extra_libs"
158           unset ac_cv_func_bind_textdomain_codeset
159           AC_CHECK_FUNCS(bind_textdomain_codeset)
160           LIBS="$glib_save_LIBS"
162           if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
163             gt_cv_func_dgettext_libc=no
164           else
165             if test "$gt_cv_func_dgettext_libc" = "yes"; then
166               gt_cv_func_dgettext_libintl=no
167             fi
168           fi
169         fi
170       fi
172       if test "$gt_cv_func_dgettext_libc" = "yes" \
173         || test "$gt_cv_func_dgettext_libintl" = "yes"; then
174         gt_cv_have_gettext=yes
175       fi
176   
177       if test "$gt_cv_func_dgettext_libintl" = "yes"; then
178         INTLLIBS="-lintl $libintl_extra_libs"
179       fi
180   
181       if test "$gt_cv_have_gettext" = "yes"; then
182         AC_DEFINE(HAVE_GETTEXT,1,
183           [Define if the GNU gettext() function is already present or preinstalled.])
184         GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
185           [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
186         if test "$MSGFMT" != "no"; then
187           glib_save_LIBS="$LIBS"
188           LIBS="$LIBS $INTLLIBS"
189           AC_CHECK_FUNCS(dcgettext)
190           AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
191           GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
192             [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
193           AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
194                          return _nl_msg_cat_cntr],
195             [CATOBJEXT=.gmo 
196              DATADIRNAME=share],
197             [case $host in
198             *-*-solaris*)
199             dnl On Solaris, if bind_textdomain_codeset is in libc,
200             dnl GNU format message catalog is always supported,
201             dnl since both are added to the libc all together.
202             dnl Hence, we'd like to go with DATADIRNAME=share and
203             dnl and CATOBJEXT=.gmo in this case.
204             AC_CHECK_FUNC(bind_textdomain_codeset,
205               [CATOBJEXT=.gmo 
206                DATADIRNAME=share],
207               [CATOBJEXT=.mo
208                DATADIRNAME=lib])
209             ;;
210             *)
211             CATOBJEXT=.mo
212             DATADIRNAME=lib
213             ;;
214             esac])
215           LIBS="$glib_save_LIBS"
216           INSTOBJEXT=.mo
217         else
218           gt_cv_have_gettext=no
219         fi
220       fi
221     ])
223     if test "$gt_cv_have_gettext" = "yes" ; then
224       AC_DEFINE(ENABLE_NLS, 1,
225         [always defined to indicate that i18n is enabled])
226     fi
228     dnl Test whether we really found GNU xgettext.
229     if test "$XGETTEXT" != ":"; then
230       dnl If it is not GNU xgettext we define it as : so that the
231       dnl Makefiles still can work.
232       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
233         : ;
234       else
235         AC_MSG_RESULT(
236           [found xgettext program is not GNU xgettext; ignore it])
237         XGETTEXT=":"
238       fi
239     fi
241     # We need to process the po/ directory.
242     POSUB=po
244     AC_OUTPUT_COMMANDS(
245       [case "$CONFIG_FILES" in *po/Makefile.in*)
246         sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
247       esac])
249     dnl These rules are solely for the distribution goal.  While doing this
250     dnl we only have to keep exactly one list of the available catalogs
251     dnl in configure.in.
252     for lang in $ALL_LINGUAS; do
253       GMOFILES="$GMOFILES $lang.gmo"
254       POFILES="$POFILES $lang.po"
255     done
257     dnl Make all variables we use known to autoconf.
258     AC_SUBST(CATALOGS)
259     AC_SUBST(CATOBJEXT)
260     AC_SUBST(DATADIRNAME)
261     AC_SUBST(GMOFILES)
262     AC_SUBST(INSTOBJEXT)
263     AC_SUBST(INTLLIBS)
264     AC_SUBST(PO_IN_DATADIR_TRUE)
265     AC_SUBST(PO_IN_DATADIR_FALSE)
266     AC_SUBST(POFILES)
267     AC_SUBST(POSUB)
268   ])
270 # AM_GLIB_GNU_GETTEXT
271 # -------------------
272 # Do checks necessary for use of gettext. If a suitable implementation 
273 # of gettext is found in either in libintl or in the C library,
274 # it will set INTLLIBS to the libraries needed for use of gettext
275 # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
276 # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
277 # on various variables needed by the Makefile.in.in installed by 
278 # glib-gettextize.
279 dnl
280 glib_DEFUN([GLIB_GNU_GETTEXT],
281   [AC_REQUIRE([AC_PROG_CC])dnl
282    AC_REQUIRE([AC_HEADER_STDC])dnl
283    
284    GLIB_LC_MESSAGES
285    GLIB_WITH_NLS
287    if test "$gt_cv_have_gettext" = "yes"; then
288      if test "x$ALL_LINGUAS" = "x"; then
289        LINGUAS=
290      else
291        AC_MSG_CHECKING(for catalogs to be installed)
292        NEW_LINGUAS=
293        for presentlang in $ALL_LINGUAS; do
294          useit=no
295          if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
296            desiredlanguages="$LINGUAS"
297          else
298            desiredlanguages="$ALL_LINGUAS"
299          fi
300          for desiredlang in $desiredlanguages; do
301            # Use the presentlang catalog if desiredlang is
302            #   a. equal to presentlang, or
303            #   b. a variant of presentlang (because in this case,
304            #      presentlang can be used as a fallback for messages
305            #      which are not translated in the desiredlang catalog).
306            case "$desiredlang" in
307              "$presentlang"*) useit=yes;;
308            esac
309          done
310          if test $useit = yes; then
311            NEW_LINGUAS="$NEW_LINGUAS $presentlang"
312          fi
313        done
314        LINGUAS=$NEW_LINGUAS
315        AC_MSG_RESULT($LINGUAS)
316      fi
318      dnl Construct list of names of catalog files to be constructed.
319      if test -n "$LINGUAS"; then
320        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
321      fi
322    fi
324    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
325    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
326    dnl Try to locate is.
327    MKINSTALLDIRS=
328    if test -n "$ac_aux_dir"; then
329      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
330    fi
331    if test -z "$MKINSTALLDIRS"; then
332      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
333    fi
334    AC_SUBST(MKINSTALLDIRS)
336    dnl Generate list of files to be processed by xgettext which will
337    dnl be included in po/Makefile.
338    test -d po || mkdir po
339    if test "x$srcdir" != "x."; then
340      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
341        posrcprefix="$srcdir/"
342      else
343        posrcprefix="../$srcdir/"
344      fi
345    else
346      posrcprefix="../"
347    fi
348    rm -f po/POTFILES
349    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
350         < $srcdir/po/POTFILES.in > po/POTFILES
351   ])
353 # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
354 # -------------------------------
355 # Define VARIABLE to the location where catalog files will
356 # be installed by po/Makefile.
357 glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
358 [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
359 glib_save_prefix="$prefix"
360 glib_save_exec_prefix="$exec_prefix"
361 test "x$prefix" = xNONE && prefix=$ac_default_prefix
362 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
363 if test "x$CATOBJEXT" = "x.mo" ; then
364   localedir=`eval echo "${libdir}/locale"`
365 else
366   localedir=`eval echo "${datadir}/locale"`
367 fi
368 prefix="$glib_save_prefix"
369 exec_prefix="$glib_save_exec_prefix"
370 AC_DEFINE_UNQUOTED($1, "$localedir",
371   [Define the location where the catalogs will be installed])
372 ])
374 dnl
375 dnl Now the definitions that aclocal will find
376 dnl
377 ifdef(glib_configure_in,[],[
378 AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
379 AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
380 ])dnl