Revision: | 1.6 |
Committed: | Fri Dec 1 02:17:37 2006 UTC (17 years, 7 months ago) by root |
Branch: | MAIN |
CVS Tags: | rel-4_22, rel-4_21, rel-4_0, rel-4_3, rel-3_41, rel-4_13, rel-4_11, rel-3_55, rel-3_51, rel-4_01, rel-4_03, rel-4_02, rel-3_6, rel-3_62, rel-3_63, rel-3_61, rel-3_4, rel-3_1, rel-3_5, rel-3_3, rel-3_2, rel-3_0, rel-3_01, rel-4_50, rel-4_51, rel-4_4, rel-3_11, rel-4_45, rel-4_49, rel-4_48, rel-4_1, rel-4_2, rel-4_47, rel-4_46, rel-3_501, rel-4_31, rel-4_32, rel-4_33, rel-4_34, rel-4_35, rel-4_36, rel-4_37 |
Changes since 1.5: | +5 -6 lines |
Log Message: | *** empty log message *** |
# | User | Rev | Content |
---|---|---|---|
1 | root | 1.1 | package Coro::MakeMaker; |
2 | |||
3 | pcg | 1.4 | BEGIN { eval { require warnings } && warnings->unimport ("uninitialized") } |
4 | root | 1.2 | |
5 | root | 1.1 | use Config; |
6 | use base 'Exporter'; | ||
7 | |||
8 | @EXPORT_OK = qw(&coro_args $installsitearch); | ||
9 | |||
10 | my %opt; | ||
11 | |||
12 | for my $opt (split /:+/, $ENV{PERL_MM_OPT}) { | ||
13 | my ($k,$v) = split /=/, $opt; | ||
14 | $opt{$k} = $v; | ||
15 | } | ||
16 | |||
17 | my $extra = $Config{sitearch}; | ||
18 | |||
19 | $extra =~ s/$Config{prefix}/$opt{PREFIX}/ if | ||
20 | exists $opt{PREFIX}; | ||
21 | |||
22 | for my $d ($extra, @INC) { | ||
23 | if (-e "$d/Coro/CoroAPI.h") { | ||
24 | $installsitearch = $d; | ||
25 | last; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | sub coro_args { | ||
30 | my %arg = @_; | ||
31 | $arg{INC} .= " -I$installsitearch/Coro"; | ||
32 | %arg; | ||
33 | } | ||
34 | |||
35 | 1; | ||
36 | __END__ | ||
37 | |||
38 | =head1 NAME | ||
39 | |||
40 | Coro::MakeMaker - MakeMaker glue for the C-level Coro API | ||
41 | |||
42 | =head1 SYNOPSIS | ||
43 | |||
44 | This allows you to control coroutines from C level. | ||
45 | |||
46 | =head1 DESCRIPTION | ||
47 | |||
48 | For optimal performance, hook into Coro at the C-level. You'll need | ||
49 | to make changes to your C<Makefile.PL> and add code to your C<xs> / | ||
50 | C<c> file(s). | ||
51 | |||
52 | =head1 WARNING | ||
53 | |||
54 | When you hook in at the C-level you get a I<huge> performance gain, | ||
55 | but you also reduce the chances that your code will work unmodified | ||
56 | with newer versions of C<perl> or C<Coro>. This may or may not be a | ||
57 | problem. Just be aware, and set your expectations accordingly. | ||
58 | |||
59 | =head1 HOW TO | ||
60 | |||
61 | =head2 Makefile.PL | ||
62 | |||
63 | use Coro::MakeMaker qw(coro_args); | ||
64 | |||
65 | # ... set up %args ... | ||
66 | |||
67 | WriteMakefile(coro_args(%args)); | ||
68 | |||
69 | =head2 XS | ||
70 | |||
71 | #include "CoroAPI.h" | ||
72 | |||
73 | BOOT: | ||
74 | I_CORO_API("YourModule"); | ||
75 | |||
76 | root | 1.5 | =head2 API |
77 | root | 1.1 | |
78 | root | 1.5 | /* perl-related */ |
79 | #define TRANSFER_SAVE_DEFAV /* save @_ */ | ||
80 | #define TRANSFER_SAVE_DEFSV /* save $_ */ | ||
81 | #define TRANSFER_SAVE_ERRSV /* save $@ */ | ||
82 | root | 1.1 | |
83 | root | 1.6 | #define TRANSFER_SAVE_ALL ( TRANSFER_SAVE_DEFAV \ |
84 | | TRANSFER_SAVE_DEFSV \ | ||
85 | | TRANSFER_SAVE_ERRSV) | ||
86 | root | 1.5 | |
87 | #define CORO_TRANSFER(prev,next,flags) /* transfer from prev to next */ | ||
88 | #define CORO_SCHEDULE /* like Coro::schedule */ | ||
89 | #define CORO_CEDE /* like Coro::cede */ | ||
90 | #define CORO_READY(coro) /* like $coro->ready */ | ||
91 | root | 1.6 | #define CORO_IS_READY(coro) /* like $coro->is_ready */ |
92 | #define CORO_NREADY /* # of procs in ready queue */ | ||
93 | root | 1.5 | #define CORO_CURRENT /* returns $Coro::current */ |
94 | root | 1.1 | |
95 | =cut |