This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Encode-2.60
[perl5.git] / cpan / Encode / Byte / Makefile.PL
CommitLineData
5129552c
JH
1use 5.7.2;
2use strict;
3use ExtUtils::MakeMaker;
f0a41339 4use File::Spec::Functions;
5129552c
JH
5
6my $name = 'Byte';
7my %tables = (
d1256cb1
RGS
8 byte_t =>
9 [
10 # misc. vendors
2fd0906e 11 # 'gsm0338.ucm', now in Encode::GSM0338
d1256cb1
RGS
12 'nextstep.ucm',
13 'hp-roman8.ucm',
14 'viscii.ucm',
15 'adobeStdenc.ucm',
16 # koi8
17 'koi8-f.ucm', 'koi8-r.ucm', 'koi8-u.ucm',
18 # Mac
19 qw(
20 macArabic.ucm
21 macCentEuro.ucm
22 macCroatian.ucm
23 macCyrillic.ucm
24 macFarsi.ucm
25 macGreek.ucm
26 macHebrew.ucm
27 macIceland.ucm
28 macRoman.ucm
29 macROMnn.ucm
30 macRUMnn.ucm
31 macSami.ucm
32 macThai.ucm
33 macTurkish.ucm
34 macUkraine.ucm
35 ),
36 ],
5129552c
JH
37 );
38
a999c27c
JH
39my %not_here =
40 map {$_ => 1}
41(
42 '8859-1.ucm', # default
43 qw(cp037.ucm cp1026.ucm cp1047.ucm cp500.ucm cp875.ucm), # EBCDIC
44 qw(cp932.ucm cp936.ucm cp949.ucm cp950.ucm), # CJK
45 );
46
f0a41339 47opendir(ENC,catdir(updir(),'ucm')) or die $!;
5129552c
JH
48while (defined(my $file = readdir(ENC)))
49{
a999c27c
JH
50 $file =~ /^(8859|cp).*\.ucm$/io or next;
51 $not_here{$file} and next;
52 push(@{$tables{byte_t}},$file);
5129552c
JH
53}
54closedir(ENC);
55
56WriteMakefile(
67d7b5ef 57 INC => "-I../Encode",
d1256cb1
RGS
58 NAME => 'Encode::'.$name,
59 VERSION_FROM => "$name.pm",
60 OBJECT => '$(O_FILES)',
61 'dist' => {
62 COMPRESS => 'gzip -9f',
63 SUFFIX => 'gz',
64 DIST_DEFAULT => 'all tardist',
65 },
66 MAN3PODS => {},
67 # OS 390 winges about line numbers > 64K ???
68 XSOPT => '-nolinenumbers',
69 );
5129552c
JH
70
71package MY;
72
73sub post_initialize
74{
75 my ($self) = @_;
76 my %o;
77 my $x = $self->{'OBJ_EXT'};
78 # Add the table O_FILES
79 foreach my $e (keys %tables)
80 {
d1256cb1 81 $o{$e.$x} = 1;
5129552c
JH
82 }
83 $o{"$name$x"} = 1;
84 $self->{'O_FILES'} = [sort keys %o];
85 my @files = ("$name.xs");
86 $self->{'C'} = ["$name.c"];
f0a41339
DK
87 $self->{SOURCE} .= " $name.c"
88 if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$name\.c\b/;
67d7b5ef 89 $self->{'H'} = [$self->catfile($self->updir,'Encode', 'encode.h')];
5129552c
JH
90 my %xs;
91 foreach my $table (keys %tables) {
d1256cb1
RGS
92 push (@{$self->{'C'}},"$table.c");
93 # Do NOT add $table.h etc. to H_FILES unless we own up as to how they
94 # get built.
95 foreach my $ext (qw($(OBJ_EXT) .c .h .exh .fnm)) {
96 push (@files,$table.$ext);
97 }
98 $self->{SOURCE} .= " $table.c"
99 if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$table\.c\b/;
5129552c
JH
100 }
101 $self->{'XS'} = { "$name.xs" => "$name.c" };
102 $self->{'clean'}{'FILES'} .= join(' ',@files);
103 open(XS,">$name.xs") || die "Cannot open $name.xs:$!";
104 print XS <<'END';
105#include <EXTERN.h>
106#include <perl.h>
107#include <XSUB.h>
67d7b5ef 108#include "encode.h"
5129552c 109END
0a225b3c 110 foreach my $table (sort keys %tables) {
d1256cb1 111 print XS qq[#include "${table}.h"\n];
5129552c
JH
112 }
113 print XS <<"END";
114
115static void
116Encode_XSEncoding(pTHX_ encode_t *enc)
117{
118 dSP;
119 HV *stash = gv_stashpv("Encode::XS", TRUE);
dc396cc2
SH
120 SV *iv = newSViv(PTR2IV(enc));
121 SV *sv = sv_bless(newRV_noinc(iv),stash);
5129552c 122 int i = 0;
dc396cc2
SH
123 SvFLAGS(iv) |= SVp_POK;
124 SvPVX(iv) = enc->name[0];
5129552c
JH
125 PUSHMARK(sp);
126 XPUSHs(sv);
127 while (enc->name[i])
128 {
129 const char *name = enc->name[i++];
130 XPUSHs(sv_2mortal(newSVpvn(name,strlen(name))));
131 }
132 PUTBACK;
133 call_pv("Encode::define_encoding",G_DISCARD);
134 SvREFCNT_dec(sv);
135}
136
137MODULE = Encode::$name PACKAGE = Encode::$name
138PROTOTYPES: DISABLE
139BOOT:
140{
141END
0a225b3c 142 foreach my $table (sort keys %tables) {
d1256cb1 143 print XS qq[#include "${table}.exh"\n];
5129552c
JH
144 }
145 print XS "}\n";
146 close(XS);
147 return "# Built $name.xs\n\n";
148}
149
150sub postamble
151{
152 my $self = shift;
3ef515df 153 my $dir = $self->catdir($self->updir,'ucm');
e7cbefb8 154 my $str = "# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n";
5129552c
JH
155 $str .= "$name.c : $name.xs ";
156 foreach my $table (keys %tables)
157 {
d1256cb1 158 $str .= " $table.c";
5129552c
JH
159 }
160 $str .= "\n\n";
161 $str .= "$name\$(OBJ_EXT) : $name.c\n\n";
162
67d7b5ef 163 my $enc2xs = $self->catfile($self->updir,'bin', 'enc2xs');
5129552c
JH
164 foreach my $table (keys %tables)
165 {
d1256cb1
RGS
166 my $numlines = 1;
167 my $lengthsofar = length($str);
168 my $continuator = '';
169 $str .= "$table.c : $enc2xs Makefile.PL";
170 foreach my $file (@{$tables{$table}})
171 {
172 $str .= $continuator.' '.$self->catfile($dir,$file);
173 if ( length($str)-$lengthsofar > 128*$numlines )
174 {
175 $continuator .= " \\\n\t";
176 $numlines++;
177 } else {
178 $continuator = '';
179 }
180 }
181 my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : '';
182 $plib .= " -MCross=$::Cross::platform" if defined $::Cross::platform;
183 my $ucopts = '-"Q" -"O"';
184 $str .=
185 qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n};
186 open (FILELIST, ">$table.fnm")
187 || die "Could not open $table.fnm: $!";
188 foreach my $file (@{$tables{$table}})
189 {
190 print FILELIST $self->catfile($dir,$file) . "\n";
191 }
192 close(FILELIST);
5129552c
JH
193 }
194 return $str;
195}
196