X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FEncode%2FMakefile.PL;h=7a78d117c28e82fd8c2f48bf985845b80f3c5b9a;hb=4ac71550d23cca4632a2bcdfcb1d83a6bf705e45;hp=fd742ccc5a90c1f0c34df52873eaa07df6b24058;hpb=2f2b4ff2c154a8e461857f2e82cb815c238d0d94;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/Encode/Makefile.PL b/ext/Encode/Makefile.PL index fd742cc..7a78d11 100644 --- a/ext/Encode/Makefile.PL +++ b/ext/Encode/Makefile.PL @@ -1,32 +1,135 @@ +# +# $Id: Makefile.PL,v 2.7 2008/07/01 20:56:17 dankogai Exp dankogai $ +# +use 5.007003; +use strict; +use warnings; use ExtUtils::MakeMaker; -WriteMakefile( - NAME => "Encode", - VERSION_FROM => 'Encode.pm', - OBJECT => '$(O_FILES)', - 'dist' => { - COMPRESS => 'gzip -9f', - SUFFIX => 'gz', - DIST_DEFAULT => 'all tardist', - }, - MAN3PODS => {}, -); +use File::Spec; -package MY; +# Just for sure :) +my %ARGV = map { my @r = split /=/,$_; defined $r[1] or $r[1]=1; @r } @ARGV; +$ARGV{DEBUG} and warn "$_ => $ARGV{$_}\n" for keys %ARGV; +$ENV{PERL_CORE} ||= $ARGV{PERL_CORE} if $ARGV{PERL_CORE}; -sub postamble -{ - return ' +my %tables = + ( + def_t => ['ascii.ucm', + '8859-1.ucm', + 'null.ucm', + 'ctrl.ucm', + ] + ); -Encode$(OBJ_EXT) : iso8859$(OBJ_EXT) EBCDIC$(OBJ_EXT) Symbols$(OBJ_EXT) +my @exe_files = qw(bin/enc2xs + bin/piconv + ); +my @more_exe_files = qw( + unidump + ); +my @pmlibdirs = qw(lib Encode); -iso8859.c : compile Makefile - $(PERL) compile $@ Encode/ascii.enc Encode/iso8859*.enc Encode/cp1250.enc +$ARGV{MORE_SCRIPTS} and push @exe_files, @more_exe_files; +$ARGV{INSTALL_UCM} and push @pmlibdirs, "ucm"; +my @man = (); +@man = ( MAN1PODS => {}, MAN3PODS => {} ) if $ENV{PERL_CORE}; -EBCDIC.c : compile Makefile Encode/cp1047.enc Encode/cp37.enc Encode/posix-bc.enc - $(PERL) compile $@ Encode/cp1047.enc Encode/cp37.enc Encode/posix-bc.enc +WriteMakefile( + NAME => "Encode", + EXE_FILES => \@exe_files, + VERSION_FROM => 'Encode.pm', + OBJECT => '$(O_FILES)', + 'dist' => { + COMPRESS => 'gzip -9f', + SUFFIX => 'gz', + DIST_DEFAULT => 'all tardist', + }, + @man, + INC => '-I' . File::Spec->catfile( '.', 'Encode' ), + PMLIBDIRS => \@pmlibdirs, + INSTALLDIRS => 'perl', +); -Symbols.c : compile Makefile Encode/symbol.enc Encode/dingbats.enc - $(PERL) compile $@ Encode/symbol.enc Encode/dingbats.enc +package MY; -' + +sub post_initialize +{ + my ($self) = @_; + my %o; + # Find existing O_FILES + foreach my $f (@{$self->{'O_FILES'}}) + { + $o{$f} = 1; + } + my $x = $self->{'OBJ_EXT'}; + # Add the table O_FILES + foreach my $e (keys %tables) + { + $o{$e.$x} = 1; + } + # Trick case-blind filesystems. + delete $o{'encode'.$x}; + $o{'Encode'.$x} = 1; + # Reset the variable + $self->{'O_FILES'} = [sort keys %o]; + my @files; + foreach my $table (keys %tables) + { + foreach my $ext (qw($(OBJ_EXT) .c .h .exh .fnm)) + { + push (@files,$table.$ext); + } + $self->{SOURCE} .= " $table.c" + if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$table\.c\b/; +} +$self->{'clean'}{'FILES'} .= join(' ',@files); +return ''; +} + +sub postamble +{ + my $self = shift; + my $dir = $self->catdir($self->curdir,'ucm'); + my $str = "# Encode\$(OBJ_EXT) does not depend on .c files directly\n"; + $str .= "# (except Encode.c), but on .h and .exh files written by enc2xs\n"; + $str .= $^O eq 'MacOS' ? 'Encode.c.{$(MACPERL_BUILD_EXT_STATIC)}.o :' : 'Encode$(OBJ_EXT) :'; + $str .= ' Encode.c'; + foreach my $table (keys %tables) + { + $str .= " $table.c"; + } + $str .= "\n\n"; + foreach my $table (keys %tables) + { + my $numlines = 1; + my $lengthsofar = length($str); + my $continuator = ''; + my $enc2xs = $self->catfile('bin', 'enc2xs'); + $str .= "$table.c : $enc2xs Makefile.PL"; + foreach my $file (@{$tables{$table}}) + { + $str .= $continuator.' '.$self->catfile($dir,$file); + if ( length($str)-$lengthsofar > 128*$numlines ) + { + $continuator .= " \\\n\t"; + $numlines++; + } else { + $continuator = ''; + } + } + my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : ''; + $plib .= " -MCross=$::Cross::platform" if defined $::Cross::platform; + my $ucopts = '-"Q" -"O"'; + $str .= + qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n}; + open (FILELIST, ">$table.fnm") + || die "Could not open $table.fnm: $!"; + foreach my $file (@{$tables{$table}}) + { + print FILELIST $self->catfile($dir,$file) . "\n"; + } + close(FILELIST); + } + return $str; }