Ingo Weinhold wrote:
On 2009-03-12 at 23:09:20 [+0100], Sean Healy <jalopeura@xxxxxxxxxxx> wrote:I'm writing a Perl extension to interface with Haiku's kits. I'm getting errors from Perl's own header files. However, since somebody (apparently Ingo) was able to build Perl on Haiku in the first place, I'm sure there is a solution. If anyone can help point me in the right direction, that would be great. (By the way, I'm using the 2.95 compiler. I verified that Perl was also built with the 2.95 compiler.) /boot/common/bin/perl /boot/common/lib/perl5/5.10.0/ExtUtils/xsubpp -C++ -typemap /boot/common/lib/perl5/5.10.0/ExtUtils/typemap -typemap typemap ApplicationKit.xs > ApplicationKit.xsc && mv ApplicationKit.xsc ApplicationKit.c Please specify prototyping behavior for ApplicationKit.xs (see perlxs manual)Not sure what this is supposed to mean. I guess checking out the perlxs manual as suggested might help.
Apparently, xsubpp is just being picky. It wants XS files to use the PROTOTYPES directive, but works just fine without it. So this problem turned out to be a) not a Haiku issue, and b) not really an issue anyway.
g++ -c -I. -fno-strict-aliasing -pipe -O -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -fpic "-I/boot/common/lib/perl5/5.10.0/BePC-haiku/CORE" ApplicationKit.c In file included from /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ApplicationKit.xs:5: /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/perl.h:1586: badly punctuated parameter list in `#define' /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/perl.h:1598: badly punctuated parameter list in `#define'This is interesting. Apparently the gcc 2.95.3 C compiler supports C99 variadic macros while the C++ compiler doesn't. Perl itself is C only, so there was no problem with building it. You could try to undef the HAS_C99_VARIADIC_MACROS macro in config.h. Maybe that will work.At any rate, please file a bug report at HaikuPorts.
Yes, that worked. Hopefully it won't have any unexpected side effects. I have requested a HaikuPorts account so I can file a bug report.
In file included from /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ApplicationKit.xs:5: /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/perl.h:2555: haiku/haikuish.h: No such file or directoryUgh, that file has apparently not been installed. Not sure why -- I might have missed adding it to some file listing. You can get it from the patch on HaikuPorts (Scott sent the link to the port log); it's only a few lines long. The file must probably live in .../BePC-haiku/CORE/haiku/.Again, please file a bug report at HaikuPorts.
That was apparently the right place, as it cleared up the problem.
In file included from /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ApplicationKit.xs:11: /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ppport.h:4267: Invalid token in expression
After some searching, I discovered that ppport is apparently not necessary. It's basically a way to make some newer Perl features available to older versions. Since Haiku is new, presumably the vast majority of people who might compile my extension will be not be using one of the older versions. So for now I simply commented out the include.
The offending line, by the way, is contained within #if (PERL_BCDVERSION < 0x5004063) .. #endifso I'm not sure why it's even being compiled. PERL_BCDVERSION is defined via PERL_REVISION, PERL_VERSION, and PERL_SUBVERSION, all of which seem to be set properly in patchlevel.h
In file included from /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/perl.h:4695, from /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ApplicationKit.xs:5: /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/proto.h:211: parse error before `*'Nothing obvious wrong here. Run the above g++ line with "-E" instead of "-c" and a different output file and check what this line is preprocessed to.In file included from /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/perl.h:4725, from /BeStuff/Perl_Haiku_Kits/working/Haiku-ApplicationKit/ApplicationKit.xs:5: /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/intrpvar.h:85: syntax error before `;' /boot/common/lib/perl5/5.10.0/BePC-haiku/CORE/intrpvar.h:86: syntax error before `;'Same here.
These last several errors went away when I added haikuish.h.
The extension now compiles. Thanks for the help.