source: trunk/essentials/dev-lang/perl/ext/Encode/Byte/Makefile.PL@ 3397

Last change on this file since 3397 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 4.5 KB
Line 
1use 5.7.2;
2use strict;
3use ExtUtils::MakeMaker;
4use File::Spec::Functions;
5
6my $name = 'Byte';
7my %tables = (
8 byte_t =>
9 [
10 # misc. vendors
11 'gsm0338.ucm',
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 ],
37 );
38
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
47opendir(ENC,catdir(updir(),'ucm')) or die $!;
48while (defined(my $file = readdir(ENC)))
49{
50 $file =~ /^(8859|cp).*\.ucm$/io or next;
51 $not_here{$file} and next;
52 push(@{$tables{byte_t}},$file);
53}
54closedir(ENC);
55
56WriteMakefile(
57 INC => "-I../Encode",
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 );
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 {
81 $o{$e.$x} = 1;
82 }
83 $o{"$name$x"} = 1;
84 $self->{'O_FILES'} = [sort keys %o];
85 my @files = ("$name.xs");
86 $self->{'C'} = ["$name.c"];
87 $self->{SOURCE} .= " $name.c"
88 if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$name\.c\b/;
89 $self->{'H'} = [$self->catfile($self->updir,'Encode', 'encode.h')];
90 my %xs;
91 foreach my $table (keys %tables) {
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/;
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>
108#define U8 U8
109#include "encode.h"
110END
111 foreach my $table (keys %tables) {
112 print XS qq[#include "${table}.h"\n];
113 }
114 print XS <<"END";
115
116static void
117Encode_XSEncoding(pTHX_ encode_t *enc)
118{
119 dSP;
120 HV *stash = gv_stashpv("Encode::XS", TRUE);
121 SV *sv = sv_bless(newRV_noinc(newSViv(PTR2IV(enc))),stash);
122 int i = 0;
123 PUSHMARK(sp);
124 XPUSHs(sv);
125 while (enc->name[i])
126 {
127 const char *name = enc->name[i++];
128 XPUSHs(sv_2mortal(newSVpvn(name,strlen(name))));
129 }
130 PUTBACK;
131 call_pv("Encode::define_encoding",G_DISCARD);
132 SvREFCNT_dec(sv);
133}
134
135MODULE = Encode::$name PACKAGE = Encode::$name
136PROTOTYPES: DISABLE
137BOOT:
138{
139END
140 foreach my $table (keys %tables) {
141 print XS qq[#include "${table}.exh"\n];
142 }
143 print XS "}\n";
144 close(XS);
145 return "# Built $name.xs\n\n";
146}
147
148sub postamble
149{
150 my $self = shift;
151 my $dir = $self->catdir($self->updir,'ucm');
152 my $str = "# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n";
153 $str .= "$name.c : $name.xs ";
154 foreach my $table (keys %tables)
155 {
156 $str .= " $table.c";
157 }
158 $str .= "\n\n";
159 $str .= "$name\$(OBJ_EXT) : $name.c\n\n";
160
161 my $enc2xs = $self->catfile($self->updir,'bin', 'enc2xs');
162 foreach my $table (keys %tables)
163 {
164 my $numlines = 1;
165 my $lengthsofar = length($str);
166 my $continuator = '';
167 $str .= "$table.c : $enc2xs Makefile.PL";
168 foreach my $file (@{$tables{$table}})
169 {
170 $str .= $continuator.' '.$self->catfile($dir,$file);
171 if ( length($str)-$lengthsofar > 128*$numlines )
172 {
173 $continuator .= " \\\n\t";
174 $numlines++;
175 } else {
176 $continuator = '';
177 }
178 }
179 my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : '';
180 $plib .= " -MCross=$::Cross::platform" if defined $::Cross::platform;
181 my $ucopts = '-"Q" -"O"';
182 $str .=
183 qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n};
184 open (FILELIST, ">$table.fnm")
185 || die "Could not open $table.fnm: $!";
186 foreach my $file (@{$tables{$table}})
187 {
188 print FILELIST $self->catfile($dir,$file) . "\n";
189 }
190 close(FILELIST);
191 }
192 return $str;
193}
194
Note: See TracBrowser for help on using the repository browser.