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# Increment this whenever this file is changed. 30#serial 1 31 32# We need this here as well, since someone might use autoconf-2.5x 33# to configure GLib then an older version to configure a package 34# using AM_GLIB_GNU_GETTEXT 35AC_PREREQ(2.53) 36 37dnl 38dnl We go to great lengths to make sure that aclocal won't 39dnl try to pull in the installed version of these macros 40dnl when running aclocal in the glib directory. 41dnl 42m4_copy([AC_DEFUN],[glib_DEFUN]) 43m4_copy([AC_REQUIRE],[glib_REQUIRE]) 44dnl 45dnl At the end, if we're not within glib, we'll define the public 46dnl definitions in terms of our private definitions. 47dnl 48 49# GLIB_LC_MESSAGES 50#-------------------- 51glib_DEFUN([GLIB_LC_MESSAGES], 52 [AC_CHECK_HEADERS([locale.h]) 53 if test $ac_cv_header_locale_h = yes; then 54 AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, 55 [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], 56 am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) 57 if test $am_cv_val_LC_MESSAGES = yes; then 58 AC_DEFINE(HAVE_LC_MESSAGES, 1, 59 [Define if your <locale.h> file defines LC_MESSAGES.]) 60 fi 61 fi]) 62 63# GLIB_PATH_PROG_WITH_TEST 64#---------------------------- 65dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, 66dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) 67glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], 68[# Extract the first word of "$2", so it can be a program name with args. 69set dummy $2; ac_word=[$]2 70AC_MSG_CHECKING([for $ac_word]) 71AC_CACHE_VAL(ac_cv_path_$1, 72[case "[$]$1" in 73 /*) 74 ac_cv_path_$1="[$]$1" # Let the user override the test with a path. 75 ;; 76 *) 77 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" 78 for ac_dir in ifelse([$5], , $PATH, [$5]); do 79 test -z "$ac_dir" && ac_dir=. 80 if test -f $ac_dir/$ac_word; then 81 if [$3]; then 82 ac_cv_path_$1="$ac_dir/$ac_word" 83 break 84 fi 85 fi 86 done 87 IFS="$ac_save_ifs" 88dnl If no 4th arg is given, leave the cache variable unset, 89dnl so AC_PATH_PROGS will keep looking. 90ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" 91])dnl 92 ;; 93esac])dnl 94$1="$ac_cv_path_$1" 95if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then 96 AC_MSG_RESULT([$]$1) 97else 98 AC_MSG_RESULT(no) 99fi 100AC_SUBST($1)dnl 101]) 102 103dnl Checks for special options needed on Mac OS X. 104dnl Defines INTL_MACOSX_LIBS. 105dnl 106dnl Copied from intlmacosx.m4 in gettext, GPL. 107dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. 108glib_DEFUN([glib_gt_INTL_MACOSX], 109[ 110 dnl Check for API introduced in Mac OS X 10.2. 111 AC_CACHE_CHECK([for CFPreferencesCopyAppValue], 112 [gt_cv_func_CFPreferencesCopyAppValue], 113 [gt_save_LIBS="$LIBS" 114 LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" 115 AC_LINK_IFELSE( 116 [AC_LANG_PROGRAM( 117 [[#include <CoreFoundation/CFPreferences.h>]], 118 [[CFPreferencesCopyAppValue(NULL, NULL)]])], 119 [gt_cv_func_CFPreferencesCopyAppValue=yes], 120 [gt_cv_func_CFPreferencesCopyAppValue=no]) 121 LIBS="$gt_save_LIBS"]) 122 if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then 123 AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], 124 [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) 125 fi 126 dnl Check for API introduced in Mac OS X 10.3. 127 AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], 128 [gt_save_LIBS="$LIBS" 129 LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" 130 AC_LINK_IFELSE( 131 [AC_LANG_PROGRAM( 132 [[#include <CoreFoundation/CFLocale.h>]], 133 [[CFLocaleCopyCurrent();]])], 134 [gt_cv_func_CFLocaleCopyCurrent=yes], 135 [gt_cv_func_CFLocaleCopyCurrent=no]) 136 LIBS="$gt_save_LIBS"]) 137 if test $gt_cv_func_CFLocaleCopyCurrent = yes; then 138 AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], 139 [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) 140 fi 141 INTL_MACOSX_LIBS= 142 if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then 143 INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" 144 fi 145 AC_SUBST([INTL_MACOSX_LIBS]) 146]) 147 148# GLIB_WITH_NLS 149#----------------- 150glib_DEFUN([GLIB_WITH_NLS], 151 dnl NLS is obligatory 152 [USE_NLS=yes 153 AC_SUBST(USE_NLS) 154 155 gt_cv_have_gettext=no 156 157 CATOBJEXT=NONE 158 XGETTEXT=: 159 INTLLIBS= 160 161 glib_gt_INTL_MACOSX 162 163 AC_CHECK_HEADER(libintl.h, 164 [gt_cv_func_dgettext_libintl="no" 165 libintl_extra_libs="" 166 167 # 168 # First check in libc 169 # 170 AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, 171 [AC_TRY_LINK([ 172#include <libintl.h> 173], 174 [return !ngettext ("","", 1)], 175 gt_cv_func_ngettext_libc=yes, 176 gt_cv_func_ngettext_libc=no) 177 ]) 178 179 if test "$gt_cv_func_ngettext_libc" = "yes" ; then 180 AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, 181 [AC_TRY_LINK([ 182#include <libintl.h> 183], 184 [return !dgettext ("","")], 185 gt_cv_func_dgettext_libc=yes, 186 gt_cv_func_dgettext_libc=no) 187 ]) 188 fi 189 190 if test "$gt_cv_func_ngettext_libc" = "yes" ; then 191 AC_CHECK_FUNCS(bind_textdomain_codeset) 192 fi 193 194 # 195 # If we don't have everything we want, check in libintl 196 # 197 if test "$gt_cv_func_dgettext_libc" != "yes" \ 198 || test "$gt_cv_func_ngettext_libc" != "yes" \ 199 || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then 200 201 AC_CHECK_LIB(intl, bindtextdomain, 202 [AC_CHECK_LIB(intl, ngettext, 203 [AC_CHECK_LIB(intl, dgettext, 204 gt_cv_func_dgettext_libintl=yes)])]) 205 206 if test "$gt_cv_func_dgettext_libintl" != "yes" ; then 207 AC_MSG_CHECKING([if -liconv is needed to use gettext]) 208 AC_MSG_RESULT([]) 209 AC_CHECK_LIB(intl, ngettext, 210 [AC_CHECK_LIB(intl, dcgettext, 211 [gt_cv_func_dgettext_libintl=yes 212 libintl_extra_libs=-liconv], 213 :,-liconv)], 214 :,-liconv) 215 fi 216 217 # 218 # If we found libintl, then check in it for bind_textdomain_codeset(); 219 # we'll prefer libc if neither have bind_textdomain_codeset(), 220 # and both have dgettext and ngettext 221 # 222 if test "$gt_cv_func_dgettext_libintl" = "yes" ; then 223 glib_save_LIBS="$LIBS" 224 LIBS="$LIBS -lintl $libintl_extra_libs" 225 unset ac_cv_func_bind_textdomain_codeset 226 AC_CHECK_FUNCS(bind_textdomain_codeset) 227 LIBS="$glib_save_LIBS" 228 229 if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then 230 gt_cv_func_dgettext_libc=no 231 else 232 if test "$gt_cv_func_dgettext_libc" = "yes" \ 233 && test "$gt_cv_func_ngettext_libc" = "yes"; then 234 gt_cv_func_dgettext_libintl=no 235 fi 236 fi 237 fi 238 fi 239 240 if test "$gt_cv_func_dgettext_libc" = "yes" \ 241 || test "$gt_cv_func_dgettext_libintl" = "yes"; then 242 gt_cv_have_gettext=yes 243 fi 244 245 if test "$gt_cv_func_dgettext_libintl" = "yes"; then 246 INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" 247 fi 248 249 if test "$gt_cv_have_gettext" = "yes"; then 250 AC_DEFINE(HAVE_GETTEXT,1, 251 [Define if the GNU gettext() function is already present or preinstalled.]) 252 GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, 253 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl 254 if test "$MSGFMT" != "no"; then 255 glib_save_LIBS="$LIBS" 256 LIBS="$LIBS $INTLLIBS" 257 AC_CHECK_FUNCS(dcgettext) 258 MSGFMT_OPTS= 259 AC_MSG_CHECKING([if msgfmt accepts -c]) 260 GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ 261msgid "" 262msgstr "" 263"Content-Type: text/plain; charset=UTF-8\n" 264"Project-Id-Version: test 1.0\n" 265"PO-Revision-Date: 2007-02-15 12:01+0100\n" 266"Last-Translator: test <foo@bar.xx>\n" 267"Language-Team: C <LL@li.org>\n" 268"MIME-Version: 1.0\n" 269"Content-Transfer-Encoding: 8bit\n" 270], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) 271 AC_SUBST(MSGFMT_OPTS) 272 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) 273 GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, 274 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) 275 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; 276 return _nl_msg_cat_cntr], 277 [CATOBJEXT=.gmo 278 DATADIRNAME=share], 279 [case $host in 280 *-*-solaris*) 281 dnl On Solaris, if bind_textdomain_codeset is in libc, 282 dnl GNU format message catalog is always supported, 283 dnl since both are added to the libc all together. 284 dnl Hence, we'd like to go with DATADIRNAME=share and 285 dnl and CATOBJEXT=.gmo in this case. 286 AC_CHECK_FUNC(bind_textdomain_codeset, 287 [CATOBJEXT=.gmo 288 DATADIRNAME=share], 289 [CATOBJEXT=.mo 290 DATADIRNAME=lib]) 291 ;; 292 *-*-openbsd*) 293 CATOBJEXT=.mo 294 DATADIRNAME=share 295 ;; 296 *) 297 CATOBJEXT=.mo 298 DATADIRNAME=lib 299 ;; 300 esac]) 301 LIBS="$glib_save_LIBS" 302 INSTOBJEXT=.mo 303 else 304 gt_cv_have_gettext=no 305 fi 306 fi 307 ]) 308 309 if test "$gt_cv_have_gettext" = "yes" ; then 310 AC_DEFINE(ENABLE_NLS, 1, 311 [always defined to indicate that i18n is enabled]) 312 fi 313 314 dnl Test whether we really found GNU xgettext. 315 if test "$XGETTEXT" != ":"; then 316 dnl If it is not GNU xgettext we define it as : so that the 317 dnl Makefiles still can work. 318 if $XGETTEXT --omit-header /dev/null 2> /dev/null; then 319 : ; 320 else 321 AC_MSG_RESULT( 322 [found xgettext program is not GNU xgettext; ignore it]) 323 XGETTEXT=":" 324 fi 325 fi 326 327 # We need to process the po/ directory. 328 POSUB=po 329 330 AC_OUTPUT_COMMANDS( 331 [case "$CONFIG_FILES" in *po/Makefile.in*) 332 sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile 333 esac]) 334 335 dnl These rules are solely for the distribution goal. While doing this 336 dnl we only have to keep exactly one list of the available catalogs 337 dnl in configure.ac. 338 for lang in $ALL_LINGUAS; do 339 GMOFILES="$GMOFILES $lang.gmo" 340 POFILES="$POFILES $lang.po" 341 done 342 343 dnl Make all variables we use known to autoconf. 344 AC_SUBST(CATALOGS) 345 AC_SUBST(CATOBJEXT) 346 AC_SUBST(DATADIRNAME) 347 AC_SUBST(GMOFILES) 348 AC_SUBST(INSTOBJEXT) 349 AC_SUBST(INTLLIBS) 350 AC_SUBST(PO_IN_DATADIR_TRUE) 351 AC_SUBST(PO_IN_DATADIR_FALSE) 352 AC_SUBST(POFILES) 353 AC_SUBST(POSUB) 354 ]) 355 356# AM_GLIB_GNU_GETTEXT 357# ------------------- 358# Do checks necessary for use of gettext. If a suitable implementation 359# of gettext is found in either in libintl or in the C library, 360# it will set INTLLIBS to the libraries needed for use of gettext 361# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable 362# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() 363# on various variables needed by the Makefile.in.in installed by 364# glib-gettextize. 365dnl 366AU_DEFUN([GLIB_GNU_GETTEXT], 367 [AC_REQUIRE([AC_PROG_CC])dnl 368 369 GLIB_LC_MESSAGES 370 GLIB_WITH_NLS 371 372 if test "$gt_cv_have_gettext" = "yes"; then 373 if test "x$ALL_LINGUAS" = "x"; then 374 LINGUAS= 375 else 376 AC_MSG_CHECKING(for catalogs to be installed) 377 NEW_LINGUAS= 378 for presentlang in $ALL_LINGUAS; do 379 useit=no 380 if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then 381 desiredlanguages="$LINGUAS" 382 else 383 desiredlanguages="$ALL_LINGUAS" 384 fi 385 for desiredlang in $desiredlanguages; do 386 # Use the presentlang catalog if desiredlang is 387 # a. equal to presentlang, or 388 # b. a variant of presentlang (because in this case, 389 # presentlang can be used as a fallback for messages 390 # which are not translated in the desiredlang catalog). 391 case "$desiredlang" in 392 "$presentlang"*) useit=yes;; 393 esac 394 done 395 if test $useit = yes; then 396 NEW_LINGUAS="$NEW_LINGUAS $presentlang" 397 fi 398 done 399 LINGUAS=$NEW_LINGUAS 400 AC_MSG_RESULT($LINGUAS) 401 fi 402 403 dnl Construct list of names of catalog files to be constructed. 404 if test -n "$LINGUAS"; then 405 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done 406 fi 407 fi 408 409 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly 410 dnl find the mkinstalldirs script in another subdir but ($top_srcdir). 411 dnl Try to locate is. 412 MKINSTALLDIRS= 413 if test -n "$ac_aux_dir"; then 414 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" 415 fi 416 if test -z "$MKINSTALLDIRS"; then 417 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" 418 fi 419 AC_SUBST(MKINSTALLDIRS) 420 421 dnl Generate list of files to be processed by xgettext which will 422 dnl be included in po/Makefile. 423 test -d po || mkdir po 424 if test "x$srcdir" != "x."; then 425 if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then 426 posrcprefix="$srcdir/" 427 else 428 posrcprefix="../$srcdir/" 429 fi 430 else 431 posrcprefix="../" 432 fi 433 rm -f po/POTFILES 434 sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ 435 < $srcdir/po/POTFILES.in > po/POTFILES 436 ], 437 [[$0: This macro is deprecated. You should use upstream gettext instead.]]) 438 439# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) 440# ------------------------------- 441# Define VARIABLE to the location where catalog files will 442# be installed by po/Makefile. 443glib_DEFUN([GLIB_DEFINE_LOCALEDIR], 444[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl 445glib_save_prefix="$prefix" 446glib_save_exec_prefix="$exec_prefix" 447glib_save_datarootdir="$datarootdir" 448test "x$prefix" = xNONE && prefix=$ac_default_prefix 449test "x$exec_prefix" = xNONE && exec_prefix=$prefix 450datarootdir=`eval echo "${datarootdir}"` 451if test "x$CATOBJEXT" = "x.mo" ; then 452 localedir=`eval echo "${libdir}/locale"` 453else 454 localedir=`eval echo "${datadir}/locale"` 455fi 456prefix="$glib_save_prefix" 457exec_prefix="$glib_save_exec_prefix" 458datarootdir="$glib_save_datarootdir" 459AC_DEFINE_UNQUOTED($1, "$localedir", 460 [Define the location where the catalogs will be installed]) 461]) 462 463dnl 464dnl Now the definitions that aclocal will find 465dnl 466ifdef(glib_configure_ac,[],[ 467AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) 468AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) 469])dnl 470 471# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) 472# 473# Create a temporary file with TEST-FILE as its contents and pass the 474# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with 475# 0 and perform ACTION-IF-FAIL for any other exit status. 476AC_DEFUN([GLIB_RUN_PROG], 477[cat >conftest.foo <<_ACEOF 478$2 479_ACEOF 480if AC_RUN_LOG([$1 conftest.foo]); then 481 m4_ifval([$3], [$3], [:]) 482m4_ifvaln([$4], [else $4])dnl 483echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD 484sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD 485fi]) 486 487