This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge work automating generation of lib/.gitignore and lib/ subdir cleanup.
[perl5.git] / cpan / ExtUtils-MakeMaker / lib / ExtUtils / MM_Cygwin.pm
CommitLineData
f89d6eaa
EF
1package ExtUtils::MM_Cygwin;
2
b75c8c73 3use strict;
b75c8c73 4
7292dc67 5use ExtUtils::MakeMaker::Config;
ecf68df6
DR
6use File::Spec;
7
f6d6199c 8require ExtUtils::MM_Unix;
5bdf71cc
RGS
9require ExtUtils::MM_Win32;
10our @ISA = qw( ExtUtils::MM_Unix );
f89d6eaa 11
673553d0 12our $VERSION = '6.68';
479d2113
MS
13
14
15=head1 NAME
16
17ExtUtils::MM_Cygwin - methods to override UN*X behaviour in ExtUtils::MakeMaker
18
19=head1 SYNOPSIS
20
21 use ExtUtils::MM_Cygwin; # Done internally by ExtUtils::MakeMaker if needed
22
23=head1 DESCRIPTION
24
25See ExtUtils::MM_Unix for a documentation of the methods provided there.
26
27=over 4
28
7292dc67 29=item os_flavor
dedf98bc
MS
30
31We're Unix and Cygwin.
32
33=cut
34
35sub os_flavor {
36 return('Unix', 'Cygwin');
37}
38
7292dc67 39=item cflags
479d2113
MS
40
41if configured for dynamic loading, triggers #define EXT in EXTERN.h
42
43=cut
f89d6eaa
EF
44
45sub cflags {
46 my($self,$libperl)=@_;
47 return $self->{CFLAGS} if $self->{CFLAGS};
e0678a30 48 return '' unless $self->needs_linking();
f6d6199c
MS
49
50 my $base = $self->SUPER::cflags($libperl);
f89d6eaa 51 foreach (split /\n/, $base) {
45bc4d3a 52 /^(\S*)\s*=\s*(\S*)$/ and $self->{$1} = $2;
f89d6eaa
EF
53 };
54 $self->{CCFLAGS} .= " -DUSEIMPORTLIB" if ($Config{useshrplib} eq 'true');
f89d6eaa
EF
55
56 return $self->{CFLAGS} = qq{
57CCFLAGS = $self->{CCFLAGS}
58OPTIMIZE = $self->{OPTIMIZE}
59PERLTYPE = $self->{PERLTYPE}
f89d6eaa
EF
60};
61
62}
63
f89d6eaa 64
7292dc67 65=item replace_manpage_separator
f89d6eaa 66
479d2113
MS
67replaces strings '::' with '.' in MAN*POD man page names
68
69=cut
70
71sub replace_manpage_separator {
72 my($self, $man) = @_;
73 $man =~ s{/+}{.}g;
74 return $man;
f89d6eaa
EF
75}
76
479d2113
MS
77=item init_linker
78
79points to libperl.a
80
81=cut
82
83sub init_linker {
84 my $self = shift;
85
f6d6199c
MS
86 if ($Config{useshrplib} eq 'true') {
87 my $libperl = '$(PERL_INC)' .'/'. "$Config{libperl}";
a7d1454b 88 if( $] >= 5.006002 ) {
a884ca7c
MS
89 $libperl =~ s/a$/dll.a/;
90 }
479d2113 91 $self->{PERL_ARCHIVE} = $libperl;
f6d6199c 92 } else {
479d2113
MS
93 $self->{PERL_ARCHIVE} =
94 '$(PERL_INC)' .'/'. ("$Config{libperl}" or "libperl.a");
f6d6199c 95 }
f89d6eaa 96
479d2113
MS
97 $self->{PERL_ARCHIVE_AFTER} ||= '';
98 $self->{EXPORT_LIST} ||= '';
99}
1cab015a 100
5bdf71cc
RGS
101=item maybe_command
102
103If our path begins with F</cygdrive/> then we use C<ExtUtils::MM_Win32>
104to determine if it may be a command. Otherwise we use the tests
105from C<ExtUtils::MM_Unix>.
106
107=cut
108
109sub maybe_command {
110 my ($self, $file) = @_;
111
112 if ($file =~ m{^/cygdrive/}i) {
113 return ExtUtils::MM_Win32->maybe_command($file);
114 }
115
116 return $self->SUPER::maybe_command($file);
117}
118
17283063
RU
119=item dynamic_lib
120
121Use the default to produce the *.dll's.
122But for new archdir dll's use the same rebase address if the old exists.
123
124=cut
125
126sub dynamic_lib {
127 my($self, %attribs) = @_;
128 my $s = ExtUtils::MM_Unix::dynamic_lib($self, %attribs);
129 my $ori = "$self->{INSTALLARCHLIB}/auto/$self->{FULLEXT}/$self->{BASEEXT}.$self->{DLEXT}";
130 if (-e $ori) {
131 my $imagebase = `/bin/objdump -p $ori | /bin/grep ImageBase | /bin/cut -c12-`;
132 chomp $imagebase;
133 if ($imagebase gt "40000000") {
134 my $LDDLFLAGS = $self->{LDDLFLAGS};
135 $LDDLFLAGS =~ s/-Wl,--enable-auto-image-base/-Wl,--image-base=0x$imagebase/;
136 $s =~ s/ \$\(LDDLFLAGS\) / $LDDLFLAGS /m;
137 }
138 }
139 $s;
140}
141
0b5e625b
RU
142=item all_target
143
144Build man pages, too
145
146=cut
147
148sub all_target {
149 ExtUtils::MM_Unix::all_target(shift);
150}
151
1cab015a
EF
152=back
153
154=cut
155
479d2113 1561;