Spaces:
Running
Running
| package ExtUtils::MM_OS2; | |
| use strict; | |
| use warnings; | |
| use ExtUtils::MakeMaker qw(neatvalue); | |
| use File::Spec; | |
| our $VERSION = '7.62'; | |
| $VERSION =~ tr/_//d; | |
| require ExtUtils::MM_Any; | |
| require ExtUtils::MM_Unix; | |
| our @ISA = qw(ExtUtils::MM_Any ExtUtils::MM_Unix); | |
| =pod | |
| =head1 NAME | |
| ExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker | |
| =head1 SYNOPSIS | |
| use ExtUtils::MM_OS2; # Done internally by ExtUtils::MakeMaker if needed | |
| =head1 DESCRIPTION | |
| See L<ExtUtils::MM_Unix> for a documentation of the methods provided | |
| there. This package overrides the implementation of these methods, not | |
| the semantics. | |
| =head1 METHODS | |
| =over 4 | |
| =item init_dist | |
| Define TO_UNIX to convert OS2 linefeeds to Unix style. | |
| =cut | |
| sub init_dist { | |
| my($self) = @_; | |
| $self->{TO_UNIX} ||= <<'MAKE_TEXT'; | |
| $(NOECHO) $(TEST_F) tmp.zip && $(RM_F) tmp.zip; $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o tmp.zip && $(RM_F) tmp.zip | |
| MAKE_TEXT | |
| $self->SUPER::init_dist; | |
| } | |
| sub dlsyms { | |
| my($self,%attribs) = @_; | |
| if ($self->{IMPORTS} && %{$self->{IMPORTS}}) { | |
| # Make import files (needed for static build) | |
| -d 'tmp_imp' or mkdir 'tmp_imp', 0777 or die "Can't mkdir tmp_imp"; | |
| open my $imp, '>', 'tmpimp.imp' or die "Can't open tmpimp.imp"; | |
| foreach my $name (sort keys %{$self->{IMPORTS}}) { | |
| my $exp = $self->{IMPORTS}->{$name}; | |
| my ($lib, $id) = ($exp =~ /(.*)\.(.*)/) or die "Malformed IMPORT `$exp'"; | |
| print $imp "$name $lib $id ?\n"; | |
| } | |
| close $imp or die "Can't close tmpimp.imp"; | |
| # print "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp\n"; | |
| system "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp" | |
| and die "Cannot make import library: $!, \$?=$?"; | |
| # May be running under miniperl, so have no glob... | |
| eval { unlink <tmp_imp/*>; 1 } or system "rm tmp_imp/*"; | |
| system "cd tmp_imp; $Config::Config{ar} x ../tmpimp$Config::Config{lib_ext}" | |
| and die "Cannot extract import objects: $!, \$?=$?"; | |
| } | |
| return '' if $self->{SKIPHASH}{'dynamic'}; | |
| $self->xs_dlsyms_iterator(\%attribs); | |
| } | |
| sub xs_dlsyms_ext { | |
| '.def'; | |
| } | |
| sub xs_dlsyms_extra { | |
| join '', map { qq{, "$_" => "\$($_)"} } qw(VERSION DISTNAME INSTALLDIRS); | |
| } | |
| sub static_lib_pure_cmd { | |
| my($self) = @_; | |
| my $old = $self->SUPER::static_lib_pure_cmd; | |
| return $old unless $self->{IMPORTS} && %{$self->{IMPORTS}}; | |
| $old . <<'EOC'; | |
| $(AR) $(AR_STATIC_ARGS) "$@" tmp_imp/* | |
| $(RANLIB) "$@" | |
| EOC | |
| } | |
| sub replace_manpage_separator { | |
| my($self,$man) = @_; | |
| $man =~ s,/+,.,g; | |
| $man; | |
| } | |
| sub maybe_command { | |
| my($self,$file) = @_; | |
| $file =~ s,[/\\]+,/,g; | |
| return $file if -x $file && ! -d _; | |
| return "$file.exe" if -x "$file.exe" && ! -d _; | |
| return "$file.cmd" if -x "$file.cmd" && ! -d _; | |
| return; | |
| } | |
| =item init_linker | |
| =cut | |
| sub init_linker { | |
| my $self = shift; | |
| $self->{PERL_ARCHIVE} = "\$(PERL_INC)/libperl\$(LIB_EXT)"; | |
| $self->{PERL_ARCHIVEDEP} ||= ''; | |
| $self->{PERL_ARCHIVE_AFTER} = $OS2::is_aout | |
| ? '' | |
| : '$(PERL_INC)/libperl_override$(LIB_EXT)'; | |
| $self->{EXPORT_LIST} = '$(BASEEXT).def'; | |
| } | |
| =item os_flavor | |
| OS/2 is OS/2 | |
| =cut | |
| sub os_flavor { | |
| return('OS/2'); | |
| } | |
| =item xs_static_lib_is_xs | |
| =cut | |
| sub xs_static_lib_is_xs { | |
| return 1; | |
| } | |
| =back | |
| =cut | |
| 1; | |