Ensure that C++ modules can be built against a perl configured with -DPERL_GLOBAL_STR...
authorMarcus Holland-Moritz <mhx-perl@gmx.net>
Fri, 23 Jan 2009 21:11:38 +0000 (22:11 +0100)
committerMarcus Holland-Moritz <mhx-perl@gmx.net>
Fri, 23 Jan 2009 21:11:38 +0000 (22:11 +0100)
Perl_GetVarsPrivate() could not be seen from within a module built
with a C++ compiler if the perl binary was built with a C compiler,
as the prototype was not 'extern "C"' for C++.
The change moves the EXTERN_C defines so they can be used for the
prototype of Perl_GetVarsPrivate().

perl.h

diff --git a/perl.h b/perl.h
index 45d0e1d..52d90f8 100644 (file)
--- a/perl.h
+++ b/perl.h
 #   endif
 #endif
 
+#undef START_EXTERN_C
+#undef END_EXTERN_C
+#undef EXTERN_C
+#ifdef __cplusplus
+#  define START_EXTERN_C extern "C" {
+#  define END_EXTERN_C }
+#  define EXTERN_C extern "C"
+#else
+#  define START_EXTERN_C
+#  define END_EXTERN_C
+#  define EXTERN_C extern
+#endif
+
 #ifdef PERL_GLOBAL_STRUCT
 #  ifndef PERL_GET_VARS
 #    ifdef PERL_GLOBAL_STRUCT_PRIVATE
-       extern struct perl_vars* Perl_GetVarsPrivate();
+       EXTERN_C struct perl_vars* Perl_GetVarsPrivate();
 #      define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */
 #      ifndef PERLIO_FUNCS_CONST
 #        define PERLIO_FUNCS_CONST /* Can't have these lying around. */
 #  endif
 #endif
 
-#undef START_EXTERN_C
-#undef END_EXTERN_C
-#undef EXTERN_C
-#ifdef __cplusplus
-#  define START_EXTERN_C extern "C" {
-#  define END_EXTERN_C }
-#  define EXTERN_C extern "C"
-#else
-#  define START_EXTERN_C
-#  define END_EXTERN_C
-#  define EXTERN_C extern
-#endif
-
 /* Some platforms require marking function declarations
  * for them to be exportable.  Used in perlio.h, proto.h
  * is handled either by the makedef.pl or by defining the