ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/ExtUtils/MM_OS2.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:11 2005 UTC (21 years, 4 months ago) by root
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 package ExtUtils::MM_OS2;
2    
3     use strict;
4     use vars qw($VERSION @ISA);
5    
6     use ExtUtils::MakeMaker qw(neatvalue);
7     use File::Spec;
8    
9     $VERSION = '1.04';
10    
11     require ExtUtils::MM_Any;
12     require ExtUtils::MM_Unix;
13     @ISA = qw(ExtUtils::MM_Any ExtUtils::MM_Unix);
14    
15     =pod
16    
17     =head1 NAME
18    
19     ExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker
20    
21     =head1 SYNOPSIS
22    
23     use ExtUtils::MM_OS2; # Done internally by ExtUtils::MakeMaker if needed
24    
25     =head1 DESCRIPTION
26    
27     See ExtUtils::MM_Unix for a documentation of the methods provided
28     there. This package overrides the implementation of these methods, not
29     the semantics.
30    
31     =head1 METHODS
32    
33     =over 4
34    
35     =item init_dist (o)
36    
37     Define TO_UNIX to convert OS2 linefeeds to Unix style.
38    
39     =cut
40    
41     sub init_dist {
42     my($self) = @_;
43    
44     $self->{TO_UNIX} ||= <<'MAKE_TEXT';
45     $(NOECHO) $(TEST_F) tmp.zip && $(RM_F) tmp.zip; $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o tmp.zip && $(RM_F) tmp.zip
46     MAKE_TEXT
47    
48     $self->SUPER::init_dist;
49     }
50    
51     sub dlsyms {
52     my($self,%attribs) = @_;
53    
54     my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
55     my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
56     my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
57     my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
58     my(@m);
59     (my $boot = $self->{NAME}) =~ s/:/_/g;
60    
61     if (not $self->{SKIPHASH}{'dynamic'}) {
62     push(@m,"
63     $self->{BASEEXT}.def: Makefile.PL
64     ",
65     ' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
66     Mksymlists("NAME" => "$(NAME)", "DLBASE" => "$(DLBASE)", ',
67     '"VERSION" => "$(VERSION)", "DISTNAME" => "$(DISTNAME)", ',
68     '"INSTALLDIRS" => "$(INSTALLDIRS)", ',
69     '"DL_FUNCS" => ',neatvalue($funcs),
70     ', "FUNCLIST" => ',neatvalue($funclist),
71     ', "IMPORTS" => ',neatvalue($imports),
72     ', "DL_VARS" => ', neatvalue($vars), ');\'
73     ');
74     }
75     if ($self->{IMPORTS} && %{$self->{IMPORTS}}) {
76     # Make import files (needed for static build)
77     -d 'tmp_imp' or mkdir 'tmp_imp', 0777 or die "Can't mkdir tmp_imp";
78     open IMP, '>tmpimp.imp' or die "Can't open tmpimp.imp";
79     my ($name, $exp);
80     while (($name, $exp)= each %{$self->{IMPORTS}}) {
81     my ($lib, $id) = ($exp =~ /(.*)\.(.*)/) or die "Malformed IMPORT `$exp'";
82     print IMP "$name $lib $id ?\n";
83     }
84     close IMP or die "Can't close tmpimp.imp";
85     # print "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp\n";
86     system "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp"
87     and die "Cannot make import library: $!, \$?=$?";
88     unlink <tmp_imp/*>;
89     system "cd tmp_imp; $Config::Config{ar} x ../tmpimp$Config::Config{lib_ext}"
90     and die "Cannot extract import objects: $!, \$?=$?";
91     }
92     join('',@m);
93     }
94    
95     sub static_lib {
96     my($self) = @_;
97     my $old = $self->ExtUtils::MM_Unix::static_lib();
98     return $old unless $self->{IMPORTS} && %{$self->{IMPORTS}};
99    
100     my @chunks = split /\n{2,}/, $old;
101     shift @chunks unless length $chunks[0]; # Empty lines at the start
102     $chunks[0] .= <<'EOC';
103    
104     $(AR) $(AR_STATIC_ARGS) $@ tmp_imp/* && $(RANLIB) $@
105     EOC
106     return join "\n\n". '', @chunks;
107     }
108    
109     sub replace_manpage_separator {
110     my($self,$man) = @_;
111     $man =~ s,/+,.,g;
112     $man;
113     }
114    
115     sub maybe_command {
116     my($self,$file) = @_;
117     $file =~ s,[/\\]+,/,g;
118     return $file if -x $file && ! -d _;
119     return "$file.exe" if -x "$file.exe" && ! -d _;
120     return "$file.cmd" if -x "$file.cmd" && ! -d _;
121     return;
122     }
123    
124     =item init_linker
125    
126     =cut
127    
128     sub init_linker {
129     my $self = shift;
130    
131     $self->{PERL_ARCHIVE} = "\$(PERL_INC)/libperl\$(LIB_EXT)";
132    
133     $self->{PERL_ARCHIVE_AFTER} = $OS2::is_aout
134     ? ''
135     : '$(PERL_INC)/libperl_override$(LIB_EXT)';
136     $self->{EXPORT_LIST} = '$(BASEEXT).def';
137     }
138    
139     =item os_flavor
140    
141     OS/2 is OS/2
142    
143     =cut
144    
145     sub os_flavor {
146     return('OS/2');
147     }
148    
149     =back
150    
151     =cut
152    
153     1;