| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Inline::Module::LeanDist::DistDir; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
377
|
use strict; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
31
|
|
|
4
|
|
|
|
|
|
|
|
|
5
|
1
|
|
|
1
|
|
4
|
use File::Find; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
70
|
|
|
6
|
1
|
|
|
1
|
|
519
|
use File::Copy; |
|
|
1
|
|
|
|
|
3735
|
|
|
|
1
|
|
|
|
|
685
|
|
|
7
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
require Inline::Module::LeanDist; |
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
## Inline::C makes it kind of hard to get access to this, so just copy/paste it in here for now (I know, I know, ick...) |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
our $inline_h_file = <<'END_OF_INLINE_H'; |
|
14
|
|
|
|
|
|
|
#define Inline_Stack_Vars dXSARGS |
|
15
|
|
|
|
|
|
|
#define Inline_Stack_Items items |
|
16
|
|
|
|
|
|
|
#define Inline_Stack_Item(x) ST(x) |
|
17
|
|
|
|
|
|
|
#define Inline_Stack_Reset sp = mark |
|
18
|
|
|
|
|
|
|
#define Inline_Stack_Push(x) XPUSHs(x) |
|
19
|
|
|
|
|
|
|
#define Inline_Stack_Done PUTBACK |
|
20
|
|
|
|
|
|
|
#define Inline_Stack_Return(x) XSRETURN(x) |
|
21
|
|
|
|
|
|
|
#define Inline_Stack_Void XSRETURN(0) |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
#define INLINE_STACK_VARS Inline_Stack_Vars |
|
24
|
|
|
|
|
|
|
#define INLINE_STACK_ITEMS Inline_Stack_Items |
|
25
|
|
|
|
|
|
|
#define INLINE_STACK_ITEM(x) Inline_Stack_Item(x) |
|
26
|
|
|
|
|
|
|
#define INLINE_STACK_RESET Inline_Stack_Reset |
|
27
|
|
|
|
|
|
|
#define INLINE_STACK_PUSH(x) Inline_Stack_Push(x) |
|
28
|
|
|
|
|
|
|
#define INLINE_STACK_DONE Inline_Stack_Done |
|
29
|
|
|
|
|
|
|
#define INLINE_STACK_RETURN(x) Inline_Stack_Return(x) |
|
30
|
|
|
|
|
|
|
#define INLINE_STACK_VOID Inline_Stack_Void |
|
31
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
#define inline_stack_vars Inline_Stack_Vars |
|
33
|
|
|
|
|
|
|
#define inline_stack_items Inline_Stack_Items |
|
34
|
|
|
|
|
|
|
#define inline_stack_item(x) Inline_Stack_Item(x) |
|
35
|
|
|
|
|
|
|
#define inline_stack_reset Inline_Stack_Reset |
|
36
|
|
|
|
|
|
|
#define inline_stack_push(x) Inline_Stack_Push(x) |
|
37
|
|
|
|
|
|
|
#define inline_stack_done Inline_Stack_Done |
|
38
|
|
|
|
|
|
|
#define inline_stack_return(x) Inline_Stack_Return(x) |
|
39
|
|
|
|
|
|
|
#define inline_stack_void Inline_Stack_Void |
|
40
|
|
|
|
|
|
|
END_OF_INLINE_H |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
sub run { |
|
44
|
0
|
|
|
0
|
0
|
|
my ($distvname, $inline_file) = @ARGV; |
|
45
|
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
edit_file("$distvname/Makefile.PL", sub { |
|
47
|
0
|
0
|
|
0
|
|
|
s/^(use Inline::Module::LeanDist.*?)$/# Commented out for distribution by Inline::Module::LeanDist\n#$1/mg |
|
48
|
|
|
|
|
|
|
|| die "unable to find 'use Inline::Module::LeanDist' directive in Makefile.PL"; |
|
49
|
0
|
|
|
|
|
|
}); |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
edit_file("$distvname/$inline_file", sub { |
|
52
|
0
|
|
|
0
|
|
|
my $xsloader_snippet = qq{# XSLoader added for distribution by Inline::Module::LeanDist:\nrequire XSLoader; XSLoader::load(__PACKAGE__, \$VERSION);\n}; |
|
53
|
0
|
0
|
|
|
|
|
s/^(use Inline::Module::LeanDist.*?)$/# Commented out for distribution by Inline::Module::LeanDist\n#$1\n\n$xsloader_snippet/mg |
|
54
|
|
|
|
|
|
|
|| die "unable to find 'use Inline' directive in $inline_file"; |
|
55
|
0
|
|
|
|
|
|
}); |
|
56
|
|
|
|
|
|
|
|
|
57
|
0
|
0
|
|
|
|
|
$inline_file =~ m{([^/]+)[.]pm$} |
|
58
|
|
|
|
|
|
|
|| die "couldn't extract base filename from filename $inline_file"; |
|
59
|
|
|
|
|
|
|
|
|
60
|
0
|
|
|
|
|
|
my $base_filename = $1; |
|
61
|
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
edit_file("$distvname/Makefile.PL", sub { |
|
63
|
0
|
0
|
|
0
|
|
|
s/^(\s*OBJECT\s*=>\s*')(.*?')/$1${base_filename}.o $2/mg |
|
64
|
|
|
|
|
|
|
|| die "couldn't find OBJECT => '' in Makefile.PL"; |
|
65
|
0
|
|
|
|
|
|
}); |
|
66
|
|
|
|
|
|
|
|
|
67
|
0
|
|
|
|
|
|
my $xs_file; |
|
68
|
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
File::Find::find({ |
|
70
|
|
|
|
|
|
|
wanted => sub { |
|
71
|
0
|
0
|
|
0
|
|
|
-f or return; |
|
72
|
|
|
|
|
|
|
|
|
73
|
0
|
0
|
|
|
|
|
if (m{/$base_filename[.]xs$}) { |
|
74
|
0
|
0
|
|
|
|
|
die "found multiple $base_filename.xs files in the $Inline::Module::LeanDist::inline_build_path dir" |
|
75
|
|
|
|
|
|
|
if defined $xs_file; |
|
76
|
|
|
|
|
|
|
|
|
77
|
0
|
|
|
|
|
|
$xs_file = $_; |
|
78
|
|
|
|
|
|
|
} |
|
79
|
|
|
|
|
|
|
}, |
|
80
|
0
|
|
|
|
|
|
no_chdir => 1, |
|
81
|
|
|
|
|
|
|
}, $Inline::Module::LeanDist::inline_build_path); |
|
82
|
|
|
|
|
|
|
|
|
83
|
0
|
0
|
|
|
|
|
die "unable to find $base_filename.xs in $Inline::Module::LeanDist::inline_build_path" |
|
84
|
|
|
|
|
|
|
if !defined $xs_file; |
|
85
|
|
|
|
|
|
|
|
|
86
|
0
|
0
|
|
|
|
|
copy($xs_file, "$distvname/$base_filename.xs") || die "copy of xs file failed: $!"; |
|
87
|
|
|
|
|
|
|
|
|
88
|
0
|
|
|
|
|
|
add_to_manifest("$distvname/MANIFEST", "$base_filename.xs"); |
|
89
|
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
edit_file("$distvname/$base_filename.xs", sub { |
|
91
|
0
|
0
|
|
0
|
|
|
s/^#include "INLINE.h"\s*$/$inline_h_file/mg |
|
92
|
|
|
|
|
|
|
|| die "couldn't find INLINE.h include in $distvname/$base_filename.xs"; |
|
93
|
0
|
|
|
|
|
|
}); |
|
94
|
|
|
|
|
|
|
} |
|
95
|
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
|
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
sub edit_file { |
|
99
|
0
|
|
|
0
|
0
|
|
my ($filename, $cb) = @_; |
|
100
|
|
|
|
|
|
|
|
|
101
|
0
|
0
|
|
|
|
|
open(my $fh, '<', $filename) || die "unable to open $filename for reading: $!"; |
|
102
|
|
|
|
|
|
|
|
|
103
|
0
|
|
|
|
|
|
local $_; |
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
{ |
|
106
|
0
|
|
|
|
|
|
local $/; |
|
|
0
|
|
|
|
|
|
|
|
107
|
0
|
|
|
|
|
|
$_ = <$fh>; |
|
108
|
|
|
|
|
|
|
} |
|
109
|
|
|
|
|
|
|
|
|
110
|
0
|
|
|
|
|
|
undef $fh; |
|
111
|
|
|
|
|
|
|
|
|
112
|
0
|
|
|
|
|
|
$cb->(); |
|
113
|
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
## Write to $filename.edit because MakeMaker likes to use hard-links. You can always over-ride this |
|
115
|
|
|
|
|
|
|
## in the Makefile.PL with DIST_CP => 'cp', but this way it will work even if a user forgets to do this. |
|
116
|
|
|
|
|
|
|
|
|
117
|
0
|
0
|
|
|
|
|
open($fh, '>', "$filename.edit") || die "unable to open $filename.edit for writing: $!"; |
|
118
|
|
|
|
|
|
|
|
|
119
|
0
|
|
|
|
|
|
print $fh $_; |
|
120
|
|
|
|
|
|
|
|
|
121
|
0
|
|
|
|
|
|
undef $fh; |
|
122
|
|
|
|
|
|
|
|
|
123
|
0
|
0
|
|
|
|
|
rename("$filename.edit", $filename) || die "couldn't rename $filename.edit to $filename: $!"; |
|
124
|
|
|
|
|
|
|
} |
|
125
|
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
sub add_to_manifest { |
|
128
|
0
|
|
|
0
|
0
|
|
my ($manifest_file, $line) = @_; |
|
129
|
|
|
|
|
|
|
|
|
130
|
0
|
|
|
|
|
|
copy($manifest_file, "$manifest_file.edit"); |
|
131
|
|
|
|
|
|
|
|
|
132
|
0
|
0
|
|
|
|
|
rename("$manifest_file.edit", $manifest_file) || die "couldn't rename $manifest_file.edit to $manifest_file: $!"; |
|
133
|
|
|
|
|
|
|
|
|
134
|
0
|
0
|
|
|
|
|
open(my $fh, '>>', $manifest_file) || die "couldn't open $manifest_file for append: $!"; |
|
135
|
|
|
|
|
|
|
|
|
136
|
0
|
|
|
|
|
|
print $fh "$line\n"; |
|
137
|
|
|
|
|
|
|
} |
|
138
|
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
1; |