~ubuntu-branches/ubuntu/raring/libencode-perl/raring-proposed

« back to all changes in this revision

Viewing changes to Byte/Makefile.PL

  • Committer: Bazaar Package Importer
  • Author(s): Jose Luis Rivas
  • Date: 2007-05-18 23:49:27 UTC
  • Revision ID: james.westby@ubuntu.com-20070518234927-bs37c807cty7i1ny
Tags: upstream-2.21
ImportĀ upstreamĀ versionĀ 2.21

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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', now in Encode::GSM0338
 
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