From f6a4e9e6b5dbfead91953b22b3a5c2f347f71c20 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 27 May 2012 11:58:37 +0200 Subject: [PATCH] perl: update to 5.16.0. --- srcpkgs/perl/files/provides.pl | 289 ++++++++++++++++++ ...d-LDFLAGS-to-their-Config.pm-counter.patch | 83 ----- srcpkgs/perl/template | 144 ++++++++- 3 files changed, 430 insertions(+), 86 deletions(-) create mode 100755 srcpkgs/perl/files/provides.pl delete mode 100644 srcpkgs/perl/patches/0001-Append-CFLAGS-and-LDFLAGS-to-their-Config.pm-counter.patch diff --git a/srcpkgs/perl/files/provides.pl b/srcpkgs/perl/files/provides.pl new file mode 100755 index 00000000000..1a4ae10f888 --- /dev/null +++ b/srcpkgs/perl/files/provides.pl @@ -0,0 +1,289 @@ +#!/usr/bin/env perl +## +# Script for printing out a provides list of every CPAN distribution +# that is bundled with perl. You can run it before building perl +# or you can run it after building perl. Required modules are in core +# for perl 5.13 and above. It might be nice if this didn't require +# HTTP::Tiny and maybe just used wget or curl. +# +# This script uses HTTP::Tiny to query Tatsuhiko Miyagawa's webapp at +# cpanmetadb.plackperl.org to cross-reference module files to their +# providing CPAN distribution. Thank you Miyagawa! +# +# - Justin "juster" Davis +# +# Based on the Archlinux version and modified for xbps. + +use warnings 'FATAL' => 'all'; +use strict; + +package Common; + +sub evalver +{ + my ($path, $mod) = @_; + + open my $fh, '<', $path or die "open $path: $!"; + + my $m = ($mod + ? qr/(?:\$${mod}::VERSION|\$VERSION)/ + : qr/\$VERSION/); + + while (my $ln = <$fh>) { + next unless $ln =~ /\s*$m\s*=\s*.+/; + chomp $ln; + my $ver = do { no strict; eval $ln }; + return $ver unless $@; + die qq{$path:$. bad version string in "$ln"\n}; + } + + close $fh; + return undef; +} + + +#----------------------------------------------------------------------------- + +package Dists; + +sub maindistfile +{ + my ($dist, $dir) = @_; + + # libpath is the modern style, installing modules under lib/ + # with dirs matching the name components. + my $libpath = join q{/}, 'lib', split /-/, "${dist}.pm"; + + # dumbpath is an old style where there's no subdirs and just + # a .pm file. + my $dumbpath = $dist; + $dumbpath =~ s/\A.+-//; + $dumbpath .= ".pm"; + + my @paths = ($libpath, $dumbpath); + # Some modules (with simple names like XSLoader, lib, etc) are + # generated by Makefile.PL. Search through their generating code. + push @paths, "${dist}_pm.PL" if $dist =~ tr/-/-/ == 0; + + for my $path (map { "$dir/$_" } @paths) { return $path if -f $path; } + return undef; +} + +sub module_ver +{ + my ($dist, $dir) = @_; + + my $path = maindistfile($dist, $dir) or return undef; + + my $mod = $dist; + $mod =~ s/-/::/g; + my $ver = Common::evalver($path, $mod); + unless ($ver) { + warn "failed to find version in module file for $dist\n"; + return undef; + } + + return $ver; +} + +sub changelog_ver +{ + my ($dist, $dir) = @_; + + my $path; + for my $tmp (glob "$dir/{Changes,ChangeLog}") { + if (-f $tmp) { $path = $tmp; last; } + } + return undef unless $path; + + open my $fh, '<', $path or die "open: $!"; + while (<$fh>) { + return $1 if /\A\s*(?:$dist[ \t]*)?([0-9._]+)/; + return $1 if /\A\s*version\s+([0-9._]+)/i; + } + close $fh; + + return undef; +} + +# for some reason podlators has a VERSION file with perl code in it +sub verfile_ver +{ + my ($dist, $dir) = @_; + + my $path = "$dir/VERSION"; + return undef unless -f $path; # no warning, only podlaters has it + + return Common::evalver($path); +} + +# scans a directory full of nicely separated dist. directories. +sub scan_distroot +{ + my ($distroot) = @_; + opendir my $cpand, "$distroot" or die "failed to open $distroot"; + my @dists = grep { !/^\./ && -d "$distroot/$_" } readdir $cpand; + closedir $cpand; + + my @found; + for my $dist (@dists) { + my $distdir = "$distroot/$dist"; + my $ver = (module_ver($dist, $distdir) + || changelog_ver($dist, $distdir) + || verfile_ver($dist, $distdir)); + + if ($ver) { push @found, [ $dist, $ver ]; } + else { warn "failed to find version for $dist\n"; } + } + return @found; +} + +sub find +{ + my ($srcdir) = @_; + return map { scan_distroot($_) } glob "$srcdir/{cpan,dist}"; +} + +#----------------------------------------------------------------------------- + +package Modules; + +use HTTP::Tiny qw(); +use File::Find qw(); +use File::stat; + +*findfile = *File::Find::find; + +sub cpan_provider +{ + my ($module) = @_; + my $url = "http://cpanmetadb.plackperl.org/v1.0/package/$module"; + my $http = HTTP::Tiny->new; + my $resp = $http->get($url); + return undef unless $resp->{'success'}; + + my ($cpanpath) = $resp->{'content'} =~ /^distfile: (.*)$/m + or return undef; + + my $dist = $cpanpath; + $dist =~ s{\A.+/}{}; # remove author directory + $dist =~ s{-[^-]+\z}{}; # remove version and extension + return ($dist eq 'perl' ? undef : $dist); +} + +sub find +{ + my ($srcdir) = @_; + my $libdir = "$srcdir/lib/"; + die "failed to find $libdir directory" unless -d $libdir; + + # Find only the module files that have not changed since perl + # was extracted. We don't want the files perl just recently + # installed into lib/. We processed those already. + my @modfiles; + my $finder = sub { + return unless /[.]pm\z/; + return if m{\Q$libdir\E[^/]+/t/}; # ignore testing modules + push @modfiles, $_; + }; + findfile({ 'no_chdir' => 1, 'wanted' => $finder }, $libdir); + + # First we have to find what the oldest ctime actually is. + my $oldest = time; + @modfiles = map { + my $modfile = $_; + my $ctime = (stat $modfile)->ctime; + $oldest = $ctime if $ctime < $oldest; + [ $modfile, $ctime ]; # save ctime for later + } @modfiles; + + # Then we filter out any file that was created more than a + # few seconds after that. Process the rest. + my @mods; + for my $modfile (@modfiles) { + my ($mod, $ctime) = @$modfile; + next if $ctime - $oldest > 5; # ignore newer files + + my $path = $mod; + $mod =~ s{[.]pm\z}{}; + $mod =~ s{\A$libdir}{}; + $mod =~ s{/}{::}g; + + my $ver = Common::evalver($path, $mod) || q{}; + push @mods, [ $mod, $ver ]; + } + + # Convert modules names to the dist names who provide them. + my %seen; + my @dists; + for my $modref (@mods) { + my ($mod, $ver) = @$modref; + my $dist = cpan_provider($mod) or next; # filter out core modules + next if $seen{$dist}++; # avoid duplicate dists + push @dists, [ $dist, $ver ]; + } + return @dists; +} + +#----------------------------------------------------------------------------- + +package Dist2Pkg; + +sub name +{ + my ($name) = @_; + my $orig = $name; + + # Delete leading or trailing hyphens... + $name =~ s/\A-|-\z//g; + + die qq{Dist. name '$orig' completely violates packaging standards} + unless $name; + + return "perl-$name"; +} + +sub version +{ + my ($version) = @_; + + # Package versions should be numbers and decimal points only... + $version =~ tr/-/./; + $version =~ tr/_0-9.-//cd; + + $version =~ tr/././s; # only one period at a time + $version =~ s/\A[.]|[.]\z//g; # shouldn't start or stop with a period + + return $version; +} + +#----------------------------------------------------------------------------- + +package main; + +my %CPANNAME = ('List-Util' => 'Scalar-List-Utils', + 'Text-Tabs' => 'Text-Tabs+Wrap', + 'Cwd' => 'PathTools'); + +my $perldir = shift or die "Usage: $0 [path to perl source directory]\n"; +die "$perldir is not a valid directory." unless -d $perldir; + +my @dists = (Dists::find($perldir), Modules::find($perldir)); +for my $dist (@dists) { + my $name = $dist->[0]; + $dist->[0] = $CPANNAME{$name} if exists $CPANNAME{$name}; +} + +my @pkgs = map { + my ($name, $ver) = @$_; + $name = Dist2Pkg::name($name); + $ver = Dist2Pkg::version($ver); + [ $name, $ver ]; +} @dists; + +@pkgs = sort { $a->[0] cmp $b->[0] } @pkgs; + +for my $pkg (@pkgs) { + my ($name, $ver) = @$pkg; + print "$name-$ver\n"; +} diff --git a/srcpkgs/perl/patches/0001-Append-CFLAGS-and-LDFLAGS-to-their-Config.pm-counter.patch b/srcpkgs/perl/patches/0001-Append-CFLAGS-and-LDFLAGS-to-their-Config.pm-counter.patch deleted file mode 100644 index 479a7e729a8..00000000000 --- a/srcpkgs/perl/patches/0001-Append-CFLAGS-and-LDFLAGS-to-their-Config.pm-counter.patch +++ /dev/null @@ -1,83 +0,0 @@ -From bb249b0b26c2e79a6f55355ef94889070f07fd21 Mon Sep 17 00:00:00 2001 -From: Niko Tyni -Date: Thu, 28 Apr 2011 09:18:54 +0300 -Subject: [PATCH] Append CFLAGS and LDFLAGS to their Config.pm counterparts in - EU::CBuilder - -Since ExtUtils::CBuilder 0.27_04 (bleadperl commit 06e8058f27e4), -CFLAGS and LDFLAGS from the environment have overridden the Config.pm -ccflags and ldflags settings. This can cause binary incompatibilities -between the core Perl and extensions built with EU::CBuilder. - -Append to the Config.pm values rather than overriding them. ---- - .../lib/ExtUtils/CBuilder/Base.pm | 6 +++- - dist/ExtUtils-CBuilder/t/04-base.t | 25 +++++++++++++++++++- - 2 files changed, 28 insertions(+), 3 deletions(-) - -diff --git a/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm b/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm -index b572312..2255c51 100644 ---- dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm -+++ dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm -@@ -40,11 +40,13 @@ sub new { - $self->{config}{$k} = $v unless exists $self->{config}{$k}; - } - $self->{config}{cc} = $ENV{CC} if defined $ENV{CC}; -- $self->{config}{ccflags} = $ENV{CFLAGS} if defined $ENV{CFLAGS}; -+ $self->{config}{ccflags} = join(" ", $self->{config}{ccflags}, $ENV{CFLAGS}) -+ if defined $ENV{CFLAGS}; - $self->{config}{cxx} = $ENV{CXX} if defined $ENV{CXX}; - $self->{config}{cxxflags} = $ENV{CXXFLAGS} if defined $ENV{CXXFLAGS}; - $self->{config}{ld} = $ENV{LD} if defined $ENV{LD}; -- $self->{config}{ldflags} = $ENV{LDFLAGS} if defined $ENV{LDFLAGS}; -+ $self->{config}{ldflags} = join(" ", $self->{config}{ldflags}, $ENV{LDFLAGS}) -+ if defined $ENV{LDFLAGS}; - - unless ( exists $self->{config}{cxx} ) { - my ($ccpath, $ccbase, $ccsfx ) = fileparse($self->{config}{cc}, qr/\.[^.]*/); -diff --git a/dist/ExtUtils-CBuilder/t/04-base.t b/dist/ExtUtils-CBuilder/t/04-base.t -index c3bf6b5..1bb15aa 100644 ---- dist/ExtUtils-CBuilder/t/04-base.t -+++ dist/ExtUtils-CBuilder/t/04-base.t -@@ -1,7 +1,7 @@ - #! perl -w - - use strict; --use Test::More tests => 50; -+use Test::More tests => 64; - use Config; - use Cwd; - use File::Path qw( mkpath ); -@@ -326,6 +326,29 @@ is_deeply( $mksymlists_args, - "_prepare_mksymlists_args(): got expected arguments for Mksymlists", - ); - -+my %testvars = ( -+ CFLAGS => 'ccflags', -+ LDFLAGS => 'ldflags', -+); -+ -+while (my ($VAR, $var) = each %testvars) { -+ local $ENV{$VAR}; -+ $base = ExtUtils::CBuilder::Base->new( quiet => 1 ); -+ ok( $base, "ExtUtils::CBuilder::Base->new() returned true value" ); -+ isa_ok( $base, 'ExtUtils::CBuilder::Base' ); -+ like($base->{config}{$var}, qr/\Q$Config{$var}/, -+ "honours $var from Config.pm"); -+ -+ $ENV{$VAR} = "-foo -bar"; -+ $base = ExtUtils::CBuilder::Base->new( quiet => 1 ); -+ ok( $base, "ExtUtils::CBuilder::Base->new() returned true value" ); -+ isa_ok( $base, 'ExtUtils::CBuilder::Base' ); -+ like($base->{config}{$var}, qr/\Q$ENV{$VAR}/, -+ "honours $VAR from the environment"); -+ like($base->{config}{$var}, qr/\Q$Config{$var}/, -+ "doesn't override $var from Config.pm with $VAR from the environment"); -+} -+ - ##### - - for ($source_file, $object_file, $lib_file) { --- -1.7.4.4 - diff --git a/srcpkgs/perl/template b/srcpkgs/perl/template index a90170e9b85..7a433443d87 100644 --- a/srcpkgs/perl/template +++ b/srcpkgs/perl/template @@ -1,14 +1,13 @@ # Template build file for 'perl'. pkgname=perl -version=5.14.2 +version=5.16.0 distfiles="http://www.cpan.org/src/5.0/$pkgname-$version.tar.bz2" -revision=4 makedepends="gdbm-devel db-devel less groff" short_desc="Practical Extraction and Report Language" maintainer="Juan RP " homepage="http://www.perl.org" license="GPL-2" -checksum=c2a2362e8d1fdd2bfbfde801fcd78241f154c164f00fba76065ab8cc5c7b06cd +checksum=8c1d25e92a5760e84f77baa57fde5606fd6e95ec992408d36fa53c47162721d1 long_desc=" Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including @@ -20,6 +19,145 @@ long_desc=" support for text processing, and has one of the world's most impressive collections of third-party modules." +# Before updating this package to a new major version, run ${FILESDIR}/provides.pl +# against ${wrksrc} to find the list of built in packages. +provides=" +perl-Archive-Extract-0.58 +perl-Archive-Tar-1.82 +perl-Attribute-Handlers-0.93 +perl-AutoLoader-5.72 +perl-B-Debug-1.17 +perl-B-Deparse-1.14 +perl-B-Lint-1.14 +perl-CGI-3.59 +perl-CPAN-1.9800 +perl-CPAN-Meta-2.120630 +perl-CPAN-Meta-YAML-0.007 +perl-CPANPLUS-0.9121 +perl-CPANPLUS-Dist-Build-0.62 +perl-Carp-1.26 +perl-Compress-Raw-Bzip2-2.048 +perl-Compress-Raw-Zlib-2.048 +perl-DB_File-1.826 +perl-Data-Dumper-2.135_06 +perl-Devel-PPPort-3.20 +perl-Devel-SelfStubber-1.05 +perl-Digest-1.17 +perl-Digest-MD5-2.51 +perl-Digest-SHA-5.71 +perl-Dumpvalue-1.17 +perl-Encode-2.44 +perl-Env-1.03 +perl-Exporter-5.66 +perl-ExtUtils-CBuilder-0.280206 +perl-ExtUtils-Command-1.17 +perl-ExtUtils-Constant-0.23 +perl-ExtUtils-Install-1.58 +perl-ExtUtils-MakeMaker-6.63_02 +perl-ExtUtils-Manifest-1.61 +perl-ExtUtils-ParseXS-3.16 +perl-File-CheckTree-4.41 +perl-File-Fetch-0.32 +perl-File-Path-2.08_01 +perl-File-Temp-0.22 +perl-Filter-Simple-0.88 +perl-Filter-Util-Call-1.40 +perl-Getopt-Long-2.38 +perl-HTTP-Tiny-0.017 +perl-I18N-Collate-1.02 +perl-I18N-LangTags-0.38 +perl-IO-1.25_06 +perl-IO-Compress-2.048 +perl-IO-Zlib-1.10 +perl-IPC-Cmd-0.76 +perl-IPC-SysV-2.03 +perl-JSON-PP-2.27200 +perl-Locale-Codes-3.21 +perl-Locale-Maketext-1.22 +perl-Locale-Maketext-Simple-0.21 +perl-Log-Message-0.04 +perl-Log-Message-Simple-0.08 +perl-MIME-Base64-3.13 +perl-Math-BigInt-1.998 +perl-Math-BigInt-FastCalc-0.30 +perl-Math-BigRat-0.2603 +perl-Math-Complex-1.59 +perl-Memoize-1.02 +perl-Module-Build-0.39_01 +perl-Module-CoreList-2.66 +perl-Module-Load-0.22 +perl-Module-Load-Conditional-0.46 +perl-Module-Loaded-0.08 +perl-Module-Metadata-1.000009 +perl-Module-Pluggable-4.0 +perl-NEXT-0.65 +perl-Net-Ping-2.38 +perl-Object-Accessor-0.42 +perl-Package-Constants-0.02 +perl-Params-Check-0.32 +perl-Parse-CPAN-Meta-1.4402 +perl-PathTools-3.39_02 +perl-Perl-OSType-1.002 +perl-PerlIO-via-QuotedPrint-0.06 +perl-Pod-Escapes-1.04 +perl-Pod-LaTeX-0.60 +perl-Pod-Parser-1.51 +perl-Pod-Perldoc-3.17 +perl-Pod-Simple-3.20 +perl-Safe-2.31_01 +perl-Scalar-List-Utils-1.23 +perl-Search-Dict-1.04 +perl-SelfLoader-1.20 +perl-Socket-2.001 +perl-Storable-2.34 +perl-Sys-Syslog-0.29 +perl-Term-ANSIColor-3.01 +perl-Term-Cap-1.13 +perl-Term-Complete-1.402 +perl-Term-ReadLine-1.09 +perl-Term-UI-0.30 +perl-Test-1.25_02 +perl-Test-Harness-3.23 +perl-Test-Simple-0.98 +perl-Text-Abbrev-1.02 +perl-Text-Balanced-2.02 +perl-Text-ParseWords-3.27 +perl-Text-Soundex-3.03_01 +perl-Text-Tabs+Wrap-2009.0305 +perl-Thread-Queue-2.12 +perl-Thread-Semaphore-2.12 +perl-Tie-File-0.98 +perl-Tie-RefHash-1.39 +perl-Time-HiRes-1.9725 +perl-Time-Local-1.2000 +perl-Time-Piece-1.20_01 +perl-Unicode-Collate-0.89 +perl-Unicode-Normalize-1.14 +perl-Version-Requirements-0.101022 +perl-Win32-0.44 +perl-Win32API-File-0.1200 +perl-XSLoader-0.16 +perl-autodie-2.10 +perl-autouse-1.07 +perl-base-2.18 +perl-bignum-0.29 +perl-constant-1.23 +perl-encoding-warnings-0.11 +perl-if-0.0602 +perl-lib-0.63 +perl-libnet-1.22 +perl-parent-0.225 +perl-perlfaq-5.0150039 +perl-podlators-2.4.0 +perl-threads-1.86 +perl-threads-shared-1.40 +perl-version-0.99 +" + +for _f in ${provides}; do + _p=$($XBPS_PKGDB_CMD getpkgname ${_f}) + replaces="${replaces} ${_p}>=0" +done do_build() { ./Configure \