Hi,
The following code builds and runs fine on linux (perl 5.8.8), but won't
compile on Win32 (perl 5.8.8):
use warnings;
use Inline C => Config =>
BUILD_NOISY => 1;
use Inline C => <<'EOC';
#ifdef RUBBISH
void greet1() {
printf("Hello 1\n");
//#else
//void greet1(){}
#endif
void greet2() {
printf("Hello 2\n");
}
EOC
greet2();
__END__
'RUBBISH' is not defined on either box.
Here's the error I get on Win32:
try_pl_7b60.o(.text+0x7e):try_pl_7b60.c: undefined reference to `greet1'
collect2: ld returned 1 exit status
dmake: Error code 129, while making
'blib\arch\auto\try_pl_7b60\try_pl_7b60.dll
If I want to get that to build on Win32 I have to include those 2 lines of C
code that are currently commented out.
This all translates to the real world situation where I have some XS code
that will run only on perl 5.8. So ... if the module is being built on perl
5.8, I define '-DPERL58' and have code like:
-------------------------
// the usual includes
#ifdef PERL58
void foo() {
// do stuff
}
#endif
void bar() {
// additional func that works on perl 5.8 or earlier
}
.
.
// Then the XS section - as per the type of XS file that Inline
auto-generates.
------------------
I was hoping that would build on perl 5.6 - and it does with linux, but not
with Win32 (where it produces the same type of error as above).
How best to proceed with this ?
Do I include an alternative dummy function that does nothing except cater
for the #else case ? That would seem rather comical to me.
Surely there's a better way of doing it.
Cheers,
Rob