The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <string.h>
#include <libintl.h>
#include "config.h"

static double
constant(char *name, int arg)
{
	errno = 0;
	if (strEQ(name, "LC_CTYPE")) return LC_CTYPE;
	if (strEQ(name, "LC_NUMERIC")) return LC_NUMERIC;
	if (strEQ(name, "LC_COLLATE")) return LC_COLLATE;
	if (strEQ(name, "LC_MONETARY")) return LC_MONETARY;
	if (strEQ(name, "LC_MESSAGES")) return LC_MESSAGES;
	if (strEQ(name, "LC_ALL")) return LC_ALL;
	errno = EINVAL;
	return 0;
}

#define ANY_MISSING 0

#ifndef HAVE_DGETTEXT
/* if dgettext is not there, neither will
   dcgettext, dngettext and dcngettext be.
   But only deal with dngettext and
   dcngettext if they will not be dealt
   with later because of ngettext */
#define dgettext(a,b) not_here("dgettext")
#define dcgettext(a,b,c) not_here("dcgettext")
#ifdef HAVE_NGETTEXT
#define dngettext(a,b,c,d) not_here("dngettext")
#define dcngettext(a,b,c,d,e) not_here("dcngettext")
#endif
#undef ANY_MISSING
#define ANY_MISSING 1
#endif

#ifndef HAVE_NGETTEXT
#define ngettext(a,b,c) not_here("ngettext")
#define dngettext(a,b,c,d) not_here("dngettext")
#define dncgettext(a,b,c,d,e) not_here("dcngettext")
#undef ANY_MISSING
#define ANY_MISSING 1
#endif

#ifndef HAVE_BIND_TEXTDOMAIN_CODESET
#define bind_textdomain_codeset(a,b) not_here("bind_textdomain_codeset")
#undef ANY_MISSING
#define ANY_MISSING 1
#endif

#if ANY_MISSING
static int
not_here(char *s)
{
	croak("Locale::gettext::%s not implemented on this architecture", s);
	return -1;
}
#endif

MODULE = Locale::gettext	PACKAGE = Locale::gettext

double
constant(name,arg)
	char *		name
	int		arg

char *
gettext(msgid)
	char *		msgid

char *
dcgettext(domainname, msgid, category)
	char *		domainname
	char *		msgid
	int		category

char *
dgettext(domainname, msgid)
	char *		domainname
	char *		msgid

char *
ngettext(msgid, msgid_plural, n)
	char *		msgid
	char *		msgid_plural
	unsigned long	n

char *
dcngettext(domainname, msgid, msgid_plural, n, category)
	char *		domainname
	char *		msgid
	char *		msgid_plural
	unsigned long	n
	int		category

char *
dngettext(domainname, msgid, msgid_plural, n)
	char *		domainname
	char *		msgid
	char *		msgid_plural
	unsigned long	n

char *
textdomain(domain)
	char *		domain

char *
bindtextdomain(domain, dirname = NULL)
	char *		domain
	char *		dirname

char *
bind_textdomain_codeset(domain, codeset = NULL)
	char *		domain
	char *		codeset