#!/usr/bin/perl -w # # which_deb # # Simple helper tool to find the appropriate version of a package in # the archive to meet a requirement in the debian-cd build use strict; my ($mirror, $codename, $pkg, $pth, $output); $mirror = shift; $codename = shift; $pkg = shift; $output = shift; $pth = "$mirror/dists/$codename/main"; if (!defined ($output)) { $output = "binary"; } sub grab_bin_info { my $pth = shift; my $arch = shift; my $pkgname = shift; my $old_split = $/; my $match; my $result = ""; my $pgz = "$pth/binary-$arch/Packages.gz"; $/ = ''; # Browse by paragraph if (-e $pgz) { open(PFILE, "zcat $pgz |") or die "Failed to read Packages file $pgz"; while (defined($match = )) { if (($match =~ /^Package: \Q$pkgname\E$/m)) { $result = $match; close PFILE; return $result; } } # Fell through close PFILE; } return ""; } sub grab_src_info { my $pth = shift; my $pkgname = shift; my $old_split = $/; my $match; my $result = ""; my $pgz = "$pth/source/Sources.gz"; $/ = ''; # Browse by paragraph if (-e $pgz) { open(PFILE, "zcat $pgz |") or die "Failed to read Sources file $pgz"; while (defined($match = )) { if (($match =~ /^Package: \Q$pkgname\E$/m)) { $result = $match; close PFILE; return $result; } } # Fell through close PFILE; } return ""; } my $bin_deb = ""; my $pkgdata = ""; my $srcname = ""; if ($pkg eq "debootstrap") { $pkgdata = grab_bin_info($pth, "i386", $pkg); } elsif ($pkg eq "silo") { $pkgdata = grab_bin_info($pth, "sparc", $pkg); } elsif ($pkg eq "syslinux") { $pkgdata = grab_bin_info($pth, "i386", "syslinux-common"); if (length($pkgdata) < 3) { $pkgdata = grab_bin_info($pth, "i386", "syslinux"); } } elsif ($pkg eq "yaboot") { $pkgdata = grab_bin_info($pth, "powerpc", $pkg); } if (length($pkgdata) > 2) { if ($output eq "binary") { $pkgdata =~ m/^Filename: (\S+)/m and $bin_deb = $1; print "$bin_deb\n"; } elsif ($output eq "source") { $srcname = $pkg; $pkgdata =~ m/^Source: (\S+)/m and $srcname = $1; $pkgdata = grab_src_info($pth, $srcname); if (length($pkgdata) > 2) { my $dir; $pkgdata =~ m/^Directory: (\S+)/m and $dir = $1; $pkgdata =~ m/^ (\S+) (\S+) ((\S+).*dsc)/m and print "$dir/$3\n"; $pkgdata =~ m/^ (\S+) (\S+) ((\S+).*diff.gz)/m and print "$dir/$3\n"; $pkgdata =~ m/^ (\S+) (\S+) ((\S+).*tar.gz)/m and print "$dir/$3\n"; } } }