in reply to Module::Build::WithXSpp does not correctly handle XS files correctly?

ok, I'm back and caffeinated :) If you go to http://p3rl.org/Module::Build::WithXSpp and look at https://metacpan.org/pod/Module::Build::WithXSpp#FEATURES-AND-CONVENTIONS it says

By default, Module::Build::WithXSpp will automatically generate a main XS file for your module which includes all XS++ files and does the correct incantations to support C++.

If Module::Build::WithXSpp detects any XS files in your module, it will skip the generation of this default file and assume that you wrote a custom main XS file.

So I think that answers that

If you go to https://metacpan.org/pod/Module::Build::WithXSpp#JUMP-START-FOR-THE-IMPATIENT it describes the expected layout

So if your module_name is GenoEye (GenoEye.pm) and you have some .xs files (GenoEye_Page.xs) but you don't have GenoEye.xs, then GenoEye.xs (module_name.xs) won't be generated for you (because of GenoEye_Page.xs)

So what you're missing is a GenoEye.xs (module_name.xs) which you need to create , something like WithIntAndString.xs something that uses

INCLUDE_COMMAND: $^X -S xsubpp -- GenoEye_Page.xs

I prefer running examples to reading docs, easier to figure out what docs to read instead of reading all the docs

  • Comment on Re: Module::Build::WithXSpp does not correctly handle XS files correctly? ( module_name.xs )

Replies are listed 'Best First'.
Re^2: Module::Build::WithXSpp does not correctly handle XS files correctly? ( module_name.xs )
by llancet (Friar) on Jan 11, 2014 at 02:16 UTC
    I looked at the source code of M::B::WithXSpp, and it indeed has a bug. In function ACTION_generate_main_xs:
    ... if (keys(%$xs_files) > 1) { # user knows what she's doing, do not generate XS $self->log_info("Found custom XS files. Not auto-generating main X +S file...\n"); return 1; } ...

    The HashRef $xs_files contain all user-write XS files, but also contain the auto generated buildtmp/main.xs. And, it tests whether there are more than 1 xs files. This logic causes two issues:

    1. If I have only one manually-written XS file, the builder will still auto-generate the main.xs, which is not the expected behavior.

    2. If I run the builder, it will generate a main.xs. Thus the builder's behavior will change unexpectedly, as now the XS file amount is changed.

    This logic should be revised, and it looks like the plain XS support of M::B::WithXSpp is not extensively tested. Where can I report this issue?