package ExtUtils::MM_Win95; use vars qw($VERSION @ISA); $VERSION = 0.03_01; require ExtUtils::MM_Win32; @ISA = qw(ExtUtils::MM_Win32); use Config; my $DMAKE = $Config{'make'} =~ /^dmake/i; my $NMAKE = $Config{'make'} =~ /^nmake/i; =head1 NAME ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X =head1 SYNOPSIS You should not be using this module directly. =head1 DESCRIPTION This is a subclass of ExtUtils::MM_Win32 containing changes necessary to get MakeMaker playing nice with command.com and other Win9Xisms. =head2 Overriden methods Most of these make up for limitations in the Win9x command shell. Namely the lack of && and that a chdir is global, so you have to chdir back at the end. =over 4 =item dist_test && and chdir problem. =cut sub dist_test { my($self) = shift; return q{ disttest : distdir cd $(DISTVNAME) $(ABSPERLRUN) Makefile.PL $(MAKE) $(PASTHRU) $(MAKE) test $(PASTHRU) cd .. }; } =item subdir_x && and chdir problem. Also, dmake has an odd way of making a command series silent. =cut sub subdir_x { my($self, $subdir) = @_; # Win-9x has nasty problem in command.com that can't cope with # &&. Also, Dmake has an odd way of making a commandseries silent: if ($DMAKE) { return sprintf <<'EOT', $subdir; subdirs :: @[ cd %s $(MAKE) all $(PASTHRU) cd .. ] EOT } else { return sprintf <<'EOT', $subdir; subdirs :: $(NOECHO)cd %s $(NOECHO)$(MAKE) all $(PASTHRU) $(NOECHO)cd .. EOT } } =item xs_c The && problem. =cut sub xs_c { my($self) = shift; return '' unless $self->needs_linking(); ' .xs.c: $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c ' } =item xs_cpp The && problem =cut sub xs_cpp { my($self) = shift; return '' unless $self->needs_linking(); ' .xs.cpp: $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp '; } =item xs_o The && problem. =cut sub xs_o { my($self) = shift; return '' unless $self->needs_linking(); # Having to choose between .xs -> .c -> .o and .xs -> .o confuses dmake. return '' if $DMAKE; ' .xs$(OBJ_EXT): $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c '; } =item clean_subdirs_target && and chdir problem. =cut sub clean_subdirs_target { my($self) = shift; # No subdirectories, no cleaning. return <<'NOOP_FRAG' unless @{$self->{DIR}}; clean_subdirs : $(NOECHO)$(NOOP) NOOP_FRAG my $clean = "clean_subdirs :\n"; for my $dir (@{$self->{DIR}}) { $clean .= sprintf <<'MAKE_FRAG', $dir; cd %s $(TEST_F) $(FIRST_MAKEFILE) $(MAKE) clean cd .. MAKE_FRAG } return $clean; } =item realclean_subdirs_target && and chdir problem. =cut sub realclean_subdirs_target { my $self = shift; return <<'NOOP_FRAG' unless @{$self->{DIR}}; realclean_subdirs : $(NOECHO)$(NOOP) NOOP_FRAG my $rclean = "realclean_subdirs :\n"; foreach my $dir (@{$self->{DIR}}){ $rclean .= sprintf <<'RCLEAN', $dir; -cd %s -$(PERLRUN) -e "exit unless -f shift; system q{$(MAKE) realclean}" $(FIRST_MAKEFILE) -cd .. RCLEAN } return $rclean; } =item os_flavor Win95 and Win98 and WinME are collectively Win9x and Win32 =cut sub os_flavor { my $self = shift; return ($self->SUPER::os_flavor, 'Win9x'); } =back =head1 AUTHOR Code originally inside MM_Win32. Original author unknown. Currently maintained by Michael G Schwern . Send patches and ideas to >. See http://www.makemaker.org. =cut 1;