1package ExtUtils::MM_Win95; 2 3use vars qw($VERSION @ISA); 4$VERSION = 0.03_01; 5 6require ExtUtils::MM_Win32; 7@ISA = qw(ExtUtils::MM_Win32); 8 9use Config; 10my $DMAKE = $Config{'make'} =~ /^dmake/i; 11my $NMAKE = $Config{'make'} =~ /^nmake/i; 12 13 14=head1 NAME 15 16ExtUtils::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 24This is a subclass of ExtUtils::MM_Win32 containing changes necessary 25to get MakeMaker playing nice with command.com and other Win9Xisms. 26 27=head2 Overriden methods 28 29Most of these make up for limitations in the Win9x command shell. 30Namely the lack of && and that a chdir is global, so you have to chdir 31back at the end. 32 33=over 4 34 35=item dist_test 36 37&& and chdir problem. 38 39=cut 40 41sub dist_test { 42 my($self) = shift; 43 return q{ 44disttest : 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 57Also, dmake has an odd way of making a command series silent. 58 59=cut 60 61sub 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 69subdirs :: 70@[ 71 cd %s 72 $(MAKE) all $(PASTHRU) 73 cd .. 74] 75EOT 76 } 77 else { 78 return sprintf <<'EOT', $subdir; 79 80subdirs :: 81 $(NOECHO)cd %s 82 $(NOECHO)$(MAKE) all $(PASTHRU) 83 $(NOECHO)cd .. 84EOT 85 } 86} 87 88=item xs_c 89 90The && problem. 91 92=cut 93 94sub 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 106The && problem 107 108=cut 109 110sub 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 121The && problem. 122 123=cut 124 125sub xs_o { 126 my($self) = shift; 127 return '' unless $self->needs_linking(); 128 # Having to choose between .xs -> .c -> .o and .xs -> .o confuses dmake. 129 return '' if $DMAKE; 130 ' 131.xs$(OBJ_EXT): 132 $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c 133 $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c 134 '; 135} 136 137=item clean_subdirs_target 138 139&& and chdir problem. 140 141=cut 142 143sub clean_subdirs_target { 144 my($self) = shift; 145 146 # No subdirectories, no cleaning. 147 return <<'NOOP_FRAG' unless @{$self->{DIR}}; 148clean_subdirs : 149 $(NOECHO)$(NOOP) 150NOOP_FRAG 151 152 153 my $clean = "clean_subdirs :\n"; 154 155 for my $dir (@{$self->{DIR}}) { 156 $clean .= sprintf <<'MAKE_FRAG', $dir; 157 cd %s 158 $(TEST_F) $(FIRST_MAKEFILE) 159 $(MAKE) clean 160 cd .. 161MAKE_FRAG 162 } 163 164 return $clean; 165} 166 167 168=item realclean_subdirs_target 169 170&& and chdir problem. 171 172=cut 173 174sub realclean_subdirs_target { 175 my $self = shift; 176 177 return <<'NOOP_FRAG' unless @{$self->{DIR}}; 178realclean_subdirs : 179 $(NOECHO)$(NOOP) 180NOOP_FRAG 181 182 my $rclean = "realclean_subdirs :\n"; 183 184 foreach my $dir (@{$self->{DIR}}){ 185 $rclean .= sprintf <<'RCLEAN', $dir; 186 -cd %s 187 -$(PERLRUN) -e "exit unless -f shift; system q{$(MAKE) realclean}" $(FIRST_MAKEFILE) 188 -cd .. 189RCLEAN 190 191 } 192 193 return $rclean; 194} 195 196 197=item os_flavor 198 199Win95 and Win98 and WinME are collectively Win9x and Win32 200 201=cut 202 203sub os_flavor { 204 my $self = shift; 205 return ($self->SUPER::os_flavor, 'Win9x'); 206} 207 208 209=back 210 211 212=head1 AUTHOR 213 214Code originally inside MM_Win32. Original author unknown. 215 216Currently maintained by Michael G Schwern <schwern@pobox.com>. 217 218Send patches and ideas to <F<makemaker@perl.org>>. 219 220See http://www.makemaker.org. 221 222=cut 223 224 2251; 226