xref: /openbsd-src/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm (revision e068048151d29f2562a32185e21a8ba885482260)
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