mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
3a926db37b
When compiling statically against the system-provided gettext on Mac OS X, GLib needs to be linked against CoreFramework, which provides some functions used by gettext. Fix this by including the necessary macro magic from upstream gettext. https://bugzilla.gnome.org/show_bug.cgi?id=725894
484 lines
15 KiB
Plaintext
484 lines
15 KiB
Plaintext
# Copyright (C) 1995-2002 Free Software Foundation, Inc.
|
|
# Copyright (C) 2001-2003,2004 Red Hat, Inc.
|
|
#
|
|
# This file is free software, distributed under the terms of the GNU
|
|
# General Public License. As a special exception to the GNU General
|
|
# Public License, this file may be distributed as part of a program
|
|
# that contains a configuration script generated by Autoconf, under
|
|
# the same distribution terms as the rest of that program.
|
|
#
|
|
# This file can be copied and used freely without restrictions. It can
|
|
# be used in projects which are not available under the GNU Public License
|
|
# but which still want to provide support for the GNU gettext functionality.
|
|
#
|
|
# Macro to add for using GNU gettext.
|
|
# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
|
|
#
|
|
# Modified to never use included libintl.
|
|
# Owen Taylor <otaylor@redhat.com>, 12/15/1998
|
|
#
|
|
# Major rework to remove unused code
|
|
# Owen Taylor <otaylor@redhat.com>, 12/11/2002
|
|
#
|
|
# Added better handling of ALL_LINGUAS from GNU gettext version
|
|
# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
|
|
#
|
|
# Modified to require ngettext
|
|
# Matthias Clasen <mclasen@redhat.com> 08/06/2004
|
|
#
|
|
# We need this here as well, since someone might use autoconf-2.5x
|
|
# to configure GLib then an older version to configure a package
|
|
# using AM_GLIB_GNU_GETTEXT
|
|
AC_PREREQ(2.53)
|
|
|
|
dnl
|
|
dnl We go to great lengths to make sure that aclocal won't
|
|
dnl try to pull in the installed version of these macros
|
|
dnl when running aclocal in the glib directory.
|
|
dnl
|
|
m4_copy([AC_DEFUN],[glib_DEFUN])
|
|
m4_copy([AC_REQUIRE],[glib_REQUIRE])
|
|
dnl
|
|
dnl At the end, if we're not within glib, we'll define the public
|
|
dnl definitions in terms of our private definitions.
|
|
dnl
|
|
|
|
# GLIB_LC_MESSAGES
|
|
#--------------------
|
|
glib_DEFUN([GLIB_LC_MESSAGES],
|
|
[AC_CHECK_HEADERS([locale.h])
|
|
if test $ac_cv_header_locale_h = yes; then
|
|
AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
|
|
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
|
|
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
|
|
if test $am_cv_val_LC_MESSAGES = yes; then
|
|
AC_DEFINE(HAVE_LC_MESSAGES, 1,
|
|
[Define if your <locale.h> file defines LC_MESSAGES.])
|
|
fi
|
|
fi])
|
|
|
|
# GLIB_PATH_PROG_WITH_TEST
|
|
#----------------------------
|
|
dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
|
|
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
|
|
glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
|
|
[# Extract the first word of "$2", so it can be a program name with args.
|
|
set dummy $2; ac_word=[$]2
|
|
AC_MSG_CHECKING([for $ac_word])
|
|
AC_CACHE_VAL(ac_cv_path_$1,
|
|
[case "[$]$1" in
|
|
/*)
|
|
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
|
|
;;
|
|
*)
|
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
|
for ac_dir in ifelse([$5], , $PATH, [$5]); do
|
|
test -z "$ac_dir" && ac_dir=.
|
|
if test -f $ac_dir/$ac_word; then
|
|
if [$3]; then
|
|
ac_cv_path_$1="$ac_dir/$ac_word"
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
IFS="$ac_save_ifs"
|
|
dnl If no 4th arg is given, leave the cache variable unset,
|
|
dnl so AC_PATH_PROGS will keep looking.
|
|
ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
|
|
])dnl
|
|
;;
|
|
esac])dnl
|
|
$1="$ac_cv_path_$1"
|
|
if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
|
|
AC_MSG_RESULT([$]$1)
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
AC_SUBST($1)dnl
|
|
])
|
|
|
|
dnl Checks for special options needed on Mac OS X.
|
|
dnl Defines INTL_MACOSX_LIBS.
|
|
dnl
|
|
dnl Copied from intlmacosx.m4 in gettext, GPL.
|
|
dnl Copyright (C) 2004-2013 Free Software Foundation, Inc.
|
|
glib_DEFUN([glib_gt_INTL_MACOSX],
|
|
[
|
|
dnl Check for API introduced in Mac OS X 10.2.
|
|
AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
|
|
[gt_cv_func_CFPreferencesCopyAppValue],
|
|
[gt_save_LIBS="$LIBS"
|
|
LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <CoreFoundation/CFPreferences.h>]],
|
|
[[CFPreferencesCopyAppValue(NULL, NULL)]])],
|
|
[gt_cv_func_CFPreferencesCopyAppValue=yes],
|
|
[gt_cv_func_CFPreferencesCopyAppValue=no])
|
|
LIBS="$gt_save_LIBS"])
|
|
if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
|
|
AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
|
|
[Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
|
|
fi
|
|
dnl Check for API introduced in Mac OS X 10.3.
|
|
AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
|
|
[gt_save_LIBS="$LIBS"
|
|
LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <CoreFoundation/CFLocale.h>]],
|
|
[[CFLocaleCopyCurrent();]])],
|
|
[gt_cv_func_CFLocaleCopyCurrent=yes],
|
|
[gt_cv_func_CFLocaleCopyCurrent=no])
|
|
LIBS="$gt_save_LIBS"])
|
|
if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
|
|
AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
|
|
[Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
|
|
fi
|
|
INTL_MACOSX_LIBS=
|
|
if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
|
|
INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
|
|
fi
|
|
AC_SUBST([INTL_MACOSX_LIBS])
|
|
])
|
|
|
|
# GLIB_WITH_NLS
|
|
#-----------------
|
|
glib_DEFUN([GLIB_WITH_NLS],
|
|
dnl NLS is obligatory
|
|
[USE_NLS=yes
|
|
AC_SUBST(USE_NLS)
|
|
|
|
gt_cv_have_gettext=no
|
|
|
|
CATOBJEXT=NONE
|
|
XGETTEXT=:
|
|
INTLLIBS=
|
|
|
|
glib_gt_INTL_MACOSX
|
|
|
|
AC_CHECK_HEADER(libintl.h,
|
|
[gt_cv_func_dgettext_libintl="no"
|
|
libintl_extra_libs=""
|
|
|
|
#
|
|
# First check in libc
|
|
#
|
|
AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
|
|
[AC_TRY_LINK([
|
|
#include <libintl.h>
|
|
],
|
|
[return !ngettext ("","", 1)],
|
|
gt_cv_func_ngettext_libc=yes,
|
|
gt_cv_func_ngettext_libc=no)
|
|
])
|
|
|
|
if test "$gt_cv_func_ngettext_libc" = "yes" ; then
|
|
AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
|
|
[AC_TRY_LINK([
|
|
#include <libintl.h>
|
|
],
|
|
[return !dgettext ("","")],
|
|
gt_cv_func_dgettext_libc=yes,
|
|
gt_cv_func_dgettext_libc=no)
|
|
])
|
|
fi
|
|
|
|
if test "$gt_cv_func_ngettext_libc" = "yes" ; then
|
|
AC_CHECK_FUNCS(bind_textdomain_codeset)
|
|
fi
|
|
|
|
#
|
|
# If we don't have everything we want, check in libintl
|
|
#
|
|
if test "$gt_cv_func_dgettext_libc" != "yes" \
|
|
|| test "$gt_cv_func_ngettext_libc" != "yes" \
|
|
|| test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
|
|
|
|
AC_CHECK_LIB(intl, bindtextdomain,
|
|
[AC_CHECK_LIB(intl, ngettext,
|
|
[AC_CHECK_LIB(intl, dgettext,
|
|
gt_cv_func_dgettext_libintl=yes)])])
|
|
|
|
if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
|
|
AC_MSG_CHECKING([if -liconv is needed to use gettext])
|
|
AC_MSG_RESULT([])
|
|
AC_CHECK_LIB(intl, ngettext,
|
|
[AC_CHECK_LIB(intl, dcgettext,
|
|
[gt_cv_func_dgettext_libintl=yes
|
|
libintl_extra_libs=-liconv],
|
|
:,-liconv)],
|
|
:,-liconv)
|
|
fi
|
|
|
|
#
|
|
# If we found libintl, then check in it for bind_textdomain_codeset();
|
|
# we'll prefer libc if neither have bind_textdomain_codeset(),
|
|
# and both have dgettext and ngettext
|
|
#
|
|
if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
|
|
glib_save_LIBS="$LIBS"
|
|
LIBS="$LIBS -lintl $libintl_extra_libs"
|
|
unset ac_cv_func_bind_textdomain_codeset
|
|
AC_CHECK_FUNCS(bind_textdomain_codeset)
|
|
LIBS="$glib_save_LIBS"
|
|
|
|
if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
|
|
gt_cv_func_dgettext_libc=no
|
|
else
|
|
if test "$gt_cv_func_dgettext_libc" = "yes" \
|
|
&& test "$gt_cv_func_ngettext_libc" = "yes"; then
|
|
gt_cv_func_dgettext_libintl=no
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if test "$gt_cv_func_dgettext_libc" = "yes" \
|
|
|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
|
|
gt_cv_have_gettext=yes
|
|
fi
|
|
|
|
if test "$gt_cv_func_dgettext_libintl" = "yes"; then
|
|
INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS"
|
|
fi
|
|
|
|
if test "$gt_cv_have_gettext" = "yes"; then
|
|
AC_DEFINE(HAVE_GETTEXT,1,
|
|
[Define if the GNU gettext() function is already present or preinstalled.])
|
|
GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
|
|
if test "$MSGFMT" != "no"; then
|
|
glib_save_LIBS="$LIBS"
|
|
LIBS="$LIBS $INTLLIBS"
|
|
AC_CHECK_FUNCS(dcgettext)
|
|
MSGFMT_OPTS=
|
|
AC_MSG_CHECKING([if msgfmt accepts -c])
|
|
GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[
|
|
msgid ""
|
|
msgstr ""
|
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
"Project-Id-Version: test 1.0\n"
|
|
"PO-Revision-Date: 2007-02-15 12:01+0100\n"
|
|
"Last-Translator: test <foo@bar.xx>\n"
|
|
"Language-Team: C <LL@li.org>\n"
|
|
"MIME-Version: 1.0\n"
|
|
"Content-Transfer-Encoding: 8bit\n"
|
|
], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
|
|
AC_SUBST(MSGFMT_OPTS)
|
|
AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
|
|
GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
|
|
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
|
|
AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
|
|
return _nl_msg_cat_cntr],
|
|
[CATOBJEXT=.gmo
|
|
DATADIRNAME=share],
|
|
[case $host in
|
|
*-*-solaris*)
|
|
dnl On Solaris, if bind_textdomain_codeset is in libc,
|
|
dnl GNU format message catalog is always supported,
|
|
dnl since both are added to the libc all together.
|
|
dnl Hence, we'd like to go with DATADIRNAME=share and
|
|
dnl and CATOBJEXT=.gmo in this case.
|
|
AC_CHECK_FUNC(bind_textdomain_codeset,
|
|
[CATOBJEXT=.gmo
|
|
DATADIRNAME=share],
|
|
[CATOBJEXT=.mo
|
|
DATADIRNAME=lib])
|
|
;;
|
|
*-*-openbsd*)
|
|
CATOBJEXT=.mo
|
|
DATADIRNAME=share
|
|
;;
|
|
*)
|
|
CATOBJEXT=.mo
|
|
DATADIRNAME=lib
|
|
;;
|
|
esac])
|
|
LIBS="$glib_save_LIBS"
|
|
INSTOBJEXT=.mo
|
|
else
|
|
gt_cv_have_gettext=no
|
|
fi
|
|
fi
|
|
])
|
|
|
|
if test "$gt_cv_have_gettext" = "yes" ; then
|
|
AC_DEFINE(ENABLE_NLS, 1,
|
|
[always defined to indicate that i18n is enabled])
|
|
fi
|
|
|
|
dnl Test whether we really found GNU xgettext.
|
|
if test "$XGETTEXT" != ":"; then
|
|
dnl If it is not GNU xgettext we define it as : so that the
|
|
dnl Makefiles still can work.
|
|
if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
|
|
: ;
|
|
else
|
|
AC_MSG_RESULT(
|
|
[found xgettext program is not GNU xgettext; ignore it])
|
|
XGETTEXT=":"
|
|
fi
|
|
fi
|
|
|
|
# We need to process the po/ directory.
|
|
POSUB=po
|
|
|
|
AC_OUTPUT_COMMANDS(
|
|
[case "$CONFIG_FILES" in *po/Makefile.in*)
|
|
sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
|
|
esac])
|
|
|
|
dnl These rules are solely for the distribution goal. While doing this
|
|
dnl we only have to keep exactly one list of the available catalogs
|
|
dnl in configure.ac.
|
|
for lang in $ALL_LINGUAS; do
|
|
GMOFILES="$GMOFILES $lang.gmo"
|
|
POFILES="$POFILES $lang.po"
|
|
done
|
|
|
|
dnl Make all variables we use known to autoconf.
|
|
AC_SUBST(CATALOGS)
|
|
AC_SUBST(CATOBJEXT)
|
|
AC_SUBST(DATADIRNAME)
|
|
AC_SUBST(GMOFILES)
|
|
AC_SUBST(INSTOBJEXT)
|
|
AC_SUBST(INTLLIBS)
|
|
AC_SUBST(PO_IN_DATADIR_TRUE)
|
|
AC_SUBST(PO_IN_DATADIR_FALSE)
|
|
AC_SUBST(POFILES)
|
|
AC_SUBST(POSUB)
|
|
])
|
|
|
|
# AM_GLIB_GNU_GETTEXT
|
|
# -------------------
|
|
# Do checks necessary for use of gettext. If a suitable implementation
|
|
# of gettext is found in either in libintl or in the C library,
|
|
# it will set INTLLIBS to the libraries needed for use of gettext
|
|
# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
|
|
# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
|
|
# on various variables needed by the Makefile.in.in installed by
|
|
# glib-gettextize.
|
|
dnl
|
|
AU_DEFUN([GLIB_GNU_GETTEXT],
|
|
[AC_REQUIRE([AC_PROG_CC])dnl
|
|
|
|
GLIB_LC_MESSAGES
|
|
GLIB_WITH_NLS
|
|
|
|
if test "$gt_cv_have_gettext" = "yes"; then
|
|
if test "x$ALL_LINGUAS" = "x"; then
|
|
LINGUAS=
|
|
else
|
|
AC_MSG_CHECKING(for catalogs to be installed)
|
|
NEW_LINGUAS=
|
|
for presentlang in $ALL_LINGUAS; do
|
|
useit=no
|
|
if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
|
|
desiredlanguages="$LINGUAS"
|
|
else
|
|
desiredlanguages="$ALL_LINGUAS"
|
|
fi
|
|
for desiredlang in $desiredlanguages; do
|
|
# Use the presentlang catalog if desiredlang is
|
|
# a. equal to presentlang, or
|
|
# b. a variant of presentlang (because in this case,
|
|
# presentlang can be used as a fallback for messages
|
|
# which are not translated in the desiredlang catalog).
|
|
case "$desiredlang" in
|
|
"$presentlang"*) useit=yes;;
|
|
esac
|
|
done
|
|
if test $useit = yes; then
|
|
NEW_LINGUAS="$NEW_LINGUAS $presentlang"
|
|
fi
|
|
done
|
|
LINGUAS=$NEW_LINGUAS
|
|
AC_MSG_RESULT($LINGUAS)
|
|
fi
|
|
|
|
dnl Construct list of names of catalog files to be constructed.
|
|
if test -n "$LINGUAS"; then
|
|
for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
|
|
fi
|
|
fi
|
|
|
|
dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
|
|
dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
|
|
dnl Try to locate is.
|
|
MKINSTALLDIRS=
|
|
if test -n "$ac_aux_dir"; then
|
|
MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
|
|
fi
|
|
if test -z "$MKINSTALLDIRS"; then
|
|
MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
|
|
fi
|
|
AC_SUBST(MKINSTALLDIRS)
|
|
|
|
dnl Generate list of files to be processed by xgettext which will
|
|
dnl be included in po/Makefile.
|
|
test -d po || mkdir po
|
|
if test "x$srcdir" != "x."; then
|
|
if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
|
|
posrcprefix="$srcdir/"
|
|
else
|
|
posrcprefix="../$srcdir/"
|
|
fi
|
|
else
|
|
posrcprefix="../"
|
|
fi
|
|
rm -f po/POTFILES
|
|
sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
|
|
< $srcdir/po/POTFILES.in > po/POTFILES
|
|
],
|
|
[[$0: This macro is deprecated. You should use upstream gettext instead.]])
|
|
|
|
# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
|
|
# -------------------------------
|
|
# Define VARIABLE to the location where catalog files will
|
|
# be installed by po/Makefile.
|
|
glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
|
|
[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
|
|
glib_save_prefix="$prefix"
|
|
glib_save_exec_prefix="$exec_prefix"
|
|
glib_save_datarootdir="$datarootdir"
|
|
test "x$prefix" = xNONE && prefix=$ac_default_prefix
|
|
test "x$exec_prefix" = xNONE && exec_prefix=$prefix
|
|
datarootdir=`eval echo "${datarootdir}"`
|
|
if test "x$CATOBJEXT" = "x.mo" ; then
|
|
localedir=`eval echo "${libdir}/locale"`
|
|
else
|
|
localedir=`eval echo "${datadir}/locale"`
|
|
fi
|
|
prefix="$glib_save_prefix"
|
|
exec_prefix="$glib_save_exec_prefix"
|
|
datarootdir="$glib_save_datarootdir"
|
|
AC_DEFINE_UNQUOTED($1, "$localedir",
|
|
[Define the location where the catalogs will be installed])
|
|
])
|
|
|
|
dnl
|
|
dnl Now the definitions that aclocal will find
|
|
dnl
|
|
ifdef(glib_configure_ac,[],[
|
|
AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
|
|
AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
|
|
])dnl
|
|
|
|
# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
|
|
#
|
|
# Create a temporary file with TEST-FILE as its contents and pass the
|
|
# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with
|
|
# 0 and perform ACTION-IF-FAIL for any other exit status.
|
|
AC_DEFUN([GLIB_RUN_PROG],
|
|
[cat >conftest.foo <<_ACEOF
|
|
$2
|
|
_ACEOF
|
|
if AC_RUN_LOG([$1 conftest.foo]); then
|
|
m4_ifval([$3], [$3], [:])
|
|
m4_ifvaln([$4], [else $4])dnl
|
|
echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
|
|
sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
|
|
fi])
|
|
|