1# Macro to add for using GNU gettext. 2# Ulrich Drepper <drepper@cygnus.com>, 1995. 3# 4# This file can be copied and used freely without restrictions. It can 5# be used in projects which are not available under the GNU Public License 6# but which still want to provide support for the GNU gettext functionality. 7# Please note that the actual code is *not* freely available. 8 9# serial 3 10 11AC_DEFUN(AM_WITH_NLS, 12 [AC_MSG_CHECKING([whether NLS is requested]) 13 dnl Default is enabled NLS 14 AC_ARG_ENABLE(nls, 15 [ --disable-nls do not use Native Language Support], 16 USE_NLS=$enableval, USE_NLS=yes) 17 AC_MSG_RESULT($USE_NLS) 18 AC_SUBST(USE_NLS) 19 20 USE_INCLUDED_LIBINTL=no 21 22 dnl If we use NLS figure out what method 23 if test "$USE_NLS" = "yes"; then 24 AC_DEFINE(ENABLE_NLS) 25 AC_MSG_CHECKING([whether included gettext is requested]) 26 AC_ARG_WITH(included-gettext, 27 [ --with-included-gettext use the GNU gettext library included here], 28 nls_cv_force_use_gnu_gettext=$withval, 29 nls_cv_force_use_gnu_gettext=no) 30 AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) 31 32 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" 33 if test "$nls_cv_force_use_gnu_gettext" != "yes"; then 34 dnl User does not insist on using GNU NLS library. Figure out what 35 dnl to use. If gettext or catgets are available (in this order) we 36 dnl use this. Else we have to fall back to GNU NLS library. 37 dnl catgets is only used if permitted by option --with-catgets. 38 nls_cv_header_intl= 39 nls_cv_header_libgt= 40 CATOBJEXT=NONE 41 42 AC_CHECK_HEADER(libintl.h, 43 [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, 44 [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")], 45 gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) 46 47 if test "$gt_cv_func_gettext_libc" != "yes"; then 48 AC_CHECK_LIB(intl, bindtextdomain, 49 [AC_CACHE_CHECK([for gettext in libintl], 50 gt_cv_func_gettext_libintl, 51 [AC_TRY_LINK([], [return (int) gettext ("")], 52 gt_cv_func_gettext_libintl=yes, 53 gt_cv_func_gettext_libintl=no)])]) 54 fi 55 56 if test "$gt_cv_func_gettext_libc" = "yes" \ 57 || test "$gt_cv_func_gettext_libintl" = "yes"; then 58 AC_DEFINE(HAVE_GETTEXT) 59 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, 60 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl 61 if test "$MSGFMT" != "no"; then 62 AC_CHECK_FUNCS(dcgettext) 63 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) 64 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, 65 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) 66 AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; 67 return _nl_msg_cat_cntr], 68 [CATOBJEXT=.gmo 69 DATADIRNAME=share], 70 [CATOBJEXT=.mo 71 DATADIRNAME=lib]) 72 INSTOBJEXT=.mo 73 fi 74 fi 75 ]) 76 77 if test "$CATOBJEXT" = "NONE"; then 78 AC_MSG_CHECKING([whether catgets can be used]) 79 AC_ARG_WITH(catgets, 80 [ --with-catgets use catgets functions if available], 81 nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) 82 AC_MSG_RESULT($nls_cv_use_catgets) 83 84 if test "$nls_cv_use_catgets" = "yes"; then 85 dnl No gettext in C library. Try catgets next. 86 AC_CHECK_LIB(i, main) 87 AC_CHECK_FUNC(catgets, 88 [AC_DEFINE(HAVE_CATGETS) 89 INTLOBJS="\$(CATOBJS)" 90 AC_PATH_PROG(GENCAT, gencat, no)dnl 91 if test "$GENCAT" != "no"; then 92 AC_PATH_PROG(GMSGFMT, gmsgfmt, no) 93 if test "$GMSGFMT" = "no"; then 94 AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, 95 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) 96 fi 97 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, 98 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) 99 USE_INCLUDED_LIBINTL=yes 100 CATOBJEXT=.cat 101 INSTOBJEXT=.cat 102 DATADIRNAME=lib 103 INTLDEPS='$(top_builddir)/intl/libintl.a' 104 INTLLIBS=$INTLDEPS 105 LIBS=`echo $LIBS | sed -e 's/-lintl//'` 106 nls_cv_header_intl=intl/libintl.h 107 nls_cv_header_libgt=intl/libgettext.h 108 fi]) 109 fi 110 fi 111 112 if test "$CATOBJEXT" = "NONE"; then 113 dnl Neither gettext nor catgets in included in the C library. 114 dnl Fall back on GNU gettext library. 115 nls_cv_use_gnu_gettext=yes 116 fi 117 fi 118 119 if test "$nls_cv_use_gnu_gettext" = "yes"; then 120 dnl Mark actions used to generate GNU NLS library. 121 INTLOBJS="\$(GETTOBJS)" 122 AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, 123 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) 124 AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) 125 AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, 126 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) 127 AC_SUBST(MSGFMT) 128 USE_INCLUDED_LIBINTL=yes 129 CATOBJEXT=.gmo 130 INSTOBJEXT=.mo 131 DATADIRNAME=share 132 INTLDEPS='$(top_builddir)/intl/libintl.a' 133 INTLLIBS=$INTLDEPS 134 LIBS=`echo $LIBS | sed -e 's/-lintl//'` 135 nls_cv_header_intl=intl/libintl.h 136 nls_cv_header_libgt=intl/libgettext.h 137 fi 138 139 dnl Test whether we really found GNU xgettext. 140 if test "$XGETTEXT" != ":"; then 141 dnl If it is no GNU xgettext we define it as : so that the 142 dnl Makefiles still can work. 143 if $XGETTEXT --omit-header /dev/null 2> /dev/null; then 144 : ; 145 else 146 AC_MSG_RESULT( 147 [found xgettext programs is not GNU xgettext; ignore it]) 148 XGETTEXT=":" 149 fi 150 fi 151 152 # We need to process the po/ directory. 153 POSUB=po 154 else 155 DATADIRNAME=share 156 nls_cv_header_intl=intl/libintl.h 157 nls_cv_header_libgt=intl/libgettext.h 158 fi 159 160 # If this is used in GNU gettext we have to set USE_NLS to `yes' 161 # because some of the sources are only built for this goal. 162 if test "$PACKAGE" = gettext; then 163 USE_NLS=yes 164 USE_INCLUDED_LIBINTL=yes 165 fi 166 167 dnl These rules are solely for the distribution goal. While doing this 168 dnl we only have to keep exactly one list of the available catalogs 169 dnl in configure.in. 170 for lang in $ALL_LINGUAS; do 171 GMOFILES="$GMOFILES $lang.gmo" 172 POFILES="$POFILES $lang.po" 173 done 174 175 dnl Make all variables we use known to autoconf. 176 AC_SUBST(USE_INCLUDED_LIBINTL) 177 AC_SUBST(CATALOGS) 178 AC_SUBST(CATOBJEXT) 179 AC_SUBST(DATADIRNAME) 180 AC_SUBST(GMOFILES) 181 AC_SUBST(INSTOBJEXT) 182 AC_SUBST(INTLDEPS) 183 AC_SUBST(INTLLIBS) 184 AC_SUBST(INTLOBJS) 185 AC_SUBST(POFILES) 186 AC_SUBST(POSUB) 187 ]) 188 189AC_DEFUN(AM_GNU_GETTEXT, 190 [AC_REQUIRE([AC_PROG_MAKE_SET])dnl 191 AC_REQUIRE([AC_PROG_CC])dnl 192 AC_REQUIRE([AC_PROG_RANLIB])dnl 193 AC_REQUIRE([AC_ISC_POSIX])dnl 194 AC_REQUIRE([AC_HEADER_STDC])dnl 195 AC_REQUIRE([AC_C_CONST])dnl 196 AC_REQUIRE([AC_C_INLINE])dnl 197 AC_REQUIRE([AC_TYPE_OFF_T])dnl 198 AC_REQUIRE([AC_TYPE_SIZE_T])dnl 199 AC_REQUIRE([AC_FUNC_ALLOCA])dnl 200 AC_REQUIRE([AC_FUNC_MMAP])dnl 201 202 AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ 203unistd.h values.h sys/param.h]) 204 AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ 205__argz_count __argz_stringify __argz_next]) 206 207 if test "${ac_cv_func_stpcpy+set}" != "set"; then 208 AC_CHECK_FUNCS(stpcpy) 209 fi 210 if test "${ac_cv_func_stpcpy}" = "yes"; then 211 AC_DEFINE(HAVE_STPCPY) 212 fi 213 214 AM_LC_MESSAGES 215 AM_WITH_NLS 216 217 if test "x$CATOBJEXT" != "x"; then 218 if test "x$ALL_LINGUAS" = "x"; then 219 LINGUAS= 220 else 221 AC_MSG_CHECKING(for catalogs to be installed) 222 NEW_LINGUAS= 223 for lang in ${LINGUAS=$ALL_LINGUAS}; do 224 case "$ALL_LINGUAS" in 225 *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; 226 esac 227 done 228 LINGUAS=$NEW_LINGUAS 229 AC_MSG_RESULT($LINGUAS) 230 fi 231 232 dnl Construct list of names of catalog files to be constructed. 233 if test -n "$LINGUAS"; then 234 for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done 235 fi 236 fi 237 238 dnl The reference to <locale.h> in the installed <libintl.h> file 239 dnl must be resolved because we cannot expect the users of this 240 dnl to define HAVE_LOCALE_H. 241 if test $ac_cv_header_locale_h = yes; then 242 INCLUDE_LOCALE_H="#include <locale.h>" 243 else 244 INCLUDE_LOCALE_H="\ 245/* The system does not provide the header <locale.h>. Take care yourself. */" 246 fi 247 AC_SUBST(INCLUDE_LOCALE_H) 248 249 dnl Determine which catalog format we have (if any is needed) 250 dnl For now we know about two different formats: 251 dnl Linux libc-5 and the normal X/Open format 252 test -d intl || mkdir intl 253 if test "$CATOBJEXT" = ".cat"; then 254 AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) 255 256 dnl Transform the SED scripts while copying because some dumb SEDs 257 dnl cannot handle comments. 258 sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed 259 fi 260 dnl po2tbl.sed is always needed. 261 sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ 262 $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed 263 264 dnl In the intl/Makefile.in we have a special dependency which makes 265 dnl only sense for gettext. We comment this out for non-gettext 266 dnl packages. 267 if test "$PACKAGE" = "gettext"; then 268 GT_NO="#NO#" 269 GT_YES= 270 else 271 GT_NO= 272 GT_YES="#YES#" 273 fi 274 AC_SUBST(GT_NO) 275 AC_SUBST(GT_YES) 276 277 dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly 278 dnl find the mkinstalldirs script in another subdir but ($top_srcdir). 279 dnl Try to locate is. 280 MKINSTALLDIRS= 281 if test -n "$ac_aux_dir"; then 282 MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" 283 fi 284 if test -z "$MKINSTALLDIRS"; then 285 MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" 286 fi 287 AC_SUBST(MKINSTALLDIRS) 288 289 dnl *** For now the libtool support in intl/Makefile is not for real. 290 l= 291 AC_SUBST(l) 292 293 dnl Generate list of files to be processed by xgettext which will 294 dnl be included in po/Makefile. 295 test -d po || mkdir po 296 if test "x$srcdir" != "x."; then 297 if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then 298 posrcprefix="$srcdir/" 299 else 300 posrcprefix="../$srcdir/" 301 fi 302 else 303 posrcprefix="../" 304 fi 305 rm -f po/POTFILES 306 sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ 307 < $srcdir/po/POTFILES.in > po/POTFILES 308 ]) 309 310# Search path for a program which passes the given test. 311# Ulrich Drepper <drepper@cygnus.com>, 1996. 312# 313# This file can be copied and used freely without restrictions. It can 314# be used in projects which are not available under the GNU Public License 315# but which still want to provide support for the GNU gettext functionality. 316# Please note that the actual code is *not* freely available. 317 318# serial 1 319 320dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, 321dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) 322AC_DEFUN(AM_PATH_PROG_WITH_TEST, 323[# Extract the first word of "$2", so it can be a program name with args. 324set dummy $2; ac_word=[$]2 325AC_MSG_CHECKING([for $ac_word]) 326AC_CACHE_VAL(ac_cv_path_$1, 327[case "[$]$1" in 328 /*) 329 ac_cv_path_$1="[$]$1" # Let the user override the test with a path. 330 ;; 331 *) 332 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" 333 for ac_dir in ifelse([$5], , $PATH, [$5]); do 334 test -z "$ac_dir" && ac_dir=. 335 if test -f $ac_dir/$ac_word; then 336 if [$3]; then 337 ac_cv_path_$1="$ac_dir/$ac_word" 338 break 339 fi 340 fi 341 done 342 IFS="$ac_save_ifs" 343dnl If no 4th arg is given, leave the cache variable unset, 344dnl so AC_PATH_PROGS will keep looking. 345ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" 346])dnl 347 ;; 348esac])dnl 349$1="$ac_cv_path_$1" 350if test -n "[$]$1"; then 351 AC_MSG_RESULT([$]$1) 352else 353 AC_MSG_RESULT(no) 354fi 355AC_SUBST($1)dnl 356]) 357 358# Check whether LC_MESSAGES is available in <locale.h>. 359# Ulrich Drepper <drepper@cygnus.com>, 1995. 360# 361# This file can be copied and used freely without restrictions. It can 362# be used in projects which are not available under the GNU Public License 363# but which still want to provide support for the GNU gettext functionality. 364# Please note that the actual code is *not* freely available. 365 366# serial 1 367 368AC_DEFUN(AM_LC_MESSAGES, 369 [if test $ac_cv_header_locale_h = yes; then 370 AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, 371 [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], 372 am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) 373 if test $am_cv_val_LC_MESSAGES = yes; then 374 AC_DEFINE(HAVE_LC_MESSAGES) 375 fi 376 fi]) 377 378