require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-$VERSION = '1.06';
+$VERSION = '1.10';
$ENV{EMXSHELL} = 'sh'; # to run `commands`
sub init_DIRFILESEP {
my($self) = shift;
- # gotta be careful this isn't interpreted as an escape.
- $self->{DIRFILESEP} = '^\\';
+ # The ^ makes sure its not interpreted as an escape in nmake
+ $self->{DIRFILESEP} = $NMAKE ? '^\\' :
+ $DMAKE ? '\\\\'
+ : '\\';
}
=item B<init_others>
my ($self) = @_;
# Used in favor of echo because echo won't strip quotes. :(
- $self->{ECHO} ||= '$(PERLRUN) -le "print qq{@ARGV}"';
+ $self->{ECHO} ||= $self->oneliner('print qq{@ARGV}', ['-l']);
+ $self->{ECHO_N} ||= $self->oneliner('print qq{@ARGV}');
+
$self->{TOUCH} ||= '$(PERLRUN) -MExtUtils::Command -e touch';
$self->{CHMOD} ||= '$(PERLRUN) -MExtUtils::Command -e chmod';
$self->{CP} ||= '$(PERLRUN) -MExtUtils::Command -e cp';
$self->{TEST_F} ||= '$(PERLRUN) -MExtUtils::Command -e test_f';
$self->{DEV_NULL} ||= '> NUL';
- # technically speaking, these should be in init_main()
$self->{LD} ||= $Config{ld} || 'link';
$self->{AR} ||= $Config{ar} || 'lib';
$self->SUPER::init_others;
+ # Setting SHELL from $Config{sh} can break dmake. Its ok without it.
+ delete $self->{SHELL};
+
$self->{LDLOADLIBS} ||= $Config{libs};
# -Lfoo must come first for Borland, so we put it in LDDLFLAGS
if ($BORLAND) {
my(@m);
push(@m, <<'END');
-$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists
+$(INST_STATIC): $(OBJECT) $(MYEXTLIB) blibdirs
$(RM_RF) $@
END
$(NOECHO) $(ECHO) "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs
MAKE_FRAG
- push @m, "\n", $self->dir_target('$(INST_ARCHAUTODIR)');
join('', @m);
}
OTHERLDFLAGS = '.$otherldflags.'
INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DIRFILESEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
+$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) blibdirs $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
');
if ($GCC) {
push(@m,
$(CHMOD) $(PERM_RWX) $@
';
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
join('',@m);
}
# Win98's command.com
$text =~ s{"}{\\"}g;
+ # dmake eats '{' inside double quotes and leaves alone { outside double
+ # quotes; however it transforms {{ into { either inside and outside double
+ # quotes. It also translates }} into }. The escaping below is not
+ # 100% correct.
+ if( $DMAKE ) {
+ $text =~ s/{/{{/g;
+ $text =~ s/}}/}}}/g;
+ }
+
return qq{"$text"};
}
=item max_exec_len
-Using 31K, a safe number gotten from Windows 2000.
+nmake 1.50 limits command length to 2048 characters.
=cut
sub max_exec_len {
my $self = shift;
- return $self->{_MAX_EXEC_LEN} ||= 31 * 1024;
+ return $self->{_MAX_EXEC_LEN} ||= 2 * 1024;
+}
+
+
+=item os_flavor
+
+Windows is Win32.
+
+=cut
+
+sub os_flavor {
+ return('Win32');
}