This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
U/WIN: final (for now) touches from John P. Linderman;
[perl5.git] / lib / ExtUtils / MM_Win95.pm
1 package ExtUtils::MM_Win95;
2
3 use vars qw($VERSION @ISA);
4 $VERSION = 0.03;
5
6 require ExtUtils::MM_Win32;
7 @ISA = qw(ExtUtils::MM_Win32);
8
9 use Config;\r
10 my $DMAKE = 1 if $Config{'make'} =~ /^dmake/i;
11 my $NMAKE = 1 if $Config{'make'} =~ /^nmake/i;
12
13
14 =head1 NAME
15
16 ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X
17
18 =head1 SYNOPSIS
19
20   You should not be using this module directly.
21
22 =head1 DESCRIPTION
23
24 This is a subclass of ExtUtils::MM_Win32 containing changes necessary
25 to get MakeMaker playing nice with command.com and other Win9Xisms.
26
27 =head2 Overriden methods
28
29 Most of these make up for limitations in the Win9x command shell.
30 Namely the lack of && and that a chdir is global, so you have to chdir
31 back at the end.
32
33 =over 4
34
35 =item dist_test
36
37 && and chdir problem.
38
39 =cut
40
41 sub dist_test {
42     my($self) = shift;
43     return q{
44 disttest : distdir
45         cd $(DISTVNAME)
46         $(ABSPERLRUN) Makefile.PL
47         $(MAKE) $(PASTHRU)
48         $(MAKE) test $(PASTHRU)
49         cd ..
50 };
51 }
52
53 =item subdir_x
54
55 && and chdir problem.
56
57 Also, dmake has an odd way of making a command series silent.
58
59 =cut
60
61 sub subdir_x {
62     my($self, $subdir) = @_;
63
64     # Win-9x has nasty problem in command.com that can't cope with
65     # &&.  Also, Dmake has an odd way of making a commandseries silent:
66     if ($DMAKE) {
67       return sprintf <<'EOT', $subdir;
68
69 subdirs ::
70 @[
71         cd %s
72         $(MAKE) all $(PASTHRU)
73         cd ..
74 ]
75 EOT
76     }
77     else {
78         return sprintf <<'EOT', $subdir;
79
80 subdirs ::
81         $(NOECHO)cd %s
82         $(NOECHO)$(MAKE) all $(PASTHRU)
83         $(NOECHO)cd ..
84 EOT
85     }
86 }
87
88 =item xs_c
89
90 The && problem.
91
92 =cut
93
94 sub xs_c {
95     my($self) = shift;
96     return '' unless $self->needs_linking();
97     '
98 .xs.c:
99         $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
100         '
101 }
102
103
104 =item xs_cpp
105
106 The && problem
107
108 =cut
109
110 sub xs_cpp {
111     my($self) = shift;
112     return '' unless $self->needs_linking();
113     '
114 .xs.cpp:
115         $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp
116         ';
117 }
118
119 =item xs_o 
120
121 The && problem.
122
123 =cut
124
125 sub xs_o {
126     my($self) = shift;
127     return '' unless $self->needs_linking();
128     '
129 .xs$(OBJ_EXT):
130         $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
131         $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
132         ';
133 }
134
135 =item clean_subdirs_target
136
137 && and chdir problem.
138
139 =cut
140
141 sub clean_subdirs_target {
142     my($self) = shift;
143
144     # No subdirectories, no cleaning.
145     return <<'NOOP_FRAG' unless @{$self->{DIR}};
146 clean_subdirs :
147         $(NOECHO)$(NOOP)
148 NOOP_FRAG
149
150
151     my $clean = "clean_subdirs :\n";
152
153     for my $dir (@{$self->{DIR}}) {
154         $clean .= sprintf <<'MAKE_FRAG', $dir;
155         cd %s
156         $(TEST_F) $(FIRST_MAKEFILE)
157         $(MAKE) clean
158         cd ..
159 MAKE_FRAG
160     }
161
162     return $clean;
163 }
164
165
166 =item realclean_subdirs_target
167
168 && and chdir problem.
169
170 =cut
171
172 sub realclean_subdirs_target {
173     my $self = shift;
174
175     return <<'NOOP_FRAG' unless @{$self->{DIR}};
176 realclean_subdirs :
177         $(NOECHO)$(NOOP)
178 NOOP_FRAG
179
180     my $rclean = "realclean_subdirs :\n";
181
182     foreach my $dir (@{$self->{DIR}}){
183         $rclean .= sprintf <<'RCLEAN', $dir;
184         -cd %s
185         -$(PERLRUN) -e "exit unless -f shift; system q{$(MAKE) realclean}" $(FIRST_MAKEFILE)
186         -cd ..
187 RCLEAN
188
189     }
190
191     return $rclean;
192 }
193
194
195 =item max_exec_len
196
197 Setting to 2500, a value obtained by experimentation.
198
199 =cut
200
201 sub max_exec_len {
202     my $self = shift;
203
204     return $self->{_MAX_EXEC_LEN} ||= 2500;
205 }
206
207
208 =item os_flavor
209
210 Win95 and Win98 and WinME are collectively Win9x and Win32
211
212 =cut
213
214 sub os_flavor {
215     my $self = shift;
216     return ($self->SUPER::os_flavor, 'Win9x');
217 }
218
219
220 =back
221
222
223 =head1 AUTHOR
224
225 Code originally inside MM_Win32.  Original author unknown.  
226
227 Currently maintained by Michael G Schwern <schwern@pobox.com>.
228
229 Send patches and ideas to <F<makemaker@perl.org>>.
230
231 See http://www.makemaker.org.
232
233 =cut
234
235
236 1;