The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long;
use Pod::Usage;
use Debian::Apt::PM 0.03;
use List::MoreUtils 'none';

exit main();

sub main {
	my $help;
	my $sources;
	my $search_src = 0;
	GetOptions(
		'help|h'      => \$help,
		'sources|s=s' => \$sources,
		'deb-src'     => \$search_src,
	) or pod2usage;
	pod2usage if $help;
	
	# the switch makes no sence when sources explicitely set
	$search_src = 0
		if $sources;
	
	my $cmd     = shift @ARGV;
	my $package = shift @ARGV;
	pod2usage if not $cmd;
	pod2usage if none { $_ eq $cmd } qw(search find update clean);
	
	my $aptpm     = Debian::Apt::PM->new();
	my $aptpm_src = Debian::Apt::PM->new(repo_type => 'deb-src');
	$aptpm->sources([split(',', $sources)])
		if ($sources);
	
	# get provides from dbedia.com
	if ($cmd eq 'update') {
		$aptpm->update();
		$aptpm_src->update()
			if not $sources;
	}
	
	if ($cmd eq 'clean') {
		$aptpm->clean();
		$aptpm_src->clean()
			if not $sources;
	}

	$aptpm = $aptpm_src
		if ($search_src);
	
	# lookup the package
	if (($cmd eq 'search') or ($cmd eq 'find')) {
		pod2usage if not $package;
		
		# get provides hash with packages
		my $version_info = $aptpm->find($package);
		
		# nothing to do if the package is not there
		return 0 if not $version_info;
		
		# print all available versions
		foreach my $version (keys %{$version_info}) {
			my $distribution = $version_info->{$version}->{'distribution'} || 'unknown';
			my $component    = $version_info->{$version}->{'component'} || 'unknown';
			
			print
				$version_info->{$version}->{'package'},
				'_',
				$version_info->{$version}->{'version'},
				'_',
				$version_info->{$version}->{'arch'},
				' ',
				$distribution,
				' ',
				$component,
				': ',
				$package,
				' ',
				$version,
				' ',
				"\n";
		}
	}
	
	return 0;
}

__END__

=head1 NAME

apt-pm - locate Perl Modules in Debian repositories

=head1 SYNOPSIS

	apt-pm search Moose::Meta::Role
	apt-pm update
	apt-pm clean
	
options:

	--sources
		comman separated list of index files to use for search/find
	--deb-src
		search in source repositories

=head1 DESCRIPTION

Lookup Perl package in Debian .deb files.

=head1 SEE ALSO

L<Debian::Apt::PM>

=cut