[csw-devel] SF.net SVN: gar:[17255] csw/mgar/pkg/cpan/makemake
dmichelsen at users.sourceforge.net
dmichelsen at users.sourceforge.net
Thu Mar 1 14:46:48 CET 2012
Revision: 17255
http://gar.svn.sourceforge.net/gar/?rev=17255&view=rev
Author: dmichelsen
Date: 2012-03-01 13:46:48 +0000 (Thu, 01 Mar 2012)
Log Message:
-----------
makemake: General rewort
Modified Paths:
--------------
csw/mgar/pkg/cpan/makemake
Modified: csw/mgar/pkg/cpan/makemake
===================================================================
--- csw/mgar/pkg/cpan/makemake 2012-03-01 13:40:51 UTC (rev 17254)
+++ csw/mgar/pkg/cpan/makemake 2012-03-01 13:46:48 UTC (rev 17255)
@@ -1,5 +1,11 @@
#!/opt/csw/bin/perl
+# This is a tool to make Makefiles for CPAN modules
+# Usage:
+# makemake My::Module
+# It generate My-Module/trunk/Makefile and modified it accordingly. If the Makefile is already there it
+# it overwritten and can be inspected with "svn diff".
+
use strict;
use warnings;
use feature ':5.10';
@@ -16,21 +22,11 @@
use Parallel::ForkManager;
use JSON;
-# TBD:
-# [10:14] El_Che: no fix for require, but it gives you filenames of the source
-# [10:16] Dagobert: Ahhhh.... sorry, I missed that
-# [10:16] Dagobert: How does it work? Does it access a static copy of the CPAN database?
-# [10:17] El_Che: I guess it looks locally looking at the deployed modules
-# [10:17] El_Che: looks looking
-# [10:17] El_Che: goodmorning
-# [10:18] El_Che: there is also a path option
-
# These three routines are used to capture the output of sub processes and
# perl routines (such as CPAN::Module::get) into a log file. If the command
# completes successfuly, the log file is thrown away. If the command fails,
# the log file is printed along with an error message by calling fail.
-
### Variables ###
my ( $verbose, $logfile, $pgm );
my $cpandir = getcwd;
@@ -115,11 +111,12 @@
@runtime_dep_pkgs = dep_pkgs($req);
}
-$description //= $mod->description; # Changed to defined from false or
+$description //= $mod->description; # Changed to defined from false or
$description //= $mod->manpage_headline;
$description //= $mod->distribution->as_glimpse;
$description //= "";
$description = ucfirst($description);
+$description =~ s/\.$//; # Strip trailing .
chomp($description);
# Come back from cpan module build directory to GAR cpan/
@@ -153,13 +150,6 @@
}
say {$mf_fh} "" if ($upstreaminfo);
-if (@build_dep_pkgs) {
- foreach my $p (@build_dep_pkgs) {
- say {$mf_fh} "BUILD_DEP_PKGS += $p";
- }
- say {$mf_fh} "";
-}
-
say {$mf_fh} "CATALOG_RELEASE = unstable";
say {$mf_fh} "";
@@ -170,6 +160,13 @@
}
}
+if (@build_dep_pkgs) {
+ foreach my $p (@build_dep_pkgs) {
+ say {$mf_fh} "BUILD_DEP_PKGS += $p";
+ }
+ say {$mf_fh} "";
+}
+
say {$mf_fh} "PACKAGES += $cswpkg";
say {$mf_fh} "CATALOGNAME_$cswpkg = $cswcatalog";
say {$mf_fh} "SPKG_DESC_$cswpkg = $description";
@@ -191,33 +188,19 @@
if ( @oldpkgs > 1 ) {
say STDERR "ERROR: More than one package for module '$modname' found: @oldpkgs";
}
-my $oldpkg = shift @oldpkgs;
-if ( $oldpkg ne $cswpkg ) {
+foreach my $oldpkg (@oldpkgs) {
+ if( $cswpkg eq $oldpkg ) {
+ say STDERR "A previous version of this package $cswpkg has been released";
+ next;
+ }
+ say STDERR "A previous version of this package $cswpkg was released, but was named $oldpkg then";
+
say {$mf_fh} "OBSOLETED_BY_$cswpkg += $oldpkg";
- my $ua = LWP::UserAgent->new;
- $ua->timeout(300);
- $ua->proxy( [ 'http', 'ftp' ], 'http://proxy:3128' );
-
- my $catalog = "unstable";
- my $arch = "sparc";
- my $rel = "SunOS5.10";
-
- my $url = "http://buildfarm.opencsw.org/pkgdb/rest/catalogs/$catalog/$arch/$rel/pkgnames/$oldpkg/";
-
- my $response = $ua->get($url);
-
- if ( $response->is_success ) {
- my $json_string = $response->decoded_content; # or whatever
- if ( $json_string eq "null" ) {
- say "Couldn't find package $oldpkg in $catalog:$arch:$rel";
- } else {
- my $data = decode_json $json_string;
- my $cname = $data->{catalogname};
- say {$mf_fh} "CATALOGNAME_$oldpkg = ${cname}_stub";
- }
- } else {
- print "Error getting $url\n" . $response->status_line;
+ my $data = getpkgdata( $oldpkg );
+ if( $data ) {
+ my $cname = $data->{catalogname};
+ say {$mf_fh} "CATALOGNAME_$oldpkg = ${cname}_stub";
}
}
@@ -236,7 +219,7 @@
sub dep_pkgs {
my $req = shift @_;
- my @result;
+ my %result;
foreach my $modname ( keys %$req ) {
my $version = version->parse( $req->{$modname} );
if ( $modname eq "perl" ) {
@@ -245,19 +228,34 @@
}
next;
}
- if ( $version > version->parse( get_version($modname) ) ) {
- print STDERR "Version of $modname is too old. Required is $version, installed is ",
- ( get_version($modname) or "nothing" ), "\n";
+
+ if( get_version( $modname ) ) {
+ if ( $version > version->parse( get_version($modname) ) ) {
+ say STDERR "Version of $modname is too old. Required is $version, installed is ",
+ get_version($modname);
+ # XXX: Is there something newer in the catalog?
+ # XXX: If not, recommend updating the recipe with makemake
+ }
+ } else {
+ # The module is not installed
+ # XXX: Compare against package version in the catalog
}
my @pkgs = mod2pkg($modname);
if ( @pkgs > 1 ) {
print STDERR "ERROR: More than one package for module '$modname' found: @pkgs\n";
}
- my $pkg = shift @pkgs;
+ my $pkg = $pkgs[0];
if ($pkg) {
- print STDERR "Packages for module '$modname': $pkg\n";
+ say STDERR "Packages for module '$modname': ", join( ", ", @pkgs );
next if ( $pkg eq 'CSWperl' );
+
+ my ( $guessedpkg, $dirname ) = guess_name_from_module($modname);
+
+ if( $pkg ne $guessedpkg ) {
+ print STDERR "ERROR: Found package name '$pkg' is not consistent to the " .
+ "canonical '$guessedpkg', please invoke makemake $modname\n";
+ }
} else {
print STDERR "MISSING package for '$modname'\n";
@@ -272,10 +270,10 @@
}
}
}
- push @result, $pkg if ($pkg);
+ $result{$pkg} = 1 if ($pkg);
}
- return @result;
+ return keys %result;
}
sub endlog {
@@ -377,9 +375,10 @@
$pm->wait_all_children;
- print "Matched packages: ", join( ", ", keys %pkgs ), "\n";
+ # print "Matched packages: ", join( ", ", keys %pkgs ), "\n";
- return keys %pkgs;
+ # Perl may provide the functionality itself, although there is a more up-to-date module
+ return ( exists $pkgs{CSWperl} ? "CSWperl" : keys %pkgs );
}
@@ -399,3 +398,35 @@
return %pkgs;
}
+
+sub getpkgdata {
+ my ($pkg) = @_;
+
+ my $ua = LWP::UserAgent->new;
+ $ua->timeout(300);
+ $ua->proxy( [ 'http', 'ftp' ], 'http://proxy:3128' );
+
+ my $catalog = "unstable";
+ my $arch = "sparc";
+ my $rel = "SunOS5.10";
+
+ my $url = "http://buildfarm.opencsw.org/pkgdb/rest/catalogs/$catalog/$arch/$rel/pkgnames/$pkg/";
+
+ my $response = $ua->get($url);
+
+ # version is "version": "1.6.4,REV=2011.11.24"
+
+ my $data;
+ if ( $response->is_success ) {
+ my $json_string = $response->decoded_content; # or whatever
+ if ( $json_string eq "null" ) {
+ say STDERR "Couldn't find package $pkg in $catalog:$arch:$rel";
+ } else {
+ $data = decode_json $json_string;
+ }
+ } else {
+ print STDERR "Error getting $url\n" . $response->status_line;
+ }
+
+ return $data;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the devel
mailing list