# takes one argument, the path to lib/CORE directory.
# creates 2 files: "perlCAPI.cpp" and "perlCAPI.h".
+#use Config;
+
my $hdrfile = "$ARGV[0]\\perlCAPI.h";
my $infile = '..\\proto.h';
my $embedfile = '..\\embed.h';
print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
print OUTFILE <<ENDCODE;
-extern "C" void SetCPerlObj(CPerlObj* pP)
+EXTERN_C void SetCPerlObj(void *pP)
{
- pPerl = pP;
+ pPerl = (CPerlObj*)pP;
}
ENDCODE
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
char *pstr;
char *pmsg;
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
SV *sv;
va_list args;
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
va_list args;
va_start(args, $arg1);
#ifndef mg_set
#define mg_set pPerl->Perl_mg_set
#endif
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
va_list args;
va_start(args, $arg1);
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
va_list args;
va_start(args, $arg1);
#ifndef mg_set
#define mg_set pPerl->Perl_mg_set
#endif
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
va_list args;
va_start(args, $arg1);
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $name ($args)
+EXTERN_C $type $name ($args)
{
int nRet;
va_list args;
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $name ($args)
+EXTERN_C $type $name ($args)
{
return pPerl->perl_parse(xsinit, argc, argv, env);
}
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $name ($args)
+EXTERN_C $type $name ($args)
{
pPerl->perl_atexit(fn, ptr);
}
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ()
+EXTERN_C $type $funcName ()
{
$return pPerl->$funcName();
}
print OUTFILE <<ENDCODE;
#undef $name
-extern "C" $type $funcName ($args)
+EXTERN_C $type $funcName ($args)
{
ENDCODE
print OUTFILE "$return pPerl->$funcName";
open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
print HDRFILE <<ENDCODE;
-void SetCPerlObj(void* pP);
-CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
+EXTERN_C void SetCPerlObj(void* pP);
+EXTERN_C CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
ENDCODE
print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
print OUTFILE <<ENDCODE;
#undef PL_$name
-extern "C" $type * _PL_$name ()
+EXTERN_C $type * _PL_$name ()
{
return (($type *)&pPerl->PL_$name);
}
print HDRFILE <<ENDCODE;
#undef PL_$name
-$type * _PL_$name ();
+EXTERN_C $type * _PL_$name ();
#define PL_$name (*_PL_$name())
ENDCODE
print OUTFILE <<EOCODE;
-
-extern "C" {
-
+START_EXTERN_C
char ** _Perl_op_desc(void)
{
}
}
-CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
+EXTERN_C CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
{
CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
pPerl->Perl_sv_magic((SV*)cv, pPerl->Perl_sv_2mortal(pPerl->Perl_newSViv((IV)subaddr)), '~', "CAPI", 4);
{
pPerl->PL_piSock->Setservent(stayopen, ErrorNo());
}
-} /* extern "C" */
+END_EXTERN_C
EOCODE
print HDRFILE <<EOCODE;
+
+START_EXTERN_C
+
#undef Perl_op_desc
char ** _Perl_op_desc ();
#define Perl_op_desc (_Perl_op_desc())
void _win32_setprotoent(int stayopen);
void _win32_setservent(int stayopen);
+END_EXTERN_C
+
#pragma warning(once : 4113)
EOCODE