Dear gurus,
on my continuing quest to bring the CORBA magic to Win32 I have taken to
trying to build CORBA::ORBit v.0.4.7.
I am running ActivePerl v5.8.4 for MSWin32-x86-multi-thread, which is
built using Microsoft Visual C++ 6.0. I reasoned that, in order to build
this module, I should use MSVC++ too - although I have no prior
experience with this program. I decided to give it a shot after numerous
earlier aborted attempts using mingw gcc.
Anyway, so I unzip and untar the *.tar.gz for the module and start a new
*.dll project in MSVC++. I add the C sources, the headers and the XS
file to the project. I point MSVC++ to the right extra headers (i.e.
those for orbit, the perl CORE headers and the glib headers).
I get a LOT of compiler errors, seemingly because for some reason both
winsock2.h and winsock.h are imported. I work around this by telling
<sys/socket.h> in the perl CORE headers to include winsock2.h instead of
winsock.h (don't worry, I'll change it back as soon as I'm done).
Most compiler errors have gone away now. The ones remaining have me at
the end of my wits, though. "cl.exe" seems to choke on the following
code, and I can't see what's wrong with it:
#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
void newCONSTSUB(HV *stash, char *name, SV *sv);
#ifdef __cplusplus
}
#endif
/* Graham Barr's Function for creating a constant subroutine.
* From op.c in perl5.005_03
*/
void newCONSTSUB(HV *stash, char *name, SV *sv) {
U32 oldhints = hints;
HV *old_cop_stash = curcop->cop_stash;
HV *old_curstash = curstash;
line_t oldline = curcop->cop_line;
curcop->cop_line = copline;
hints &= ~HINT_BLOCK_SCOPE;
if(stash)
curstash = curcop->cop_stash = stash;
newSUB(
start_subparse(FALSE, 0),
newSVOP(OP_CONST, 0, newSVpv(name,0)),
newSVOP(OP_CONST, 0, &sv_no), /* SvPV(&sv_no) == "" --
+GMB */
newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
);
hints = oldhints;
curcop->cop_stash = old_cop_stash;
curstash = old_curstash;
curcop->cop_line = oldline;
}
I get the following errors:
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2143: syntax error : missing ')' before '('
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2143: syntax error : missing ')' before '('
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2091: function returns function
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2091: function returns function
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2061: syntax error : identifier 'Perl_get_context'
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2059: syntax error : ';'
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+0) : error C2059: syntax error : ')'
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2143: syntax error : missing ')' before '('
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2143: syntax error : missing ')' before '('
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2091: function returns function
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2091: function returns function
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2061: syntax error : identifier 'Perl_get_context'
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2059: syntax error : ';'
c:\documents and settings\rvosa\desktop\corba-orbit-0.4.7\constsub.c(1
+9) : error C2059: syntax error : ')'
I am completely stumped. As far as I can tell (which doesn't say much as
I'm neither a C guru nor an MSVC++ guru) there's nothing wrong with the
code. I built CORBA::ORBit straight from CPAN on OS X and linux and only
with minor tweaks of the Makefile.PL on Cygwin.
Any ideas? Thanks!