6 require Packaging
::Tools
;
8 require File
::Basename
;
17 make
=> '/usr/pkg/bin/bmake',
18 pkg_info_cmd
=> '/usr/pkg/sbin/pkg_info',
19 pkgsrcdir
=> '/data/pkgsrc',
22 #my $pkgdist = '@pkgdist@';
23 my $pkgdist = 'pkgsrc';
26 my $pkgtool = Packaging
::Tools
->new( $pkgdist, \
%tools );
28 my @templates = $pkgtool->find_templates("up2date");
29 my %tpl_names = map { scalar File
::Basename
::fileparse
( $_, qr/\.[^.]*/ ) => $_ } @templates;
30 my %opts = ( "update-cpan-index" => 0 );
31 my @fmt_options = map { "output-" . $_ } keys %tpl_names;
33 ( ( map { $_ . ":s" } @fmt_options ), "cpan-home=s", "update-cpan-index!", "help|h", "usage|?" );
35 GetOptions
( \
%opts, @options ) or pod2usage
(2);
37 defined( $opts{help
} )
45 defined( $opts{usage
} ) and $opts{usage
} and pod2usage
(1);
47 my @output = grep { defined( $opts{$_} ) } @fmt_options;
48 @output or @output = ('output-log');
50 $pkgtool->load_cpan_config( $opts{"cpan-home"} );
51 $pkgtool->get_cpan_versions( $opts{"update-cpan-index"} );
53 my ( $up_to_date, $need_update, $need_check ) = (0) x
3;
54 my @pkglist = $pkgtool->find_packaged_modules();
55 @pkglist = sort @pkglist;
56 foreach my $pkg (@pkglist)
58 my $state = $pkgtool->check_pkg_up2date_state($pkg);
63 qw(DIST_NAME DIST_VERSION DIST_FILE PKG_NAME PKG_VERSION PKG_MAINTAINER PKG_HOMEPAGE PKG_INSTALLED PKG_LOCATION CPAN_VERSION CPAN_NAME CHECK_STATE CHECK_COMMENT);
64 @pkg_details{@pkg_detail_keys} = $pkgtool->get_pkg_details( $pkg, @pkg_detail_keys );
65 push( @pkgs_in_state, \
%pkg_details );
66 if ( $pkg_details{CHECK_STATE
} == Packaging
::Tools
->STATE_NEWER_IN_CPAN )
81 my $template = Template
->new(
82 INCLUDE_PATH
=> join( ":",
83 $pkgtool->get_template_directories("up2date"),
84 $pkgtool->get_template_directories() ),
88 data
=> \
@pkgs_in_state,
89 STATE_REMARKS
=> [ $pkgtool->get_state_remarks() ],
90 STATE_CMPOPS
=> [ $pkgtool->get_state_cmpops() ],
92 UP2DATE
=> $up_to_date,
93 ENTIRE
=> scalar(@pkglist),
94 NEED_UPDATE
=> $need_update,
95 NEED_CHECK
=> $need_check
98 foreach my $tgt (@output)
100 my $tgtfn = $opts{$tgt};
101 ( my $tpl = $tgt ) =~ s/output-(.*)/$1/;
104 # for backward compatibility
105 ( my $ext = $tgt ) =~ s/output-([^-]+).*/$1/;
106 $tgtfn = File
::Spec
->catfile( $ENV{HOME
}, "up2date." . $ext );
108 $template->process( $tpl_names{$tpl}, \
%vars, $tgtfn )
109 or die $template->error();