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