"Fossies" - the Fresh Open Source Software Archive 
Member "RT-Extension-Assets-1.05/inc/Module/Install/Can.pm" (6 May 2015, 3183 Bytes) of package /linux/misc/RT-Extension-Assets-1.05.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "Can.pm" see the
Fossies "Dox" file reference documentation and the last
Fossies "Diffs" side-by-side code changes report:
1.02_vs_1.04.
1 #line 1
2 package Module::Install::Can;
3
4 use strict;
5 use Config ();
6 use ExtUtils::MakeMaker ();
7 use Module::Install::Base ();
8
9 use vars qw{$VERSION @ISA $ISCORE};
10 BEGIN {
11 $VERSION = '1.14';
12 @ISA = 'Module::Install::Base';
13 $ISCORE = 1;
14 }
15
16 # check if we can load some module
17 ### Upgrade this to not have to load the module if possible
18 sub can_use {
19 my ($self, $mod, $ver) = @_;
20 $mod =~ s{::|\\}{/}g;
21 $mod .= '.pm' unless $mod =~ /\.pm$/i;
22
23 my $pkg = $mod;
24 $pkg =~ s{/}{::}g;
25 $pkg =~ s{\.pm$}{}i;
26
27 local $@;
28 eval { require $mod; $pkg->VERSION($ver || 0); 1 };
29 }
30
31 # Check if we can run some command
32 sub can_run {
33 my ($self, $cmd) = @_;
34
35 my $_cmd = $cmd;
36 return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
37
38 for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
39 next if $dir eq '';
40 require File::Spec;
41 my $abs = File::Spec->catfile($dir, $cmd);
42 return $abs if (-x $abs or $abs = MM->maybe_command($abs));
43 }
44
45 return;
46 }
47
48 # Can our C compiler environment build XS files
49 sub can_xs {
50 my $self = shift;
51
52 # Ensure we have the CBuilder module
53 $self->configure_requires( 'ExtUtils::CBuilder' => 0.27 );
54
55 # Do we have the configure_requires checker?
56 local $@;
57 eval "require ExtUtils::CBuilder;";
58 if ( $@ ) {
59 # They don't obey configure_requires, so it is
60 # someone old and delicate. Try to avoid hurting
61 # them by falling back to an older simpler test.
62 return $self->can_cc();
63 }
64
65 # Do we have a working C compiler
66 my $builder = ExtUtils::CBuilder->new(
67 quiet => 1,
68 );
69 unless ( $builder->have_compiler ) {
70 # No working C compiler
71 return 0;
72 }
73
74 # Write a C file representative of what XS becomes
75 require File::Temp;
76 my ( $FH, $tmpfile ) = File::Temp::tempfile(
77 "compilexs-XXXXX",
78 SUFFIX => '.c',
79 );
80 binmode $FH;
81 print $FH <<'END_C';
82 #include "EXTERN.h"
83 #include "perl.h"
84 #include "XSUB.h"
85
86 int main(int argc, char **argv) {
87 return 0;
88 }
89
90 int boot_sanexs() {
91 return 1;
92 }
93
94 END_C
95 close $FH;
96
97 # Can the C compiler access the same headers XS does
98 my @libs = ();
99 my $object = undef;
100 eval {
101 local $^W = 0;
102 $object = $builder->compile(
103 source => $tmpfile,
104 );
105 @libs = $builder->link(
106 objects => $object,
107 module_name => 'sanexs',
108 );
109 };
110 my $result = $@ ? 0 : 1;
111
112 # Clean up all the build files
113 foreach ( $tmpfile, $object, @libs ) {
114 next unless defined $_;
115 1 while unlink;
116 }
117
118 return $result;
119 }
120
121 # Can we locate a (the) C compiler
122 sub can_cc {
123 my $self = shift;
124 my @chunks = split(/ /, $Config::Config{cc}) or return;
125
126 # $Config{cc} may contain args; try to find out the program part
127 while (@chunks) {
128 return $self->can_run("@chunks") || (pop(@chunks), next);
129 }
130
131 return;
132 }
133
134 # Fix Cygwin bug on maybe_command();
135 if ( $^O eq 'cygwin' ) {
136 require ExtUtils::MM_Cygwin;
137 require ExtUtils::MM_Win32;
138 if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) {
139 *ExtUtils::MM_Cygwin::maybe_command = sub {
140 my ($self, $file) = @_;
141 if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) {
142 ExtUtils::MM_Win32->maybe_command($file);
143 } else {
144 ExtUtils::MM_Unix->maybe_command($file);
145 }
146 }
147 }
148 }
149
150 1;
151
152 __END__
153
154 #line 236