Index: devel/pb/bin/pb
===================================================================
--- devel/pb/bin/pb	(revision 498)
+++ devel/pb/bin/pb	(revision 499)
@@ -454,4 +454,5 @@
 	my @pkgs = @$pkg;
 	my %pkgs;
+	my %pb;				# Structure to store conf info
 
 	my ($scheme, $uri) = pb_cms_init($pbinit);
@@ -520,4 +521,5 @@
 		my @pt;
 		my $tmpl = "";
+		my @patches = ();
 
 		@pt = pb_conf_get_if("vmlist","velist");
@@ -532,9 +534,24 @@
 			$tmpl .= $pt[1]->{$ENV{'PBPROJ'}} 
 		}
+
+		# Setup %pb structure to allow filtering later on on files using that structure
+		$pb{'tag'} = $pbtag;
+		$pb{'rev'} = $pbrev;
+		$pb{'pkg'} = $pbpkg;
+		$pb{'ver'} = $pbver;
+		$pb{'date'} = $pbdate;
+		$pb{'defpkgdir'} = $defpkgdir;
+		$pb{'extpkgdir'} = $extpkgdir;
+		$pb{'chglog'} = $chglog;
+		$pb{'packager'} = $ENV{'PBPACKAGER'};
+		$pb{'proj'} = $ENV{'PBPROJ'};
+		$pb{'repo'} = $ENV{'PBREPO'};
+
 		foreach my $d (split(/,/,$tmpl)) {
 			my ($name,$ver,$arch) = split(/-/,$d);
 			chomp($arch);
-			my ($ddir, $dver, $dfam, $dtype, $pbsuf) = pb_distro_init($name,$ver);
-			pb_log(2,"DEBUG: distro tuple: ".Dumper($ddir, $dver, $dfam, $dtype, $pbsuf)."\n");
+			my ($ddir, $dver, $dfam);
+			($ddir, $dver, $dfam, $pb{'dtype'}, $pb{'suf'}) = pb_distro_init($name,$ver);
+			pb_log(2,"DEBUG: distro tuple: ".Dumper($ddir, $dver, $dfam, $pb{'dtype'}, $pb{'suf'})."\n");
 			pb_log(2,"DEBUG Filtering PBDATE => $pbdate, PBTAG => $pbtag, PBVER => $pbver\n");
 
@@ -548,6 +565,6 @@
 			$build{"$ddir-$dver"} = "yes";
 
-			if (-d "$ENV{'PBROOTDIR'}/$pbpkg/$dtype") {
-				pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$dtype",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+			if (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pb{'dtype'}") {
+				pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pb{'dtype'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
 			} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$dfam") {
 				pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$dfam",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
@@ -563,16 +580,15 @@
 
 			# Get all filters to apply
-			my $ptr = pb_get_filters($pbpkg, $dtype, $dfam, $ddir, $dver);
+			my $ptr = pb_get_filters($pbpkg, $pb{'dtype'}, $dfam, $ddir, $dver);
 
 			# Prepare patches for this distro
-			my @patches;
-
 			foreach my $p (sort(<$ENV{'PBROOTDIR'}/$pbpkg/pbpatch/*>)) {
 				push @patches,$p if ($p =~ /\.all$/);
-				push @patches,$p if ($p =~ /\.$dtype$/);
+				push @patches,$p if ($p =~ /\.$pb{'dtype'}$/);
 				push @patches,$p if ($p =~ /\.$dfam$/);
 				push @patches,$p if ($p =~ /\.$ddir$/);
 				push @patches,$p if ($p =~ /\.$ddir-$dver$/);
 			}
+			$pb{'patches'} = \@patches;
 
 			# Apply now all the filters on all the files concerned
@@ -580,5 +596,5 @@
 			if (defined $ptr) {
 				foreach my $f (values %bfiles,values %pkgfiles) {
-					pb_filter_file_pb("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$ddir-$dver/".basename($f),$dtype,$pbsuf,$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$defpkgdir,$extpkgdir,$ENV{'PBPACKAGER'},$chglog,$ENV{'PBPROJ'},$ENV{'PBREPO'});
+					pb_filter_file("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$ddir-$dver/".basename($f),\%pb);
 				}
 			}
@@ -602,21 +618,23 @@
 		if (defined $filteredfiles->{$pbpkg}) {
 			foreach my $f (split(/,/,$filteredfiles->{$pbpkg})) {
-				pb_filter_file_inplace($ptr,"$dest/$f",$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'},$ENV{'PBPROJ'},$ENV{'PBREPO'});
+				pb_filter_file_inplace($ptr,"$dest/$f",\%pb);
 				$liste = "$f $liste";
 			}
 		}
 		pb_log(2,"Files ".$liste."have been filtered\n");
+
+		# Filter potential patches
+		pb_mkdir_p("$dest/pbconf/pbpatch");
+		foreach my $p (sort(@patches)) {
+			my $pp = basename($p);
+			pb_filter_file($p,$ptr,"$dest/pbconf/pbpatch/$pp",\%pb);
+			pb_system("gzip -9 $dest/pbconf/pbpatch/$pp");
+		}
 
 		# Prepare the dest directory for archive
 		if (-x "$ENV{'PBROOTDIR'}/$pbpkg/pbinit") {
-			pb_filter_file("$ENV{'PBROOTDIR'}/$pbpkg/pbinit",$ptr,"$ENV{'PBTMP'}/pbinit",$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'},$ENV{'PBPROJ'},$ENV{'PBREPO'});
+			pb_filter_file("$ENV{'PBROOTDIR'}/$pbpkg/pbinit",$ptr,"$ENV{'PBTMP'}/pbinit",\%pb);
 			chmod 0755,"$ENV{'PBTMP'}/pbinit";
 			pb_system("cd $dest ; $ENV{'PBTMP'}/pbinit","Executing init script from $ENV{'PBROOTDIR'}/$pbpkg/pbinit","verbose");
-		}
-
-		# Filter potential patches
-		foreach my $p (sort(<$ENV{'PBROOTDIR'}/$pbpkg/pbpatch/*>)) {
-			pb_mkdir_p("$dest/pbconf/pbpatch");
-			pb_filter_file("$ENV{'PBROOTDIR'}/$pbpkg/pbpatch/$p",$ptr,"$dest/pbconf/pbpatch/$p",$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'},$ENV{'PBPROJ'},$ENV{'PBREPO'});
 		}
 
@@ -694,8 +712,8 @@
 			symlink "$src","$ENV{'PBBUILDDIR'}/SOURCES/".basename($src) || die "Unable to symlink $src in $ENV{'PBBUILDDIR'}/SOURCES";
 			# We need to first extract the spec file
-			my @specfile;
-			@specfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$ddir-$dver/","$ENV{'PBBUILDDIR'}/SPECS");
+			my @specfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$ddir-$dver/","$ENV{'PBBUILDDIR'}/SPECS");
 
 			# We need to handle potential patches to upstream sources
+			my @patchfiles = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/pbpatch/","$ENV{'PBBUILDDIR'}/SOURCES");
 
 			pb_log(2,"specfile: ".Dumper(\@specfile)."\n");
