Blame intl/libgnuintl.h

Packit Service 72eb06
/* Message catalogs for internationalization.
Packit Service 72eb06
   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
Packit Service 72eb06
Packit Service 72eb06
   This program is free software; you can redistribute it and/or modify it
Packit Service 72eb06
   under the terms of the GNU Library General Public License as published
Packit Service 72eb06
   by the Free Software Foundation; either version 2, or (at your option)
Packit Service 72eb06
   any later version.
Packit Service 72eb06
Packit Service 72eb06
   This program is distributed in the hope that it will be useful,
Packit Service 72eb06
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 72eb06
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 72eb06
   Library General Public License for more details.
Packit Service 72eb06
Packit Service 72eb06
   You should have received a copy of the GNU Library General Public
Packit Service 72eb06
   License along with this program; if not, write to the Free Software
Packit Service 72eb06
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
Packit Service 72eb06
   USA.  */
Packit Service 72eb06
Packit Service 72eb06
#ifndef _LIBINTL_H
Packit Service 72eb06
#define _LIBINTL_H	1
Packit Service 72eb06
Packit Service 72eb06
#include <locale.h>
Packit Service 72eb06
Packit Service 72eb06
/* The LC_MESSAGES locale category is the category used by the functions
Packit Service 72eb06
   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
Packit Service 72eb06
   On systems that don't define it, use an arbitrary value instead.
Packit Service 72eb06
   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
Packit Service 72eb06
   then includes <libintl.h> (i.e. this file!) and then only defines
Packit Service 72eb06
   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
Packit Service 72eb06
   in this case.  */
Packit Service 72eb06
#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
Packit Service 72eb06
# define LC_MESSAGES 1729
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* We define an additional symbol to signal that we use the GNU
Packit Service 72eb06
   implementation of gettext.  */
Packit Service 72eb06
#define __USE_GNU_GETTEXT 1
Packit Service 72eb06
Packit Service 72eb06
/* Provide information about the supported file formats.  Returns the
Packit Service 72eb06
   maximum minor revision number supported for a given major revision.  */
Packit Service 72eb06
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
Packit Service 72eb06
  ((major) == 0 ? 1 : -1)
Packit Service 72eb06
Packit Service 72eb06
/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
Packit Service 72eb06
   precedence over _conio_gettext.  */
Packit Service 72eb06
#ifdef __DJGPP__
Packit Service 72eb06
# undef gettext
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
Packit Service 72eb06
   used by programs.  Similarly, test __PROTOTYPES, not PROTOTYPES.  */
Packit Service 72eb06
#ifndef _INTL_PARAMS
Packit Service 72eb06
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
Packit Service 72eb06
#  define _INTL_PARAMS(args) args
Packit Service 72eb06
# else
Packit Service 72eb06
#  define _INTL_PARAMS(args) ()
Packit Service 72eb06
# endif
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
#ifdef __cplusplus
Packit Service 72eb06
extern "C" {
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* We redirect the functions to those prefixed with "libintl_".  This is
Packit Service 72eb06
   necessary, because some systems define gettext/textdomain/... in the C
Packit Service 72eb06
   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
Packit Service 72eb06
   If we used the unprefixed names, there would be cases where the
Packit Service 72eb06
   definition in the C library would override the one in the libintl.so
Packit Service 72eb06
   shared library.  Recall that on ELF systems, the symbols are looked
Packit Service 72eb06
   up in the following order:
Packit Service 72eb06
     1. in the executable,
Packit Service 72eb06
     2. in the shared libraries specified on the link command line, in order,
Packit Service 72eb06
     3. in the dependencies of the shared libraries specified on the link
Packit Service 72eb06
        command line,
Packit Service 72eb06
     4. in the dlopen()ed shared libraries, in the order in which they were
Packit Service 72eb06
        dlopen()ed.
Packit Service 72eb06
   The definition in the C library would override the one in libintl.so if
Packit Service 72eb06
   either
Packit Service 72eb06
     * -lc is given on the link command line and -lintl isn't, or
Packit Service 72eb06
     * -lc is given on the link command line before -lintl, or
Packit Service 72eb06
     * libintl.so is a dependency of a dlopen()ed shared library but not
Packit Service 72eb06
       linked to the executable at link time.
Packit Service 72eb06
   Since Solaris gettext() behaves differently than GNU gettext(), this
Packit Service 72eb06
   would be unacceptable.
Packit Service 72eb06
Packit Service 72eb06
   The redirection happens by default through macros in C, so that &gettext
Packit Service 72eb06
   is independent of the compilation unit, but through inline functions in
Packit Service 72eb06
   C++, in order not to interfere with the name mangling of class fields or
Packit Service 72eb06
   class methods called 'gettext'.  */
Packit Service 72eb06
Packit Service 72eb06
/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
Packit Service 72eb06
   If he doesn't, we choose the method.  A third possible method is
Packit Service 72eb06
   _INTL_REDIRECT_ASM, supported only by GCC.  */
Packit Service 72eb06
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
Packit Service 72eb06
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
Packit Service 72eb06
#  define _INTL_REDIRECT_ASM
Packit Service 72eb06
# else
Packit Service 72eb06
#  ifdef __cplusplus
Packit Service 72eb06
#   define _INTL_REDIRECT_INLINE
Packit Service 72eb06
#  else
Packit Service 72eb06
#   define _INTL_REDIRECT_MACROS
Packit Service 72eb06
#  endif
Packit Service 72eb06
# endif
Packit Service 72eb06
#endif
Packit Service 72eb06
/* Auxiliary macros.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_ASM
Packit Service 72eb06
# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
Packit Service 72eb06
# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
Packit Service 72eb06
# define _INTL_STRINGIFY(prefix) #prefix
Packit Service 72eb06
#else
Packit Service 72eb06
# define _INTL_ASM(cname)
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
Packit Service 72eb06
   its n-th argument literally.  This enables GCC to warn for example about
Packit Service 72eb06
   printf (gettext ("foo %y")).  */
Packit Service 72eb06
#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus)
Packit Service 72eb06
# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
Packit Service 72eb06
#else
Packit Service 72eb06
# define _INTL_MAY_RETURN_STRING_ARG(n)
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Look up MSGID in the current default message catalog for the current
Packit Service 72eb06
   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
Packit Service 72eb06
   text).  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_gettext (const char *__msgid)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (1);
Packit Service 72eb06
static inline char *gettext (const char *__msgid)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_gettext (__msgid);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define gettext libintl_gettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *gettext _INTL_PARAMS ((const char *__msgid))
Packit Service 72eb06
       _INTL_ASM (libintl_gettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (1);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Look up MSGID in the DOMAINNAME message catalog for the current
Packit Service 72eb06
   LC_MESSAGES locale.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_dgettext (const char *__domainname, const char *__msgid)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
static inline char *dgettext (const char *__domainname, const char *__msgid)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_dgettext (__domainname, __msgid);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define dgettext libintl_dgettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *dgettext _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
				     const char *__msgid))
Packit Service 72eb06
       _INTL_ASM (libintl_dgettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
Packit Service 72eb06
   locale.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
Packit Service 72eb06
				int __category)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
static inline char *dcgettext (const char *__domainname, const char *__msgid,
Packit Service 72eb06
			       int __category)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_dcgettext (__domainname, __msgid, __category);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define dcgettext libintl_dcgettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
				      const char *__msgid,
Packit Service 72eb06
				      int __category))
Packit Service 72eb06
       _INTL_ASM (libintl_dcgettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* Similar to `gettext' but select the plural form corresponding to the
Packit Service 72eb06
   number N.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
Packit Service 72eb06
			       unsigned long int __n)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
static inline char *ngettext (const char *__msgid1, const char *__msgid2,
Packit Service 72eb06
			      unsigned long int __n)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_ngettext (__msgid1, __msgid2, __n);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define ngettext libintl_ngettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
Packit Service 72eb06
				     const char *__msgid2,
Packit Service 72eb06
				     unsigned long int __n))
Packit Service 72eb06
       _INTL_ASM (libintl_ngettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Similar to `dgettext' but select the plural form corresponding to the
Packit Service 72eb06
   number N.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
Packit Service 72eb06
				const char *__msgid2, unsigned long int __n)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit Service 72eb06
static inline char *dngettext (const char *__domainname, const char *__msgid1,
Packit Service 72eb06
			       const char *__msgid2, unsigned long int __n)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define dngettext libintl_dngettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *dngettext _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
				      const char *__msgid1,
Packit Service 72eb06
				      const char *__msgid2,
Packit Service 72eb06
				      unsigned long int __n))
Packit Service 72eb06
       _INTL_ASM (libintl_dngettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Similar to `dcgettext' but select the plural form corresponding to the
Packit Service 72eb06
   number N.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_dcngettext (const char *__domainname,
Packit Service 72eb06
				 const char *__msgid1, const char *__msgid2,
Packit Service 72eb06
				 unsigned long int __n, int __category)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit Service 72eb06
static inline char *dcngettext (const char *__domainname,
Packit Service 72eb06
				const char *__msgid1, const char *__msgid2,
Packit Service 72eb06
				unsigned long int __n, int __category)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define dcngettext libintl_dcngettext
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
				       const char *__msgid1,
Packit Service 72eb06
				       const char *__msgid2,
Packit Service 72eb06
				       unsigned long int __n,
Packit Service 72eb06
				       int __category))
Packit Service 72eb06
       _INTL_ASM (libintl_dcngettext)
Packit Service 72eb06
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* Set the current default message catalog to DOMAINNAME.
Packit Service 72eb06
   If DOMAINNAME is null, return the current default.
Packit Service 72eb06
   If DOMAINNAME is "", reset to the default of "messages".  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_textdomain (const char *__domainname);
Packit Service 72eb06
static inline char *textdomain (const char *__domainname)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_textdomain (__domainname);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define textdomain libintl_textdomain
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *textdomain _INTL_PARAMS ((const char *__domainname))
Packit Service 72eb06
       _INTL_ASM (libintl_textdomain);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Specify that the DOMAINNAME message catalog will be found
Packit Service 72eb06
   in DIRNAME rather than in the system locale data base.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_bindtextdomain (const char *__domainname,
Packit Service 72eb06
				     const char *__dirname);
Packit Service 72eb06
static inline char *bindtextdomain (const char *__domainname,
Packit Service 72eb06
				    const char *__dirname)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_bindtextdomain (__domainname, __dirname);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define bindtextdomain libintl_bindtextdomain
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
					   const char *__dirname))
Packit Service 72eb06
       _INTL_ASM (libintl_bindtextdomain);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
/* Specify the character encoding in which the messages from the
Packit Service 72eb06
   DOMAINNAME message catalog will be returned.  */
Packit Service 72eb06
#ifdef _INTL_REDIRECT_INLINE
Packit Service 72eb06
extern char *libintl_bind_textdomain_codeset (const char *__domainname,
Packit Service 72eb06
					      const char *__codeset);
Packit Service 72eb06
static inline char *bind_textdomain_codeset (const char *__domainname,
Packit Service 72eb06
					     const char *__codeset)
Packit Service 72eb06
{
Packit Service 72eb06
  return libintl_bind_textdomain_codeset (__domainname, __codeset);
Packit Service 72eb06
}
Packit Service 72eb06
#else
Packit Service 72eb06
#ifdef _INTL_REDIRECT_MACROS
Packit Service 72eb06
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
Packit Service 72eb06
#endif
Packit Service 72eb06
extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
Packit Service 72eb06
						    const char *__codeset))
Packit Service 72eb06
       _INTL_ASM (libintl_bind_textdomain_codeset);
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* Support for relocatable packages.  */
Packit Service 72eb06
Packit Service 72eb06
/* Sets the original and the current installation prefix of the package.
Packit Service 72eb06
   Relocation simply replaces a pathname starting with the original prefix
Packit Service 72eb06
   by the corresponding pathname with the current prefix instead.  Both
Packit Service 72eb06
   prefixes should be directory names without trailing slash (i.e. use ""
Packit Service 72eb06
   instead of "/").  */
Packit Service 72eb06
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
Packit Service 72eb06
extern void
Packit Service 72eb06
       libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
Packit Service 72eb06
						    const char *curr_prefix));
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
#ifdef __cplusplus
Packit Service 72eb06
}
Packit Service 72eb06
#endif
Packit Service 72eb06
Packit Service 72eb06
#endif /* libintl.h */