Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^2: Best way to implement Inline::C/Pure Perl function in a module?

by uG (Scribe)
on Oct 26, 2012 at 03:09 UTC ( #1000983=note: print w/replies, xml ) Need Help??


in reply to Re: Best way to implement Inline::C/Pure Perl function in a module?
in thread Best way to implement Inline::C/Pure Perl function in a module?

Of all the people to who could have answered :)

I applied this method to my Makefile.PL as well. I was hoping to get the compile out of the way immediately, but I don't think Module::Install likes it. I'm not sure if I should keep playing around with it or just go back to ExtUtils...

make: *** No rule to make target `Damerau.inl', needed by `pure_all'. Stop.

use inc::Module::Install; name 'Some-Module'; all_from 'lib/SomeModule.pm'; readme_from 'lib/SomeModule.pm', 1; auto_manifest; auto_set_repository; auto_license; test_requires 'Test::More'; recommends 'Inline::C'; eval { require Inline; Inline->import( C => Config => BUILD_NOISY => 1 ); }; if($@) { WriteAll(); } else { WriteAll( inline => 1 ); }
  • Comment on Re^2: Best way to implement Inline::C/Pure Perl function in a module?
  • Download Code

Replies are listed 'Best First'.
Re^3: Best way to implement Inline::C/Pure Perl function in a module?
by syphilis (Chancellor) on Oct 26, 2012 at 05:04 UTC
    I applied this method to my Makefile.PL as well

    I think that all you can really do at the Makefile.PL stage is to eval{require Inline::C}; and use the result of that to determine whether Inline is available.
    Then you need to have 2 versions of SomeModule.pm - one rendition that caters for the availability of Inline, and one that caters for the absence of Inline support.

    One other feature of the approach I initially outlined is that Inline::C can be installed *after* SomeModule.pm has been installed, and the Inline::C version of your ed() function is then immediately available - without any need to build/install SomeModule.pm all over again.
    Of course, it does mean that the final compilation of the C code won't take place until the first time that SomeModule.pm has been loaded, *after* make install has been run.

    Other options include doing away with the Inline dependency completely and just re-structuring your module as a normal type of XS distro. (I use InlineX::C2XS for that.)

    I've no experience with inc/Module/Install ... except for some bad experiences where it has been thrust upon me by some module that I happen to be wanting to install.

    Cheers,
    Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1000983]
help
Chatterbox?
[Mr. Muskrat]: (considered) Re^3: Please help with Regexp::Common needs to be reparented to Re^2: Please help with Regexp::Common
[Mr. Muskrat]: Is it just me or does that timeout issue seems to be happening more often lately?
[Corion]: Mr. Muskrat: I'm not sure if it really happens more often, but I don't exactly know either
[LanX]: yep
[LanX]: more often for some weeks now
[Corion]: I think I'll have to manually (as god) intervene with that node, as the simple reparenting didn't seem to fix the parent/child relationship of the nodes
[Corion]: I think I have an idea but I'll have to open a ticket with Pair.com on that - hopefully I get to that on the weekend
LanX imagines a burning thorn bush
[Mr. Muskrat]: Thank you!
[Mr. Muskrat]: Oh that is odd. I got the message that it was reparented but yeah, it didn't actually do it. lol

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (11)
As of 2017-01-19 16:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (170 votes). Check out past polls.