Actually set INTLLIBS when needed. (Reported by Tor Lillqvist)
[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(GMOFILES)
229     AC_SUBST(INSTOBJEXT)
230     AC_SUBST(INTLLIBS)
231     AC_SUBST(PO_IN_DATADIR_TRUE)
232     AC_SUBST(PO_IN_DATADIR_FALSE)
233     AC_SUBST(POFILES)
234     AC_SUBST(POSUB)
235   ])
236
237 # AM_GLIB_GNU_GETTEXT
238 # -------------------
239 # Do checks necessary for use of gettext. If a suitable implementation 
240 # of gettext is found in either in libintl or in the C library,
241 # it will set INTLLIBS to the libraries needed for use of gettext
242 # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
243 # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
244 # on various variables needed by the Makefile.in.in installed by 
245 # glib-gettextize.
246 dnl
247 glib_DEFUN(GLIB_GNU_GETTEXT,
248   [AC_REQUIRE([AC_PROG_CC])dnl
249    AC_REQUIRE([AC_HEADER_STDC])dnl
250    
251    GLIB_LC_MESSAGES
252    GLIB_WITH_NLS
253
254    if test "$gt_cv_have_gettext" = "yes"; then
255      if test "x$ALL_LINGUAS" = "x"; then
256        LINGUAS=
257      else
258        AC_MSG_CHECKING(for catalogs to be installed)
259        NEW_LINGUAS=
260        for lang in ${LINGUAS=$ALL_LINGUAS}; do
261          case "$ALL_LINGUAS" in
262           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
263          esac
264        done
265        LINGUAS=$NEW_LINGUAS
266        AC_MSG_RESULT($LINGUAS)
267      fi
268
269      dnl Construct list of names of catalog files to be constructed.
270      if test -n "$LINGUAS"; then
271        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
272      fi
273    fi
274
275    dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
276    dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
277    dnl Try to locate is.
278    MKINSTALLDIRS=
279    if test -n "$ac_aux_dir"; then
280      MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
281    fi
282    if test -z "$MKINSTALLDIRS"; then
283      MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
284    fi
285    AC_SUBST(MKINSTALLDIRS)
286
287    dnl Generate list of files to be processed by xgettext which will
288    dnl be included in po/Makefile.
289    test -d po || mkdir po
290    if test "x$srcdir" != "x."; then
291      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
292        posrcprefix="$srcdir/"
293      else
294        posrcprefix="../$srcdir/"
295      fi
296    else
297      posrcprefix="../"
298    fi
299    rm -f po/POTFILES
300    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
301         < $srcdir/po/POTFILES.in > po/POTFILES
302   ])
303
304 # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
305 # -------------------------------
306 # Define VARIABLE to the location where catalog files will
307 # be installed by po/Makefile.
308 glib_DEFUN(GLIB_DEFINE_LOCALEDIR,
309 [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
310 glib_save_prefix="$prefix"
311 test "x$prefix" = xNONE && prefix=$ac_default_prefix
312 if test "x$CATOBJEXT" = "x.mo" ; then
313   localedir=`eval echo "${libdir}/locale"`
314 else
315   localedir=`eval echo "${datadir}/locale"`
316 fi
317 prefix="$glib_save_prefix"
318 AC_DEFINE_UNQUOTED($1, "$localedir",
319   [Define the location where the catalogs will be installed])
320 ])
321
322 dnl
323 dnl Now the definitions that aclocal will find
324 dnl
325 ifdef(glib_configure_in,[],[
326 AC_DEFUN(AM_GLIB_GNU_GETTEXT,[GLIB_GNU_GETTEXT($@)])
327 AC_DEFUN(AM_GLIB_DEFINE_LOCALEDIR,[GLIB_DEFINE_LOCALEDIR($@)])
328 ])dnl