diff options
author | Nicolas Reynolds <fauno@kiwwwi.com.ar> | 2011-10-07 17:33:04 -0300 |
---|---|---|
committer | Nicolas Reynolds <fauno@kiwwwi.com.ar> | 2011-10-07 17:33:04 -0300 |
commit | 2302f1d28510fadb2dcfa119f28ed28f164845bf (patch) | |
tree | e7040e1c743f46bc60a7844275516e4404f6ac30 /core/perl | |
parent | 2a9d1292ab60e8a2356fb3eeb36b8c3cfc22759b (diff) | |
parent | 5442e9b8f357932ed5d6cb46e90fcbf6f453469f (diff) |
Merge branch 'master' of ssh://vparabola/home/parabola/abslibre-pre-mips64el
Conflicts:
community/fotoxx/PKGBUILD
community/gtkdialog/PKGBUILD
community/hubbub/PKGBUILD
community/libgdamm/PKGBUILD
community/libparserutils/PKGBUILD
community/mingw32-binutils/PKGBUILD
community/mingw32-gcc-base/PKGBUILD
community/mingw32-gcc/PKGBUILD
community/mtpaint/PKGBUILD
community/netsurf/PKGBUILD
community/patchage/PKGBUILD
community/qgo/PKGBUILD
community/tomoyo-tools/PKGBUILD
community/tre/PKGBUILD
community/virtualbox/PKGBUILD
core/net-tools/PKGBUILD
core/openldap/PKGBUILD
extra/epiphany/PKGBUILD
extra/evince/PKGBUILD
extra/evolution-data-server/PKGBUILD
extra/evolution/PKGBUILD
extra/exiv2/PKGBUILD
extra/folks/PKGBUILD
extra/gimp-ufraw/PKGBUILD
extra/gnome-control-center/PKGBUILD
extra/gnome-power-manager/PKGBUILD
extra/gnome-python-desktop/PKGBUILD
extra/gnome-python-extras/PKGBUILD
extra/gvfs/PKGBUILD
extra/jack/PKGBUILD
extra/kdelibs/PKGBUILD
extra/kdepim/PKGBUILD
extra/koffice/PKGBUILD
extra/libreoffice/PKGBUILD
extra/libwebkit/PKGBUILD
extra/mutter/PKGBUILD
extra/nautilus/PKGBUILD
extra/openmpi/PKGBUILD
extra/pavucontrol/PKGBUILD
extra/php/PKGBUILD
extra/pidgin/PKGBUILD
extra/postgresql/PKGBUILD
extra/pulseaudio/PKGBUILD
extra/pygobject2/PKGBUILD
extra/swt/PKGBUILD
extra/tomcat/PKGBUILD
extra/totem/PKGBUILD
extra/vigra/PKGBUILD
extra/vte/PKGBUILD
extra/xulrunner/PKGBUILD
kde-unstable/calligra/PKGBUILD
kde-unstable/kdebase-workspace/PKGBUILD
multilib/lib32-atk/PKGBUILD
multilib/lib32-gdk-pixbuf2/PKGBUILD
multilib/lib32-glew/PKGBUILD
multilib/lib32-glib2/PKGBUILD
multilib/lib32-jack/PKGBUILD
multilib/lib32-libpulse/PKGBUILD
multilib/lib32-pango/PKGBUILD
multilib/wine/PKGBUILD
social/miniupnpc/PKGBUILD
testing/icedtea-web-java7/PKGBUILD
testing/sqlite3/PKGBUILD
~xihh/abiword/PKGBUILD
Diffstat (limited to 'core/perl')
-rw-r--r-- | core/perl/PKGBUILD | 14 | ||||
-rw-r--r-- | core/perl/perl.install | 8 | ||||
-rw-r--r-- | core/perl/provides.pl | 286 |
3 files changed, 296 insertions, 12 deletions
diff --git a/core/perl/PKGBUILD b/core/perl/PKGBUILD index 16db02b6f..720f72aae 100644 --- a/core/perl/PKGBUILD +++ b/core/perl/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 129898 2011-06-29 17:25:10Z foutrelis $ +# $Id: PKGBUILD 139103 2011-09-29 12:44:13Z angvp $ # Maintainer: Angel Velasquez <angvp@archlinux.org> # Contributor: kevin <kevin.archlinux.org> # Contributor: judd <jvinet.zeroflux.org> # Contributor: francois <francois.archlinux.org> pkgname=perl -pkgver=5.14.1 -pkgrel=3 +pkgver=5.14.2 +pkgrel=2 pkgdesc="A highly capable, feature-rich programming language" arch=(i686 x86_64 'mips64el') license=('GPL' 'PerlArtistic') @@ -16,12 +16,14 @@ changelog=ChangeLog source=(http://www.cpan.org/src/5.0/perl-${pkgver}.tar.bz2 perlbin.sh perlbin.csh +provides.pl 0001-Append-CFLAGS-and-LDFLAGS-to-their-Config.pm-counter.patch) install=perl.install options=('!makeflags' '!purge') -md5sums=('97cd306a2c22929cc141a09568f43bb0' +md5sums=('04a4c5d3c1f9f19d77daff8e8cd19a26' '5ed2542fdb9a60682f215bd33701e61a' '1f0cbbee783e8a6d32f01be5118e0d5e' + '31fc0b5bb4935414394c5cfbec2cb8e5' 'c25d86206d649046538c3daab7874564') build() { @@ -52,6 +54,10 @@ build() { make } package() { + # hack to work around makepkg running the subshell in check_sanity() + new_provides=($(cd "$srcdir/perl-$pkgver"; LD_PRELOAD=./libperl.so ./perl -Ilib "$srcdir/provides.pl" .)) + provides=(${new_provides[@]}) + cd ${srcdir}/${pkgname}-${pkgver} make install diff --git a/core/perl/perl.install b/core/perl/perl.install index 3f7d58f23..a355c5bbe 100644 --- a/core/perl/perl.install +++ b/core/perl/perl.install @@ -8,11 +8,3 @@ post_install() { return 0 } -post_upgrade() { - echo '- The directories /usr/lib/perl5/current, /usr/lib/perl5/site_perl/current,' - echo ' /usr/lib/perl5/site_perl/5.10.1, and /usr/share/perl5/site_perl/5.10.1' - echo ' have been removed from @INC.' - - echo '- The script/binary directories are now /usr/bin/*_perl instead of' - echo ' /usr/lib/perl5/*_perl/bin which will be eventually removed.' -} diff --git a/core/perl/provides.pl b/core/perl/provides.pl new file mode 100644 index 000000000..3bf369577 --- /dev/null +++ b/core/perl/provides.pl @@ -0,0 +1,286 @@ +# provides.pl +## +# Script for printing out a provides list of every CPAN distribution +# that is bundled with perl. +# +# Justin Davis <jrcd83@gmail.com> + +use warnings 'FATAL' => 'all'; +use strict; + +package Common; + +sub evalver +{ + my ($path, $mod) = @_; + $mod ||= ""; + + open my $fh, '<', $path or die "open $path: $!"; + + while (<$fh>) { + next unless /\s*(?:\$${mod}::|\$)VERSION\s*=\s*(.+)/; + my $ver = eval $1; + return $ver unless $@; + warn qq{$path:$. bad version string "$ver"\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.appspot.com/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/; + 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) || 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; + + # Package names should be lowercase and consist of alphanumeric + # characters only (and hyphens!)... + $name =~ tr/A-Z/a-z/; + $name =~ tr/_+/-/; # _ and +'s converted to - (ie Tabbed-Text+Wrap) + $name =~ tr/-a-z0-9+//cd; # Delete all other chars. + $name =~ tr/-/-/s; + + # 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; + + # Remove developer versions because pacman has no special logic + # to compare them to regular versions like perl does. + $version =~ s/_[^_]+\z//; + + $version =~ tr/_//d; # delete other underscores + $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"; +} |