The following patch enables compiling perlmain.c in C++ mode. What is
missing is Configure support, and (maybe?) xsubpp support for
conditional extern "C" on boot_Ext:
#ifdef __cplusplus
extern "C"
#endif
Enjoy,
Ilya
PS To have C++ capable perl I just edited a line in cflags (with gcc):
perlmain) cc="$cc -x c++";;
*** writemain.sh~ Wed Feb 08 16:44:20 1995
--- writemain.sh Tue Oct 10 17:02:48 1995
***************
*** 51,56 ****
--- 51,76 ----
sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+
+
+ if test X"$args" != "X" ; then
+ for ext in $args ; do
+ : $ext will either be 'Name' or 'Name1/Name2' etc
+ : convert ext into cname and mname
+ mname=`echo $ext | sed 's!/!::!g'`
+ cname=`echo $mname | sed 's!:!_!g'`
+
+ echo "EXTERN_C void boot_${cname} _((CV* cv));"
+ done
+ fi
+
+ cat << 'EOP'
+
+ static void
+ xs_init()
+ {
+ EOP
+
if test X"$args" != "X" ; then
echo " char *file = __FILE__;"
ai=''
***************
*** 62,68 ****
mname=`echo $ext | sed 's!/!::!g'`
cname=`echo $mname | sed 's!:!_!g'`
! echo " { extern void boot_${cname} _((CV* cv));"
if test "$ext" = "DynaLoader"; then
: Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
: boot_DynaLoader is called directly in DynaLoader.pm
--- 82,88 ----
mname=`echo $ext | sed 's!/!::!g'`
cname=`echo $mname | sed 's!:!_!g'`
! echo " {"
if test "$ext" = "DynaLoader"; then
: Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
: boot_DynaLoader is called directly in DynaLoader.pm
*** miniperlmain.c~ Thu Sep 28 00:00:28 1995
--- miniperlmain.c Tue Oct 10 16:55:34 1995
***************
*** 2,18 ****
--- 2,33 ----
* "The Road goes ever on and on, down from the door where it began."
*/
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
#include "EXTERN.h"
#include "perl.h"
+ #ifdef __cplusplus
+ }
+ # define EXTERN_C extern "C"
+ #else
+ # define EXTERN_C extern
+ #endif
+
static void xs_init _((void));
static PerlInterpreter *my_perl;
int
+ #ifndef CAN_PROTOTYPE
main(argc, argv, env)
int argc;
char **argv;
char **env;
+ #else /* def(CAN_PROTOTYPE) */
+ main(int argc, char **argv, char **env)
+ #endif /* def(CAN_PROTOTYPE) */
{
int exitstatus;
***************
*** 46,53 ****
/* Register any extra external extensions */
static void
xs_init()
{
- /* Do not delete this line--writemain depends on it */
}
--- 61,69 ----
/* Register any extra external extensions */
+ /* Do not delete this line--writemain depends on it */
+
static void
xs_init()
{
}
missing is Configure support, and (maybe?) xsubpp support for
conditional extern "C" on boot_Ext:
#ifdef __cplusplus
extern "C"
#endif
Enjoy,
Ilya
PS To have C++ capable perl I just edited a line in cflags (with gcc):
perlmain) cc="$cc -x c++";;
*** writemain.sh~ Wed Feb 08 16:44:20 1995
--- writemain.sh Tue Oct 10 17:02:48 1995
***************
*** 51,56 ****
--- 51,76 ----
sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+
+
+ if test X"$args" != "X" ; then
+ for ext in $args ; do
+ : $ext will either be 'Name' or 'Name1/Name2' etc
+ : convert ext into cname and mname
+ mname=`echo $ext | sed 's!/!::!g'`
+ cname=`echo $mname | sed 's!:!_!g'`
+
+ echo "EXTERN_C void boot_${cname} _((CV* cv));"
+ done
+ fi
+
+ cat << 'EOP'
+
+ static void
+ xs_init()
+ {
+ EOP
+
if test X"$args" != "X" ; then
echo " char *file = __FILE__;"
ai=''
***************
*** 62,68 ****
mname=`echo $ext | sed 's!/!::!g'`
cname=`echo $mname | sed 's!:!_!g'`
! echo " { extern void boot_${cname} _((CV* cv));"
if test "$ext" = "DynaLoader"; then
: Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
: boot_DynaLoader is called directly in DynaLoader.pm
--- 82,88 ----
mname=`echo $ext | sed 's!/!::!g'`
cname=`echo $mname | sed 's!:!_!g'`
! echo " {"
if test "$ext" = "DynaLoader"; then
: Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
: boot_DynaLoader is called directly in DynaLoader.pm
*** miniperlmain.c~ Thu Sep 28 00:00:28 1995
--- miniperlmain.c Tue Oct 10 16:55:34 1995
***************
*** 2,18 ****
--- 2,33 ----
* "The Road goes ever on and on, down from the door where it began."
*/
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
#include "EXTERN.h"
#include "perl.h"
+ #ifdef __cplusplus
+ }
+ # define EXTERN_C extern "C"
+ #else
+ # define EXTERN_C extern
+ #endif
+
static void xs_init _((void));
static PerlInterpreter *my_perl;
int
+ #ifndef CAN_PROTOTYPE
main(argc, argv, env)
int argc;
char **argv;
char **env;
+ #else /* def(CAN_PROTOTYPE) */
+ main(int argc, char **argv, char **env)
+ #endif /* def(CAN_PROTOTYPE) */
{
int exitstatus;
***************
*** 46,53 ****
/* Register any extra external extensions */
static void
xs_init()
{
- /* Do not delete this line--writemain depends on it */
}
--- 61,69 ----
/* Register any extra external extensions */
+ /* Do not delete this line--writemain depends on it */
+
static void
xs_init()
{
}