1b39c5158Smillertpackage ExtUtils::MM_OS2; 2b39c5158Smillert 3b39c5158Smillertuse strict; 4eac174f2Safresh1use warnings; 5b39c5158Smillert 6b39c5158Smillertuse ExtUtils::MakeMaker qw(neatvalue); 7b39c5158Smillertuse File::Spec; 8b39c5158Smillert 9*e0680481Safresh1our $VERSION = '7.70'; 1056d68f1eSafresh1$VERSION =~ tr/_//d; 11b39c5158Smillert 12b39c5158Smillertrequire ExtUtils::MM_Any; 13b39c5158Smillertrequire ExtUtils::MM_Unix; 14b39c5158Smillertour @ISA = qw(ExtUtils::MM_Any ExtUtils::MM_Unix); 15b39c5158Smillert 16b39c5158Smillert=pod 17b39c5158Smillert 18b39c5158Smillert=head1 NAME 19b39c5158Smillert 20b39c5158SmillertExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker 21b39c5158Smillert 22b39c5158Smillert=head1 SYNOPSIS 23b39c5158Smillert 24b39c5158Smillert use ExtUtils::MM_OS2; # Done internally by ExtUtils::MakeMaker if needed 25b39c5158Smillert 26b39c5158Smillert=head1 DESCRIPTION 27b39c5158Smillert 2856d68f1eSafresh1See L<ExtUtils::MM_Unix> for a documentation of the methods provided 29b39c5158Smillertthere. This package overrides the implementation of these methods, not 30b39c5158Smillertthe semantics. 31b39c5158Smillert 32b39c5158Smillert=head1 METHODS 33b39c5158Smillert 34b39c5158Smillert=over 4 35b39c5158Smillert 36b39c5158Smillert=item init_dist 37b39c5158Smillert 38b39c5158SmillertDefine TO_UNIX to convert OS2 linefeeds to Unix style. 39b39c5158Smillert 40b39c5158Smillert=cut 41b39c5158Smillert 42b39c5158Smillertsub init_dist { 43b39c5158Smillert my($self) = @_; 44b39c5158Smillert 45b39c5158Smillert $self->{TO_UNIX} ||= <<'MAKE_TEXT'; 46b39c5158Smillert$(NOECHO) $(TEST_F) tmp.zip && $(RM_F) tmp.zip; $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o tmp.zip && $(RM_F) tmp.zip 47b39c5158SmillertMAKE_TEXT 48b39c5158Smillert 49b39c5158Smillert $self->SUPER::init_dist; 50b39c5158Smillert} 51b39c5158Smillert 52b39c5158Smillertsub dlsyms { 53b39c5158Smillert my($self,%attribs) = @_; 54b39c5158Smillert if ($self->{IMPORTS} && %{$self->{IMPORTS}}) { 55b39c5158Smillert # Make import files (needed for static build) 56b39c5158Smillert -d 'tmp_imp' or mkdir 'tmp_imp', 0777 or die "Can't mkdir tmp_imp"; 57b39c5158Smillert open my $imp, '>', 'tmpimp.imp' or die "Can't open tmpimp.imp"; 589f11ffb7Safresh1 foreach my $name (sort keys %{$self->{IMPORTS}}) { 599f11ffb7Safresh1 my $exp = $self->{IMPORTS}->{$name}; 60b39c5158Smillert my ($lib, $id) = ($exp =~ /(.*)\.(.*)/) or die "Malformed IMPORT `$exp'"; 61b39c5158Smillert print $imp "$name $lib $id ?\n"; 62b39c5158Smillert } 63b39c5158Smillert close $imp or die "Can't close tmpimp.imp"; 64b39c5158Smillert # print "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp\n"; 65b39c5158Smillert system "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp" 66b39c5158Smillert and die "Cannot make import library: $!, \$?=$?"; 67b39c5158Smillert # May be running under miniperl, so have no glob... 6891f110e0Safresh1 eval { unlink <tmp_imp/*>; 1 } or system "rm tmp_imp/*"; 69b39c5158Smillert system "cd tmp_imp; $Config::Config{ar} x ../tmpimp$Config::Config{lib_ext}" 70b39c5158Smillert and die "Cannot extract import objects: $!, \$?=$?"; 71b39c5158Smillert } 729f11ffb7Safresh1 return '' if $self->{SKIPHASH}{'dynamic'}; 739f11ffb7Safresh1 $self->xs_dlsyms_iterator(\%attribs); 74b39c5158Smillert} 75b39c5158Smillert 769f11ffb7Safresh1sub xs_dlsyms_ext { 779f11ffb7Safresh1 '.def'; 789f11ffb7Safresh1} 799f11ffb7Safresh1 809f11ffb7Safresh1sub xs_dlsyms_extra { 819f11ffb7Safresh1 join '', map { qq{, "$_" => "\$($_)"} } qw(VERSION DISTNAME INSTALLDIRS); 829f11ffb7Safresh1} 839f11ffb7Safresh1 849f11ffb7Safresh1sub static_lib_pure_cmd { 85b39c5158Smillert my($self) = @_; 869f11ffb7Safresh1 my $old = $self->SUPER::static_lib_pure_cmd; 87b39c5158Smillert return $old unless $self->{IMPORTS} && %{$self->{IMPORTS}}; 889f11ffb7Safresh1 $old . <<'EOC'; 899f11ffb7Safresh1 $(AR) $(AR_STATIC_ARGS) "$@" tmp_imp/* 909f11ffb7Safresh1 $(RANLIB) "$@" 91b39c5158SmillertEOC 92b39c5158Smillert} 93b39c5158Smillert 94b39c5158Smillertsub replace_manpage_separator { 95b39c5158Smillert my($self,$man) = @_; 96b39c5158Smillert $man =~ s,/+,.,g; 97b39c5158Smillert $man; 98b39c5158Smillert} 99b39c5158Smillert 100b39c5158Smillertsub maybe_command { 101b39c5158Smillert my($self,$file) = @_; 102b39c5158Smillert $file =~ s,[/\\]+,/,g; 103b39c5158Smillert return $file if -x $file && ! -d _; 104b39c5158Smillert return "$file.exe" if -x "$file.exe" && ! -d _; 105b39c5158Smillert return "$file.cmd" if -x "$file.cmd" && ! -d _; 106b39c5158Smillert return; 107b39c5158Smillert} 108b39c5158Smillert 109b39c5158Smillert=item init_linker 110b39c5158Smillert 111b39c5158Smillert=cut 112b39c5158Smillert 113b39c5158Smillertsub init_linker { 114b39c5158Smillert my $self = shift; 115b39c5158Smillert 116b39c5158Smillert $self->{PERL_ARCHIVE} = "\$(PERL_INC)/libperl\$(LIB_EXT)"; 117b39c5158Smillert 118b8851fccSafresh1 $self->{PERL_ARCHIVEDEP} ||= ''; 119b39c5158Smillert $self->{PERL_ARCHIVE_AFTER} = $OS2::is_aout 120b39c5158Smillert ? '' 121b39c5158Smillert : '$(PERL_INC)/libperl_override$(LIB_EXT)'; 122b39c5158Smillert $self->{EXPORT_LIST} = '$(BASEEXT).def'; 123b39c5158Smillert} 124b39c5158Smillert 125b39c5158Smillert=item os_flavor 126b39c5158Smillert 127b39c5158SmillertOS/2 is OS/2 128b39c5158Smillert 129b39c5158Smillert=cut 130b39c5158Smillert 131b39c5158Smillertsub os_flavor { 132b39c5158Smillert return('OS/2'); 133b39c5158Smillert} 134b39c5158Smillert 1359f11ffb7Safresh1=item xs_static_lib_is_xs 1369f11ffb7Safresh1 1379f11ffb7Safresh1=cut 1389f11ffb7Safresh1 1399f11ffb7Safresh1sub xs_static_lib_is_xs { 1409f11ffb7Safresh1 return 1; 1419f11ffb7Safresh1} 1429f11ffb7Safresh1 143b39c5158Smillert=back 144b39c5158Smillert 145b39c5158Smillert=cut 146b39c5158Smillert 147b39c5158Smillert1; 148