ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/ext/Encode/Byte/Makefile.PL
Revision: 1.1
Committed: Thu Jun 30 14:26:47 2005 UTC (21 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# Content
1 use 5.7.2;
2 use strict;
3 use ExtUtils::MakeMaker;
4 use File::Spec::Functions;
5
6 my $name = 'Byte';
7 my %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
39 my %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
47 opendir(ENC,catdir(updir(),'ucm')) or die $!;
48 while (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 }
54 closedir(ENC);
55
56 WriteMakefile(
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
71 package MY;
72
73 sub 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"
110 END
111 foreach my $table (keys %tables) {
112 print XS qq[#include "${table}.h"\n];
113 }
114 print XS <<"END";
115
116 static void
117 Encode_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
135 MODULE = Encode::$name PACKAGE = Encode::$name
136 PROTOTYPES: DISABLE
137 BOOT:
138 {
139 END
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
148 sub 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