home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / MM_Win95.pm < prev    next >
Text File  |  2005-01-27  |  4KB  |  226 lines

  1. package ExtUtils::MM_Win95;
  2.  
  3. use vars qw($VERSION @ISA);
  4. $VERSION = 0.03_01;
  5.  
  6. require ExtUtils::MM_Win32;
  7. @ISA = qw(ExtUtils::MM_Win32);
  8.  
  9. use Config;
  10. my $DMAKE = $Config{'make'} =~ /^dmake/i;
  11. my $NMAKE = $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.     # 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.  
  143. sub clean_subdirs_target {
  144.     my($self) = shift;
  145.  
  146.     # No subdirectories, no cleaning.
  147.     return <<'NOOP_FRAG' unless @{$self->{DIR}};
  148. clean_subdirs :
  149.     $(NOECHO)$(NOOP)
  150. NOOP_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 ..
  161. MAKE_FRAG
  162.     }
  163.  
  164.     return $clean;
  165. }
  166.  
  167.  
  168. =item realclean_subdirs_target
  169.  
  170. && and chdir problem.
  171.  
  172. =cut
  173.  
  174. sub realclean_subdirs_target {
  175.     my $self = shift;
  176.  
  177.     return <<'NOOP_FRAG' unless @{$self->{DIR}};
  178. realclean_subdirs :
  179.     $(NOECHO)$(NOOP)
  180. NOOP_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 ..
  189. RCLEAN
  190.  
  191.     }
  192.  
  193.     return $rclean;
  194. }
  195.  
  196.  
  197. =item os_flavor
  198.  
  199. Win95 and Win98 and WinME are collectively Win9x and Win32
  200.  
  201. =cut
  202.  
  203. sub os_flavor {
  204.     my $self = shift;
  205.     return ($self->SUPER::os_flavor, 'Win9x');
  206. }
  207.  
  208.  
  209. =back
  210.  
  211.  
  212. =head1 AUTHOR
  213.  
  214. Code originally inside MM_Win32.  Original author unknown.  
  215.  
  216. Currently maintained by Michael G Schwern <schwern@pobox.com>.
  217.  
  218. Send patches and ideas to <F<makemaker@perl.org>>.
  219.  
  220. See http://www.makemaker.org.
  221.  
  222. =cut
  223.  
  224.  
  225. 1;
  226.