Index: /0.11.2/contrib/pbnewreposetup
===================================================================
--- /0.11.2/contrib/pbnewreposetup	(revision 1135)
+++ /0.11.2/contrib/pbnewreposetup	(revision 1135)
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+
+use strict;
+use ProjectBuilder::Base;
+use ProjectBuilder::Distribution;
+use File::Copy;
+
+# This script help transforming a pre-0.9.11 repository into the new format 
+# where the arch subdirectory is now required to host the packages
+# for rpm based packages
+
+# Needs to be launch at the root of the ftp server
+# Script is idempotent: can be relaunched on itself
+
+for my $odir (<*>) {
+	next if (! -d $odir);
+	chdir($odir);
+	for my $over (<*>) {
+		next if (! -d $over);
+		my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init($odir,$over);
+		# Repo only change for rpm packages in 0.9.11
+		next if ($dtype ne "rpm");
+		chdir($over);
+		pb_mkdir_p("i386");
+		pb_mkdir_p("x86_64");
+		for my $p (<*>) {
+			system("rm -rf $p") if (($p eq "headers") || ($p eq "media_info") || ($p eq "repodata"));
+			unlink($p) if (($p eq "hdlist.cz") || ($p eq "synthesis.hdlist.cz"));
+			next if (($p eq "i386") || ($p eq "x86_64"));
+			if ($p =~ /\.i[3456]86\.rpm$/) {
+				print("Move $p to i386\n");
+				move("$p","i386");
+			}
+			if ($p =~ /\.x86_64\.rpm$/) {
+				print("Move $p to x86_64\n");
+				move("$p","x86_64");
+			}
+			if ($p =~ /\.ia64\.rpm$/) {
+				print("Move $p to ia64\n");
+				pb_mkdir_p("ia64");
+				move("$p","ia64");
+			}
+			if (($p =~ /\.src\.rpm$/) || ($p =~ /\.noarch\.rpm$/) || ($p =~ /\.spec$/)) {
+				print("move $p to i386 and x86_64\n");
+				copy("$p","x86_64");
+				move("$p","i386");
+			}
+			if ($p =~ /\.repo$/) {
+				open(SRC,$p);
+				open(I386, "> i386/$p");
+				open(X86_64, "> x86_64/$p");
+				while (<SRC>) {
+					if (/^baseurl=/) {
+						my $ti = $_;
+						my $tx = $_;
+						$ti =~s/$over$/$over\/i386/;
+						print I386 "$ti";	
+						$tx =~s/$over$/$over\/x86_64/;
+						print X86_64 "$tx";	
+					} else {
+						print I386 "$_";
+						print X86_64 "$_";	
+					}
+				}
+				close(I386);
+				close(X86_64);
+				close(SRC);
+				print("adapt $p into i386 and x86_64\n");
+				unlink($p);
+			}
+			if ($p =~ /\.addmedia$/) {
+				open(SRC,$p);
+				open(I386, "> i386/$p");
+				open(X86_64, "> x86_64/$p");
+				while (<SRC>) {
+					my $ti = $_;
+					my $tx = $_;
+					$ti =~s/$over with/$over\/i386 with/;
+					print I386 "$ti";	
+					$tx =~s/$over with/$over\/x86_64 with/;
+					print X86_64 "$tx";	
+				}
+				close(I386);
+				close(X86_64);
+				close(SRC);
+				print("adapt $p into i386 and x86_64\n");
+				unlink($p);
+			}
+		}
+		system("cd i386 ; yum-arch . ; createrepo .");
+		system("cd ia64 ; yum-arch . ; createrepo .") if (-d "ia64");
+		system("cd x86_64 ; yum-arch . ; createrepo .");
+		system("cd i386 ; genhdlist2 --clean .") if ($dfam eq "md");
+		system("cd x86_64 ; genhdlist2 --clean .") if ($dfam eq "md");
+		chdir("..");
+	}
+	chdir("..");
+}
Index: /0.11.2/pb/contrib/newpbqemu
===================================================================
--- /0.11.2/pb/contrib/newpbqemu	(revision 327)
+++ /0.11.2/pb/contrib/newpbqemu	(revision 327)
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+(
+if [ _"$1" == _"" ]; then
+	echo "Syntax: newpbqemu VM|all"
+	exit -1
+fi
+
+export PBPROJ=pb
+export PBROOT=/users/bruno/pb/svn/devel
+
+if [ _"$1" == _"all" ]; then
+	opt="`grep vmlist  $PBROOT/pbconf/pb.pb | grep pb | cut -d= -f2 | sed 's/,/ /g'`"
+	opt64="`echo $opt | sed 's/ /_64 /g'`"
+	opt="$opt $opt64"
+else
+	opt="`echo $* | sed 's/,/ /g'`"
+fi
+
+echo "Working on VMs: $opt"
+for m in $opt; do
+	echo "Launching script on $m"
+	cat > /tmp/pbscript << EOF
+	ntpdate ntp.home.musique-ancienne.org
+	rm -rf project-builder-*
+	wget --passive-ftp ftp://ftp.mondorescue.org/src/project-builder-latest.tar.gz
+	tar xvfz project-builder-latest.tar.gz
+	cd project-builder-*
+	perl Makefile.PL
+	make
+	make install
+	cd ..
+EOF
+	pb -m $m -a root -s /tmp/pbscript script2vm 
+	pb -m $m build2vm
+	echo "Installing package on $m"
+	cat > /tmp/pbscript << EOF
+	#!/bin/bash
+	ddir=\`pbdistrocheck | cut -d: -f2 | cut -d, -f1\`
+	dver=\`pbdistrocheck | cut -d, -f2\`
+	dtype=\`pbdistrocheck | cut -d, -f4\`
+	dsuf=\`pbdistrocheck | cut -d, -f5\`
+	pbver=devel
+	if [ "$dtype" = "rpm" ]; then
+		rpm -Uvh --force --nodeps ftp://ftp.project-builder.org/$ddir/$dver/test/project-builder-$pbver-1$dsuf.noarch.rpm"
+	else
+		wget ftp://ftp.project-builder.org/$ddir/$dver/test/project-builder_".$pbver."_all.deb
+		dpkg -i project-builder_".$pbver."_all.deb"
+	fi
+EOF
+	pb -m $m -a root -s /tmp/pbscript script2vm 
+	echo "Halting $m"
+	echo "/sbin/halt -p" > /tmp/pbscript
+	pb -m $m -a root -s /tmp/pbscript script2vm 
+	sleep 120
+	job=`ps auhxww | grep qemu | grep $m | grep -Ev 'grep|newpbqemu' | awk '{print $2}'`
+	if [ _"$job" != _"" ]; then
+		echo "Really halting $m"
+		kill $job
+	fi
+done
+) 2>&1 | tee /tmp/newpbqemu.log
Index: /0.11.2/pb/contrib/installpb
===================================================================
--- /0.11.2/pb/contrib/installpb	(revision 1064)
+++ /0.11.2/pb/contrib/installpb	(revision 1064)
@@ -0,0 +1,24 @@
+#!/usr/bin/perl -w
+
+# Script to be used as pbscript to install pb in VMs
+
+use strict;
+use File::Basename;
+use ProjectBuilder::Distribution qw (pb_distro_init);
+
+# To adapt
+my $pbver= "devel";
+
+my ($ddir, $dver, $dfam, $dtype, $dos, $dsuf) = pb_distro_init(); 
+
+print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $dsuf))."\n";
+
+# Get and install pb
+if ( $dtype eq "rpm" ) {
+	system "sudo rpm -Uvh --force --nodeps ftp://ftp.project-builder.org/$ddir/$dver/test/project-builder-$pbver-1$dsuf.noarch.rpm"
+} elsif ( $dtype eq "deb" ) {
+		system "wget ftp://ftp.project-builder.org/$ddir/$dver/test/project-builder_".$pbver."_all.deb ; sudo dpkg -i project-builder_".$pbver."_all.deb";
+} elsif ( $dfam eq "gen" ) {
+} else {
+	print "No pkg to install\n";
+}
Index: /0.11.2/pb/contrib/updateqemu
===================================================================
--- /0.11.2/pb/contrib/updateqemu	(revision 283)
+++ /0.11.2/pb/contrib/updateqemu	(revision 283)
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+(
+if [ _"$1" == _"" ]; then
+	echo "Syntax: updateqemu VM|all"
+	exit -1
+fi
+if [ _"$1" == _"all" ]; then
+	opt="`grep vmlist  ~/.pbrc | grep mondorescue | cut -d= -f2 | sed 's/,/ /g'`"
+	opt64="`echo $opt | sed 's/ /_64 /g'`"
+	#opt="$opt $opt64"
+	opt="$opt64"
+else
+	opt="`echo $* | sed 's/,/ /g'`"
+fi
+
+export PBPROJ=pb
+export PBROOT=/users/bruno/pb/svn/devel
+
+for m in $opt; do
+	cat /users/bruno/pb/svn/devel/pb/contrib/pbsetupqemu /users/bruno/pb/svn/devel/pb/lib/ProjectBuilder/Distribution.pm > /tmp/pbscript
+	echo "Launching script on $m"
+	pb -m $m -a root -s /tmp/pbscript script2vm 
+	pb -m $m build2vm
+	echo "Halting $m"
+	echo "/sbin/halt -p" > /tmp/pbscript
+	#pb -m $m -a root -s /tmp/pbscript script2vm 
+	sleep 120
+	job=`ps auhxww | grep qemu | grep $m | grep -Ev 'grep|updateqemu' | awk '{print $2}'`
+	if [ _"$job" != _"" ]; then
+		echo "Really halting $m"
+		#kill $job
+	fi
+done
+) 2>&1 | tee /tmp/updateqemu.log
Index: /0.11.2/pb/contrib/newpb
===================================================================
--- /0.11.2/pb/contrib/newpb	(revision 327)
+++ /0.11.2/pb/contrib/newpb	(revision 327)
@@ -0,0 +1,9 @@
+#!/usr/bin/perl -w
+
+# Script to be used as pbscript to install latest pb version
+# missing pb account on the QEMU VM, and adds it to sudo
+
+use strict;
+
+system "ntpdate ntp.home.musique-ancienne.org ; rm -rf project-builder-* ; wget --passive-ftp ftp://ftp.mondorescue.org/src/project-builder-latest.tar.gz ; tar xvfz project-builder-latest.tar.gz ; cd project-builder-* ; perl Makefile.PL ; make ; sudo make install ; cd .. ; sudo halt -p ; sleep 120";
+
Index: /0.11.2/pb/contrib/installqemu
===================================================================
--- /0.11.2/pb/contrib/installqemu	(revision 311)
+++ /0.11.2/pb/contrib/installqemu	(revision 311)
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+(
+export PBPROJ=pb
+VER=devel
+export PBROOT=/users/bruno/pb/svn/$VER
+
+if [ _"$1" == _"" ]; then
+	echo "Syntax: installqemu VM|all"
+	exit -1
+fi
+if [ _"$1" == _"all" ]; then
+	opt="`grep vmlist  $PBROOT/pbconf/$PBPROJ.pb | grep $PBPROJ | cut -d= -f2 | sed 's/,/ /g'`"
+	opt64="`echo $opt | sed 's/ /_64 /g'`"
+	opt="$opt $opt64"
+else
+	opt="`echo $* | sed 's/,/ /g'`"
+fi
+
+for m in $opt; do
+	echo "Launching script on $m"
+	pb -m $m -a root -s /users/bruno/pb/svn/$VER/pb/contrib/installpb script2vm 
+	echo "Halting $m"
+	echo "/sbin/halt -p" > /tmp/pbscript
+	pb -m $m -a root -s /tmp/pbscript script2vm 
+	sleep 120
+	job=`ps auhxww | grep qemu | grep -Ev 'grep|installqemu' | awk '{print $2}'`
+	if [ _"$job" != _"" ]; then
+		echo "Really halting $m"
+		kill $job
+	fi
+done
+) 2>&1 | tee /tmp/installqemu.log
Index: /0.11.2/pb/AUTHORS
===================================================================
--- /0.11.2/pb/AUTHORS	(revision 1089)
+++ /0.11.2/pb/AUTHORS	(revision 1089)
@@ -0,0 +1,3 @@
+Project Builder or pb is copyrighted under the GPL v2 by 
+Bruno Cornec <bruno@hyper-linux.org>
+joachim
Index: /0.11.2/pb/INSTALL
===================================================================
--- /0.11.2/pb/INSTALL	(revision 15)
+++ /0.11.2/pb/INSTALL	(revision 15)
@@ -0,0 +1,7 @@
+Basic Installation
+==================
+
+tar xvfz pb-1.0.tar.gz
+cd pb-1.0
+make 
+make install
Index: /0.11.2/pb/lib/ProjectBuilder/Filter.pm
===================================================================
--- /0.11.2/pb/lib/ProjectBuilder/Filter.pm	(revision 1252)
+++ /0.11.2/pb/lib/ProjectBuilder/Filter.pm	(revision 1252)
@@ -0,0 +1,282 @@
+#!/usr/bin/perl -w
+#
+# ProjectBuilder Filter module
+# Filtering subroutines brought by the the Project-Builder project
+# which can be easily used by pbinit
+#
+# $Id$
+#
+# Copyright B. Cornec 2007
+# Provided under the GPL v2
+
+package ProjectBuilder::Filter;
+
+use strict 'vars';
+use Data::Dumper;
+use English;
+use File::Basename;
+use File::Copy;
+use lib qw (lib);
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Changelog;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_get_filters pb_filter_file_pb pb_filter_file_inplace pb_filter_file);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Filter, part of the project-builder.org
+
+=head1 DESCRIPTION
+
+This module provides filtering functions suitable for pbinit calls.
+
+=over 4
+
+=item B<pb_get_filters>
+
+This function gets all filters to apply. They're cumulative from the less specific to the most specific.
+
+Suffix of those filters is .pbf. Filter all.pbf applies to whatever distribution. The pbfilter directory may be global under pbconf or per package, for overloading values. Then in order filters are loaded for distribution type, distribution family, distribution name, distribution name-version.
+
+The first parameter is the package name.
+The second parameter is OS hash
+
+The function returns a pointer on a hash of filters.
+
+=cut
+
+sub pb_get_filters {
+
+my @ffiles;
+my ($ffile00, $ffile0, $ffile1, $ffile2, $ffile3, $ffile4, $ffile5);
+my ($mfile00, $mfile0, $mfile1, $mfile2, $mfile3, $mfile4, $mfile5);
+my $pbpkg = shift || die "No package specified";
+my $pbos = shift;
+my $ptr = undef; # returned value pointer on the hash of filters
+my %h;
+
+pb_log(2,"Entering pb_get_filters - pbpkg: $pbpkg - pbos: ".Dumper($pbos)."\n");
+# Global filter files first, then package specificities
+if (-d "$ENV{'PBROOTDIR'}/pbfilter") {
+	$mfile00 = "$ENV{'PBROOTDIR'}/pbfilter/all.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/all.pbf");
+	if (defined $pbos) {
+		$mfile0 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'os'}.pbf" if ((defined $pbos->{'os'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'os'}.pbf"));
+		$mfile1 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'type'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'type'}.pbf"));
+		$mfile2 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'family'}.pbf" if ((defined $pbos->{'family'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'family'}.pbf"));
+		$mfile3 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}.pbf" if ((defined $pbos->{'name'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}.pbf"));
+		$mfile4 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf" if ((defined $pbos->{'name'}) && (defined $pbos->{'version'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf"));
+		$mfile5 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.pbf" if ((defined $pbos->{'name'}) && (defined $pbos->{'version'}) && (defined $pbos->{'arch'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.pbf"));
+	}
+
+	push @ffiles,$mfile00 if (defined $mfile00);
+	push @ffiles,$mfile0 if (defined $mfile0);
+	push @ffiles,$mfile1 if (defined $mfile1);
+	push @ffiles,$mfile2 if (defined $mfile2);
+	push @ffiles,$mfile3 if (defined $mfile3);
+	push @ffiles,$mfile4 if (defined $mfile4);
+	push @ffiles,$mfile5 if (defined $mfile5);
+}
+
+if (-d "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter") {
+	$ffile00 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/all.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/all.pbf");
+	if (defined $pbos) {
+		$ffile0 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'os'}.pbf" if ((defined $pbos->{'os'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'os'}.pbf"));
+		$ffile1 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'type'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'type'}.pbf"));
+		$ffile2 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'family'}.pbf" if ((defined $pbos->{'family'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'family'}.pbf"));
+		$ffile3 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}.pbf" if ((defined $pbos->{'name'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}.pbf"));
+		$ffile4 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf" if ((defined $pbos->{'name'}) && (defined $pbos->{'version'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf"));
+		$ffile5 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.pbf" if ((defined $pbos->{'name'}) && (defined $pbos->{'version'}) && (defined $pbos->{'arch'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.pbf"));
+	}
+	push @ffiles,$ffile00 if (defined $ffile00);
+	push @ffiles,$ffile0 if (defined $ffile0);
+	push @ffiles,$ffile1 if (defined $ffile1);
+	push @ffiles,$ffile2 if (defined $ffile2);
+	push @ffiles,$ffile3 if (defined $ffile3);
+	push @ffiles,$ffile4 if (defined $ffile4);
+	push @ffiles,$ffile5 if (defined $ffile5);
+}
+if (@ffiles) {
+	pb_log(2,"DEBUG ffiles: ".Dumper(\@ffiles)."\n");
+
+	foreach my $f (@ffiles) {
+		pb_log(3,"DEBUG processing filter file $f\n");
+		open(CONF,$f) || next;
+		while(<CONF>)  {
+			if (/^\s*([A-z0-9-_]+)\s+([[A-z0-9-_]+)\s*=\s*(.+)$/) {
+				pb_log(3,"DEBUG creating entry $1, key $2, value $3\n");
+				$h{$1}{$2}=$3;
+			}
+		}
+		close(CONF);
+	}
+	$ptr = $h{"filter"};
+}
+pb_log(2,"DEBUG f:".Dumper($ptr)."\n") if (defined $ptr);
+return($ptr);
+}
+
+=item B<pb_filter_file>
+
+This function applies all filters to files.
+
+It takes 4 parameters.
+
+The first parameter is the file to filter.
+The second parameter is the pointer on the hash of filters. If undefined no filtering will occur.
+The third parameter is the destination file after filtering.
+The fourth parameter is the pointer on the hash of variables to filter (tag, ver, ...)
+
+=cut
+
+sub pb_filter_file {
+
+my $f=shift;
+my $ptr=shift;
+my %filter;
+if (defined $ptr) {
+	%filter=%$ptr;
+} else {
+	%filter = ();
+}
+my $destfile=shift;
+my $pb=shift;
+my $tuple = "unknown";
+$tuple = "$pb->{'pbos'}->{'name'}-$pb->{'pbos'}->{'version'}-$pb->{'pbos'}->{'arch'}" if (defined $pb->{'pbos'});
+
+pb_log(2,"DEBUG: From $f to $destfile (tuple: $tuple)\n");
+pb_log(3,"DEBUG($tuple): pb ".Dumper($pb)."\n");
+pb_mkdir_p(dirname($destfile)) if (! -d dirname($destfile));
+open(DEST,"> $destfile") || die "Unable to create $destfile: $!";
+open(FILE,"$f") || die "Unable to open $f: $!";
+while (<FILE>) {
+	my $line = $_;
+	foreach my $s (keys %filter) {
+		# Process single variables
+		my $tmp = $filter{$s};
+		next if (not defined $tmp);
+		pb_log(3,"DEBUG filter{$s}: $filter{$s}\n");
+		# Expand variables if any single one found
+		if ($tmp =~ /\$/) {
+			pb_log(3,"*** Filtering variable in $tmp ***\n");
+			# Order is important as we need to handle hashes refs before simple vars
+			# (?: introduce a Non-capturing groupings cf man perlretut
+			eval { $tmp =~ s/(\$\w+(?:-\>\{\'\w+\'\})*)/$1/eeg };
+			if (($s =~ /^PBDESC$/) && ($line =~ /^ PBDESC/)) {
+				# if on debian, we need to preserve the space before each desc line
+				pb_log(3,"*** DEBIAN CASE ADDING SPACE ***\n");
+				$tmp =~ s/\$\//\$\/ /g;
+				pb_log(3,"*** tmp:$tmp ***\n");
+			}
+			eval { $tmp =~ s/(\$\/)/$1/eeg };
+		} elsif (($s =~ /^PBLOG$/) && ($line =~ /^PBLOG$/)) {
+			# special case for ChangeLog only for pb
+			pb_log(3,"DEBUG filtering PBLOG\n");
+			pb_changelog($pb, \*DEST, $tmp);
+			$tmp = "";
+		} elsif (($s =~ /^PBPATCHSRC$/) && ($line =~ /^PBPATCHSRC$/)) {
+			pb_log(3,"DEBUG($tuple) filtering PBPATCHSRC\n");
+			my $i = 0;
+			pb_log(3,"DEBUG($tuple): pb ".Dumper($pb)."\n");
+			pb_log(3,"DEBUG($tuple): pb/patches/tuple $pb->{'patches'}->{$tuple}\n");
+			if (defined $pb->{'patches'}->{$tuple}) {
+				foreach my $p (split(/,/,$pb->{'patches'}->{$tuple})) {
+					pb_log(3,"DEBUG($tuple) Adding patch $i ".basename($p)."\n");
+					print DEST "Patch$i:         ".basename($p).".gz\n";
+					$i++;
+				}
+			}
+			$tmp = "";
+		} elsif (($s =~ /^PBMULTISRC$/) && ($line =~ /^PBMULTISRC$/)) {
+			pb_log(3,"DEBUG($tuple) filtering PBMULTISRC\n");
+			my $i = 1;
+			if (defined $pb->{'sources'}->{$tuple}) {
+				foreach my $p (split(/,/,$pb->{'sources'}->{$tuple})) {
+					pb_log(3,"DEBUG($tuple) Adding source $i ".basename($p)."\n");
+					print DEST "Source$i:         ".basename($p)."\n";
+					$i++;
+				}
+			}
+			$tmp = "";
+		} elsif (($s =~ /^PBPATCHCMD$/) && ($line =~ /^PBPATCHCMD$/)) {
+			pb_log(3,"DEBUG($tuple) filtering PBPATCHCMD\n");
+			my $i = 0;
+			if (defined $pb->{'patches'}->{$tuple}) {
+				foreach my $p (split(/,/,$pb->{'patches'}->{$tuple})) {
+					pb_log(3,"DEBUG($tuple) Adding patch command $i\n");
+					print DEST "%patch$i -p1\n";
+					$i++;
+				}
+			}
+			print DEST "\n";
+			$tmp = "";
+		}
+		$line =~ s|$s|$tmp|g;
+	}
+	print DEST $line;
+}
+close(FILE);
+close(DEST);
+}
+
+=item B<pb_filter_file_inplace>
+
+This function applies all filters to a file in place.
+
+It takes 3 parameters.
+
+The first parameter is the pointer on the hash of filters.
+The second parameter is the destination file after filtering.
+The third parameter is the pointer on the hash of variables to filter (tag, ver, ...)
+
+=cut
+
+# Function which applies filter on files (external call)
+sub pb_filter_file_inplace {
+
+my $ptr=shift;
+my $destfile=shift;
+my $pb=shift;
+
+my $cp = "$ENV{'PBTMP'}/".basename($destfile).".$$";
+copy($destfile,$cp) || die "Unable to copy $destfile to $cp";
+
+pb_filter_file($cp,$ptr,$destfile,$pb);
+unlink $cp;
+}
+
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+1;
Index: /0.11.2/pb/lib/ProjectBuilder/Changelog.pm
===================================================================
--- /0.11.2/pb/lib/ProjectBuilder/Changelog.pm	(revision 1262)
+++ /0.11.2/pb/lib/ProjectBuilder/Changelog.pm	(revision 1262)
@@ -0,0 +1,238 @@
+#!/usr/bin/perl -w
+#
+# ProjectBuilder Changelog module
+# Changelog management subroutines brought by the the Project-Builder project
+#
+# $Id$
+#
+# Copyright B. Cornec 2007
+# Provided under the GPL v2
+
+package ProjectBuilder::Changelog;
+
+use strict 'vars';
+use Data::Dumper;
+use English;
+use Date::Manip;
+use POSIX qw(strftime);
+use lib qw (lib);
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Conf;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_changelog);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Changelog, part of the project-builder.org - module dealing with changelog management
+
+=head1 DESCRIPTION
+
+This modules provides generic functions suitable for changelog management for project-builder.org
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_changelog>
+
+Function that generates the changelog used in build files, or for announcements (web, mailing-list, ...)
+
+It takes 3 parameters:
+The first parameter is the %pb hash containing packge info
+The second parameter is the file descriptor on which to write the changelog content.
+The third parameter is a flag in the configuration file indicating whether we want changelog expansion or not.
+
+=cut
+
+sub pb_changelog {
+
+my $pb = shift;
+
+my $dtype = $pb->{'pbos'}->{'type'};
+my $pbrealpkg = $pb->{'realpkg'};
+my $pbver = $pb->{'ver'};
+my $pbtag = $pb->{'tag'};
+my $pbsuf = $pb->{'pbos'}->{'suffix'};
+my $OUTPUT = shift;
+my $doit = shift;
+my $chglog = $pb->{'chglog'} || undef;
+
+my $log = "";
+
+pb_log(2,"Entering pb_changelog - pb: ".Dumper($pb)."\n");
+pb_log(2,"Entering pb_changelog - doit: $doit\n") if (defined $doit);
+pb_log(2,"Entering pb_changelog - OUTPUT: $OUTPUT\n") if (defined $OUTPUT);
+# For date handling
+$ENV{LANG}="C";
+
+if ((not (defined $dtype)) || ($dtype eq "") || 
+		(not (defined $pbrealpkg)) || ($pbrealpkg eq "") || 
+		(not (defined $pbver)) || ($pbver eq "") || 
+		(not (defined $pbtag)) || ($pbtag eq "") || 
+		(not (defined $pbsuf)) || ($pbsuf eq "") || 
+		(not (defined $OUTPUT)) || ($OUTPUT eq "") ||
+		(not (defined $doit)) || ($doit eq "")) {
+	pb_log(2,"Not enough input params\n");
+	print $OUTPUT "\n";
+	return;
+}
+
+my $date;
+my $ndate;
+my $n2date;
+my $ver;
+my $ver2;
+my ($pbpackager) = pb_conf_get("pbpackager");
+
+if (not defined $pbpackager->{$ENV{'PBPROJ'}}) {
+	$pbpackager->{$ENV{'PBPROJ'}} = "undefined\@noproject.noorg";
+}
+
+my @date = pb_get_date();
+# If we don't need to do it, or don't have it fake something
+if (((not defined $chglog) || (! -f $chglog)) && ($doit ne "yes")) {
+	pb_log(2,"No ChangeLog file for $pbrealpkg - faking one\n");
+	$date = strftime("%Y-%m-%d", @date);
+	$ndate = &UnixDate($date,"%a", "%b", "%d", "%Y");
+	$n2date = &UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
+	if ($dtype eq "rpm") {
+		$ver2 = "$pbver-$pbtag";
+		print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
+		print $OUTPUT "- Updated to $pbver\n";
+	} elsif ($dtype eq "deb") {
+		if ($pbver !~ /^[0-9]/) {
+			# dpkg-deb doesn't accept non digit versions. 
+			# Prepending 0 in order to make updates easy hopefully
+			$pbver =~ s/^/0/;
+		}
+		print $OUTPUT "$pbrealpkg ($pbver-$pbtag) unstable; urgency=low\n";
+		print $OUTPUT "  * Updated to $pbver\n";
+		print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}}  $n2date\n\n\n";
+	} else {
+		pb_log(0,"No ChangeLog file for $pbrealpkg and no way faking one for type $dtype\n");
+	}
+	return;
+}
+
+die "No changelog file for $pbrealpkg found at $ENV{'PBROOTDIR'}/$pbrealpkg/pbcl" if (not defined $chglog);
+
+open(INPUT,"$chglog") || die "Unable to open $chglog (read)";
+
+# Skip first 4 lines
+my $tmp = <INPUT>;
+$tmp = <INPUT>;
+$tmp = <INPUT>;
+if ($dtype eq "announce") {
+	chomp($tmp);
+	print $OUTPUT "$tmp<br>\n";
+}
+$tmp = <INPUT>;
+if ($dtype eq "announce") {
+	chomp($tmp);
+	print $OUTPUT "$tmp<br>\n";
+}
+
+my $first=1;
+
+# Handle each block separated by newline
+while (<INPUT>) {
+	($ver, $date) = split(/ /);
+	$ver =~ s/^v//;
+	chomp($date);
+	$date =~ s/\(([0-9-]+)\)/$1/;
+	pb_log(3,"**Date:$date**\n");
+	$ndate = UnixDate($date,"%a", "%b", "%d", "%Y");
+	$n2date = UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
+	pb_log(3,"**nDate:$ndate**\n");
+
+	pb_log(3,"**Ver:$ver**\n");
+	if ($ver !~ /-/) {
+		if ($first eq 1) {
+			$ver2 = "$ver-$pbtag";
+			$first = 0;
+		} else {
+			$ver2 = "$ver-1";
+		}
+	} else {
+		$ver2 = $ver;
+	}
+	pb_log(3,"**Ver2:$ver2**\n");
+
+	if (($dtype eq "rpm") || ($dtype eq "fc")) {
+		print $OUTPUT "* $ndate $pbpackager->{$ENV{'PBPROJ'}} $ver2\n";
+		print $OUTPUT "- Updated to $ver\n";
+		}
+	if ($dtype eq "deb") {
+		if ($ver2 !~ /^[0-9]/) {
+			# dpkg-deb doesn't accept non digit versions. 
+			# Prepending 0 in order to make updates easy hopefully
+			$ver2 =~ s/^/0/;
+		}
+		print $OUTPUT "$pbrealpkg ($ver2) unstable; urgency=low\n";
+		print $OUTPUT "\n";
+		}
+
+	$tmp = <INPUT>;	
+	while ($tmp !~ /^$/) {
+		if ($dtype eq "deb") {
+			$tmp =~ s/^- //;
+			print $OUTPUT "  * $tmp";
+		} elsif ($dtype eq "rpm") {
+			print $OUTPUT "$tmp";
+		} else {
+			chomp($tmp);
+			print $OUTPUT "$tmp<br>\n";
+		}
+		last if (eof(INPUT));
+		$tmp = <INPUT>;
+	}
+	print $OUTPUT "\n";
+
+	if ($dtype eq "deb") {
+		# Cf: http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog
+		print $OUTPUT " -- $pbpackager->{$ENV{'PBPROJ'}}  $n2date\n\n\n";
+		}
+
+	last if (eof(INPUT));
+	last if ($dtype eq "announce");
+}
+close(INPUT);
+pb_log(2,"Exiting pb_changelog\n");
+}
+
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+1;
Index: /0.11.2/pb/lib/ProjectBuilder/Env.pm
===================================================================
--- /0.11.2/pb/lib/ProjectBuilder/Env.pm	(revision 1257)
+++ /0.11.2/pb/lib/ProjectBuilder/Env.pm	(revision 1257)
@@ -0,0 +1,1223 @@
+#!/usr/bin/perl -w
+#
+# Project Builder Env module
+# Env subroutines brought by the the Project-Builder project
+# which can be easily used by pbinit scripts
+#
+# $Id$
+#
+# Copyright B. Cornec 2007
+# Provided under the GPL v2
+
+package ProjectBuilder::Env;
+
+use strict 'vars';
+use Data::Dumper;
+use English;
+use File::Basename;
+use File::stat;
+use POSIX qw(strftime);
+use lib qw (lib);
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Conf;
+use ProjectBuilder::CMS;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_env_init pb_env_init_pbrc);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Env, part of the project-builder.org
+
+=head1 DESCRIPTION
+
+This modules provides environment functions suitable for pbinit calls.
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_env_init_pbrc>
+
+This function setup/use the configuration file in the HOME directory
+It sets up environment variables (PBETC) 
+
+=cut
+
+sub pb_env_init_pbrc {
+
+# if sudo, then get the real id of the user laucnhing the context 
+# to point to the right conf file
+# Mandatory for rpmbootstrap calls
+my $dir;
+
+if (defined $ENV{'SUDO_USER'}) {
+	# Home dir is the 8th field in list context
+	$dir = (getpwnam($ENV{'SUDO_USER'}))[7];
+} else {
+	$dir = $ENV{'HOME'};
+}
+
+$ENV{'PBETC'} = "$dir/.pbrc";
+
+if (! -f $ENV{'PBETC'}) {
+	pb_log(0, "No existing $ENV{'PBETC'} found, creating one as template\n");
+	open(PBRC, "> $ENV{'PBETC'}") || die "Unable to create $ENV{'PBETC'}";
+	print PBRC << "EOF";
+#
+# Define for each project the URL of its pbconf repository
+# No default option allowed here as they need to be all different
+#
+#pbconfurl example = svn+ssh://svn.example.org/svn/pb/projects/example/pbconf
+#pbconfurl pb = svn+ssh://svn.project-builder.org/mondo/svn/pb/pbconf
+
+# Under that dir will take place everything related to pb
+# If you want to use VMs/chroot/..., then use \$ENV{'HOME'} to make it portable
+# to your VMs/chroot/...
+# if not defined then /var/cache
+#pbdefdir default = \$ENV{'HOME'}/pb/projects
+#pbdefdir pb = \$ENV{'HOME'}
+
+# If not defined, pbconfdir is under pbdefdir/pbproj/pbconf
+#pbconfdir pb = \$ENV{'HOME'}/pb/pbconf
+
+# If not defined, pbprojdir is under pbdefdir/pbproj
+# Only defined if we have access to the dev of the project
+#pbprojdir example = \$ENV{'HOME'}/example/svn
+
+# We have commit acces to these
+#pburl example = cvs+ssh://user\@example.cvs.sourceforge.net:/cvsroot/example
+#pburl pb = svn+ssh://svn.project-builder.org/mondo/svn/pb
+
+# I mask my real login on the ssh machines here
+#sshlogin example = user
+
+# where to find Build System infos:
+#vmpath default = /home/qemu
+#vepath default = /home/rpmbootstrap
+#rmpath default = /home/remote
+
+# Overwrite generic setup
+#vmport pb = 2223
+#vmport example = 2224
+EOF
+	}
+
+# We only have one configuration file for now.
+pb_conf_add("$ENV{'PBETC'}");
+}
+
+=item B<pb_env_init>
+
+This function setup the environment for project-builder.
+The first parameter is the project if given on the command line.
+The second parameter is a flag indicating whether we should setup up the pbconf environment or not.
+The third parameter is the action passed to pb.
+It sets up environement variables (PBETC, PBPROJ, PBDEFDIR, PBBUILDDIR, PBROOTDIR, PBDESTDIR, PBCONFDIR, PBPROJVER) 
+
+=cut
+
+sub pb_env_init {
+
+my $proj=shift || undef;
+my $pbinit=shift || undef;
+my $action=shift;
+my $ver;
+my $tag;
+
+pb_env_init_pbrc();
+
+#
+# Check project name
+# Could be with env var PBPROJ
+# or option -p
+# if not define take the first in conf file
+#
+if ((defined $ENV{'PBPROJ'}) &&
+	(not (defined $proj))) {
+	$proj = $ENV{'PBPROJ'};
+}
+
+#
+# We get the pbconf file for that project 
+# and use its content
+#
+my ($pbconf) = pb_conf_get("pbconfurl");
+pb_log(2,"DEBUG pbconfurl: ".Dumper($pbconf)."\n");
+
+my %pbconf = %$pbconf;
+if (not defined $proj) {
+	# Take the first as the default project
+	$proj = (keys %pbconf)[0];
+	if (defined $proj) {
+		pb_log(1,"WARNING: using $proj as default project as none has been specified\n");
+		pb_log(1,"         Please either create a pbconfurl reference for project $proj in $ENV{'PBETC'}\n");
+		pb_log(1,"         or call pb with the -p project option or use the env var PBPROJ\n");
+		pb_log(1,"         if you want to use another project\n");
+	}
+}
+die "No project defined - use env var PBPROJ or -p proj or a pbconfurl entry in $ENV{'PBETC'}" if (not (defined $proj));
+
+# That's always the environment variable that will be used
+$ENV{'PBPROJ'} = $proj;
+pb_log(2,"PBPROJ: $ENV{'PBPROJ'}\n");
+
+if (not defined ($pbconf{$ENV{'PBPROJ'}})) {
+	die "Please create a pbconfurl reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n";
+}
+
+# Adds a potential conf file now as it's less 
+# important than the project conf file
+my ($vmpath,$vepath,$rmpath) = pb_conf_get_if("vmpath","vepath","rmpath");
+pb_conf_add("$vmpath->{$ENV{'PBPROJ'}}/.pbrc") if ((defined $vmpath) && (-f "$vmpath->{$ENV{'PBPROJ'}}/.pbrc"));
+pb_conf_add("$vepath->{$ENV{'PBPROJ'}}/.pbrc") if ((defined $vepath) && (-f "$vepath->{$ENV{'PBPROJ'}}/.pbrc"));
+pb_conf_add("$rmpath->{$ENV{'PBPROJ'}}/.pbrc") if ((defined $rmpath) && (-f "$rmpath->{$ENV{'PBPROJ'}}/.pbrc"));
+
+#
+# Detect the root dir for hosting all the content generated with pb
+#
+=pod
+
+ Tree will look like this:
+
+             maint pbdefdir                         PBDEFDIR            dev dir (optional)
+                  |                                                        |
+            ------------------------                                --------------------
+            |                      |                                |                  |
+         pbproj1                pbproj2             PBPROJ       pbproj1           pbproj2   PBPROJDIR
+            |                                                       |
+  ---------------------------------------------                ----------
+  *      *        *       |        |          |                *        *
+ tag    dev    pbconf    ...     build     delivery PBCONFDIR dev      tag                  
+  |               |                           |     PBDESTDIR           |
+  ---          ------                        pbrc   PBBUILDDIR       -------
+    |          |    |                                                |     |
+   1.1        dev  tag                                              1.0   1.1                PBDIR
+                    |
+                 -------
+                 |     |
+                1.0   1.1                           PBROOTDIR
+                       |
+               ----------------------------------
+               |          |           |         |
+             pkg1      pbproj1.pb   pbfilter   pbcl
+               |
+        -----------------
+        |      |        |
+       rpm    deb    pbfilter
+
+
+ (*) By default, if no relocation in .pbrc, dev dir is taken in the maint pbdefdir (when appropriate)
+ Names under a pbproj and the corresponding pbconf should be similar
+
+=back 
+
+=cut
+
+my ($pbdefdir) = pb_conf_get_if("pbdefdir");
+
+if (not defined $ENV{'PBDEFDIR'}) {
+	if ((not defined $pbdefdir) || (not defined $pbdefdir->{$ENV{'PBPROJ'}})) {
+		pb_log(1,"WARNING: no pbdefdir defined, using /var/cache\n");
+		pb_log(1,"         Please create a pbdefdir reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n");
+		pb_log(1,"         if you want to use another directory\n");
+		$ENV{'PBDEFDIR'} = "/var/cache";
+	} else {
+		# That's always the environment variable that will be used
+		$ENV{'PBDEFDIR'} = $pbdefdir->{$ENV{'PBPROJ'}};
+	}
+}
+# Expand potential env variable in it
+eval { $ENV{'PBDEFDIR'} =~ s/(\$ENV.+\})/$1/eeg };
+
+pb_log(2,"PBDEFDIR: $ENV{'PBDEFDIR'}\n");
+
+# Need to do that earlier as it's used potentialy in pb_cms_add
+pb_temp_init();
+pb_log(2,"PBTMP: $ENV{'PBTMP'}\n");
+
+# Put under CMS the PBPROJ dir
+if ($action =~ /^newproj$/) {
+	if (! -d "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}") {
+		# TODO: There is also the need to do 
+		# svn import "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}" svn://repo
+		# in case it doesn't exist there
+		pb_mkdir_p("$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}");
+	}
+	pb_cms_add($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}");
+}
+
+#
+# Set delivery directory
+#
+$ENV{'PBDESTDIR'}="$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/delivery";
+
+pb_log(2,"PBDESTDIR: $ENV{'PBDESTDIR'}\n");
+#
+# Removes all directory existing below the delivery dir 
+# as they are temp dir only except when called from pbinit
+# Files stay and have to be cleaned up manually if needed
+# those files serves as communication channels between pb phases
+# Removing them prevents a following phase to detect what has been done before
+#
+if ((-d $ENV{'PBDESTDIR'}) && ($action !~ /pbinit/)) {
+	opendir(DIR,$ENV{'PBDESTDIR'}) || die "Unable to open directory $ENV{'PBDESTDIR'}: $!";
+	foreach my $d (readdir(DIR)) {
+		next if ($d =~ /^\./);
+		next if (-f "$ENV{'PBDESTDIR'}/$d");
+		pb_rm_rf("$ENV{'PBDESTDIR'}/$d") if (-d "$ENV{'PBDESTDIR'}/$d");
+	}
+	closedir(DIR);
+}
+if (! -d "$ENV{'PBDESTDIR'}") {
+	pb_mkdir_p($ENV{'PBDESTDIR'});
+}
+
+#
+# Set build directory
+#
+$ENV{'PBBUILDDIR'}="$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/build";
+if (! -d "$ENV{'PBBUILDDIR'}") {
+	pb_mkdir_p($ENV{'PBBUILDDIR'});
+}
+
+pb_log(2,"PBBUILDDIR: $ENV{'PBBUILDDIR'}\n");
+
+return if ($action =~ /^clean$/);
+#
+# The following part is only useful when in sbx|cms2something or newsomething
+# In VMs/VEs/RMs we want to skip that by providing good env vars.
+# return values in that case are useless
+#
+
+if (($action =~ /^cms2/) || ($action =~ /^sbx2/) || ($action =~ /^newver$/) || ($action =~ /pbinit/) || ($action =~ /^newproj$/) || ($action =~ /^announce/)) {
+
+	#
+	# Check pbconf cms compliance
+	#
+	pb_cms_compliant("pbconfdir",'PBCONFDIR',"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/pbconf",$pbconf{$ENV{'PBPROJ'}},$pbinit);
+
+	# Check where is our PBROOTDIR (release tag name can't be guessed the first time)
+	#
+	if (not defined $ENV{'PBROOTDIR'}) {
+		if (! -f ("$ENV{'PBDESTDIR'}/pbrc")) {
+			$ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}";
+			pb_log(1,"WARNING: no pbroot defined, using $ENV{'PBROOTDIR'}\n");
+			pb_log(1,"         Please use -r release if you want to use another release\n");
+			die "No directory found under $ENV{'PBCONFDIR'}" if (not defined $ENV{'PBROOTDIR'});
+		} else {
+			my ($pbroot) = pb_conf_read_if("$ENV{'PBDESTDIR'}/pbrc","pbroot");
+			# That's always the environment variable that will be used
+			die "Please remove inconsistent $ENV{'PBDESTDIR'}/pbrc" if ((not defined $pbroot) || (not defined $pbroot->{$ENV{'PBPROJ'}}));
+			$ENV{'PBROOTDIR'} = $pbroot->{$ENV{'PBPROJ'}};
+		}
+	} else {
+		# transform in full path if relative
+		$ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}/$ENV{'PBROOTDIR'}" if ($ENV{'PBROOTDIR'} !~ /^\//);
+		pb_mkdir_p($ENV{'PBROOTDIR'}) if (defined $pbinit);
+		die "$ENV{'PBROOTDIR'} is not a directory" if (not -d $ENV{'PBROOTDIR'});
+	}
+
+	# Adds that conf file to the list to consider
+	pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb");
+
+	return if ($action =~ /^newver$/);
+
+	my %version = ();
+	my %defpkgdir = ();
+	my %extpkgdir = ();
+	my %filteredfiles = ();
+	my %supfiles = ();
+	
+	if ((-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") and (not defined $pbinit)) {
+
+		# List of pkg to build by default (mandatory)
+		# TODO: projtag could be with a 1 default value
+		my ($defpkgdir,$pbpackager, $pkgv, $pkgt) = pb_conf_get("defpkgdir","pbpackager","projver","projtag");
+		# List of additional pkg to build when all is called (optional)
+		# Valid version names (optional)
+		# List of files to filter (optional)
+		# Project version and tag (optional)
+		my ($extpkgdir, $version, $filteredfiles, $supfiles) = pb_conf_get_if("extpkgdir","version","filteredfiles","supfiles");
+		pb_log(2,"DEBUG: defpkgdir: ".Dumper($defpkgdir)."\n");
+		pb_log(2,"DEBUG: extpkgdir: ".Dumper($extpkgdir)."\n");
+		pb_log(2,"DEBUG: version: ".Dumper($version)."\n");
+		pb_log(2,"DEBUG: filteredfiles: ".Dumper($filteredfiles)."\n");
+		pb_log(2,"DEBUG: supfiles: ".Dumper($supfiles)."\n");
+		# Global
+		%defpkgdir = %$defpkgdir;
+		%extpkgdir = %$extpkgdir if (defined $extpkgdir);
+		%version = %$version if (defined $version);
+		%filteredfiles = %$filteredfiles if (defined $filteredfiles);
+		%supfiles = %$supfiles if (defined $supfiles);
+		#
+		# Get global Version/Tag
+		#
+		if (not defined $ENV{'PBPROJVER'}) {
+			if ((defined $pkgv) && (defined $pkgv->{$ENV{'PBPROJ'}})) {
+				$ENV{'PBPROJVER'}=$pkgv->{$ENV{'PBPROJ'}};
+			} else {
+				die "No projver found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
+			}
+		}
+		die "Invalid version name $ENV{'PBPROJVER'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb" if (($ENV{'PBPROJVER'} !~ /[0-9.]+/) && (not defined $version) && ($ENV{'PBPROJVER'} =~ /$version{$ENV{'PBPROJ'}}/));
+		
+		if (not defined $ENV{'PBPROJTAG'}) {
+			if ((defined $pkgt) && (defined $pkgt->{$ENV{'PBPROJ'}})) {
+				$ENV{'PBPROJTAG'}=$pkgt->{$ENV{'PBPROJ'}};
+			} else {
+				die "No projtag found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
+			}
+		}
+		die "Invalid tag name $ENV{'PBPROJTAG'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb" if ($ENV{'PBPROJTAG'} !~ /[0-9.]+/);
+	
+	
+		if (not defined $ENV{'PBPACKAGER'}) {
+			if ((defined $pbpackager) && (defined $pbpackager->{$ENV{'PBPROJ'}})) {
+				$ENV{'PBPACKAGER'}=$pbpackager->{$ENV{'PBPROJ'}};
+			} else {
+				die "No pbpackager found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
+			}
+		}
+	} else {
+		if (defined $pbinit) {
+			my @pkgs = @ARGV;
+			@pkgs = ("pkg1") if (not @pkgs);
+	
+			open(CONF,"> $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") || die "Unable to create $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
+			print CONF << "EOF";
+#
+# Project Builder configuration file
+# For project $ENV{'PBPROJ'}
+#
+# \$Id\$
+#
+
+#
+# What is the project URL
+#
+#pburl $ENV{'PBPROJ'} = svn://svn.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
+#pburl $ENV{'PBPROJ'} = svn://svn+ssh.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
+#pburl $ENV{'PBPROJ'} = cvs://cvs.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
+#pburl $ENV{'PBPROJ'} = http://www.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
+#pburl $ENV{'PBPROJ'} = ftp://ftp.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
+#pburl $ENV{'PBPROJ'} = file:///src/$ENV{'PBPROJ'}-devel.tar.gz
+#pburl $ENV{'PBPROJ'} = dir:///src/$ENV{'PBPROJ'}-devel
+
+# Repository
+#pbrepo $ENV{'PBPROJ'} = ftp://ftp.$ENV{'PBPROJ'}.org
+#pbml $ENV{'PBPROJ'} = $ENV{'PBPROJ'}-announce\@lists.$ENV{'PBPROJ'}.org
+#pbsmtp $ENV{'PBPROJ'} = localhost
+
+# Check whether project is well formed 
+# when downloading from ftp/http/...
+# (containing already a directory with the project-version name)
+#pbwf $ENV{'PBPROJ'} = 1
+
+#
+# Packager label
+#
+#pbpackager $ENV{'PBPROJ'} = William Porte <bill\@$ENV{'PBPROJ'}.org>
+#
+
+# For delivery to a machine by SSH (potentially the FTP server)
+# Needs hostname, account and directory
+#
+#sshhost $ENV{'PBPROJ'} = www.$ENV{'PBPROJ'}.org
+#sshlogin $ENV{'PBPROJ'} = bill
+#sshdir $ENV{'PBPROJ'} = /$ENV{'PBPROJ'}/ftp
+#sshport $ENV{'PBPROJ'} = 22
+
+#
+# For Virtual machines management
+# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
+# followed by '-' and by release number
+# followed by '-' and by architecture
+# a .vmtype extension will be added to the resulting string
+# a QEMU rhel-3-i286 here means that the VM will be named rhel-3-i386.qemu
+#
+#vmlist $ENV{'PBPROJ'} = mandrake-10.1-i386,mandrake-10.2-i386,mandriva-2006.0-i386,mandriva-2007.0-i386,mandriva-2007.1-i386,mandriva-2008.0-i386,redhat-7.3-i386,redhat-9-i386,fedora-4-i386,fedora-5-i386,fedora-6-i386,fedora-7-i386,fedora-8-i386,rhel-3-i386,rhel-4-i386,rhel-5-i386,suse-10.0-i386,suse-10.1-i386,suse-10.2-i386,suse-10.3-i386,sles-9-i386,sles-10-i386,gentoo-nover-i386,debian-3.1-i386,debian-4.0-i386,ubuntu-6.06-i386,ubuntu-7.04-i386,ubuntu-7.10-i386,mandriva-2007.0-x86_64,mandriva-2007.1-x86_64,mandriva-2008.0-x86_64,fedora-6-x86_64,fedora-7-x86_64,fedora-8-x86_64,rhel-4-x86_64,rhel-5-x86_64,suse-10.2-x86_64,suse-10.3-x86_64,sles-10-x86_64,gentoo-nover-x86_64,debian-4.0-x86_64,ubuntu-7.04-x86_64,ubuntu-7.10-x86_64,solaris-10-x86_64
+
+#
+# Valid values for vmtype are
+# qemu, (vmware, xen, ... TBD)
+#vmtype $ENV{'PBPROJ'} = qemu
+
+# Hash for VM stuff on vmtype
+#vmntp default = pool.ntp.org
+
+# We suppose we can commmunicate with the VM through SSH
+#vmhost $ENV{'PBPROJ'} = localhost
+#vmlogin $ENV{'PBPROJ'} = pb
+#vmport $ENV{'PBPROJ'} = 2222
+
+# Timeout to wait when VM is launched/stopped
+#vmtmout default = 120
+
+# per VMs needed paramaters
+#vmopt $ENV{'PBPROJ'} = -m 384 -daemonize
+#vmpath $ENV{'PBPROJ'} = /home/qemu
+#vmsize $ENV{'PBPROJ'} = 5G
+
+# 
+# For Virtual environment management
+# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
+# followed by '-' and by release number
+# followed by '-' and by architecture
+# a .vetype extension will be added to the resulting string
+# a chroot rhel-3-i286 here means that the VE will be named rhel-3-i386.chroot
+#
+#velist $ENV{'PBPROJ'} = fedora-7-i386
+
+# VE params
+#vetype $ENV{'PBPROJ'} = chroot
+#ventp default = pool.ntp.org
+#velogin $ENV{'PBPROJ'} = pb
+#vepath $ENV{'PBPROJ'} = /var/cache/rpmbootstrap
+#rbsconf $ENV{'PBPROJ'} = /etc/mock
+#verebuild $ENV{'PBPROJ'} = false
+
+#
+# Global version/tag for the project
+#
+#projver $ENV{'PBPROJ'} = devel
+#projtag $ENV{'PBPROJ'} = 1
+
+# Hash of valid version names
+
+# Additional repository to add at build time
+# addrepo centos-5-x86_64 = http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/5/pb.repo
+# addrepo centos-5-x86_64 = http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/5/pb.repo
+#version $ENV{'PBPROJ'} = devel,stable
+
+# Is it a test version or a production version
+testver $ENV{'PBPROJ'} = true
+# Which upper target dir for delivery
+delivery $ENV{'PBPROJ'} = test
+
+# Additional repository to add at build time
+# addrepo centos-5-x86_64 = http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/5/pb.repo
+# addrepo centos-4-x86_64 = http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/4/pb.repo
+
+# Adapt to your needs:
+# Optional if you need to overwrite the global values above
+#
+EOF
+		
+			foreach my $pp (@pkgs) {
+				print CONF << "EOF";
+#pkgver $pp = stable
+#pkgtag $pp = 3
+EOF
+			}
+			foreach my $pp (@pkgs) {
+				print CONF << "EOF";
+# Hash of default package/package directory
+#defpkgdir $pp = dir-$pp
+EOF
+			}
+	
+			print CONF << "EOF";
+# Hash of additional package/package directory
+#extpkgdir minor-pkg = dir-minor-pkg
+
+# List of files per pkg on which to apply filters
+# Files are mentioned relatively to pbroot/defpkgdir
+EOF
+			foreach my $pp (@pkgs) {
+				print CONF << "EOF";
+#filteredfiles $pp = Makefile.PL,configure.in,install.sh,$pp.8
+#supfiles $pp = $pp.init
+
+# For perl modules, names are different depending on distro
+# Here perl-xxx for RPMs, libxxx-perl for debs, ...
+# So the package name is indeed virtual
+#namingtype $pp = perl
+EOF
+			}
+			close(CONF);
+			pb_mkdir_p("$ENV{'PBROOTDIR'}/pbfilter");
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/all.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/all.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for all files
+#
+#
+# PBREPO is replaced by the root URL to access the repository
+filter PBREPO = \$pb->{'repo'}
+
+# PBSRC is replaced by the source package location after the repo
+#filter PBSRC = src/%{name}-%{version}.tar.gz
+# Used if virtual name != real name (perl, ...)
+#filter PBSRC = src/%{srcname}-%{version}.tar.gz
+
+# PBVER is replaced by the version (\$pb->{'ver'} in code)
+filter PBVER = \$pb->{'ver'}
+
+# PBDATE is replaced by the date (\$pb->{'date'} in code)
+filter PBDATE = \$pb->{'date'}
+
+# PBPATCHSRC is replaced by the patches names if value is yes. Patches are located under the pbpatch dir of the pkg.
+#filter PBPATCHSRC = yes
+
+# PBPATCHCMD is replaced by the patches commands if value is yes
+#filter PBPATCHCMD = yes
+
+# PBMULTISRC is replaced by the sources names if value is yes. Sources are located under the pbsrc dir of the pkg.
+#filter PBMULTISRC = yes
+
+# PBTAG is replaced by the tag (\$pb->{'tag'} in code)
+filter PBTAG = \$pb->{'tag'}
+
+# PBREV is replaced by the revision (\$pb->{'rev'} in code)
+filter PBREV = \$pb->{'rev'}
+
+# PBREALPKG is replaced by the package name (\$pb->{'realpkg'} in code)
+filter PBREALPKG = \$pb->{'realpkg'}
+
+# PBPKG is replaced by the package name (\$pb->{'pkg'} in code)
+filter PBPKG = \$pb->{'pkg'}
+
+# PBPROJ is replaced by the project name (\$pb->{'proj'} in code)
+filter PBPROJ = \$pb->{'proj'}
+
+# PBPACKAGER is replaced by the packager name (\$pb->{'packager'} in code)
+filter PBPACKAGER = \$pb->{'packager'}
+
+# PBDESC contains the description of the package
+#filter PBDESC = Bla-Bla
+
+# PBSUMMARY contains a short single line description of the package
+#filter PBSUMMARY = Bla
+
+# PBURL contains the URL of the Web site of the project
+#filter PBURL = http://www.$ENV{'PBPROJ'}.org
+
+# PBLOG is replaced by the changelog if value is yes
+# and should be last as when used we need the %pb hash filled
+#filter PBLOG = yes
+
+EOF
+			close(CONF);
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for rpm build
+#
+
+# PBGRP is replaced by the RPM group of apps
+#filter PBGRP = Applications/Archiving
+
+# PBLIC is replaced by the license of the application
+#filter PBLIC = GPL
+
+# PBDEP is replaced by the list of dependencies
+#filter PBDEP =
+
+# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
+filter PBSUF = \$pb->{'suf'}
+
+# PBOBS is replaced by the Obsolete line
+#filter PBOBS =
+
+EOF
+			close(CONF);
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/fedora.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/fedora.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for rpm build
+#
+
+# PBGRP is replaced by the RPM group of apps
+# Cf: http://fedoraproject.org/wiki/RPMGroups
+#filter PBGRP = Applications/Archiving
+
+# PBLIC is replaced by the license of the application
+# Cf: http://fedoraproject.org/wiki/Licensing
+#filter PBLIC = GPLv2+
+
+# PBDEP is replaced by the list of dependencies
+#filter PBDEP =
+
+# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
+filter PBSUF = %{dist}
+
+# PBOBS is replaced by the Obsolete line
+#filter PBOBS =
+
+EOF
+			close(CONF);
+			foreach my $i (1..7) {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/fedora-$i.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/fedora-$i.pbf";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for old fedora build
+#
+
+# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
+filter PBSUF = \$pb->{'suf'}
+
+EOF
+				close(CONF);
+			}
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/deb.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/deb.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for debian build
+#
+# PBGRP is replaced by the group of apps
+filter PBGRP = utils
+
+# PBLIC is replaced by the license of the application
+# Cf: http://www.debian.org/legal/licenses/
+#filter PBLIC = GPL
+
+# PBDEP is replaced by the list of dependencies
+#filter PBDEP =
+
+# PBSUG is replaced by the list of suggestions
+#filter PBSUG =
+
+# PBREC is replaced by the list of recommandations
+#filter PBREC =
+
+EOF
+			close(CONF);
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-4.0.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-4.0.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for debian build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.6.1
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 5
+
+EOF
+			close(CONF);
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-5.0.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-5.0.pbf";
+			print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for debian build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.8.0
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 7
+
+EOF
+			close(CONF);
+			# 6?
+			foreach my $ubv ("debian.pbf") {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for debian build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.8.0
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 7
+
+EOF
+				close(CONF);
+			}
+			foreach my $ubv ("ubuntu-6.06.pbf","ubuntu-7.04.pbf","ubuntu-7.10.pbf") {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for ubuntu build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.6.2
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 4
+
+EOF
+				close(CONF);
+			}
+			foreach my $ubv ("ubuntu-8.04.pbf","ubuntu-8.10.pbf") {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for ubuntu build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.7.3
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 4
+
+EOF
+				close(CONF);
+			}
+			foreach my $ubv ("ubuntu-9.04.pbf") {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for ubuntu build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.8.0
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 4
+
+EOF
+				close(CONF);
+			}
+			# 9.10, 10.04, 10.10
+			foreach my $ubv ("ubuntu.pbf") {
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for ubuntu build
+#
+# PBDEBSTD is replaced by the Debian standard version
+filter PBDEBSTD = 3.8.3
+
+# PBDEBCOMP is replaced by the Debian Compatibility value
+filter PBDEBCOMP = 7
+
+EOF
+				close(CONF);
+			}
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/md.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/md.pbf";
+			print CONF << "EOF";
+# Specific group for Mandriva for $ENV{'PBPROJ'}
+# Cf: http://wiki.mandriva.com/en/Development/Packaging/Groups
+#filter PBGRP = Archiving/Backup
+
+# PBLIC is replaced by the license of the application
+# Cf: http://wiki.mandriva.com/en/Development/Packaging/Licenses
+#filter PBLIC = GPL
+
+EOF
+			close(CONF);
+			open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/novell.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/novell.pbf";
+			print CONF << "EOF";
+# Specific group for SuSE for $ENV{'PBPROJ'}
+# Cf: http://en.opensuse.org/SUSE_Package_Conventions/RPM_Groups
+#filter PBGRP = Productivity/Archiving/Backup
+
+# PBLIC is replaced by the license of the application
+# Cf: http://en.opensuse.org/Packaging/SUSE_Package_Conventions/RPM_Style#1.6._License_Tag
+#filter PBLIC = GPL
+
+EOF
+			close(CONF);
+			foreach my $pp (@pkgs) {
+				pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/deb");
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/control") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/control";
+				print CONF << "EOF";
+Source: PBPKG
+# http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
+Section: PBGRP
+Priority: optional
+Maintainer: PBPACKAGER
+Build-Depends: debhelper (>= 4.2.20), PBDEP
+Standards-Version: PBDEBSTD
+Vcs-Svn: svn://svn.PBPROJ.org/svn/PBVER/PBPKG
+Vcs-Browser: http://trac.PBPROJ.org/browser/PBVER/PBPKG
+Homepage: PBURL
+
+Package: PBPKG
+Architecture: amd64 i386 ia64
+# http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
+Section: PBGRP
+Priority: optional
+Depends: \${shlibs:Depends}, \${misc:Depends}, PBDEP
+Recommends: PBREC
+Suggests: PBSUG
+Description: PBSUMMARY
+ PBDESC
+ .
+
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/copyright") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/copyright";
+				print CONF << "EOF";
+This package is debianized by PBPACKAGER
+`date`
+
+The current upstream source was downloaded from
+PBREPO.
+
+Upstream Authors: Put their name here
+
+Copyright:
+
+   This package is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; version 2 dated June, 1991.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+   MA 02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in /usr/share/common-licenses/GPL.
+
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/changelog") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/changelog";
+				print CONF << "EOF";
+PBLOG
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/compat") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/compat";
+				print CONF << "EOF";
+PBDEBCOMP
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs";
+				print CONF << "EOF";
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs";
+				print CONF << "EOF";
+INSTALL
+COPYING
+AUTHORS
+NEWS
+README
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/rules") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/rules";
+				print CONF << 'EOF';
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+#
+# $Id$
+#
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# Define package name variable for a one-stop change.
+PACKAGE_NAME = PBPKG
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -O0
+else
+	CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+config.status: configure
+	dh_testdir
+
+	# Configure the package.
+	CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr
+ --mandir=\$${prefix}/share/man
+
+# Build both architecture dependent and independent
+build: build-arch build-indep
+
+# Build architecture dependent
+build-arch: build-arch-stamp
+
+build-arch-stamp:  config.status
+	dh_testdir
+
+	# Compile the package.
+	$(MAKE)
+
+	touch build-stamp
+
+# Build architecture independent
+build-indep: build-indep-stamp
+
+build-indep-stamp:  config.status
+	# Nothing to do, the only indep item is the manual which is available as html in original source
+	touch build-indep-stamp
+
+# Clean up
+clean:
+	dh_testdir
+	dh_testroot
+	rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP#
+	# Clean temporary document directory
+	rm -rf debian/doc-temp
+	# Clean up.
+	-$(MAKE) distclean
+	rm -f config.log
+ifneq "$(wildcard /usr/share/misc/config.sub)" ""
+	cp -f /usr/share/misc/config.sub config.sub
+endif
+ifneq "$(wildcard /usr/share/misc/config.guess)" ""
+	cp -f /usr/share/misc/config.guess config.guess
+endif
+
+	dh_clean
+
+# Install architecture dependent and independent
+install: install-arch install-indep
+
+# Install architecture dependent
+install-arch: build-arch
+	dh_testdir
+	dh_testroot
+	dh_clean -k -s
+	dh_installdirs -s
+
+	# Install the package files into build directory:
+	# - start with upstream make install
+	$(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE_NAME)/usr mandir=$(CURDIR)/debian/$(PACKAGE_NAME)/usr/share/man
+	# - copy html manual to temporary location for renaming
+	mkdir -p debian/doc-temp
+	dh_install -s
+
+# Install architecture independent
+install-indep: build-indep
+	dh_testdir
+	dh_testroot
+	dh_clean -k -i
+	dh_installdirs -i
+	dh_install -i
+
+# Must not depend on anything. This is to be called by
+# binary-arch/binary-indep
+# in another 'make' thread.
+binary-common:
+	dh_testdir
+	dh_testroot
+	dh_installchangelogs ChangeLog
+	dh_installdocs
+	dh_installman
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+# Build architecture independant packages using the common target.
+binary-indep: build-indep install-indep
+	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
+
+# Build architecture dependant packages using the common target.
+binary-arch: build-arch install-arch
+	$(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
+
+# Build architecture depdendent and independent packages
+binary: binary-arch binary-indep
+.PHONY: clean binary
+
+EOF
+				close(CONF);
+				pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/rpm");
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec";
+				print CONF << 'EOF';
+#
+# $Id$
+#
+# Used if virtual name != real name (perl, ...) - replace hash by percent in the below line
+#define srcname	PBPKG
+
+Summary:        PBSUMMARY
+Summary(fr):    french bla-bla
+
+Name:           PBREALPKG
+Version:        PBVER
+Release:        PBTAGPBSUF
+License:        PBLIC
+Group:          PBGRP
+Url:            PBURL
+Source:         PBREPO/PBSRC
+#PBPATCHSRC
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
+#Requires:       PBDEP
+
+%description
+PBDESC
+
+%description -l fr
+french desc
+
+%prep
+%setup -q
+# Used if virtual name != real name (perl, ...)
+#%setup -q -n %{srcname}-%{version}
+#PBPATCHCMD
+
+%build
+%configure
+make %{?_smp_mflags}
+
+%install
+%{__rm} -rf $RPM_BUILD_ROOT
+make DESTDIR=$RPM_BUILD_ROOT install
+
+%clean
+%{__rm} -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc ChangeLog
+%doc INSTALL COPYING README AUTHORS NEWS
+
+%changelog
+PBLOG
+
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/pkg.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/pkg.pbf";
+				print CONF << "EOF";
+#
+# \$Id\$
+#
+# Filter for pkg build
+#
+# Solaris package name (VENDOR : 4 letters in uppercase, SOFT : 8 letters in lowercase)
+filter PBSOLPKG = SUNWsoftware
+
+EOF
+				close(CONF);
+				pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pbfilter");
+				pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pkg");
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/pkginfo") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/pkginfo";
+				print CONF << 'EOF';
+#
+# $Id$
+#
+PKG="PBSOLPKG"
+NAME="PBREALPKG"
+VERSION="PBVER"
+# all or i386
+ARCH="all"
+CATEGORY="application"
+DESC="PBSUMMARY"
+EMAIL="PBPACKAGER"
+VENDOR="PBPACKAGER"
+HOTLINE="PBURL"
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/pbbuild") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/pbbuild";
+				print CONF << 'EOF';
+#
+# $Id$
+#
+#perl Makefile.PL INSTALLDIRS=vendor
+./configure --prefix=/usr
+make
+make install DESTDIR=\$1
+EOF
+				close(CONF);
+				open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/depend") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/depend";
+				print CONF << 'EOF';
+#
+# $Id$
+#
+#P SUNWperl584core       Perl 5.8.4 (core)
+EOF
+				close(CONF);
+	
+			}
+			pb_cms_add($pbconf{$ENV{'PBPROJ'}},$ENV{'PBCONFDIR'});
+			pb_cms_checkin($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}",$pbinit);
+		} else {
+			pb_log(0,"ERROR: no pbroot defined, used $ENV{'PBROOTDIR'}, without finding $ENV{'PBPROJ'}.pb in it\n");
+			pb_log(0,"       Please use -r release in order to be able to initialize your environment correctly\n");
+			die "Unable to open $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
+		}
+	}
+	umask 0022;
+	return(\%filteredfiles, \%supfiles, \%defpkgdir, \%extpkgdir);
+} else {
+	# Setup the variables from what has been stored at the end of cms2build
+	my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbroot");
+	$ENV{'PBROOTDIR'} = $var->{$ENV{'PBPROJ'}};
+
+	($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projver");
+	$ENV{'PBPROJVER'} = $var->{$ENV{'PBPROJ'}};
+
+	($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projtag");
+	$ENV{'PBPROJTAG'} = $var->{$ENV{'PBPROJ'}};
+
+	($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbpackager");
+	$ENV{'PBPACKAGER'} = $var->{$ENV{'PBPROJ'}};
+
+	return;
+}
+}
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+1;
Index: /0.11.2/pb/lib/ProjectBuilder/CMS.pm
===================================================================
--- /0.11.2/pb/lib/ProjectBuilder/CMS.pm	(revision 1208)
+++ /0.11.2/pb/lib/ProjectBuilder/CMS.pm	(revision 1208)
@@ -0,0 +1,950 @@
+#!/usr/bin/perl -w
+#
+# Project Builder CMS module
+# CMS subroutines brought by the the Project-Builder project
+# which can be easily used by pbinit scripts
+#
+# $Id$
+#
+# Copyright B. Cornec 2007
+# Provided under the GPL v2
+
+package ProjectBuilder::CMS;
+
+use strict 'vars';
+use Data::Dumper;
+use English;
+use File::Basename;
+use File::Copy;
+use POSIX qw(strftime);
+use lib qw (lib);
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Conf;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_cms_init pb_cms_export pb_cms_get_uri pb_cms_copy pb_cms_checkout pb_cms_up pb_cms_checkin pb_cms_isdiff pb_cms_get_pkg pb_cms_get_real_pkg pb_cms_compliant pb_cms_log pb_cms_add);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::CMS, part of the project-builder.org
+
+=head1 DESCRIPTION
+
+This modules provides configuration management system functions suitable for pbinit calls.
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_cms_init>
+
+This function setup the environment for the CMS system related to the URL given by the pburl configuration parameter.
+The potential parameter indicates whether we should inititate the context or not.
+It sets up environement variables (PBPROJDIR, PBDIR, PBREVISION, PBCMSLOGFILE) 
+
+=cut
+
+sub pb_cms_init {
+
+my $pbinit = shift || undef;
+my $param = shift || undef;
+
+my ($pburl) = pb_conf_get("pburl");
+pb_log(2,"DEBUG: Project URL of $ENV{'PBPROJ'}: $pburl->{$ENV{'PBPROJ'}}\n");
+my ($scheme, $account, $host, $port, $path) = pb_get_uri($pburl->{$ENV{'PBPROJ'}});
+my $vcscmd = pb_cms_cmd($scheme);
+
+my ($pbprojdir) = pb_conf_get_if("pbprojdir");
+
+if ((defined $pbprojdir) && (defined $pbprojdir->{$ENV{'PBPROJ'}})) {
+	$ENV{'PBPROJDIR'} = $pbprojdir->{$ENV{'PBPROJ'}};
+} else {
+	$ENV{'PBPROJDIR'} = "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}";
+}
+# Expand potential env variable in it to allow string replacement
+eval { $ENV{'PBPROJDIR'} =~ s/(\$ENV.+\})/$1/eeg };
+
+
+# Computing the default dir for PBDIR.
+# what we have is PBPROJDIR so work from that.
+# Tree identical between PBCONFDIR and PBROOTDIR on one side and
+# PBPROJDIR and PBDIR on the other side.
+
+my $tmp = $ENV{'PBROOTDIR'};
+$tmp =~ s|^$ENV{'PBCONFDIR'}/||;
+
+#
+# Check project cms compliance
+#
+my $turl = "$pburl->{$ENV{'PBPROJ'}}/$tmp";
+$turl = $pburl->{$ENV{'PBPROJ'}} if (($scheme =~ /^file/) || ($scheme =~ /^(ht|f)tp/));
+pb_cms_compliant(undef,'PBDIR',"$ENV{'PBPROJDIR'}/$tmp",$turl,$pbinit);
+
+
+if ($scheme =~ /^hg/) {
+	$tmp = `(cd "$ENV{'PBDIR'}" ; $vcscmd identify )`;
+	chomp($tmp);
+	$tmp =~ s/^.* //;
+	$ENV{'PBREVISION'}=$tmp;
+	$ENV{'PBCMSLOGFILE'}="hg.log";
+} elsif ($scheme =~ /^git/) {
+	$tmp = `(cd "$ENV{'PBDIR'}" ; $vcscmd log | head -1 | cut -f2)`;
+	chomp($tmp);
+	$tmp =~ s/^.* //;
+	$ENV{'PBREVISION'}=$tmp;
+	$ENV{'PBCMSLOGFILE'}="git.log";
+} elsif (($scheme =~ /^file/) || ($scheme eq "ftp") || ($scheme eq "http")) {
+	$ENV{'PBREVISION'}="flat";
+	$ENV{'PBCMSLOGFILE'}="flat.log";
+} elsif ($scheme =~ /^svn/) {
+	# svnversion more precise than svn info if sbx
+	if ((defined $param) && ($param eq "CMS")) {
+		$tmp = `(LANGUAGE=C $vcscmd info $pburl->{$ENV{'PBPROJ'}} | grep -E '^Revision:' | cut -d: -f2)`;
+		$tmp =~ s/\s+//;
+	} else {
+		$tmp = `(cd "$ENV{'PBDIR'}" ; $vcscmd"version" .)`;
+	}
+	chomp($tmp);
+	$ENV{'PBREVISION'}=$tmp;
+	$ENV{'PBCMSLOGFILE'}="svn.log";
+} elsif ($scheme =~ /^svk/) {
+	$tmp = `(cd "$ENV{'PBDIR'}" ; LANGUAGE=C $vcscmd info . | grep -E '^Revision:' | cut -d: -f2)`;
+	$tmp =~ s/\s+//;
+	chomp($tmp);
+	$ENV{'PBREVISION'}=$tmp;
+	$ENV{'PBCMSLOGFILE'}="svk.log";
+} elsif ($scheme =~ /^cvs/) {
+	# Way too slow
+	#$ENV{'PBREVISION'}=`(cd "$ENV{'PBROOTDIR'}" ; cvs rannotate  -f . 2>&1 | awk '{print \$1}' | grep -E '^[0-9]' | cut -d. -f2 |sort -nu | tail -1)`;
+	#chomp($ENV{'PBREVISION'});
+	$ENV{'PBREVISION'}="cvs";
+	$ENV{'PBCMSLOGFILE'}="cvs.log";
+	$ENV{'CVS_RSH'} = "ssh" if ($scheme =~ /ssh/);
+} else {
+	die "cms $scheme unknown";
+}
+
+pb_log(1,"pb_cms_init returns $scheme,$pburl->{$ENV{'PBPROJ'}}\n");
+return($scheme,$pburl->{$ENV{'PBPROJ'}});
+}
+
+=item B<pb_cms_export>
+
+This function exports a CMS content to a directory.
+The first parameter is the URL of the CMS content.
+The second parameter is the directory in which it is locally exposed (result of a checkout). If undef, then use the original CMS content.
+The third parameter is the directory where we want to deliver it (result of export).
+It returns the original tar file if we need to preserve it and undef if we use the produced one.
+
+=cut
+
+sub pb_cms_export {
+
+my $uri = shift;
+my $source = shift;
+my $destdir = shift;
+my $tmp;
+my $tmp1;
+
+pb_log(1,"pb_cms_export uri: $uri - destdir: $destdir\n");
+pb_log(1,"pb_cms_export source: $source\n") if (defined $source);
+my @date = pb_get_date();
+# If it's not flat, then we have a real uri as source
+my ($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+my $vcscmd = pb_cms_cmd($scheme);
+$uri = pb_cms_mod_socks($uri);
+
+if ($scheme =~ /^svn/) {
+	if (defined $source) {
+		if (-d $source) {
+			$tmp = $destdir;
+		} else {
+			$tmp = "$destdir/".basename($source);
+		}
+		$source = pb_cms_mod_htftp($source,"svn");
+		pb_system("$vcscmd export $source $tmp","Exporting $source from $scheme to $tmp ");
+	} else {
+		$uri = pb_cms_mod_htftp($uri,"svn");
+		pb_system("$vcscmd export $uri $destdir","Exporting $uri from $scheme to $destdir ");
+	}
+} elsif ($scheme eq "svk") {
+	my $src = $source;
+	if (defined $source) {
+		if (-d $source) {
+			$tmp = $destdir;
+		} else {
+			$tmp = "$destdir/".basename($source);
+			$src = dirname($source);
+		}
+		$source = pb_cms_mod_htftp($source,"svk");
+		# This doesn't exist !
+		# pb_system("$vcscmd export $path $tmp","Exporting $path from $scheme to $tmp ");
+		pb_log(4,"$uri,$source,$destdir,$scheme, $account, $host, $port, $path,$tmp");
+		if (-d $source) {
+			pb_system("mkdir -p $tmp ; cd $tmp; tar -cf - -C $source . | tar xf -","Exporting $source from $scheme to $tmp ");
+		} else {
+			# If source is file do not use -C with source
+			pb_system("mkdir -p ".dirname($tmp)." ; cd ".dirname($tmp)."; tar -cf - -C $src ".basename($source)." | tar xf -","Exporting $src/".basename($source)." from $scheme to $tmp ");
+		}
+	} else {
+		# Look at svk admin hotcopy
+		die "Unable to export from svk without a source defined";
+	}
+} elsif ($scheme eq "dir") {
+	pb_system("cp -r $path $destdir","Copying $uri from DIR to $destdir ");
+} elsif (($scheme eq "http") || ($scheme eq "ftp")) {
+	my $f = basename($path);
+	unlink "$ENV{'PBTMP'}/$f";
+	pb_system("$vcscmd $ENV{'PBTMP'}/$f $uri","Downloading $uri with $vcscmd to $ENV{'PBTMP'}/$f\n");
+	# We want to preserve the original tar file
+	pb_cms_export("file://$ENV{'PBTMP'}/$f",$source,$destdir);
+	return("$ENV{'PBTMP'}/$f");
+} elsif ($scheme =~ /^file/) {
+	eval
+	{
+		require File::MimeInfo;
+		File::MimeInfo->import();
+	};
+	if ($@) {
+		# File::MimeInfo not found
+		die("ERROR: Install File::MimeInfo to handle scheme $scheme\n");
+	}
+
+	my $mm = mimetype($path);
+	pb_log(2,"mimetype: $mm\n");
+
+	# Check whether the file is well formed 
+	# (containing already a directory with the project-version name)
+	#
+	# If it's not the case, we try to adapt, but distro needing 
+	# to verify the checksum will have issues (Fedora)
+	# Then upstream should be notified that they need to change their rules
+	# This doesn't apply to patches or additional sources of course.
+	my ($pbwf) = pb_conf_get_if("pbwf");
+	if ((defined $pbwf) && (defined $pbwf->{$ENV{'PBPROJ'}}) && ($path !~ /\/pbpatch\//) && ($path !~ /\/pbsrc\//)) {
+		$destdir = dirname($destdir);
+		pb_log(2,"This is a well-formed file so destdir is now $destdir\n");
+	}
+	pb_mkdir_p($destdir);
+
+	if ($mm =~ /\/x-bzip-compressed-tar$/) {
+		# tar+bzip2
+		pb_system("cd $destdir ; tar xfj $path","Extracting $path in $destdir ");
+	} elsif ($mm =~ /\/x-lzma-compressed-tar$/) {
+		# tar+lzma
+		pb_system("cd $destdir ; tar xfY $path","Extracting $path in $destdir ");
+	} elsif ($mm =~ /\/x-compressed-tar$/) {
+		# tar+gzip
+		pb_system("cd $destdir ; tar xfz $path","Extracting $path in $destdir ");
+	} elsif ($mm =~ /\/x-tar$/) {
+		# tar
+		pb_system("cd $destdir ; tar xf $path","Extracting $path in $destdir ");
+	} elsif ($mm =~ /\/zip$/) {
+		# zip
+		pb_system("cd $destdir ; unzip $path","Extracting $path in $destdir ");
+	} else {
+		# simple file: copy it (patch e.g.)
+		copy($path,$destdir);
+	}
+} elsif ($scheme =~ /^hg/) {
+	if (defined $source) {
+		if (-d $source) {
+			$tmp = $destdir;
+		} else {
+			$tmp = "$destdir/".basename($source);
+		}
+		$source = pb_cms_mod_htftp($source,"hg");
+		pb_system("cd $source ; $vcscmd archive $tmp","Exporting $source from Mercurial to $tmp ");
+	} else {
+		$uri = pb_cms_mod_htftp($uri,"hg");
+		pb_system("$vcscmd clone $uri $destdir","Exporting $uri from Mercurial to $destdir ");
+	}
+} elsif ($scheme =~ /^git/) {
+	if (defined $source) {
+		if (-d $source) {
+			$tmp = $destdir;
+		} else {
+			$tmp = "$destdir/".basename($source);
+		}
+		$source = pb_cms_mod_htftp($source,"git");
+		pb_system("cd $source ; $vcscmd archive --format=tar HEAD | (mkdir $tmp && cd $tmp && tar xf -)","Exporting $source/HEAD from GIT to $tmp ");
+	} else {
+		$uri = pb_cms_mod_htftp($uri,"git");
+		pb_system("$vcscmd clone $uri $destdir","Exporting $uri from GIT to $destdir ");
+	}
+} elsif ($scheme =~ /^cvs/) {
+	# CVS needs a relative path !
+	my $dir=dirname($destdir);
+	my $base=basename($destdir);
+	if (defined $source) {
+		# CVS also needs a modules name not a dir
+		$tmp1 = basename($source);
+	} else {
+		# Probably not right, should be checked, but that way I'll notice it :-)
+		pb_log(0,"You're in an untested part of project-builder.org, please report any result upstream\n");
+		$tmp1 = $uri;
+	}
+	# If we're working on the CVS itself
+	my $cvstag = basename($ENV{'PBROOTDIR'});
+	my $cvsopt = "";
+	if ($cvstag eq "cvs") {
+		my $pbdate = strftime("%Y-%m-%d %H:%M:%S", @date);
+		$cvsopt = "-D \"$pbdate\"";
+	} else {
+		# we're working on a tag which should be the last part of PBROOTDIR
+		$cvsopt = "-r $cvstag";
+	}
+	pb_system("cd $dir ; $vcscmd -d $account\@$host:$path export $cvsopt -d $base $tmp1","Exporting $tmp1 from $source under CVS to $destdir ");
+} else {
+	die "cms $scheme unknown";
+}
+return(undef);
+}
+
+=item B<pb_cms_get_uri>
+
+This function is only called with a real CMS system and gives the URL stored in the checked out directory.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory in which it is locally exposed (result of a checkout).
+
+=cut
+
+sub pb_cms_get_uri {
+
+my $scheme = shift;
+my $dir = shift;
+
+my $res = "";
+my $void = "";
+my $vcscmd = pb_cms_cmd($scheme);
+
+if ($scheme =~ /^svn/) {
+	open(PIPE,"LANGUAGE=C $vcscmd info $dir |") || return("");
+	while (<PIPE>) {
+		($void,$res) = split(/^URL:/) if (/^URL:/);
+	}
+	$res =~ s/^\s*//;
+	close(PIPE);
+	chomp($res);
+} elsif ($scheme =~ /^svk/) {
+	open(PIPE,"LANGUAGE=C $vcscmd info $dir |") || return("");
+	my $void2 = "";
+	while (<PIPE>) {
+		($void,$void2,$res) = split(/ /) if (/^Depot/);
+	}
+	$res =~ s/^\s*//;
+	close(PIPE);
+	chomp($res);
+} elsif ($scheme =~ /^hg/) {
+	open(HGRC,".hg/hgrc/") || return("");
+	while (<HGRC>) {
+		($void,$res) = split(/^default.*=/) if (/^default.*=/);
+	}
+	close(HGRC);
+	chomp($res);
+} elsif ($scheme =~ /^git/) {
+	open(GITRC,".git/gitrc/") || return("");
+	while (<GITRC>) {
+		($void,$res) = split(/^default.*=/) if (/^default.*=/);
+	}
+	close(GITRC);
+	chomp($res);
+} elsif ($scheme =~ /^cvs/) {
+	# This path is always the root path of CVS, but we may be below
+	open(FILE,"$dir/CVS/Root") || die "$dir isn't CVS controlled";
+	$res = <FILE>;
+	chomp($res);
+	close(FILE);
+	# Find where we are in the tree
+	my $rdir = $dir;
+	while ((! -d "$rdir/CVSROOT") && ($rdir ne "/")) {
+		$rdir = dirname($rdir);
+	}
+	die "Unable to find a CVSROOT dir in the parents of $dir" if (! -d "$rdir/CVSROOT");
+	#compute our place under that root dir - should be a relative path
+	$dir =~ s|^$rdir||;
+	my $suffix = "";
+	$suffix = "$dir" if ($dir ne "");
+
+	my $prefix = "";
+	if ($scheme =~ /ssh/) {
+		$prefix = "cvs+ssh://";
+	} else {
+		$prefix = "cvs://";
+	}
+	$res = $prefix.$res.$suffix;
+} else {
+	die "cms $scheme unknown";
+}
+pb_log(1,"pb_cms_get_uri returns $res\n");
+return($res);
+}
+
+=item B<pb_cms_copy>
+
+This function copies a CMS content to another.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the URL of the original CMS content.
+The third parameter is the URL of the destination CMS content.
+
+Only coded for SVN now as used for pbconf itself not the project
+
+=cut
+
+sub pb_cms_copy {
+my $scheme = shift;
+my $oldurl = shift;
+my $newurl = shift;
+my $vcscmd = pb_cms_cmd($scheme);
+$oldurl = pb_cms_mod_socks($oldurl);
+$newurl = pb_cms_mod_socks($newurl);
+
+if ($scheme =~ /^svn/) {
+	$oldurl = pb_cms_mod_htftp($oldurl,"svn");
+	$newurl = pb_cms_mod_htftp($newurl,"svn");
+	pb_system("$vcscmd copy -m \"Creation of $newurl from $oldurl\" $oldurl $newurl","Copying $oldurl to $newurl ");
+} elsif (($scheme eq "flat") || ($scheme eq "ftp") || ($scheme eq "http"))   {
+} else {
+	die "cms $scheme unknown for project management";
+}
+}
+
+=item B<pb_cms_checkout>
+
+This function checks a CMS content out to a directory.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the URL of the CMS content.
+The third parameter is the directory where we want to deliver it (result of export).
+
+=cut
+
+sub pb_cms_checkout {
+my $scheme = shift;
+my $url = shift;
+my $destination = shift;
+my $vcscmd = pb_cms_cmd($scheme);
+$url = pb_cms_mod_socks($url);
+
+if ($scheme =~ /^svn/) {
+	$url = pb_cms_mod_htftp($url,"svn");
+	pb_system("$vcscmd co $url $destination","Checking out $url to $destination ");
+} elsif ($scheme =~ /^svk/) {
+	$url = pb_cms_mod_htftp($url,"svk");
+	pb_system("$vcscmd co $url $destination","Checking out $url to $destination ");
+} elsif ($scheme =~ /^hg/) {
+	$url = pb_cms_mod_htftp($url,"hg");
+	pb_system("$vcscmd clone $url $destination","Checking out $url to $destination ");
+} elsif ($scheme =~ /^git/) {
+	$url = pb_cms_mod_htftp($url,"git");
+	pb_system("$vcscmd clone $url $destination","Checking out $url to $destination ");
+} elsif (($scheme eq "ftp") || ($scheme eq "http")) {
+	return;
+} elsif ($scheme =~ /^cvs/) {
+	my ($scheme, $account, $host, $port, $path) = pb_get_uri($url);
+
+	# If we're working on the CVS itself
+	my $cvstag = basename($ENV{'PBROOTDIR'});
+	my $cvsopt = "";
+	if ($cvstag eq "cvs") {
+		my @date = pb_get_date();
+		my $pbdate = strftime("%Y-%m-%d %H:%M:%S", @date);
+		$cvsopt = "-D \"$pbdate\"";
+	} else {
+		# we're working on a tag which should be the last part of PBROOTDIR
+		$cvsopt = "-r $cvstag";
+	}
+	pb_mkdir_p("$destination");
+	pb_system("cd $destination ; $vcscmd -d $account\@$host:$path co $cvsopt .","Checking out $url to $destination ");
+} elsif ($scheme =~ /^file/) {
+	pb_cms_export($url,undef,$destination);
+} else {
+	die "cms $scheme unknown";
+}
+}
+
+=item B<pb_cms_up>
+
+This function updates a local directory with the CMS content.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory to update.
+
+=cut
+
+sub pb_cms_up {
+my $scheme = shift;
+my $dir = shift;
+my $vcscmd = pb_cms_cmd($scheme);
+
+if (($scheme =~ /^svn/) || ($scheme =~ /^svk/) || ($scheme =~ /^hg/) || ($scheme =~ /^git/) || ($scheme =~ /^cvs/)) {
+	pb_system("$vcscmd up $dir","Updating $dir ");
+} elsif (($scheme eq "flat") || ($scheme eq "ftp") || ($scheme eq "http"))   {
+} else {
+	die "cms $scheme unknown";
+}
+}
+
+=item B<pb_cms_checkin>
+
+This function updates a CMS content from a local directory.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory to update from.
+The third parameter indicates if we are in a new version creation (undef) or in a new project creation (1)
+
+=cut
+
+sub pb_cms_checkin {
+my $scheme = shift;
+my $dir = shift;
+my $pbinit = shift || undef;
+my $vcscmd = pb_cms_cmd($scheme);
+
+my $ver = basename($dir);
+my $msg = "updated to $ver";
+$msg = "Project $ENV{PBPROJ} creation" if (defined $pbinit);
+
+if (($scheme =~ /^svn/) || ($scheme =~ /^svk/) || ($scheme =~ /^hg/) || ($scheme =~ /^git/) || ($scheme =~ /^cvs/)) {
+	pb_system("cd $dir ; $vcscmd ci -m \"$msg\" .","Checking in $dir ");
+} elsif (($scheme eq "flat") || ($scheme eq "ftp") || ($scheme eq "http"))   {
+} else {
+	die "cms $scheme unknown";
+}
+pb_cms_up($scheme,$dir);
+}
+
+=item B<pb_cms_add>
+
+This function adds to a CMS content from a local directory.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory/file to add.
+
+=cut
+
+sub pb_cms_add {
+my $scheme = shift;
+my $f = shift;
+my $vcscmd = pb_cms_cmd($scheme);
+
+if (($scheme =~ /^svn/) || ($scheme =~ /^svk/) || ($scheme =~ /^hg/) || ($scheme =~ /^git/) || ($scheme =~ /^cvs/)) {
+	pb_system("$vcscmd add $f","Adding $f to VCS ");
+} elsif (($scheme eq "flat") || ($scheme eq "ftp") || ($scheme eq "http"))   {
+} else {
+	die "cms $scheme unknown";
+}
+pb_cms_up($scheme,$f);
+}
+
+=item B<pb_cms_isdiff>
+
+This function returns a integer indicating the number f differences between the CMS content and the local directory where it's checked out.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory to consider.
+
+=cut
+
+sub pb_cms_isdiff {
+my $scheme = shift;
+my $dir =shift;
+my $vcscmd = pb_cms_cmd($scheme);
+my $l = undef;
+
+if (($scheme =~ /^svn/) || ($scheme =~ /^svk/) || ($scheme =~ /^hg/) || ($scheme =~ /^git/) || ($scheme =~ /^cvs/)) {
+	open(PIPE,"$vcscmd diff $dir |") || die "Unable to get $vcscmd diff from $dir";
+	$l = 0;
+	while (<PIPE>) {
+		# Skipping normal messages in case of CVS
+		next if (/^cvs diff:/);
+		$l++;
+	}
+} elsif (($scheme eq "flat") || ($scheme eq "ftp") || ($scheme eq "http"))   {
+	$l = 0;
+} else {
+	die "cms $scheme unknown";
+}
+pb_log(1,"pb_cms_isdiff returns $l\n");
+return($l);
+}
+
+=item B<pb_cms_get_pkg>
+
+This function returns the list of packages we are working on in a CMS action.
+The first parameter is the default list of packages from the configuration file.
+The second parameter is the optional list of packages from the configuration file.
+
+=cut
+
+sub pb_cms_get_pkg {
+
+my @pkgs = ();
+my $defpkgdir = shift || undef;
+my $extpkgdir = shift || undef;
+
+# Get packages list
+if (not defined $ARGV[0]) {
+	@pkgs = keys %$defpkgdir if (defined $defpkgdir);
+} elsif ($ARGV[0] =~ /^all$/) {
+	@pkgs = keys %$defpkgdir if (defined $defpkgdir);
+	push(@pkgs, keys %$extpkgdir) if (defined $extpkgdir);
+} else {
+	@pkgs = @ARGV;
+}
+pb_log(0,"Packages: ".join(',',@pkgs)."\n");
+return(\@pkgs);
+}
+
+=item B<pb_cms_get_real_pkg>
+
+This function returns the real name of a virtual package we are working on in a CMS action.
+It supports the following types: perl.
+The first parameter is the virtual package name
+
+=cut
+
+sub pb_cms_get_real_pkg {
+
+my $pbpkg = shift || undef;
+my $dtype = shift;
+my $pbpkgreal = $pbpkg;
+
+my @nametype = pb_conf_get_if("namingtype");
+my $type = $nametype[0]->{$pbpkg};
+if (defined $type) {
+	if ($type eq "perl") {
+		if ($dtype eq "rpm") {
+			$pbpkgreal = "perl-".$pbpkg;
+		} elsif ($dtype eq "deb") {
+			# Only lower case allowed in Debian
+			# Cf: http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Package
+			$pbpkgreal = "lib".lc($pbpkg)."-perl";
+		} elsif ($dtype eq "ebuild") {
+			$pbpkgreal = $pbpkg;
+		} elsif ($dtype eq "hpux") {
+			$pbpkgreal = $pbpkg;
+		} elsif ($dtype eq "pkg") {
+			$pbpkgreal = "PB$pbpkg";
+		} else {
+			die "pb_cms_get_real_pkg not implemented for $dtype yet";
+		}
+	} else {
+		die "nametype $type not implemented yet";
+	}
+}
+
+pb_log(1,"pb_cms_get_real_pkg returns $pbpkgreal\n");
+return($pbpkgreal);
+}
+
+=item B<pb_cms_compliant>
+
+This function checks the compliance of the project and the pbconf directory.
+The first parameter is the key name of the value that needs to be read in the configuration file.
+The second parameter is the environment variable this key will populate.
+The third parameter is the location of the pbconf dir.
+The fourth parameter is the URI of the CMS content related to the pbconf dir.
+The fifth parameter indicates whether we should inititate the context or not.
+
+=cut
+
+sub pb_cms_compliant {
+
+my $param = shift;
+my $envar = shift;
+my $defdir = shift;
+my $uri = shift;
+my $pbinit = shift;
+my %pdir;
+
+pb_log(1,"pb_cms_compliant: envar: $envar - defdir: $defdir - uri: $uri\n");
+my ($pdir) = pb_conf_get_if($param) if (defined $param);
+if (defined $pdir) {
+	%pdir = %$pdir;
+}
+
+
+if ((defined $pdir) && (%pdir) && (defined $pdir{$ENV{'PBPROJ'}})) {
+	# That's always the environment variable that will be used
+	$ENV{$envar} = $pdir{$ENV{'PBPROJ'}};
+} else {
+	if (defined $param) {
+		pb_log(1,"WARNING: no $param defined, using $defdir\n");
+		pb_log(1,"         Please create a $param reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n");
+		pb_log(1,"         if you want to use another directory\n");
+	}
+	$ENV{$envar} = "$defdir";
+}
+
+# Expand potential env variable in it
+eval { $ENV{$envar} =~ s/(\$ENV.+\})/$1/eeg };
+pb_log(2,"$envar: $ENV{$envar}\n");
+
+my ($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+
+if (($scheme !~ /^cvs/) && ($scheme !~ /^svn/) && ($scheme !~ /^svk/) && ($scheme !~ /^hg/) && ($scheme !~ /^git/)) {
+	# Do not compare if it's not a real cms
+	pb_log(1,"pb_cms_compliant useless\n");
+	return;
+} elsif (defined $pbinit) {
+	pb_mkdir_p("$ENV{$envar}");
+} elsif (! -d "$ENV{$envar}") {
+	# Either we have a version in the uri, and it should be the same
+	# as the one in the envar. Or we should add the version to the uri
+	if (basename($uri) ne basename($ENV{$envar})) {
+		$uri .= "/".basename($ENV{$envar})
+	}
+	pb_log(1,"Checking out $uri\n");
+	# Create structure and remove end dir before exporting
+	pb_mkdir_p("$ENV{$envar}");
+	pb_rm_rf($ENV{$envar});
+	pb_cms_checkout($scheme,$uri,$ENV{$envar});
+} else {
+	pb_log(1,"$uri found locally, checking content\n");
+	my $cmsurl = pb_cms_get_uri($scheme,$ENV{$envar});
+	my ($scheme2, $account2, $host2, $port2, $path2) = pb_get_uri($cmsurl);
+	# For svk, scheme doesn't appear in svk info so remove it here in uri coming from conf file 
+	# which needs it to trigger correct behaviour
+	$uri =~ s/^svk://;
+	if ($cmsurl ne $uri) {
+		# The local content doesn't correpond to the repository
+		pb_log(0,"ERROR: Inconsistency detected:\n");
+		pb_log(0,"       * $ENV{$envar} ($envar) refers to $cmsurl but\n");
+		pb_log(0,"       * $ENV{'PBETC'} refers to $uri\n");
+		die "Project $ENV{'PBPROJ'} is not Project-Builder compliant.";
+	} else {
+		pb_log(1,"Content correct - doing nothing - you may want to update your repository however\n");
+		# they match - do nothing - there may be local changes
+	}
+}
+pb_log(1,"pb_cms_compliant end\n");
+}
+
+=item B<pb_cms_create_authors>
+
+This function creates a AUTHORS files for the project. It call it AUTHORS.pb if an AUTHORS file already exists.
+The first parameter is the source file for authors information.
+The second parameter is the directory where to create the final AUTHORS file.
+The third parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+
+=cut
+
+sub pb_cms_create_authors {
+
+my $authors=shift;
+my $dest=shift;
+my $scheme=shift;
+
+return if ($authors eq "/dev/null");
+open(SAUTH,$authors) || die "Unable to open $authors";
+# Save a potentially existing AUTHORS file and write instead to AUTHORS.pb 
+my $ext = "";
+if (-f "$dest/AUTHORS") {
+	$ext = ".pb";
+}
+open(DAUTH,"> $dest/AUTHORS$ext") || die "Unable to create $dest/AUTHORS$ext";
+print DAUTH "Authors of the project are:\n";
+print DAUTH "===========================\n";
+while (<SAUTH>) {
+	my ($nick,$gcos) = split(/:/);
+	chomp($gcos);
+	print DAUTH "$gcos";
+	if (defined $scheme) {
+		# Do not give a scheme for flat types
+		my $endstr="";
+		if ("$ENV{'PBREVISION'}" ne "flat") {
+			$endstr = " under $scheme";
+		}
+		print DAUTH " ($nick$endstr)\n";
+	} else {
+		print DAUTH "\n";
+	}
+}
+close(DAUTH);
+close(SAUTH);
+}
+
+=item B<pb_cms_log>
+
+This function creates a ChangeLog file for the project.
+The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...)
+The second parameter is the directory where the CMS content was checked out.
+The third parameter is the directory where to create the final ChangeLog file.
+The fourth parameter is unused.
+The fifth parameter is the source file for authors information.
+
+It may use a tool like svn2cl or cvs2cl to generate it if present, or the log file from the CMS if not.
+
+=cut
+
+
+sub pb_cms_log {
+
+my $scheme = shift;
+my $pkgdir = shift;
+my $dest = shift;
+my $chglog = shift;
+my $authors = shift;
+my $testver = shift || undef;
+
+pb_cms_create_authors($authors,$dest,$scheme);
+my $vcscmd = pb_cms_cmd($scheme);
+
+if ((defined $testver) && (defined $testver->{$ENV{'PBPROJ'}}) && ($testver->{$ENV{'PBPROJ'}} =~ /true/i)) {
+	if (! -f "$dest/ChangeLog") {
+		open(CL,"> $dest/ChangeLog") || die "Unable to create $dest/ChangeLog";
+		# We need a minimal version for debian type of build
+		print CL "\n";
+		print CL "\n";
+		print CL "\n";
+		print CL "\n";
+		print CL "1990-01-01  none\n";
+		print CL "\n";
+		print CL "        * test version\n";
+		print CL "\n";
+		close(CL);
+		pb_log(0,"Generating fake ChangeLog for test version\n");
+		open(CL,"> $dest/$ENV{'PBCMSLOGFILE'}") || die "Unable to create $dest/$ENV{'PBCMSLOGFILE'}";
+		close(CL);
+	}
+}
+
+if (! -f "$dest/ChangeLog") {
+	if ($scheme =~ /^svn/) {
+		# In case we have no network, just create an empty one before to allow correct build
+		open(CL,"> $dest/ChangeLog") || die "Unable to create $dest/ChangeLog";
+		close(CL);
+		my $command = pb_check_req("svn2cl",1);
+		if (-x $command) {
+			pb_system("$command --group-by-day --authors=$authors -i -o $dest/ChangeLog $pkgdir","Generating ChangeLog from SVN with svn2cl");
+		} else {
+			# To be written from pbcl
+			pb_system("$vcscmd log -v $pkgdir > $dest/$ENV{'PBCMSLOGFILE'}","Extracting log info from SVN");
+		}
+	} elsif ($scheme =~ /^svk/) {
+		pb_system("$vcscmd log -v $pkgdir > $dest/$ENV{'PBCMSLOGFILE'}","Extracting log info from SVK");
+	} elsif ($scheme =~ /^hg/) {
+		# In case we have no network, just create an empty one before to allow correct build
+		open(CL,"> $dest/ChangeLog") || die "Unable to create $dest/ChangeLog";
+		close(CL);
+		pb_system("$vcscmd log -v $pkgdir > $dest/$ENV{'PBCMSLOGFILE'}","Extracting log info from Mercurial");
+	} elsif ($scheme =~ /^git/) {
+		# In case we have no network, just create an empty one before to allow correct build
+		open(CL,"> $dest/ChangeLog") || die "Unable to create $dest/ChangeLog";
+		close(CL);
+		pb_system("$vcscmd log -v $pkgdir > $dest/$ENV{'PBCMSLOGFILE'}","Extracting log info from GIT");
+	} elsif (($scheme =~ /^file/) || ($scheme eq "dir") || ($scheme eq "http") || ($scheme eq "ftp")) {
+		pb_system("echo ChangeLog for $pkgdir > $dest/ChangeLog","Empty ChangeLog file created");
+	} elsif ($scheme =~ /^cvs/) {
+		my $tmp=basename($pkgdir);
+		# CVS needs a relative path !
+		# In case we have no network, just create an empty one before to allow correct build
+		open(CL,"> $dest/ChangeLog") || die "Unable to create $dest/ChangeLog";
+		close(CL);
+		my $command = pb_check_req("cvs2cl",1);
+		if (-x $command) {
+			pb_system("$command --group-by-day -U $authors -f $dest/ChangeLog $pkgdir","Generating ChangeLog from CVS with cvs2cl");
+		} else {
+			# To be written from pbcl
+			pb_system("$vcscmd log $tmp > $dest/$ENV{'PBCMSLOGFILE'}","Extracting log info from CVS");
+		}
+	} else {
+		die "cms $scheme unknown";
+	}
+}
+if (! -f "$dest/ChangeLog") {
+	copy("$dest/$ENV{'PBCMSLOGFILE'}","$dest/ChangeLog");
+}
+}
+
+sub pb_cms_mod_htftp {
+
+my $url = shift;
+my $proto = shift;
+
+$url =~ s/^$proto\+((ht|f)tp[s]*):/$1:/;
+pb_log(1,"pb_cms_mod_htftp returns $url\n");
+return($url);
+}
+
+sub pb_cms_mod_socks {
+
+my $url = shift;
+
+$url =~ s/^([A-z0-9]+)\+(socks):/$1:/;
+pb_log(1,"pb_cms_mod_socks returns $url\n");
+return($url);
+}
+
+
+sub pb_cms_cmd {
+
+my $scheme = shift;
+my $cmd = "";
+
+# If there is a socks proxy to use
+if ($scheme =~ /socks/) {
+	# Get the socks proxy command from the conf file
+	my ($pbsockscmd) = pb_conf_get("pbsockscmd");
+	$cmd = "$pbsockscmd->{$ENV{'PBPROJ'}} ";
+}
+
+if ($scheme =~ /hg/) {
+	return($cmd."hg")
+} elsif ($scheme =~ /git/) {
+	return($cmd."git")
+} elsif ($scheme =~ /svn/) {
+	return($cmd."svn")
+} elsif ($scheme =~ /svk/) {
+	return($cmd."svk")
+} elsif ($scheme =~ /cvs/) {
+	return($cmd."cvs")
+} elsif (($scheme =~ /http/) || ($scheme =~ /ftp/)) {
+	my $command = pb_check_req("wget",1);
+	if (-x $command) {
+		return($cmd."$command -nv -O ");
+	} else {
+		$command = pb_check_req("curl",1);
+		if (-x $command) {
+			return($cmd."$command -o ");
+		} else {
+			die "Unable to handle $scheme.\nNo wget/curl available, please install one of those";
+		}
+	}
+} else {
+	return($cmd);
+}
+}
+
+	
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+1;
Index: /0.11.2/pb/Makefile.PL
===================================================================
--- /0.11.2/pb/Makefile.PL	(revision 417)
+++ /0.11.2/pb/Makefile.PL	(revision 417)
@@ -0,0 +1,24 @@
+use 5.006001;
+use ExtUtils::MakeMaker;
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    NAME         => 'pb',
+    DISTNAME     => 'project-builder',
+    VERSION      => 'PBVER',
+    INST_SCRIPT  => 'blib/bin',
+	INSTALLDIRS  => 'perl',
+    PREREQ_PM    => {
+			#HTTP::Headers                    => 1.59,
+			#Template                         => 0,
+    },    # e.g., Module::Name => 1.1
+	#ABSTRACT_FROM => 'bin/pb',   # retrieve abstract from module
+    AUTHOR        => 'Bruno Cornec <bruno#project-builder.org>',
+	EXE_FILES     => [ qw( bin/pb bin/pbg bin/pbvi ) ],
+	MAN1PODS      => { 'bin/pb' => '$(INST_MAN1DIR)/pb.$(MAN1EXT)', },
+	MAN3PODS      => {	'lib/ProjectBuilder/CMS.pm' => '$(INST_MAN3DIR)/ProjectBuilder::CMS.$(MAN3EXT)',
+						'lib/ProjectBuilder/Filter.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Filter.$(MAN3EXT)',
+						'lib/ProjectBuilder/Changelog.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Changelog.$(MAN3EXT)',
+						'lib/ProjectBuilder/Env.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Env.$(MAN3EXT)', },
+);
Index: /0.11.2/pb/COPYING
===================================================================
--- /0.11.2/pb/COPYING	(revision 15)
+++ /0.11.2/pb/COPYING	(revision 15)
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
Index: /0.11.2/pb/bin/pbvi
===================================================================
--- /0.11.2/pb/bin/pbvi	(revision 849)
+++ /0.11.2/pb/bin/pbvi	(revision 849)
@@ -0,0 +1,3 @@
+#!/bin/bash
+export LANGUAGE=C
+gvim `egrep -r $* . | egrep -v '\.svn|~:|^Binary[\t ]|/CVS/' | cut -d: -f1 | sort -u`
Index: /0.11.2/pb/bin/pb
===================================================================
--- /0.11.2/pb/bin/pb	(revision 1260)
+++ /0.11.2/pb/bin/pb	(revision 1260)
@@ -0,0 +1,3799 @@
+#!/usr/bin/perl -w
+#
+# Project Builder main application
+#
+# $Id$
+#
+# Copyright B. Cornec 2007-2011
+# Provided under the GPL v2
+
+# Syntax: see at end
+
+use strict 'vars';
+
+# The modules mentioned here are required by pb when used both 
+# locally or inside a VE/VM/RM
+# Additional required modules only used locally are called with a require
+# in their respective section
+use Getopt::Long qw(:config auto_abbrev no_ignore_case);
+use Data::Dumper;
+use English;
+use File::Basename;
+use File::Copy;
+use File::stat;
+use File::Temp qw(tempdir);
+use File::Find;
+use Time::localtime qw(localtime);
+use POSIX qw(strftime);
+use lib qw (lib);
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Display;
+use ProjectBuilder::Conf;
+use ProjectBuilder::Distribution;
+use ProjectBuilder::CMS;
+use ProjectBuilder::Env;
+use ProjectBuilder::Filter;
+use ProjectBuilder::Changelog;
+
+# Global variables
+my %opts;					# CLI Options
+my $action;					# action to realize
+my $test = "FALSE";			# Not used
+my $pbforce = 0;			# Force VE/VM rebuild
+my $pbsnap = 0;				# Do not use snapshot mode for VM/VE by default
+my $option = "";			# Not used
+my @pkgs;					# list of packages
+my $pbtag;					# Global Tag variable
+my $pbver;					# Global Version variable
+my $pbscript;				# Name of the script
+my %pbver;					# per package
+my %pbtag;					# per package
+my $pbrev;					# Global REVISION variable
+my $pbaccount;				# Login to use to connect to the VM/RM
+my $pbtarget;				# Target os-ver-arch you want to build for
+my $pbport;					# Port to use to connect to the VM/RM
+my $newver;					# New version to create
+my $iso = undef;			# ISO image for the VM to create
+
+my @date = pb_get_date();
+my $pbdate = strftime("%Y-%m-%d", @date);
+
+=pod
+
+=head1 NAME
+
+pb, aka project-builder.org - builds packages for your projects
+
+=head1 DESCRIPTION
+
+pb helps you build various packages directly from your project sources. 
+Those sources could be handled by a CMS (Configuration Management System)
+such as Subversion, CVS, Git, Mercurial... or being a simple reference to a compressed tar file.
+It's based on a set of configuration files, a set of provided macros to help 
+you keeping build files as generic as possible. For example, a single .spec
+file should be required to generate for all rpm based distributions, even 
+if you could also have multiple .spec files if required.
+
+=head1 SYNOPSIS
+
+pb [-vhSq][-r pbroot][-p project][[-s script -a account -P port][-t os-ver-arch][-m os-ver-arch[,...]]][-g][-i iso] <action> [<pkg1> ...]
+
+pb [--verbose][--help][--man][--quiet][--snapshot][--revision pbroot][--project project][[--script script --account account --port port][--target os-ver-arch][--machine os-ver-arch[,...]]][--nographic][--iso iso] <action> [<pkg1> ...]
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-v|--verbose>
+
+Print a brief help message and exits.
+
+=item B<-q|--quiet>
+
+Do not print any output.
+
+=item B<-h|--help>
+
+Print a brief help message and exits.
+
+=item B<-S|--snapshot>
+
+Use the snapshot mode of VMs or VEs
+
+=item B<--man>
+
+Prints the manual page and exits.
+
+=item B<-t|--target os-ver-arch>
+
+Name of the target system you want to build for.
+All if none precised.
+
+=item B<-m|--machine os-ver-arch[,os-ver-arch,...]>
+
+Name of the Virtual Machines (VM), Virtual Environments (VE) or Remote Machines (RM) 
+you want to build on (coma separated). 
+All if none precised (or use the env variable PBV).
+
+=item B<-s|--script script>
+
+Name of the script you want to execute on the related VMs/VEs/RMs.
+
+=item B<-g|--nographic>
+
+Do not launch VMs in graphical mode.
+
+=item B<-i|--iso iso_image>
+
+Name of the ISO image of the distribution you want to install on the related VMs.
+
+=item B<-a|--account account>
+
+Name of the account to use to connect on the related VMs/RMs.
+
+=item B<-P|--port port_number>
+
+Port number to use to connect on the related VMs/RMs.";
+
+=item B<-p|--project project_name>
+
+Name of the project you're working on (or use the env variable PBPROJ)
+
+=item B<-r|--revision revision>
+
+Path Name of the project revision under the CMS (or use the env variable PBROOT)
+
+=item B<-V|--version new_version>
+
+New version of the project to create based on the current one.
+
+=back 
+
+=head1 ARGUMENTS
+
+<action> can be:
+
+=over 4
+
+=item B<sbx2build>
+
+Create tar files for the project under your CMS. 
+Current state of the exported content is taken.
+CMS supported are SVN, SVK, CVS, Git and Mercurial
+parameters are packages to build
+if not using default list
+
+=item B<cms2build>
+
+Create tar files for the project under your CMS. 
+Current state of the CMS is taken.
+CMS supported are SVN, SVK, CVS, Git and Mercurial
+parameters are packages to build
+if not using default list
+
+=item B<build2pkg>
+
+Create packages for your running distribution
+
+=item B<cms2pkg>
+
+cms2build + build2pkg
+
+=item B<sbx2pkg>
+
+sbx2build + build2pkg
+
+=item B<build2ssh>
+
+Send the tar files to a SSH host
+
+=item B<sbx2ssh>
+
+sbx2build + build2ssh
+
+=item B<cms2ssh>
+
+cms2build + build2ssh
+
+=item B<pkg2ssh>
+
+Send the packages built to a SSH host
+
+=item B<build2vm>
+
+Create packages in VMs, launching them if needed
+and send those packages to a SSH host once built
+VM type supported are QEMU and KVM
+
+=item B<build2ve>
+
+Create packages in VEs, creating it if needed
+and send those packages to a SSH host once built
+
+=item B<build2rm>
+
+Create packages in RMs, which should pre-exist,
+and send those packages to a SSH host once built
+RM means Remote Machine, and could be a physical or Virtual one.
+This is one buildfarm integration for pb.
+
+=item B<sbx2vm>
+
+sbx2build + build2vm
+
+=item B<sbx2ve>
+
+sbx2build + build2ve
+
+=item B<sbx2rm>
+
+sbx2build + build2rm
+
+=item B<cms2vm>
+
+cms2build + build2vm
+
+=item B<cms2ve>
+
+cms2build + build2ve
+
+=item B<cms2rm>
+
+cms2build + build2rm
+
+=item B<launchvm>
+
+Launch one virtual machine
+
+=item B<launchve>
+
+Launch one virtual environment
+
+=item B<script2vm>
+
+Launch one virtual machine if needed
+and executes a script on it
+
+=item B<script2ve>
+
+Execute a script in a virtual environment
+
+=item B<script2rm>
+
+Execute a script on a remote machine
+
+=item B<newvm>
+
+Create a new virtual machine
+
+=item B<newve>
+
+Create a new virtual environment
+
+=item B<setupvm>
+
+Setup a virtual machine for pb usage
+
+=item B<setupve>
+
+Setup a virtual environment for pb usage
+
+=item B<setuprm>
+
+Setup a remote machine for pb usage
+
+=item B<sbx2setupvm>
+
+Setup a virtual machine for pb usage using the sandbox version of pb instead of the latest stable
+Reserved to dev team.
+
+=item B<sbx2setupve>
+
+Setup a virtual environment for pb usage using the sandbox version of pb instead of the latest stable
+Reserved to dev team.
+
+=item B<sbx2setuprm>
+
+Setup a remote machine for pb usage using the sandbox version of pb instead of the latest stable
+Reserved to dev team.
+
+=item B<snapvm>
+
+Snapshot a virtual machine for pb usage
+
+=item B<snapve>
+
+Snapshot a virtual environment for pb usage
+
+=item B<updatevm>
+
+Update the distribution in the virtual machine
+
+=item B<updateve>
+
+Update the distribution in the virtual environment
+
+=item B<updaterm>
+
+Update the distribution in the remote machine
+
+=item B<test2pkg>
+
+Test a package locally
+
+=item B<test2vm>
+
+Test a package in a virtual machine
+
+=item B<test2ve>
+
+Test a package in a virtual environment
+
+=item B<test2rm>
+
+Test a package in a remote machine
+
+=item B<newver>
+
+Create a new version of the project derived
+from the current one
+
+=item B<newproj>
+
+Create a new project and a template set of
+configuration files under pbconf
+
+=item B<announce>
+
+Announce the availability of the project through various means
+
+=item B<sbx2webssh>
+
+Create tar files for the website under your CMS. 
+Current state of the exported content is taken.
+Deliver the content to the target server using ssh from the exported dir.
+
+=item B<cms2webssh>
+
+Create tar files for the website from your CMS. 
+Deliver the content to the target server using ssh from the DVCS.
+
+=item B<sbx2webpkg>
+
+Create tar files for the website under your CMS. 
+Current state of the exported content is taken.
+
+=item B<cms2webpkg>
+
+Create tar files for the website under your CMS. 
+
+=item B<clean>
+
+Purge the build and delivery directories related to the current project
+
+=back 
+
+<pkgs> can be a list of packages, the keyword 'all' or nothing, in which case the default list of packages is taken (corresponding to the defpkgdir list of arguments in the configuration file).
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 CONFIGURATION FILES
+
+Each pb user may have a configuration in F<$HOME/.pbrc>. The values in this file may overwrite any other configuration file value. 
+
+Here is an example of such a configuration file:
+
+ #
+ # Define for each project the URL of its pbconf repository
+ # No default option allowed here as they need to be all different
+ #
+ # URL of the pbconf content
+ # This is the format of a classical URL with the extension of additional schema such as 
+ # svn+ssh, cvs+ssh, ...
+ #
+ pbconfurl linuxcoe = cvs+ssh://:ext:bcornec@linuxcoe.cvs.sourceforge.net:/cvsroot/linuxcoe/pbconf
+
+ # This is normaly defined in the project's configuration file
+ # Url of the project
+ #
+ pburl linuxcoe = cvs+ssh://:ext:bcornec@linuxcoe.cvs.sourceforge.net:/cvsroot/linuxcoe
+ 
+ # All these URLs needs to be defined here as the are the entry point 
+ # for how to build packages for the project
+ #
+ pbconfurl pb = svn+ssh://svn.project-builder.org/mondo/svn/pb/pbconf
+ pbconfurl mondorescue = svn+ssh://svn.project-builder.org/mondo/svn/project-builder/mondorescue/pbconf
+ pbconfurl collectl = svn+ssh://bruno@svn.mondorescue.org/mondo/svn/project-builder/collectl/pbconf
+ pbconfurl netperf = svn+ssh://svn.mondorescue.org/mondo/svn/project-builder/netperf/pbconf
+ 
+ # Under that dir will take place everything related to pb
+ # If you want to use VMs/chroot/..., then use $ENV{'HOME'} to make it portable
+ # to your VMs/chroot/...
+ # if not defined then /var/cache
+ pbdefdir default = $ENV{'HOME'}/project-builder
+ pbdefdir pb = $ENV{'HOME'}
+ pbdefdir linuxcoe = $ENV{'HOME'}/LinuxCOE/cvs
+ pbdefdir mondorescue = $ENV{'HOME'}/mondo/svn
+ 
+ # pbconfdir points to the directory where the CMS content of the pbconfurl is checked out
+ # If not defined, pbconfdir is under pbdefdir/pbproj/pbconf
+ pbconfdir linuxcoe = $ENV{'HOME'}/LinuxCOE/cvs/pbconf
+ pbconfdir mondorescue = $ENV{'HOME'}/mondo/svn/pbconf
+ 
+ # pbdir points to the directory where the CMS content of the pburl is checked out
+ # If not defined, pbdir is under pbdefdir/pbproj
+ # Only defined if we have access to the dev of the project
+ pbdir linuxcoe = $ENV{'HOME'}/LinuxCOE/cvs
+ pbdir mondorescue = $ENV{'HOME'}/mondo/svn
+ 
+ # -daemonize doesn't work with qemu 0.8.2
+ vmopt default = -m 384
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+# ---------------------------------------------------------------------------
+
+my ($projectbuilderver,$projectbuilderrev) = pb_version_init();
+my $appname = "pb";
+
+# Initialize the syntax string
+
+pb_syntax_init("$appname (aka project-builder.org) Version $projectbuilderver-$projectbuilderrev\n");
+
+GetOptions("help|?|h" => \$opts{'h'}, 
+		"man" => \$opts{'man'},
+		"verbose|v+" => \$opts{'v'},
+		"snapshot|S" => \$opts{'S'},
+		"quiet|q" => \$opts{'q'},
+		"log-files|l=s" => \$opts{'l'},
+		"force|f" => \$opts{'f'},
+		"account|a=s" => \$opts{'a'},
+		"revision|r=s" => \$opts{'r'},
+		"script|s=s" => \$opts{'s'},
+		"machines|mock|m=s" => \$opts{'m'},
+		"target|t=s" => \$opts{'t'},
+		"nographic|g" => \$opts{'g'},
+		"port|P=i" => \$opts{'P'},
+		"project|p=s" => \$opts{'p'},
+		"iso|i=s" => \$opts{'i'},
+		"version|V=s" => \$opts{'V'},
+) || pb_syntax(-1,0);
+
+if (defined $opts{'h'}) {
+	pb_syntax(0,1);
+}
+if (defined $opts{'man'}) {
+	pb_syntax(0,2);
+}
+if (defined $opts{'v'}) {
+	$pbdebug = $opts{'v'};
+}
+if (defined $opts{'f'}) {
+	$pbforce=1;
+}
+if (defined $opts{'q'}) {
+	$pbdebug=-1;
+}
+if (defined $opts{'S'}) {
+	$pbsnap=1;
+}
+if (defined $opts{'l'}) {
+	open(pbLOG,"> $opts{'l'}") || die "Unable to log to $opts{'l'}: $!";
+	$pbLOG = \*pbLOG;
+	$pbdebug = 0  if ($pbdebug == -1);
+	}
+pb_log_init($pbdebug, $pbLOG);
+pb_display_init("text","");
+
+# Handle root of the project if defined
+if (defined $opts{'r'}) {
+	$ENV{'PBROOTDIR'} = $opts{'r'};
+}
+# Handle virtual machines if any
+if (defined $opts{'m'}) {
+	$ENV{'PBV'} = $opts{'m'};
+}
+if (defined $opts{'s'}) {
+	$pbscript = $opts{'s'};
+}
+if (defined $opts{'a'}) {
+	$pbaccount = $opts{'a'};
+	die "option -a requires a -s script option" if (not defined $pbscript);
+}
+if (defined $opts{'P'}) {
+	$pbport = $opts{'P'};
+}
+if (defined $opts{'V'}) {
+	$newver = $opts{'V'};
+}
+if (defined $opts{'i'}) {
+	$iso = $opts{'i'};
+}
+if (defined $opts{'t'}) {
+	$pbtarget = $opts{'t'};
+}
+
+# Get Action
+$action = shift @ARGV;
+die pb_syntax(-1,1) if (not defined $action);
+
+my ($filteredfiles, $supfiles, $defpkgdir, $extpkgdir);
+my $pbinit = undef;
+$pbinit = 1 if ($action =~ /^newproj$/);
+
+# Handles project name if any
+# And get global params
+($filteredfiles, $supfiles, $defpkgdir, $extpkgdir) = pb_env_init($opts{'p'},$pbinit,$action);
+
+#
+# Check for command requirements
+#
+my ($req,$opt,$pbpara) = pb_conf_get_if("oscmd","oscmdopt","pbparallel");
+pb_check_requirements($req,$opt,$appname);
+
+#
+# Check if we can launch some actions in // with Parallel::ForkManager
+#
+my $pbparallel = $pbpara->{$appname} if (defined $pbpara);
+if (not defined $pbparallel) {
+	eval
+	{
+		require Sys::CPU;
+		Sys::CPU->import();
+	};
+	if ($@) {
+		# Sys::CPU not found, defaulting to 1
+		pb_log(1,"ADVISE: Install Sys::CPU to benefit from automatic parallelism optimization.\nOr use pbparallel in your pb.conf file\nOnly 1 process at a time for the moment\n");
+		$pbparallel = 1;
+	} else {
+		# Using the number of cores
+		$pbparallel = Sys::CPU::cpu_count();
+		pb_log(1,"Using parallel mode with $pbparallel processes\n");
+	}
+}
+
+eval
+{
+	require Parallel::ForkManager;
+	Parallel::ForkManager->import();
+};
+# Parallel::ForkManager not found so no // actions
+if ($@) {
+	$pbparallel = undef;
+	pb_log(1,"ADVISE: Install Parallel::ForkManager to benefit from automatic parallelism optimization.\nOnly 1 process at a time for the moment\n");
+}
+
+pb_log(0,"Project: $ENV{'PBPROJ'}\n");
+pb_log(0,"Action: $action\n");
+
+# Act depending on action
+if ($action =~ /^cms2build$/) {
+	pb_cms2build("CMS");
+} elsif ($action =~ /^sbx2build$/) {
+	pb_cms2build("SandBox");
+} elsif ($action =~ /^build2pkg$/) {
+	pb_build2pkg();
+} elsif ($action =~ /^cms2pkg$/) {
+	pb_cms2build("CMS");
+	pb_build2pkg();
+} elsif ($action =~ /^sbx2pkg$/) {
+	pb_cms2build("SandBox");
+	pb_build2pkg();
+} elsif ($action =~ /^build2ssh$/) {
+	pb_build2ssh();
+} elsif ($action =~ /^cms2ssh$/) {
+	pb_cms2build("CMS");
+	pb_build2ssh();
+} elsif ($action =~ /^sbx2ssh$/) {
+	pb_cms2build("SandBox");
+	pb_build2ssh();
+} elsif ($action =~ /^pkg2ssh$/) {
+	pb_pkg2ssh();
+} elsif ($action =~ /^build2rm$/) {
+	pb_build2v("rm","build");
+} elsif ($action =~ /^build2ve$/) {
+	pb_build2v("ve","build");
+} elsif ($action =~ /^build2vm$/) {
+	pb_build2v("vm","build");
+} elsif ($action =~ /^cms2rm$/) {
+	pb_cms2build("CMS");
+	pb_build2v("rm","build");
+} elsif ($action =~ /^cms2ve$/) {
+	pb_cms2build("CMS");
+	pb_build2v("ve","build");
+} elsif ($action =~ /^sbx2rm$/) {
+	pb_cms2build("SandBox");
+	pb_build2v("rm","build");
+} elsif ($action =~ /^sbx2ve$/) {
+	pb_cms2build("SandBox");
+	pb_build2v("ve","build");
+} elsif ($action =~ /^cms2vm$/) {
+	pb_cms2build("CMS");
+	pb_build2v("vm","build");
+} elsif ($action =~ /^sbx2vm$/) {
+	pb_cms2build("SandBox");
+	pb_build2v("vm","build");
+} elsif ($action =~ /^launchvm$/) {
+	pb_launchv("vm",$ENV{'PBV'},0);
+} elsif ($action =~ /^launchve$/) {
+	pb_launchv("ve",$ENV{'PBV'},0);
+} elsif ($action =~ /^script2vm$/) {
+	pb_script2v($pbscript,"vm");
+} elsif ($action =~ /^script2ve$/) {
+	pb_script2v($pbscript,"ve");
+} elsif ($action =~ /^script2rm$/) {
+	pb_script2v($pbscript,"rm");
+} elsif ($action =~ /^newver$/) {
+	pb_newver();
+} elsif ($action =~ /^newve$/) {
+	pb_launchv("ve",$ENV{'PBV'},1);
+} elsif ($action =~ /^newvm$/) {
+	pb_launchv("vm",$ENV{'PBV'},1);
+	pb_log(0, "Please ensure that sshd is running in your VM by default\n");
+	pb_log(0, "and that it allows remote root login (PermitRootLogin yes in /etc/ssh/sshd_config)\n");
+	pb_log(0, "Also ensure that network is up, firewalling correctly configured\n");
+	pb_log(0, "and perl, sudo, ntpdate and scp/ssh installed\n");
+	pb_log(0, "You should then be able to login with ssh -p VMPORT root\@localhost (if VM started with pb)\n");
+} elsif ($action =~ /^setuprm$/) {
+	pb_setup2v("rm");
+} elsif ($action =~ /^setupve$/) {
+	pb_setup2v("ve");
+} elsif ($action =~ /^setupvm$/) {
+	pb_setup2v("vm");
+} elsif ($action =~ /^sbx2setuprm$/) {
+	die "This feature is limited to the pb project" if ($ENV{'PBPROJ'} ne $appname);
+	pb_cms2build("SandBox");
+	pb_setup2v("rm","SandBox");
+} elsif ($action =~ /^sbx2setupve$/) {
+	die "This feature is limited to the pb project" if ($ENV{'PBPROJ'} ne $appname);
+	pb_cms2build("SandBox");
+	pb_setup2v("ve","SandBox");
+} elsif ($action =~ /^sbx2setupvm$/) {
+	die "This feature is limited to the pb project" if ($ENV{'PBPROJ'} ne $appname);
+	pb_cms2build("SandBox");
+	pb_setup2v("vm","SandBox");
+} elsif ($action =~ /^updaterm$/) {
+	pb_update2v("rm");
+} elsif ($action =~ /^updateve$/) {
+	pb_update2v("ve");
+} elsif ($action =~ /^updatevm$/) {
+	pb_update2v("vm");
+} elsif ($action =~ /^snapve$/) {
+	pb_snap2v("ve");
+} elsif ($action =~ /^snapvm$/) {
+	pb_snap2v("vm");
+} elsif ($action =~ /^test2pkg$/) {
+	pb_test2pkg();
+} elsif ($action =~ /^test2rm$/) {
+	pb_build2v("rm","test");
+} elsif ($action =~ /^test2ve$/) {
+	pb_build2v("ve","test");
+} elsif ($action =~ /^test2vm$/) {
+	pb_build2v("vm","test");
+} elsif ($action =~ /^newproj$/) {
+	# Nothing to do - already done in pb_env_init
+} elsif ($action =~ /^clean$/) {
+	pb_clean();
+} elsif ($action =~ /^announce$/) {
+	# For announce only. Require avoids the systematic load of these modules
+	require DBI;
+	require DBD::SQLite;
+
+	pb_announce();
+} elsif ($action =~ /^sbx2webpkg$/) {
+	require DBI;
+	require DBD::SQLite;
+
+	pb_cms2build("SandBox","Web");
+} elsif ($action =~ /^sbx2webssh$/) {
+	require DBI;
+	require DBD::SQLite;
+
+	pb_cms2build("SandBox","Web");
+	pb_send2target("Web");
+} elsif ($action =~ /^cms2webpkg$/) {
+	require DBI;
+	require DBD::SQLite;
+
+	pb_cms2build("CMS","Web");
+} elsif ($action =~ /^cms2webssh$/) {
+	require DBI;
+	require DBD::SQLite;
+
+	pb_cms2build("CMS","Web");
+	pb_send2target("Web");
+} else {
+	pb_log(0,"\'$action\' is not available\n");
+	pb_syntax(-2,1);
+}
+
+sub pb_cms2build {
+
+	my $param = shift || undef;
+	my $web = shift || undef;
+
+	my $pkg;
+	my @pkgs;
+	my $webdir;
+
+	my %pkgs;
+	my $pb;				# Structure to store conf info
+
+	die "pb_cms2build requires a parameter: SandBox or CMS" if (not defined $param);
+
+	# If Website, then pkg is only the website
+	if (defined $web) {
+		($webdir) = pb_conf_get("webdir");
+		pb_log(2,"webdir: ".Dumper($webdir)."\n");
+		$pkgs[0] = $webdir->{$ENV{'PBPROJ'}};
+		$extpkgdir = $webdir;
+		pb_log(0,"Package: $pkgs[0]\n");
+	} else {
+		$pkg = pb_cms_get_pkg($defpkgdir,$extpkgdir);
+		@pkgs = @$pkg;
+	}
+
+	my ($scheme, $uri) = pb_cms_init($pbinit,$param);
+
+	# We need 2 lines here
+	my ($pkgv, $pkgt, $testver) = pb_conf_get_if("pkgver","pkgtag","testver");
+
+	# declare packager and repo for filtering
+	my ($tmp1, $tmp2) = pb_conf_get("pbpackager","pbrepo");
+	$ENV{'PBPACKAGER'} = $tmp1->{$ENV{'PBPROJ'}};
+	$ENV{'PBREPO'} = $tmp2->{$ENV{'PBPROJ'}};
+	my ($delivery) = pb_conf_get_if("delivery");
+	$delivery->{$ENV{'PBPROJ'}} = "" if (not defined $delivery->{$ENV{'PBPROJ'}});
+
+	foreach my $pbpkg (@pkgs) {
+		$ENV{'PBPKG'} = $pbpkg;
+
+		if ((defined $pkgv) && (defined $pkgv->{$pbpkg})) {
+			$pbver = $pkgv->{$pbpkg};
+		} else {
+			$pbver = $ENV{'PBPROJVER'};
+		}
+		# If it's a test version, then tag == 0.date
+		if ((defined $testver) && (defined $testver->{$ENV{'PBPROJ'}}) && ($testver->{$ENV{'PBPROJ'}} =~ /true/i)) {
+			$pbtag = "0.".strftime("%Y%m%d%H%M%S", @date);
+			$ENV{'PBPROJTAG'} = $pbtag;
+		} elsif ((defined $pkgt) && (defined $pkgt->{$pbpkg})) {
+			$pbtag = $pkgt->{$pbpkg};
+		} else {
+			$pbtag = $ENV{'PBPROJTAG'};
+		}
+
+		$pbrev = $ENV{'PBREVISION'};
+		pb_log(0,"\n");
+		pb_log(0,"Management of $pbpkg $pbver-$pbtag (rev $pbrev)\n");
+		die "Unable to get env var PBDESTDIR" if (not defined $ENV{'PBDESTDIR'});
+
+		my $dest = "$ENV{'PBDESTDIR'}/$pbpkg-$pbver";
+		# Create the structure if needed 
+		pb_mkdir_p($dest);
+		# Clean up dest if necessary. The export will recreate it
+		pb_rm_rf($dest) if (-d $dest);
+
+		# Export CMS tree for the concerned package to dest
+		# And generate some additional files
+		$OUTPUT_AUTOFLUSH=1;
+
+		# computes in which dir we have to work
+		my $dir = $defpkgdir->{$pbpkg};
+		$dir = $extpkgdir->{$pbpkg} if (not defined $dir);
+		$dir = $webdir->{$ENV{'PBPROJ'}} if (defined $web);
+		die "Variable \$dir not defined. Please report to dev team with log of a verbose run and this info ".Dumper($webdir) if (not defined $dir);
+		pb_log(2,"def:".Dumper($defpkgdir)."ext: ".Dumper($extpkgdir)."dir: $dir\n");
+
+		# Exporting content from CMS
+		my $sourcedir = undef;
+		my $sourceuri = $uri;
+		if ($param eq "SandBox") {
+			# Point to the local instance
+			$sourcedir = "$ENV{'PBDIR'}/$dir";
+		} else {
+			# Get it from a subdir of the URI with same version as localy but different root
+			# Only if using a real CMS
+			my ($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+			if (($scheme !~ /^file/) && ($scheme !~ /^(ht|f)tp/)) {
+				$sourceuri = "$ENV{'PBDIR'}/$dir"; 
+				$sourceuri =~ s|^$ENV{'PBPROJDIR'}/|$uri/|;
+			}
+		}
+		my $preserve = pb_cms_export($sourceuri,$sourcedir,$dest);
+
+		# Generated fake content for test versions to speed up stuff
+		my $chglog;
+
+		# Get project info on authors and log file
+		# TODO: Make it CMS aware
+		$chglog = "$ENV{'PBROOTDIR'}/$pbpkg/pbcl";
+		$chglog = "$ENV{'PBROOTDIR'}/pbcl" if (! -f $chglog);
+		$chglog = undef if (! -f $chglog);
+
+		# TODO: Make it CMS aware
+		my $authors = "$ENV{'PBROOTDIR'}/$pbpkg/pbauthors";
+		$authors = "$ENV{'PBROOTDIR'}/pbauthors" if (! -f $authors);
+		$authors = "/dev/null" if (! -f $authors);
+
+		# Extract cms log history and store it
+		if ((defined $chglog) && (! -f "$dest/NEWS")) {
+			pb_log(2,"Generating NEWS file from $chglog\n");
+			copy($chglog,"$dest/NEWS") || die "Unable to create $dest/NEWS";
+		}
+		pb_cms_log($scheme,"$ENV{'PBDIR'}/$dir",$dest,$chglog,$authors,$testver);
+
+		my %build;
+		# We want to at least build for the underlying distro
+		# except if a target was given, in which case we only build for it
+		my $pbos = pb_distro_get_context($pbtarget);
+		my $tmpl = "$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'},";
+
+		# Get list of distributions for which we need to generate build files if no target
+		if (not defined ($pbtarget)) {
+			my @pt = pb_conf_get_if("vmlist","velist","rmlist");
+			if (defined $pt[0]->{$ENV{'PBPROJ'}}) {
+				$tmpl .= $pt[0]->{$ENV{'PBPROJ'}};
+			}
+			if (defined $pt[1]->{$ENV{'PBPROJ'}}) {
+				# The 2 lists needs to be grouped with a ',' separating them
+				if ($tmpl ne "") {
+					$tmpl .= ",";
+				}
+				$tmpl .= $pt[1]->{$ENV{'PBPROJ'}} 
+			}
+			if (defined $pt[2]->{$ENV{'PBPROJ'}}) {
+				# The lists needs to be grouped with a ',' separating them
+				if ($tmpl ne "") {
+					$tmpl .= ",";
+				}
+				$tmpl .= $pt[2]->{$ENV{'PBPROJ'}} 
+			}
+		}
+	
+		# Setup $pb structure to allow filtering later on, on files using that structure
+		$pb->{'tag'} = $pbtag;
+		$pb->{'rev'} = $pbrev;
+		$pb->{'ver'} = $pbver;
+		$pb->{'pkg'} = $pbpkg;
+		$pb->{'suf'} = $pbos->{'suffix'};
+		$pb->{'realpkg'} = $pbpkg;
+		$pb->{'date'} = $pbdate;
+		$pb->{'defpkgdir'} = $defpkgdir;
+		$pb->{'extpkgdir'} = $extpkgdir;
+		$pb->{'chglog'} = $chglog;
+		$pb->{'packager'} = $ENV{'PBPACKAGER'};
+		$pb->{'proj'} = $ENV{'PBPROJ'};
+		$pb->{'repo'} = "$ENV{'PBREPO'}/$delivery->{$ENV{'PBPROJ'}}";
+		$pb->{'patches'} = ();
+		$pb->{'sources'} = ();
+	
+		my $tmpd = "$ENV{'PBTMP'}/cms.$$";
+		pb_mkdir_p($tmpd) if (defined $pbparallel);
+
+		# Get only all.pbf filter at this stage for pbinit
+		my $ptr = pb_get_filters($pbpkg);
+
+		# Do not do that for website
+		if (not defined $web) {
+			my %virt;
+			# De-duplicate similar VM/VE/RM
+			foreach my $d (split(/,/,$tmpl)) {
+				# skip ill-formatted vms (name-ver-arch)
+				next if ($d !~ /-/);
+				$virt{$d} = $d;
+			}
+
+			# Try to use // processing here
+			my $pm;
+			$pm = new Parallel::ForkManager($pbparallel) if (defined $pbparallel);
+
+			pb_log(0,"Preparing delivery ...\n");
+			foreach my $v (keys %virt) {
+				$pm->start and next if (defined $pbparallel);
+
+				# Distro context
+				my $pbos = pb_distro_get_context($v);
+	
+				$pb->{'pbos'} = $pbos;
+				$pb->{'suf'} = $pbos->{'suffix'};
+				pb_log(3,"DEBUG: pb: ".Dumper($pb)."\n");
+
+				# Get all filters to apply
+				$ptr = pb_get_filters($pbpkg,$pbos);
+	
+				pb_log(2,"DEBUG Filtering PBDATE => $pbdate, PBTAG => $pbtag, PBVER => $pbver\n");
+	
+				# We need to compute the real name of the package
+				my $pbrealpkg = pb_cms_get_real_pkg($pbpkg,$pbos->{'type'});
+				$pb->{'realpkg'} = $pbrealpkg;
+				pb_log(1,"Virtual package $pbpkg has a real package name of $pbrealpkg on $pbos->{'name'}-$pbos->{'version'}\n") if ($pbrealpkg ne $pbpkg);
+	
+				# Filter build files from the less precise up to the most with overloading
+				# Filter all files found, keeping the name, and generating in dest
+	
+				# Find all build files first relatively to PBROOTDIR
+				# Find also all specific files referenced in the .pb conf file
+				my %bfiles = ();
+				my %pkgfiles = ();
+				# Used in Filter.pm by pb_filter_file
+
+				$build{$v} = "yes";
+				if (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'os'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'os'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'type'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'type'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'family'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'family'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") {
+					pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles);
+				} else {
+					$build{$v} = "no";
+				}
+				pb_log(2,"DEBUG($v) bfiles: ".Dumper(\%bfiles)."\n");
+	
+				if ($build{$v} ne "no") {
+					# Apply now all the filters on all the files concerned
+					# destination dir depends on the type of file
+					# For patch support
+					# TODO: Make it CMS aware
+					$pb->{'patches'} = pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbpatch", $pb->{'patches'}, $pbos, "$ENV{'PBROOTDIR'}/$pbpkg/pbextpatch");
+					pb_log(2,"DEBUG($v) patches: ".Dumper($pb->{'patches'})."\n");
+					# TODO: Make it CMS aware
+					$pb->{'sources'} = pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbsrc", $pb->{'sources'}, $pbos, "$ENV{'PBROOTDIR'}/$pbpkg/pbextsrc");
+					pb_log(2,"DEBUG($v) sources: ".Dumper($pb->{'sources'})."\n");
+	
+					if (defined $pb->{'patches'}->{$v}) {
+						# Filter potential patches (local + remote)
+						pb_mkdir_p("$dest/pbconf/$v/pbpatch");
+						foreach my $pf (split(/,/,$pb->{'patches'}->{$v})) {
+							my $pp = basename($pf);
+							pb_cms_export($pf,undef,"$dest/pbconf/$v/pbpatch");
+							pb_filter_file_inplace($ptr,"$dest/pbconf/$v/pbpatch/$pp",$pb);
+							pb_system("gzip -9f $dest/pbconf/$v/pbpatch/$pp","","quiet");
+						}
+					}
+					if (defined $pb->{'sources'}->{$v}) {
+						pb_mkdir_p("$dest/pbconf/$v/pbsrc");
+						foreach my $pf (split(/,/,$pb->{'sources'}->{$v})) {
+							my $pp = basename($pf);
+							pb_cms_export($pf,undef,"$dest/pbconf/$v/pbsrc");
+							pb_filter_file_inplace($ptr,"$dest/pbconf/$v/pbsrc/$pp",$pb);
+						}
+					}
+					# Filter build files at the end, as they depend on patches and sources
+					foreach my $f (values %bfiles,values %pkgfiles) {
+						pb_filter_file("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$v/".basename($f),$pb);
+					}
+				}
+
+				if (defined $pbparallel) {
+					# Communicate results back to parent
+					my $str = "";
+					$str .= "build $v = $build{$v}\n" if (defined $build{$v});
+					$str .= "patches $v = $pb->{'patches'}->{$v}\n" if (defined $pb->{'patches'}->{$v});
+					$str .= "sources $v = $pb->{'sources'}->{$v}\n" if (defined $pb->{'sources'}->{$v});
+					pb_set_content("$tmpd/$$","$str");
+					$pm->finish;
+				}
+			}
+			# In the parent, we need to get the result from the children
+			$pm->wait_all_children if (defined $pbparallel);
+			my $made = "";
+			my %h = ();
+			my %tmp;
+			my %tmp2;
+			my $pt;
+			my $k;
+
+			foreach $k (<$tmpd/*>) {
+				$made .= pb_get_content($k);
+			}
+			pb_rm_rf($tmpd);
+			pb_log(3,"MADE:\n$made");
+
+			# Rebuild local hashes
+			foreach $k (split(/\n/,$made)) {
+				if ($k =~ /^\s*([A-z0-9-_]+)\s+([[A-z0-9-_.]+)\s*=\s*(.+)$/) {
+					$h{$1}->{$2}=$3;
+				}
+			}
+			pb_log(2,"HASH: ".Dumper(%h));
+
+			# Patches
+			pb_log(0,"Delivered and compressed patches ");
+			$pt = $h{'patches'};
+			foreach $k (keys %$pt) {
+				foreach my $v1 (split(/,/,$pt->{$k})) {
+					$tmp{$v1} = "";
+				}
+			}
+			if (keys %tmp) {
+				foreach $k (keys %tmp) {
+					pb_log(0,"$k ");
+				}
+			} else {
+				pb_log(0,"N/A");
+			}
+			pb_log(0,"\n");
+
+			# Sources
+			pb_log(0,"Delivered additional sources ");
+			$pt = $h{'sources'};
+			foreach $k (keys %$pt) {
+				foreach my $v1 (split(/,/,$pt->{$k})) {
+					$tmp2{$v1} = "";
+				}
+			}
+			if (keys %tmp2) {
+				foreach $k (keys %tmp2) {
+					pb_log(0,"$k ");
+				}
+			} else {
+				pb_log(0,"N/A");
+			}
+			pb_log(0,"\n");
+
+			# Build files
+			my @found;
+			my @notfound;
+			$pt = $h{'build'};
+			foreach my $b (keys %$pt) {
+				push @found,$b if ($pt->{$b} =~ /yes/);
+				push @notfound,$b if ($pt->{$b} =~ /no/);
+			}
+			pb_log(0,"Build files have been generated for ... ".join(',',sort(@found))."\n") if (@found);
+			pb_log(0,"No Build files found for ".join(',',sort(@notfound))."\n") if (@notfound);
+
+		} else {
+			# Instead call News generation
+			pb_web_news2html($dest);
+			# And create an empty pbconf
+			pb_mkdir_p("$dest/pbconf");
+			# And prepare the pbscript to execute remotely
+			open(SCRIPT,"> $ENV{'PBTMP'}/pbscript") || die "Unable to create $ENV{'PBTMP'}/pbscript";
+			print SCRIPT "#!/bin/bash\n";
+			print SCRIPT "#set -x\n";
+			print SCRIPT "echo ... Extracting Website content\n";
+			print SCRIPT "find . -type f | grep -Ev '^./$pbpkg-$pbver.tar.gz|^./pbscript' | xargs rm -f non-existent\n";
+			print SCRIPT "find * -type d -depth | xargs rmdir 2> /dev/null \n";
+			print SCRIPT "tar xfz $pbpkg-$pbver.tar.gz\n";
+			print SCRIPT "mv $pbpkg-$pbver/* .\n";
+			print SCRIPT "rm -f $pbpkg-$pbver.tar.gz\n";
+			print SCRIPT "rmdir $pbpkg-$pbver\n";
+			close(SCRIPT);
+			chmod 0755,"$ENV{'PBTMP'}/pbscript";
+		}
+
+		# Apply filters to the non-build files
+		my $liste ="";
+		if (defined $filteredfiles->{$pbpkg}) {
+			foreach my $f (split(/,/,$filteredfiles->{$pbpkg})) {
+				pb_filter_file_inplace($ptr,"$dest/$f",$pb);
+				$liste = "$f $liste";
+			}
+		}
+		pb_log(2,"Files ".$liste."have been filtered\n");
+
+		# TODO: Make it CMS aware
+		# Execute the pbinit script if any
+		if (-x "$ENV{'PBROOTDIR'}/$pbpkg/pbinit") {
+			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 under $dest","verbose");
+		}
+
+		# Do we have additional script to run to prepare the environement for the project ? 
+		# Then include it in the pbconf delivery
+		foreach my $pbvf (<$ENV{'PBROOTDIR'}/pbv*.pre>,<$ENV{'PBROOTDIR'}/pbv*.post>, <$ENV{'PBROOTDIR'}/pbtest*>) {
+			if (-x "$pbvf") {
+				my $target = "$ENV{'PBDESTDIR'}/".basename($pbvf);
+				pb_filter_file("$pbvf",$ptr,$target,$pb);
+				chmod 0755,"$target";
+			}
+		}
+
+		# Prepare the dest directory for archive
+		chdir "$ENV{'PBDESTDIR'}" || die "Unable to change dir to $ENV{'PBDESTDIR'}";
+		if (defined $preserve) {
+			# In that case we want to preserve the original tar file for checksum purposes
+			# The one created is btw equivalent in that case to this one
+			# Maybe check basename of both to be sure they are the same ?
+			pb_log(0,"Preserving original tar file ");
+			move("$preserve","$pbpkg-$pbver.tar.gz");
+		} else {
+			# Possibility to look at PBSRC to guess more the filename
+			pb_system("tar cfz $pbpkg-$pbver.tar.gz --exclude=$pbpkg-$pbver/pbconf $pbpkg-$pbver","Creating $pbpkg tar files compressed");
+		}
+		pb_log(0,"Under $ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz\n");
+		pb_system("tar cfz $pbpkg-$pbver.pbconf.tar.gz $pbpkg-$pbver/pbconf","Creating pbconf tar files compressed");
+		pb_log(0,"Under $ENV{'PBDESTDIR'}/$pbpkg-$pbver.pbconf.tar.gz\n");
+
+		# Keep track of version-tag per pkg
+		$pkgs{$pbpkg} = "$pbver-$pbtag";
+
+		# Final cleanup
+		pb_rm_rf($dest) if (-d $dest);
+	}
+
+	# Keep track of per package version
+	pb_log(2,"DEBUG pkgs: ".Dumper(%pkgs)."\n");
+	open(PKG,"> $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb") || die "Unable to create $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb";
+	foreach my $pbpkg (keys %pkgs) {
+		print PKG "pbpkg $pbpkg = $pkgs{$pbpkg}\n";
+	}
+	close(PKG);
+
+	# Keep track of what is generated by default
+	# We need to store the dir and info on version-tag
+	# Base our content on the existing .pb file
+	copy("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb","$ENV{'PBDESTDIR'}/pbrc");
+	open(LAST,">> $ENV{'PBDESTDIR'}/pbrc") || die "Unable to create $ENV{'PBDESTDIR'}/pbrc";
+	print LAST "pbroot $ENV{'PBPROJ'} = $ENV{'PBROOTDIR'}\n";
+	print LAST "projver $ENV{'PBPROJ'} = $ENV{'PBPROJVER'}\n";
+	print LAST "projtag $ENV{'PBPROJ'} = $ENV{'PBPROJTAG'}\n";
+	print LAST "pbpackager $ENV{'PBPROJ'} = $ENV{'PBPACKAGER'}\n";
+	close(LAST);
+}
+
+sub pb_test2pkg {
+	# Get the running distro to test on
+	my $pbos = pb_distro_get_context();
+
+	# Get list of packages to test
+	# Get content saved in cms2build
+	my $ptr = pb_get_pkg();
+	@pkgs = @$ptr;
+
+	# Additional potential repo
+	pb_distro_setuprepo($pbos);
+	foreach my $pbpkg (@pkgs) {
+		# We need to install the package to test, and deps brought with it
+		pb_distro_installdeps(undef,$pbos,$pbpkg);
+		pb_system("$ENV{'PBDESTDIR'}/pbtest","Launching test for $pbpkg","verbose");
+	}
+}
+
+sub pb_build2pkg {
+
+	# Get the running distro to build on
+	my $pbos = pb_distro_get_context();
+
+	# If needed we may add repository to the build env
+	pb_distro_setuprepo($pbos);
+
+	# Get list of packages to build
+	my $ptr = pb_get_pkg();
+	@pkgs = @$ptr;
+
+	# Get content saved in cms2build
+	my ($pkg) = pb_conf_read("$ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb","pbpkg");
+	$pkg = { } if (not defined $pkg);
+
+	pb_mkdir_p("$ENV{'PBBUILDDIR'}") if (! -d "$ENV{'PBBUILDDIR'}");
+	chdir "$ENV{'PBBUILDDIR'}" || die "Unable to chdir to $ENV{'PBBUILDDIR'}";
+	my $made = ""; # pkgs made during build
+	my $pm;
+	$pm = new Parallel::ForkManager($pbparallel) if (defined $pbparallel);
+
+	# We need to communicate info back from the children if parallel so prepare a dir for that
+	my $tmpd = "$ENV{'PBTMP'}/build.$$";
+	pb_mkdir_p($tmpd) if (defined $pbparallel);
+
+	foreach my $pbpkg (@pkgs) {
+		$pm->start and next if (defined $pbparallel);
+
+		my $vertag = $pkg->{$pbpkg};
+		# get the version of the current package - maybe different
+		($pbver,$pbtag) = split(/-/,$vertag);
+
+		my $src="$ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz";
+		my $src2="$ENV{'PBDESTDIR'}/$pbpkg-$pbver.pbconf.tar.gz";
+		pb_log(2,"Source file: $src\n");
+		pb_log(2,"Pbconf file: $src2\n");
+
+		pb_log(2,"Working directory: $ENV{'PBBUILDDIR'}\n");
+		if ($pbos->{'type'} eq "rpm") {
+			foreach my $d ('RPMS','SRPMS','SPECS','SOURCES','BUILD') {
+				if (! -d "$ENV{'PBBUILDDIR'}/$d") {
+					pb_mkdir_p("$ENV{'PBBUILDDIR'}/$d");
+				}
+			}
+
+			# Remove in case a previous link/file was there
+			unlink "$ENV{'PBBUILDDIR'}/SOURCES/".basename($src);
+			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 = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/","$ENV{'PBBUILDDIR'}/SPECS","spec");
+
+			# We need to handle potential patches to upstream sources
+			pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbpatch/","$ENV{'PBBUILDDIR'}/SOURCES","patch");
+
+			# We need to handle potential additional sources to upstream sources
+			pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbsrc/","$ENV{'PBBUILDDIR'}/SOURCES","src");
+
+			pb_log(2,"specfile: ".Dumper(\@specfile)."\n");
+			# set LANGUAGE to check for correct log messages
+			$ENV{'LANGUAGE'}="C";
+			# Older Redhat use _target_platform in %configure incorrectly
+			my $specialdef = "";
+			if (($pbos->{'name'} eq "redhat") || (($pbos->{'name'} eq "rhel") && ($pbos->{'version'} eq "2.1"))) {
+				$specialdef = "--define \'_target_platform \"\"\'";
+			}
+
+			foreach my $f (@specfile) {
+				if ($f =~ /\.spec$/) {
+					# This could cause an issue in // mode
+					pb_distro_installdeps($f,$pbos);
+					pb_system("rpmbuild $specialdef --define \"packager $ENV{'PBPACKAGER'}\" --define \"_topdir $ENV{'PBBUILDDIR'}\" -ba $f","Building package with $f under $ENV{'PBBUILDDIR'}","verbose");
+					last;
+				}
+			}
+			# Get the name of the generated packages
+			open(LOG,"$ENV{'PBTMP'}/system.$$.log") || die "Unable to open $ENV{'PBTMP'}/system.$$.log";
+			while (<LOG>) {
+				chomp($_);
+				next if ($_ !~ /^Wrote:/);
+				s|.*/([S]*RPMS.*)|$1|;
+				$made .=" $_";
+			}
+			close(LOG);
+
+		} elsif ($pbos->{'type'} eq "deb") {
+			pb_system("tar xfz $src","Extracting sources");
+			pb_system("tar xfz $src2","Extracting pbconf");
+
+			chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver";
+			pb_rm_rf("debian");
+			symlink "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}","debian" || die "Unable to symlink to pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+			chmod 0755,"debian/rules";
+
+			pb_distro_installdeps("debian/control",$pbos);
+			pb_system("dpkg-buildpackage -us -uc -rfakeroot","Building package","verbose");
+			# Get the name of the generated packages
+			open(LOG,"$ENV{'PBTMP'}/system.$$.log") || die "Unable to open $ENV{'PBTMP'}/system.$$.log";
+			while (<LOG>) {
+				chomp();
+				my $tmp = $_;
+				next if ($tmp !~ /^dpkg-deb.*:/);
+				$tmp =~ s|.*\.\./(.*)_(.*).deb.*|$1|;
+				$made="$made $tmp.dsc $tmp.tar.gz $tmp"."_*.deb $tmp"."_*.changes";
+			}
+			close(LOG);
+			chdir ".." || die "Unable to chdir to parent dir";
+			pb_system("rm -rf $pbpkg-$pbver", "Cleanup");
+		} elsif ($pbos->{'type'} eq "ebuild") {
+			my @ebuildfile;
+			# For gentoo we need to take pb as subsystem name
+			# We put every apps here under sys-apps. hope it's correct
+			# We use pb's home dir in order to have a single OVERLAY line
+			my $tmpe = "$ENV{'HOME'}/portage/pb/sys-apps/$pbpkg";
+			pb_mkdir_p($tmpe) if (! -d "$tmpe");
+			pb_mkdir_p("$ENV{'HOME'}/portage/distfiles") if (! -d "$ENV{'HOME'}/portage/distfiles");
+
+			# We need to first extract the ebuild file 
+			@ebuildfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/","$tmpe","ebuild");
+
+			# Prepare the build env for gentoo
+			my $found = 0;
+			my $pbbd = $ENV{'HOME'};
+			$pbbd =~ s|/|\\/|g;
+			if (-r "/etc/make.conf") {
+				open(MAKE,"/etc/make.conf");
+				while (<MAKE>) {
+					$found = 1 if (/$pbbd\/portage/);
+				}
+				close(MAKE);
+			}
+			if ($found == 0) {
+				pb_system("sudo sh -c 'echo PORTDIR_OVERLAY=\"$ENV{'HOME'}/portage\" >> /etc/make.conf'");
+			}
+			#$found = 0;
+			#if (-r "/etc/portage/package.keywords") {
+			#open(KEYW,"/etc/portage/package.keywords");
+			#while (<KEYW>) {
+			#$found = 1 if (/portage\/pb/);
+			#}
+			#close(KEYW);
+			#}
+			#if ($found == 0) {
+			#pb_system("sudo sh -c \"echo portage/pb >> /etc/portage/package.keywords\"");
+			#}
+
+			# Build
+			foreach my $f (@ebuildfile) {
+				if ($f =~ /\.ebuild$/) {
+					pb_distro_installdeps($f,$pbos);
+					move($f,"$tmpe/$pbpkg-$pbver.ebuild");
+					pb_system("cd $tmpe ; ebuild $pbpkg-$pbver.ebuild clean ; ebuild $pbpkg-$pbver.ebuild digest ; ebuild $pbpkg-$pbver.ebuild package","verbose");
+					# Now move it where pb expects it
+					pb_mkdir_p("$ENV{'PBBUILDDIR'}/portage/pb/sys-apps/$pbpkg");
+					if ($pbtag =~ /^0\./) {
+						# This is a test version
+						my $ntag = $pbtag;
+						$ntag =~ s/^0\.//;
+						move("$tmpe/$pbpkg-$pbver.ebuild","$ENV{'PBBUILDDIR'}/portage/pb/sys-apps/$pbpkg/$pbpkg-$pbver"."_p$ntag.ebuild");
+						$made="$made portage/pb/sys-apps/$pbpkg/$pbpkg-$pbver"."_p$ntag.ebuild";
+					} else {
+						move("$tmpe/$pbpkg-$pbver.ebuild","$ENV{'PBBUILDDIR'}/portage/pb/sys-apps/$pbpkg/$pbpkg-$pbver-r$pbtag.ebuild");
+						$made="$made portage/pb/sys-apps/$pbpkg/$pbpkg-$pbver-r$pbtag.ebuild";
+					}
+				}
+			}
+
+		} elsif ($pbos->{'type'} eq "tgz") {
+			# Slackware family
+			$made="$made $pbpkg/$pbpkg-$pbver-*-$pbtag.tgz";
+
+			pb_system("tar xfz $src","Extracting sources");
+			pb_system("tar xfz $src2","Extracting pbconf");
+			chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver";
+			symlink "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}","install" || die "Unable to symlink to pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+			if (-x "install/pbslack") {
+				pb_distro_installdeps("./install/pbslack",$pbos);
+				pb_system("./install/pbslack","Building software");
+				pb_system("sudo /sbin/makepkg -p -l y -c y $pbpkg","Packaging $pbpkg","verbose");
+			}
+			chdir ".." || die "Unable to chdir to parent dir";
+			pb_system("rm -rf $pbpkg-$pbver", "Cleanup");
+		} elsif ($pbos->{'type'} eq "pkg") {
+			# Solaris
+			$made="$made $pbpkg-$pbver-$pbtag.pkg.gz";
+			my $pkgdestdir="$ENV{'PBBUILDDIR'}/install";
+
+			# Will host resulting packages
+			pb_mkdir_p("$pbos->{'type'}");
+			pb_mkdir_p("$pkgdestdir/delivery");
+			pb_system("tar xfz $src","Extracting sources under $ENV{'PBBUILDDIR'}");
+			pb_system("tar xfz $src2","Extracting pbconf under $ENV{'PBBUILDDIR'}");
+			# We need to handle potential patches to upstream sources
+			pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbpatch/","$ENV{'PBBUILDDIR'}/SOURCES","patch");
+
+			# We need to handle potential additional sources to upstream sources
+			pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbsrc/","$ENV{'PBBUILDDIR'}/SOURCES","src");
+
+			chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver";
+			if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild") {
+				chmod 0755,"pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild";
+				# pkginfo file is mandatory
+				die "Unable to find pkginfo file in pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}" if (! -f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pkginfo");
+				# Build
+				pb_system("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild $pkgdestdir/delivery","Building software and installing under $pkgdestdir/delivery");
+				# Copy complementary files
+				if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/prototype") {
+					copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/prototype", $pkgdestdir) 
+				} else {
+					# No prototype provided, calculating it
+					open(PROTO,"> $pkgdestdir/prototype") || die "Unable to create prototype file";
+					print PROTO "i pkginfo\n";
+					print PROTO "i depend\n" if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend");
+					$ENV{'PBSOLDESTDIR'} = "$pkgdestdir/delivery";
+					find(\&create_solaris_prototype, "$pkgdestdir/delivery");
+				}
+				copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend", $pkgdestdir) if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend");
+				copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pkginfo", $pkgdestdir);
+				pb_system("cd $pkgdestdir/delivery ; pkgmk -o -f ../prototype -r $pkgdestdir/delivery -d $ENV{'PBBUILDDIR'}/$pbos->{'type'}","Packaging $pbpkg","verbose");
+				pb_system("cd $ENV{'PBBUILDDIR'}/$pbos->{'type'} ;  echo \"\" | pkgtrans -o -n -s $ENV{'PBBUILDDIR'}/$pbos->{'type'} $ENV{'PBBUILDDIR'}/$pbpkg-$pbver-$pbtag.pkg all","Transforming $pbpkg","verbose");
+				pb_system("cd $ENV{'PBBUILDDIR'} ;  gzip -9f $pbpkg-$pbver-$pbtag.pkg","Compressing $pbpkg-$pbver-$pbtag.pkg","verbose");
+			} else {
+				pb_log(0,"No pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild file found for $pbpkg-$pbver in \n");
+			}
+			chdir ".." || die "Unable to chdir to parent dir";
+			pb_system("rm -rf $pbpkg-$pbver $ENV{'PBBUILDDIR'}/$pbos->{'type'} $pkgdestdir", "Cleanup");
+		} elsif ($pbos->{'type'} eq "hpux") {
+			# HP-UX
+			pb_system("tar xfz $src","Extracting sources");
+			pb_system("tar xfz $src2","Extracting pbconf");
+
+			chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver";
+			pb_system("buildpackage ","Building package","verbose");
+			# Get the name of the generated packages
+			open(LOG,"$ENV{'PBTMP'}/system.$$.log") || die "Unable to open $ENV{'PBTMP'}/system.$$.log";
+			while (<LOG>) {
+				chomp();
+				my $tmp = $_;
+				next if ($tmp !~ /^SD BUILD.*:/);
+				$tmp =~ s|.*../(.*)_(.*).sd.*|$1|;
+				$made="$made $tmp"."_*.sd";
+			}
+			close(LOG);
+			$made="$made $pbpkg-$pbver-$pbtag.sd";
+
+			chdir ".." || die "Unable to chdir to parent dir";
+			pb_system("rm -rf $pbpkg-$pbver", "Cleanup");
+		} else {
+			die "Unknown OS type format $pbos->{'type'}";
+		}
+		if (defined $pbparallel) {
+			# Communicate results back to parent
+			pb_set_content("$tmpd/$$",$made);
+			$pm->finish;
+		}
+	}
+	if (defined $pbparallel) {
+		# In the parent, we need to get the result from the children
+		$pm->wait_all_children;
+		foreach my $f (<$tmpd/*>) {
+			$made .= " ".pb_get_content($f);
+		}
+		pb_rm_rf($tmpd);
+	}
+
+	# Find the appropriate check cmd/opts
+	my ($chkcmd,$chkopt) = pb_distro_get_param($pbos,pb_conf_get_if("oschkcmd","oschkopt"));
+
+	# Packages check if needed
+	if ($pbos->{'type'} eq "rpm") {
+		if ((defined  $chkcmd) && (-x $chkcmd)) {
+			my $cmd = "$chkcmd";
+			$cmd .= " $chkopt" if (defined $chkopt);
+			$cmd .= " $made";
+			pb_system("$cmd","Checking validity of rpms with $chkcmd","verbose");
+		}
+		my $rpms ="";
+		my $srpms ="";
+		foreach my $f (split(/ /,$made)) {
+			$rpms .= "$ENV{'PBBUILDDIR'}/$f " if ($f =~ /^RPMS\//);
+			$srpms .= "$ENV{'PBBUILDDIR'}/$f " if ($f =~ /^SRPMS\//);
+		}
+		pb_log(0,"SRPM packages generated: $srpms\n");
+		pb_log(0,"RPM packages generated: $rpms\n");
+	} elsif ($pbos->{'type'} eq "deb") {
+		my $made2 = "";
+		foreach my $f (split(/ /,$made)) {
+			$made2 .= "$f " if ($f =~ /\.deb$/);
+		}
+		if (-x $chkcmd) {
+			pb_system("$chkcmd $chkopt $made2","Checking validity of debs with $chkcmd","verbose");
+		}
+		pb_log(0,"deb packages generated: $made2\n");
+	} else {
+		pb_log(0,"No check done for $pbos->{'type'} yet\n");
+		pb_log(0,"Packages generated: $made\n");
+	}
+
+	# Keep track of what is generated so that we can get them back from VMs/RMs
+	open(KEEP,"> $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") || die "Unable to create $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+	print KEEP "$made\n";
+	close(KEEP);
+}
+
+sub create_solaris_prototype {
+
+	my $uidgid = "bin bin";
+	my $pkgdestdir = $ENV{'PBSOLDESTDIR'};
+
+	return if ($_ =~ /^$pkgdestdir$/);
+	if (-d $_) {
+		my $n = $File::Find::name;
+		$n =~ s~$pkgdestdir/~~;
+		print PROTO "d none $n 0755 $uidgid\n";
+	} elsif (-x $_) {
+		my $n = $File::Find::name;
+		$n =~ s~$pkgdestdir/~~;
+		print PROTO "f none $n 0755 $uidgid\n";
+	} elsif (-f $_) {
+		my $n = $File::Find::name;
+		$n =~ s~$pkgdestdir/~~;
+		print PROTO "f none $n 0644 $uidgid\n";
+	}
+}
+
+sub pb_build2ssh {
+	pb_send2target("Sources");
+}
+
+sub pb_pkg2ssh {
+	pb_send2target("Packages");
+}
+
+# By default deliver to the the public site hosting the 
+# ftp structure (or whatever) or a VM/VE/RM
+sub pb_send2target {
+
+	my $cmt = shift;
+	my $v = shift || undef;
+	my $vmexist = shift || 0;			# 0 is FALSE
+	my $vmpid = shift || 0;				# 0 is FALSE
+	my $snapme = shift || 0;			# 0 is FALSE
+
+	pb_log(2,"DEBUG: pb_send2target($cmt,".Dumper($v).",$vmexist,$vmpid)\n");
+	my $host = "sshhost";
+	my $login = "sshlogin";
+	my $dir = "sshdir";
+	my $port = "sshport";
+	my $conf = "sshconf";
+	my $tmout = undef;
+	my $path = undef;
+	if ($cmt =~ /^VM/) {
+		$login = "vmlogin";
+		$dir = "pbdefdir";
+		# Specific VM
+		$tmout = "vmtmout";
+		$path = "vmpath";
+		$host = "vmhost";
+		$port = "vmport";
+	} elsif ($cmt =~ /^RM/) {
+		$login = "rmlogin";
+		$dir = "pbdefdir";
+		# Specific RM
+		$tmout = "rmtmout";
+		$path = "rmpath";
+		$host = "rmhost";
+		$port = "rmport";
+	} elsif ($cmt =~ /^VE/) {
+		$login = "velogin";
+		$dir = "pbdefdir";
+		# Specific VE
+		$path = "vepath";
+		$conf = "rbsconf";
+	} elsif ($cmt eq "Web") {
+		$host = "websshhost";
+		$login = "websshlogin";
+		$dir = "websshdir";
+		$port = "websshport";
+	}
+	my $cmd = "";
+	my $src = "";
+	my $pbos;
+
+	if ($cmt ne "Announce") {
+		# Get list of packages to build
+		my $ptr = pb_get_pkg();
+		@pkgs = @$ptr;
+
+		# Get the running distro to consider
+		$pbos = pb_distro_get_context($v);
+
+		# Get list of packages to build
+		# Get content saved in cms2build
+		my ($pkg) = pb_conf_read("$ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb","pbpkg");
+		$pkg = { } if (not defined $pkg);
+
+		pb_mkdir_p("$ENV{'PBBUILDDIR'}") if (! -d "$ENV{'PBBUILDDIR'}");
+		chdir "$ENV{'PBBUILDDIR'}" || die "Unable to chdir to $ENV{'PBBUILDDIR'}";
+		foreach my $pbpkg (@pkgs) {
+			my $vertag = $pkg->{$pbpkg};
+			# get the version of the current package - maybe different
+			($pbver,$pbtag) = split(/-/,$vertag);
+
+			if (($cmt eq "Sources") || ($cmt =~ /(V[EM]|RM)build/)) {
+				$src = "$src $ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz $ENV{'PBDESTDIR'}/$pbpkg-$pbver.pbconf.tar.gz";
+				if ($cmd eq "") {
+					$cmd = "ln -sf $pbpkg-$pbver.tar.gz $pbpkg-latest.tar.gz";
+				} else {
+					$cmd = "$cmd ; ln -sf $pbpkg-$pbver.tar.gz $pbpkg-latest.tar.gz";
+				}
+			} elsif ($cmt eq "Web") {
+				$src = "$src $ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz"
+			}
+		}
+		# Adds conf file for availability of conf elements
+		pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb");
+	}
+
+	if ($cmt =~ /(V[EM]|RM)build/) {
+		$src="$src $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb $ENV{'PBETC'} $ENV{'PBDESTDIR'}/pbrc $ENV{'PBDESTDIR'}/pbscript.$$";
+	} elsif ($cmt =~ /(V[EM]|RM)Script/) {
+		$src="$src $ENV{'PBDESTDIR'}/pbscript.$$";
+	} elsif ($cmt =~ /(V[EM]|RM)test/) {
+		$src="$src $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb $ENV{'PBETC'} $ENV{'PBDESTDIR'}/pbrc $ENV{'PBDESTDIR'}/pbscript.$$ $ENV{'PBDESTDIR'}/pbtest";
+	} elsif (($cmt eq "Announce") || ($cmt eq "Web")) {
+		$src="$src $ENV{'PBTMP'}/pbscript";
+	} elsif ($cmt eq "Packages") {
+		# Get package list from file made during build2pkg
+		open(KEEP,"$ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") || die "Unable to read $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+		$src = <KEEP>;
+		chomp($src);
+		close(KEEP);
+		$src="$src $ENV{'PBBUILDDIR'}/pbscript.$$";
+	}
+	# Remove potential leading spaces (cause problem with basename)
+	$src =~ s/^ *//;
+	my $basesrc = "";
+	foreach my $i (split(/ +/,$src)) {
+		$basesrc .= " ".basename($i);
+	}
+
+	pb_log(0,"Sources handled ($cmt): $src\n");
+	pb_log(2,"values: ".Dumper(($host,$login,$dir,$port,$tmout,$path,$conf))."\n");
+	my ($sshhost,$sshlogin,$sshdir,$sshport) = pb_conf_get($host,$login,$dir,$port);
+	# Not mandatory...
+	my ($rbsconf,$testver,$delivery) = pb_conf_get_if($conf,"testver","delivery");
+	$delivery->{$ENV{'PBPROJ'}} = "" if (not defined $delivery->{$ENV{'PBPROJ'}});
+	my ($vtmout,$vepath);
+	# ...Except those in virtual context
+	if ($cmt =~ /^VE/) {
+		($vepath) = pb_conf_get($path);
+	}
+	if ($cmt =~ /^(V|R)M/) {
+		$vtmout = pb_distro_get_param($pbos,pb_conf_get_if($tmout));
+	}
+	my $remhost = $sshhost->{$ENV{'PBPROJ'}};
+	my $remdir = $sshdir->{$ENV{'PBPROJ'}};
+	if ($cmt =~ /^V[EM]|RM/) {
+		# In that case our real host is in the xxhost with the OS as key, not project as above
+		$remhost = pb_distro_get_param($pbos,$sshhost);
+	}
+	pb_log(2,"ssh: ".Dumper(($remhost,$sshlogin,$remdir,$sshport,$vepath,$rbsconf))."\n");
+	pb_log(2,"ssh: ".Dumper($vtmout)."\n") if (defined $vtmout);
+
+	my $mac;
+	if ($cmt !~ /^VE/) {
+		$mac = "$sshlogin->{$ENV{'PBPROJ'}}\@$remhost";
+		# Overwrite account value if passed as parameter
+		$mac = "$pbaccount\@$remhost" if (defined $pbaccount);
+		pb_log(2, "DEBUG: pbaccount: $pbaccount => mac: $mac\n") if (defined $pbaccount);
+	} else {
+		# VE
+		# Overwrite account value if passed as parameter (typically for setup2v)
+		$mac = $sshlogin->{$ENV{'PBPROJ'}};
+		$mac = $pbaccount if (defined $pbaccount);
+	}
+
+	my $tdir;
+	my $bdir;
+	if (($cmt eq "Sources") || ($cmt =~ /(V[EM]|RM)Script/)) {
+		$tdir = "$remdir/$delivery->{$ENV{'PBPROJ'}}/src";
+	} elsif ($cmt =~ /(V[EM]|RM)(build|test)/) {
+		$tdir = $remdir."/$ENV{'PBPROJ'}/delivery";
+		$bdir = $remdir."/$ENV{'PBPROJ'}/build";
+		# Remove a potential $ENV{'HOME'} as bdir should be relative to pb's home
+		$bdir =~ s|\$ENV.+\}/||;
+	} elsif ($cmt eq "Announce") {
+		$tdir = "$remdir/$delivery->{$ENV{'PBPROJ'}}";
+	} elsif ($cmt eq "Web") {
+		$tdir = "$remdir/$delivery->{$ENV{'PBPROJ'}}";
+	} elsif ($cmt eq "Packages") {
+		if (($pbos->{'type'} eq "rpm") || ($pbos->{'type'} eq "pkg") || ($pbos->{'type'} eq "hpux") || ($pbos->{'type'} eq "tgz")) {
+			# put packages under an arch subdir
+			$tdir = "$remdir/$delivery->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}";
+		} elsif (($pbos->{'type'} eq "deb") || ($pbos->{'type'} eq "ebuild")) {
+			# No need for an arch subdir
+			$tdir = "$remdir/$delivery->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}";
+		} else {
+			die "Please teach the dev team where to deliver ($pbos->{'type'} type of packages\n";
+		}
+
+		my $repodir = $tdir;
+		$repodir =~ s|^$remdir/||;
+
+		my ($pbrepo) = pb_conf_get("pbrepo");
+
+		# Repository management
+		open(PBS,"> $ENV{'PBBUILDDIR'}/pbscript.$$") || die "Unable to create $ENV{'PBBUILDDIR'}/pbscript.$$";
+		if ($pbos->{'type'} eq "rpm") {
+			# Also make a pbscript to generate yum/urpmi bases
+			print PBS << "EOF";
+#!/bin/bash
+# Prepare a script to ease yum setup
+cat > $ENV{'PBPROJ'}.repo << EOT
+[$ENV{'PBPROJ'}]
+name=$pbos->{'name'} $pbos->{'version'} $pbos->{'arch'} - $ENV{'PBPROJ'} Vanilla Packages
+baseurl=$pbrepo->{$ENV{'PBPROJ'}}/$repodir
+enabled=1
+gpgcheck=0
+EOT
+chmod 644 $ENV{'PBPROJ'}.repo
+
+# Clean up old repo content
+rm -rf headers/ repodata/
+# Create yum repo
+if [ -x /usr/bin/yum-arch ]; then
+	yum-arch .
+fi
+# Create repodata
+createrepo .
+EOF
+			if ($pbos->{'family'} eq "md") {
+				# For Mandriva add urpmi management
+				print PBS << "EOF";
+# Prepare a script to ease urpmi setup
+cat > $ENV{'PBPROJ'}.addmedia << EOT
+urpmi.addmedia $ENV{'PBPROJ'} $pbrepo->{$ENV{'PBPROJ'}}/$repodir with media_info/hdlist.cz
+EOT
+chmod 755 $ENV{'PBPROJ'}.addmedia
+
+# Clean up old repo content
+rm -f hdlist.cz synthesis.hdlist.cz
+# Create urpmi repo
+genhdlist2 --clean .
+if [ \$\? -ne 0 ]; then
+	genhdlist .
+fi
+EOF
+			}
+			if ($pbos->{'name'} eq "fedora") {
+				# Extract the spec file to please Fedora maintainers :-(
+				print PBS << "EOF";
+for p in $basesrc; do
+	echo \$p | grep -q 'src.rpm'
+	if [ \$\? -eq 0 ]; then
+		rpm2cpio \$p | cpio -ivdum --quiet '*.spec'
+	fi
+done
+EOF
+			}
+			if ($pbos->{'family'} eq "novell") {
+				# Add ymp scripts for one-click install on SuSE
+				print PBS << "EOF";
+# Prepare a script to ease SuSE one-click install
+# Cf: http://de.opensuse.org/1-Klick-Installation/ISV
+#
+cat > $ENV{'PBPROJ'}.ymp << EOT
+<?xml version="1.0" encoding="utf-8"?>
+<!-- vim: set sw=2 ts=2 ai et: -->
+<metapackage xmlns:os="http://opensuse.org/Standards/One_Click_Install" xmlns="http://opensuse.org/Standards/One_Click_Install">
+	<group><!-- The group of software, typically one for project-builder.org -->
+		<name>$ENV{'PBPROJ'} Bundle</name> <!-- Name of the software group -->
+		<summary>Software bundle for the $ENV{'PBPROJ'} project</summary> <!--This message is shown to the user and should describe the whole bundle -->
+		<description>This is the summary of the $ENV{'PBPROJ'} Project
+		      
+			Details are available on a per package basis below
+
+		</description><!--This is also shown to the user -->
+		<remainSubscribed>false</remainSubscribed> <!-- Don't know what it mean -->
+		<repositories><!-- List of needed repositories -->
+			<repository>
+				<name>$ENV{'PBPROJ'} Repository</name> <!-- Name of the repository  -->
+				<summary>This repository contains the $ENV{'PBPROJ'} project packages.</summary> <!-- Summary of the repository -->
+				<description>This repository contains the $ENV{'PBPROJ'} project packages.</description><!-- This description is shown to the user -->
+				<url>$pbrepo->{$ENV{'PBPROJ'}}/$repodir</url><!--URL of repository, which is added -->
+			</repository>
+		</repositories>
+		<software><!-- A List of packages, which should be added through the one-click-installation -->
+EOT
+for p in $basesrc; do
+	sum=`rpm -q --qf '%{SUMMARY}' \$p`
+	name=`rpm -q --qf '%{NAME}' \$p`
+	desc=`rpm -q --qf '%{description}' \$p`
+	cat >> $ENV{'PBPROJ'}.ymp << EOT
+			<item>
+				<name>\$name</name><!-- Name of the package, is shown to the user and used to identify the package at the repository -->
+				<summary>\$sum</summary> <!-- Summary of the package -->
+				<description>\$desc</description> <!-- Description, is shown to the user -->
+			</item>
+EOT
+done
+cat >> $ENV{'PBPROJ'}.ymp << EOT
+		</software>
+	</group>
+</metapackage>
+EOT
+chmod 644 $ENV{'PBPROJ'}.ymp
+EOF
+			}
+		} elsif ($pbos->{'type'} eq "deb") {
+			# Also make a pbscript to generate apt bases
+			# Cf: http://www.debian.org/doc/manuals/repository-howto/repository-howto.fr.html
+			# This dirname removes ver
+			my $rpd = dirname("$pbrepo->{$ENV{'PBPROJ'}}/$repodir");
+			print PBS << "EOF";
+#!/bin/bash
+# Prepare a script to ease apt setup
+cat > $ENV{'PBPROJ'}.sources.list << EOT
+deb $rpd $pbos->{'version'} contrib
+deb-src $rpd $pbos->{'version'} contrib
+EOT
+chmod 644 $ENV{'PBPROJ'}.sources.list
+
+# Up two levels to deal with the dist dir cross versions
+cd ..
+mkdir -p dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'} dists/$pbos->{'version'}/contrib/source
+
+# Prepare a script to create apt info file
+# Reuse twice after
+TMPD=`mktemp -d /tmp/pb.XXXXXXXXXX` || exit 1
+mkdir -p \$TMPD
+cat > \$TMPD/Release << EOT
+Archive: unstable
+Component: contrib
+Origin: $ENV{'PBPROJ'}
+Label: $ENV{'PBPROJ'} dev repository $pbrepo->{$ENV{'PBPROJ'}}
+EOT
+
+echo "Creating Packages metadata ($pbos->{'arch'})"
+dpkg-scanpackages -a$pbos->{'arch'} $pbos->{'version'} /dev/null | gzip -c9 > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Packages.gz
+dpkg-scanpackages -a$pbos->{'arch'} $pbos->{'version'} /dev/null | bzip2 -c9 > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Packages.bz2
+echo "Creating Contents metadata"
+apt-ftparchive contents $pbos->{'version'} | gzip -c9 > dists/$pbos->{'version'}/Contents.gz
+echo "Creating Release metadata ($pbos->{'arch'})"
+cat \$TMPD/Release > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Release
+echo "Architecture: $pbos->{'arch'}" >> dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Release
+echo "Creating Source metadata"
+dpkg-scansources $pbos->{'version'} /dev/null | gzip -c9 > dists/$pbos->{'version'}/contrib/source/Sources.gz
+cat \$TMPD/Release > dists/$pbos->{'version'}/contrib/source/Release
+echo "Architecture: Source" >> dists/$pbos->{'version'}/contrib/source/Release
+echo "Creating Release metadata"
+apt-ftparchive release dists/$pbos->{'version'} > dists/$pbos->{'version'}/Release
+rm -rf \$TMPD
+EOF
+		} elsif ($pbos->{'type'} eq "ebuild") {
+			# make a pbscript to generate links to latest version
+			print PBS << "EOF";
+#!/bin/bash
+# Prepare a script to create correct links
+for p in $src; do
+	echo \$p | grep -q '.ebuild'
+	if [ \$\? -eq 0 ]; then
+		j=`basename \$p`
+		pp=`echo \$j | cut -d'-' -f1`
+		ln -sf \$j \$pp.ebuild
+	fi
+done
+EOF
+		}
+		close(PBS);
+		chmod 0755,"$ENV{'PBBUILDDIR'}/pbscript.$$";
+	} else {
+		return;
+	}
+
+	# Useless for VE 
+	my $nport = pb_get_port($sshport,$pbos,$cmt) if ($cmt !~ /^VE/);
+
+	# Remove a potential $ENV{'HOME'} as tdir should be relative to pb's home
+	$tdir =~ s|\$ENV.+\}/||;
+
+	my $tm = "";
+	if ($cmt =~ /^(V|R)M/) {
+		$tm = "sleep $vtmout" if (defined $vtmout);
+	}
+
+	# ssh communication if not VE
+	# should use a hash instead...
+	my ($shcmd,$cpcmd,$cptarget,$cp2target);
+	if ($cmt !~ /^VE/) {
+		my $keyfile = pb_ssh_get(0);
+		$shcmd = "ssh -i $keyfile -q -o UserKnownHostsFile=/dev/null -p $nport $mac";
+		$cpcmd = "scp -i $keyfile -p -o UserKnownHostsFile=/dev/null -P $nport";
+		$cptarget = "$mac:$tdir";
+		if ($cmt =~ /^(V|R)Mbuild/) {
+			$cp2target = "$mac:$bdir";
+		}
+	} else {
+		my $tp = $vepath->{$ENV{'PBPROJ'}};
+		my $tpdir = "$tp/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}";
+		my ($ptr) = pb_conf_get("vetype");
+		my $vetype = $ptr->{$ENV{'PBPROJ'}};
+		if ($vetype eq "chroot") {
+			$shcmd = "sudo /usr/sbin/chroot $tpdir /bin/su - $mac -c ";
+		} elsif ($vetype eq "schroot") {
+			$shcmd = "schroot $tp -u $mac -- ";
+		}
+		$cpcmd = "sudo /bin/cp -r ";
+		# We need to get the home dir of the target account to deliver in the right place
+		open(PASS,"$tpdir/etc/passwd") || die "Unable to open $tpdir/etc/passwd";
+		my $homedir = "";
+		while (<PASS>) {
+			my ($c1,$c2,$c3,$c4,$c5,$c6,$c7) = split(/:/);
+			$homedir = $c6 if ($c1 =~ /^$mac$/);
+			pb_log(3,"Homedir: $homedir - account: $c6\n");
+		}
+		close(PASS);
+		$cptarget = "$tpdir/$homedir/$tdir";
+		if ($cmt eq "VEbuild") {
+			$cp2target = "$tpdir/$homedir/$bdir";
+		}
+		pb_log(2,"On VE using $cptarget as target dir to copy to\n");
+	}
+
+	my $logres = "";
+	# Do not touch when just announcing
+	if ($cmt ne "Announce") {
+		pb_system("$shcmd \"mkdir -p $tdir ; cd $tdir ; echo \'for i in $basesrc; do if [ -f \$i ]; then rm -f \$i; fi; done\ ; $cmd' | bash\"","Preparing $tdir on $cptarget");
+	} else {
+		$logres = "> ";
+	}
+	pb_system("cd $ENV{'PBBUILDDIR'} ; $cpcmd $src $cptarget 2> /dev/null","$cmt delivery in $cptarget");
+
+	# For VE we need to change the owner manually
+	if ($cmt =~ /^VE/) {
+		pb_system("$shcmd \"sudo chown -R $mac $tdir\"","Adapt owner in $tdir to $mac");
+	}
+
+	# Use the right script name depending on context
+	my $pbscript;
+	if (($cmt =~ /^(V[EM]|RM)/) || ($cmt =~ /Packages/)){
+		$pbscript = "pbscript.$$";
+	} else {
+		$pbscript = "pbscript";
+	}
+
+	pb_system("$shcmd \"echo \'cd $tdir ; if [ -x $pbscript ]; then ./$pbscript; fi ; rm -f ./$pbscript\' | bash\"","Executing pbscript on $cptarget if needed","verbose");
+	if ($cmt =~ /^(V[EM]|RM)build/) {
+		# Get back info on pkg produced, compute their name and get them from the VM/RM
+		pb_system("$cpcmd $cp2target/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$ 2> /dev/null","Get package names in $cp2target");
+		# For VE we need to change the owner manually
+		if ($cmt eq "VEbuild") {
+			pb_system("sudo chown $UID $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$","Adapt owner in $tdir to $UID");
+		}
+		if (not -f "$ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$") {
+			pb_log(0,"Problem with VM/RM $v on $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$");
+		} else {
+			open(KEEP,"$ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$") || die "Unable to read $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$";
+			my $src = <KEEP>;
+			chomp($src);
+			close(KEEP);
+			unlink("$ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$");
+
+			$src =~ s/^ *//;
+			pb_mkdir_p("$ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}");
+			# Change pgben to make the next send2target happy
+			my $made = "";
+	
+			# For VM/RM we don't want shell expansion to hapen locally but remotely
+			my $delim = '\'';
+			if ($cmt =~ /^VEbuild/) {
+				# For VE we need to support shell expansion locally
+				$delim = "";
+			}	
+
+			open(KEEP,"> $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") || die "Unable to write $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}-$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+			foreach my $p (split(/ +/,$src)) {
+				my $j = basename($p);
+				pb_system("$cpcmd $cp2target/$delim$p$delim $ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} 2> /dev/null","Recovery of package $j in $ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}");
+				$made="$made $pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/$j"; # if (($pbos->{'type'} ne "rpm") || ($j !~ /.src.rpm$/));
+			}
+			print KEEP "$made\n";
+			close(KEEP);
+			pb_system("$shcmd \"rm -rf $tdir $bdir\"","$cmt cleanup");
+
+			# Sign packages locally
+			if ($pbos->{'type'} eq "rpm") {
+				#pb_system("rpm --addsign --define \"_signature gpg\" --define \"_gpg_name $ENV{'PBPACKAGER'}\" --define \"__gpg_sign_cmd /usr/bin/gpg --batch --no-verbose --no-armor --no-tty --no-secmem-warning -sbo %{__signature_filename} %{__plaintext_filename} --use-agent\" $made","Signing RPM packages packages");
+			} elsif ($pbos->{'type'} eq "deb") {
+				#pb_system("debsign $made","Signing DEB packages");
+			} else {
+				pb_log(0,"I don't know yet how to sign packages for type $pbos->{'type'}.\nPlease give feedback to dev team\n");
+			}
+
+			# We want to send them to the ssh account so overwrite what has been done before
+			undef $pbaccount;
+			pb_log(2,"Before sending pkgs, vmexist: $vmexist, vmpid: $vmpid\n");
+			pb_send2target("Packages",$pbos->{'name'}."-".$pbos->{'version'}."-".$pbos->{'arch'},$vmexist,$vmpid);
+			pb_rm_rf("$ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}");
+		}
+	}
+	unlink("$ENV{'PBDESTDIR'}/pbscript.$$") if (($cmt =~ /^(V[ME]|RM)/) || ($cmt =~ /Packages/));
+
+	pb_log(2,"Before halt, vmexist: $vmexist, vmpid: $vmpid\n");
+	if ((! $vmexist) && ($cmt =~ /^VM/)) {
+		# If in setupvm then takes a snapshot just before halting
+		if ($snapme != 0) {
+			my ($vmmonport,$vmtype) = pb_conf_get("vmmonport","vmtype");
+			# For monitoring control
+			if ((($vmtype->{$ENV{'PBPROJ'}}) eq "kvm") || (($vmtype->{$ENV{'PBPROJ'}}) eq "qemu")) {
+				eval
+				{
+				require Net::Telnet;
+				Net::Telnet->import();
+				};
+				if ($@) {
+					# Net::Telnet not found
+					pb_log(1,"ADVISE: Install Net::Telnet to benefit from monitoring control and snapshot feature.\nWARNING: No snapshot created");
+				} else {
+					my $t = new Net::Telnet (Timeout => 120, Host => "localhost", Port => $vmmonport->{$ENV{'PBPROJ'}}) || die "Unable to dialog on the monitor";
+					# move to monitor mode
+					my @lines = $t->cmd("c");
+					# Create a snapshot named pb
+					@lines = $t->cmd("savevm pb");
+					# Write the new status in the VM
+					@lines = $t->cmd("commit all");
+					# End
+					@lines = $t->cmd("quit");
+				}
+			}
+		}
+		my $hoption = "-p";
+		my $hpath = pb_distro_get_param($pbos,pb_conf_get("ospathcmd-halt"));
+		# Solaris doesn't support -p of halt
+		if ($pbos->{'type'} eq "pkg") {
+			$hoption = "" ;
+		}
+		pb_system("$shcmd \"sudo $hpath $hoption \"; $tm ; echo \'if [ -d /proc/$vmpid ]; then kill -9 $vmpid; fi \' | bash ; sleep 10","VM $v halt (pid $vmpid)");
+	}
+	if (($cmt =~ /^VE/) && ($snapme != 0)) {
+		my $tpdir = "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}";
+		pb_system("sudo tar cz -C $tpdir -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz .","Creating a snapshot of $tpdir");
+	}
+}
+
+sub pb_script2v {
+	my $pbscript=shift;
+	my $vtype=shift;
+	my $pbforce=shift || 0;	# Force stop of VM. Default not.
+	my $vm1=shift || undef;	# Only that VM/VE/RM to treat. Default all.
+	my $snapme=shift || 0;	# Do we have to create a snapshot. Default not.
+	my $vm;
+	my $all;
+
+	pb_log(2,"DEBUG: pb_script2v($pbscript,$vtype,$pbforce,".Dumper($vm1).",$snapme)\n");
+	# Prepare the script to be executed on the VM/VE/RM
+	# in $ENV{'PBDESTDIR'}/pbscript.$$
+	if ((defined $pbscript ) && ($pbscript ne "$ENV{'PBDESTDIR'}/pbscript.$$")) {
+		copy($pbscript,"$ENV{'PBDESTDIR'}/pbscript.$$") || die "Unable to create $ENV{'PBDESTDIR'}/pbscript.$$";
+		chmod 0755,"$ENV{'PBDESTDIR'}/pbscript.$$";
+	}
+
+	if (not defined $vm1) {
+		($vm,$all) = pb_get2v($vtype);
+	} else {
+		@$vm = ($vm1);
+	}
+	my ($vmexist,$vmpid) = (undef,undef);
+
+	foreach my $v (@$vm) {
+		# Launch VM/VE
+		($vmexist,$vmpid) = pb_launchv($vtype,$v,0,$snapme,$pbsnap);
+
+		if ($vtype eq "vm") {
+			pb_log(2,"DEBUG: After pb_launchv, vmexist: $vmexist, vmpid: $vmpid\n");
+
+			# Skip that VM/RM if something went wrong
+			next if (($vmpid == 0) && ($vmexist == 0));
+
+			# If force stopping the VM then reset vmexist
+			if ($pbforce == 1) {
+				$vmpid = $vmexist;
+				$vmexist = 0;
+			}
+		} else {
+			#VE
+			$vmexist = 0;
+			$vmpid = 0;
+		}
+
+		# Gather all required files to send them to the VM/VE/RM
+		# and launch the build through pbscript
+		pb_log(2,"DEBUG: Before send2target, vmexist: $vmexist, vmpid: $vmpid\n");
+		pb_send2target(uc($vtype)."Script","$v",$vmexist,$vmpid,$snapme);
+
+	}
+}
+
+sub pb_launchv {
+	my $vtype = shift;
+	my $v = shift;
+	my $create = shift || 0;		# By default do not create a VM/VE/RM
+	my $snapme = shift || 0;		# By default do not snap a VM/VE/RM
+	my $usesnap = shift || 1;		# By default study the usage of the snapshot feature of VM/VE/RM
+
+	# If creation or snapshot creation mode, no snapshot usable
+	if (($create == 1) || ($snapme == 1)) {
+		$usesnap = 0;
+	}
+
+	pb_log(2,"DEBUG: pb_launchv($vtype,$v,$create,$snapme,$usesnap)\n");
+	die "No VM/VE/RM defined, unable to launch" if (not defined $v);
+	# Keep only the first VM in case many were given
+	$v =~ s/,.*//;
+
+	my $pbos = pb_distro_get_context($v);
+	my $arch = pb_get_arch();
+
+	# Launch the VMs/VEs
+	if ($vtype eq "vm") {
+		die "-i iso parameter needed" if (((not defined $iso) || ($iso eq "")) && ($create != 0));
+
+		# TODO: vmmonport should be optional
+		my ($ptr,$ptr2,$vmpath,$vmport,$vms,$vmmonport) = pb_conf_get("vmtype","vmcmd","vmpath","vmport","vmsize","vmmonport");
+		my ($vmopt,$vmmem,$vmtmout,$vmsnap,$vmbuildtm) = pb_conf_get_if("vmopt","vmmem","vmtmout","vmsnap","vmbuildtm");
+		my $vmsize = pb_distro_get_param($pbos,$vms);
+
+		my $vmtype = $ptr->{$ENV{'PBPROJ'}};
+		my $vmcmd = $ptr2->{$ENV{'PBPROJ'}};
+
+		if (defined $opts{'g'}) {
+			if (($vmtype eq "kvm") || ($vmtype eq "qemu")) {
+				$ENV{'PBVMOPT'} = "--nographic";
+			}
+		}
+		if (not defined $ENV{'PBVMOPT'}) {
+			$ENV{'PBVMOPT'} = "";
+		}
+		# Save the current status for later restoration
+		$ENV{'PBOLDVMOPT'} = $ENV{'PBVMOPT'};
+		# Set a default timeout of 2 minutes
+		if (not defined $ENV{'PBVMTMOUT'}) {
+			$ENV{'PBVMTMOUT'} = "120";
+		}
+		if (defined $vmopt->{$v}) {
+			$ENV{'PBVMOPT'} .= " $vmopt->{$v}" if ($ENV{'PBVMOPT'} !~ / $vmopt->{$v}/);
+		} elsif (defined $vmopt->{$ENV{'PBPROJ'}}) {
+			$ENV{'PBVMOPT'} .= " $vmopt->{$ENV{'PBPROJ'}}" if ($ENV{'PBVMOPT'} !~ / $vmopt->{$ENV{'PBPROJ'}}/);
+		}
+
+		# How much memory to allocate for VMs
+		if (defined $vmmem->{$v}) {
+			$ENV{'PBVMOPT'} .= " -m $vmmem->{$v}";
+		} elsif (defined $vmmem->{$ENV{'PBPROJ'}}) {
+			$ENV{'PBVMOPT'} .= " -m $vmmem->{$ENV{'PBPROJ'}}";
+		}
+
+		# Are we allowed to use snapshot feature 
+		if ($usesnap == 1) {
+			if ((defined $vmsnap->{$v}) && ($vmsnap->{$v} =~ /true/i)) {
+				$ENV{'PBVMOPT'} .= " -snapshot";
+			} elsif ((defined $vmsnap->{$ENV{'PBPROJ'}}) && ($vmsnap->{$ENV{'PBPROJ'}} =~ /true/i)) {
+				$ENV{'PBVMOPT'} .= " -snapshot";
+			} elsif ($pbsnap eq 1) {
+				$ENV{'PBVMOPT'} .= " -snapshot";
+			}
+		} 
+		if ($snapme != 0) {
+			if (($vmtype eq "kvm") || ($vmtype eq "qemu")) {
+				# Configure the monitoring to automate the creation of the 'pb' snapshot
+				$ENV{'PBVMOPT'} .= " -serial mon:telnet::$vmmonport->{$ENV{'PBPROJ'}},server,nowait";
+				# In that case no snapshot call needed
+				$ENV{'PBVMOPT'} =~ s/ -snapshot//;
+			}
+		}
+		if (defined $vmtmout->{$v}) {
+			$ENV{'PBVMTMOUT'} = $vmtmout->{$v};
+		} elsif (defined $vmtmout->{$ENV{'PBPROJ'}}) {
+			$ENV{'PBVMTMOUT'} = $vmtmout->{$ENV{'PBPROJ'}};
+		}
+		my $nport = pb_get_port($vmport,$pbos,$vtype);
+	
+		my $cmd;
+		my $vmm;		# has to be used for pb_check_ps
+		if (($vmtype eq "qemu") || ($vmtype eq "kvm")) {
+			$vmm = "$vmpath->{$ENV{'PBPROJ'}}/$v.qemu";
+			if (($create != 0) || (defined $iso)) {
+				$ENV{'PBVMOPT'} .= " -cdrom $iso -boot d";
+			}
+			# Always redirect the network and always try to use a 'pb' snapshot
+			$cmd = "$vmcmd $ENV{'PBVMOPT'} -redir tcp:$nport:10.0.2.15:22 -loadvm pb $vmm"
+		} elsif ($vmtype eq "xen") {
+		} elsif ($vmtype eq "vmware") {
+		} else {
+			die "VM of type $vmtype not supported. Report to the dev team";
+		}
+		# Restore the ENV VAR Value
+		$ENV{'PBVMOPT'} = $ENV{'PBOLDVMOPT'};
+
+		my ($tmpcmd,$void) = split(/ +/,$cmd);
+		my $vmexist = pb_check_ps($tmpcmd,$vmm);
+		my $vmpid = 0;
+		if (! $vmexist) {
+			if ($create != 0) {
+				die("Found an existing Virtual machine $vmm. Won't overwrite") if (-r $vmm);
+				if (($vmtype eq "qemu") || ($vmtype eq "xen") || ($vmtype eq "kvm")) {
+					my $command = pb_check_req("qemu-img",0);
+					pb_system("$command create -f qcow2 $vmm $vmsize","Creating the QEMU VM");
+				} elsif ($vmtype eq "vmware") {
+				} else {
+				}
+			}
+			if (! -f "$vmm") {
+				pb_log(0,"Unable to find VM $vmm\n");
+			} else {
+				# Is the SSH port free? if not kill the existing process using it after a build timeout period
+				my $vmssh = pb_check_ps($tmpcmd,"tcp:$nport:10.0.2.15:22");
+				if ($vmssh) {
+					my $buildtm = $ENV{'PBVMTMOUT'};
+					if (defined $vmbuildtm->{$v}) {
+						$buildtm = $vmbuildtm->{$v};
+					} elsif (defined $vmbuildtm->{$ENV{'PBPROJ'}}) {
+						$buildtm = $vmbuildtm->{$ENV{'PBPROJ'}};
+					}
+
+					sleep $buildtm;
+					pb_log(0,"WARNING: Killing the process ($vmssh) using port $nport (previous failed VM ?)\n");
+					kill 15,$vmssh;
+					# Let it time to exit
+					sleep 5;
+				}
+				pb_system("$cmd &","Launching the VM $vmm");
+				# Using system allows to kill it externaly if needed
+				pb_system("sleep $ENV{'PBVMTMOUT'}","Waiting $ENV{'PBVMTMOUT'} s for VM $v to come up");
+				$vmpid = pb_check_ps($tmpcmd,$vmm);
+				pb_log(0,"VM $vmm launched (pid $vmpid)\n");
+			}
+		} else {
+			pb_log(0,"Found an existing VM $vmm (pid $vmexist)\n");
+		}
+		pb_log(2,"DEBUG: pb_launchv returns ($vmexist,$vmpid)\n");
+		return($vmexist,$vmpid);
+	} elsif ($vtype eq "ve") {
+		# VE here
+		# Get distro context
+		my $pbos = pb_distro_get_context($v);
+
+		# Get VE context
+		my ($ptr,$vepath) = pb_conf_get("vetype","vepath");
+		my $vetype = $ptr->{$ENV{'PBPROJ'}};
+
+		# We can probably only get those params now we have the distro context
+		my ($rbsb4pi,$rbspi,$vesnap,$oscodename,$osmindep,$verebuild,$rbsmirrorsrv) = pb_conf_get_if("rbsb4pi","rbspi","vesnap","oscodename","osmindep","verebuild","rbsmirrorsrv");
+
+		# We need to avoid umask propagation to the VE
+		umask 0022;
+
+		if (($vetype eq "chroot") || ($vetype eq "schroot")) {
+			# Architecture consistency
+			if ($arch ne $pbos->{'arch'}) {
+				die "Unable to launch a VE of architecture $pbos->{'arch'} on a $arch platform" if (($pbos->{'arch'} eq "x86_64") && ($arch =~ /i?86/));
+			}
+
+			my ($verpmtype,$vedebtype) = pb_conf_get("verpmtype","vedebtype");
+			if (($create != 0) || ((defined $verebuild) && ($verebuild->{$ENV{'PBPROJ'}} =~ /true/i)) || ($pbforce == 1)) {
+				my ($rbsopt1) = pb_conf_get_if("rbsopt");
+
+				# We have to rebuild the chroot
+				if ($pbos->{'type'} eq "rpm") {
+
+					# Which tool is used
+					my $verpmstyle = $verpmtype->{$ENV{'PBPROJ'}};
+
+					# Get potential rbs option
+					my $rbsopt = "";
+					if (defined $rbsopt1) {
+						if (defined $rbsopt1->{$verpmstyle}) {
+							$rbsopt = $rbsopt1->{$verpmstyle};
+						} elsif (defined $rbsopt1->{$ENV{'PBPROJ'}}) {
+							$rbsopt = $rbsopt1->{$ENV{'PBPROJ'}};
+						} else {
+							$rbsopt = "";
+						}
+					}
+
+					my $postinstall = pb_get_postinstall($pbos,$rbspi,$verpmstyle);
+					if ($verpmstyle eq "rinse") {
+						# Need to reshape the mirrors generated with local before-post-install script
+						my $b4post = "--before-post-install ";
+						my $postparam = pb_distro_get_param($pbos,$rbsb4pi);
+						if ($postparam eq "") {
+							$b4post = "";
+						} else {
+							$b4post .= $postparam;
+						}
+
+						# Need to reshape the package list for pb
+						my $addpkgs;
+						$postparam = "";
+						$postparam .= pb_distro_get_param($pbos,$osmindep);
+						if ($postparam eq "") {
+							$addpkgs = "";
+						} else {
+							my $pkgfile = "$ENV{'PBTMP'}/addpkgs.lis";
+							open(PKG,"> $pkgfile") || die "Unable to create $pkgfile";
+							foreach my $p (split(/,/,$postparam)) {
+								print PKG "$p\n";
+							}
+							close(PKG);
+							$addpkgs = "--add-pkg-list $pkgfile";
+						}
+
+						my $rinseverb = "";
+						$rinseverb = "--verbose" if ($pbdebug gt 0);
+						my ($rbsconf) = pb_conf_get("rbsconf");
+
+						my $command = pb_check_req("rinse",0);
+						pb_system("sudo $command --directory \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" --arch \"$pbos->{'arch'}\" --distribution \"$pbos->{'name'}-$pbos->{'version'}\" --config \"$rbsconf->{$ENV{'PBPROJ'}}\" $b4post $postinstall $rbsopt $addpkgs $rinseverb","Creating the rinse VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose");
+					} elsif ($verpmstyle eq "rpmbootstrap") {
+						my $rbsverb = "";
+						foreach my $i (1..$pbdebug) {
+							$rbsverb .= " -v";
+						}
+						my $addpkgs = "";
+						my $postparam = "";
+						$postparam .= pb_distro_get_param($pbos,$osmindep);
+						if ($postparam eq "") {
+							$addpkgs = "";
+						} else {
+							$addpkgs = "-a $postparam";
+						}
+						my $command = pb_check_req("rpmbootstrap",0);
+						pb_system("sudo $command $rbsopt $postinstall $addpkgs $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} $rbsverb","Creating the rpmbootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose");
+					} elsif ($verpmstyle eq "mock") {
+						my ($rbsconf) = pb_conf_get("rbsconf");
+						my $command = pb_check_req("mock",0);
+						pb_system("sudo $command --init --resultdir=\"/tmp\" --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v $rbsopt","Creating the mock VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})");
+						# Once setup we need to install some packages, the pb account, ...
+						pb_system("sudo $command --install --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v su","Configuring the mock VE");
+					} else {
+						die "Unknown verpmtype type $verpmstyle. Report to dev team";
+					}
+				} elsif ($pbos->{'type'} eq "deb") {
+					my $vedebstyle = $vedebtype->{$ENV{'PBPROJ'}};
+
+					my $codename = pb_distro_get_param($pbos,$oscodename);
+					my $postparam = "";
+					my $addpkgs;
+					$postparam .= pb_distro_get_param($pbos,$osmindep);
+					if ($postparam eq "") {
+						$addpkgs = "";
+					} else {
+						$addpkgs = "--include $postparam";
+					}
+					my $debmir = "";
+					$debmir .= pb_distro_get_param($pbos,$rbsmirrorsrv);
+
+					# Get potential rbs option
+					my $rbsopt = "";
+					if (defined $rbsopt1) {
+						if (defined $rbsopt1->{$vedebstyle}) {
+							$rbsopt = $rbsopt1->{$vedebstyle};
+						} elsif (defined $rbsopt1->{$ENV{'PBPROJ'}}) {
+							$rbsopt = $rbsopt1->{$ENV{'PBPROJ'}};
+						} else {
+							$rbsopt = "";
+						}
+					}
+	
+					# debootstrap works with amd64 not x86_64
+					my $debarch = $pbos->{'arch'};
+					$debarch = "amd64" if ($pbos->{'arch'} eq "x86_64");
+					if ($vedebstyle eq "debootstrap") {
+						my $dbsverb = "";
+						$dbsverb = "--verbose" if ($pbdebug gt 0);
+
+						# Some perl modules are in Universe on Ubuntu
+						$rbsopt .= " --components=main,universe" if ($pbos->{'name'} eq "ubuntu");
+
+					 	pb_system("sudo /usr/sbin/debootstrap $dbsverb $rbsopt --arch=$debarch $addpkgs $codename \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" $debmir","Creating the debootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose");
+						# debootstrap doesn't create an /etc/hosts file
+						if (! -f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts" ) {
+							pb_system("sudo cp /etc/hosts $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts");
+						}
+					} else {
+						die "Unknown vedebtype type $vedebstyle. Report to dev team";
+					}
+				} elsif ($pbos->{'type'} eq "ebuild") {
+					die "Please teach the dev team how to build gentoo chroot";
+				} else {
+					die "Unknown distribution type $pbos->{'type'}. Report to dev team";
+				}
+			}
+			# Fix modes to allow access to the VE for pb user
+			pb_system("sudo chmod 755 $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}","Fixing permissions");
+
+			# Test if an existing snapshot exists and use it if appropriate
+			# And also use it of no local extracted VE is present
+			if ((-f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz") &&
+				(((defined $vesnap->{$v}) && ($vesnap->{$v} =~ /true/i)) ||
+					((defined $vesnap->{$ENV{'PBPROJ'}}) && ($vesnap->{$ENV{'PBPROJ'}} =~ /true/i)) ||
+					($pbsnap eq 1) ||
+					(! -d "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"))) {
+						pb_system("sudo rm -rf $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo mkdir -p $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo tar xz  -C $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz","Extracting snapshot of $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz under $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}");
+			}
+			# Nothing more to do for VE. No real launch
+		} else {
+			die "VE of type $vetype not supported. Report to the dev team";
+		}
+	} else {
+		# RM here
+		# Get distro context
+		my $pbos = pb_distro_get_context($v);
+
+		# Get RM context
+		my ($ptr,$rmpath) = pb_conf_get("rmtype","rmpath");
+
+		# Nothing more to do for RM. No real launch
+		# For the moment we support the RM is already running
+		# For ProLiant may be able to power them on if needed later on as an example.
+	}
+}
+
+# Return string for date synchro
+sub pb_date2v {
+
+my $vtype = shift;
+my $pbos = shift;
+
+my ($ntp) = pb_conf_get_if($vtype."ntp");
+my $vntp = $ntp->{$ENV{'PBPROJ'}} if (defined $ntp);
+my $ntpline = undef;
+
+if (defined $vntp) {
+	# ntp command depends on pbos
+	my $vntpcmd = pb_distro_get_param($pbos,pb_conf_get($vtype."ntpcmd"));
+	$ntpline = "sudo $vntpcmd $vntp";
+}
+# Force new date to be in the future compared to the date 
+# of the host by adding 1 minute
+my @date=pb_get_date();
+$date[1]++;
+my $upddate = strftime("%m%d%H%M%Y", @date);
+my $dateline = "sudo /bin/date $upddate";
+if (defined $ntpline) {
+	return($ntpline);
+} else {
+	return($dateline);
+}
+}
+
+sub pb_build2v {
+
+my $vtype = shift;
+my $action = shift || "build";
+
+my ($v,$all) = pb_get2v($vtype);
+
+# Send tar files when we do a global generation
+pb_build2ssh() if (($all == 1) && ($action eq "build"));
+
+# Adapt // mode to memory size
+$pbparallel = pb_set_parallel($vtype);
+
+my ($vmexist,$vmpid) = (undef,undef);
+my $pm;
+if (defined $pbparallel) {
+	$pm = new Parallel::ForkManager($pbparallel);
+
+	# Set which port the VM/RM will use to communicate
+	$pm->run_on_start(\&pb_set_port);
+}
+
+my $counter = 0;
+foreach my $v (@$v) {
+	$counter++;
+	# Modulo 2 * pbparallel (to avoid synchronization problems)
+	$counter = 1 if ((defined $pbparallel) && ($counter > 2 * $pbparallel));
+	$pm->start($counter) and next if (defined $pbparallel);
+	# Prepare the script to be executed on the VM/VE/RM
+	# in $ENV{'PBDESTDIR'}/pbscript.$$
+	open(SCRIPT,"> $ENV{'PBDESTDIR'}/pbscript.$$") || die "Unable to create $ENV{'PBDESTDIR'}/pbscript.$$";
+	print SCRIPT "#!/bin/bash\n";
+
+	# Transmit the verbosity level to the virtual env/mach.
+	my $verbose = "";
+	my $i = 0;							# minimal debug level
+	while ($i lt $pbdebug) {
+		$verbose .= "-v ";
+		$i++;
+	}
+	# Activate script verbosity if at least 2 for pbdebug
+	print SCRIPT "set -x\n" if ($i gt 1);
+	# Quiet if asked to be so on the original system
+	$verbose = "-q" if ($pbdebug eq -1);
+
+	print SCRIPT "echo ... Execution needed\n";
+	print SCRIPT "# This is in directory delivery\n";
+	print SCRIPT "# Setup the variables required for building\n";
+	print SCRIPT "export PBPROJ=$ENV{'PBPROJ'}\n";
+
+	if ($action eq "build") {
+		print SCRIPT "# Preparation for pb\n";
+		print SCRIPT "mv .pbrc \$HOME\n";
+		print SCRIPT "cd ..\n";
+	}
+
+	# VE needs a good /proc
+	if ($vtype eq "ve") {
+		print SCRIPT "sudo /bin/mount -t proc /proc /proc\n";
+	}
+
+	# Get distro context
+	my $pbos = pb_distro_get_context($v);
+	
+	my $ntpline = pb_date2v($vtype,$pbos);
+	print SCRIPT "# Time sync\n";
+	print SCRIPT "echo 'setting up date with '";
+	print SCRIPT "echo $ntpline\n";
+	print SCRIPT "$ntpline\n";
+	# Use potential local proxy declaration in case we need it to download repo, pkgs, ...
+	if (defined $ENV{'http_proxy'}) {
+		print SCRIPT "export http_proxy=\"$ENV{'http_proxy'}\"\n";
+	}
+
+	if (defined $ENV{'ftp_proxy'}) {
+		print SCRIPT "export ftp_proxy=\"$ENV{'ftp_proxy'}\"\n";
+	}
+
+	# Get list of packages to build/test and get some ENV vars as well
+	my $ptr = pb_get_pkg();
+	@pkgs = @$ptr;
+	my $p = join(' ',@pkgs) if (@pkgs);
+	print SCRIPT "export PBPROJVER=$ENV{'PBPROJVER'}\n";
+	print SCRIPT "export PBPROJTAG=$ENV{'PBPROJTAG'}\n";
+	print SCRIPT "export PBPACKAGER=\"$ENV{'PBPACKAGER'}\"\n";
+
+	# We may need to do some other tasks before building. Read a script here to finish setup
+	if (-x "$ENV{'PBDESTDIR'}/pb$vtype".".pre") {
+		print SCRIPT "# Special pre-instructions to be launched\n";
+		print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype".".pre");
+	}
+
+	if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."$action.pre") {
+		print SCRIPT "# Special pre-$action instructions to be launched\n";
+		print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."$action.pre");
+	}
+
+	print SCRIPT "# $action\n";
+	print SCRIPT "echo $action"."ing packages on $vtype...\n";
+
+	if (($action eq "test") && (! -x "$ENV{'PBDESTDIR'}/pbtest")) {
+			die "No test script ($ENV{'PBDESTDIR'}/pbtest) found when in test mode. Aborting ...";
+	}
+	print SCRIPT "pb $verbose -p $ENV{'PBPROJ'} $action"."2pkg $p\n";
+
+	if ($vtype eq "ve") {
+		print SCRIPT "sudo /bin/umount /proc\n";
+	}
+
+	# We may need to do some other tasks after building. Read a script here to exit properly
+	if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."$action.post") {
+		print SCRIPT "# Special post-$action instructions to be launched\n";
+		print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."$action.post");
+	}
+
+	if (-x "$ENV{'PBDESTDIR'}/pb$vtype".".post") {
+		print SCRIPT "# Special post-instructions to be launched\n";
+		print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype".".post");
+	}
+
+	close(SCRIPT);
+	chmod 0755,"$ENV{'PBDESTDIR'}/pbscript.$$";
+	
+	# Launch the VM/VE/RM
+	($vmexist,$vmpid) = pb_launchv($vtype,$v,0);
+
+
+	if ($vtype eq "vm") {
+		# Skip that VM if something went wrong
+		if (($vmpid == 0) && ($vmexist == 0)) {
+			$pm->finish if (defined $pbparallel);
+			next;
+		}
+	} else {
+		# VE/RM
+		$vmexist = 0;
+		$vmpid = 0;
+	}
+	# Gather all required files to send them to the VM/VE
+	# and launch the build through pbscript
+	pb_log(2,"Calling send2target $vtype,$v,$vmexist,$vmpid\n");
+	pb_send2target(uc($vtype).$action,"$v",$vmexist,$vmpid);
+	$pm->finish if (defined $pbparallel);
+}
+$pm->wait_all_children if (defined $pbparallel);
+}
+
+
+sub pb_clean {
+
+	my $sleep=10;
+	die "Unable to get env var PBDESTDIR" if (not defined $ENV{'PBDESTDIR'});
+	die "Unable to get env var PBBUILDDIR" if (not defined $ENV{'PBBUILDDIR'});
+	pb_log(0,"We will now wait $sleep s before removing both directories\n$ENV{'PBDESTDIR'} and $ENV{'PBBUILDDIR'}.\nPlease break me if this is wrong\n");
+	sleep $sleep;
+	pb_rm_rf($ENV{'PBDESTDIR'});
+	pb_rm_rf($ENV{'PBBUILDDIR'});
+}
+
+sub pb_newver {
+
+	die "-V Version parameter needed" if ((not defined $newver) || ($newver eq ""));
+
+	# Need this call for PBDIR
+	my ($scheme2,$uri) = pb_cms_init($pbinit);
+
+	my ($pbconf,$pburl) = pb_conf_get("pbconfurl","pburl");
+	$uri = $pbconf->{$ENV{'PBPROJ'}};
+	my ($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+
+	# Checking CMS repositories status
+	($scheme2, $account, $host, $port, $path) = pb_get_uri($pburl->{$ENV{'PBPROJ'}});
+
+	if ($scheme !~ /^svn/) {
+		die "Only SVN is supported at the moment";
+	}
+
+	my $res = pb_cms_isdiff($scheme,$ENV{'PBROOTDIR'});
+	die "ERROR: No differences accepted in CMS for $ENV{'PBROOTDIR'} before creating a new version" if ($res != 0);
+
+	$res = pb_cms_isdiff($scheme2,$ENV{'PBDIR'});
+	die "ERROR: No differences accepted in CMS for $ENV{'PBDIR'} before creating a new version" if ($res != 0);
+
+	# Tree identical between PBCONFDIR and PBROOTDIR. The delta is what 
+	# we want to get for the root of the new URL
+
+	my $tmp = $ENV{'PBROOTDIR'};
+	$tmp =~ s|^$ENV{'PBCONFDIR'}||;
+
+	my $newurl = "$uri/".dirname($tmp)."/$newver";
+	# Should probably use projver in the old file
+	my $oldver= basename($tmp);
+
+	# Duplicate and extract project-builder part
+	pb_log(2,"Copying $uri/$tmp to $newurl\n");
+	pb_cms_copy($scheme,"$uri/$tmp",$newurl);
+	pb_log(2,"Checkout $newurl to $ENV{'PBROOTDIR'}/../$newver\n");
+	pb_cms_up($scheme,"$ENV{'PBCONFDIR'}/..");
+
+	# Duplicate and extract project
+	my $newurl2 = "$pburl->{$ENV{'PBPROJ'}}/".dirname($tmp)."/$newver";
+
+	pb_log(2,"Copying $pburl->{$ENV{'PBPROJ'}}/$tmp to $newurl2\n");
+	pb_cms_copy($scheme2,"$pburl->{$ENV{'PBPROJ'}}/$tmp",$newurl2);
+	pb_log(2,"Checkout $newurl2 to $ENV{'PBDIR'}/../$newver\n");
+	pb_cms_up($scheme2,"$ENV{'PBDIR'}/..");
+
+	# Update the .pb file
+	open(FILE,"$ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb") || die "Unable to open $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb";
+	open(OUT,"> $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb.new") || die "Unable to write to $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb.new";
+	while(<FILE>) {
+		s/^projver\s+$ENV{'PBPROJ'}\s*=\s*$oldver/projver $ENV{'PBPROJ'} = $newver/;
+		pb_log(0,"Changing projver from $oldver to $newver in $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb\n") if (/^projver\s+$ENV{'PBPROJ'}\s*=\s*$oldver/);
+		pb_log(0,"Commenting testver in $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb\n") if (/^testver/);
+		s/^testver/#testver/;
+		print OUT $_;
+		pb_log(0,"Please check delivery (".chomp($_).") in $ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb\n") if (/^delivery/);
+	}
+	close(FILE);
+	close(OUT);
+	rename("$ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb.new","$ENV{'PBROOTDIR'}/../$newver/$ENV{'PBPROJ'}.pb");
+
+	# Checking pbcl files
+	foreach my $f (<$ENV{'PBROOTDIR'}/*/pbcl>) {
+		# Compute new pbcl file
+		my $f2 = $f;
+		$f2 =~ s|$ENV{'PBROOTDIR'}|$ENV{'PBROOTDIR'}/../$newver/|;
+		open(PBCL,$f) || die "Unable to open $f";
+		my $foundnew = 0;
+		while (<PBCL>) {
+			$foundnew = 1 if (/^$newver \(/);
+		}
+		close(PBCL);
+		open(OUT,"> $f2") || die "Unable to write to $f2: $!";
+		open(PBCL,$f) || die "Unable to open $f";
+		while (<PBCL>) {
+			print OUT "$_" if (not /^$oldver \(/);
+			if ((/^$oldver \(/) && ($foundnew == 0)) {
+				print OUT "$newver ($pbdate)\n";
+				print OUT "- TBD\n";
+				print OUT "\n";
+				pb_log(0,"WARNING: version $newver not found in $f so added to $f2...\n") if ($foundnew == 0);
+			}
+		}
+		close(OUT);
+		close(PBCL);
+	}
+
+	pb_log(2,"Checkin $ENV{'PBROOTDIR'}/../$newver\n");
+	pb_cms_checkin($scheme,"$ENV{'PBROOTDIR'}/../$newver",undef);
+}
+
+#
+# Return the list of VMs/VEs/RMs we are working on
+# $all is a flag to know if we return all of them 
+# or only some (if all we publish also tar files in addition to pkgs
+#
+sub pb_get2v {
+
+my $vtype = shift;
+my @v;
+my $all = 0;
+my $pbv = 'PBV';
+my $vlist = $vtype."list";
+
+# Get VM/VE list
+if ((not defined $ENV{$pbv}) || ($ENV{$pbv} =~ /^all$/)) {
+	my ($ptr) = pb_conf_get($vlist);
+	$ENV{$pbv} = $ptr->{$ENV{'PBPROJ'}};
+	$all = 1;
+}
+pb_log(2,"$vtype: $ENV{$pbv}\n");
+@v = split(/,/,$ENV{$pbv});
+return(\@v,$all);
+}
+
+# Function to create a potentialy missing pb account on the VM/VE/RM, and adds it to sudo
+# Needs to use root account to connect to the VM/VE/RM
+# pb will take your local public SSH key to access
+# the pb account in the VM/VE/RM later on if needed
+sub pb_setup2v {
+
+my $vtype = shift;
+my $sbx = shift || undef;
+
+my ($vm,$all) = pb_get2v($vtype);
+
+# Script generated
+my $pbscript = "$ENV{'PBDESTDIR'}/setupv";
+
+# Adapt // mode to memory size
+$pbparallel = pb_set_parallel($vtype);
+
+my $pm;
+if (defined $pbparallel) {
+	$pm = new Parallel::ForkManager($pbparallel);
+
+	# Set which port the VM/RM will use to communicate
+	$pm->run_on_start(\&pb_set_port);
+}
+
+my $counter = 0;
+foreach my $v (@$vm) {
+	$counter++;
+	# Modulo pbparallel
+	$counter = 1 if ((defined $pbparallel) && ($counter > $pbparallel));
+	$pm->start($counter) and next if (defined $pbparallel);
+
+	# Get distro context
+	my $pbos = pb_distro_get_context($v);
+	
+	# Deal with date sync.
+	my $ntpline = pb_date2v($vtype,$pbos);
+
+	# Name of the account to deal with for VM/VE/RM
+	# Do not use the one passed potentially with -a
+	my ($pbac) = pb_conf_get($vtype."login");
+	my ($key,$zero0,$zero1,$zero2);
+	my ($vmexist,$vmpid);
+
+	# Prepare the script to be executed on the VM/VE/RM
+	# in $ENV{'PBDESTDIR'}/setupv
+	open(SCRIPT,"> $pbscript") || die "Unable to create $pbscript";
+	
+	print SCRIPT << 'EOF';
+#!/usr/bin/perl -w
+
+use strict;
+use File::Copy;
+
+# We should not need in this script more functions than what is provided 
+# by Base, Conf and Distribution to avoid problems at exec time.
+# They are appended at the end.
+
+# Define mandatory global vars
+our $pbdebug;
+our $pbLOG;
+our $pbsynmsg = "pbscript";
+our $pbdisplaytype = "text";
+our $pblocale = "";
+pb_log_init($pbdebug, $pbLOG);
+pb_temp_init();
+
+EOF
+
+	# Launch the VM/VE/RM - Usage of snapshot disabled
+	($vmexist,$vmpid) = pb_launchv($vtype,$v,0,0,0);
+
+	my $keyfile;
+	my $nport;
+	my $vmhost;
+
+	# Prepare the key to be used and transfered remotely
+	$keyfile = pb_ssh_get(1);
+		
+	if ($vtype =~ /(v|r)m/) {
+		my ($vmport);
+		($vmhost,$vmport) = pb_conf_get($vtype."host",$vtype."port");
+		$nport = pb_get_port($vmport,$pbos,$vtype);
+	
+		# Skip that VM/RM if something went wrong
+		next if (($vmpid == 0) && ($vmexist == 0));
+	
+		# Store the pub key part in a variable
+		open(FILE,"$keyfile.pub") || die "Unable to open $keyfile.pub";
+		($zero0,$zero1,$zero2) = split(/ /,<FILE>);
+		close(FILE);
+
+		$key = "\Q$zero1";
+
+		# We call true to avoid problems if SELinux is not activated, but chcon is present and returns in that case 1
+		pb_system("cat $keyfile.pub | ssh -q -o UserKnownHostsFile=/dev/null -p $nport -i $keyfile root\@$vmhost->{$ENV{'PBPROJ'}} \"mkdir -p .ssh ; chmod 700 .ssh ; cat >> .ssh/authorized_keys ; chmod 600 .ssh/authorized_keys ; if [ -x /usr/bin/chcon ]; then /usr/bin/chcon -Rt home_ssh_t .ssh 2> /dev/null; /bin/true; fi\"","Copying local keys to $vtype. This may require the root password");
+		# once this is done, we can do what we need on the VM/RM remotely
+	} elsif ($vtype eq "ve") {
+		print SCRIPT << "EOF";
+# For VE we need a good null dev
+pb_system("rm -f /dev/null; mknod /dev/null c 1 3; chmod 777 /dev/null");
+EOF
+		print SCRIPT << "EOF";
+# For VE we first need to mount some FS
+pb_system("mount -t proc /proc /proc");
+
+EOF
+	}
+
+	if ($vtype =~ /(v|r)m/) {
+		print SCRIPT << 'EOF';
+# Removes duplicate in .ssh/authorized_keys of our key if needed
+#
+my $file1="$ENV{'HOME'}/.ssh/authorized_keys";
+open(PBFILE,$file1) || die "Unable to open $file1";
+open(PBOUT,"> $file1.new") || die "Unable to open $file1.new";
+my $count = 0;
+while (<PBFILE>) {
+
+EOF
+		print SCRIPT << "EOF";
+	if (/ $key /) {
+		\$count++;
+	}
+print PBOUT \$_ if ((\$count <= 1) || (\$_ !~ / $key /));
+}
+close(PBFILE);
+close(PBOUT);
+rename("\$file1.new",\$file1);
+chmod 0600,\$file1;
+
+EOF
+	}
+	print SCRIPT << 'EOF';
+
+# Adds $pbac->{$ENV{'PBPROJ'}} as an account if needed
+#
+my $file="/etc/passwd";
+open(PBFILE,$file) || die "Unable to open $file";
+my $found = 0;
+while (<PBFILE>) {
+EOF
+	print SCRIPT << "EOF";
+	\$found = 1 if (/^$pbac->{$ENV{'PBPROJ'}}:/);
+EOF
+
+# TODO: use an external parameter
+my $home = "/home";
+# Solaris doesn't like that we use /home
+$home = "/export/home" if ($pbos->{'type'} eq "pkg");
+
+	print SCRIPT << "EOF";
+}
+close(PBFILE);
+
+if ( \$found == 0 ) {
+	if ( ! -d "$home" ) {
+		pb_mkdir_p("$home");
+	}
+EOF
+	# TODO: Level of portability of these cmds ? Critical now for RM
+	# TODO: Check existence before adding to avoid errors
+	print SCRIPT << "EOF";
+pb_system("/usr/sbin/groupadd $pbac->{$ENV{'PBPROJ'}}","Adding group $pbac->{$ENV{'PBPROJ'}}");
+pb_system("/usr/sbin/useradd -g $pbac->{$ENV{'PBPROJ'}} -m -d $home/$pbac->{$ENV{'PBPROJ'}} $pbac->{$ENV{'PBPROJ'}}","Adding user $pbac->{$ENV{'PBPROJ'}} (group $pbac->{$ENV{'PBPROJ'}} - home $home/$pbac->{$ENV{'PBPROJ'}})");
+}
+EOF
+
+	# Copy the content of our local conf file to the VM/VE/RM
+	my $content = pb_get_content(pb_distro_conffile());
+	print SCRIPT << "EOF";
+	#
+	# Create a temporary local conf file for distribution support
+	# This is created here before its use later. Its place is hardcoded, so no choice for the path
+	#
+	my \$tempconf = pb_distro_conffile();
+	pb_mkdir_p(dirname(\$tempconf));
+	open(CONF,"> \$tempconf") || die "Unable to create \$tempconf";
+	print CONF q{$content};
+	close(CONF);
+EOF
+
+	if ($vtype =~ /(v|r)m/) {
+		print SCRIPT << "EOF";
+# allow ssh entry to build
+#
+mkdir "$home/$pbac->{$ENV{'PBPROJ'}}/.ssh",0700;
+# Allow those accessing root to access the build account
+copy("\$ENV{'HOME'}/.ssh/authorized_keys","$home/$pbac->{$ENV{'PBPROJ'}}/.ssh/authorized_keys");
+chmod 0600,".ssh/authorized_keys";
+pb_system("chown -R $pbac->{$ENV{'PBPROJ'}}:$pbac->{$ENV{'PBPROJ'}} $home/$pbac->{$ENV{'PBPROJ'}}","Finish setting up the account env for $pbac->{$ENV{'PBPROJ'}}");
+
+EOF
+}
+	print SCRIPT << 'EOF';
+# No passwd for build account only keys
+$file="/etc/shadow";
+if (-f $file) {
+	open(PBFILE,$file) || die "Unable to open $file";
+	open(PBOUT,"> $file.new") || die "Unable to open $file.new";
+	while (<PBFILE>) {
+EOF
+	print SCRIPT << "EOF";
+		s/^$pbac->{$ENV{'PBPROJ'}}:\!\!:/$pbac->{$ENV{'PBPROJ'}}:*:/;
+		s/^$pbac->{$ENV{'PBPROJ'}}:\!:/$pbac->{$ENV{'PBPROJ'}}:*:/;	#SLES 9 e.g.
+		s/^$pbac->{$ENV{'PBPROJ'}}:\\*LK\\*:/$pbac->{$ENV{'PBPROJ'}}:NP:/;	#Solaris e.g.
+EOF
+		print SCRIPT << 'EOF';
+		print PBOUT $_;
+	}
+	close(PBFILE);
+	close(PBOUT);
+	rename("$file.new",$file);
+	chmod 0640,$file;
+	}
+
+# Keep the VM in text mode
+$file="/etc/inittab";
+if (-f $file) {
+	open(PBFILE,$file) || die "Unable to open $file";
+	open(PBOUT,"> $file.new") || die "Unable to open $file.new";
+	while (<PBFILE>) {
+		s/^(..):5:initdefault:$/$1:3:initdefault:/;
+		print PBOUT $_;
+	}
+	close(PBFILE);
+	close(PBOUT);
+	rename("$file.new",$file);
+	chmod 0640,$file;
+}
+
+# pb has to be added to portage group on gentoo
+
+# We need to have that pb_distro_get_context function
+# Get it from Project-Builder::Distribution
+# And we now need the conf file required for this to work created above
+
+my $pbos = pb_distro_get_context(); 
+print "distro tuple: ".Dumper($pbos)."\n";
+
+# Adapt sudoers
+# sudo is not default on Solaris and needs to be installed first
+# from http://www.sunfreeware.com/programlistsparc10.html#sudo
+if ($pbos->{'type'} eq "pkg") {
+	$file="/usr/local/etc/sudoers";
+} else {
+	$file="/etc/sudoers";
+}
+open(PBFILE,$file) || die "Unable to open $file";
+open(PBOUT,"> $file.new") || die "Unable to open $file.new";
+while (<PBFILE>) {
+EOF
+	# Skip what will be generated
+	print SCRIPT << "EOF";
+	next if (/^$pbac->{$ENV{'PBPROJ'}}\\s+/);
+	next if (/^Defaults:$pbac->{$ENV{'PBPROJ'}}\\s+/);
+	next if (/^Defaults:root \!requiretty/);
+EOF
+	print SCRIPT << 'EOF';
+	s/Defaults[ \t]+requiretty//;
+	print PBOUT $_;
+}
+close(PBFILE);
+EOF
+	print SCRIPT << "EOF";
+# Some distro force requiretty at compile time, so disable here
+print PBOUT "Defaults:$pbac->{$ENV{'PBPROJ'}} !requiretty\n";
+print PBOUT "Defaults:root !requiretty\n";
+# Keep proxy configuration while using sudo
+print PBOUT "Defaults:$pbac->{$ENV{'PBPROJ'}}    env_keep += \\\"http_proxy ftp_proxy\\\"\n";
+EOF
+	# Try to restrict security to what is really needed
+	if ($vtype =~ /^vm/) {
+		my $hpath = pb_distro_get_param($pbos,pb_conf_get("ospathcmd-halt"));
+		my @sudocmds = pb_get_sudocmds($pbos,$ntpline,"sudo $hpath");
+		print SCRIPT << "EOF";
+# This is needed in order to be able on VM to halt the machine from the $pbac->{$ENV{'PBPROJ'}} account at least
+# Build account $pbac->{$ENV{'PBPROJ'}} in VM also needs to setup date and install deps.
+# Nothing else should be needed
+EOF
+		foreach my $c (@sudocmds) {
+			print SCRIPT "print PBOUT \"$pbac->{$ENV{'PBPROJ'}}   ALL = NOPASSWD: $c\n\";";
+		}
+	} elsif ($vtype =~ /^rm/) {
+		my @sudocmds = pb_get_sudocmds($pbos,$ntpline);
+		print SCRIPT << "EOF";
+# Build account $pbac->{$ENV{'PBPROJ'}} in RM only needs to setup date and install deps if needed each time
+EOF
+		foreach my $c (@sudocmds) {
+			print SCRIPT "print PBOUT \"$pbac->{$ENV{'PBPROJ'}}   ALL = NOPASSWD: $c\n\";";
+		}
+	} else {
+		print SCRIPT << "EOF";
+# Build account $pbac->{$ENV{'PBPROJ'}} for VE needs to do a lot in the host (and chroot), so allow without restriction for now
+print PBOUT "$pbac->{$ENV{'PBPROJ'}}   ALL=(ALL) NOPASSWD:ALL\n";
+EOF
+}
+	print SCRIPT << 'EOF';
+close(PBOUT);
+rename("$file.new",$file);
+chmod 0440,$file;
+
+EOF
+
+	if ($vtype =~ /(v|r)m/) {
+		# Sync date
+		# do it after sudoers is setup
+		print SCRIPT "pb_system(\"$ntpline\");\n";
+	}
+	# We may need a proxy configuration. Get it from the local env
+
+	if (defined $ENV{'http_proxy'}) {
+		print SCRIPT "\$ENV\{'http_proxy'\}=\"$ENV{'http_proxy'}\";\n";
+	}
+
+	if (defined $ENV{'ftp_proxy'}) {
+		print SCRIPT "\$ENV\{'ftp_proxy'\}=\"$ENV{'ftp_proxy'}\";\n";
+	}
+
+	print SCRIPT << 'EOF';
+	
+# Suse wants sudoers as 640
+if ((($pbos->{'name'} eq "sles") && (($pbos->{'version'} =~ /10/) || ($pbos->{'version'} =~ /9/))) || (($pbos->{'name'} eq "opensuse") && ($pbos->{'version'} =~ /10.[012]/))) {
+	chmod 0640,$file;
+}
+
+# First install all required packages
+pb_system("yum clean all","Cleaning yum env") if (($pbos->{'name'} eq "fedora") || ($pbos->{'name'} eq "asianux") || ($pbos->{'name'} eq "rhel"));
+my ($ospkgdep) = pb_conf_get_if("ospkgdep");
+	
+my $pkgdep = pb_distro_get_param($pbos,$ospkgdep);
+pb_distro_installdeps(undef,$pbos,pb_distro_only_deps_needed($pbos,join(' ',split(/,/,$pkgdep))));
+
+EOF
+	my $itype = pb_distro_get_param($pbos,pb_conf_get("pbinstalltype"));
+	# Install from sandbox mean a file base install
+	$itype = "file" if (defined $sbx);
+	if ($itype =~ /^file/) {
+		my $cmdget;
+		if (defined $sbx) {
+			# Install from sandbox mean using the result of the just passed sbx2build command
+			# Get content saved in cms2build
+			my ($pkg) = pb_conf_read("$ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb","pbpkg");
+			die "Unable to get package list" if (not defined $pkg);
+
+			# We consider 2 specific packages
+			my $vertag1 = $pkg->{"ProjectBuilder"};
+			my $vertag2 = $pkg->{"project-builder"};
+			# get the version of the current package - maybe different
+			my ($pbver1,$tmp1) = split(/-/,$vertag1);
+			my ($pbver2,$tmp2) = split(/-/,$vertag2);
+			# Copy inside the VE
+			if ($vtype eq "ve") {
+				my ($vepath) = pb_conf_get("vepath");
+				copy("$ENV{'PBDESTDIR'}/ProjectBuilder-$pbver1.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/tmp");
+				copy("$ENV{'PBDESTDIR'}/project-builder-$pbver2.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/tmp");
+			} else {
+				pb_system("scp -i $keyfile -p -o UserKnownHostsFile=/dev/null -P $nport $ENV{'PBDESTDIR'}/ProjectBuilder-$pbver1.tar.gz $ENV{'PBDESTDIR'}/project-builder-$pbver2.tar.gz root\@$vmhost->{$ENV{'PBPROJ'}}:/tmp","Copying local project files to $vtype.");
+			}
+			$cmdget = "mv /tmp/ProjectBuilder-$pbver1.tar.gz ProjectBuilder-latest.tar.gz ; mv /tmp/project-builder-$pbver2.tar.gz project-builder-latest.tar.gz";
+		} else {
+			$cmdget = "wget --passive-ftp ftp://ftp.project-builder.org/src/ProjectBuilder-latest.tar.gz; wget --passive-ftp ftp://ftp.project-builder.org/src/project-builder-latest.tar.gz";
+		}
+		print SCRIPT << 'EOF';
+# Then install manually the missing perl modules
+my ($osperldep,$osperlver) = pb_conf_get_if("osperldep","osperlver");
+	
+my $perldep = pb_distro_get_param($pbos,$osperldep);
+foreach my $m (split(/,/,$perldep)) {
+	# Skip empty deps
+	next if ($m =~ /^\s*$/);
+	my $dir = $m;
+	$dir =~ s/-.*//;
+	pb_system("echo \"rm -rf $m* ; wget http://search.cpan.org/CPAN/modules/by-module/$dir/$m-$osperlver->{$m}.tar.gz ; gzip -cd $m-$osperlver->{$m}.tar.gz | tar xf - ; cd $m* ; if [ -f Build.PL ]; then perl Build.PL; ./Build ; ./Build install ; else perl Makefile.PL; make ; make install ; fi; cd .. ; rm -rf $m*\" | bash" ,"Installing perl module $m-$osperlver->{$m}");
+}
+EOF
+
+		print SCRIPT << "EOF";
+pb_system("rm -rf ProjectBuilder-* ; rm -rf project-builder-* ; $cmdget ; gzip -cd ProjectBuilder-latest.tar.gz | tar xf - ; cd ProjectBuilder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf ProjectBuilder-* ; gzip -cd project-builder-latest.tar.gz | tar xf - ; cd project-builder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf project-builder-* ;","Building Project-Builder");
+EOF
+	} elsif ($itype =~ /^pkg/) {
+		# pkg based install. We need to point to the project-builder.org repository
+		print SCRIPT << 'EOF';
+my $pkgforpb = pb_distro_get_param($pbos,pb_conf_get_if("ospkg"));
+pb_distro_setuposrepo($pbos);
+pb_distro_installdeps(undef,$pbos,pb_distro_only_deps_needed($pbos,join(' ',split(/,/,$pkgforpb))));
+EOF
+	} else {
+		# Unknown install type
+		die("Unknown install type $itype->{$ENV{'PBPROJ'}} for param pbinstalltype");
+	}
+	print SCRIPT << 'EOF';
+pb_system("pb 2>&1 | head -5",undef,"verbose");
+pb_system("pbdistrocheck",undef,"verbose");
+EOF
+	if ($vtype eq "ve") {
+			print SCRIPT << 'EOF';
+# For VE we need to umount some FS at the end
+
+pb_system("umount /proc");
+
+# Create a basic network file if not already there
+
+my $nf="/etc/sysconfig/network";
+if ((! -f $nf) && ($pbos->{'type'} eq "rpm")) {
+	open(NF,"> $nf") || die "Unable to create $nf";
+	print NF "NETWORKING=yes\n";
+	print NF "HOSTNAME=localhost\n";
+	close(NF);
+}
+chmod 0755,$nf;
+EOF
+	}
+
+	# Adds pb_distro_get_context and all functions needed from ProjectBuilder::Distribution, Conf and Base
+	foreach my $d (@INC) {
+		my @f = ("$d/ProjectBuilder/Base.pm","$d/ProjectBuilder/Distribution.pm","$d/ProjectBuilder/Conf.pm");
+		foreach my $f (@f) {
+			if (-f "$f") {
+				open(PBD,"$f") || die "Unable to open $f";
+				while (<PBD>) {
+					next if (/^package/);
+					next if (/^use Exporter/);
+					next if (/^use ProjectBuilder::/);
+					next if (/^our /);
+					print SCRIPT $_;
+				}
+				close(PBD);
+			}
+		}
+	}
+	# Use a fake pb_version_init version here
+	print SCRIPT << "EOF";
+sub pb_version_init {
+
+return("$projectbuilderver","$projectbuilderrev");
+}
+1;
+EOF
+	close(SCRIPT);
+	chmod 0755,"$pbscript";
+
+	# That build script needs to be run as root and force stop of VM at end
+	$pbaccount = "root";
+
+	# Force shutdown of VM except if it was already launched
+	my $pbforce = 0;
+	if ((! $vmexist) && ($vtype eq "vm")) {
+		$pbforce = 1;
+	}
+	
+	pb_script2v($pbscript,$vtype,$pbforce,$v);
+	$pm->finish if (defined $pbparallel);
+}
+$pm->wait_all_children if (defined $pbparallel);
+return;
+}
+
+# Function to create a snapshot named 'pb' for VMs and a compressed tar for VEs
+sub pb_snap2v {
+
+my $vtype = shift;
+
+my ($vm,$all) = pb_get2v($vtype);
+
+# Script generated
+my $pbscript = "$ENV{'PBDESTDIR'}/snapv";
+
+my ($pbac) = pb_conf_get($vtype."login");
+
+foreach my $v (@$vm) {
+	if ($vtype eq "ve") {
+		# Get distro context
+		my $pbos = pb_distro_get_context($v);
+		my ($vepath) = pb_conf_get("vepath");
+
+		# Test if an existing snapshot exists and remove it if there is a VE
+		if ((-f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz") &&
+			(! -d "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}")) {
+				pb_system("sudo rm -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz","Removing previous snapshot $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz");
+		}
+	}
+
+	# Prepare the script to be executed on the VM/VE
+	open(SCRIPT,"> $pbscript") || die "Unable to create $pbscript";
+	print SCRIPT << 'EOF';
+	#!/bin/bash
+	sleep 2
+EOF
+	close(SCRIPT);
+	chmod 0755,"$pbscript";
+
+	# Force shutdown of VM/VE
+	# Force snapshot of VM/VE
+	pb_script2v($pbscript,$vtype,1,$v,1);
+}
+return;
+}
+
+# Function to update VMs/VEs/RMs with the latest distribution content
+sub pb_update2v {
+
+my $vtype = shift;
+
+my ($vm,$all) = pb_get2v($vtype);
+
+# Script generated
+my $pbscript = "$ENV{'PBDESTDIR'}/updatev";
+
+my ($pbac) = pb_conf_get($vtype."login");
+
+foreach my $v (@$vm) {
+	# Get distro context
+	my $pbos = pb_distro_get_context($v);
+
+	# Prepare the script to be executed on the VM/VE/RM
+	# in $ENV{'PBDESTDIR'}/updatev
+	open(SCRIPT,"> $pbscript") || die "Unable to create $pbscript";
+	
+	print SCRIPT << 'EOF';
+	#!/bin/bash
+	sleep 2
+EOF
+	# VE needs a good /proc
+	if ($vtype eq "ve") {
+		print SCRIPT "sudo /bin/mount -t proc /proc /proc\n";
+	}
+	print SCRIPT "$pbos->{'update'}\n";
+	if ($vtype eq "ve") {
+		print SCRIPT "sudo /bin/umount /proc\n";
+	}
+	close(SCRIPT);
+	chmod 0755,"$pbscript";
+
+	# Force shutdown of VM except
+	pb_script2v($pbscript,$vtype,1,$v);
+}
+return;
+}
+
+sub pb_announce {
+
+	# Get all required parameters
+	my ($pbpackager,$pbrepo,$pbml,$pbsmtp) = pb_conf_get("pbpackager","pbrepo","pbml","pbsmtp");
+	my ($pkgv, $pkgt, $testver) = pb_conf_get_if("pkgver","pkgtag","testver");
+	my $pkg = pb_cms_get_pkg($defpkgdir,$extpkgdir);
+	my @pkgs = @$pkg;
+	my %pkgs;
+	my $first = 0;
+
+	# Command to find packages on repo
+	my $findstr = "find . ";
+	# Generated announce files
+	my @files;
+
+	foreach my $pbpkg (@pkgs) {
+		if ($first != 0) {
+			$findstr .= "-o ";
+		}
+		$first++;
+		if ((defined $pkgv) && (defined $pkgv->{$pbpkg})) {
+			$pbver = $pkgv->{$pbpkg};
+		} else {
+			$pbver = $ENV{'PBPROJVER'};
+		}
+		if ((defined $pkgt) && (defined $pkgt->{$pbpkg})) {
+			$pbtag = $pkgt->{$pbpkg};
+		} else {
+			$pbtag = $ENV{'PBPROJTAG'};
+		}
+
+		# TODO: use virtual/real names here now
+		$findstr .= "-name \'$pbpkg-$pbver-$pbtag\.*.rpm\' -o -name \'$pbpkg"."_$pbver*\.deb\' -o -name \'$pbpkg-$pbver*\.ebuild\' -o -name \'$pbpkg-$pbver*\.pkg\' -o -name \'$pbpkg-$pbver*\.sd\'";
+
+		my $chglog;
+
+		# Get project info on log file and generate tmp files used later on
+		pb_cms_init($pbinit);
+		$chglog = "$ENV{'PBROOTDIR'}/$pbpkg/pbcl";
+		$chglog = "$ENV{'PBROOTDIR'}/pbcl" if (! -f $chglog);
+		$chglog = undef if (! -f $chglog);
+
+		open(OUT,"> $ENV{'PBTMP'}/$pbpkg.ann") || die "Unable to create $ENV{'PBTMP'}/$pbpkg.ann: $!";
+		my $pb;
+		$pb->{'realpkg'} = $pbpkg;
+		$pb->{'ver'} = $pbver;
+		$pb->{'tag'} = $pbtag;
+		$pb->{'date'} = $pbdate;
+		$pb->{'chglog'} = $chglog;
+		$pb->{'packager'} = $pbpackager;
+		$pb->{'proj'} = $ENV{'PBPROJ'};
+		$pb->{'repo'} = $pbrepo;
+		$pb->{'pbos'}->{'type'} = "announce";
+		$pb->{'pbos'}->{'suffix'} = "none";
+		pb_changelog($pb,\*OUT,"yes");
+		close(OUT);
+		push(@files,"$ENV{'PBTMP'}/$pbpkg.ann");
+	}
+	$findstr .= " | grep -Ev \'src.rpm\'";
+
+	# Prepare the command to run and execute it
+	open(PBS,"> $ENV{'PBTMP'}/pbscript") || die "Unable to create $ENV{'PBTMP'}/pbscript";
+	print PBS "$findstr\n";
+	close(PBS);
+	chmod 0755,"$ENV{'PBTMP'}/pbscript";
+	pb_send2target("Announce");
+
+	# Get subject line
+	my $sl = "Project $ENV{'PBPROJ'} version $ENV{'PBPROJVER'} is now available";
+	pb_log(0,"Please enter the title of your announce\n");
+	pb_log(0,"(By default: $sl)\n");
+	my $sl2 = <STDIN>;
+	$sl = $sl2 if ($sl2 !~ /^$/);
+
+	# Prepare a template of announce
+	open(ANN,"> $ENV{'PBTMP'}/announce.html") || die "Unable to create $ENV{'PBTMP'}/announce.html: $!";
+	print ANN << "EOF";
+$sl</p>
+
+<p>The project team is happy to announce the availability of a newest version of $ENV{'PBPROJ'} $ENV{'PBPROJVER'}. Enjoy it as usual!</p>
+<p>
+Now available at <a href="$pbrepo->{$ENV{'PBPROJ'}}">$pbrepo->{$ENV{'PBPROJ'}}</a>
+</p>
+<p>
+EOF
+	open(LOG,"$ENV{'PBTMP'}/system.$$.log") || die "Unable to read $ENV{'PBTMP'}/system.$$.log: $!";
+	my $col = 2;
+	my $i = 1;
+	print ANN << 'EOF';
+<TABLE WIDTH="700" CELLPADDING="0" CELLSPACING="0" BORDER="0">
+<TR>
+EOF
+	while (<LOG>) {
+		print ANN "<TD><A HREF=\"$pbrepo->{$ENV{'PBPROJ'}}/$_\">$_</A></TD>";
+		$i++;
+		if ($i > $col) {
+			print ANN "</TR>\n<TR>";
+			$i = 1;
+		}
+	}
+	close(LOG);
+	print ANN << "EOF";
+</TR>
+</TABLE>
+</p>
+
+<p>As usual source packages are also available in the same directory.</p>
+
+<p>
+Changes are :
+</p>
+<p>
+EOF
+	# Get each package changelog content
+	foreach my $f (sort(@files)) {
+		open(IN,"$f") || die "Unable to read $f:$!";
+		while (<IN>) {
+			print ANN $_;
+		}
+		close(IN);
+		print ANN "</p><p>\n";
+	}
+	print ANN "</p>\n";
+	close(ANN);
+
+	# Allow for modification
+	my $editor = "vi";
+	$editor = $ENV{'EDITOR'} if (defined $ENV{'EDITOR'});
+	pb_system("$editor $ENV{'PBTMP'}/announce.html","Allowing modification of the announce","noredir");
+
+	# Store it in DB for external usage (Web pages generation)
+	my $db = "$ENV{'PBCONFDIR'}/announces3.sql";
+
+	my $precmd = "";
+	if (! -f $db) {
+		$precmd = "CREATE TABLE announces (id INTEGER PRIMARY KEY AUTOINCREMENT, date DATE, announce VARCHAR[65535])";
+	}
+
+	my $dbh = DBI->connect("dbi:SQLite:dbname=$db","","",
+                        { RaiseError => 1, AutoCommit => 1 })
+                        || die "Unable to connect to $db";
+
+	if ($precmd ne "") {
+		my $sth = $dbh->prepare(qq{$precmd})
+                	|| die "Unable to create table into $db";
+		$sth->execute();
+	}
+
+	# To read whole file
+	local $/;
+	open(ANN,"$ENV{'PBTMP'}/announce.html") || die "Unable to read $ENV{'PBTMP'}/announce.html: $!";
+	my $announce = <ANN>;
+	close(ANN);
+	
+	pb_log(2,"INSERT INTO announces VALUES (NULL, $pbdate, $announce)");
+	my $sth = $dbh->prepare(qq{INSERT INTO announces VALUES (NULL,?,?)})
+                	|| die "Unable to insert into $db";
+	$sth->execute($pbdate, $announce);
+	$sth->finish();
+	$dbh->disconnect;
+
+	# Then deliver it on the Web
+	# $TOOLHOME/livwww www
+
+	# Mail it to project's ML
+	open(ML,"| w3m -dump -T text/html > $ENV{'PBTMP'}/announce.txt") || die "Unable to create $ENV{'PBTMP'}/announce.txt: $!";
+   	print ML << 'EOF';
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x html1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+  </head>
+  <body>
+  <p>
+EOF
+	open(ANN,"$ENV{'PBTMP'}/announce.html") || die "Unable to read $ENV{'PBTMP'}/announce.html: $!";
+	while(<ANN>) {
+		print ML $_;
+	}
+   	print ML << 'EOF';
+</body>
+</html>
+EOF
+	close(ML);
+
+	# To read whole file
+	local $/;
+	open(ANN,"$ENV{'PBTMP'}/announce.txt") || die "Unable to read $ENV{'PBTMP'}/announce.txt: $!";
+	my $msg = <ANN>;
+	close(ANN);
+	
+	# Preparation of headers
+	eval
+	{
+		require Mail::Sendmail;
+		Mail::Sendmail->import();
+	};
+	if ($@) {
+		# Mail::Sendmail not found not sending mail !
+		pb_log(0,"No Mail::Sendmail module found so not sending any mail !\n");
+	} else {
+		my %mail = (	
+			To			=>	$pbml->{$ENV{'PBPROJ'}},
+			From		=>	$pbpackager->{$ENV{'PBPROJ'}},
+			Smtp		=>	$pbsmtp->{$ENV{'PBPROJ'}},
+			Body		=>	$msg,
+			Subject		=>	"[ANNOUNCE] $sl",
+		);
+			
+		# Send mail
+		if (! sendmail(%mail)) {
+			if ((defined $Mail::Sendmail::error) and (defined $Mail::Sendmail::log)) {
+				die "Unable to send mail ($Mail::Sendmail::error): $Mail::Sendmail::log";
+			}
+		}
+	}
+}
+
+#
+# Creates a set of HTML file containing the news for the project
+# based on what has been generated by the pb_announce function
+#
+sub pb_web_news2html {
+
+	my $dest = shift || $ENV{'PBTMP'};
+
+	# Get all required parameters
+	my ($pkgv, $pkgt) = pb_conf_get_if("pkgver","pkgtag");
+
+	# DB of announces for external usage (Web pages generation)
+	my $db = "$ENV{'PBCONFDIR'}/announces3.sql";
+
+	my $dbh = DBI->connect("dbi:SQLite:dbname=$db","","",
+                        { RaiseError => 1, AutoCommit => 1 })
+                        || die "Unable to connect to $db";
+	# For date handling
+	$ENV{LANGUAGE}="C";
+	my $firstjan = strftime("%Y-%m-%d", 0, 0, 0, 1, 0, localtime->year(), 0, 0, -1);
+	my $oldfirst = strftime("%Y-%m-%d", 0, 0, 0, 1, 0, localtime->year()-1, 0, 0, -1);
+	pb_log(2,"firstjan: $firstjan, oldfirst: $oldfirst, pbdate:$pbdate\n");
+	my $all = $dbh->selectall_arrayref("SELECT id,date,announce FROM announces ORDER BY date DESC");
+	my %news;
+	$news{"cy"} = "";	# current year's news
+	$news{"ly"} = "";	# last year news
+	$news{"py"} = "";	# previous years news
+	$news{"fp"} = "";	# first page news
+	my $cpt = 4;		# how many news for first page
+	# Extract info from DB
+	foreach my $row (@$all) {
+		my ($id, $date, $announce) = @$row;
+		$news{"cy"} = $news{"cy"}."<p><B>$date</B> $announce\n" if ((($date cmp $pbdate) le 0) && (($firstjan cmp $date) le 0));
+		$news{"ly"} = $news{"ly"}."<p><B>$date</B> $announce\n" if ((($date cmp $firstjan) le 0) && (($oldfirst cmp $date) le 0));
+		$news{"py"} = $news{"py"}."<p><B>$date</B> $announce\n" if (($date cmp $oldfirst) le 0);
+		$news{"fp"} = $news{"fp"}."<p><B>$date</B> $announce\n" if ($cpt > 0);
+		$cpt--;
+  	}
+	pb_log(1,"news{fp}: ".$news{"fp"}."\n");
+	$dbh->disconnect;
+
+	# Generate the HTML content
+	foreach my $pref (keys %news) {
+		open(NEWS,"> $dest/pb_web_$pref"."news.html") || die "Unable to create $dest/pb_web_$pref"."news.html: $!";
+		print NEWS "$news{$pref}";
+		close(NEWS);
+	}
+}
+
+
+# Return the SSH key file to use
+# Potentially create it if needed
+
+sub pb_ssh_get {
+
+my $create = shift || 0;	# Do not create keys by default
+
+# Check the SSH environment
+my $keyfile = undef;
+
+# We have specific keys by default
+$keyfile = "$ENV{'HOME'}/.ssh/pb_dsa";
+if (!(-e $keyfile) && ($create eq 1)) {
+	pb_system("ssh-keygen -q -b 1024 -N '' -f $keyfile -t dsa","Generating SSH keys for pb");
+}
+
+$keyfile = "$ENV{'HOME'}/.ssh/id_rsa" if (-s "$ENV{'HOME'}/.ssh/id_rsa");
+$keyfile = "$ENV{'HOME'}/.ssh/id_dsa" if (-s "$ENV{'HOME'}/.ssh/id_dsa");
+$keyfile = "$ENV{'HOME'}/.ssh/pb_dsa" if (-s "$ENV{'HOME'}/.ssh/pb_dsa");
+die "Unable to find your public ssh key under $keyfile" if (not defined $keyfile);
+return($keyfile);
+}
+
+
+# Returns the pid of a running VM command using a specific VM file
+sub pb_check_ps {
+	my $vmcmd = shift;
+	my $vmm = shift;
+	my $vmexist = 0;		# FALSE by default
+
+	open(PS, "ps auxhww|") || die "Unable to call ps";
+	while (<PS>) {
+		next if (! /$vmcmd/);
+		next if (! /$vmm/);
+		my ($void1, $void2);
+		($void1, $vmexist, $void2) = split(/ +/);
+		last;
+	}
+	return($vmexist);
+}
+
+
+sub pb_extract_build_files {
+
+my $src=shift;
+my $dir=shift;
+my $ddir=shift;
+my $mandatory=shift || "spec";
+my @files;
+
+my $flag = "mayfail" if (($mandatory eq "patch") || ($mandatory eq "src"));
+my $res;
+
+if ($src =~ /tar\.gz$/) {
+	$res = pb_system("tar xfpz $src $dir","Extracting $mandatory files from $src",$flag);
+} elsif ($src =~ /tar\.bz2$/) {
+	$res = pb_system("tar xfpj $src $dir","Extracting $mandatory files from $src",$flag);
+} else {
+	die "Unknown compression algorithm for $src";
+}
+# If not mandatory return now
+return() if (($res != 0) and (($mandatory eq "patch") || ($mandatory eq "src")));
+opendir(DIR,"$dir") || die "Unable to open directory $dir";
+foreach my $f (readdir(DIR)) {
+	next if ($f =~ /^\./);
+	# Skip potential patch dir
+	next if ($f =~ /^pbpatch/);
+	# Skip potential source dir
+	next if ($f =~ /^pbsrc/);
+	move("$dir/$f","$ddir") || die "Unable to move $dir/$f to $ddir";
+	pb_log(2,"mv $dir/$f $ddir\n");
+	push @files,"$ddir/$f";
+}
+closedir(DIR);
+# Not enough but still a first cleanup
+pb_rm_rf("$dir");
+return(@files);
+}
+
+sub pb_list_bfiles {
+
+my $dir = shift;
+my $pbpkg = shift;
+my $bfiles = shift;
+my $pkgfiles = shift;
+my $supfiles = shift;
+
+pb_log(2,"DEBUG: entering pb_list_bfiles: ".Dumper($bfiles)."\n");
+opendir(BDIR,"$dir") || die "Unable to open dir $dir: $!";
+foreach my $f (readdir(BDIR)) {
+	next if ($f =~ /^\./);
+	if (-d $f) {
+		# Recurse for directories (Debian 3.0 format e.g.)
+		pb_list_bfiles($f,$pbpkg,$bfiles,$pkgfiles,$supfiles);
+		next;
+	}
+	$bfiles->{$f} = "$dir/$f";
+	$bfiles->{$f} =~ s~$ENV{'PBROOTDIR'}~~;
+	if (defined $supfiles->{$pbpkg}) {
+		$pkgfiles->{$f} = "$dir/$f" if ($f =~ /$supfiles->{$pbpkg}/);
+	}
+}
+closedir(BDIR);
+pb_log(2,"DEBUG: exiting pb_list_bfiles: ".Dumper($bfiles)."\n");
+}
+
+sub pb_add_coma {
+
+my $str = shift;
+my $addstr = shift;
+
+$str .= "," if (defined $str);
+$str .= $addstr;
+return($str);
+}
+
+sub pb_list_sfiles {
+
+my $sdir = shift;
+my $ptr = shift;
+my $pbos = shift;
+my $extdir = shift;
+
+pb_log(2,"DEBUG: entering pb_list_sfiles: ".Dumper($ptr)."\n");
+my $key = "$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+
+# Prepare local sources for this distro - They are always applied first - May be a problem one day
+# This function works for both patches and additional sources
+foreach my $p (sort(<$sdir/*>)) {
+	$ptr->{$key} = pb_add_coma($ptr->{$key},"file://$p") if (($p =~ /\.all$/) || ($p =~ /\.$pbos->{'os'}$/) || ($p =~ /\.$pbos->{'type'}$/) || ($p =~ /\.$pbos->{'family'}$/) || ($p =~ /\.$pbos->{'name'}$/) || ($p =~ /\.$pbos->{'name'}-$pbos->{'version'}$/) ||($p =~ /\.$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}$/));
+}
+
+# Prepare also remote sources to be included - Applied after the local ones
+foreach my $p ("all","$pbos->{'os'}","$pbos->{'type'}","$pbos->{'family'}","$pbos->{'name'}","$pbos->{'name'}-$pbos->{'version'}","$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") {
+	my $f = "$extdir.".".$p";
+	next if (not -f $f);
+	if (not open(PATCH,$f)) {
+		pb_display("Unable to open existing external source file content $f\n");
+		next;
+	}
+	while (<PATCH>) {
+		chomp();
+		$ptr->{$key} = pb_add_coma($ptr->{$key},"$_");
+	}
+	close(PATCH);
+}
+pb_log(2,"DEBUG: exiting pb_list_sfiles: ".Dumper($ptr)."\n");
+return($ptr);
+}
+	
+# 
+# Return the list of packages we are working on in a non CMS action
+#
+sub pb_get_pkg {
+
+my @pkgs = ();
+
+my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb","pbpkg");
+@pkgs = keys %$var;
+
+pb_log(0,"Packages: ".join(',',@pkgs)."\n");
+return(\@pkgs);
+}
+
+#
+# Return the postinstall line if needed
+#
+
+sub pb_get_postinstall {
+
+my $pbos = shift;
+my $rbspi = shift;
+my $vestyle = shift;
+my $post = "";
+
+# Do we have a local post-install script
+if ($vestyle eq "rinse") {
+	$post = "--post-install ";
+} elsif ($vestyle eq "rpmbootstrap") {
+	$post = "-s ";
+}
+
+my $postparam = pb_distro_get_param($pbos,$rbspi);
+if ($postparam eq "") {
+	$post = "";
+} else {
+	$post .= $postparam;
+}
+return($post);
+}
+
+# Manages VM/RM SSH port communication
+sub pb_get_port {
+
+my $port = shift;
+my $pbos = shift;
+my $cmt = shift;
+my $nport;
+
+die "No port passed in parameter. Report to dev team\n" if (not defined $port);
+# key is project on VM, but machine tuple for RM
+if ($cmt =~ /^RM/i) {
+	$nport = $port->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"};
+} else {
+	$nport = $port->{$ENV{'PBPROJ'}};
+}
+pb_log(2,"pb_get_port with $nport\n");
+# Maybe a port was given as parameter so overwrite
+$nport = "$pbport" if (defined $pbport);
+# Maybe in // mode so use the env var set up as an offset to the base port, except when called from send2target for Packages
+if ($cmt ne "Packages") {
+	$nport += $ENV{'PBVMPORT'} if ((defined $pbparallel) && (defined $ENV{'PBVMPORT'}));
+}
+pb_log(2,"pb_get_port returns $nport\n");
+return($nport);
+}
+
+sub pb_set_port { 
+		
+my ($pid,$ident) = @_;
+pb_log(2,"pb_set_port for VM ($pid), id $ident\n");
+$ENV{'PBVMPORT'} = $ident;
+pb_log(2,"pb_set_port sets PBVMPORT in env to $ENV{'PBVMPORT'}\n");
+}
+
+sub pb_set_parallel {
+
+my $vtype = shift;
+
+pb_log(2,"pb_set_parallel vtype: $vtype\n");
+# Take care of memory size if VM, parallel mode and more than 1 action
+if ((defined $pbparallel) && ($pbparallel ne 1) && ($vtype eq "vm")) {
+	eval
+	{
+		require Linux::SysInfo;
+		Linux::SysInfo->import();
+	};
+	if ($@) {
+		# Linux::SysInfo not found
+		pb_log(1,"ADVISE: Install Linux::SysInfo to benefit from automatic parallelism optimization.\nOr optimize manually pbparallel in your pb.conf file\nUsing $pbparallel processes max at a time for the moment\nWARNING: This may consume too much memory for your system");
+	} else {
+		# Using the memory size
+		my $si = Linux::SysInfo::sysinfo();
+		if (not defined $si) {
+			pb_log(1,"ADVISE: Install Linux::SysInfo to benefit from automatic parallelism optimization.\nOr optimize manually pbparallel in your pb.conf file\nUsing $pbparallel processes max at a time for the moment\nWARNING: This may consume too much memory for your system");
+		} else {
+			# Keep the number of VM whose memory can be allocated
+			my $ram = $si->{"totalram"}-$si->{"sharedram"}-$si->{"bufferram"};
+			my $ram2;
+			my ($vmmem) = pb_conf_get_if("vmmem");
+
+			my $v = "default";
+			if ((defined $vmmem) and (defined $vmmem->{$v})) {
+				$ram2 = $vmmem->{$v};
+			} else {
+				# Default for KVM/QEMU
+				$ram2 = 128;
+			}
+			$pbparallel = sprintf("%d",$ram/$ram2);
+		}
+		pb_log(1,"Using $pbparallel processes at a time\n");
+	}
+}
+pb_log(2,"pb_set_parallel returns: $pbparallel\n") if (defined $pbparallel);
+return($pbparallel);
+}
+
+sub pb_get_sudocmds { 
+		
+my $pbos = shift;
+my %sudocmds;
+
+pb_log(2,"pb_get_sudocmds entering with lines:".Dumper(@_)."\n");
+foreach my $c (split(/;/,$pbos->{'update'}),split(/;/,$pbos->{'install'}),@_) {
+	pb_log(2,"pb_get_sudocmds analyses $c\n");
+	next if ($c !~ /^\s*sudo/);
+	# remove sudo and leading spaces
+	$c =~ s/^\s*sudo\s+//;
+	# keep only the command, not the params
+	$c =~ s/([^\s]+)\s.*$/$1/;
+	$sudocmds{$c} = "";
+}
+pb_log(2,"pb_get_sudocmds returns ".Dumper(keys %sudocmds)."\n");
+return(keys %sudocmds);
+}
+
+
+1;
Index: /0.11.2/pb/bin/mknewshtml.pl
===================================================================
--- /0.11.2/pb/bin/mknewshtml.pl	(revision 5)
+++ /0.11.2/pb/bin/mknewshtml.pl	(revision 5)
@@ -0,0 +1,126 @@
+#!/usr/bin/perl -w
+#
+# Creates news html pages
+# 
+# $Id$
+#
+# Syntax : mknewshtml.pl dir
+#
+
+use strict;
+use Date::Manip;
+use File::Basename;
+use DBI;
+use English;
+
+
+# For date handling
+$ENV{LANG}="C";
+
+my $PBROOT;
+my $tmp = dirname($PROGRAM_NAME);
+if ($tmp =~ /^\//) {
+	$PBROOT = $tmp;
+	}
+else {
+	$PBROOT = "$ENV{PWD}/$tmp";
+	}
+
+my $lastnews="$ARGV[0]/latest-news.html";
+my $news="$ARGV[0]/news.shtml";
+my $db="$PBROOT/../website/announces3.sql";
+
+print "Using Database $db\n";
+
+my $dbh = DBI->connect("dbi:SQLite:dbname=$db","","") 
+			|| die "Unable to connect to $db";
+
+open(NEWS,"> $news") || die "Unable to open $news (write)";
+print NEWS << 'EOF';
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x html1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+<!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+                  <!--#set var="curpage" value="news.shtml" -->
+<!--#include virtual="/top.shtml" -->
+
+                <h1>Mondo Rescue News</h1>
+  <div class="h2-1">
+    <h2>This year's News</h2>
+  </div>
+
+EOF
+
+my $today = &UnixDate("today","%Y-%m-%d");
+my $firstjan = &UnixDate("1st January","%Y-%m-%d");
+#print "today: $today - First: $firstjan\n";
+
+my $all = $dbh->selectall_arrayref("SELECT id,date,announce FROM announces ORDER BY date DESC");
+  foreach my $row (@$all) {
+    my ($id, $date, $announce) = @$row;
+    print NEWS "<p><B>$date</B> $announce\n" if ((Date_Cmp($date,$today) <= 0) && (Date_Cmp($firstjan,$date) <= 0));
+  }
+
+print NEWS << 'EOF';
+
+  <div class="h2-2">
+    <h2>Last year's News</h2>
+  </div>
+
+EOF
+
+my $oldfirst = &UnixDate(DateCalc("1st January","1 year ago"),"%Y-%m-%d");
+#print "oldfirst: $oldfirst - First: $firstjan\n";
+
+$all = $dbh->selectall_arrayref("SELECT id,date,announce FROM announces ORDER BY date DESC");
+  foreach my $row (@$all) {
+    my ($id, $date, $announce) = @$row;
+    print NEWS "<p><B>$date</B> $announce\n" if ((Date_Cmp($date,$firstjan) <= 0) && (Date_Cmp($oldfirst,$date) <= 0));
+  }
+
+
+print NEWS << 'EOF';
+
+  <div class="h2-3">
+    <h2>Older News</h2>
+  </div>
+
+EOF
+
+$all = $dbh->selectall_arrayref("SELECT id,date,announce FROM announces ORDER BY date DESC");
+  foreach my $row (@$all) {
+    my ($id, $date, $announce) = @$row;
+    print NEWS "<p><B>$date</B> $announce\n" if ((Date_Cmp($oldfirst,$date) >= 0));
+  }
+
+
+print NEWS << 'EOF';
+
+  <div class="h2-4">
+    <h2>Oldest News</h2>
+  </div>
+
+   <p>look at these pages for old News concerning the project</p>
+  <p><a href="gossip.html">Hugo's diary preserved (2001-2003)</a>
+  </p>
+
+<!--#include virtual="/bottom.shtml" -->
+  </body>
+</html>
+EOF
+
+close(NEWS);
+
+my $cpt = 4;
+open(NEWS,"> $lastnews") || die "Unable to open $lastnews (write)";
+$all = $dbh->selectall_arrayref("SELECT id,date,announce FROM announces ORDER BY date DESC");
+  foreach my $row (@$all) {
+    my ($id, $date, $announce) = @$row;
+    print NEWS "<p><B>$date</B> $announce\n" if ($cpt > 0);
+	$cpt--
+  }
+
+$dbh->disconnect;
Index: /0.11.2/pb/bin/mdv-changelog.pl
===================================================================
--- /0.11.2/pb/bin/mdv-changelog.pl	(revision 5)
+++ /0.11.2/pb/bin/mdv-changelog.pl	(revision 5)
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+#
+# Remove changelog from official mdv package and 
+# prepare the comment for the commit
+
+use strict;
+use File::Copy;
+
+open(FILE, $ARGV[0]) || die "Unable to open $ARGV[0]";
+open(OUT, "> $ENV{'PBTMP'}/out.spec") || die "Unable to create $ENV{'MONDOTMP'}/out.spec";
+open(CMT, "> $ENV{'PBTMP'}/cmt.spec") || die "Unable to create $ENV{'MONDOTMP'}/out.spec";
+while (<FILE>) {
+	if ($_ !~ /^\%changelog/) {
+		print OUT "$_";
+	} else {
+		# We found %changelog, that's the end for the spec
+		print OUT "$_";
+		close(OUT);
+		# Next line is the date + ver => unneeded
+		my $tmp = <FILE>;
+
+		# Get the first changelog set into the comment for SVN
+		while (<FILE>) {
+			if ($_ !~ /^[ 	]*$/) {
+				print CMT "$_";
+			} else {
+				# We found an empty line, that's the end for the cmt
+				close (CMT);
+				close (FILE);
+
+				move("$ENV{'PBTMP'}/out.spec", $ARGV[0]);
+				exit(0);
+			}
+		}
+	}
+
+}
Index: /0.11.2/pb/bin/mkannounce.pl
===================================================================
--- /0.11.2/pb/bin/mkannounce.pl	(revision 5)
+++ /0.11.2/pb/bin/mkannounce.pl	(revision 5)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl -w
+#
+# Creates announces for new mondorescue version/tag
+# 
+# $Id$
+#
+# Syntax : mkannounce announce-file
+#
+
+use strict;
+use Date::Manip;
+use File::Basename;
+use DBI;
+use English;
+
+
+# For date handling
+$ENV{LANG}="C";
+
+my $PBROOT;
+my $tmp = dirname($PROGRAM_NAME);
+print "$tmp\n";
+if ($tmp =~ /^\//) {
+	$PBROOT = $tmp;
+	}
+else {
+	$PBROOT = "$ENV{PWD}/$tmp";
+	}
+
+my $db="$PBROOT/../website/announces3.sql";
+
+my $dbh = DBI->connect("dbi:SQLite:dbname=$db","","",
+			{ RaiseError => 1, AutoCommit => 1 }) 
+			|| die "Unable to connect to $db";
+
+my $date = &UnixDate("today","%Y-%m-%d");
+
+# To read whole file
+local $/;
+open(ANNOUNCE,$ARGV[0]) || die "Unable to open $ARGV[0] (read)";
+my $announce = <ANNOUNCE>;
+#$announce =~ s/\"/\"\"/g;
+#$announce =~ s/!//g;
+close(ANNOUNCE);
+
+print "INSERT INTO announces VALUES (NULL, $date, $announce)\n";
+my $sth = $dbh->prepare(qq{INSERT INTO announces VALUES (NULL,?,?)}) 
+		|| die "Unable to insert into $db";
+$sth->execute($date, $announce);
+#$dbh->do(qq(INSERT INTO announces VALUES (NULL, '$date', '$announce'))) 
+#|| die "Unable to insert into $db";
+
+$dbh->disconnect;
Index: /0.11.2/pb/bin/pbg
===================================================================
--- /0.11.2/pb/bin/pbg	(revision 849)
+++ /0.11.2/pb/bin/pbg	(revision 849)
@@ -0,0 +1,3 @@
+#!/bin/bash
+export LANGUAGE=C
+egrep -r $* . | egrep -v '\.svn|~:|Binary[ \t]|/CVS/|/tags/' 
Index: /0.11.2/pb/bin/mkchangelog.pl
===================================================================
--- /0.11.2/pb/bin/mkchangelog.pl	(revision 5)
+++ /0.11.2/pb/bin/mkchangelog.pl	(revision 5)
@@ -0,0 +1,140 @@
+#!/usr/bin/perl -w
+#
+# Creates changelog for packages from Changelog files in the apps
+#
+# $Id$
+#
+# Syntax : mkchangelog dtype package-name output-file
+#
+
+use strict;
+use Date::Manip;
+use File::Basename;
+use English;
+
+my $log = "";
+my $dtype = $ARGV[0];
+my $pkg = $ARGV[1];
+my $pkg2;
+my $outfile = $ARGV[2];
+my $chglog = "";
+my $ndate = "";
+my $n2date = "";
+my $tmp = "";
+my $ver = "";
+my $ver2 = "";
+my $date = "";
+my $tag = "";
+
+# For date handling
+$ENV{LANG}="C";
+
+die "Syntax : mkchangelog dtype package-name output-file" 
+	if ((not (defined $dtype)) || ($dtype eq "") || 
+		(not (defined $pkg)) || ($pkg eq "") || 
+		(not (defined $outfile)) || ($outfile eq ""));
+
+my $PBROOT;
+$tmp = dirname($PROGRAM_NAME);
+if ($tmp =~ /^\//) {
+	$PBROOT = $tmp;
+	}
+else {
+	$PBROOT = "$ENV{PWD}/$tmp";
+	}
+
+die "PBROOT doesn't exist" if (not (defined $PBROOT));
+
+if (-f "$PBROOT/../$pkg/ChangeLog") {
+	$chglog = "$PBROOT/../$pkg/ChangeLog";
+	}
+else {
+	$pkg2 = $pkg;
+	$pkg2 =~ s/-..*//;
+	if (-f "$PBROOT/../$pkg2/ChangeLog") {
+		$chglog = "$PBROOT/../$pkg2/ChangeLog";
+		}
+	else {
+		die "Unable to find a ChangeLog file for $pkg\n";
+	}
+}
+$tmp="$PBROOT/../$pkg/TAG";
+if (-f "$tmp") {
+	open(TAG,"$tmp") || die "Unable to open $tmp";
+	$tag = <TAG>;
+	chomp($tag);
+} else {
+	die "Unable to find a TAG file for $pkg\n";
+}
+#print "Using $chglog as input ChangeLog file for $pkg\n";
+
+open(INPUT,"$chglog") || die "Unable to open $chglog (read)";
+open(OUTPUT,"> $outfile") || die "Unable to open $outfile (write)";
+
+# Skip first 4 lines
+$tmp = <INPUT>;
+$tmp = <INPUT>;
+$tmp = <INPUT>;
+if ($dtype eq "announce") {
+	print OUTPUT $tmp;
+}
+$tmp = <INPUT>;
+if ($dtype eq "announce") {
+	print OUTPUT $tmp;
+}
+
+my $first=1;
+
+# Handle each block separated by newline
+while (<INPUT>) {
+	($ver, $date) = split(/ /);
+	$ver =~ s/^v//;
+	chomp($date);
+	$date =~ s/\(([0-9-]+)\)/$1/;
+	#print "**$date**\n";
+	$ndate = UnixDate($date,"%a", "%b", "%d", "%Y");
+	$n2date = &UnixDate($date,"%a, %d %b %Y %H:%M:%S %z");
+	#print "**$ndate**\n";
+	if (($dtype eq "rpm") || ($dtype eq "fc")) {
+		if ($ver !~ /-/) {
+			if ($first eq 1) {
+				$ver2 = "$ver-$tag"."$ENV{suf}";
+				$first=0;
+			} else {
+				$ver2 = "$ver-1"."$ENV{suf}";
+			}
+		} else {
+			$ver2 = "$ver"."$ENV{suf}";
+		}
+		print OUTPUT "* $ndate Bruno Cornec <bruno\@mondorescue.org> $ver2\n";
+		print OUTPUT "- Updated to $ver\n";
+		}
+	if ($dtype eq "deb") {
+		print OUTPUT "$pkg ($ver) unstable; urgency=low\n";
+		print OUTPUT "\n";
+		}
+
+	$tmp = <INPUT>;	
+	while ($tmp !~ /^$/) {
+		if ($dtype eq "deb") {
+			print OUTPUT "  * $tmp";
+		} elsif ($dtype eq "rpm") {
+			print OUTPUT "$tmp";
+		} else {
+			print OUTPUT "$tmp";
+		}
+		last if (eof(INPUT));
+		$tmp = <INPUT>;
+	}
+	print OUTPUT "\n";
+
+	if ($dtype eq "deb") {
+		print OUTPUT " -- Bruno Cornec <bruno\@mondorescue.org>  $n2date\n\n";
+		print OUTPUT "\n";
+		}
+
+	last if (eof(INPUT));
+	last if ($dtype eq "announce");
+}
+close(OUTPUT);
+close(INPUT);
Index: /0.11.2/pb/bin/ptest.pl
===================================================================
--- /0.11.2/pb/bin/ptest.pl	(revision 2)
+++ /0.11.2/pb/bin/ptest.pl	(revision 2)
@@ -0,0 +1,40 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Data::Dumper;
+
+sub get_cmds {
+
+	my $dumb;
+	my $f;
+
+	open (FILE,"/bin/busybox --help 2>&1|") or die "Unable to call busybox";
+	undef $/;
+	($dumb,$f) = split /functions:/,<FILE>;
+	close(FILE);
+	$f =~ s/\s//g;
+return (split /,/,$f);
+}
+
+# Should probably be an absolute path
+my $basedir = "symlinks";
+my $tarfile = "$basedir.tgz";
+
+print "Making tarfile $tarfile ...\n";
+
+system ("rm -rf $basedir");
+unlink $tarfile;
+
+mkdir $basedir,0755;
+mkdir "$basedir/usr",0755;
+mkdir "$basedir/usr/bin",0755;
+
+chdir "$basedir/usr/bin";
+for my $l (get_cmds) {
+	symlink "../../bin/busybox",$l;
+}
+
+chdir "../..";
+system("tar cfz ../$tarfile .");
+print "Done.\n";
+
Index: /0.11.2/pb/README
===================================================================
--- /0.11.2/pb/README	(revision 1005)
+++ /0.11.2/pb/README	(revision 1005)
@@ -0,0 +1,5 @@
+License
+=======
+
+The whole Project-builder.org project is provided under the GPL v2 as per the copying file.
+Other licenses may be available in addition later on.
Index: /0.11.2/website/about.shtml
===================================================================
--- /0.11.2/website/about.shtml	(revision 1116)
+++ /0.11.2/website/about.shtml	(revision 1116)
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+		  <title>About Project-Builder.org</title>
+		  <!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="about.shtml" -->
+		  <!--#include virtual="/top.shtml" -->
+
+		<h1>About Project-Builder.org</h1>
+  <div class="h2-1">
+    <h2>What is Project-Builder.org ?</h2>
+  </div>
+  <p>
+We are strong proponents of the concept of Continuous Packaging. Project-Builder.org aka pb helps building continuously multiple OS packages from sources.
+</p>
+<p>
+With the increasing role of FLOSS in enterprises, some development techniques linked to it also know a momentum. Continuous integration (shared sources repository, automatic build, automatic test) is such an example. The new process called Continuous Packaging should still be promoted and developed as best practice for industry.
+</p>
+<p>
+Project-Builder.org is a new GPL v2 tool designed to help projects developers producing easily packages for multiple OS and architectures, on a regular basis, from a single source repository. 90% (from stats of sf.net) of users and admins prefer to install packages rather than tar files or content from a [D]VCS. But packages don't necessarily follow the development stream of projects, to package alpha, beta versions. Giving the possibility for projects to distribute seamlessly packages for whatever step of their development is clearly a gain for the whole community.
+</p>
+<p>
+The various aspects covered by the tool are:
+<ul>
+	<li>- only produce software packages (ease integration in deployment servers, provide inheritance mecanisms, and Virtual Machines (VM) or Environments (VE))</li>
+	<li>- ease the various steps of solution life cycle (controlled impact of installation/uninstallation, dependencies management, identical deliveries up to the customer, announce management, web site delivery, metadata management)</li>
+	<li>- help new projects in the provisioning of packages (templates and skeletons for the various supported OS, generated structure, help in VM/VE build)</li>
+	<li>- Avoid code or metadata duplication, as well as has no impact on the original project (macro system, separate repository)</li>
+	<li>- Neutral in term of Unix environment (repository, system, package type agnostic)</li>
+</ul>
+</p>
+<p>
+These features help reducing the development cost by providing a process, methods and tools to realize continuous packaging during the whole project life cycle.
+Today the tool supports:
+<ul>
+	<li>- Muliple repository (none - aka tar balls, SVN, CVS, Git, Mercurial, SVK...)</li>
+	<li>- Multiple systems (RPM Linux - Red Hat, SuSE, Mandriva, ..., deb Linux - Debian, Ubuntu, ..., ebuild - Gentoo, pkg Solaris/OpenSolaris, ...)</li>
+	<li>- Multiple build environments (local, VM - QEMU, KVM, ..., VE - rpmbootstrap, mock, rinse, pbuilder, ...)</li>
+	<li>- Multiple repository manager (yum, urpmi, apt, ...)</li>
+</ul>
+and this, at various phasis (development, test, integration, delivery).
+</p>
+<p>
+It aims at becoming a tool for the <a href="http://vcs-pkg.org">vcs-pkg.org</a> initiative.
+It's today used for projects as diverse as <a href="http://www.fossology.org">FOSSology</a>, <a href="http://www.mondorescue.org">MondoRescue</a>, <a href="http://www.linuxcoe.org">LinuxCOE</a>, <a href="http://kde-apps.org/content/show.php/Meganizer?content=129907">Meganizer</a>, GOsaÂ² (in study), itself, ...
+
+
+  <div class="h2-2">
+		  <h2>Project-Builder.org References</h2>
+  </div>
+	   <p>
+	   TBD
+		<p>We also have <a href="http://freshmeat.net/projects/pb">freshmeat</a>, entries.</p>
+
+  <div class="h2-3">
+		  <h2>Who is behind Project-Builder.org ?</h2>
+  </div>
+		<p><A NAME="devteam"></A>Who is in the Project-Builder.org?</P>
+      <P ALIGN=CENTER>
+	  <I><B>Bruno Cornec</B></I><BR>
+	  Lead development, maintenance, documentation, web site, rpm packaging, Mandriva packaging</P>
+      <P ALIGN=CENTER>
+	  <I><B>Bryan Gartner</B></I><BR>
+	  Ideas contributor, bug reporter</P>
+	  <I><B>Joachim Langenbach</B></I><BR>
+	  Ideas contributor, bug reporter</P>
+	  <p></p>
+  <div class="h2-4">
+		  <h2>Who has been behind Project-Builder.org ?</h2>
+  </div>
+	  <p><A NAME="old-devteam"></A>Who has been	in the Project-Builder.org?</P>
+	  <P ALIGN=CENTER>Nobody as the project is too young for that ;-)</P>
+  <div class="h2-2">
+		  <h2>Artwork of this site</h2>
+  </div>
+  <p>"I think I've already seen your look and feel somewhere"
+
+      <h3>Graphics made by Alexis Younes (Ayo73) and Amaury Amblard-Ladurantie</h3>
+	<p>These 2 incredible guys have accepted to let us reuse the design they made for the not less incredible game <a href="http://www.frozen-bubble.org">Frozen Bubble</a>. Many thanks guys ! Just hope Mondo Rescue will help you some days as much as I played to frozen bubble myself :-)</p>
+	<p>Don't miss Ayo's site at <a href="http://www.73lab.com">73lab.com</a> as it provides all his artworks, some of them reusable.</p>
+  <div class="h2-5">
+		  <h2>The Project-Builder.org Community</h2>
+  </div>
+      <P ALIGN=JUSTIFY>
+	  There are too few people involved at the moment. But that shouldn't refrain you from participating !
+	  <h3>Sponsors</h3>
+	<p>These people/entities helped financially the development of Project-Builder.org:</p> 
+	<p> HP, Intel</P>
+     <h3>Contributors</h3>
+	<p>These people helped technically the development of Project-Builder.org:</p> 
+	<p>
+		   </p>
+
+  <div class="h2-1">
+		  <h2>The Project-Builder.org Coopetitors</h2>
+  </div>
+      <P ALIGN=JUSTIFY>
+      <P>
+	  Project-Builder.org was first created because there was nothing like 
+	  it available at that time under a free license. Under the <a href="http://vcs-pkg.org">vcs-pkg.org</a> initiative, you may find other projects whose goals are aligned with those of Project-Builder.org.
+	  Especially you should look at the <a href="https://build.opensuse.org/">OpenSUSE Build Service</a> as another interesting build tool.
+	  </P>
+      <P>
+       Comments? Suggestions? Click <A HREF="/support.shtml">here</A> 
+
+					<!--#include virtual="/bottom.shtml" -->
+  </body>
+</html>
Index: /0.11.2/website/downloads.shtml
===================================================================
--- /0.11.2/website/downloads.shtml	(revision 1171)
+++ /0.11.2/website/downloads.shtml	(revision 1171)
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+		  <!--#include virtual="head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="downloads.shtml" -->
+		  <!--#include virtual="top.shtml" -->
+                    <h1>Download Project-Builder.org</h1>
+    <div class="h2-1">
+      <h2>This is Free/Libre Software</h2>
+    </div>
+    <p>Copyright (c) 2007-2010
+	Project-Builder.org is a copyrighted work, written by Bruno Cornec, delivered under the GPLv2.</p>
+    <p>
+This program is <a href="http://www.fsf.org/philosophy/free-sw.html">free software</a>; you can redistribute it and/or modify it under the terms of the <a href="http://www.fsf.org/copyleft/gpl.html">GNU General Public License</a> version 2, as published by the <a href="http://www.fsf.org/">Free Software Foundation</a>.<br/>
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.</p>
+
+    <div class="h2-2">
+      <h2>Mirrors</h2>
+    </div>
+	<p><A NAME="mirrors"></A>
+	<p>We are interested in up to date mirrors for both the Web and FTP sites. Please contact us on the <a href="/support.shtml">mailing list</a>.
+	<ul>
+		<li><b>Europe</b>:
+		<ul>
+			<li><i>France</i>:</li>
+			<ul>
+				<li>HP/Intel Solution Center:
+					<a href="http://www.project-builder.org">Web site</a>, 
+					<a href="ftp://ftp.project-builder.org">Ftp site (ftp)</a>
+					<ul>
+							<li>Update times: Master site</li>
+							<li>Internet Bandwith: 10Mbit</li>
+					</ul>
+				</li>
+			</ul>
+		</ul>
+	</ul>
+
+    <div class="h2-3">
+      <h2>Dependencies</h2>
+    </div>
+	<p><A NAME="dependencies"></A>
+	<p>The solution has been written in <a href="http://www.perl.org">perl</a> and developed on a <a href="http://www.mandriva.com/">Mandriva</a> <a href="http://www.gnu.org/">Gnu</a>/<a href="http://www.kernel.org/">Linux</a> distribution. For it to work, you will need some perl modules and tools:</p>
+<ul>
+<li><b>Mail::Sendmail</b> (only needed if managing announces)</li>
+<li><b>Date::Manip</b></li>
+<li><b>Module::Build</b></li>
+<li><b>File::MimeInfo</b></li>
+<li><b>File::Basedir</b></li>
+<li><b>KVM/QEMU</b>: the tool to create and use Virtual Machines</li>
+<li><b>debootstrap</b>: the tool to create and use Virtual Environment for deb based distros</li>
+<li><b><a href="ftp://ftp.project-builder.org/src">rpmbootstrap</a></b>: Tool to build Virtual Environments (chroot) for RPM based distros, part of our project</li>
+<li><b><a href="ftp://ftp.project-builder.org/src">pb</a></b>: the package build tool itself</li>
+</ul>
+
+<p>For Mandriva/Mandrake distributions, just use the magic:<br>
+<tt>urpmi project-builder</tt></p>
+to use the native packages of your distribution, or download the <a href="ftp://ftp.project-builder.org/mandriva/">repo file</a> pb.addmedia script and launch it if you want to use upstream packages.
+<p>
+<p>For Fedora distributions, after downloading the <a href="ftp://ftp.project-builder.org/fedora/">repo file</a> pb.repo and adding it to the /etc/yum.repos.d directory, just use the magic:<br>
+<tt>yum install project-builder</tt></p>
+<p>
+For Debian/Ubuntu, just use the magic: <br>
+<tt>apt-get install project-builder</tt></p>
+to use the native packages of your distribution, or download the <a href="ftp://ftp.project-builder.org/debian/">repo file</a> pb.sources.list and add it to your /etc/apt/sources.list.d directory if you want to use upstream packages.
+<p>
+For the other RPM based distributions, you will have to issue a <br>
+<tt>rpm -ivh *.rpm</tt><br>
+in the directory containing all the required packages, and solve dependancies manually.
+</p>
+
+    <div class="h2-4">
+      <h2>Downloads</h2>
+    </div>
+	<p>Project-Builder.orgs FTP site is available at <a href="ftp://ftp.project-builder.org">ftp://ftp.project-builder.org</a></p>
+
+<h3>Source code</h3>
+<ul>
+	<li>tarballs are available under <a href="ftp://ftp.project-builder.org/src">ftp://ftp.project-builder.org/src</a></li>
+	<li>Subversion browing available at <a href="http://trac.project-builder.org/browser/">http://trac.project-builder.org/browser/</a></li>
+	<li>Anonymous SVN Subversion check out of the project available with the following instruction set: <pre><tt>svn checkout svn://svn.project-builder.org/pb/devel</tt></pre></li>
+</ul>
+
+<h3>Packages</h3>
+
+<p>All the Project-Builder.org are built thanks to the <a href="http://trac.project-builder.org">Project-Builder.org</a> tool. What else ;-)</p>
+<p>Most of the time, you'll be able to download directly the packages suited for your distribution. Currently we provide packages for :
+<ul>
+		<li>RedHat <a href="ftp://ftp.project-builder.org/redhat/7.3">7.3</a>, <a href="ftp://ftp.project-builder.org/redhat/9">9</a>.</li>
+		<li>Fedora <a href="ftp://ftp.project-builder.org/fedora/4">Core 4</a>, <a href="ftp://ftp.project-builder.org/fedora/5">Core 5</a>, <a href="ftp://ftp.project-builder.org/fedora/6">Core 6</a>, <a href="ftp://ftp.project-builder.org/fedora/7">7</a>, <a href="ftp://ftp.project-builder.org/fedora/8">8</a>, <a href="ftp://ftp.project-builder.org/fedora/9">9</a>, <a href="ftp://ftp.project-builder.org/fedora/10">10</a>, <a href="ftp://ftp.project-builder.org/fedora/11">11</a>, <a href="ftp://ftp.project-builder.org/fedora/12">12</a>, <a href="ftp://ftp.project-builder.org/fedora/13">13</a>, <a href="ftp://ftp.project-builder.org/fedora/14">14</a>.</li>
+		<li>RedHat Enterprise Linux <a href="ftp://ftp.project-builder.org/rhel/2.1">2.1</a>, <a href="ftp://ftp.project-builder.org/rhel/3">3</a>, <a href="ftp://ftp.project-builder.org/rhel/4">4</a>, <a href="ftp://ftp.project-builder.org/rhel/5">5</a>, <a href="ftp://ftp.project-builder.org/rhel/6">6</a>..</li>
+		<li>Mandriva <a href="ftp://ftp.project-builder.org/mandrake/10.1">10.1</a>, <a href="ftp://ftp.project-builder.org/mandrake/10.2">10.2</a>, <a href="ftp://ftp.project-builder.org/mandriva/2006.0">2006.0</a>, <a href="ftp://ftp.project-builder.org/mandriva/2007.0">2007.0</a>, <a href="ftp://ftp.project-builder.org/mandriva/2007.1">2007.1</a>., <a href="ftp://ftp.project-builder.org/mandriva/2008.0">2008.0</a>, <a href="ftp://ftp.project-builder.org/mandriva/2008.1">2008.1</a>, <a href="ftp://ftp.project-builder.org/mandriva/2009.0">2009.0</a>,  <a href="ftp://ftp.project-builder.org/mandriva/2009.1">2009.1</a>,  <a href="ftp://ftp.project-builder.org/mandriva/2010.0">2010.0</a>, <a href="ftp://ftp.project-builder.org/mandriva/2010.1">2010.1</a></li>
+		<li>OpenSuSE <a href="ftp://ftp.project-builder.org/suse/10.0">10.0</a>, <a href="ftp://ftp.project-builder.org/suse/10.1">10.1</a>, <a href="ftp://ftp.project-builder.org/suse/10.2">10.2</a>, <a href="ftp://ftp.project-builder.org/suse/10.3">10.3</a>, <a href="ftp://ftp.project-builder.org/opensuse/11.0">11.0</a>, <a href="ftp://ftp.project-builder.org/opensuse/11.1">11.1</a>, <a href="ftp://ftp.project-builder.org/opensuse/11.2">11.2</a>, <a href="ftp://ftp.project-builder.org/opensuse/11.3">11.3</a>. <a href="http://packman.links2linux.org/">Packman</a> may have some useful additional packages.
+		<li>SuSE Linux Enterprise Server <a href="ftp://ftp.project-builder.org/sles/9">9</a>, <a href="ftp://ftp.project-builder.org/sles/10">10</a>, <a href="ftp://ftp.project-builder.org/sles/11">11</a>.</li>
+		<li>Asianux <a href="ftp://ftp.project-builder.org/asianux/2">2</a>, <a href="ftp://ftp.project-builder.org/asianux/3">3</a>.</li>
+		<li>Debian <a href="ftp://ftp.project-builder.org/debian/3.1">3.1</a>, <a href="ftp://ftp.project-builder.org/debian/4.0">4.0</a>, <a href="ftp://ftp.project-builder.org/debian/5.0">5.0</a>.
+		<li>Ubuntu <a href="ftp://ftp.project-builder.org/ubuntu/6.04">6.04</a>, <a href="ftp://ftp.project-builder.org/ubuntu/7.04">7.04</a>, <a href="ftp://ftp.project-builder.org/ubuntu/7.10">7.10</a>, <a href="ftp://ftp.project-builder.org/ubuntu/8.04">8.04</a>, <a href="ftp://ftp.project-builder.org/ubuntu/8.10">8.10</a>, <a href="ftp://ftp.project-builder.org/ubuntu/9.04">9.04</a>, <a href="ftp://ftp.project-builder.org/ubuntu/9.10">9.10</a>, <a href="ftp://ftp.project-builder.org/ubuntu/10.04">10.04</a>, <a href="ftp://ftp.project-builder.org/ubuntu/10.10">10.10</a>.</li>
+		<li>Gentoo <a href="ftp://ftp.project-builder.org/gentoo/nover">nover</a>.
+		<!--
+		<li>Slackware <a href="ftp://ftp.project-builder.org/slackware/10.2">10.2</a>, <a href="ftp://ftp.project-builder.org/slackware/11.0">11.0</a>.
+		-->
+</ul>
+
+<p>Test packages are also on the <a href="ftp://ftp.project-builder.org/test">ftp</a> site for people wanting to test latest versions and report their success/failures.</p>
+
+		  <!--#include virtual="bottom.shtml" -->
+  </body>
+</html>
Index: /0.11.2/website/news.shtml
===================================================================
--- /0.11.2/website/news.shtml	(revision 944)
+++ /0.11.2/website/news.shtml	(revision 944)
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+<!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="index.shtml" -->
+<!--#include virtual="/top.shtml" -->
+
+		<h1>Project-Builder.org News</h1>
+  <div class="h2-1">
+		  <h2>This year's News</h2>
+  </div>
+<!--#include virtual="/pb_web_cynews.html" -->
+
+  <div class="h2-2">
+		  <h2>Last year's News</h2>
+  </div>
+<!--#include virtual="/pb_web_lynews.html" -->
+
+  <div class="h2-3">
+		  <h2>Older News</h2>
+  </div>
+<!--#include virtual="/pb_web_pynews.html" -->
+
+<!--#include virtual="/bottom.shtml" -->
+  </body>
+</html>
Index: /0.11.2/website/support.shtml
===================================================================
--- /0.11.2/website/support.shtml	(revision 1025)
+++ /0.11.2/website/support.shtml	(revision 1025)
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+<!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="support.shtml" -->
+<!--#include virtual="/top.shtml" -->
+<h1>Support around Project-Builder.org</h1>
+
+    <div class="h2-1">
+      <h2>Help yourself</h2>
+    </div>
+	<p>First, when you have an issue, please try to read the log file/trace that Project-Builder.org produces. 99% of the time, the error is described in it in clear text. To make the error more clear, and debug easier, fill free to increase verbosity by adding at least 2 "-v" options.
+	</p>
+	<p>Second look at the <a href="/docs.shtml">Project-Builder.org documentation</a>, as a lot of good tip and tricks are provided there as well as in the Wiki's <a href="http://trac.project-builder.org/wiki/FAQ">FAQ</a> and <a href="http://trac.project-builder.org/wiki/Documentation">Documentation</a>.</p>
+	<p>Third look at the <a href="http://trac.mondorescue.org/">Project-Builder.org wiki</a> which may contain additional comments,and feel free to contribute by adding your remarks.</p>
+	<p>Fourth look at the <a href="http://mondorescue.org/sympa/arc/pb-devel">Project-Builder.org Mailing List Archives</a> (or this <a href="http://dir.gmane.org/gmane.comp.build.packages">Gmane</a> or <a href="http://project-builder-org-announce-mailing-list.808808.n3.nabble.com/">Nabble</a> mirror) as you're probably not the first with this problem. Or look at existing <a href="http://trac.project-builder.org/newticket">bug reports</a>.</p>
+	<p>Fifth, if you're willing to help debugging the future Project-Builder.org versions, try the latest beta available under the <a href="ftp://ftp.project-builder.org/test">test directory</a> of our ftp server.</p>
+	<p>Finally post on the <a href="mailto:pb-devel_at_project-builder.org">Project-Builder.org Mailing List</a> if you did not find what you were looking for, as there are other users there who could help you, including dev team members.</p>
+	<p>If your think you found a bug in Project-Builder.org, please <a href="http://trac.project-builder.org/newticket">fill a bug report</a> and also include the log files.</p>
+	<p>Likely, if you wish Project-Builder.org had your dreamed new shiny function, feel free to create a <a href="http://trac.project-builder.org/newticket">feature request</a>.</p>
+    <div class="h2-3">
+			<h2>Project-Builder.org Mailing Lists</h2>
+    </div>
+	<p>There are 2 mailing lists for the Project-Builder.org Community:</p>
+	<ul>
+			<li>The <a href="http://mondorescue.org/sympa/info/pb-announce">Project-Builder.org Announce Mailing List</a> with low traffic dedicated to annoucements around Project-Builder.org.</li>
+			<li>The <a href="http://mondorescue.org/sympa/info/pb-devel">Project-Builder.org Mailing List</a> with most of the traffic dedicated to discussions around Project-Builder.org.</li>
+	</ul>
+	<!--
+    <div class="h2-5">
+			<h2>Professional support services</h2>
+    </div>
+	<p>For commercial enhancement and consulting services around Project-Builder.org,
+	please contact:
+	<ul>
+			<li><b><a href="http://www.hp.com/linux">Hewlett-Packard</a></b> - Contact: <a href="mailto:pingouin_at_hp.com">Free, Libre and Open Source Expertise Center</a></li>
+	</ul></p>
+	-->
+<!--#include virtual="/bottom.shtml" -->
+    
+  </body>
+</html>
Index: /0.11.2/website/head.shtml
===================================================================
--- /0.11.2/website/head.shtml	(revision 1116)
+++ /0.11.2/website/head.shtml	(revision 1116)
@@ -0,0 +1,9 @@
+<title>Project-Builder.org - GPL packages and project builder for multiple operating systems</title>
+<meta name="Author" content="Bruno Cornec" />
+<meta name="keywords" lang="en" content="project builder packaging build gnu linux gpl freebsd opensolaris rpm pkg deb vcs-pkg.org" />
+<meta name="description" lang="en" content="Project-Builder.org" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+<link rel="SHORTCUT ICON" href="/favicon.ico" />
+<link rel="stylesheet" type="text/css" media="screen" href="/css/common.css" />
+<link rel="stylesheet" type="text/css" media="screen" href="/css/allbrowsers.css" />
+<script type="text/javascript" src="/js/functions.js"></script>
Index: /0.11.2/website/css/common.css
===================================================================
--- /0.11.2/website/css/common.css	(revision 943)
+++ /0.11.2/website/css/common.css	(revision 943)
@@ -0,0 +1,359 @@
+/**** Project-Builder.org website default screen Stylesheet ****/
+/** CSS loaded by all browsers V0.2 **/
+/** Reused from http://www.forzen-bubble.org. Many thanks 
+    to you guys for your kind authorization **/
+
+  /** Generic stuff **/
+  body {
+    background:url("/images/background.png");
+    margin:0px;
+    padding:0px;
+    color:#000;
+    font-family: "Bitstream Vera Sans", "Lucida Sans", Geneva, Arial, Helvetica, sans-serif;
+  }
+  a {
+    color: #9B9BC8; 
+    text-decoration:none ;
+  }
+  a:hover { 
+    text-decoration: underline;
+  }
+  h1, h2 {
+    color: #21449c;  
+  }
+  img {
+    border: 0px solid  #fff;
+  }
+  div.c {
+    text-align:center;
+  }
+  /** Top banner **/
+  #topbanner {
+    width:100%;
+    float:left;
+    background:#c0c0c0;
+    border-bottom: 1px solid #999;
+    margin-bottom: 0.5em;
+  }
+  #links, #topinfo {
+    font-size: 70%;
+  }
+  #links, #links a, #topinfo, #topinfo a {
+    color: #404cba;
+  }
+  #links a {
+    margin-right: 1em;
+  }
+  #topinfo {
+    display:block;
+    float: left;
+    text-align: left;
+    margin-left: 1em;
+  }
+  #links {
+    display:block;
+    float: right;
+    text-align: right;
+  }
+
+
+  /** body **/
+  #body {
+    display: block;
+    padding: 1em 5% 5em 5%;
+    margin-left: auto; margin-right: auto;
+    min-width:700px;
+    max-width:1100px;
+    text-align: left;
+  }
+
+
+  /** Logo **/
+  #logo {
+    text-align: center;
+    margin-bottom: 0.5em;
+  }
+
+
+  /** Navbar **/
+  #navbar {
+    width: 100%;
+    padding: 0 0 0 0; 
+    font-size:14px;
+    background:url("/images/navbar-left.png") top left no-repeat;
+  }
+  #navbar ul {
+    width:100%;
+    list-style:none;
+    text-align: center;
+    margin:0 0 0 0;
+    padding:17px 0 30px 0 ; /* 1st param = font v align / Need to be high enough so all bg image is displayed */ 
+    position:relative;
+    right: -11px;
+    background:url("/images/navbar-right.png") top right no-repeat;
+  }
+  #navbar li {
+    display:inline;
+    margin:0;
+    padding:0;
+  }
+  #navbar a {
+    background:url("/images/navbar-dot.png") no-repeat left ;
+    padding: 0 0 0 0.7em;
+    margin: 0 0 0 1em;
+    color: #21449c;
+    font-weight: bold;
+  }
+  #navbar a:hover {
+    background:url("/images/navbar-dot-hover.png") no-repeat left ;
+  }
+  #current a {
+    text-decoration: underline;
+    background:url("/images/navbar-dot-hover.png") no-repeat left;
+  }
+  #current a:hover {
+    text-decoration: underline overline;
+  }
+
+
+  /** Main body stuff **/
+  #main {
+    width:100%;
+    color: #336;
+    font-size: 90%;
+  }
+  #frametopleft {
+    background: url("/images/frame/corner-topleft.png") top left no-repeat;
+    margin:0px;
+    padding-left:15px;
+  }
+  #frametop {
+    background: url("/images/frame/border-top.png") top right repeat-x;
+  }
+  #frametopright {
+    background: url("/images/frame/corner-topright.png") top right no-repeat;
+    position:relative;
+    right: -15px;
+    margin:0px 0px -30px 0px;
+    padding: 15px 0px;
+  }
+  #frameleft {
+    background: url("/images/frame/border-left.png") top left repeat-y;
+    position:relative;
+    left: -30px;
+    padding-top: 15px;
+  }
+  #frameright {
+    background: url("/images/frame/border-right.png") top right repeat-y;
+    position:relative;
+    right: -30px;
+    padding-right: 15px;
+    padding-bottom: 15px;
+  }
+  #framecontent {
+    padding: 0 0 30px 30px;
+    
+    background: #fff;
+  }
+  #framebottomleft {
+    background: url("/images/frame/corner-bottomleft.png") bottom left no-repeat;
+    padding-top: 15px;
+    padding-left: 15px;
+    position:relative;
+    left: -15px;
+  }
+  #framebottom {
+    background: url("/images/frame/border-bottom.png") bottom right repeat-x;
+    background-color: #fff;
+  }  
+  #framebottomright {
+    background: url("/images/frame/corner-bottomright.png") bottom right no-repeat;
+    margin-top: -16px;
+    padding-top: 15px;
+    position:relative;
+    right: -30px;
+  }
+  #main h1 {
+    color: #7395cd;
+    background:url("/images/bird_world.png") top left no-repeat;
+    /* background:url("/images/h1.png") top left no-repeat; */
+    padding:12px 0em 1em 80px;
+    margin:0.5em 0 0 0;
+    font-size: 160%;
+  }
+  #main div.h2-1, #main div.h2-2, #main div.h2-3, #main div.h2-4, #main div.h2-5 {
+    width: 90%;
+    padding: 0 0 0 40px; 
+    font-size:100%;
+  }
+  #main h3 {
+    color: #404cba;
+    display: block;
+    padding-left: 1em;
+    font-size: 100%;
+    clear: both;
+  }
+  #main a {
+    color:#33f;
+  }
+  #main a:visited {
+    color:#66c;
+  }
+  #main p {
+    display: block;
+    text-align: justify;
+    padding: 0 75px 0 1em;
+  }
+  #main p.c, #main div.c {
+    text-align: center;
+  }
+  #main p.cs {
+    text-align: center;
+    font-size:80%;
+  }
+  #main ul {
+    padding-left: 4em;
+  }
+  table.enhanced {
+    border-collapse:collapse;
+    border:1px solid #cacaca;
+    width:95%;
+  }
+  table.enhanced td, table enhanced th {
+    border:1px solid #cacaca;
+    padding:4px;
+  }
+  table.enhanced th {
+    background:#d0d9e5;
+    padding: 0.5em;
+    color:#666;
+  }
+  table.enhanced caption {
+    color: #f90;
+    font-weight: bold;
+    padding: 1em 0.3em;
+    font-size:90%;
+  }
+  table.enhanced input[type="image"], table.enhanced img {
+    margin-left: 1.5em;
+  }
+  .enhancedtablecolouredrow{
+    background:#f0f0f0;
+  }
+  .enhancedtablerowhover{
+    background:#e7e9fb;
+  }
+  #servers {
+    width: 50%;
+    margin: 2em auto 2em auto;
+  }
+  #servers input{
+    background: #f0f0f0;
+  }
+  #servers input:hover{
+    background: #e7e9fb;
+  }
+  #servers input:focus{
+    background: #fff;
+  }
+
+  /** Message/forum stuff **/
+  div.message {
+    border: 1px solid #adb4bc;
+    margin: 0px 60px 1em 10px;
+  }
+  div.message div.user, div.message div.admin {
+    background-color: #d0d9e5;
+    padding: 2px;
+  }
+  div.message div.info {
+    margin-bottom: 0.5em;
+    padding: 2px 0 0 25px;
+  }
+  div.user div.info {
+    background:url("/images/icon-page.png") left no-repeat;
+    background-color: #d0d9e5;
+  }
+  div.admin div.info {
+    background:url("/images/icon-user.png") left no-repeat;
+    background-color: #d0d9e5;
+  }
+  div.message div.adminbox {
+    float: right;
+  }
+  div.message div.text {
+    padding: 0.5em 1em;
+    border: 1px solid #adb4bc;
+  }
+  div.message div.user div.text {
+    background-color: #fff;
+  }
+  div.message div.admin div.text {
+    background-color: #ffeeee;
+  }
+ 
+    /*** form stuff ***/
+  #forum input, #forum textarea, #forum select { 
+    background: #f0f0f0;
+    border: 1px solid #cacaca;
+    -moz-border-radius: 4px; /* Moz specific code ! */
+  }
+  #forum label, #forum input, #forum textarea {
+    display: block;
+    float: left;
+    margin-bottom: 1em;
+  }
+  #forum input, #forum textarea {
+    padding: 0 4px;
+  }
+  #forum select {
+    padding-right: 0px;
+    margin-bottom: 1em;
+  }
+  #forum input:hover, #forum textarea:hover, #forum select:hover {
+    background: #e7e9fb;
+  }
+  #forum input:focus, #forum textarea:focus {
+    background: #fff;
+  }
+  #forum label {
+    text-align: right;
+    width: 15em;
+    margin-right: 2em;
+  }
+  #forum div.submit {
+    float: right;
+  }
+  #forum input[type="hidden"] {
+    border: 0px solid #fff;
+    display: none;
+  }
+  #forum input[type="submit"] {
+    margin-left: 1em;
+  }
+  #forum input[type="submit"]:hover {
+    background: #f4cdd1;
+  }
+  #forum abbr, #forum acronym, #forum span.help {
+    display: inline;
+    cursor: help;
+    border-bottom: 1px dashed #999;
+  }
+  #forum fieldset {
+    border:1px solid #e5e5e5; 
+  }
+  #forum legend {
+    color: #21449c;
+    font-weight: bold;
+    padding: 1em 0.3em;
+    font-size:90%;
+    text-align:right;
+  }
+  #forum form div {
+    clear: both;
+  }
+  #forum form {
+    margin-left: auto; margin-right: auto;
+    width: 80%;
+  }
+
Index: /0.11.2/website/css/allbrowsers.css
===================================================================
--- /0.11.2/website/css/allbrowsers.css	(revision 943)
+++ /0.11.2/website/css/allbrowsers.css	(revision 943)
@@ -0,0 +1,34 @@
+/**** Project-Builder.org website default screen Stylesheet ****/
+/** Standard browser CSS V0.2 **/
+/** Reused from http://www.forzen-bubble.org. Many thanks 
+    to you guys for your kind authorization **/
+
+  #main div.h2-1 {
+    background:url("/images/h2-1.png") top left no-repeat;
+  }
+  #main div.h2-2 {
+    background:url("/images/h2-2.png") top left no-repeat;
+  }
+  #main div.h2-3 {
+    background:url("/images/h2-3.png") top left no-repeat;
+  }
+  #main div.h2-4 {
+    background:url("/images/h2-4.png") top left no-repeat;
+  }
+  #main div.h2-5 {
+    background:url("/images/h2-5.png") top left no-repeat;
+  }
+  #main h2 {
+    width:100%;
+    display: block;
+    margin:3em 2em -1em 0px;
+    padding:7px 0 28px 0px ; /* 1st param = font v align 3rd param = image width / Need to be high enough so all bg image is displayed */ 
+    position:relative;
+    right: -15px;
+    background:url("/images/h2-right.png") top right no-repeat;
+
+    color:  #fff;
+    font-size: 12px; /* Font size in px because we write on a fixed image background */
+    font-weight: bold;
+    text-align: left;
+  }
Index: /0.11.2/website/top.shtml
===================================================================
--- /0.11.2/website/top.shtml	(revision 1025)
+++ /0.11.2/website/top.shtml	(revision 1025)
@@ -0,0 +1,46 @@
+    <!-- 
+		First many thanks to the guys at http://www.frozen-bubble.org for their kind authorisation to reuse their design and artwork. Especially 
+    <a href="http://zarb.org/~gc/">Guillaume Cottenceau</a>: design &amp; programming<br />
+    <a href="http://www.73lab.com/">Alexis Younes (Ayo73)</a>: graphics &amp; website design<br />
+    <a href="mailto:amaury foo linuxfr.org">Amaury Amblard-Ladurantie</a>: website coding
+	
+      Yup, we know this website may not be fully W3C compatible.
+      We tried our best, though, to make it viewable by the broadest audience (even Internet Explorer users).
+
+	  Please send an email to the webmaster_at_project-builder,org should you have any problem accessing the website. 
+    -->
+    <div id="topbanner">
+      <div id="links">
+        <a href="http://www.73lab.com/">www.73lab.com</a> <a href="http://www.hpintelco.net/">www.hpintelco.net</a>
+      </div>
+      <div id="topinfo">
+        PBVER-rPBREV   - PBDATE   </div>
+    </div>
+    <div id="body">
+      <div id="logo">
+			  <img src="/images/" alt="Project-Builder.org logo" title="This is the official Project-Builder.org Website !"/></div>
+      <div id="navbar">
+        <ul>
+				<li <!--#if expr="\"$curpage\" = \"index.shtml\"" --> id="current" <!--#endif -->>
+				<a href="/" title="Project-Builder.org homepage" >Home</a></li>
+				<li <!--#if expr="\"$curpage\" = \"about.shtml\"" --> id="current" <!--#endif -->>
+				<a href="/about.shtml" title="About Project-Builder.org" >About</a></li>
+				<li <!--#if expr="\"$curpage\" = \"news.shtml\"" --> id="current" <!--#endif -->>
+				<a href="/news.shtml" title="News about Project-Builder.org" >News</a></li>
+		  <li <!--#if expr="\"$curpage\" = \"docs.shtml\"" --> id="current" <!--#endif -->>
+		  <a href="/docs.shtml" title="Documentations about Project-Builder.org" >Docs</a></li>
+          <li <!--#if expr="\"$curpage\" = \"downloads.shtml\"" --> id="current" <!--#endif -->>
+		  <a href="/downloads.shtml" title="Download Project-Builder.org now !" >Downloads</a></li>
+          <li <!--#if expr="\"$curpage\" = \"support.shtml\"" --> id="current" <!--#endif -->>
+		  <a href="/support.shtml" title="If you need support (why it's perfect :-)" >Support</a></li>
+          <li><a href="http://trac.project-builder.org" title="Use the Wiki" target="_blank" >Wiki</a></li>
+        </ul>
+      </div>
+      <div id="main">
+        <div id="frametopleft">
+          <div id="frametop">
+            <div id="frametopright">
+	      <div id="frameleft">
+	        <div id="frameright">
+	          <div id="framecontent">
+                    <!-- ##############  Main stuff goes here  ################ -->
Index: /0.11.2/website/bottom.shtml
===================================================================
--- /0.11.2/website/bottom.shtml	(revision 940)
+++ /0.11.2/website/bottom.shtml	(revision 940)
@@ -0,0 +1,16 @@
+				<!-- ##############  Main stuff ends here  ################ -->
+	          </div> <!-- Content -->
+	        </div> <!-- Right -->
+	      </div> <!-- Left -->
+	    </div> <!-- Top -->
+          </div> <!-- Topright -->
+          <div id="framebottomleft">
+            <div id="framebottom">
+	      <div id="framebottomright">
+		    &nbsp;
+	      </div> <!-- bottomright -->
+	    </div> <!-- bottom -->
+          </div> <!-- bottomleft -->
+        </div> <!-- Topleft -->
+      </div> <!-- #main -->
+    </div> <!-- #body -->
Index: /0.11.2/website/etc/project-builder.org.conf
===================================================================
--- /0.11.2/website/etc/project-builder.org.conf	(revision 996)
+++ /0.11.2/website/etc/project-builder.org.conf	(revision 996)
@@ -0,0 +1,100 @@
+NameVirtualHost 10.3.252.23
+
+<VirtualHost 10.3.252.23>
+    ServerName www.project-builder.org
+    ServerAlias project-builder.org
+    ServerAdmin webmaster@project-builder.org
+    DocumentRoot /mondo/project-builder/www/html/project-builder
+    CustomLog /var/log/httpd/www.project-builder.org/access_log combined
+    Errorlog /var/log/httpd/www.project-builder.org/error_log
+    RewriteEngine On
+    RewriteRule		^/index\.html$  /index.shtml
+    RewriteRule		^/$  /index.shtml
+
+    <Directory "/mondo/project-builder/www/html/project-builder">
+	DirectoryIndex index.shtml
+        Options -Indexes MultiViews FollowSymLinks +Includes
+        AllowOverride None
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+    <Directory "/mondo/project-builder/www/cgi-bin">
+        AllowOverride All
+        Options ExecCGI FollowSymLinks
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+    ScriptAlias /cgi-bin/ "/mondo/project-builder/www/cgi-bin/"
+
+    # fix mdk bug #16298
+    PassEnv LC_ALL
+    PassEnv LANG
+
+    # fix mdk bug #16298
+    <Directory "/usr/share/trac/htdocs/">
+        Options Indexes MultiViews
+        AllowOverride None
+        Order allow,deny
+        Allow from All
+    </Directory>
+    
+    Alias /trac/ "/usr/share/trac/htdocs/"
+    <Location "/cgi-bin/trac.cgi">
+        SetEnv TRAC_ENV "/mondo/project-builder/trac/project-builder.env"
+    </Location>
+
+    # You need something like this to authenticate users
+    #<Location "/cgi-bin/trac.cgi/login">
+        #AuthType Basic
+        #AuthName "Dploy"
+        #AuthUserFile /usr/local/etc/project-builder.htpasswd
+        #Require valid-user
+    #</Location>
+</VirtualHost>
+
+<VirtualHost 10.3.252.23>
+    ServerName trac.project-builder.org
+    SetEnv TRAC_ENV "/mondo/project-builder/trac/project-builder.env"
+    DocumentRoot /mondo/project-builder/www/cgi-bin/trac.cgi
+    ServerAdmin webmaster@project-builder.org
+    CustomLog /var/log/httpd/www.project-builder.org/access_log combined
+    Errorlog /var/log/httpd/www.project-builder.org/error_log
+
+    # fix mdk bug #16298
+    PassEnv LC_ALL
+    PassEnv LANG
+
+    <Directory "/mondo/project-builder/www/cgi-bin">
+        AllowOverride All
+        Options ExecCGI FollowSymLinks
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+    Alias /trac/ "/usr/share/trac/htdocs/"
+    ScriptAlias /cgi-bin/ "/mondo/project-builder/www/cgi-bin/"
+
+    # You need something like this to authenticate users
+    #<Location "/login">
+        #AuthType Basic
+        #AuthName "Dploy"
+        #AuthUserFile /usr/local/etc/trac.htpasswd
+        #Require valid-user
+    #</Location>
+</VirtualHost>
+
+<VirtualHost 10.3.252.23>
+    ServerName www1.project-builder.org
+    ServerAdmin webmaster@project-builder.org
+    DocumentRoot /mondo/project-builder/www/html/test
+    CustomLog /var/log/httpd/www1.project-builder.org/access_log combined
+    Errorlog /var/log/httpd/www1.project-builder.org/error_log
+    <Directory "/mondo/project-builder/www/html/test">
+        Options -Indexes MultiViews FollowSymLinks +Includes
+        AllowOverride None
+        Order allow,deny
+        Allow from all
+    </Directory>
+</VirtualHost>
Index: /0.11.2/website/js/functions.js
===================================================================
--- /0.11.2/website/js/functions.js	(revision 940)
+++ /0.11.2/website/js/functions.js	(revision 940)
@@ -0,0 +1,178 @@
+function domTableEnhance() {
+  if(document.getElementById && document.getElementsByTagName) {  
+    var tableClass='enhanced';
+    var colourClass='enhancedtablecolouredrow';
+    var hoverClass='enhancedtablerowhover';
+    var alltables,bodies,i,j,addclass,trs,c;
+    alltables=document.getElementsByTagName('table');
+
+    for (i=0;i<alltables.length;i++) {
+      if(alltables[i].className.match(tableClass)) {
+        bodies=alltables[i].getElementsByTagName('tbody');
+
+	for (i=0;i<bodies.length;i++) {
+	  trs=bodies[i].getElementsByTagName('tr')
+
+	  for (j=0;j<trs.length;j++) {
+	    if(trs[j].getElementsByTagName('td').length>0) {
+	      addClass=j%2==0?' '+colourClass:'';
+	      trs[j].className=trs[j].className+addClass;
+	      trs[j].c=hoverClass;
+	      
+	      trs[j].onmouseover=function() {
+		this.className=this.className+' '+this.c;
+	      }
+	      
+	      trs[j].onmouseout=function() {
+	        this.className=this.className.replace(''+this.c,'');
+	      }
+	    }
+	  }
+	}
+      }
+    }
+  } 
+}
+
+function domCheckboxEnhance() {
+  var els=document.getElementsByTagName("input");
+  for(var i=0; i < els.length; i++) {
+    if (els[i].type=='checkbox') { // its a checkbox
+      els[i].style.display='none'; // hide the original checkbox control:  
+      var img = document.createElement("img"); // create the graphical alternative:
+      
+      // initial state of graphical checkbox 
+      // is the same as the original checkbox:
+       
+      if (els[i].checked) {
+        img.src="images/theme-default_form-checkbox-checked.png";
+        img.title="Checked";
+
+      } else {
+        img.src="images/theme-default_form-checkbox-unchecked.png";
+        img.title="Unchecked";
+
+      } 
+      
+      img.onclick= toggleCheckbox;
+      img.onmouseover= mouseoverCheckbox;
+      img.onmouseout= mouseoutCheckbox;
+      
+      // insert the new, clickable image into the DOM
+      // infront of the original checkbox:
+      
+      els[i].parentNode.insertBefore(img, els[i]);
+    }  
+  }
+}
+
+
+function toggleCheckbox() {
+
+// graphical checkbox onclick event handler
+  
+  // toggle the checkbox state:
+  
+  if (this.title == "Checked") {
+
+    // toggle the image and title:  
+    this.src="images/theme-default_form-checkbox-unchecked.png";
+    this.title="Unchecked";
+    
+    // update the hidden real checkbox to match the state of the graphical 
+    // version:
+    this.nextSibling.checked=false;
+    
+  } else {
+  
+    // toggle the image and title:  
+    this.src="images/theme-default_form-checkbox-checked.png";
+    this.title="Checked";
+
+    // update the hidden real checkbox to match the state of the graphical 
+    // version:
+    this.nextSibling.checked=true;
+  }
+}
+
+function mouseoverCheckbox() {
+// graphical checkbox onmouseover event handler
+  this.src="images/theme-default_form-checkbox-uncheckedhover.png";
+}
+
+function mouseoutCheckbox() {
+// graphical checkbox onmouseout event handler
+  // toggle the checkbox state:
+  if (this.title == "Checked") {
+    this.src="images/theme-default_form-checkbox-checked.png";
+  } else {
+    this.src="images/theme-default_form-checkbox-unchecked.png";
+  }
+}
+
+function loadjs() {
+// Loads startup functions
+  // domCheckboxEnhance();
+  domTableEnhance(); 
+}
+
+window.onload=loadjs;
+
+
+
+
+/* Form validation stuff */
+function IsEmpty(aTextField) {
+  if ((aTextField.value.length==0) || (aTextField.value==null)) {
+    return true;
+  }
+  else { 
+    return false; 
+  }
+} 
+
+function IsEmail(str) {
+  var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
+  if (filter.test(str)) {
+    return true
+  } else {
+    return false
+  }
+}
+
+function checkServerForm(form) {
+  if((IsEmpty(form.servername)) || (form.servername.value == "Add your server here"))  {			  
+    alert('You must provide a valid server name') ;
+    form.servername.focus(); 
+    return false; 
+  } 
+  
+  if((isNaN(parseInt(form.serverport.value))) || (form.serverport.value>65535) || (form.serverport.value<1)){ 
+    alert('The "port" field must be a valid number (1-65535).');
+    form.serverport.focus(); 
+    return false; 
+  } 
+   return true;
+}
+
+function checkFeedbackForm(form) {
+  if(IsEmpty(form.name))  {			  
+    alert('You must provide your name') ;
+    form.name.focus(); 
+    return false; 
+  } 
+
+  if((IsEmpty(form.email)) || (!IsEmail(form.email.value)))  {			  
+    alert('You must provide a valid email address (it will NOT appear in clear spammable form on the site)') ;
+    form.email.focus(); 
+    return false; 
+  } 
+
+  if(IsEmpty(form.text))  {			  
+    alert('You forgot to type in your message') ;
+    form.text.focus(); 
+    return false; 
+  } 
+   
+   return true;
+}
Index: /0.11.2/website/index.shtml
===================================================================
--- /0.11.2/website/index.shtml	(revision 1116)
+++ /0.11.2/website/index.shtml	(revision 1116)
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+<!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="index.shtml" -->
+<!--#include virtual="/top.shtml" -->
+
+		<h1>Project-Builder.org Home Page</h1>
+  <div class="h2-1">
+		  <h2>What is Project-Builder.org ?</h2>
+  </div>
+  <p class="c">Project-Builder.org is a GPL tool to help you build packages of projects for multiple operating systems from repostitories or files</p>
+
+  <div class="h2-2">
+    <h2>Authors</h2>
+  </div>
+  <p><a href="http://www.hyper-linux.org/">Bruno Cornec</a>: lead development, maintenance, packaging, web site, documentation<br>
+
+  <div class="h2-5">
+		  <h2>Latest news</h2>
+  </div>
+<!--#include virtual="/pb_web_fpnews.html" -->
+  <p> For more news look <a href="/news.shtml">here</a></p>
+
+
+  <div class="h2-4">
+    <h2>Made with</h2>
+  </div>
+    <div class="c"><a href="http://www.gnu.org"><img src="/images/gnubanner-2_114x40.png" width="114" height="40" alt="GNU logo" title="We run GNU" /></a>
+    <a href="http://www.vim.org"><img src="/images/icon-vim.png" width="140" height="40" alt="Vim logo" title="Edited with Vim" /></a>
+    <a href="http://www.perl.org/"><img src="/images/icon-perl.png" width="100" height="40" alt="Perl" title="Made with Perl" /></a>
+	</div>
+
+  <div class="h2-3">
+    <h2>About this website</h2>
+  </div>
+  <div class="c"><a href="http://www.73lab.com/"><img src="/images/icon-73lab.png" width="89" height="40" alt="73lab logo" title="Graphics by Ayo" /></a>
+	<a href="http://www.mandriva.com/"><img src="/images/icon-mandriva.png" width="160" height="40" alt="Mandriva" title="Hosted on Mandriva Linux" /></a>
+	<a href="http://www.hpintelco.net"><img src="/images/hpisc.png" width="160" height="40" alt="HP/Intel Solution Center" title="Sponsored and hosted by the HP/Intel Solution Center" /></a>
+	<a href="http://www.hp.com/linux"><img src="/images/hp.png" width="120" height="40" alt="Linux at HP" title="Sponsored HP" /></a>
+  </div>
+  <div>
+  <p>This website has been designed according to the <a href="http://validator.w3.org/check?uri=http%3A%2F%2Fwww.project-builder.org">W3C standards</a> in order to be viewable by most standard compliant browsers. Since it uses some CSS techniques, it may not render correctly on some non-free (as in <i>freedom</i>) widely used browser. If this is the case with your browser, you may want to try the latest version of <a href="http://www.mozilla.com/firefox/">Firefox</a>, a standards compliant free software browser.</p>
+    <p>This site is best viewed with the free <a href="http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/">"Vera" True Type Font</a>&nbsp;&nbsp;from Bitstream.</p>
+  </div>
+
+<!--#include virtual="/bottom.shtml" -->
+  </body>
+</html>
Index: /0.11.2/website/docs.shtml
===================================================================
--- /0.11.2/website/docs.shtml	(revision 1263)
+++ /0.11.2/website/docs.shtml	(revision 1263)
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en" lang="en">
+  <head>
+<!--#include virtual="/head.shtml" -->
+  </head>
+  <body>
+		  <!--#set var="curpage" value="docs.shtml" -->
+<!--#include virtual="/top.shtml" -->
+
+		<h1>Project-Builder.org Documentations</h1>
+  <div class="h2-1">
+    <h2>Project-Builder.org HOWTO</h2>
+  </div>
+  <p>The Project-Builder.org HOWTO is to be created</p>
+
+  <div class="h2-3">
+    <h2>Project-Builder.org man pages</h2>
+  </div>
+  <p>The Project-Builder.org man pages are available under various formats:</p>
+
+<!--#include virtual="/docs/pb_man_pages.html" -->
+
+  <div class="h2-2">
+    <h2>Other Documents</h2>
+  </div>
+  <p>Here are some other documents seaking of Project-Builder.org:</p>
+  <ul>
+		  <li><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a> <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title" rel="dc:type">A Project-Builder.org <a href="http://trac.project-builder.org/browser/devel/pb-doc/pb-presentation.odp" target="_blank">presentation</a> made by Bruno Cornec.</li>
+		  <li><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a> <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title" rel="dc:type">The <a href="http://trac.project-builder.org/browser/devel/pb-doc/LabProject-Builder.org.pdf" target="_blank">Project-Builder.org Lab</a></span>: Experience yourself Project-Builder.org by following those Lab instructions ! Should provide you with at least 3 hours of fun discovering the tool with detailed explanations. This Lab has been developed for an internal HP Open Source and Linux Event I contributed to organize (TES 2009). Highly recommended to have a good tour of the features. By <a xmlns:cc="http://creativecommons.org/ns#" href="http://opensource.hp.com" property="cc:attributionName" rel="cc:attributionURL">Bruno Cornec</a> and licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0 Unported License</a>.<br />Based on a work at <a xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://trac.project-builder.org/browser/devel/pb-doc/LabProject-Builder.org.odt" rel="dc:source">trac.project-builder.org</a>.
+		  <li>The <a href="http://www.project-builder.org/docs/One_Source_for_Multiple_Platforms_Sol_Brief_final.pdf" target="_blank">Solution Brief</a> developed by the HP/Intel Solution Center on the joint approach to develop with one source for mulitple platforms.
+<!--#include virtual="/bottom.shtml" -->
+  </body>
+</html>
Index: /0.11.2/pb-doc/pb-demo
===================================================================
--- /0.11.2/pb-doc/pb-demo	(revision 1101)
+++ /0.11.2/pb-doc/pb-demo	(revision 1101)
@@ -0,0 +1,54 @@
+Demo of project-builder.org
+===========================
+
+# First demonstrate the way of working for pb itself
+cd ~/local/pb|~/pb
+# Show the various versions available in this SVK exported dir
+ls
+# get the current tag of the SVK repository
+svk info|svn info
+
+# get the current version of project-builder
+rpm -q project-builder
+pb --help
+
+# Decide to build a package for project-builder based on that devel version
+# to replace the one currently installed
+pb -p pb -r devel cms2build
+
+# Show the upstream part
+tar tvfz /home/bruno/local/pb/delivery/project-builder-devel.tar.gz
+
+# Show the pb specific part
+tar tvfz /home/bruno/local/pb/delivery/project-builder-devel.pbconf.tar.gz
+
+# Now make the packages
+pb -p pb build2pkg
+
+# Look at the latest pckges created
+ls -altrg /home/bruno/local/pb/build/RPMS/noarch
+
+# Install the generated packages
+sudo urpmi /home/bruno/local/pb/build/RPMS/noarch/*.rpm
+
+# Check that it's the right one
+rpm -q project-builder
+pb --help
+
+# Now  show how easy it's to build for another distro in a VM
+ls /home/qemu
+pb -p pb -m ubuntu-9.04-i386 build2vm
+# Now  show how easy it's to build for another distro in a VE
+ls /home/rinse
+pb -p pb -m centos-5-i386 build2ve
+
+# Now  show how easy it's to build for another project for which I'm upstream
+pb -p mondorescue -m centos-5-i386 cms2ve
+# Now  show how easy it's to build for another project for which I'm not upstream with patches
+pb -p afio -r 2.5 -m centos-5-i386 cms2ve
+
+# Look at conf files
+cat ~/.pbrc
+cat /home/rinse/.pbrc
+cat ~/pb/projects/afio/pbconf/2.5/afio.pb
+ls -R ~/pb/projects/afio/pbconf/2.5/
Index: /0.11.2/pb-doc/qemu.txt
===================================================================
--- /0.11.2/pb-doc/qemu.txt	(revision 748)
+++ /0.11.2/pb-doc/qemu.txt	(revision 748)
@@ -0,0 +1,77 @@
+#Booting CD
+qemu-img create -f qcow image.qemu 3G
+qemu -cdrom /dev/hdc -m 256 -boot d image.qemu
+
+# use lilo on recent x86_86 distros as grub doesn't work.
+# on suse make yast2 use the right repositories (Sw/SWrepositories/ remove DVD)
+# # verify root alogin on sshd conf
+grep Root /etc/ssh/sshd_config
+
+# On Ubuntu install openssh-server
+apt-get install openssh-server
+
+# At install on 64 distro use lilo
+# on Ubuntu change tty, kill grub install
+# chroot /target remount cdrom
+# install lilo instead
+
+# Recent SUSE acpi=off
+
+# RPM based : urpmi, yum install, yast2
+# Mandriva
+
+# gentoo
+#Cf: http://wiki.xensource.com/xenwiki/QEMUGentoo
+emerge neon newt slang autoconf automake subversion libtool gcc wget vim man groff lynx grub afio buffer mindi mondo-rescue cdrecord mkisofs pb
+
+# Slackware
+# Cf: http://www.linuxpackages.net/howto.php?page=package&title=Package+Howto
+#
+# Ubuntu
+apt-get install autoconf automake libtool g++ wget patch mondo groff imagemagick docbook-utils docbook2x docbook-to-man openssh-server dpkg-dev debian-builder dh-make fakeroot libnewt-dev libncurses5-dev pb
+
+#Changing CD during install:
+Ctrl-Alt-2
+eject cdrom
+(swap disk)
+change cdrom /dev/cdrom
+
+# Making a snapshot
+Ctrl-Alt 2
+savevm pb
+commit all
+
+# Slack: put loadkeys fr in /etc/rc.d/rc.keymap
+
+#ClÃ© SSH:
+mkdir .ssh
+chmod 700 .ssh
+scp bruno@10.0.2.2:.ssh/id_dsa.pub /root/.ssh/authorized_keys
+chmod 600 /root/.ssh/authorized_keys
+
+#rebuild paquets necessaires mondo:
+wget ftp://ftp.mondorescue.org/src/afio-2.4.7-1.src.rpm 
+wget ftp://ftp.mondorescue.org/src/buffer-1.19-1.src.rpm
+rpm -ivh afio-2.4.7-1.src.rpm buffer-1.19-1.src.rpm
+mkdir -p build/BUILD build/RPMS/i386 build/SRPMS
+rpmbuild --define "_topdir $HOME/build" -ba build/SPECS/afio.spec
+rpmbuild --define "_topdir $HOME/build" -ba build/SPECS/buffer.spec
+chmod 644 build/RPMS/i386/*
+scp -p build/RPMS/i?86/afio-[0-9]* build/RPMS/i?86/buffer-[0-9]* www.mondorescue.org:/mondo/ftp/rhel/3/
+
+root:
+rpm -ivh ~bruno/build/RPMS/i?86/afio-[0-9]* ~bruno/build/RPMS/i?86/buffer-[0-9]*
+
+# For RHAS 2.1 add grep-2.5.1
+
+#for gentoo
+chown bruno /etc/make.conf
+bruno in portage group
+
+# for FreeBSD
+ln -sf /usr/local/bin/bash /bin/bash
+
+# For Slackware
+take on ftp pkg src + build
+configure sudo :
+bruno = NOPASSWD: /sbin/makepkg
Index: /0.11.2/pb-doc/SECURITY
===================================================================
--- /0.11.2/pb-doc/SECURITY	(revision 1179)
+++ /0.11.2/pb-doc/SECURITY	(revision 1179)
@@ -0,0 +1,50 @@
+Security infos
+==============
+In order to work correctly, pb needs some root access to perform certain activities. 
+This is done by calls to sudo.
+However, by default all actions are performed with an unpriviledge user (the one using pb or the pb user if working on VM/VE/RM)
+Security is not considered a constaint when pb is generating the build environment itself, such as for VM and VE. So, in these cases, the sudo configuration allows the pb user to do all commands without password in the VM or to perform locally all actions for the VE management, by geing granted full local access. 
+However, when using pb with RM, as the systems may pre-exist and be used for other tasks, a strict analysis of the actions performed is required, in order to restrict precisely the commands called with sudo priviledges, as these are done without password request to automate generation.
+
+In the Distributions.pm module there are sudo calls, corresponding to the abilty to configure automatically additional repositories. That feature may not be used on RM and solved manually without problem. In case this is used, and sudo isn't configured accordingly, then the additional repo will NOT be added and the build will probably fail.
+
+In the default pb.conf main configuration files, parameters for osupd and osins for the various distributions call sudo to make the installation of missing packages. These calls are done as 'pb' user' by default (or the account configured as rmlogin in the configuration file). In case this is used, and sudo isn't configured accordingly, then the additional required packages will NOT be added and the build will probably fail.
+For RM, we may consider that all required packages for the build are already installed on the system, or give rpm/yum/apt/urpmi/zypper... sudo rights to the build account manually.
+Recommended for a manual setup (not using rmsetup): Add manually to your system sudo access for the pb account to the local package install and update command such as /bin/rpm e.g:
+cat >> /etc/sudoers << EOF
+pb  localhost=/bin/rpm NOPASSWD:
+EOF
+
+
+In order to handle correctly RM, we need to consider they are well managed, and already have NTP configuration correctly setup. You may also allow pb to setup date on your RM, if you consider it harmful. pb will use the configuration parameter 
+
+All: 
+sudo $vntpcmd $vntp (Commande extraite d'un fichier de conf local => Potential Security issue for RM)
+sudo /bin/date
+
+The default /etc/sudoers file created for VM/VE contains:
+Defaults:pb env_keep += "http_proxy ftp_proxy"
+Defaults:pb !requiretty
+pb ALL=(ALL) NOPASSWD:ALL
+
+For VM, we have just one sudo call that is required for pb to halt the VM. They are launched in the VM. Again, no special security feature is provided, as we consider that the pb account should do what he wants in the VM. Please report to dev team any concern you have around this.
+sudo $hpath/halt $hoption 
+
+For VE, we have this list of additional sudo calls that are required for pb to work correctly. They are launched on the main system, but target the chroot. Again, no special security feature is provided, as we consider that the pb account should do what he wants in the chroot. But some commands need to be executed from the host environement, and thus should be looked at closely anyway. Please report to dev team any concern you have around this.
+shcmd: sudo /usr/sbin/chroot $tpdir 
+shcp : sudo /bin/cp -r 
+(These 2 commands are used a lot to setup the chroot correctly)
+sudo chown -R $mac $tdir
+sudo chown $UID $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.$$"
+sudo tar cz  -C $tpdir -f $vepath->{$ENV{'PBPROJ'}}/$odir-$over-$oarch.tar.gz .
+sudo rinse|rpmbootstrap|mock|debootstrap
+sudo cp /etc/hosts $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts
+sudo chmod 755 $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}
+sudo rm -rf $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo mkdir -p $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo tar xz  -C $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz
+sudo /bin/mount -t proc /proc /proc
+sudo /bin/umount /proc
+sudo rm -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz
+
+Here is a list of commands called locally to build in some Linux distributins special cases:
+For gentoo: sudo sh -c 'echo PORTDIR_OVERLAY=\"$ENV{'HOME'}/portage\" >> /etc/make.conf'
+For Slackware (TBC): sudo /sbin/makepkg -p -l y -c y $pbpkg
Index: /0.11.2/pb-doc/AppConfig::File.patch
===================================================================
--- /0.11.2/pb-doc/AppConfig::File.patch	(revision 39)
+++ /0.11.2/pb-doc/AppConfig::File.patch	(revision 39)
@@ -0,0 +1,23 @@
+--- /usr/lib/perl5/vendor_perl/5.8.8/AppConfig/File.pm.orig	2007-08-09 17:44:26.000000000 +0200
++++ /usr/lib/perl5/vendor_perl/5.8.8/AppConfig/File.pm	2007-08-09 18:04:46.000000000 +0200
+@@ -20,7 +20,7 @@
+ 
+ require 5.005;
+ 
+-use AppConfig;
++use AppConfig qw(:argcount);
+ use AppConfig::State;
+ use File::HomeDir;
+ 
+@@ -227,6 +227,11 @@
+ 
+ 		my $nargs = $state->_argcount($variable);
+ 
++		# Fix a bug if the variable is a hash - 1 has been created as a key
++		if ($nargs eq AppConfig::ARGCOUNT_HASH) {
++			delete $state->{ VARIABLE }->{ $variable }{1};
++		}
++
+ 		# variables prefixed '-' are reset to their default values
+ 		if ($flag eq '-') {
+ 		    $state->_default($variable);
Index: /0.11.2/pb-doc/NOTES
===================================================================
--- /0.11.2/pb-doc/NOTES	(revision 981)
+++ /0.11.2/pb-doc/NOTES	(revision 981)
@@ -0,0 +1,21 @@
+gpg --armor --export bruno@mondorescue.org > RPM-GPG-KEY
+rpm --import RPM-GPG-KEY
+rpmmacros:
+%_signature gpg
+%_gpg_name FIXME@example.org
+rpm --resign pkg
+
+#!/usr/bin/expect -f
+# wrapper to make rpm --sign be non-interactive
+# passwd is 1st arg, file to sign is 2nd
+#send_user =AB$argv0 [lrange $argv 0 2]\n"=20
+#set files [lrange $argv 1 $argc ]
+
+set password [lindex $argv 0]
+set files [lrange $argv 1 1 ]
+spawn rpm --addsign $files
+expect "Enter pass phrase:"
+send -- "$password\r"
+expect eof
+
+echo "xxxxxxxx" | setsid rpm --addsign /users/bruno/mondo/svn/build/RPMS/x86_64/mindi-1.2.5-1.mdv2007.1.x86_64.rpm
Index: /0.11.2/pb-doc/README
===================================================================
--- /0.11.2/pb-doc/README	(revision 267)
+++ /0.11.2/pb-doc/README	(revision 267)
@@ -0,0 +1,20 @@
+Project Builder (aka pb) README
+
+In order to use project builder, you need a configuration file named .pbrc placed in your home directory that contains information on where to find your project CMS instance. 
+
+Example:
+
+$ cat $HOME/.pbrc
+#
+# Root of the temp file used to store info on the project
+# Is also used to determine the root directory of the project
+# No default option allowed here as they need to be all different
+# If you want to use VMs, then use $ENV{'HOME'} to make it portable
+# to your VMs
+#
+pbrc pb = $ENV{'HOME'}/pb/svn/pbrc
+$
+
+We indicate here that we use pb to build pb (heh !) and that our Subversion local instance is under $HOME/pb/svn. This is also where pb will put its temporary directory (such as build and delivery) and the important files pbrc*.
+
+When using SVN, please use version >= 1.2.1 as 1.1.4 for example doesn't know how to export files which is used by pb.
Index: /0.11.2/pb-modules/t/combined.log
===================================================================
--- /0.11.2/pb-modules/t/combined.log	(revision 1090)
+++ /0.11.2/pb-modules/t/combined.log	(revision 1090)
@@ -0,0 +1,2052 @@
+Project: meganizer
+Action: cms2vm
+Packages: meganizer
+
+Management of meganizer 0.3-0.20100901182045 (rev flat)
+Extracting /home/packager/meganizer.tar.gz in /home/packager/pb/meganizer/delivery/meganizer-0.3 ... OK
+Generating fake ChangeLog for test version
+Build files are being generated for ...
+ ... centos-5-i386,centos-5-x86_64,debian-5.0-i386,debian-5.0-x86_64,fedora-13-i386,fedora-13-x86_64,mandriva-2010.1-i386,opensuse-11.3-i386,opensuse-11.3-x86_64,ubuntu-10.04-i386,ubuntu-10.04-x86_64
+No Build files found for gentoo-nover-x86_64
+Delivering and compressing patches 
+Creating meganizer tar files compressed... OK
+Under /home/packager/pb/meganizer/delivery/meganizer-0.3.tar.gz
+Creating pbconf tar files compressed... OK
+Under /home/packager/pb/meganizer/delivery/meganizer-0.3.pbconf.tar.gz
+Packages: meganizer
+Launching the VM /mnt/chroot/ubuntu-10.04-i386.qemu... OK
+Waiting 45 s for VM ubuntu-10.04-i386 to come up... OK
+VM /mnt/chroot/ubuntu-10.04-i386.qemu launched (pid 14240)
+Packages: meganizer
+Sources handled (VMbuild): /home/packager/pb/meganizer/delivery/meganizer-0.3.tar.gz /home/packager/pb/meganizer/delivery/meganizer-0.3.pbconf.tar.gz /home/packager/pb/meganizer/pbconf/0.3.0/meganizer.pb /home/packager/pb/meganizer/delivery/0.3-0.20100901182045.pb /home/packager/.pbrc /home/packager/pb/meganizer/delivery/pbrc /home/packager/pb/meganizer/delivery/pbscript
+Preparing pb/meganizer/delivery on packager@localhost:pb/meganizer/delivery... OK
+VMbuild delivery in packager@localhost:pb/meganizer/delivery... OK
+Executing pbscript on packager@localhost:pb/meganizer/delivery if needed...
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/materialpersonsmodel.cpp:250: warning: unused parameter âobjectâ
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/materialperson.cpp.o
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editdialog.cpp.o
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/detailswidget.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/detailswidgetnamedesc.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editgenres.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmanufacturers.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmanufacturersdetailswidget.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmaterialpersons.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmaterialpersonsdetailswidget.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editroles.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/edituserdetailswidget.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/edituser.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/edituser.cpp:39: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/edituser.cpp:39: warning: unused parameter âflagsâ
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearch.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearchdialog.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearchsettings.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/addmedium.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumexport.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/selectexportformat.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchexternalapp.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/program.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/openfileexternal.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mimetype.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mimetypemodel.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/buydata.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumtitlewidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediummanufacturerwidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumgenrewidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumminwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumminwidget.cpp:68: warning: unused parameter âtypeIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumminwidget.cpp:73: warning: unused parameter ânameâ
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumwishwidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumimagewidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/scaledimage.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumpersonswidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumdescriptionwidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumliteraturewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumgiftwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp: In member function âvoid MediumGiftWidget::setMedium(Medium*)â:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:135: warning: unused variable âpersonâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:142: warning: unused variable âpersonâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp: In member function âbool MediumGiftWidget::store()â:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:171: warning: unused variable âmediumOwnerChangedâ
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumlistpricewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumboughtpricewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumevaluationwidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumloanwidget.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumloandialog.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/loanitem.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/loanmodel.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/loanmodel.cpp:176: warning: unused parameter âchildâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/loanmodel.cpp:197: warning: unused parameter âparentâ
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchdetailswidget.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/person.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/personsmodel.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/personsmodel.cpp:26: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142: warning: unused parameter âindexâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142: warning: unused parameter âvalueâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142: warning: unused parameter âroleâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/personsmodel.cpp:163: warning: unused parameter âchildâ
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumownerwidget.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumownerdialog.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqlconstraint.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/maction.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mpushbutton.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumwidget.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/shoppingcartdelegate.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/shoppingcartdelegate.cpp:64: warning: unused parameter âoptionâ
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbbackup.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/dbbackup.cpp: In member function âbool DBBackup::dumpTable(QString, QTextStream&)â:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/dbbackup.cpp:323: warning: comparison between âenum QVariant::Typeâ and âenum QMetaType::Typeâ
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbbackupdialog.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/msqldatabase.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/setupwizarddbdump.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/minvalidator.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/minvalidator.cpp:110: warning: unused parameter âposâ
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/modulelistwidgetitem.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediummin.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmintypes.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/minmodel.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/minmodel.cpp:174: warning: unused parameter âviewâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/minmodel.cpp:303: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/minmodel.cpp:338: warning: unused parameter âchildâ
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/delegatemin.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/delegatemin.cpp:48: warning: unused parameter âoptionâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/delegatemin.cpp:48: warning: unused parameter âindexâ
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/progressstatuswidget.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/querythread.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/queryworker.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmedium.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.cpp:20:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchbutton.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumeditwidget.cpp.o
+Linking CXX shared library ../../lib/libmeganizer.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 37%] Built target libmeganizer
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 37%] Generating dbtestinit.moc
+[ 38%] Generating modeltest.moc
+Scanning dependencies of target libmeganizertests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Building CXX object src/libmeganizertests/CMakeFiles/libmeganizertests.dir/modeltest.cpp.o
+[ 38%] Building CXX object src/libmeganizertests/CMakeFiles/libmeganizertests.dir/dbtestinit.cpp.o
+Linking CXX shared library ../../lib/liblibmeganizertests.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target libmeganizertests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Generating editmediumtest.moc
+Scanning dependencies of target editmediumtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Building CXX object src/libmeganizer/tests/CMakeFiles/editmediumtest.dir/editmediumtest.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/tests/editmediumtest.cpp:22:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+Linking CXX executable ../../../bin/editmediumtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target editmediumtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Generating materialpersonsmodeltest.moc
+Scanning dependencies of target materialpersonsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Building CXX object src/libmeganizer/tests/CMakeFiles/materialpersonsmodeltest.dir/materialpersonsmodeltest.cpp.o
+Linking CXX executable ../../../bin/materialpersonsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target materialpersonsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Generating mediamodeltest.moc
+Scanning dependencies of target mediamodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediamodeltest.dir/mediamodeltest.cpp.o
+Linking CXX executable ../../../bin/mediamodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Built target mediamodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Generating mediumownerwidgettest.moc
+Scanning dependencies of target mediumownerwidgettest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumownerwidgettest.dir/mediumownerwidgettest.cpp.o
+Linking CXX executable ../../../bin/mediumownerwidgettest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Built target mediumownerwidgettest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Generating qrc_images.cxx
+[ 40%] Generating mediumtest.moc
+Scanning dependencies of target mediumtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumtest.dir/mediumtest.cpp.o
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumtest.dir/qrc_images.cxx.o
+Linking CXX executable ../../../bin/mediumtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Built target mediumtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Generating mimetypemodeltest.moc
+Scanning dependencies of target mimetypemodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mimetypemodeltest.dir/mimetypemodeltest.cpp.o
+Linking CXX executable ../../../bin/mimetypemodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Built target mimetypemodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Generating minmodeltest.moc
+Scanning dependencies of target minmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/minmodeltest.dir/minmodeltest.cpp.o
+Linking CXX executable ../../../bin/minmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target minmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Generating minvalidatortests.moc
+Scanning dependencies of target minvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/minvalidatortests.dir/minvalidatortests.cpp.o
+Linking CXX executable ../../../bin/minvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target minvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Generating personsmodeltest.moc
+Scanning dependencies of target personsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/personsmodeltest.dir/personsmodeltest.cpp.o
+Linking CXX executable ../../../bin/personsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target personsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Generating qrc_iconset.cxx
+[ 41%] Generating mediendb.moc
+[ 41%] Generating setupwizard.moc
+[ 42%] Generating dbinit.moc
+[ 42%] Generating setupuserwidget.moc
+[ 42%] Generating setupuser.moc
+[ 42%] Generating modulestate.moc
+[ 42%] Generating resultsummary.moc
+[ 43%] Generating searchwidget.moc
+[ 43%] Generating settingsdialog.moc
+[ 43%] Generating settingsgeneral.moc
+[ 43%] Generating shoppingcart.moc
+[ 43%] Generating shoppingcartlistview.moc
+[ 44%] Generating insertmanualmediums.moc
+[ 44%] Generating summary.moc
+[ 44%] Generating loansummary.moc
+[ 44%] Generating statisticssummary.moc
+[ 44%] Generating projects.moc
+[ 45%] Generating project.moc
+[ 45%] Generating projectsmodel.moc
+[ 45%] Generating about.moc
+[ 45%] Generating helpcenter.moc
+[ 45%] Generating dependencies.moc
+[ 46%] Generating modulestatedialog.moc
+[ 46%] Generating updatenoticedialog.moc
+[ 46%] Generating ui_mediendb.h
+[ 46%] Generating ui_setupwizard.h
+[ 46%] Generating ui_modulestate.h
+[ 47%] Generating ui_resultsummary.h
+[ 47%] Generating ui_searchwidget.h
+[ 47%] Generating ui_settingsdialog.h
+[ 47%] Generating ui_settingsgeneral.h
+[ 47%] Generating ui_insertmanualmediums.h
+[ 48%] Generating ui_projects.h
+[ 48%] Generating ui_about.h
+[ 48%] Generating ui_dependencies.h
+[ 48%] Generating ui_updatenoticedialog.h
+[ 48%] Generating meganizer_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/meganizer_de.qm'...
+    Generated 217 translation(s) (217 finished and 0 unfinished)
+[ 49%] Generating meganizer_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/meganizer_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 217 untranslated source text(s)
+[ 49%] Generating qrc_meganizer.cxx
+Scanning dependencies of target meganizer
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/main.cpp.o
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/mediendb.cpp.o
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupwizard.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/setupwizard.cpp:101: warning: unused parameter âeventâ
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/dbinit.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/dbinit.cpp:390: warning: unused parameter âthisNameâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/dbinit.cpp:402: warning: unused parameter âthisNameâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/dbinit.cpp:437: warning: unused parameter âthisNameâ
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupuserwidget.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupuser.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/modulestate.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/resultsummary.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/resultsummary.cpp:33:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/resultsummary.cpp:357: warning: unused parameter âindexâ
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/searchwidget.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/settingsdialog.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/settingsgeneral.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/settingsgeneral.cpp:48: warning: unused parameter âshowButtonsâ
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/shoppingcart.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/shoppingcartlistview.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/insertmanualmediums.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/summary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/loansummary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/statisticssummary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/projects.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/project.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/projectsmodel.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/projectsmodel.cpp:181: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/projectsmodel.cpp:194: warning: unused parameter âchildâ
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/about.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/helpcenter.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/dependencies.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/modulestatedialog.cpp.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/updatenoticedialog.cpp.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/qrc_meganizer.cxx.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/qrc_iconset.cxx.o
+Linking CXX executable ../../bin/meganizer
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 54%] Built target meganizer
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 54%] Generating eanvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 54%] Generating eanvalidator.moc
+[ 54%] Generating eanvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidatorplugin_de.qm'...
+    Generated 1 translation(s) (1 finished and 0 unfinished)
+Scanning dependencies of target eanvalidator
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 55%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidator.dir/eanvalidator.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:42: warning: unused parameter âtoTypeâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47: warning: unused parameter âminâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47: warning: unused parameter âtoTypeâ
+Linking CXX shared library ../../../lib/libeanvalidator.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 55%] Built target eanvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 55%] Generating eanvalidatortests.moc
+Scanning dependencies of target eanvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 55%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidatortests.dir/eanvalidatortests.cpp.o
+[ 56%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidatortests.dir/eanvalidator.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:42: warning: unused parameter âtoTypeâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47: warning: unused parameter âminâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47: warning: unused parameter âtoTypeâ
+Linking CXX executable ../../../bin/eanvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 56%] Built target eanvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 57%] Generating project.moc
+[ 57%] Generating projectsmodeltest.moc
+[ 57%] Generating projectsmodel.moc
+Scanning dependencies of target projectsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/projectsmodeltest.cpp.o
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/__/projectsmodel.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/projectsmodel.cpp:181: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/meganizer/projectsmodel.cpp:194: warning: unused parameter âchildâ
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/__/project.cpp.o
+Linking CXX executable ../../../bin/projectsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 58%] Built target projectsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 58%] Generating books_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 40 untranslated source text(s)
+[ 58%] Generating books.moc
+[ 58%] Generating booksdb.moc
+[ 59%] Generating book.moc
+[ 59%] Generating booksearchwidget.moc
+[ 59%] Generating booksmodel.moc
+[ 59%] Generating bookedit.moc
+[ 59%] Generating ui_booksearchwidget.h
+[ 60%] Generating books_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books_de.qm'...
+    Generated 40 translation(s) (40 finished and 0 unfinished)
+Scanning dependencies of target books
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/books.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books.cpp:35: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books.cpp:100: warning: unused parameter âmaterialTypeâ
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksdb.cpp.o
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/book.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:120: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:340: warning: unused parameter âformatâ
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/booksearchwidget.cpp:38: warning: unused parameter âsupportPersonsâ
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksmodel.cpp.o
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/bookedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+Linking CXX shared library ../../../lib/libbooks.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 61%] Built target books
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 61%] Generating isbnvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/isbnvalidatorplugin/isbnvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 61%] Generating isbnvalidator.moc
+[ 61%] Generating isbnvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/isbnvalidatorplugin/isbnvalidatorplugin_de.qm'...
+    Generated 1 translation(s) (1 finished and 0 unfinished)
+Scanning dependencies of target isbnvalidator
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 62%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidator.dir/isbnvalidator.cpp.o
+Linking CXX shared library ../../../../lib/libisbnvalidator.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 62%] Built target isbnvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 63%] Generating isbnvalidatortests.moc
+Scanning dependencies of target isbnvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 63%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidatortests.dir/isbnvalidatortests.cpp.o
+[ 63%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidatortests.dir/isbnvalidator.cpp.o
+Linking CXX executable ../../../../bin/isbnvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 63%] Built target isbnvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 64%] Generating booksearchwidget.moc
+[ 64%] Generating booksmodeltest.moc
+[ 65%] Generating booksmodel.moc
+[ 65%] Generating book.moc
+[ 65%] Generating books.moc
+[ 65%] Generating bookedit.moc
+[ 65%] Generating booksdb.moc
+Scanning dependencies of target booksmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/booksmodeltest.cpp.o
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksmodel.cpp.o
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/book.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:120: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/book.cpp:340: warning: unused parameter âformatâ
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/books.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books.cpp:35: warning: unused parameter âparentâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/books.cpp:100: warning: unused parameter âmaterialTypeâ
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/bookedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/bookedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksdb.cpp.o
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/books/booksearchwidget.cpp:38: warning: unused parameter âsupportPersonsâ
+Linking CXX executable ../../../../bin/booksmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 66%] Built target booksmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 66%] Generating music_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/music_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 86 untranslated source text(s)
+[ 66%] Generating cds.moc
+[ 66%] Generating cdsdb.moc
+[ 67%] Generating cd.moc
+[ 67%] Generating cdsearchwidget.moc
+[ 67%] Generating cdsmodel.moc
+[ 67%] Generating cdedit.moc
+[ 67%] Generating track.moc
+[ 68%] Generating tracksmodel.moc
+[ 68%] Generating trackedit.moc
+[ 68%] Generating editdevices.moc
+[ 68%] Generating tracksview.moc
+[ 68%] Generating parentview.moc
+[ 68%] Generating ui_cdsearchwidget.h
+[ 69%] Generating ui_parentview.h
+[ 69%] Generating music_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/music_de.qm'...
+    Generated 86 translation(s) (81 finished and 5 unfinished)
+Scanning dependencies of target cds
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cds.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cds.cpp:36: warning: unused parameter âparentâ
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsdb.cpp.o
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:145: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:487: warning: unused parameter âformatâ
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58: warning: unused parameter âsupportPersonsâ
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsmodel.cpp.o
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123: warning: unused parameter âmediumâ
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:132: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:349: warning: unused parameter âformatâ
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/tracksmodel.cpp.o
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/editdevices.cpp.o
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/tracksview.cpp.o
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/parentview.cpp.o
+Linking CXX shared library ../../../lib/libcds.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 71%] Built target cds
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 71%] Generating upcvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/upcvalidatorplugin/upcvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 71%] Generating upcvalidator.moc
+[ 72%] Generating upcvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/upcvalidatorplugin/upcvalidatorplugin_de.qm'...
+    Generated 1 translation(s) (1 finished and 0 unfinished)
+Scanning dependencies of target upcvalidator
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidator.dir/upcvalidator.cpp.o
+Linking CXX shared library ../../../../lib/libupcvalidator.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 72%] Built target upcvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 72%] Generating upcvalidatortests.moc
+Scanning dependencies of target upcvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidatortests.dir/upcvalidatortests.cpp.o
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidatortests.dir/upcvalidator.cpp.o
+Linking CXX executable ../../../../bin/upcvalidatortests
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 73%] Built target upcvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 73%] Generating parentview.moc
+[ 73%] Generating cdsmodeltest.moc
+[ 73%] Generating cdsmodel.moc
+[ 73%] Generating cd.moc
+[ 73%] Generating tracksmodel.moc
+[ 74%] Generating track.moc
+[ 74%] Generating trackedit.moc
+[ 74%] Generating cds.moc
+[ 74%] Generating cdedit.moc
+[ 74%] Generating editdevices.moc
+[ 75%] Generating cdsdb.moc
+[ 75%] Generating cdsearchwidget.moc
+[ 75%] Generating tracksview.moc
+Scanning dependencies of target cdsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 75%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/cdsmodeltest.cpp.o
+[ 75%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsmodel.cpp.o
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:145: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:487: warning: unused parameter âformatâ
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/tracksmodel.cpp.o
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:132: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:349: warning: unused parameter âformatâ
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cds.cpp:36: warning: unused parameter âparentâ
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123: warning: unused parameter âmediumâ
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/editdevices.cpp.o
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsdb.cpp.o
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58: warning: unused parameter âsupportPersonsâ
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/tracksview.cpp.o
+[ 78%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/cdsmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 78%] Built target cdsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 78%] Generating cdtest.moc
+Scanning dependencies of target cdtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 78%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/cdtest.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:145: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:487: warning: unused parameter âformatâ
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123: warning: unused parameter âmediumâ
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/editdevices.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsmodel.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cds.cpp:36: warning: unused parameter âparentâ
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsdb.cpp.o
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58: warning: unused parameter âsupportPersonsâ
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/tracksmodel.cpp.o
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:132: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:349: warning: unused parameter âformatâ
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 81%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/tracksview.cpp.o
+[ 81%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/cdtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 83%] Built target cdtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 83%] Generating tracksmodeltest.moc
+Scanning dependencies of target tracksmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/tracksmodeltest.cpp.o
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/tracksmodel.cpp.o
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:132: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:349: warning: unused parameter âformatâ
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cds.cpp:36: warning: unused parameter âparentâ
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsdb.cpp.o
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:145: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:487: warning: unused parameter âformatâ
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58: warning: unused parameter âsupportPersonsâ
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsmodel.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123: warning: unused parameter âmediumâ
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/editdevices.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/tracksview.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/tracksmodeltest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 88%] Built target tracksmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 89%] Generating tracktest.moc
+Scanning dependencies of target tracktest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/tracktest.cpp.o
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:132: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/track.cpp:349: warning: unused parameter âformatâ
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/tracksmodel.cpp.o
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cds.cpp:36: warning: unused parameter âparentâ
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsdb.cpp.o
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58: warning: unused parameter âsupportPersonsâ
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:145: warning: unused parameter âuserIdâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cd.cpp:487: warning: unused parameter âformatâ
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsmodel.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.h:24,
+                 from /home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:60: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/libmeganizer/editmedium.h:66: warning: unused parameter âmediumâ
+/home/packager/pb/meganizer/build/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123: warning: unused parameter âmediumâ
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/editdevices.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/tracksview.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/tracktest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 93%] Built target tracktest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 93%] Generating qrc_amazon.cxx
+[ 93%] Generating amazonsettings.moc
+[ 94%] Generating amazonconntypesettings.moc
+[ 94%] Generating amazongeneralsettings.moc
+[ 94%] Generating amazon.moc
+[ 94%] Generating connectmaterialtype.moc
+[ 94%] Generating connectmaterialtypedialog.moc
+[ 95%] Generating purchase.moc
+[ 95%] Generating ui_connectmaterialtype.h
+[ 95%] Generating ui_amazonconntypesettings.h
+[ 95%] Generating ui_purchase.h
+[ 95%] Generating amazon_de.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/searchplugins/amazon/amazon_de.qm'...
+    Generated 110 translation(s) (110 finished and 0 unfinished)
+[ 96%] Generating amazon_en.qm
+Updating '/home/packager/pb/meganizer/build/meganizer-0.3/src/searchplugins/amazon/amazon_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 110 untranslated source text(s)
+Scanning dependencies of target amazon
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazonsettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazonconntypesettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazongeneralsettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/itemsearch.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazon.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/searchplugins/amazon/amazon.cpp:46: warning: unused parameter âparentâ
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/connectmaterialtype.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/connectmaterialtypedialog.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/purchase.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/qrc_amazon.cxx.o
+Linking CXX shared library ../../../lib/libamazon.so
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 97%] Built target amazon
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 97%] Generating amazonconntypesettings.moc
+[ 97%] Generating itemsearchtests.moc
+[ 97%] Generating amazon.moc
+[ 97%] Generating connectmaterialtypedialog.moc
+[ 97%] Generating connectmaterialtype.moc
+[ 98%] Generating purchase.moc
+[ 98%] Generating amazonsettings.moc
+[ 98%] Generating amazongeneralsettings.moc
+Scanning dependencies of target itemsearchtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/itemsearchtests.cpp.o
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/itemsearch.cpp.o
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazon.cpp.o
+/home/packager/pb/meganizer/build/meganizer-0.3/src/searchplugins/amazon/amazon.cpp:46: warning: unused parameter âparentâ
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/connectmaterialtypedialog.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/connectmaterialtype.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/purchase.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazonsettings.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazongeneralsettings.cpp.o
+[100%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazonconntypesettings.cpp.o
+Linking CXX executable ../../../../bin/itemsearchtest
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[100%] Built target itemsearchtest
+make[2]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[1]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+# to run on fake x server
+dh build --after dh_auto_test
+ fakeroot debian/rules binary
+dh binary
+   dh_testroot
+   dh_prep
+   dh_installdirs
+   dh_auto_install
+make[1]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[2]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 37%] Built target libmeganizer
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target libmeganizertests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target editmediumtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 38%] Built target materialpersonsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Built target mediamodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 39%] Built target mediumownerwidgettest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Built target mediumtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 40%] Built target mimetypemodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target minmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target minvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 41%] Built target personsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 54%] Built target meganizer
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 55%] Built target eanvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 56%] Built target eanvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 58%] Built target projectsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 61%] Built target books
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 62%] Built target isbnvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 63%] Built target isbnvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 66%] Built target booksmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 71%] Built target cds
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 72%] Built target upcvalidator
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 73%] Built target upcvalidatortests
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 78%] Built target cdsmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 83%] Built target cdtest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 88%] Built target tracksmodeltest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 93%] Built target tracktest
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[ 97%] Built target amazon
+make[3]: Betrete Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+make[3]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+[100%] Built target itemsearchtest
+make[2]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+Install the project...
+-- Install configuration: "Release"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/libmeganizer.so
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/libmeganizer_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/libmeganizer_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/depends/libmeganizer.xml
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/bin/meganizer
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/bin/meganizer"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/meganizer_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/meganizer_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/depends/meganizer.xml
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/pixmaps/meganizer.png
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/applications/Meganizer.desktop
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/eanvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/eanvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libbooks.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libbooks.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/books_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/books_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/depends/books.xml
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/isbnvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/isbnvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libcds.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libcds.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/music_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/music_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/depends/cds.xml
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/upcvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/upcvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libamazon.so
+-- Removed runtime path from "/home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/lib/meganizer/libamazon.so"
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/amazon_de.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/lang/amazon_en.qm
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/meganizer/depends/amazon.xml
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/man/man1/meganizer.1
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/man/man5/meganizer.5
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/man/de/man1/meganizer.de.1
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/man/de/man5/meganizer.de.5
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/doc/meganizer/meganizer.qhc
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/doc/meganizer/meganizer.qch
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/doc/meganizer/meganizer_de.qhc
+-- Installing: /home/packager/pb/meganizer/build/meganizer-0.3/debian/meganizer/usr/share/doc/meganizer/meganizer_de.qch
+make[1]: Verlasse Verzeichnis '/home/packager/pb/meganizer/build/meganizer-0.3'
+   dh_install
+   dh_installdocs
+   dh_installchangelogs
+   dh_installexamples
+   dh_installman
+   dh_installcatalogs
+   dh_installcron
+   dh_installdebconf
+   dh_installemacsen
+   dh_installifupdown
+   dh_installinfo
+   dh_pysupport
+   dh_installinit
+   dh_installmenu
+   dh_installmime
+   dh_installmodules
+   dh_installlogcheck
+   dh_installlogrotate
+   dh_installpam
+   dh_installppp
+   dh_installudev
+   dh_installwm
+   dh_installxfonts
+   dh_bugfiles
+   dh_lintian
+   dh_gconf
+   dh_icons
+   dh_perl
+   dh_usrlocal
+   dh_link
+   dh_compress
+   dh_fixperms
+   dh_strip
+   dh_makeshlibs
+   dh_shlibdeps
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: Kann Name und Version aus Bibliotheksnamen Â»libmeganizer.soÂ« nicht entnehmen
+dpkg-shlibdeps: Warnung: AbhÃ€ngigkeit von libdl.so.2 kÃ¶nnte vermieden werden, falls Â»debian/meganizer/usr/lib/meganizer/libcds.so debian/meganizer/usr/bin/meganizer debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so debian/meganizer/usr/lib/libmeganizer.so debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so debian/meganizer/usr/lib/meganizer/libbooks.so debian/meganizer/usr/lib/meganizer/libamazon.soÂ« nicht unnÃ¶tigerweise dagegen gelinkt wÃ€re (es verwendet keines seiner Symbole).
+dpkg-shlibdeps: Warnung: AbhÃ€ngigkeit von libgcc_s.so.1 kÃ¶nnte vermieden werden, falls Â»debian/meganizer/usr/lib/meganizer/libcds.so debian/meganizer/usr/bin/meganizer debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so debian/meganizer/usr/lib/libmeganizer.so debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so debian/meganizer/usr/lib/meganizer/libbooks.so debian/meganizer/usr/lib/meganizer/libamazon.soÂ« nicht unnÃ¶tigerweise dagegen gelinkt wÃ€re (es verwendet keines seiner Symbole).
+dpkg-shlibdeps: Warnung: AbhÃ€ngigkeit von libX11.so.6 kÃ¶nnte vermieden werden, falls Â»debian/meganizer/usr/lib/meganizer/libcds.so debian/meganizer/usr/bin/meganizer debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so debian/meganizer/usr/lib/libmeganizer.so debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so debian/meganizer/usr/lib/meganizer/libbooks.so debian/meganizer/usr/lib/meganizer/libamazon.soÂ« nicht unnÃ¶tigerweise dagegen gelinkt wÃ€re (es verwendet keines seiner Symbole).
+dpkg-shlibdeps: Warnung: AbhÃ€ngigkeit von librt.so.1 kÃ¶nnte vermieden werden, falls Â»debian/meganizer/usr/lib/meganizer/libcds.so debian/meganizer/usr/bin/meganizer debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so debian/meganizer/usr/lib/libmeganizer.so debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so debian/meganizer/usr/lib/meganizer/libbooks.so debian/meganizer/usr/lib/meganizer/libamazon.soÂ« nicht unnÃ¶tigerweise dagegen gelinkt wÃ€re (es verwendet keines seiner Symbole).
+dpkg-shlibdeps: Warnung: AbhÃ€ngigkeit von libpthread.so.0 kÃ¶nnte vermieden werden, falls Â»debian/meganizer/usr/lib/meganizer/libcds.so debian/meganizer/usr/bin/meganizer debian/meganizer/usr/lib/meganizer/minvalidator/libeanvalidator.so debian/meganizer/usr/lib/libmeganizer.so debian/meganizer/usr/lib/meganizer/minvalidator/libupcvalidator.so debian/meganizer/usr/lib/meganizer/minvalidator/libisbnvalidator.so debian/meganizer/usr/lib/meganizer/libbooks.so debian/meganizer/usr/lib/meganizer/libamazon.soÂ« nicht unnÃ¶tigerweise dagegen gelinkt wÃ€re (es verwendet keines seiner Symbole).
+   dh_installdeb
+   dh_gencontrol
+   dh_md5sums
+   dh_builddeb
+dpkg-deb: Baue Paket Â»meganizerÂ« in Â»../meganizer_0.3-0.20100901170754_amd64.debÂ«.
+ dpkg-genchanges  >../meganizer_0.3-0.20100901170754_amd64.changes
+dpkg-genchanges: Warnung: die aktuelle Version (0.3-0.20100901170754) ist kleiner als die vorhergehende (0.3-1)
+dpkg-genchanges: fÃŒge kompletten Quellcode beim Hochladen hinzu
+dpkg-buildpackage: Alles hochzuladen; Debian-native-Paket (komplette Quellen enthalten)
+
+Checking validity of debs with lintian... child (lintian ../meganizer_0.3-0.20100901170754_*.changes ) exited with value 2
+internal error: control invoked in wrong directory
+warning: collect info source-control-file about package meganizer failed
+warning: skipping check of source package meganizer
+W: meganizer: package-name-doesnt-match-sonames libmeganizer
+W: meganizer: latest-debian-changelog-entry-without-new-version
+W: meganizer: extended-description-line-too-long
+W: meganizer: manpage-has-errors-from-man usr/share/man/de/man5/meganizer.de.5.gz 20: warning: macro `It' not defined
+W: meganizer: manpage-has-errors-from-man usr/share/man/man5/meganizer.5.gz 19: warning: macro `It' not defined
+W: meganizer: shlib-without-versioned-soname usr/lib/libmeganizer.so libmeganizer.so
+
+
+Get package names in packager@localhost:pb/meganizer/build... OK
+Recovery of package meganizer_0.3-0.20100901170754.dsc in /home/packager/pb/meganizer/build/ubuntu/10.04... OK
+Recovery of package meganizer_0.3-0.20100901170754.tar.gz in /home/packager/pb/meganizer/build/ubuntu/10.04... OK
+Recovery of package meganizer_0.3-0.20100901170754_*.deb in /home/packager/pb/meganizer/build/ubuntu/10.04... OK
+Recovery of package meganizer_0.3-0.20100901170754_*.changes in /home/packager/pb/meganizer/build/ubuntu/10.04... OK
+VMbuild cleanup... OK
+Packages: meganizer
+Sources handled (Packages): ubuntu/10.04/meganizer_0.3-0.20100901170754.dsc ubuntu/10.04/meganizer_0.3-0.20100901170754.tar.gz ubuntu/10.04/meganizer_0.3-0.20100901170754_*.deb ubuntu/10.04/meganizer_0.3-0.20100901170754_*.changes /home/packager/pb/meganizer/build/pbscript
+Use of uninitialized value in concatenation (.) or string at /usr/bin/pb line 1296.
+Preparing /var/www/de.engsas.ftp/unstable//ubuntu/10.04 on packager@admin.falaba.de:/var/www/de.engsas.ftp/unstable//ubuntu/10.04... OK
+Packages delivery in packager@admin.falaba.de:/var/www/de.engsas.ftp/unstable//ubuntu/10.04... OK
+Executing pbscript on packager@admin.falaba.de:/var/www/de.engsas.ftp/unstable//ubuntu/10.04 if needed... OK
+
+This account is restricted by rssh.
+Allowed commands: scp 
+
+If you believe this is in error, please contact your system administrator.
+
+
+VM ubuntu-10.04-x86_64 halt (pid 3398)... sudo: unable to resolve host ubuntu-10.04-x86-64
+OK
+
+Waiting 45 s for VM opensuse-11.3-i386 ... OK
+Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.fFMc2e
++ umask 022
++ cd /home/packager/pb/meganizer/build/BUILD
++ cd /home/packager/pb/meganizer/build/BUILD
++ rm -rf meganizer-0.3
++ /bin/tar -xf -
++ /usr/bin/gzip -dc /home/packager/pb/meganizer/build/SOURCES/meganizer-0.3.tar.gz
++ STATUS=0
++ '[' 0 -ne 0 ']'
++ cd meganizer-0.3
++ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
++ exit 0
+Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.qdK5CG
++ umask 022
++ cd /home/packager/pb/meganizer/build/BUILD
++ /bin/rm -rf /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64
+++ dirname /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64
++ /bin/mkdir -p /home/packager/pb/meganizer/build/BUILDROOT
++ /bin/mkdir /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64
++ cd meganizer-0.3
++ cmake -DBUILD_PACKAGE=ON -DL10N_ALL=1 -DWITH_ALL=1 -DBINDINGS_KDE=0 -DCMAKE_INSTALL_PREFIX=/usr
+-- The C compiler identification is GNU
+-- The CXX compiler identification is GNU
+-- Check for working C compiler: /usr/bin/gcc
+-- Check for working C compiler: /usr/bin/gcc -- works
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Check for working CXX compiler: /usr/bin/c++
+-- Check for working CXX compiler: /usr/bin/c++ -- works
+-- Detecting CXX compiler ABI info
+-- Detecting CXX compiler ABI info - done
+Disabling Debug mode, because Packagemode succeed over BUILD_DEBUG
+-- checking for module 'qca2'
+--   found qca2, version 2.0.2
+-- Found QCA2: /usr/lib64/libqca.so
+-- Looking for Q_WS_X11
+-- Looking for Q_WS_X11 - found
+-- Looking for Q_WS_WIN
+-- Looking for Q_WS_WIN - not found.
+-- Looking for Q_WS_QWS
+-- Looking for Q_WS_QWS - not found.
+-- Looking for Q_WS_MAC
+-- Looking for Q_WS_MAC - not found.
+-- Found Qt-Version 4.6.3 (using /usr/bin/qmake)
+-- Looking for _POSIX_TIMERS
+-- Looking for _POSIX_TIMERS - found
+Cleanup *.gcda
+Found AWS AccessKey and AWS Secret
+Reading collection config file...
+Generating help for ../html/meganizer/meganizer.qhp...
+Building up file structure...
+Insert custom filters...
+Insert help data for filter section (1 of 1)...
+Insert files...
+Insert contents...
+Insert indices...
+Documentation successfully generated.
+Creating collection file...
+Reading collection config file...
+Generating help for ../html/meganizer_de/meganizer_de.qhp...
+Building up file structure...
+Insert custom filters...
+Insert help data for filter section (1 of 1)...
+Insert files...
+Insert contents...
+Insert indices...
+Documentation successfully generated.
+Creating collection file...
+######################################################
+
+CONFIGURATION
+
+CMAKE_SHARED_LINKER_FLAGS:  -Wl,--no-undefined -Wl,--fatal-warnings -lc
+CMAKE_CXX_FLAGS:            -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS -fno-check-new -fno-common -ansi
+
+OPTIONS:
+  Name                     Wanted       Used
+  BUILD_DEBUG:                          OFF
+  BUILD_PACKAGE:           ON           ON
+  BUILD_DEV:                            OFF
+  BINDINGS_KDE:                         0
+  WITH_HANDBOOK:                        ON
+  WITH_ALL_PLUGINS:                     ON
+    WITH_BOOKS:                         ON
+    WITH_MUSIC:                         ON
+    WITH_AMAZON:                        ON
+  L10N_ALL:                1            1
+    L10N_DE:                            ON
+    L10N_EN:                            ON
+
+######################################################
+-- Configuring done
+-- Generating done
+-- Build files have been written to: /home/packager/pb/meganizer/build/BUILD/meganizer-0.3
++ make
+[  0%] Generating libmeganizer_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/libmeganizer_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 309 untranslated source text(s)
+[  0%] Generating mdialog.moc
+[  1%] Generating mobject.moc
+[  1%] Generating mwidget.moc
+[  1%] Generating delegateforeignkey.moc
+[  1%] Generating delegateuser.moc
+[  1%] Generating settingswidget.moc
+[  2%] Generating sqlinit.moc
+[  2%] Generating sqllogin.moc
+[  2%] Generating setupwizardobject.moc
+[  2%] Generating setupwizardwidget.moc
+[  2%] Generating setupwizarddb.moc
+[  3%] Generating dbsettings.moc
+[  3%] Generating dbupdatewidget.moc
+[  3%] Generating medium.moc
+[  3%] Generating mediamodel.moc
+[  3%] Generating materialpersonsmodel.moc
+[  4%] Generating materialperson.moc
+[  4%] Generating editdialog.moc
+[  4%] Generating detailswidget.moc
+[  4%] Generating detailswidgetnamedesc.moc
+[  4%] Generating editgenres.moc
+[  5%] Generating editmanufacturers.moc
+[  5%] Generating editmanufacturersdetailswidget.moc
+[  5%] Generating editmaterialpersons.moc
+[  5%] Generating editmaterialpersonsdetailswidget.moc
+[  5%] Generating editroles.moc
+[  6%] Generating edituserdetailswidget.moc
+[  6%] Generating edituser.moc
+[  6%] Generating connectmediasearch.moc
+[  6%] Generating connectmediasearchdialog.moc
+[  6%] Generating connectmediasearchsettings.moc
+[  7%] Generating addmedium.moc
+[  7%] Generating mediumexport.moc
+[  7%] Generating selectexportformat.moc
+[  7%] Generating searchexternalapp.moc
+[  7%] Generating openfileexternal.moc
+[  8%] Generating mimetypemodel.moc
+[  8%] Generating mediumtitlewidget.moc
+[  8%] Generating mediummanufacturerwidget.moc
+[  8%] Generating mediumgenrewidget.moc
+[  8%] Generating mediumminwidget.moc
+[  8%] Generating mediumwishwidget.moc
+[  9%] Generating mediumimagewidget.moc
+[  9%] Generating scaledimage.moc
+[  9%] Generating mediumpersonswidget.moc
+[  9%] Generating mediumdescriptionwidget.moc
+[  9%] Generating mediumliteraturewidget.moc
+[ 10%] Generating mediumgiftwidget.moc
+[ 10%] Generating mediumlistpricewidget.moc
+[ 10%] Generating mediumboughtpricewidget.moc
+[ 10%] Generating mediumevaluationwidget.moc
+[ 10%] Generating mediumloanwidget.moc
+[ 11%] Generating mediumloandialog.moc
+[ 11%] Generating loanitem.moc
+[ 11%] Generating loanmodel.moc
+[ 11%] Generating searchdetailswidget.moc
+[ 11%] Generating person.moc
+[ 12%] Generating personsmodel.moc
+[ 12%] Generating mediumownerwidget.moc
+[ 12%] Generating mediumownerdialog.moc
+[ 12%] Generating maction.moc
+[ 12%] Generating mpushbutton.moc
+[ 13%] Generating mediumwidget.moc
+[ 13%] Generating shoppingcartdelegate.moc
+[ 13%] Generating dbbackup.moc
+[ 13%] Generating dbbackupdialog.moc
+[ 13%] Generating setupwizarddbdump.moc
+[ 14%] Generating minvalidator.moc
+[ 14%] Generating mediummin.moc
+[ 14%] Generating editmintypes.moc
+[ 14%] Generating minmodel.moc
+[ 14%] Generating delegatemin.moc
+[ 15%] Generating progressstatuswidget.moc
+[ 15%] Generating querythread.moc
+[ 15%] Generating queryworker.moc
+[ 15%] Generating editmedium.moc
+[ 15%] Generating searchbutton.moc
+[ 16%] Generating mediumeditwidget.moc
+[ 16%] Generating ui_sqllogin.h
+[ 16%] Generating ui_dbsettings.h
+[ 16%] Generating ui_dbupdatewidget.h
+[ 16%] Generating ui_detailswidgetnamedesc.h
+[ 17%] Generating ui_editmanufacturersdetailswidget.h
+[ 17%] Generating ui_editmaterialpersonsdetailswidget.h
+[ 17%] Generating ui_edituserdetailswidget.h
+[ 17%] Generating ui_connectmediasearch.h
+[ 17%] Generating ui_connectmediasearchsettings.h
+[ 18%] Generating ui_addmedium.h
+[ 18%] Generating ui_selectexportformat.h
+[ 18%] Generating ui_searchexternalapp.h
+[ 18%] Generating ui_mediumcheckwidget.h
+[ 18%] Generating ui_mediumpricewidget.h
+[ 19%] Generating ui_mediumownerwidget.h
+[ 19%] Generating ui_mediumgiftwidget.h
+[ 19%] Generating ui_dbbackup.h
+[ 19%] Generating ui_mediumminwidget.h
+[ 19%] Generating ui_progressstatuswidget.h
+[ 20%] Generating ui_editmedium.h
+[ 20%] Generating libmeganizer_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/libmeganizer_de.qm'...
+    Generated 301 translation(s) (300 finished and 1 unfinished)
+
+    Ignored 8 untranslated source text(s)
+Scanning dependencies of target libmeganizer
+[ 20%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mdialog.cpp.o
+[ 21%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mobject.cpp.o
+[ 21%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mwidget.cpp.o
+[ 21%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/delegateforeignkey.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/delegateforeignkey.cpp:139:10: warning: unused parameter 'option'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/delegateforeignkey.cpp:139:10: warning: unused parameter 'index'
+[ 21%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/delegateuser.cpp.o
+[ 21%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/settingswidget.cpp.o
+[ 22%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqlfield.cpp.o
+[ 22%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqlinit.cpp.o
+[ 22%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqllogin.cpp.o
+[ 22%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqltable.cpp.o
+[ 22%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/setupwizardobject.cpp.o
+[ 23%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/setupwizardwidget.cpp.o
+[ 23%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/setupwizarddb.cpp.o
+[ 23%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbsettings.cpp.o
+[ 23%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbupdatewidget.cpp.o
+[ 23%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/medium.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/medium.cpp:34:0:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/medium.cpp:622:10: warning: unused parameter 'role'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/medium.cpp:828:6: warning: unused parameter 'format'
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediamodel.cpp.o
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/materialpersonsmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/materialpersonsmodel.cpp:205:6: warning: unused parameter 'role'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/materialpersonsmodel.cpp:218:5: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/materialpersonsmodel.cpp:250:6: warning: unused parameter 'object'
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/materialperson.cpp.o
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editdialog.cpp.o
+[ 24%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/detailswidget.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/detailswidgetnamedesc.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editgenres.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmanufacturers.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmanufacturersdetailswidget.cpp.o
+[ 25%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmaterialpersons.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmaterialpersonsdetailswidget.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editroles.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/edituserdetailswidget.cpp.o
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/edituser.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/edituser.cpp:39:1: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/edituser.cpp:39:1: warning: unused parameter 'flags'
+[ 26%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearch.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearchdialog.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/connectmediasearchsettings.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/addmedium.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumexport.cpp.o
+[ 27%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/selectexportformat.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchexternalapp.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/program.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/openfileexternal.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/openfileexternal.cpp: In member function 'QString OpenFileExternal::searchApp(MimeType*)':
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/openfileexternal.cpp:147:12: warning: converting 'false' to pointer type for argument 1 of 'QString::QString(const char*)'
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mimetype.cpp.o
+[ 28%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mimetypemodel.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/buydata.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumtitlewidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediummanufacturerwidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumgenrewidget.cpp.o
+[ 29%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumminwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumminwidget.cpp:68:6: warning: unused parameter 'typeId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumminwidget.cpp:73:6: warning: unused parameter 'name'
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumwishwidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumimagewidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/scaledimage.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumpersonswidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumdescriptionwidget.cpp.o
+[ 30%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumliteraturewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumgiftwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp: In member function 'void MediumGiftWidget::setMedium(Medium*)':
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:135:12: warning: unused variable 'person'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:142:12: warning: unused variable 'person'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp: In member function 'bool MediumGiftWidget::store()':
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/mediumgiftwidget.cpp:171:7: warning: unused variable 'mediumOwnerChanged'
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumlistpricewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumboughtpricewidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumevaluationwidget.cpp.o
+[ 31%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumloanwidget.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumloandialog.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/loanitem.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/loanmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/loanmodel.cpp:176:13: warning: unused parameter 'child'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/loanmodel.cpp:197:6: warning: unused parameter 'parent'
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchdetailswidget.cpp.o
+[ 32%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/person.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/personsmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/personsmodel.cpp:26:1: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142:6: warning: unused parameter 'index'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142:6: warning: unused parameter 'value'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/personsmodel.cpp:142:6: warning: unused parameter 'role'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/personsmodel.cpp:163:13: warning: unused parameter 'child'
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumownerwidget.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumownerdialog.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/sqlconstraint.cpp.o
+[ 33%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/maction.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mpushbutton.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumwidget.cpp.o
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/shoppingcartdelegate.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/shoppingcartdelegate.cpp:64:7: warning: unused parameter 'option'
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbbackup.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/dbbackup.cpp: In member function 'bool DBBackup::dumpTable(QString, QTextStream&)':
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/dbbackup.cpp:323:40: warning: comparison between 'enum QVariant::Type' and 'enum QMetaType::Type'
+[ 34%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/dbbackupdialog.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/msqldatabase.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/setupwizarddbdump.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/minvalidator.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/minvalidator.cpp:110:19: warning: unused parameter 'pos'
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/modulelistwidgetitem.cpp.o
+[ 35%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediummin.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmintypes.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/minmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/minmodel.cpp:174:6: warning: unused parameter 'view'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/minmodel.cpp:303:5: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/minmodel.cpp:338:13: warning: unused parameter 'child'
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/delegatemin.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/delegatemin.cpp:48:10: warning: unused parameter 'option'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/delegatemin.cpp:48:10: warning: unused parameter 'index'
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/progressstatuswidget.cpp.o
+[ 36%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/querythread.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/queryworker.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/editmedium.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.cpp:20:0:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/searchbutton.cpp.o
+[ 37%] Building CXX object src/libmeganizer/CMakeFiles/libmeganizer.dir/mediumeditwidget.cpp.o
+Linking CXX shared library ../../lib/libmeganizer.so
+[ 37%] Built target libmeganizer
+[ 37%] Generating dbtestinit.moc
+[ 38%] Generating modeltest.moc
+Scanning dependencies of target libmeganizertests
+[ 38%] Building CXX object src/libmeganizertests/CMakeFiles/libmeganizertests.dir/modeltest.cpp.o
+[ 38%] Building CXX object src/libmeganizertests/CMakeFiles/libmeganizertests.dir/dbtestinit.cpp.o
+Linking CXX shared library ../../lib/libmeganizertests.so
+[ 38%] Built target libmeganizertests
+[ 38%] Generating editmediumtest.moc
+Scanning dependencies of target editmediumtest
+[ 38%] Building CXX object src/libmeganizer/tests/CMakeFiles/editmediumtest.dir/editmediumtest.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/tests/editmediumtest.cpp:22:0:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+Linking CXX executable ../../../bin/editmediumtest
+[ 38%] Built target editmediumtest
+[ 38%] Generating materialpersonsmodeltest.moc
+Scanning dependencies of target materialpersonsmodeltest
+[ 38%] Building CXX object src/libmeganizer/tests/CMakeFiles/materialpersonsmodeltest.dir/materialpersonsmodeltest.cpp.o
+Linking CXX executable ../../../bin/materialpersonsmodeltest
+[ 38%] Built target materialpersonsmodeltest
+[ 39%] Generating mediamodeltest.moc
+Scanning dependencies of target mediamodeltest
+[ 39%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediamodeltest.dir/mediamodeltest.cpp.o
+Linking CXX executable ../../../bin/mediamodeltest
+[ 39%] Built target mediamodeltest
+[ 39%] Generating mediumownerwidgettest.moc
+Scanning dependencies of target mediumownerwidgettest
+[ 39%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumownerwidgettest.dir/mediumownerwidgettest.cpp.o
+Linking CXX executable ../../../bin/mediumownerwidgettest
+[ 39%] Built target mediumownerwidgettest
+[ 40%] Generating qrc_images.cxx
+[ 40%] Generating mediumtest.moc
+Scanning dependencies of target mediumtest
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumtest.dir/mediumtest.cpp.o
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mediumtest.dir/qrc_images.cxx.o
+Linking CXX executable ../../../bin/mediumtest
+[ 40%] Built target mediumtest
+[ 40%] Generating mimetypemodeltest.moc
+Scanning dependencies of target mimetypemodeltest
+[ 40%] Building CXX object src/libmeganizer/tests/CMakeFiles/mimetypemodeltest.dir/mimetypemodeltest.cpp.o
+Linking CXX executable ../../../bin/mimetypemodeltest
+[ 40%] Built target mimetypemodeltest
+[ 41%] Generating minmodeltest.moc
+Scanning dependencies of target minmodeltest
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/minmodeltest.dir/minmodeltest.cpp.o
+Linking CXX executable ../../../bin/minmodeltest
+[ 41%] Built target minmodeltest
+[ 41%] Generating minvalidatortests.moc
+Scanning dependencies of target minvalidatortests
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/minvalidatortests.dir/minvalidatortests.cpp.o
+Linking CXX executable ../../../bin/minvalidatortests
+[ 41%] Built target minvalidatortests
+[ 41%] Generating personsmodeltest.moc
+Scanning dependencies of target personsmodeltest
+[ 41%] Building CXX object src/libmeganizer/tests/CMakeFiles/personsmodeltest.dir/personsmodeltest.cpp.o
+Linking CXX executable ../../../bin/personsmodeltest
+[ 41%] Built target personsmodeltest
+[ 41%] Generating qrc_iconset.cxx
+[ 41%] Generating mediendb.moc
+[ 41%] Generating setupwizard.moc
+[ 42%] Generating dbinit.moc
+[ 42%] Generating setupuserwidget.moc
+[ 42%] Generating setupuser.moc
+[ 42%] Generating modulestate.moc
+[ 42%] Generating resultsummary.moc
+[ 43%] Generating searchwidget.moc
+[ 43%] Generating settingsdialog.moc
+[ 43%] Generating settingsgeneral.moc
+[ 43%] Generating shoppingcart.moc
+[ 43%] Generating shoppingcartlistview.moc
+[ 44%] Generating insertmanualmediums.moc
+[ 44%] Generating summary.moc
+[ 44%] Generating loansummary.moc
+[ 44%] Generating statisticssummary.moc
+[ 44%] Generating projects.moc
+[ 45%] Generating project.moc
+[ 45%] Generating projectsmodel.moc
+[ 45%] Generating about.moc
+[ 45%] Generating helpcenter.moc
+[ 45%] Generating dependencies.moc
+[ 46%] Generating modulestatedialog.moc
+[ 46%] Generating updatenoticedialog.moc
+[ 46%] Generating ui_mediendb.h
+[ 46%] Generating ui_setupwizard.h
+[ 46%] Generating ui_modulestate.h
+[ 47%] Generating ui_resultsummary.h
+[ 47%] Generating ui_searchwidget.h
+[ 47%] Generating ui_settingsdialog.h
+[ 47%] Generating ui_settingsgeneral.h
+[ 47%] Generating ui_insertmanualmediums.h
+[ 48%] Generating ui_projects.h
+[ 48%] Generating ui_about.h
+[ 48%] Generating ui_dependencies.h
+[ 48%] Generating ui_updatenoticedialog.h
+[ 48%] Generating meganizer_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/meganizer_de.qm'...
+    Generated 202 translation(s) (201 finished and 1 unfinished)
+
+    Ignored 15 untranslated source text(s)
+[ 49%] Generating meganizer_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/meganizer_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 217 untranslated source text(s)
+[ 49%] Generating qrc_meganizer.cxx
+Scanning dependencies of target meganizer
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/main.cpp.o
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/mediendb.cpp.o
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupwizard.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/setupwizard.cpp:101:6: warning: unused parameter 'event'
+[ 49%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/dbinit.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/dbinit.cpp:390:6: warning: unused parameter 'thisName'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/dbinit.cpp:402:6: warning: unused parameter 'thisName'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/dbinit.cpp:437:6: warning: unused parameter 'thisName'
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupuserwidget.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/setupuser.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/modulestate.cpp.o
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/resultsummary.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/resultsummary.cpp:33:0:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/resultsummary.cpp:357:6: warning: unused parameter 'index'
+[ 50%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/searchwidget.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/settingsdialog.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/settingsgeneral.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/settingsgeneral.cpp:48:1: warning: unused parameter 'showButtons'
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/shoppingcart.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/shoppingcartlistview.cpp.o
+[ 51%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/insertmanualmediums.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/summary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/loansummary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/statisticssummary.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/projects.cpp.o
+[ 52%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/project.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/projectsmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/projectsmodel.cpp:181:5: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/projectsmodel.cpp:194:13: warning: unused parameter 'child'
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/about.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/helpcenter.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/dependencies.cpp.o
+[ 53%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/modulestatedialog.cpp.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/updatenoticedialog.cpp.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/qrc_meganizer.cxx.o
+[ 54%] Building CXX object src/meganizer/CMakeFiles/meganizer.dir/qrc_iconset.cxx.o
+Linking CXX executable ../../bin/meganizer
+[ 54%] Built target meganizer
+[ 54%] Generating eanvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 54%] Generating eanvalidator.moc
+[ 54%] Generating eanvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidatorplugin_de.qm'...
+    Generated 1 translation(s) (1 finished and 0 unfinished)
+Scanning dependencies of target eanvalidator
+[ 55%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidator.dir/eanvalidator.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:42:6: warning: unused parameter 'toType'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47:9: warning: unused parameter 'min'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47:9: warning: unused parameter 'toType'
+Linking CXX shared library ../../../lib/libeanvalidator.so
+[ 55%] Built target eanvalidator
+[ 55%] Generating eanvalidatortests.moc
+Scanning dependencies of target eanvalidatortests
+[ 55%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidatortests.dir/eanvalidatortests.cpp.o
+[ 56%] Building CXX object src/meganizer/eanvalidatorplugin/CMakeFiles/eanvalidatortests.dir/eanvalidator.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:42:6: warning: unused parameter 'toType'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47:9: warning: unused parameter 'min'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/eanvalidatorplugin/eanvalidator.cpp:47:9: warning: unused parameter 'toType'
+Linking CXX executable ../../../bin/eanvalidatortests
+[ 56%] Built target eanvalidatortests
+[ 57%] Generating project.moc
+[ 57%] Generating projectsmodeltest.moc
+[ 57%] Generating projectsmodel.moc
+Scanning dependencies of target projectsmodeltest
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/projectsmodeltest.cpp.o
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/__/projectsmodel.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/projectsmodel.cpp:181:5: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/meganizer/projectsmodel.cpp:194:13: warning: unused parameter 'child'
+[ 58%] Building CXX object src/meganizer/tests/CMakeFiles/projectsmodeltest.dir/__/project.cpp.o
+Linking CXX executable ../../../bin/projectsmodeltest
+[ 58%] Built target projectsmodeltest
+[ 58%] Generating books_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 40 untranslated source text(s)
+[ 58%] Generating books.moc
+[ 58%] Generating booksdb.moc
+[ 59%] Generating book.moc
+[ 59%] Generating booksearchwidget.moc
+[ 59%] Generating booksmodel.moc
+[ 59%] Generating bookedit.moc
+[ 59%] Generating ui_booksearchwidget.h
+[ 60%] Generating books_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books_de.qm'...
+    Generated 40 translation(s) (40 finished and 0 unfinished)
+Scanning dependencies of target books
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/books.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books.cpp:35:1: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books.cpp:100:13: warning: unused parameter 'materialType'
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksdb.cpp.o
+[ 60%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/book.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:120:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:340:6: warning: unused parameter 'format'
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/booksearchwidget.cpp:38:9: warning: unused parameter 'supportPersons'
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/booksmodel.cpp.o
+[ 61%] Building CXX object src/mediaplugins/books/CMakeFiles/books.dir/bookedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+Linking CXX shared library ../../../lib/libbooks.so
+[ 61%] Built target books
+[ 61%] Generating isbnvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/isbnvalidatorplugin/isbnvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 61%] Generating isbnvalidator.moc
+[ 61%] Generating isbnvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/isbnvalidatorplugin/isbnvalidatorplugin_de.qm'...
+    Generated 1 translation(s) (1 finished and 0 unfinished)
+Scanning dependencies of target isbnvalidator
+[ 62%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidator.dir/isbnvalidator.cpp.o
+Linking CXX shared library ../../../../lib/libisbnvalidator.so
+[ 62%] Built target isbnvalidator
+[ 63%] Generating isbnvalidatortests.moc
+Scanning dependencies of target isbnvalidatortests
+[ 63%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidatortests.dir/isbnvalidatortests.cpp.o
+[ 63%] Building CXX object src/mediaplugins/books/isbnvalidatorplugin/CMakeFiles/isbnvalidatortests.dir/isbnvalidator.cpp.o
+Linking CXX executable ../../../../bin/isbnvalidatortests
+[ 63%] Built target isbnvalidatortests
+[ 64%] Generating booksearchwidget.moc
+[ 64%] Generating booksmodeltest.moc
+[ 65%] Generating booksmodel.moc
+[ 65%] Generating book.moc
+[ 65%] Generating books.moc
+[ 65%] Generating bookedit.moc
+[ 65%] Generating booksdb.moc
+Scanning dependencies of target booksmodeltest
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/booksmodeltest.cpp.o
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksmodel.cpp.o
+[ 65%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/book.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:120:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/book.cpp:340:6: warning: unused parameter 'format'
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/books.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books.cpp:35:1: warning: unused parameter 'parent'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/books.cpp:100:13: warning: unused parameter 'materialType'
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/bookedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/bookedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksdb.cpp.o
+[ 66%] Building CXX object src/mediaplugins/books/tests/CMakeFiles/booksmodeltest.dir/__/booksearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/books/booksearchwidget.cpp:38:9: warning: unused parameter 'supportPersons'
+Linking CXX executable ../../../../bin/booksmodeltest
+[ 66%] Built target booksmodeltest
+[ 66%] Generating music_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/music_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 86 untranslated source text(s)
+[ 66%] Generating cds.moc
+[ 66%] Generating cdsdb.moc
+[ 67%] Generating cd.moc
+[ 67%] Generating cdsearchwidget.moc
+[ 67%] Generating cdsmodel.moc
+[ 67%] Generating cdedit.moc
+[ 67%] Generating track.moc
+[ 68%] Generating tracksmodel.moc
+[ 68%] Generating trackedit.moc
+[ 68%] Generating editdevices.moc
+[ 68%] Generating tracksview.moc
+[ 68%] Generating parentview.moc
+[ 68%] Generating ui_cdsearchwidget.h
+[ 69%] Generating ui_parentview.h
+[ 69%] Generating music_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/music_de.qm'...
+    Generated 71 translation(s) (65 finished and 6 unfinished)
+
+    Ignored 15 untranslated source text(s)
+Scanning dependencies of target cds
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cds.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cds.cpp:36:1: warning: unused parameter 'parent'
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsdb.cpp.o
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:145:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:487:6: warning: unused parameter 'format'
+[ 69%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58:9: warning: unused parameter 'supportPersons'
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdsmodel.cpp.o
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123:6: warning: unused parameter 'medium'
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:132:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:349:6: warning: unused parameter 'format'
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/tracksmodel.cpp.o
+[ 70%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/editdevices.cpp.o
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/tracksview.cpp.o
+[ 71%] Building CXX object src/mediaplugins/music/CMakeFiles/cds.dir/parentview.cpp.o
+Linking CXX shared library ../../../lib/libcds.so
+[ 71%] Built target cds
+[ 71%] Generating upcvalidatorplugin_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/upcvalidatorplugin/upcvalidatorplugin_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+[ 71%] Generating upcvalidator.moc
+[ 72%] Generating upcvalidatorplugin_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/upcvalidatorplugin/upcvalidatorplugin_de.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 1 untranslated source text(s)
+Scanning dependencies of target upcvalidator
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidator.dir/upcvalidator.cpp.o
+Linking CXX shared library ../../../../lib/libupcvalidator.so
+[ 72%] Built target upcvalidator
+[ 72%] Generating upcvalidatortests.moc
+Scanning dependencies of target upcvalidatortests
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidatortests.dir/upcvalidatortests.cpp.o
+[ 72%] Building CXX object src/mediaplugins/music/upcvalidatorplugin/CMakeFiles/upcvalidatortests.dir/upcvalidator.cpp.o
+Linking CXX executable ../../../../bin/upcvalidatortests
+[ 73%] Built target upcvalidatortests
+[ 73%] Generating parentview.moc
+[ 73%] Generating cdsmodeltest.moc
+[ 73%] Generating cdsmodel.moc
+[ 73%] Generating cd.moc
+[ 73%] Generating tracksmodel.moc
+[ 74%] Generating track.moc
+[ 74%] Generating trackedit.moc
+[ 74%] Generating cds.moc
+[ 74%] Generating cdedit.moc
+[ 74%] Generating editdevices.moc
+[ 75%] Generating cdsdb.moc
+[ 75%] Generating cdsearchwidget.moc
+[ 75%] Generating tracksview.moc
+Scanning dependencies of target cdsmodeltest
+[ 75%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/cdsmodeltest.cpp.o
+[ 75%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsmodel.cpp.o
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:145:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:487:6: warning: unused parameter 'format'
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/tracksmodel.cpp.o
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:132:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:349:6: warning: unused parameter 'format'
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 76%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cds.cpp:36:1: warning: unused parameter 'parent'
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123:6: warning: unused parameter 'medium'
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/editdevices.cpp.o
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsdb.cpp.o
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58:9: warning: unused parameter 'supportPersons'
+[ 77%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/tracksview.cpp.o
+[ 78%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdsmodeltest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/cdsmodeltest
+[ 78%] Built target cdsmodeltest
+[ 78%] Generating cdtest.moc
+Scanning dependencies of target cdtest
+[ 78%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/cdtest.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:145:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:487:6: warning: unused parameter 'format'
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123:6: warning: unused parameter 'medium'
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/editdevices.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsmodel.cpp.o
+[ 79%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cds.cpp:36:1: warning: unused parameter 'parent'
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsdb.cpp.o
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58:9: warning: unused parameter 'supportPersons'
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/tracksmodel.cpp.o
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:132:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:349:6: warning: unused parameter 'format'
+[ 80%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 81%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/tracksview.cpp.o
+[ 81%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/cdtest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/cdtest
+[ 83%] Built target cdtest
+[ 83%] Generating tracksmodeltest.moc
+Scanning dependencies of target tracksmodeltest
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/tracksmodeltest.cpp.o
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/tracksmodel.cpp.o
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:132:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:349:6: warning: unused parameter 'format'
+[ 83%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cds.cpp:36:1: warning: unused parameter 'parent'
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsdb.cpp.o
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:145:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:487:6: warning: unused parameter 'format'
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58:9: warning: unused parameter 'supportPersons'
+[ 84%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdsmodel.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123:6: warning: unused parameter 'medium'
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/editdevices.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/tracksview.cpp.o
+[ 85%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracksmodeltest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/tracksmodeltest
+[ 88%] Built target tracksmodeltest
+[ 89%] Generating tracktest.moc
+Scanning dependencies of target tracktest
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/tracktest.cpp.o
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/track.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:132:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/track.cpp:349:6: warning: unused parameter 'format'
+[ 89%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/trackedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/trackedit.cpp:21:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/tracksmodel.cpp.o
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cds.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cds.cpp:36:1: warning: unused parameter 'parent'
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsdb.cpp.o
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsearchwidget.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdsearchwidget.cpp:58:9: warning: unused parameter 'supportPersons'
+[ 90%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cd.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:25:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:145:6: warning: unused parameter 'userId'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cd.cpp:487:6: warning: unused parameter 'format'
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdsmodel.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/cdedit.cpp.o
+In file included from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.h:24:0,
+                 from /home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:23:
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:60:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/libmeganizer/editmedium.h:66:16: warning: unused parameter 'medium'
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/mediaplugins/music/cdedit.cpp:123:6: warning: unused parameter 'medium'
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/editdevices.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/tracksview.cpp.o
+[ 91%] Building CXX object src/mediaplugins/music/tests/CMakeFiles/tracktest.dir/__/parentview.cpp.o
+Linking CXX executable ../../../../bin/tracktest
+[ 93%] Built target tracktest
+[ 93%] Generating qrc_amazon.cxx
+[ 93%] Generating amazonsettings.moc
+[ 94%] Generating amazonconntypesettings.moc
+[ 94%] Generating amazongeneralsettings.moc
+[ 94%] Generating amazon.moc
+[ 94%] Generating connectmaterialtype.moc
+[ 94%] Generating connectmaterialtypedialog.moc
+[ 95%] Generating purchase.moc
+[ 95%] Generating ui_connectmaterialtype.h
+[ 95%] Generating ui_amazonconntypesettings.h
+[ 95%] Generating ui_purchase.h
+[ 95%] Generating amazon_de.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/searchplugins/amazon/amazon_de.qm'...
+    Generated 110 translation(s) (110 finished and 0 unfinished)
+[ 96%] Generating amazon_en.qm
+Updating '/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/searchplugins/amazon/amazon_en.qm'...
+    Generated 0 translation(s) (0 finished and 0 unfinished)
+
+    Ignored 110 untranslated source text(s)
+Scanning dependencies of target amazon
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazonsettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazonconntypesettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazongeneralsettings.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/itemsearch.cpp.o
+[ 96%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/amazon.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/searchplugins/amazon/amazon.cpp:46:1: warning: unused parameter 'parent'
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/connectmaterialtype.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/connectmaterialtypedialog.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/purchase.cpp.o
+[ 97%] Building CXX object src/searchplugins/amazon/CMakeFiles/amazon.dir/qrc_amazon.cxx.o
+Linking CXX shared library ../../../lib/libamazon.so
+[ 97%] Built target amazon
+[ 97%] Generating amazonconntypesettings.moc
+[ 97%] Generating itemsearchtests.moc
+[ 97%] Generating amazon.moc
+[ 97%] Generating connectmaterialtypedialog.moc
+[ 97%] Generating connectmaterialtype.moc
+[ 98%] Generating purchase.moc
+[ 98%] Generating amazonsettings.moc
+[ 98%] Generating amazongeneralsettings.moc
+Scanning dependencies of target itemsearchtest
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/itemsearchtests.cpp.o
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/itemsearch.cpp.o
+[ 98%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazon.cpp.o
+/home/packager/pb/meganizer/build/BUILD/meganizer-0.3/src/searchplugins/amazon/amazon.cpp:46:1: warning: unused parameter 'parent'
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/connectmaterialtypedialog.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/connectmaterialtype.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/purchase.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazonsettings.cpp.o
+[ 99%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazongeneralsettings.cpp.o
+[100%] Building CXX object src/searchplugins/amazon/tests/CMakeFiles/itemsearchtest.dir/__/amazonconntypesettings.cpp.o
+Linking CXX executable ../../../../bin/itemsearchtest
+[100%] Built target itemsearchtest
++ exit 0
+Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.EBuaoT
++ umask 022
++ cd /home/packager/pb/meganizer/build/BUILD
++ cd meganizer-0.3
++ /bin/rm -rf /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64
++ make DESTDIR=/home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64 install
+[ 37%] Built target libmeganizer
+[ 38%] Built target libmeganizertests
+[ 38%] Built target editmediumtest
+[ 38%] Built target materialpersonsmodeltest
+[ 39%] Built target mediamodeltest
+[ 39%] Built target mediumownerwidgettest
+[ 40%] Built target mediumtest
+[ 40%] Built target mimetypemodeltest
+[ 41%] Built target minmodeltest
+[ 41%] Built target minvalidatortests
+[ 41%] Built target personsmodeltest
+[ 54%] Built target meganizer
+[ 55%] Built target eanvalidator
+[ 56%] Built target eanvalidatortests
+[ 58%] Built target projectsmodeltest
+[ 61%] Built target books
+[ 62%] Built target isbnvalidator
+[ 63%] Built target isbnvalidatortests
+[ 66%] Built target booksmodeltest
+[ 71%] Built target cds
+[ 72%] Built target upcvalidator
+[ 73%] Built target upcvalidatortests
+[ 78%] Built target cdsmodeltest
+[ 83%] Built target cdtest
+[ 88%] Built target tracksmodeltest
+[ 93%] Built target tracktest
+[ 97%] Built target amazon
+[100%] Built target itemsearchtest
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libmeganizer.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libmeganizertests.so
+Linking CXX executable CMakeFiles/CMakeRelink.dir/meganizer
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libeanvalidator.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libbooks.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libisbnvalidator.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libcds.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libupcvalidator.so
+Linking CXX shared library CMakeFiles/CMakeRelink.dir/libamazon.so
+Install the project...
+-- Install configuration: "Release"
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/libmeganizer.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/libmeganizer_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/libmeganizer_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/depends/libmeganizer.xml
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/libmeganizertests.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/bin/meganizer
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/meganizer_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/meganizer_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/depends/meganizer.xml
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/pixmaps/meganizer.png
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/applications/Meganizer.desktop
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/minvalidator/libeanvalidator.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/eanvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/eanvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/libbooks.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/books_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/books_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/depends/books.xml
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/minvalidator/libisbnvalidator.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/isbnvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/isbnvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/libcds.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/music_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/music_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/depends/cds.xml
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/minvalidator/libupcvalidator.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/upcvalidatorplugin_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/upcvalidatorplugin_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/meganizer/libamazon.so
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/amazon_de.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/lang/amazon_en.qm
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/meganizer/depends/amazon.xml
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/man/man1/meganizer.1
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/man/man5/meganizer.5
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/man/de/man1/meganizer.de.1
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/man/de/man5/meganizer.de.5
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/doc/meganizer/meganizer.qhc
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/doc/meganizer/meganizer.qch
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/doc/meganizer/meganizer_de.qhc
+-- Installing: /home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/share/doc/meganizer/meganizer_de.qch
++ /usr/lib/rpm/brp-lib64-linux
+sf@suse.de: if you find problems with this script, drop me a note
+/home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/libmeganizertests.so:     file format elf64-x86-64
+/home/packager/pb/meganizer/build/BUILDROOT/meganizer-0.3-0.20100901102638.opensuse11.3.x86_64/usr/lib/libmeganizertests.so: should be in */lib64
+error: Bad exit status from /var/tmp/rpm-tmp.EBuaoT (%install)
+
+
+RPM build errors:
+    Bad exit status from /var/tmp/rpm-tmp.EBuaoT (%install)
+
+rpm packages generated:
Index: /0.11.2/pb-modules/t/Log.t
===================================================================
--- /0.11.2/pb-modules/t/Log.t	(revision 1153)
+++ /0.11.2/pb-modules/t/Log.t	(revision 1153)
@@ -0,0 +1,66 @@
+#!/usr/bin/perl -w
+#
+# Tests ProjectBuilder::Log functions
+
+use strict;
+use ProjectBuilder::Base;
+
+eval
+{
+	require Test::More;
+	Test::More->import();
+	my ($tmv,$tmsv) = split(/\./,$Test::More::VERSION);
+	if ($tmsv lt 87) {
+		die "Test::More is not available in an appropriate version ($tmsv)";
+	}
+};
+
+# Test::More not found so no test will be performed here
+if ($@) {
+  	require Test;
+	Test->import();
+	plan(tests => 1);
+	print "# Faking tests as test::More is not available in an appropriate version\n";
+	ok(1,1);
+	exit (0);
+}
+
+is("tmp", "tmp", "temp test");
+done_testing(1);
+exit(0);
+
+use ProjectBuilder::Log;
+
+my $nt = 0;
+# Acquires test data
+my $logf = "combined.log";
+if (!open(FILE, "< $logf")) {
+	die("Could not open file $logf\n");
+}
+my @lines = <FILE>;
+close(FILE);
+
+my $log = new ProjectBuilder::Log;
+$log->setCompleteLog(join("\n", @lines));
+my $test = {
+	# Full URI
+	"svn+ssh://account\@machine.sdom.tld:8080/path/to/file" => ["svn+ssh","account","machine.sdom.tld","8080","/path/to/file"],
+	# Partial URI
+	"http://machine2/path1/to/anotherfile" => ["http","","machine2","","/path1/to/anotherfile"],
+	};
+
+my ($scheme, $account, $host, $port, $path);
+foreach my $lines (split(/\n/,$log->summary)) {
+	#($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+
+	#is($scheme, $test->{$uri}[0], "pb_get_uri Test protocol $uri");
+	#$nt++;
+
+}
+
+#$ENV{'TMPDIR'} = "/tmp";
+#pb_temp_init();
+#like($ENV{'PBTMP'}, qr|/tmp/pb\.[0-9A-z]+|, "pb_temp_init Test");
+#$nt++;
+
+done_testing($nt);
Index: /0.11.2/pb-modules/t/Base.t
===================================================================
--- /0.11.2/pb-modules/t/Base.t	(revision 1153)
+++ /0.11.2/pb-modules/t/Base.t	(revision 1153)
@@ -0,0 +1,70 @@
+#!/usr/bin/perl -w
+#
+# Tests ProjectBuilder::Base functions
+
+use strict;
+use ProjectBuilder::Base;
+
+eval
+{
+	require Test::More;
+	Test::More->import();
+	my ($tmv,$tmsv) = split(/\./,$Test::More::VERSION);
+	if ($tmsv lt 87) {
+		die "Test::More is not available in an appropriate version ($tmsv)";
+	}
+};
+
+# Test::More appropriate version not found so no test will be performed here
+if ($@) {
+	require Test;
+	Test->import();
+	plan(tests => 1);
+	print "# Faking tests as Test::More is not available in an appropriate version\n";
+	ok(1,1);
+	exit(0);
+}
+
+my $nt = 0;
+my $test = {
+	# Full URI
+	"svn+ssh://account\@machine.sdom.tld:8080/path/to/file" => ["svn+ssh","account","machine.sdom.tld","8080","/path/to/file"],
+	# Partial URI
+	"http://machine2/path1/to/anotherfile" => ["http","","machine2","","/path1/to/anotherfile"],
+	};
+
+my ($scheme, $account, $host, $port, $path);
+foreach my $uri (keys %$test) {
+	($scheme, $account, $host, $port, $path) = pb_get_uri($uri);
+
+	is($scheme, $test->{$uri}[0], "pb_get_uri Test protocol $uri");
+	$nt++;
+
+	is($account, $test->{$uri}[1], "pb_get_uri Test account $uri");
+	$nt++;
+	
+	is($host, $test->{$uri}[2], "pb_get_uri Test host $uri");
+	$nt++;
+	
+	is($port, $test->{$uri}[3], "pb_get_uri Test port $uri");
+	$nt++;
+	
+	is($path, $test->{$uri}[4], "pb_get_uri Test path $uri");
+	$nt++;
+}
+
+$ENV{'TMPDIR'} = "/tmp";
+pb_temp_init();
+like($ENV{'PBTMP'}, qr|/tmp/pb\.[0-9A-z]+|, "pb_temp_init Test");
+$nt++;
+
+my $content = "This is  content with TABs 	 and spaces and \ncarriage returns\n";
+open(FILE,"> $ENV{'PBTMP'}/test") || die "Unable to create temp file";
+print FILE $content;
+close(FILE);
+
+my $cnt = pb_get_content("$ENV{'PBTMP'}/test");
+is($cnt, $content, "pb_get_content Test");
+$nt++;
+
+done_testing($nt);
Index: /0.11.2/pb-modules/AUTHORS
===================================================================
--- /0.11.2/pb-modules/AUTHORS	(revision 402)
+++ /0.11.2/pb-modules/AUTHORS	(revision 402)
@@ -0,0 +1,2 @@
+Project Builder or pb is copyrighted under the GPL v2 by 
+Bruno Cornec <bruno@hyper-linux.org>
Index: /0.11.2/pb-modules/INSTALL
===================================================================
--- /0.11.2/pb-modules/INSTALL	(revision 402)
+++ /0.11.2/pb-modules/INSTALL	(revision 402)
@@ -0,0 +1,7 @@
+Basic Installation
+==================
+
+tar xvfz pb-1.0.tar.gz
+cd pb-1.0
+make 
+make install
Index: /0.11.2/pb-modules/lense/projectbuilder.aug
===================================================================
--- /0.11.2/pb-modules/lense/projectbuilder.aug	(revision 829)
+++ /0.11.2/pb-modules/lense/projectbuilder.aug	(revision 829)
@@ -0,0 +1,36 @@
+(* Project-Builder.org module for Augeas                *)
+(* Author: Raphael Pinson <raphink@gmail.com>           *)
+(* Maintainer: Bruno Cornec <bruno@project-builder.org> *)
+(* $Id$                                                 *)
+(*                                                      *)
+(* This lense for Augeas applies to Project-Builder.org *)
+(* configuration files                                  *)
+(*                                                      *)
+(*  Format: Field Project = Value1 [, Value2, ...]      *)
+(*                                                      *)
+
+module ProjectBuilder =
+  autoload xfm
+  
+  let word    = Rx.word
+  let ws      = Util.del_ws_tab
+  let eol     = Util.eol
+  let comment = Util.comment
+  let empty   = Util.empty
+  let eq      = del /[ \t]*=[ \t]*/ "="
+  let comma   = del /[ \t]*,[ \t]*/ ","
+  let sto_value = [ label "value" . store /[^ \t\n,]+/ ]
+
+  let record = [ key word . ws . store word
+                 . eq
+                 . Build.opt_list sto_value comma
+                 . (eol|comment)
+                 ]
+
+  let lns = ( record | comment | empty )*
+
+  let filter = (incl "/home/bruno/.pbrc") . Util.stdexcl
+
+  let xfm = transform lns filter
+
+(* vim: set syntax=pascal *)
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Conf.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Conf.pm	(revision 1156)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Conf.pm	(revision 1156)
@@ -0,0 +1,352 @@
+#!/usr/bin/perl -w
+#
+# ProjectBuilder Conf module
+# Conf files subroutines brought by the the Project-Builder project
+# which can be easily used by wahtever perl project
+#
+# $Id$
+#
+
+package ProjectBuilder::Conf;
+
+use strict;
+use Data::Dumper;
+use ProjectBuilder::Base;
+use ProjectBuilder::Version;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_conf_init pb_conf_add pb_conf_read pb_conf_read_if pb_conf_get pb_conf_get_if);
+($VERSION,$REVISION) = pb_version_init();
+
+# Global hash of conf files
+# Key is the conf file name
+# Value is its rank
+my %pbconffiles;
+
+# Global hash of cached values. 
+# We consider that values can not change during the life of pb
+# my %cachedval;
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Conf, part of the project-builder.org - module dealing with configuration files
+
+=head1 DESCRIPTION
+
+This modules provides functions dealing with configuration files.
+
+=head1 SYNOPSIS
+
+  use ProjectBuilder::Conf;
+
+  #
+  # Read hash codes of values from a configuration file and return table of pointers
+  #
+  my ($k1, $k2) = pb_conf_read_if("$ENV{'HOME'}/.pbrc","key1","key2");
+  my ($k) = pb_conf_read("$ENV{'HOME'}/.pbrc","key");
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_conf_init>
+
+This function setup the environment PBPROJ for project-builder function usage from other projects.
+The first parameter is the project name.
+It sets up environment variables (PBPROJ) 
+
+=cut
+
+sub pb_conf_init {
+
+my $proj=shift || undef;
+
+if (defined $proj) {
+	$ENV{'PBPROJ'} = $proj;
+} else {
+	$ENV{'PBPROJ'} = "default";
+}
+}
+
+
+
+=item B<pb_conf_add>
+
+This function adds the configuration file to the list last.
+
+=cut
+
+sub pb_conf_add {
+
+pb_log(2,"DEBUG: pb_conf_add with ".Dumper(@_)."\n");
+
+foreach my $cf (@_) {
+	# Skip already used conf files
+	next if (defined $pbconffiles{$cf});
+	# Add the new one at the end
+	my $num = keys %pbconffiles;
+	pb_log(2,"DEBUG: pb_conf_add $cf at position $num\n");
+	$pbconffiles{$cf} = $num;
+	pb_log(0,"WARNING: pb_conf_add can not read $cf\n") if (! -r $cf);
+}
+}
+
+=item B<pb_conf_read_if>
+
+This function returns a table of pointers on hashes
+corresponding to the keys in a configuration file passed in parameter.
+If that file doesn't exist, it returns undef.
+
+The format of the configuration file is as follows:
+
+key tag = value1,value2,...
+
+Supposing the file is called "$ENV{'HOME'}/.pbrc", containing the following:
+
+  $ cat $HOME/.pbrc
+  pbver pb = 3
+  pbver default = 1
+  pblist pb = 12,25
+
+calling it like this:
+
+  my ($k1, $k2) = pb_conf_read_if("$ENV{'HOME'}/.pbrc","pbver","pblist");
+
+will allow to get the mapping:
+
+  $k1->{'pb'}  contains 3
+  $k1->{'default'} contains 1
+  $k2->{'pb'} contains 12,25
+
+Valid chars for keys and tags are letters, numbers, '-' and '_'.
+
+=cut
+
+sub pb_conf_read_if {
+
+my $conffile = shift;
+my @param = @_;
+
+open(CONF,$conffile) || return((undef));
+close(CONF);
+return(pb_conf_read($conffile,@param));
+}
+
+=item B<pb_conf_read>
+
+This function is similar to B<pb_conf_read_if> except that it dies when the file in parameter doesn't exist.
+
+=cut
+
+sub pb_conf_read {
+
+my $conffile = shift;
+my @param = @_;
+my $trace;
+my @ptr;
+my %h;
+
+open(CONF,$conffile) || die "Unable to open $conffile";
+while(<CONF>) {
+	if (/^\s*([A-z0-9-_.]+)\s+([[A-z0-9-_.]+)\s*=\s*(.+)$/) {
+		pb_log(3,"DEBUG: 1:$1 2:$2 3:$3\n");
+		$h{$1}{$2}=$3;
+	}
+}
+close(CONF);
+
+for my $param (@param) {
+	push @ptr,$h{$param};
+}
+return(@ptr);
+}
+
+=item B<pb_conf_get_if>
+
+This function returns a table, corresponding to a set of values queried in the conf files or undef if it doen't exist. It takes a table of keys as an input parameter.
+
+The format of the configurations file is as follows:
+
+key tag = value1,value2,...
+
+It will gather the values from all the configurations files passed to pb_conf_add, and return the values for the keys, taking in account the order of conf files, to manage overloading.
+
+  $ cat $HOME/.pbrc
+  pbver pb = 1
+  pblist pb = 4
+  $ cat $HOME/.pbrc2
+  pbver pb = 3
+  pblist default = 5
+
+calling it like this:
+
+  pb_conf_add("$HOME/.pbrc","$HOME/.pbrc2");
+  my ($k1, $k2) = pb_conf_get_if("pbver","pblist");
+
+will allow to get the mapping:
+
+  $k1->{'pb'} contains 3
+  $k2->{'pb'} contains 4
+
+Valid chars for keys and tags are letters, numbers, '-' and '_'.
+
+=cut
+
+sub pb_conf_get_if {
+
+my @param = @_;
+
+my $ptr = undef;
+
+# the most important conf file is first, so read them in reverse order
+foreach my $f (reverse sort { $pbconffiles{$a} <=> $pbconffiles{$b} } keys %pbconffiles) {
+	pb_log(2,"DEBUG: pb_conf_get_if in file $f\n");
+	$ptr = pb_conf_get_fromfile_if("$f",$ptr,@param);
+}
+
+return(@$ptr);
+}
+
+=item B<pb_conf_fromfile_if>
+
+This function returns a pointer on a table, corresponding to a merge of values queried in the conf file and the pointer on another table passed as parameter. It takes a table of keys as last input parameter.
+
+  my ($k1) = pb_conf_fromfile_if("$HOME/.pbrc",undef,"pbver","pblist");
+  my ($k2) = pb_conf_fromfile_if("$HOME/.pbrc3",$k1,"pbver","pblist");
+
+It is used internally by pb_conf_get_if and is not exported yet.
+
+=cut
+
+
+sub pb_conf_get_fromfile_if {
+
+my $conffile = shift;
+my $ptr2 = shift || undef;
+my @param = @_;
+
+# Everything is returned via ptr1
+my @ptr1 = ();
+my @ptr2 = ();
+
+# @ptr1 contains the values overloading what @ptr2 may contain.
+@ptr1 = pb_conf_read_if("$conffile", @param) if (defined $conffile);
+@ptr2 = @$ptr2 if (defined $ptr2);
+
+my $p1;
+my $p2;
+
+pb_log(2,"DEBUG: pb_conf_get_from_file $conffile: ".Dumper(@ptr1)."\n");
+pb_log(2,"DEBUG: pb_conf_get_from_file input: ".Dumper(@ptr2)."\n");
+pb_log(2,"DEBUG: pb_conf_get_from_file param: ".Dumper(@param)."\n");
+
+foreach my $i (0..$#param) {
+	$p1 = $ptr1[$i];
+	# Optimisation doesn't seem useful
+	# if ((defined $p1) && (defined $cachedval{$p1})) {
+	# $ptr1[$i] = $cachedval{$p1};
+	# next;
+	# }
+	$p2 = $ptr2[$i];
+	# Always try to take the param from ptr1 
+	# in order to mask what could be defined already in ptr2
+	if (not defined $p2) {
+		# exit if no p1 either
+		next if ((not defined $p1) || (not defined $ENV{'PBPROJ'}));
+		# No ref in p2 so use p1
+		$p1->{$ENV{'PBPROJ'}} = $p1->{'default'} if ((not defined $p1->{$ENV{'PBPROJ'}}) && (defined $p1->{'default'}));
+	} else {
+		# Ref found in p2
+		if (not defined $p1) {
+			# No ref in p1 so use p2's value
+			$p2->{$ENV{'PBPROJ'}} = $p2->{'default'} if ((not defined $p2->{$ENV{'PBPROJ'}}) && (defined $p2->{'default'}));
+			$p1 = $p2;
+		} else {
+			# Both are defined - handling the overloading
+			if (not defined $p1->{'default'}) {
+				if (defined $p2->{'default'}) {
+					$p1->{'default'} = $p2->{'default'};
+				}
+			}
+
+			if (not defined $p1->{$ENV{'PBPROJ'}}) {
+				if (defined $p2->{$ENV{'PBPROJ'}}) {
+					$p1->{$ENV{'PBPROJ'}} = $p2->{$ENV{'PBPROJ'}} if (defined $p2->{$ENV{'PBPROJ'}});
+				} else {
+					$p1->{$ENV{'PBPROJ'}} = $p1->{'default'} if (defined $p1->{'default'});
+				}
+			}
+			# Now copy back into p1 all p2 content which doesn't exist in p1
+			# p1 content always has priority over p2
+			foreach my $k (keys %$p2) {
+				$p1->{$k} = $p2->{$k} if (not defined $p1->{$k});
+			}
+		}
+	}
+	$ptr1[$i] = $p1;
+	# Cache values to avoid redoing all that analyze when asked again on a known value
+	# $cachedval{$p1} = $p1;
+}
+pb_log(2,"DEBUG: pb_conf_get output: ".Dumper(@ptr1)."\n");
+return(\@ptr1);
+}
+
+=item B<pb_conf_get>
+
+This function is the same B<pb_conf_get_if>, except that it tests each returned value as they need to exist in that case.
+
+=cut
+
+sub pb_conf_get {
+
+my @param = @_;
+my @return = pb_conf_get_if(@param);
+my $proj = undef;
+
+if (not defined $ENV{'PBPROJ'}) {
+	$proj = "unknown";
+} else {
+	$proj = $ENV{'PBPROJ'};
+}
+
+die "No params found for $proj" if (not @return);
+
+foreach my $i (0..$#param) {
+	die "No $param[$i] defined for $proj" if (not defined $return[$i]);
+}
+return(@return);
+}
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Display.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Display.pm	(revision 1156)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Display.pm	(revision 1156)
@@ -0,0 +1,113 @@
+#!/usr/bin/perl -w
+#
+# Display subroutines brought by the the Project-Builder project
+# which can be easily used by whatever perl project
+#
+# Copyright B. Cornec 2007-2008
+# Provided under the GPL v2
+#
+# $Id$
+#
+
+package ProjectBuilder::Display;
+
+use strict;
+use lib qw (lib);
+use Data::Dumper;
+use Pod::Usage;
+use English;
+use POSIX qw(locale_h);
+use ProjectBuilder::Base;
+use ProjectBuilder::Version;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our $pbdisplaytype = "text";
+						# default display mode for messages
+our $pblocale = "C";
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_display pb_display_init $pbdisplaytype $pblocale);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Display, part of the project-builder.org - module dealing with display functions suitable for perl project development
+
+=head1 DESCRIPTION
+
+This modules provides display functions suitable for perl project development 
+
+=head1 SYNOPSIS
+
+  use ProjectBuilder::Display;
+
+  #
+  # Manages prints of the program
+  #
+  pb_display_init("text","fr_FR:UTF-8");
+  pb_display("Message to print\n");
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_display_init>
+
+This function initializes the environment used by the pb_display function.
+
+The first parameter is the type of display which will be used. Could be "text", "web", "newt",...
+The second parameter is the loacle to be used.
+
+The call to B<pb_display_init> is typically done after getting a parameter on the CLI indicating the locale used or the type of interface to report messages to.
+
+=cut
+
+sub pb_display_init {
+
+$pbdisplaytype = shift || "text";
+$pblocale = shift || "C";
+
+setlocale(LC_ALL, $pblocale);
+pb_log(1,"Using $pbdisplaytype interface with $pblocale locale\n");
+
+if ($pbdisplaytype =~ /text/) {
+} elsif ($pbdisplaytype = /newt/) {
+} else {
+	die "display system $pbdisplaytype unsupported";
+}
+}
+
+=item B<pb_display>
+
+This function prints the messages passed as parameter using the configuration set up with the B<pb_display_init> function.
+
+Here is a usage example:
+
+  pb_display_init("text","fr_FR.UTF-8");
+  pb_display("Hello World\n");
+
+  will print:
+  
+  Bonjour Monde
+
+=cut 
+
+sub pb_display {
+
+my $msg = shift;
+
+if ($pbdisplaytype =~ /text/) {
+	print STDOUT gettext($msg);
+	}
+}
+
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Version.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Version.pm	(revision 1156)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Version.pm	(revision 1156)
@@ -0,0 +1,31 @@
+#!/usr/bin/perl -w
+#
+# Declare versions that will be used in pb
+# Those are filtered with pb mecanism
+# and have been isolated here to avoid unrelated effects
+#
+package ProjectBuilder::Version;
+
+use strict;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_version_init);
+
+$VERSION = "PBVER";
+$REVISION = "PBREV";
+
+sub pb_version_init {
+
+my $projectbuilderver = $VERSION;
+my $projectbuilderrev = $REVISION;
+
+return($projectbuilderver,$projectbuilderrev);
+}
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Log/Item.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Log/Item.pm	(revision 1090)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Log/Item.pm	(revision 1090)
@@ -0,0 +1,194 @@
+package ProjectBuilder::Log::Item;
+
+# Each PB::Log::Item represents one machine
+
+use strict;
+
+# the *matches represents strings, which a line must contain, to be recognized as a corresponding found
+# the *exludes can be used to exclude a string (if the string contains a *match and a *exclude, the line is ignored)
+# the name is by default the name of the vm (e.g. ubuntu-10.04-i386)
+sub new {
+	# contains the object name (here PBLog)
+	my $object = shift;
+	my $vmname = shift || "";
+	my $log = shift || "";
+
+	my $self = {};
+	# $ref should point to an object of type $object
+	bless($self, $object);
+
+	# array of strings, which are indicating errors or warnings (case insensitive)
+	$self->{'errormatches'} = [];
+	$self->{'warningmatches'} = [];
+	# array of strings, which are excluded from error lines (case insensitive)
+	$self->{'errorexcludes'} = [];
+	$self->{'warningexcludes'} = [];
+
+	push(@{$self->{'errormatches'}}, "error");
+	push(@{$self->{'errormatches'}}, "fehler");
+
+	push(@{$self->{'warningmatches'}}, "warning");
+	push(@{$self->{'warningmatches'}}, "warnung");
+
+	# init default values
+	$self->setName($vmname);
+	$self->setLog($log);
+
+	return($self);
+}
+
+#set's the name
+sub setName {
+	my $self = shift;
+	my $vmname = shift || "";
+
+	$self->{'vmname'} = $vmname;
+}
+
+# returns the name
+sub name {
+	my $self = shift;
+
+	return $self->{'vmname'};
+}
+
+# set's the log and calls the analyzer (parseLog())
+sub setLog {
+	my $self = shift;
+	my $log = shift || "";
+	
+	$self->{'qawarnings'} = [];
+	$self->{'qaerrors'} = [];
+	$self->{'warnings'} = [];
+	$self->{'errors'} = [];
+	$self->{'log'} = $log;
+	$self->parseLog;
+}
+
+# returns the "raw" log text
+sub log {
+	my $self = shift;
+
+	return $self->{'log'};
+}
+
+# returns the number of warnings and errors reported by lintian or rpmlint
+sub numQaIssues {
+	my $self = shift;
+
+	return scalar($self->qaIssues);
+}
+
+# returns the issues itself
+sub qaIssues {
+	my $self = shift;
+	my @result = $self->qaErrors;
+
+	push(@result, $self->qaWarnings);
+	return @result;
+}
+
+#returns only the warnings
+sub qaWarnings {
+	my $self = shift;
+
+	return @{$self->{'qawarnings'}};
+}
+
+# returns only the errors
+sub qaErrors {
+	my $self = shift;
+
+	return @{$self->{'qaerrors'}};
+}
+
+# returns the number of compile errors
+# or better, all other than lintian and rpmlint
+sub numErrors {
+	my $self = shift;
+
+	return scalar($self->errors);
+}
+
+# returns the errors itself
+sub errors {
+	my $self = shift;
+
+	return @{$self->{'errors'}};
+}
+
+# same for warnings
+sub numWarnings {
+	my $self = shift;
+
+	return scalar($self->warnings);
+}
+
+# same for warnings
+sub warnings {
+	my $self = shift;
+
+	return @{$self->{'warnings'}};
+}
+
+# private part
+
+# parses the log
+sub parseLog {
+	my $self = shift;
+	
+	my @lines = split("\n", $self->{'log'});
+	foreach my $line (@lines) {
+		# check for lintian or rpmlint errors
+		if ($line =~ m/^W:/) {
+			push(@{$self->{'qawarnings'}}, $line);
+		} elsif ($line =~ m/^E:/) {
+			push(@{$self->{'qaerrors'}}, $line);
+		} else {
+			# error detect
+			my $iserror = 0;
+			foreach my $errormatch (@{$self->{'errormatches'}}) {
+				if($line =~ m/$errormatch/){
+					# check wether an exclude is also true
+					my $isexcluded = 0;
+					foreach my $exclude (@{$self->{'errorexcludes'}}) {
+						if ($line =~ m/$exclude/) {
+							$isexcluded = 1;
+							last;
+						}
+					}
+					if ($isexcluded == 0) {
+						# it is an error and not excluded, so add it to array
+						push(@{$self->{'errors'}}, $line);
+						$iserror = 1;
+						last;
+					}
+				}
+			}
+
+			# warning detect
+			if ($iserror == 0) {
+				foreach my $match (@{$self->{'warningmatches'}}) {
+					if($line =~ m/$match/){
+						# check wether an exclude is also true
+						my $isexcluded = 0;
+						foreach my $exclude (@{$self->{'warningexcludes'}}) {
+							if ($line =~ m/$exclude/) {
+								$isexcluded = 1;
+								last;
+							}
+						}
+						if ($isexcluded == 0) {
+							# it is an error and not excluded, so add it to array
+							push(@{$self->{'warnings'}}, $line);
+							$iserror = 1;
+							last;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Base.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Base.pm	(revision 1212)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Base.pm	(revision 1212)
@@ -0,0 +1,494 @@
+#!/usr/bin/perl -w
+#
+# Base subroutines brought by the the Project-Builder project
+# which can be easily used by whatever perl project
+#
+# Copyright B. Cornec 2007-2008
+# Provided under the GPL v2
+#
+# $Id$
+#
+
+package ProjectBuilder::Base;
+
+use strict;
+use lib qw (lib);
+use File::Path;
+use File::Temp qw(tempdir);
+use Data::Dumper;
+use Time::localtime qw(localtime);
+use Pod::Usage;
+use English;
+use POSIX qw(locale_h);
+use ProjectBuilder::Version;
+
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our $pbdebug = 0;		# Global debug level
+our $pbLOG = \*STDOUT;	# File descriptor of the log file
+our $pbsynmsg = "Error";	# Global error message
+our $pbdisplaytype = "text";
+						# default display mode for messages
+our $pblocale = "C";
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_mkdir_p pb_system pb_rm_rf pb_get_date pb_log pb_log_init pb_get_uri pb_get_content pb_set_content pb_display_file pb_syntax_init pb_syntax pb_temp_init pb_get_arch pb_check_requirements pb_check_req $pbdebug $pbLOG $pbdisplaytype $pblocale);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Base, part of the project-builder.org - module dealing with generic functions suitable for perl project development
+
+=head1 DESCRIPTION
+
+This modules provides generic functions suitable for perl project development 
+
+=head1 SYNOPSIS
+
+  use ProjectBuilder::Base;
+
+  #
+  # Create a directory and its parents
+  #
+  pb_mkdir_p("/tmp/foo/bar");
+
+  #
+  # Remove recursively a directory and its children
+  #
+  pb_rm_rf("/tmp/foo");
+
+  #
+  # Encapsulate the system call for better output and return value test
+  #
+  pb_system("ls -l", "Printing directory content");
+
+  #
+  # Analysis a URI and return its components in a table
+  #
+  my ($scheme, $account, $host, $port, $path) = pb_get_uri("svn+ssh://ac@my.server.org:port/path/to/dir");
+
+  #
+  # Gives the current date in a table
+  #
+  @date = pb_get_date();
+
+  #
+  # Manages logs of the program
+  #
+  pb_log_init(2,\*STDOUT);
+  pb_log(1,"Message to print\n");
+
+  #
+  # Manages content of a file
+  #
+  pb_display_file("/etc/passwd",\*STDERR);
+  my $cnt = pb_get_content("/etc/passwd");
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_mkdir_p>
+
+Internal mkdir -p function. Forces mode to 755. Supports multiple parameters.
+
+Based on File::Path mkpath.
+
+=cut
+
+sub pb_mkdir_p {
+my @dir = @_;
+my $ret = mkpath(@dir, 0, 0755);
+return(0);
+}
+
+=item B<pb_rm_rf>
+
+Internal rm -rf function. Supports multiple parameters.
+
+Based on File::Path rmtree.
+
+=cut
+
+sub pb_rm_rf {
+my @dir = @_;
+my $ret = rmtree(@dir, 0, 0);
+return($ret);
+}
+
+=item B<pb_system>
+
+Encapsulate the "system" call for better output and return value test
+Needs a $ENV{'PBTMP'} variable which is created by calling the pb_mktemp_init function
+Needs pb_log support, so pb_log_init should have benn called before.
+
+The first parameter is the shell command to call.
+The second parameter is the message to print on screen. If none is given, then the command is printed.
+The third parameter print the result of the command after correct execution if value is verbose. If value is noredir, it avoids redirecting outputs (e.g. for vi).
+This function returns the result the return value of the system command.
+
+If no error reported, it prints OK on the screen, just after the message. Else it prints the errors generated.
+
+=cut
+
+sub pb_system {
+
+my $cmd=shift;
+my $cmt=shift || $cmd;
+my $verbose=shift || undef;
+my $redir = "";
+
+pb_log(0,"$cmt... ") if ((! defined $verbose) || ($verbose ne "quiet"));
+pb_log(1,"Executing $cmd\n");
+unlink("$ENV{'PBTMP'}/system.$$.log") if (-f "$ENV{'PBTMP'}/system.$$.log");
+$redir = "2>> $ENV{'PBTMP'}/system.$$.log 1>> $ENV{'PBTMP'}/system.$$.log" if ((! defined $verbose) || ($verbose ne "noredir"));
+system("$cmd $redir");
+my $res = $?;
+# Exit now if the command may fail
+if ((defined $verbose) and ($verbose eq "mayfail")) {
+	pb_log(0,"N/A\n") if ($res != 0);
+	pb_log(0,"OK\n") if ($res == 0);
+	return($res) 
+	}
+if ($res == -1) {
+	pb_log(0,"failed to execute ($cmd): $!\n") if ((! defined $verbose) || ($verbose ne "quiet"));
+	pb_display_file("$ENV{'PBTMP'}/system.$$.log") if ((-f "$ENV{'PBTMP'}/system.$$.log") and ((! defined $verbose) || ($verbose ne "quiet")));
+} elsif ($res & 127) {
+	pb_log(0, "child ($cmd) died with signal ".($? & 127).", ".($? & 128) ? 'with' : 'without'." coredump\n") if ((! defined $verbose) || ($verbose ne "quiet"));
+	pb_display_file("$ENV{'PBTMP'}/system.$$.log") if ((-f "$ENV{'PBTMP'}/system.$$.log") and ((! defined $verbose) || ($verbose ne "quiet")));
+} elsif ($res == 0) {
+	pb_log(0,"OK\n") if ((! defined $verbose) || ($verbose ne "quiet"));
+	pb_display_file("$ENV{'PBTMP'}/system.$$.log") if ((defined $verbose) and (-f "$ENV{'PBTMP'}/system.$$.log") and ($verbose ne "quiet"));
+} else {
+	pb_log(0, "child ($cmd) exited with value ".($? >> 8)."\n") if ((! defined $verbose) || ($verbose ne "quiet"));
+	pb_display_file("$ENV{'PBTMP'}/system.$$.log") if ((-f "$ENV{'PBTMP'}/system.$$.log") and ((! defined $verbose) || ($verbose ne "quiet")));
+}
+return($res);
+}
+
+=item B<pb_get_uri>
+
+This function returns a list of 6 parameters indicating the protocol, account, password, server, port, and path contained in the URI passed in parameter.
+
+A URI has the format protocol://[ac@]host[:port][path[?query][#fragment]].
+
+Cf man URI.
+
+=cut
+
+sub pb_get_uri {
+
+my $uri = shift || undef;
+
+pb_log(2,"DEBUG: uri:$uri\n");
+my ($scheme, $authority, $path, $query, $fragment) =
+         $uri =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?| if (defined $uri);
+my ($account,$host,$port) = $authority =~ m|(?:([^\@]+)\@)?([^:]+)(:(?:[0-9]+))?| if (defined $authority);
+
+$scheme = "" if (not defined $scheme);
+$authority = "" if (not defined $authority);
+$path = "" if (not defined $path);
+$account = "" if (not defined $account);
+$host = "" if (not defined $host);
+if (not defined $port) {
+	$port = "" 
+} else {
+	# Remove extra : at start
+	$port =~ s/^://;
+}
+
+pb_log(2,"DEBUG: scheme:$scheme ac:$account host:$host port:$port path:$path\n");
+return($scheme, $account, $host, $port, $path);
+}
+
+=item B<pb_get_date>
+
+This function returns a list of 9 parameters indicating the seconds, minutes, hours, day, month, year, day in the week, day in the year, and daylight saving time flag of the current time.
+
+Cf: man ctime and description of the struct tm.
+
+=cut
+
+sub pb_get_date {
+	
+return(localtime->sec(), localtime->min(), localtime->hour(), localtime->mday(), localtime->mon(), localtime->year(), localtime->wday(), localtime->yday(), localtime->isdst());
+}
+
+=item B<pb_log_init>
+
+This function initializes the global variables used by the pb_log function.
+
+The first parameter is the debug level which will be considered during the run of the program?
+The second parameter is a pointer on a file descriptor used to print the log info.
+
+As an example, if you set the debug level to 2 in that function, every call to pb_log which contains a value less or equal than 2 will be printed. Calls with a value greater than 2 won't be printed.
+
+The call to B<pb_log_init> is typically done after getting a parameter on the CLI indicating the level of verbosity expected.
+
+=cut
+
+sub pb_log_init {
+
+$pbdebug = shift || 0;
+$pbLOG = shift || \*STDOUT;
+pb_log(1,"Debug value: $pbdebug\n");
+
+} 
+
+=item B<pb_log>
+
+This function logs the messages passed as the second parameter if the value passed as first parameter is lesser or equal than the value passed to the B<pb_log_init> function.
+
+Here is a usage example:
+
+  pb_log_init(2,\*STDERR);
+  pb_log(1,"Hello World 1\n");
+  pb_log(2,"Hello World 2\n");
+  pb_log(3,"Hello World 3\n");
+
+  will print:
+  
+  Hello World 1
+  Hello World 2
+
+=cut 
+
+sub pb_log {
+
+my $dlevel = shift;
+my $msg = shift;
+
+print $pbLOG "$msg" if ($dlevel <= $pbdebug);
+print "$msg" if (($dlevel == 0) && ($pbLOG != \*STDOUT));
+}
+
+
+=item B<pb_display_file>
+
+This function print the content of the file passed in parameter.
+If a second parameter is given, this is the descriptor of the logfile to write to in addtion to STDOUT.
+
+This is a cat equivalent function.
+
+=cut
+
+sub pb_display_file {
+
+my $file=shift;
+my $desc=shift || undef;
+
+return if (not -f $file);
+my $cnt = pb_get_content($file);
+print "$cnt\n";
+print $desc "$cnt\n" if (defined $desc);
+}
+
+=item B<pb_get_content>
+
+This function returns the content of the file passed in parameter.
+
+=cut
+
+sub pb_get_content {
+
+my $file=shift;
+
+my $bkp = $/;
+undef $/;
+open(R,$file) || die "Unable to open $file: $!";
+my $content=<R>;
+close(R);
+chomp($content);
+$/ = $bkp;
+return($content);
+}
+
+
+=item B<pb_set_content>
+
+This function put the content of a variable passed as second parameter into the file passed as first parameter.
+
+=cut
+
+sub pb_set_content {
+
+my $file=shift;
+my $content=shift;
+
+my $bkp = $/;
+undef $/;
+open(R,"> $file") || die "Unable to write to $file: $!";
+print R "$content";
+close(R);
+$/ = $bkp;
+}
+
+=item B<pb_syntax_init>
+
+This function initializes the global variable used by the pb_syntax function.
+
+The parameter is the message string which will be printed when calling pb_syntax
+
+=cut
+
+sub pb_syntax_init {
+
+$pbsynmsg = shift || "Error";
+}
+
+=item B<pb_syntax>
+
+This function prints the syntax expected by the application, based on pod2usage, and exits.
+The first parameter is the return value of the exit.
+The second parameter is the verbosity as expected by pod2usage.
+
+Cf: man Pod::Usage
+
+=cut
+
+sub pb_syntax {
+
+my $exit_status = shift || -1;
+my $verbose_level = shift || 0;
+
+my $filehandle = \*STDERR;
+
+$filehandle = \*STDOUT if ($exit_status == 0);
+
+pod2usage( { -message => $pbsynmsg,
+             -exitval => $exit_status  ,
+             -verbose => $verbose_level,
+             -output  => $filehandle } );
+}
+
+=item B<pb_temp_init>
+
+This function initializes the environemnt variable PBTMP to a random value. This directory can be safely used during the whole program, it will be removed at the end automatically.
+
+=cut
+
+sub pb_temp_init {
+
+if (not defined $ENV{'TMPDIR'}) {
+	$ENV{'TMPDIR'}="/tmp";
+}
+$ENV{'PBTMP'} = tempdir( "pb.XXXXXXXXXX", DIR => $ENV{'TMPDIR'}, CLEANUP => 1 );
+}
+
+=item B<pb_get_arch>
+
+This function returns the architecture of our local environment and
+standardize on i386 for those platforms. It also solves issues where a i386 VE on x86_64 returns x86_64 wrongly
+
+=cut
+
+sub pb_get_arch {
+
+my $arch = `uname -m`;
+chomp($arch);
+$arch =~ s/i.86/i386/;
+# For Solaris
+$arch =~ s/i86pc/i386/;
+
+return($arch);
+}
+
+=item B<pb_check_requirements>
+
+This function checks that the commands needed for the subsystem are indeed present. 
+The required commands are passed as a coma separated string as first parameter.
+The optional commands are passed as a coma separated string as second parameter.
+
+=cut
+
+sub pb_check_requirements {
+
+my $req = shift || undef;
+my $opt = shift || undef;
+my $appname = shift || undef;
+
+my ($req2,$opt2) = (undef,undef);
+$req2 = $req->{$appname} if (defined $req and defined $appname);
+$opt2 = $opt->{$appname} if (defined $opt and defined $appname);
+
+# cmds is a string of coma separated commands
+if (defined $req2) {
+	foreach my $file (split(/,/,$req2)) {
+		pb_check_req($file,0);
+	}
+}
+
+# opts is a string of coma separated commands
+if (defined $opt2) {
+	foreach my $file (split(/,/,$opt2)) {
+		pb_check_req($file,1);
+	}
+}
+}
+
+=item B<pb_check_req>
+
+This function checks existence of a command and return its full pathname.
+The command name is passed as first parameter.
+The second parameter should be 0 if the command is mandatory, 1 if optional.
+
+=cut
+
+sub pb_check_req {
+
+my $file = shift;
+my $opt = shift || 1;
+my $found = undef;
+
+pb_log(2,"Checking availability of $file...");
+# Check for all dirs in the PATH
+foreach my $p (split(/:/,$ENV{'PATH'})) {
+	if (-x "$p/$file") {
+		$found =  "$p/$file";
+		last;
+	}
+}
+
+if (not $found) {
+	pb_log(2,"KO\n");
+	if ($opt eq 1) {
+		pb_log(2,"Unable to find optional command $file\n");
+	} else {
+		die pb_log(0,"Unable to find required command $file\n");
+	}
+} else {
+	pb_log(2,"OK\n");
+	return($found);
+}
+}
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Distribution.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Distribution.pm	(revision 1212)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Distribution.pm	(revision 1212)
@@ -0,0 +1,604 @@
+#!/usr/bin/perl -w
+#
+# Creates common environment for distributions
+#
+# $Id$
+#
+
+package ProjectBuilder::Distribution;
+
+use strict;
+use Data::Dumper;
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Conf;
+use File::Basename;
+use File::Copy;
+
+# Global vars
+# Inherit from the "Exporter" module which handles exporting functions.
+ 
+use vars qw($VERSION $REVISION @ISA @EXPORT);
+use Exporter;
+ 
+# Export, by default, all the functions into the namespace of
+# any code which uses this module.
+ 
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pb_distro_conffile pb_distro_get pb_distro_getlsb pb_distro_installdeps pb_distro_getdeps pb_distro_only_deps_needed pb_distro_setuprepo pb_distro_setuposrepo pb_distro_get_param pb_distro_get_context);
+($VERSION,$REVISION) = pb_version_init();
+
+=pod
+
+=head1 NAME
+
+ProjectBuilder::Distribution, part of the project-builder.org - module dealing with distribution detection
+
+=head1 DESCRIPTION
+
+This modules provides functions to allow detection of Linux distributions, and giving back some attributes concerning them.
+
+=head1 SYNOPSIS
+
+  use ProjectBuilder::Distribution;
+
+  # 
+  # Return information on the running distro
+  #
+  my $pbos = pb_distro_get_context();
+  print "distro tuple: ".Dumper($pbos->name, $pbos->ver, $pbos->fam, $pbos->type, $pbos->pbsuf, $pbos->pbupd, $pbos->pbins, $pbos->arch)."\n";
+  # 
+  # Return information on the requested distro
+  #
+  my $pbos = pb_distro_get_context("ubuntu-7.10-x86_64");
+  print "distro tuple: ".Dumper($pbos->name, $pbos->ver, $pbos->fam, $pbos->type, $pbos->pbsuf, $pbos->pbupd, $pbos->pbins, $pbos->arch)."\n";
+  # 
+  # Return information on the running distro
+  #
+  my ($ddir,$dver) = pb_distro_get();
+
+=head1 USAGE
+
+=over 4
+
+=item B<pb_distro_conffile>
+
+This function returns the mandatory configuration file used for distribution/OS detection
+
+=cut
+
+sub pb_distro_conffile {
+
+return("CCCC/pb.conf");
+}
+
+
+=item B<pb_distro_init>
+
+This function returns a hash of parameters indicating the distribution name, version, family, type of build system, suffix of packages, update command line, installation command line and architecture of the underlying Linux distribution. The value of the fields may be "unknown" in case the function was unable to recognize on which distribution it is running.
+
+As an example, Ubuntu and Debian are in the same "du" family. As well as RedHat, RHEL, CentOS, fedora are on the same "rh" family.
+Mandriva, Open SuSE and Fedora have all the same "rpm" type of build system. Ubuntu and Debian have the same "deb" type of build system. 
+And "fc" is the extension generated for all Fedora packages (Version will be added by pb).
+All this information is stored in an external configuration file typically at /etc/pb/pb.conf
+
+When passing the distribution name and version as parameters, the B<pb_distro_init> function returns the parameter of that distribution instead of the underlying one.
+
+Cf: http://linuxmafia.com/faq/Admin/release-files.html
+Ideas taken from http://search.cpan.org/~kerberus/Linux-Distribution-0.14/lib/Linux/Distribution.pm
+
+=cut
+
+
+sub pb_distro_init {
+
+my $pbos = {
+	'name' => undef,
+	'version' => undef,
+	'arch' => undef,
+	'family' => "unknown",
+	'suffix' => "unknown",
+	'update' => "unknown",
+	'install' => "unknown",
+	'type' => "unknown",
+	'os' => "unknown",
+	'nover' => "false",
+	'rmdot' => "false",
+	};
+$pbos->{'name'} = shift;
+$pbos->{'version'} = shift;
+$pbos->{'arch'} = shift;
+
+# Adds conf file for distribution description
+# the location of the conf file is finalyzed at install time
+# depending whether we deal with package install or tar file install
+pb_conf_add(pb_distro_conffile());
+
+# If we don't know which distribution we're on, then guess it
+($pbos->{'name'},$pbos->{'version'}) = pb_distro_get() if ((not defined $pbos->{'name'}) || (not defined $pbos->{'version'}));
+
+# For some rare cases, typically nover ones
+$pbos->{'name'} = "unknown" if (not defined $pbos->{'name'});
+$pbos->{'version'} = "unknown" if (not defined $pbos->{'version'});
+
+# Initialize arch
+$pbos->{'arch'} = pb_get_arch() if (not defined $pbos->{'arch'});
+
+# Dig into the tuple to find the best answer
+# Do NOT factorize here, as it won't work as of now for hash creation
+$pbos->{'family'} = pb_distro_get_param($pbos,pb_conf_get("osfamily"));
+$pbos->{'type'} = pb_distro_get_param($pbos,pb_conf_get("ostype"));
+($pbos->{'os'},$pbos->{'install'},$pbos->{'suffix'},$pbos->{'nover'},$pbos->{'rmdot'},$pbos->{'update'}) = pb_distro_get_param($pbos,pb_conf_get("os","osins","ossuffix","osnover","osremovedotinver","osupd"));
+#($pbos->{'family'},$pbos->{'type'},$pbos->{'os'},$pbos->{'install'},$pbos->{'suffix'},$pbos->{'nover'},$pbos->{'rmdot'},$pbos->{'update'}) = pb_distro_get_param($pbos,pb_conf_get("osfamily","ostype","os","osins","ossuffix","osnover","osremovedotinver","osupd"));
+
+# Some OS have no interesting version
+$pbos->{'version'} = "nover" if ((defined $pbos->{'nover'}) && ($pbos->{'nover'} eq "true"));
+
+# For some OS remove the . in version name for extension
+my $dver2 = $pbos->{'version'};
+$dver2 =~ s/\.//g if ((defined $pbos->{'rmdot'}) && ($pbos->{'rmdot'} eq "true"));
+
+if ((not defined $pbos->{'suffix'}) || ($pbos->{'suffix'} eq "")) {
+	# By default suffix is a concatenation of name and version
+	$pbos->{'suffix'} = ".$pbos->{'name'}$dver2" 
+} else {
+	# concat just the version to what has been found
+	$pbos->{'suffix'} = ".$pbos->{'suffix'}$dver2";
+}
+
+#	if ($arch eq "x86_64") {
+#	$opt="--exclude=*.i?86";
+#	}
+pb_log(2,"DEBUG: pb_distro_init: ".Dumper($pbos)."\n");
+
+return($pbos);
+}
+
+=item B<pb_distro_get>
+
+This function returns a list of 2 parameters indicating the distribution name and version of the underlying Linux distribution. The value of those 2 fields may be "unknown" in case the function was unable to recognize on which distribution it is running.
+
+On my home machine it would currently report ("mandriva","2010.2").
+
+=cut
+
+sub pb_distro_get {
+
+# 1: List of files that unambiguously indicates what distro we have
+# 2: List of files that ambiguously indicates what distro we have
+# 3: Should have the same keys as the previous one. If ambiguity, which other distributions should be checked
+# 4: Matching Rg. Expr to detect distribution and version
+my ($single_rel_files, $ambiguous_rel_files,$distro_similar,$distro_match) = pb_conf_get("osrelfile","osrelambfile","osambiguous","osrelexpr");
+
+my $release;
+my $distro;
+
+# Begin to test presence of non-ambiguous files
+# that way we reduce the choice
+my ($d,$r);
+while (($d,$r) = each %$single_rel_files) {
+	if (defined $ambiguous_rel_files->{$d}) {
+		print STDERR "The key $d is considered as both unambiguous and ambigous.\n";
+		print STDERR "Please fix your configuration file.\n"
+	}
+	if (-f "$r" && ! -l "$r") {
+		my $tmp=pb_get_content("$r");
+		# Found the only possibility. 
+		# Try to get version and return
+		if (defined ($distro_match->{$d})) {
+			($release) = $tmp =~ m/$distro_match->{$d}/m;
+		} else {
+			print STDERR "Unable to find $d version in $r (non-ambiguous)\n";
+			print STDERR "Please report to the maintainer bruno_at_project-builder.org\n";
+			$release = "unknown";
+		}
+		return($d,$release);
+	}
+}
+
+# Now look at ambiguous files
+# Ubuntu before 10.04 includes a /etc/debian_version file that creates an ambiguity with debian
+# So we need to look at distros in reverse alphabetic order to treat ubuntu always first via lsb
+foreach $d (reverse keys %$ambiguous_rel_files) {
+	$r = $ambiguous_rel_files->{$d};
+	if (-f "$r" && !-l "$r") {
+		# Found one possibility. 
+		# Get all distros concerned by that file
+		my $tmp=pb_get_content("$r");
+		my $found = 0;
+		my $ptr = $distro_similar->{$d};
+		pb_log(2,"amb: ".Dumper($ptr)."\n");
+		$release = "unknown";
+		foreach my $dd (split(/,/,$ptr)) {
+			pb_log(2,"check $dd\n");
+			# Try to check pattern
+			if (defined $distro_match->{$dd}) {
+				pb_log(2,"cmp: $distro_match->{$dd} - vs - $tmp\n");
+				($release) = $tmp =~ m/$distro_match->{$dd}/m;
+				if ((defined $release) && ($release ne "unknown")) {
+					$distro = $dd;
+					$found = 1;
+					last;
+				}
+			}
+		}
+		if ($found == 0) {
+			print STDERR "Unable to find $d version in $r (ambiguous)\n";
+			print STDERR "Please report to the maintainer bruno_at_project-builder.org\n";
+			$release = "unknown";
+		} else {
+			return($distro,$release);
+		}
+	}
+}
+return("unknown","unknown");
+}
+
+=item B<pb_distro_getlsb>
+
+This function returns the 5 lsb values LSB version, distribution ID, Description, release and codename.
+As entry it takes an optional parameter to specify whether the output is short or not.
+
+=cut
+
+sub pb_distro_getlsb {
+
+my $s = shift;
+pb_log(3,"Entering pb_distro_getlsb\n");
+
+my ($ambiguous_rel_files) = pb_conf_get("osrelambfile");
+my $lsbf = $ambiguous_rel_files->{"lsb"};
+
+# LSB has not been configured.
+if (not defined $lsbf) {
+	print STDERR "no lsb entry defined for osrelambfile\n";
+	die "You modified upstream delivery and lost !\n";
+}
+
+if (-r $lsbf) {
+	my $rep = pb_get_content($lsbf);
+	# Create elementary fields
+	my ($c, $r, $d, $i, $l) = ("", "", "", "", "");
+	for my $f (split(/\n/,$rep)) {
+		pb_log(3,"Reading file part ***$f***\n");
+		$c = $f if ($f =~ /^DISTRIB_CODENAME/);
+		$c =~ s/DISTRIB_CODENAME=/Codename:\t/;
+		$r = $f if ($f =~ /^DISTRIB_RELEASE/);
+		$r =~ s/DISTRIB_RELEASE=/Release:\t/;
+		$d = $f if ($f =~ /^DISTRIB_DESCRIPTION/);
+		$d =~ s/DISTRIB_DESCRIPTION=/Description:\t/;
+		$d =~ s/"//g;
+		$i = $f if ($f =~ /^DISTRIB_ID/);
+		$i =~ s/DISTRIB_ID=/Distributor ID:\t/;
+		$l = $f if ($f =~ /^LSB_VERSION/);
+		$l =~ s/LSB_VERSION=/LSB Version:\t/;
+	}
+	my $regexp = "^[A-z ]*:[\t ]*";
+	$c =~ s/$regexp// if (defined $s);
+	$r =~ s/$regexp// if (defined $s);
+	$d =~ s/$regexp// if (defined $s);
+	$i =~ s/$regexp// if (defined $s);
+	$l =~ s/$regexp// if (defined $s);
+	return($l, $i, $d, $r, $c);
+} else {
+	print STDERR "Unable to read $lsbf file\n";
+	die "Please report to the maintainer bruno_at_project-builder.org\n";
+}
+}
+
+=item B<pb_distro_installdeps>
+
+This function install the dependencies required to build the package on a distro.
+Dependencies can be passed as a parameter in which case they are not computed
+
+=cut
+
+sub pb_distro_installdeps {
+
+# SPEC file
+my $f = shift || undef;
+my $pbos = shift;
+my $deps = shift || undef;
+
+# Protection
+return if (not defined $pbos->{'install'});
+
+# Get dependencies in the build file if not forced
+$deps = pb_distro_getdeps($f, $pbos) if (not defined $deps);
+pb_log(2,"deps: $deps\n");
+return if ((not defined $deps) || ($deps =~ /^\s*$/));
+if ($deps !~ /^[ 	]*$/) {
+	# This may not be // proof. We should test for availability of repo and sleep if not
+	pb_system("$pbos->{'install'} $deps","Installing dependencies ($deps)");
+	}
+}
+
+=item B<pb_distro_getdeps>
+
+This function computes the dependencies indicated in the build file and return them as a string of packages to install
+
+=cut
+
+sub pb_distro_getdeps {
+
+my $f = shift || undef;
+my $pbos = shift;
+
+my $regexp = "";
+my $deps = "";
+my $sep = $/;
+
+# Protection
+return("") if (not defined $pbos->{'type'});
+return("") if (not defined $f);
+
+pb_log(3,"entering pb_distro_getdeps: $pbos->{'type'} - $f\n");
+if ($pbos->{'type'} eq  "rpm") {
+	# In RPM this could include files, but we do not handle them atm.
+	$regexp = '^BuildRequires:(.*)$';
+} elsif ($pbos->{'type'} eq "deb") {
+	$regexp = '^Build-Depends:(.*)$';
+} elsif ($pbos->{'type'} eq "ebuild") {
+	$sep = '"'.$/;
+	$regexp = '^DEPEND="(.*)"\n'
+} else {
+	# No idea
+	return("");
+}
+pb_log(2,"regexp: $regexp\n");
+
+# Preserve separator before using the one we need
+my $oldsep = $/;
+$/ = $sep;
+open(DESC,"$f") || die "Unable to open $f";
+while (<DESC>) {
+	pb_log(4,"read: $_\n");
+	next if (! /$regexp/);
+	chomp();
+	# What we found with the regexp is the list of deps.
+	pb_log(2,"found deps: $_\n");
+	s/$regexp/$1/i;
+	# Remove conditions in the middle and at the end for deb
+	s/\(\s*[><=]+.*\)[^,]*,/,/g;
+	s/\(\s*[><=]+.*$//g;
+	# Same for rpm
+	s/[><=]+[^,]*,/,/g;
+	s/[><=]+.*$//g;
+	# Improve string format (remove , and spaces at start, end and in double
+	s/,/ /g;
+	s/^\s*//;
+	s/\s*$//;
+	s/\s+/ /g;
+	$deps .= " ".$_;
+}
+close(DESC);
+$/ = $oldsep;
+pb_log(2,"now deps: $deps\n");
+my $deps2 = pb_distro_only_deps_needed($pbos,$deps);
+return($deps2);
+}
+
+
+=item B<pb_distro_only_deps_needed>
+
+This function returns only the dependencies not yet installed
+
+=cut
+
+sub pb_distro_only_deps_needed {
+
+my $pbos = shift;
+my $deps = shift || undef;
+
+return("") if ((not defined $deps) || ($deps =~ /^\s*$/));
+my $deps2 = "";
+# Avoid to install what is already there
+foreach my $p (split(/ /,$deps)) {
+	if ($pbos->{'type'} eq  "rpm") {
+		my $res = pb_system("rpm -q --whatprovides --quiet $p","","quiet");
+		next if ($res eq 0);
+	} elsif ($pbos->{'type'} eq "deb") {
+		my $res = pb_system("dpkg -L $p","","quiet");
+		next if ($res eq 0);
+	} elsif ($pbos->{'type'} eq "ebuild") {
+	} else {
+		# Not reached
+	}
+	pb_log(2,"found deps2: $p\n");
+	$deps2 .= " $p";
+}
+
+$deps2 =~ s/^\s*//;
+pb_log(2,"now deps2: $deps2\n");
+return($deps2);
+}
+
+=item B<pb_distro_setuposrepo>
+
+This function sets up potential additional repository for the setup phase
+
+=cut
+
+sub pb_distro_setuposrepo {
+
+my $pbos = shift;
+
+pb_distro_setuprepo_gen($pbos,pb_distro_conffile(),"osrepo");
+}
+
+=item B<pb_distro_setuprepo>
+
+This function sets up potential additional repository to the build environment
+
+=cut
+
+sub pb_distro_setuprepo {
+
+my $pbos = shift;
+
+pb_distro_setuprepo_gen($pbos,"$ENV{'PBDESTDIR'}/pbrc","addrepo");
+}
+
+=item B<pb_distro_setuprepo_gen>
+
+This function sets up in a generic way potential additional repository 
+
+=cut
+
+sub pb_distro_setuprepo_gen {
+
+my $pbos = shift;
+my $pbconf = shift || undef;
+my $pbkey = shift || undef;
+
+return if (not defined $pbconf);
+return if (not defined $pbkey);
+my ($addrepo) = pb_conf_read($pbconf,$pbkey);
+return if (not defined $addrepo);
+
+my $param = pb_distro_get_param($pbos,$addrepo);
+return if ($param eq "");
+
+# Loop on the list of additional repo
+foreach my $i (split(/,/,$param)) {
+
+	my ($scheme, $account, $host, $port, $path) = pb_get_uri($i);
+	my $bn = basename($i);
+
+	# The repo file can be local or remote. download or copy at the right place
+	if (($scheme eq "ftp") || ($scheme eq "http")) {
+		pb_system("wget -O $ENV{'PBTMP'}/$bn $i","Donwloading additional repository file $i");
+	} else {
+		copy($i,$ENV{'PBTMP'}/$bn);
+	}
+
+	# The repo file can be a real file or a package
+	if ($pbos->{'type'} eq "rpm") {
+		if ($bn =~ /\.rpm$/) {
+			my $pn = $bn;
+			$pn =~ s/\.rpm//;
+			if (pb_system("rpm -q --quiet $pn","","quiet") != 0) {
+				pb_system("sudo rpm -Uvh $ENV{'PBTMP'}/$bn","Adding package to setup repository");
+			}
+		} elsif ($bn =~ /\.repo$/) {
+			# Yum repo
+			pb_system("sudo mv $ENV{'PBTMP'}/$bn /etc/yum.repos.d","Adding yum repository") if (not -f "/etc/yum.repos.d/$bn");
+		} elsif ($bn =~ /\.addmedia/) {
+			# URPMI repo
+			# We should test that it's not already a urpmi repo
+			pb_system("chmod 755 $ENV{'PBTMP'}/$bn ; sudo $ENV{'PBTMP'}/$bn 2>&1 > /dev/null","Adding urpmi repository");
+		} else {
+			pb_log(0,"Unable to deal with repository file $i on rpm distro ! Please report to dev team\n");
+		}
+	} elsif ($pbos->{'type'} eq "deb") {
+		if (($bn =~ /\.sources.list$/) && (not -f "/etc/apt/sources.list.d/$bn")) {
+			pb_system("sudo mv $ENV{'PBTMP'}/$bn /etc/apt/sources.list.d","Adding apt repository");
+			pb_system("sudo apt-get update","Updating apt repository");
+		} else {
+			pb_log(0,"Unable to deal with repository file $i on deb distro ! Please report to dev team\n");
+		}
+	} else {
+		pb_log(0,"Unable to deal with repository file $i on that distro ! Please report to dev team\n");
+	}
+}
+return;
+}
+
+=item B<pb_distro_get_param>
+
+This function gets the parameter in the conf file from the most precise tuple up to default
+
+=cut
+
+sub pb_distro_get_param {
+
+my @param;
+my $param;
+my $pbos = shift;
+
+pb_log(2,"DEBUG: pb_distro_get_param on $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} for ".Dumper(@_)."\n");
+foreach my $opt (@_) {
+	if (defined $opt->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) {
+		$param = $opt->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"};
+	} elsif (defined $opt->{"$pbos->{'name'}-$pbos->{'version'}"}) {
+		$param = $opt->{"$pbos->{'name'}-$pbos->{'version'}"};
+	} elsif (defined $opt->{"$pbos->{'name'}"}) {
+		$param = $opt->{"$pbos->{'name'}"};
+	} elsif (defined $opt->{$pbos->{'family'}}) {
+		$param = $opt->{$pbos->{'family'}};
+	} elsif (defined $opt->{$pbos->{'type'}}) {
+		$param = $opt->{$pbos->{'type'}};
+	} elsif (defined $opt->{$pbos->{'os'}}) {
+		$param = $opt->{$pbos->{'os'}};
+	} elsif (defined $opt->{"default"}) {
+		$param = $opt->{"default"};
+	} else {
+		$param = "";
+	}
+
+	# Allow replacement of variables inside the parameter such as name, version, arch for rpmbootstrap 
+	# but not shell variable which are backslashed
+	if ($param =~ /[^\\]\$/) {
+		pb_log(3,"Expanding variable on $param\n");
+		eval { $param =~ s/(\$\w+->{\'\w+\'})/$1/eeg };
+	}
+	push @param,$param;
+}
+
+pb_log(2,"DEBUG: pb_distro_get_param on $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} returns ==".Dumper(@param)."==\n");
+
+# Return one param in scalar context, an array if not.
+my $nb = @param;
+if ($nb eq 1) {
+	return($param);
+} else {
+	return(@param);
+}
+}
+
+=item B<pb_distro_get_context>
+
+This function gets the OS context passed as parameter and return the corresponding distribution hash
+
+=cut
+
+
+sub pb_distro_get_context {
+
+my $os = shift;
+my $pbos;
+
+if (defined $os) {
+	my ($name,$ver,$darch) = split(/-/,$os);
+	pb_log(0,"Bad format for $os") if ((not defined $name) || (not defined $ver) || (not defined $darch)) ;
+	chomp($darch);
+	$pbos = pb_distro_init($name,$ver,$darch);
+} else {
+	$pbos = pb_distro_init();
+}
+return($pbos);
+}
+
+=back 
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+None exists for the moment.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+
+1;
Index: /0.11.2/pb-modules/lib/ProjectBuilder/Log.pm
===================================================================
--- /0.11.2/pb-modules/lib/ProjectBuilder/Log.pm	(revision 1153)
+++ /0.11.2/pb-modules/lib/ProjectBuilder/Log.pm	(revision 1153)
@@ -0,0 +1,276 @@
+package ProjectBuilder::Log;
+
+# this class can be used to store and analyze the complete log from pb
+# this includes more than one vm
+
+use strict;
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Log::Item;
+
+sub new {
+	# contains the object name (here PBLog)
+	my $object = shift;
+	my $self = {};
+
+	# $self should point to an object of type $object
+	bless($self, $object);
+   
+	# this array stores our childs
+	$self->{'logitems'} = [];
+
+	return($self);
+}
+
+# returns number of handled ProjectBuilder::Log::Item's
+sub countItems {
+	my $self = shift;
+	return scalar(@{$self->{'logitems'}});
+}
+
+# returns an array of all names of handled ProjectBuilder::Log::Item's
+# the name is the vm name (e.g. ubuntu-10.04-i386 (by default))
+sub itemNames {
+	my $self = shift;
+	my @result = ();
+
+	foreach my $item (@{$self->{'logitems'}}) {
+		push(@result, $item->name());
+	}
+	return @result;
+}
+
+# set's the log for ProjectBuilder::Log::item $vmname
+# if such an item is not present, one is added
+# $log should only contain the log of one machine
+sub setLog {
+	my $self = shift;
+	my $vmname = shift;
+	my $log = shift;
+	  
+	my $logitem = $self->findItem($vmname);
+	if (!$logitem) {
+		$logitem = new ProjectBuilder::Log::Item($vmname);
+		push(@{$self->{'logitems'}}, $logitem);
+	}
+	$logitem->setLog($log);
+}
+
+# used to analyze the complete log of pb
+sub setCompleteLog {
+	my $self = shift;
+	my $log = shift;
+	my $tmplog = "";
+	my $item = undef;
+	  
+	foreach my $line (split("\n", $log)) {
+		if ($line =~ m/^Waiting [0-9]+ s for VM/) {
+			# here starts a new machine, so append the tmplog to the last one
+			if (defined($item)) {
+				$item->setLog($tmplog);
+			}
+			if($line =~ m/VM ([^\s]+)/){
+				$item = new ProjectBuilder::Log::Item($1);
+				push(@{$self->{'logitems'}}, $item);
+				$tmplog = 0;
+			}
+		} else {
+			$tmplog .= $line ."\n";
+		}
+	}
+	if (defined($item) && ($tmplog)) {
+		$item->setLog($tmplog);
+	}
+}
+
+# nums the issues (Warnings and Errors from lintian and rpmlint
+# if no name is given, the total of all ProjectBuilder::Log::Item's is returned
+sub numQaIssues {
+	my $self = shift;
+	my $itemname = shift || "";
+	my $result = 0;
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			$result += scalar($item->qaIssues());
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			$result = $item->numQaIssues();
+		}
+	}
+	return $result;
+}
+
+# returns the issues itself
+# behaves like numQaIssues
+sub qaIssues {
+	my $self = shift;
+	my $itemname = shift || "";
+	my @result = ();
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			push(@result, $item->qaIssues());
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			push(@result, $item->qaIssues());
+		}
+	}
+	return @result;
+}
+
+# same as num qaIssues but for compile errors
+sub numErrors {
+	my $self = shift;
+	my $itemname = shift || "";
+	my $result = 0;
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			$result += $item->numErrors();
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			$result = $item->numErrors();
+		}
+	}
+	return $result;
+}
+
+# returns the compile errors itself
+# behaves like numQaIssues
+sub errors {
+	my $self = shift;
+	my $itemname = shift || "";
+	my @result = ();
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			push(@result, $item->errors());
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			push(@result, $item->errors());
+		}
+	}
+	return @result;
+}
+
+# same as num qaIssues but for compile warnings
+sub numWarnings {
+	my $self = shift;
+	my $itemname = shift || "";
+	my $result = 0;
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			$result += $item->numWarnings();
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			$result = $item->numWarnings();
+		}
+	}
+	return $result;
+}
+
+# returns the compile warnings itself
+# behaves like numQaIssues
+sub warnings {
+	my $self = shift;
+	my $itemname = shift || "";
+	my @result = ();
+
+	if ($itemname eq "") {
+		# no machine selected, so return combine from all items
+		foreach my $item (@{$self->{'logitems'}}) {
+			push(@result, $item->warnings());
+		}
+	} else {
+		my $item = $self->findItem($itemname);
+		if ($item) {
+			push(@result, $item->warnings());
+		}
+	}
+	return @result;
+}
+
+# prints out a summary of the log
+sub summary {
+	my $self = shift;
+	my $summary = "";
+
+	$summary = "Items: ". $self->countItems();
+	$summary .= " (QA Issues: ". $self->numQaIssues();
+	$summary .= ", Warnings: ". $self->numWarnings();
+	$summary .= ", Errors: ". $self->numErrors() .")\n";
+	foreach my $name ($self->itemNames()) {
+		$summary .= $name ." (QA Issues: ". $self->numQaIssues($name);
+		$summary .= ", Warnings: ". $self->numWarnings($name);
+		$summary .= ", Errors: ". $self->numErrors($name) .")\n";
+	}
+	return $summary;
+}
+
+# mails the summary to $to
+sub mailSummary {
+	eval
+	{
+		require Mail::Sendmail;
+		Mail::Sendmail->import();
+	};
+	if ($@) {
+		# Mail::Sendmail not found not sending mail !
+		pb_log(0,"No Mail::Sendmail module found so not sending any mail !\n");
+	} else {
+		my $self = shift;
+		my $to = shift || "";
+
+		if ($to eq "") {
+			pb_log(0,"Please give a To: address\n");
+			return;
+		}
+		my %mail = (	
+			To => $to,
+			From => "pb\@localhost",
+			Message => $self->summary()
+		);
+		if (! sendmail(%mail)) { 
+			if (defined $Mail::Sendmail::error) {
+				return $Mail::Sendmail::error;
+			} else {
+				return "Unkown error";
+			}
+		}
+		pb_log(0,"Mail send to ". $to ."\n");
+	}
+}
+
+# private part (perl does not no about private, but it is meant so)
+# find's item with name $vmname in handled OB::Log::Item's
+sub findItem {
+	my $self = shift;
+	my $vmname = shift;
+
+	# find existing item or add item if needed
+	foreach my $logitem (@{$self->{'logitems'}}) {
+		if ($logitem->name eq $vmname) {
+			return $logitem;
+		}
+	}
+	return 0;
+}
+
+1;
Index: /0.11.2/pb-modules/Makefile.PL
===================================================================
--- /0.11.2/pb-modules/Makefile.PL	(revision 1090)
+++ /0.11.2/pb-modules/Makefile.PL	(revision 1090)
@@ -0,0 +1,64 @@
+use 5.006001;
+use ExtUtils::MakeMaker;
+use strict;
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+	NAME         => 'PBPKG',
+	DISTNAME     => 'PBPKG',
+	VERSION      => 'PBVER',
+	INST_SCRIPT  => 'blib/bin',
+	INSTALLDIRS  => 'perl',
+	PREREQ_PM    => {
+			#HTTP::Headers                    => 1.59,
+			#Template                         => 0,
+	},    # e.g., Module::Name => 1.1
+	#ABSTRACT_FROM => 'bin/pb',   # retrieve abstract from module
+	AUTHOR        => 'Bruno Cornec <bruno#project-builder.org>',
+	EXE_FILES     => [ qw( bin/pbdistrocheck ) ],
+	MAN1PODS      => { 'bin/pbdistrocheck' => '$(INST_MAN1DIR)/pbdistrocheck.$(MAN1EXT)', },
+	MAN3PODS      => {	'lib/ProjectBuilder/Distribution.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Distribution.$(MAN3EXT)',
+						'lib/ProjectBuilder/Conf.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Conf.$(MAN3EXT)',
+						'lib/ProjectBuilder/Display.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Display.$(MAN3EXT)',
+						'lib/ProjectBuilder/Log.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Log.$(MAN3EXT)',
+						'lib/ProjectBuilder/Log/Item.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Log::Item.$(MAN3EXT)',
+						'lib/ProjectBuilder/Base.pm' => '$(INST_MAN3DIR)/ProjectBuilder::Base.$(MAN3EXT)', },
+);
+
+package MY;
+
+sub postamble {
+
+	# Determine location of etc conf files
+	my $text ="";
+
+	# Grab out any CONFDIR or MANDIR param
+	my $confdir = undef;
+	my $mandir = undef;
+
+	while (my $arg = shift @ARGV) {
+		my ($key, $value) = split /=/, $arg;
+		if ($key =~ /^CONFDIR$/) {
+			$confdir = $value;
+		} elsif ($key =~ /^MANDIR$/) {
+			$mandir = $value;
+		}
+	}
+
+	my $etcdir = $confdir || "/usr/local/etc/pb";
+	my $mandir = $mandir || "/usr/local/share/man";
+
+	# Use that conf dir info to modify Distribution.pm
+	system("perl -pi -e \"s~CCCC~$etcdir~\" lib/ProjectBuilder/Distribution.pm");
+
+	$text .= "install ::\n";
+	$text .= "\t".'mkdir -p $(DESTDIR)'."$etcdir\n";
+	$text .= "\t".'chmod 755 $(DESTDIR)'."$etcdir\n";
+	$text .= "\t".'cp etc/pb.conf $(DESTDIR)'."$etcdir\n";
+
+	# Produce the man page for pb.conf
+	$text .= "\t".'mkdir -p $(DESTDIR)'."$mandir/man5\n";
+	$text .= "\t".'pod2man --section=5 etc/pb.conf.pod > $(DESTDIR)'."$mandir/man5/pb.conf.5\n";
+	return($text);
+}
Index: /0.11.2/pb-modules/COPYING
===================================================================
--- /0.11.2/pb-modules/COPYING	(revision 402)
+++ /0.11.2/pb-modules/COPYING	(revision 402)
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
Index: /0.11.2/pb-modules/bin/pbdistrocheck
===================================================================
--- /0.11.2/pb-modules/bin/pbdistrocheck	(revision 1177)
+++ /0.11.2/pb-modules/bin/pbdistrocheck	(revision 1177)
@@ -0,0 +1,148 @@
+#!/usr/bin/perl -w
+#
+# Project Builder Distribution Checker
+#
+# $Id$
+#
+# Copyright B. Cornec 2007
+# Provided under the GPL v2
+
+use strict 'vars';
+use Getopt::Long qw(:config auto_abbrev no_ignore_case);
+use Data::Dumper;
+use lib qw (lib);
+use ProjectBuilder::Distribution;
+use ProjectBuilder::Base;
+
+=pod
+
+=head1 NAME
+
+pb, aka project-builder.org - builds packages for your projects
+
+=head1 DESCRIPTION
+
+pb helps you build various packages directly from your project sources.
+pbdistrocheck is a command from the pb project providing the same type of services as lsb_release, but extended.
+
+=head1 SYNOPSIS
+
+pbdistrocheck [-d][-v][-l [-c][-i][-r][-a]][-s] [distro-ver-arch]
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-v|--verbose>
+
+Print a brief help message and exits.
+
+=item B<-a|--all>
+
+print all parameters
+
+=item B<-s|--short>
+
+generate a short format user friendly, comma separated allowing parsing
+
+=item B<-l|--lsb>
+
+generate an LSB compliant output
+
+=item B<-d|--description>
+
+print only description (LSB only)
+
+=item B<-r|--release>
+
+print only release (LSB only)
+
+=item B<-c|--codename>
+
+print only codename (LSB only)
+
+=item B<-i|--id>
+
+print only distribution identificator (LSB only)
+
+=item B<-a|--all>
+
+print all LSB fields
+
+=back 
+
+=head1 ARGUMENTS
+
+arguments are optional. If none given, analyzes the underlying operating system
+If one is given, it should have the format osname-version-architecture, and in that case pbdistrocheck will provide all the information related to that OS needed by pb.
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+Cf: L<http://www.mondorescue.org/sympa/info/pb-announce> for announces and L<http://www.mondorescue.org/sympa/info/pb-devel> for the development of the pb project.
+
+=head1 CONFIGURATION FILES
+
+Uses the main /etc/pb/pb.conf (or /usr/local/etc/pb/pb.conf if installed from files) configuration file to give its answers.
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+my %opts;					# CLI Options
+
+GetOptions(
+		"verbose|v+" => \$opts{'v'},
+		"short|s" => \$opts{'s'},
+		"description|d" => \$opts{'d'},
+		"id|i" => \$opts{'i'},
+		"release|r" => \$opts{'r'},
+		"codename|c" => \$opts{'c'},
+		"all|a" => \$opts{'a'},
+		"lsb|l" => \$opts{'l'},
+);
+if (defined $opts{'v'}) {
+	$pbdebug = $opts{'v'};
+}
+pb_log_init($pbdebug, \*STDOUT);
+
+my $dist = shift @ARGV || undef ;
+my $pbos = pb_distro_get_context($dist);
+my $sep = "\n";
+if (defined $opts{'l'}) {
+	# Simulate lsb_release output
+	my ($l,$i,$d,$r,$c) = pb_distro_getlsb($opts{'s'});
+	$sep = " " if (defined $opts{'s'});
+	print $l.$sep;
+	print $i.$sep if (defined $opts{'i'} or defined $opts{'a'});
+	print $d.$sep if (defined $opts{'d'} or defined $opts{'a'});
+	print $r.$sep if (defined $opts{'r'} or defined $opts{'a'});
+	$sep = "" if (defined $opts{'s'});
+	print $c.$sep if (defined $opts{'c'} or defined $opts{'a'});
+	print "\n" if (defined $opts{'s'});
+} else {
+	$sep = "," if (defined $opts{'s'});
+	if (not defined $opts{'s'}) {
+		$pbos->{'os'} = "OS:\t$pbos->{'os'}";
+		$pbos->{'name'} = "Name:\t$pbos->{'name'}";
+		$pbos->{'version'} = "Ver:\t$pbos->{'version'}";
+		$pbos->{'family'} = "Family:\t$pbos->{'family'}";
+		$pbos->{'type'} = "Type:\t$pbos->{'type'}";
+		$pbos->{'suffix'} = "Suffix:\t$pbos->{'suffix'}";
+		$pbos->{'update'} = "Update:\t$pbos->{'update'}";
+		$pbos->{'install'} = "Install:\t$pbos->{'install'}";
+		$pbos->{'arch'} = "Arch:\t$pbos->{'arch'}";
+		print "Project-Builder tuple:\n";
+	}
+	print join($sep,($pbos->{'os'}, $pbos->{'name'}, $pbos->{'version'}, $pbos->{'arch'}, $pbos->{'type'}, $pbos->{'family'}, $pbos->{'suffix'}, $pbos->{'update'}, $pbos->{'install'}))."\n";
+}
Index: /0.11.2/pb-modules/etc/pb.conf
===================================================================
--- /0.11.2/pb-modules/etc/pb.conf	(revision 1254)
+++ /0.11.2/pb-modules/etc/pb.conf	(revision 1254)
@@ -0,0 +1,502 @@
+# $Id$
+# 
+# Main configuration file for project-builder.org
+#
+
+#
+# Define Operating systems
+# 
+
+# 
+# For the following keys osrelfile and osrelambfile:
+# The left member is the key that will be used overall as the OS name
+# The right member is the name of the file that has to be looked at to get OS info
+#
+# It should be noted that the list of all OS is the result of gathering 
+# all the keys from osrelfile and osrelambfile, and the values of osrelambfile
+#
+
+#
+# The following conf info are for pb_distro_get (man ProjectBuilder::Distribution)
+#
+# Those definitions are non-ambiguous (the file only exists for that OS)
+#
+# Tested
+#
+# Gentoo >= 1.6
+osrelfile gentoo = /etc/gentoo-release
+
+# Slackware >= 10.2
+osrelfile slackware = /etc/slackware-version
+
+# Mandriva >=2006.0
+osrelfile mandriva = /etc/mandriva-release
+
+# Mageia
+osrelfile mageia = /etc/mageia-release
+
+# Fedora >= 4
+osrelfile fedora = /etc/fedora-release
+
+# VMWare >= 3
+osrelfile vmware = /etc/vmware-release
+
+# SLES - Doesn't exist as of 10
+osrelfile sles = /etc/sles-release
+
+# Asianux >= 2.2
+osrelfile asianux = /etc/asianux-release
+
+# Solaris 10
+osrelfile solaris = /etc/release
+
+# HP-UX
+# TBC
+osrelfile hpux = /etc/versions/OS
+
+#
+# Untested
+#
+osrelfile knoppix = /etc/knoppix_version
+osrelfile yellowdog = /etc/yellowdog-release
+osrelfile esmith = /etc/e-smith-release
+osrelfile turbolinux = /etc/turbolinux-release
+osrelfile blackcat = /etc/blackcat-release
+osrelfile aurox = /etc/aurox-release
+osrelfile annvix = /etc/annvix-release
+osrelfile cobalt = /etc/cobalt-release
+osrelfile redflag = /etc/redflag-release
+osrelfile ark = /etc/ark-release
+osrelfile pld = /etc/pld-release
+osrelfile nld = /etc/nld-release
+osrelfile lfs = /etc/lfs-release
+osrelfile mk = /etc/mk-release
+osrelfile conectiva = /etc/conectiva-release
+osrelfile immunix = /etc/immunix-release
+osrelfile tinysofa = /etc/tinysofa-release
+osrelfile trustix = /etc/trustix-release
+osrelfile adamantix = /etc/adamantix_version
+osrelfile yoper = /etc/yoper-release
+osrelfile arch = /etc/arch-release
+osrelfile libranet = /etc/libranet_version
+osrelfile valinux = /etc/va-release
+osrelfile yellowdog = /etc/yellowdog-release
+osrelfile ultrapenguin = /etc/ultrapenguin-release
+
+#
+# Here are the ambiguous file association
+# E.g. the file /etc/redhat-release is found on multiple distro such as redhat, rhel, centos, mandrake, vmware
+# These files should not be links
+#
+
+# Mandrake >= 10.1
+osrelambfile mandrake = /etc/mandrakelinux-release
+
+# Debian >= 3.1
+osrelambfile debian = /etc/debian_version
+
+# SuSE >= 10.0
+osrelambfile suse = /etc/SuSE-release
+
+# RedHat >= 7.3
+osrelambfile redhat = /etc/redhat-release
+
+# LSB
+osrelambfile lsb = /etc/lsb-release
+
+#
+# Here is the association between the key and all the OS using the same file
+# The key mentioned here should be the same as the previous ones
+#
+osambiguous mandrake = mandrake,mandriva,mageia
+osambiguous debian = debian,ubuntu
+osambiguous suse = suse,sles,opensuse
+osambiguous redhat = redhat,rhel,centos,mandrake,mandriva,vmware
+osambiguous lsb = ubuntu,lsb
+
+#
+# The next key give the Regular Expression that is used when parsing the previous file
+# to find the version needed in it
+#
+osrelexpr gentoo = .* version (.+)
+osrelexpr slackware = S[^ ]* (.+)$
+osrelexpr mandriva = Mandr[^ ]* [^ ]* release (.+) \(
+osrelexpr mageia = Mageia release (.+) \(
+osrelexpr mandrake = Mandr[^ ]* release (.+) \(
+osrelexpr fedora = Fedora .*release (\d+) \(
+osrelexpr vmware = VMware ESX Server (\d+) \(
+# If you want to differentiate .release for RHEL
+#osrelexpr rhel = Red Hat (?:Enterprise Linux|Linux Advanced Server) .*release ([0-9.]+).* \(
+osrelexpr rhel = Red Hat (?:Enterprise Linux|Linux Advanced Server) .*release ([0-9]+).* \(
+osrelexpr centos = .*CentOS .*release ([0-9]).* 
+osrelexpr redhat = Red Hat Linux release (.+) \(
+osrelexpr sles = SUSE .* Enterprise Server (\d+) \(
+osrelexpr suse = SUSE LINUX (\d.+) \(
+osrelexpr opensuse = openSUSE (\d.+) \(
+osrelexpr asianux = Asianux (?:Server|release) ([0-9]).* \(
+osrelexpr lsb = .*\nDISTRIB_ID=[\"]*LSB.*\nDISTRIB_RELEASE=[\"]*([^\"]+)[\"]*
+osrelexpr ubuntu = .*Ubuntu.*\nDISTRIB_RELEASE=(.+)
+osrelexpr debian = (\d+\.\d+)
+osrelexpr solaris = Solaris (\d+) 
+# TBC
+osrelexpr hpux = VERSION (.*) 
+
+#
+# The following conf info are for pb_distro_init (man ProjectBuilder::Distribution)
+#
+# Ganularity is the following:
+#
+#os (linux)
+# ostype (rpm)
+#   osfamily (md)
+#     osname (mandriva)
+#       osname-ver
+#         osname-ver-arch
+
+# Group OS by family to handle common actions more easily (filtering, install command, ...)
+# Key is osname, Value is osfamily
+osfamily debian = du
+osfamily ubuntu = du
+osfamily gentoo = gen
+osfamily slackware = slack
+osfamily suse = novell
+osfamily opensuse = novell
+osfamily sles = novell
+osfamily redhat = rh
+osfamily rhel = rh
+osfamily fedora = rh
+osfamily vmware = rh
+osfamily asianux = rh
+osfamily centos = rh
+osfamily mandrake = md
+osfamily mandriva = md
+osfamily mageia = md
+osfamily lsb = rh
+osfamily freebsd = bsd
+osfamily solaris = sol
+osfamily hpux = hpux
+
+# Group family by build types
+# Key is osfamily, Value is ostype
+ostype du = deb
+ostype slack = tgz
+ostype gen = ebuild
+ostype novell = rpm
+ostype rh = rpm
+ostype md = rpm
+ostype bsd = port
+ostype sol = pkg
+ostype hpux = sd
+
+# Group ostype by os
+# Key is ostype, Value is os name
+os deb = linux
+os tgz = linux
+os ebuild = linux
+os rpm = linux
+os port = bsd
+os pkg = solaris
+os hpux = hpux
+
+# From the most generic to the most specialized, in term of granularity,
+# give the command to use to install on the OS
+# If none is given, no install can takes place
+# key depends on granularity, value is install command
+
+# Command to update the distribution to latest state
+osupd du = sudo /usr/bin/apt-get update; export DEBIAN_FRONTEND="noninteractive"; sudo /usr/bin/apt-get --quiet -y --force-yes dist-upgrade
+osupd gen = sudo /usr/bin/emerge --update --deep world; sudo /usr/bin/revdep-rebuild
+osupd rpm = sudo /usr/bin/yum clean all; sudo /usr/bin/yum -y update
+osupd md = sudo /usr/bin/urpmi.update -a ; sudo /usr/sbin/urpmi --auto --auto-select --no-suggests
+osupd opensuse = sudo /usr/bin/zypper -n update
+osupd sol = /bin/true
+osupd lsb = /bin/true
+
+# Chaining the commands allow to only test for what is able to be installed, 
+# not the update of the repo which may well be unaccessible if too old
+osins du = sudo /usr/bin/apt-get update ; sudo /usr/bin/apt-get -y install 
+osins gen = sudo /usr/bin/emerge 
+osins rpm = sudo /usr/bin/yum clean all; sudo /usr/bin/yum -y update ; sudo /usr/bin/yum -y install 
+osins rhel-2.1 = sudo /usr/sbin/up2date -y 
+osins rhel-3 = sudo /usr/sbin/up2date -y 
+osins rhel-4 = sudo /usr/sbin/up2date -y 
+osins md = sudo /usr/bin/urpmi.update -a ; sudo /usr/sbin/urpmi --auto --no-suggests
+osins novell = export TERM=linux ; export PATH=\$PATH:/sbin:/usr/sbin ; sudo /sbin/yast2 -i 
+osins opensuse-10.2 = yes | sudo /usr/bin/zypper install
+osins opensuse = sudo /usr/bin/zypper -n install
+osins sol = sudo pkgadd -d
+osins lsb = /bin/true
+
+# From the most generic to the most specialized, in term of granularity,
+# give the suffix for the packages created
+# If none is given, the suffix will be a concatenation of 
+# .osname and version 
+# osname being as defined upper as the keys of osrelfile and osrelambfile
+# depends on granularity, value is install command
+
+ossuffix slackware = slack
+ossuffix asianux = asx
+ossuffix redhat = rh
+ossuffix fedora = fc
+ossuffix vmware = vmw
+ossuffix mandrake = mdk
+ossuffix mandriva = mdv
+ossuffix mageia = mga
+ossuffix lsb = lsb
+ossuffix hpux = sd
+#ossuffix rhel = rhel
+#ossuffix centos = el
+#
+
+# For that OS no need to keep the version
+# Key depends on granularity, value is boolean
+osnover gentoo = true
+
+# For that OS no need to keep the . in the version release
+# Key depends on granularity, value is boolean
+#osremovedotinver mandrake = true
+osremovedotinver redhat = true
+
+# These deps are needed before setupvm|ve can be run. 
+# Install them with your distribution in VM or automatically in VE
+osmindep default = perl,sudo,wget,tar,make,gzip
+
+# These deps are needed for rpmbootstrap to install a base distribution
+# Originally reuse from rinse conf files
+rbsmindep fedora-4 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libtermcap,libxml2,libxml2-python,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,zlib
+#
+rbsmindep fedora-5 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,zlib
+#
+rbsmindep fedora-6 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-7 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-libs,python-numeric,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-8 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-libs,python-numeric,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-9 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,dirmngr,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,event-compat-sysv,expat,fedora-release,fedora-release-notes,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libksba,libselinux,libsepol,libstdc++,libsysfs,libusb,libvolume_id,libxml2,linux-atm-libs,logrotate,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,openldap,openssl,pam,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,yum,yum-metadata-parser,zlib
+rbsmindep fedora-10 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,compat-db45,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,dirmngr,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libksba,libselinux,libsepol,libstdc++,libusb,libvolume_id,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,openldap,openssl,pam,passwd,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-11 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,beecrypt,bzip2-libs,chkconfig,compat-db45,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,dirmngr,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libblkid,libcap,libcom_err,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libksba,libselinux,libsepol,libstdc++,libusb,libvolume_id,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,openldap,openssl,pam,passwd,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-pycurl,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,xz-libs,yum,yum-metadata-parser,zlib
+#rbsmindep fedora-11 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,beecrypt,bzip2-libs,checkpolicy,chkconfig,compat-db45,coreutils,cpio,cracklib,cracklib-dicts,cronie,crontabs,cyrus-sasl-lib,db4,db4-utils,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,diffutils,dirmngr,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libksba,libselinux,libsepol,libssh2,libstdc++,libusb,libvolume_id,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,openldap,openssl,pam,passwd,pcre,pinentry,policycoreutils,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-pycurl,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,strace,sysvinit-tools,tcp_wrappers-libs,tzdata,udev,upstart,ustr,util-linux-ng,vim-minimal,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-12 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,bzip2-libs,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,dirmngr,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcom_err,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libksba,libselinux,libsepol,libssh2,libstdc++,libusb,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,nss-softokn,nss-softokn-freebl,nss-util,openldap,openssl,pam,passwd,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-pycurl,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,xz-libs,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-13 = MAKEDEV,ConsoleKit-libs,audit-libs,basesystem,bash,bzip2-libs,c-ares,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,e2fsprogs,e2fsprogs-libs,elfutils-libelf,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcom_err,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libselinux,libsepol,libssh2,libstdc++,libusb,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,nss-softokn,nss-softokn-freebl,nss-util,openldap,openssl,pam,passwd,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-pycurl,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,xz-libs,yum,yum-metadata-parser,zlib
+#
+rbsmindep fedora-14 = ConsoleKit-libs,audit-libs,basesystem,bash,bzip2-libs,c-ares,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,cyrus-sasl-lib,db4,dbus,dbus-libs,device-mapper,device-mapper-libs,dhclient,e2fsprogs,e2fsprogs-libs,elfutils-libelf,expat,fedora-release,fedora-release-notes,file,file-libs,filesystem,findutils,gamin,gawk,gdbm,glib2,glibc,glibc-common,gnupg2,gpgme,grep,info,initscripts,iproute,iputils,keyutils-libs,krb5-libs,libacl,libattr,libcap,libcom_err,libcurl,libgcc,libgcrypt,libgpg-error,libidn,libselinux,libsepol,libssh2,libstdc++,libusb,libxml2,linux-atm-libs,logrotate,lua,mingetty,module-init-tools,ncurses,ncurses-base,ncurses-libs,net-tools,nspr,nss,nss-softokn,nss-softokn-freebl,nss-util,openldap,openssl,pam,passwd,pcre,pinentry,popt,procps,psmisc,pth,pygpgme,python,python-iniparse,python-libs,python-pycurl,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,rsyslog,sed,setup,shadow-utils,sqlite,sysvinit-tools,tzdata,udev,upstart,util-linux-ng,vim-minimal,xz-libs,yum,yum-metadata-parser,zlib
+#
+rbsmindep centos-4 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,centos-release,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libtermcap,libxml2,libxml2-python,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep rhel-4 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,redhat-release,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep centos-5 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,centos-release,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,nss,nspr,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-iniparse,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+rbsmindep centos-5-ia64 = MAKEDEV,SysVinit,audit-libs,bash,beecrypt,bzip2-libs,centos-release,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,nss,nspr,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-sqlite,python-urlgrabber,readline,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep rhel-5 = MAKEDEV,SysVinit,audit-libs,basesystem,bash,beecrypt,bzip2-libs,coreutils,cracklib,cracklib-dicts,db4,device-mapper,e2fsprogs,e2fsprogs-libs,elfutils-libelf,ethtool,expat,filesystem,findutils,gawk,gdbm,glib2,glibc,glibc-common,grep,info,initscripts,iproute,iputils,krb5-libs,libacl,libattr,libcap,libgcc,libidn,libselinux,libsepol,libstdc++,libsysfs,libtermcap,libxml2,libxml2-python,mcstrans,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,nss,nspr,openssl,pam,pcre,popt,procps,psmisc,python,python-elementtree,python-iniparse,python-sqlite,python-urlgrabber,readline,redhat-release,rpm,rpm-libs,rpm-python,sed,setup,shadow-utils,sqlite,sysklogd,termcap,tzdata,udev,util-linux,yum,yum-metadata-parser,zlib
+#
+rbsmindep opensuse-10.1 = aaa_base,audit-libs,bash,boost,bzip2,coreutils,cpio,cracklib,curl,cyrus-sasl,db,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glibc,gpg2,grep,gzip,hal,info,insserv,krb5,libacl,libattr,libcom_err,libicu,libgcc,libgcrypt,libgpg-error,libidn,libksba,libnscd,libreiserfs,libstdc++,libusb,libxcrypt,libxml2,libxml2-python,libzio,libzypp,mingetty,module-init-tools,ncurses,neon,net-tools,openldap2-client,openslp,pam,pam-modules,parted,pciutils,pcre,perl,permissions,pinentry,pmtools,popt,procps,psmisc,pwdutils,python,python-elementtree,python-sqlite,python-urlgrabber,rpm,rpm-python,sed,setserial,sqlite,suse-release,sysvinit,termcap,udev,util-linux,yum,zlib
+#
+rbsmindep opensuse-10.2 = PolicyKit,aaa_base,aaa_skel,audit-libs,bash,boost,bzip2,coreutils,cpio,cracklib,curl,cyrus-sasl,db,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glibc,gpg,gpg2,grep,gzip,hal,info,insserv,keyutils-libs,krb5,libacl,libattr,libcom_err,libicu,libgcc41,libgcrypt,libgpg-error,libidn,libksba,libnscd,libreiserfs,libstdc++41,libusb,libvolume_id,libxcrypt,libxml2,libxml2-python,libzio,libzypp,logrotate,mingetty,mktemp,module-init-tools,ncurses,neon,net-tools,openSUSE-release,openldap2-client,openslp,pam,pam-config,pam-modules,parted,pciutils,pcre,perl,permissions,pinentry,pm-utils,pmtools,popt,procps,psmisc,pwdutils,python,python-urlgrabber,rpm,rpm-python,sed,setserial,sqlite,strace,sysvinit,termcap,udev,util-linux,zlib,zypper
+#
+rbsmindep opensuse-10.3 = ConsoleKit,cracklib-dict-small,PolicyKit,aaa_base,audit-libs,bash,boost,bzip2,coreutils,cpio,cracklib,cyrus-sasl,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glib2-lang,glibc,gpg2,grep,gzip,hal,info,insserv,keyutils-libs,krb5,libacl,libattr,libbz2-1,libcom_err2,libicu,libcurl4,libdb-4_5,libexpat1,libgcc42,libgcrypt,libgpg-error,libidn,libksba,libnscd,libopenssl0_9_8,libreadline5,libreiserfs,libstdc++42,libusb,libuuid1,libvolume_id,libxcrypt,libxml2,libxml2-python,libzio,libzypp,mingetty,module-init-tools,ncurses,neon,net-tools,openSUSE-release,openldap2-client,openslp,pam,pam-config,pam-modules,parted,pciutils,pcre,perl-base,permissions,pinentry,pm-utils,pmtools,popt,procps,psmisc,pth,pwdutils,python,python-urlgrabber,rpm,rpm-python,sed,setserial,sqlite,sysvinit,termcap,udev,util-linux,zlib,zypper
+#
+rbsmindep opensuse-11.0 = ConsoleKit,cracklib-dict-small,PolicyKit,aaa_base,audit-libs,bash,bzip2,coreutils,coreutils-lang,cpio,cpio-lang,cracklib,cyrus-sasl,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glib2-branding-upstream,glib2-lang,glibc,gpg2,gpg2-lang,grep,gzip,hal,info,insserv,keyutils-libs,krb5,libacl,libattr,libbz2-1,libcom_err2,libcurl4,libdb-4_5,libexpat1,libgcc43,libgcrypt11,libglib-2_0-0,libgobject-2_0-0,libgthread-2_0-0,libgpg-error0,libidn,libksba,libncurses5,libnscd,libopenssl0_9_8,libreadline5,libreiserfs,libstdc++43,libusb,libuuid1,libvolume_id,libxcrypt,libxml2,libxml2-python,libzio,libzypp,login,mingetty,module-init-tools,ncurses-utils,neon,net-tools,openSUSE-release,openldap2-client,openslp,pam,pam-config,pam-modules,parted,pciutils,pcre,perl-base,permissions,pinentry,pm-utils,pmtools,popt,procps,psmisc,pth,pwdutils,python,python-urlgrabber,rpm,rpm-python,satsolver-tools,sed,setserial,sysvinit,termcap,terminfo-base,udev,util-linux,uuid-runtime,zlib,zypper
+#
+rbsmindep opensuse-11.1 = ConsoleKit,cracklib-dict-small,PolicyKit,aaa_base,audit-libs,bash,boost-license,bzip2,coreutils,coreutils-lang,cpio,cpio-lang,cracklib,cyrus-sasl,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glib2-branding-upstream,glib2-lang,glibc,gpg2,gpg2-lang,grep,gzip,hal,info,insserv,keyutils-libs,krb5,libacl,libattr,libboost_signals1_36_0,libbz2-1,libcom_err2,libcurl4,libdb-4_5,libexpat1,libgcc43,libgcrypt11,libglib-2_0-0,libgobject-2_0-0,libgthread-2_0-0,libgpg-error0,libidn,libksba,libldap-2_4-2,libncurses5,libnscd,libopenssl0_9_8,libreadline5,libreiserfs,libselinux1,libsepol1,libsmbios2,libstdc++43,libusb-0_1-4,libuuid1,libvolume_id1,libxcrypt,libxml2,libxml2-python,libzio,libzypp,login,mingetty,module-init-tools,ncurses-utils,neon,net-tools,openSUSE-release,openSUSE-release-ftp,openslp,pam,pam-config,pam-modules,parted,pciutils,pcre,perl-base,permissions,pinentry,pm-utils,pmtools,popt,procps,psmisc,pth,pwdutils,python,python-urlgrabber,rpm,rpm-python,satsolver-tools,sed,setserial,sysvinit,termcap,terminfo-base,udev,util-linux,uuid-runtime,zlib,zypper
+#
+rbsmindep opensuse-11.2 = ConsoleKit,cracklib-dict-small,PolicyKit,aaa_base,audit-libs,bash,boost-license,bzip2,coreutils,coreutils-lang,cpio,cpio-lang,cracklib,cyrus-sasl,dbus-1,dbus-1-glib,device-mapper,diffutils,dirmngr,e2fsprogs,ethtool,expat,filesystem,fillup,findutils,gawk,gdbm,glib2,glib2-branding-upstream,glib2-lang,glibc,gpg2,gpg2-lang,grep,gzip,hal,info,insserv,keyutils-libs,krb5,libacl,libattr,libboost_signals1_36_0,libbz2-1,libcom_err2,libcurl4,libdb-4_5,libexpat1,libgcc43,libgcrypt11,libglib-2_0-0,libgobject-2_0-0,libgthread-2_0-0,libgpg-error0,libidn,libksba,libldap-2_4-2,libncurses5,libnscd,libopenssl0_9_8,libreadline5,libreiserfs,libselinux1,libsepol1,libsmbios2,libstdc++43,libusb-0_1-4,libuuid1,libvolume_id1,libxcrypt,libxml2,libxml2-python,libzio,libzypp,login,mingetty,module-init-tools,ncurses-utils,neon,net-tools,openSUSE-release,openSUSE-release-ftp,openslp,pam,pam-config,pam-modules,parted,pciutils,pcre,perl-base,permissions,pinentry,pm-utils,pmtools,popt,procps,psmisc,pth,pwdutils,python,python-urlgrabber,rpm,rpm-python,satsolver-tools,sed,setserial,sysvinit,termcap,terminfo-base,udev,util-linux,uuid-runtime,zlib,zypper
+#
+rbsmindep mandriva-2009.1-i386 = makedev,consolekit,basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glib2.0-common,glibc,gnupg2,grep,info,initscripts,iproute2,iputils,keyutils,krb5,libacl1,libattr1,libbzip2_1,libdb4.6,libelfutils1,libext2fs2,libidn11,liblua5.1,libmagic1,libncurses5,libnspr4,libnss3,libopenssl0.9.8,libpopt0,libreadline6,librpm4.6,libsqlite3_0,libtermcap2,liblzma2,libgcc1,logrotate,lua,mandriva-release-common,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,udev,urpmi,util-linux-ng,vim-minimal,wget,zlib1
+rbsmindep mandriva-2009.1-x86_64 = makedev,consolekit,basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glib2.0-common,glibc,gnupg2,grep,info,initscripts,iproute2,iputils,keyutils,krb5,lib64acl1,lib64attr1,lib64bzip2_1,lib64db4.6,lib64elfutils1,lib64ext2fs2,lib64idn11,lib64lua5.1,lib64magic1,lib64ncurses5,lib64nspr4,lib64nss3,lib64openssl0.9.8,lib64popt0,lib64readline6,lib64rpm4.6,lib64sqlite3_0,lib64termcap2,lib64lzma2,libgcc1,logrotate,lua,mandriva-release-common,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,udev,urpmi,util-linux-ng,vim-minimal,wget,zlib1
+#
+rbsmindep mandriva-2010.0-i386 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,libacl1,libattr1,libblkid1,libbzip2_1,libcap2,libcurl4,libdb4.7,libelfutils1,libext2fs2,libgcc1,libgcrypt11,libgpg-error0,libidn11,libkrb53,libksba8,libldap2.4_2,liblua5.1,liblzma2,libmagic1,libncurses5,libnspr4,libnss3,libopenssl0.9.8,libpopt0,libreadline6,librpm4.6,libsasl2,libsqlite3_0,libssh2_1,libstdc++6,libtermcap2,libusb1.0_0,libuuid1,libxml2_2,logrotate,lua,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+rbsmindep mandriva-2010.0-x86_64 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,lib64acl1,lib64attr1,lib64blkid1,lib64bzip2_1,lib64cap2,lib64curl4,lib64db4.7,lib64elfutils1,lib64ext2fs2,lib64gcrypt11,lib64gpg-error0,lib64idn11,lib64krb53,lib64ksba8,lib64ldap2.4_2,lib64lua5.1,lib64lzma2,lib64magic1,lib64ncurses5,lib64nspr4,lib64nss3,lib64openssl0.9.8,lib64popt0,lib64readline6,lib64rpm4.6,lib64sasl2,lib64sqlite3_0,lib64ssh2_1,lib64termcap2,lib64usb1.0_0,lib64uuid1,lib64xml2_2,libgcc1,logrotate,lua,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+#
+rbsmindep mandriva-2010.1-i386 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,libacl1,libattr1,libblkid1,libbzip2_1,libcap2,libcurl4,libdb4.8,libelfutils1,libext2fs2,libgcc1,libgcrypt11,libgpg-error0,libidn11,libkrb53,libksba8,libldap2.4_2,liblua5.1,liblzma2,libmagic1,libncurses5,libnspr4,libnss3,libopenssl1.0.0,libpopt0,libreadline6,librpm4.6,libsasl2,libsqlite3_0,libssh2_1,libstdc++6,libtermcap2,libusb1.0_0,libuuid1,libxml2_2,logrotate,lua,mdkonline,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+rbsmindep mandriva-2010.1-x86_64 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,lib64acl1,lib64attr1,lib64blkid1,lib64bzip2_1,lib64cap2,lib64curl4,lib64db4.8,lib64elfutils1,lib64ext2fs2,lib64gcrypt11,lib64gpg-error0,lib64idn11,lib64krb53,lib64ksba8,lib64ldap2.4_2,lib64lua5.1,lib64lzma2,lib64magic1,lib64ncurses5,lib64nspr4,lib64nss3,lib64openssl1.0.0,lib64popt0,lib64readline6,lib64rpm4.6,lib64sasl2,lib64sqlite3_0,lib64ssh2_1,lib64termcap2,lib64usb1.0_0,lib64uuid1,lib64xml2_2,libgcc1,logrotate,lua,mdkonline,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+#
+rbsmindep mandriva-2010.2-i386 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,libacl1,libattr1,libblkid1,libbzip2_1,libcap2,libcurl4,libdb4.8,libelfutils1,libext2fs2,libgcc1,libgcrypt11,libgpg-error0,libidn11,libkrb53,libksba8,libldap2.4_2,liblua5.1,liblzma2,libmagic1,libncurses5,libnspr4,libnss3,libopenssl1.0.0,libpopt0,libreadline6,librpm4.6,libsasl2,libsqlite3_0,libssh2_1,libstdc++6,libtermcap2,libusb1.0_0,libuuid1,libxml2_2,logrotate,lua,mdkonline,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+rbsmindep mandriva-2010.2-x86_64 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,lib64acl1,lib64attr1,lib64blkid1,lib64bzip2_1,lib64cap2,lib64curl4,lib64db4.8,lib64elfutils1,lib64ext2fs2,lib64gcrypt11,lib64gpg-error0,lib64idn11,lib64krb53,lib64ksba8,lib64ldap2.4_2,lib64lua5.1,lib64lzma2,lib64magic1,lib64ncurses5,lib64nspr4,lib64nss3,lib64openssl1.0.0,lib64popt0,lib64readline6,lib64rpm4.6,lib64sasl2,lib64sqlite3_0,lib64ssh2_1,lib64termcap2,lib64usb1.0_0,lib64uuid1,lib64xml2_2,libgcc1,logrotate,lua,mdkonline,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+#
+rbsmindep mageia-1-i386 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,libacl1,libattr1,libblkid1,libbzip2_1,libcap2,libcurl4,libdb4.8,libelfutils1,libext2fs2,libgcc1,libgcrypt11,libgpg-error0,libidn11,libkrb53,libksba8,libldap2.4_2,liblua5.1,liblzma2,libmagic1,libncurses5,libnspr4,libnss3,libopenssl1.0.0,libpopt0,libreadline6,librpm4.6,libsasl2,libsqlite3_0,libssh2_1,libstdc++6,libtermcap2,libusb1.0_0,libuuid1,libxml2_2,logrotate,lua,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+rbsmindep mageia-1-x86_64 = basesystem,bash,chkconfig,coreutils,cpio,cracklib,cracklib-dicts,crontabs,curl,dbus,dhcp-client,dirmngr,e2fsprogs,ethtool,expat,file,filesystem,findutils,gamin,gawk,glibc,gnupg2,grep,info,initscripts,iputils,lib64acl1,lib64attr1,lib64blkid1,lib64bzip2_1,lib64cap2,lib64curl4,lib64db4.8,lib64elfutils1,lib64ext2fs2,lib64gcrypt11,lib64gpg-error0,lib64idn11,lib64krb53,lib64ksba8,lib64ldap2.4_2,lib64lua5.1,lib64lzma2,lib64magic1,lib64ncurses5,lib64nspr4,lib64nss3,lib64openssl1.0.0,lib64popt0,lib64readline6,lib64rpm4.6,lib64sasl2,lib64sqlite3_0,lib64ssh2_1,lib64termcap2,lib64usb1.0_0,lib64uuid1,lib64xml2_2,libgcc1,logrotate,lua,mandriva-release-common,meta-task,mingetty,module-init-tools,ncurses,net-tools,nss,openldap,openssl,pam,passwd,pcre,perl,perl-base,perl-Config-IniFiles,perl-Locale-gettext,perl-MDV-Distribconf,perl-URPM,procps,psmisc,python,rpm,sed,setup,shadow-utils,sysvinit-tools,udev,urpmi,util-linux-ng,vim-minimal,zlib1
+
+# Where to store packages downloaded temporarily by rpmbootstrap
+rbscachedir default = /var/cache/rpmbootstrap
+
+# Options to pass to rpmbootstrap command. By default keep downloaded packages
+rbsopt rpmbootstrap = -k
+rbsopt devbootstrap = --keep-debootstrap-dir
+
+# URL of the directory containing the packages mentioned in rbsmindep. 
+# You can use some rpmbootstrap variables here:
+# $pbos->{'name'}: name of the distribution
+# $pbos->{'version'}: version of the distribution
+# $pbos->{'arch'}: architecture of the distribution
+# You need an http based mirror for the moment
+#rbsmirrorsrv fedora = http://download.fedora.redhat.com/pub/fedora/linux/releases/$pbos->{'version'}/Everything/$pbos->{'arch'}/os/Packages/
+rbsmirrorsrv fedora = http://mirrors.kernel.org/fedora/releases/$pbos->{'version'}/Fedora/$pbos->{'arch'}/os/Packages
+rbsmirrorsrv centos-4 = http://mirrors.kernel.org/centos/4.8/os/$pbos->{'arch'}/CentOS/RPMS
+rbsmirrorsrv centos-5 = http://mirrors.kernel.org/centos/5.5/os/$pbos->{'arch'}/CentOS
+rbsmirrorsrv centos-5-ia64 = http://dev.centos.org/~z00dax/ia64/c5-wip/ia64/RPMS/
+#rbsmirrorsrv rhel =
+# pbos->{'arch'} == i586 for i386 repo
+rbsmirrorsrv opensuse = http://mirrors.kernel.org/opensuse/distribution/$pbos->{'version'}/repo/oss/suse/$pbos->{'arch'}/
+# pbos->{'arch'} == i586 for i386 repo
+rbsmirrorsrv mandriva = http://mirrors.kernel.org/mandriva/Mandrakelinux/official/$pbos->{'version'}/$pbos->{'arch'}/media/main/release/
+rbsmirrorsrv mageia = http://distrib-coffee.ipsl.jussieu.fr/pub/linux/Mageia/distrib/cauldron/$pbos->{'arch'}/media/core/release/
+#rbsmirrorsrv debian = http://ftp.us.debian.org/debian/
+#rbsmirrorsrv ubuntu = http://us.releases.ubuntu.com/releases/
+
+# pb install dependencies per distro
+# osperldep gives perl file dependecies to get from CPAN
+# ospkgdep gives distribution package dependencies
+#
+# Asianux - Module-Build first for processing as needed by others
+osperldep asianux = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep asianux = wget,make,perl-Date-Manip,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+# Fedora - Module-Build first for processing as needed by others
+osperldep fedora = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-12 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-12 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-11 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-11 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-10 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-10 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-9 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-9 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-8 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-8 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-7 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-7 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-6 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-6 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-5 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-5 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+osperldep fedora-4 = Module-Build,File-MimeInfo,File-BaseDir,Date-Manip
+ospkgdep fedora-4 = wget,make,perl-ExtUtils-MakeMaker,rpm-build,patch,ntp,diffutils
+# Slack - Module-Build first for processing as needed by others
+osperldep tgz = Module-Build,Date-Manip,File-MimeInfo,File-BaseDir
+ospkgdep tgz = wget,make,ntp,patch
+# RHEL
+osperldep rhel-4 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep rhel-4 = wget,make,ntp,patch,perl-DateManip,rpm-build,diffutils
+# Tested
+osperldep centos-4 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep centos-4 = wget,make,ntp,patch,perl-DateManip,rpm-build,diffutils
+# Tested
+osperldep rhel-5 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep rhel-5 = wget,make,ntp,patch,perl-DateManip,rpm-build,diffutils
+osperldep centos-5 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep centos-5 = wget,make,ntp,patch,perl-DateManip,rpm-build,diffutils
+# Tested
+osperldep rhel-6 = File-MimeInfo,File-BaseDir
+ospkgdep rhel-6 = wget,make,ntpdate,patch,perl-Date-Manip,rpm-build,diffutils,perl-Module-Build
+#
+osperldep rhel-3 = Module-Build,File-MimeInfo,File-BaseDir
+# Tested
+osperldep rhel-6 = File-MimeInfo,File-BaseDir
+ospkgdep rhel-6 = wget,make,ntpdate,patch,perl-Date-Manip,rpm-build,diffutils,perl-Module-Build
+#
+osperldep rhel-3 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep rhel-3 = wget,make,ntp,patch,perl-DateManip,diffutils
+osperldep centos-3 = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep centos-3 = wget,make,ntp,patch,perl-DateManip,diffutils
+# Old RedHat - Module-Build first for processing as needed by others
+osperldep redhat = Module-Build,Date-Manip,File-MimeInfo,File-BaseDir
+ospkgdep redhat = wget,make,ntp,patch,diffutils
+# Old SuSE - Module-Build first for processing as needed by others
+osperldep suse = Module-Build,Date-Manip,File-MimeInfo,File-BaseDir
+ospkgdep suse = wget,make,ntp,patch,diffutils
+# New OpenSuSE - Module-Build first for processing as needed by others
+osperldep opensuse = Module-Build,File-MimeInfo,File-BaseDir
+ospkgdep opensuse = wget,make,ntp,patch,perl-Date-Manip,perl-File-HomeDir,diffutils
+# Mdv
+osperldep mandrake-10.1 = Date-Manip
+ospkgdep mandrake-10.1 = rpm-build,wget,patch,make,ntp-client,perl-File-MimeInfo,diffutils
+ospkgdep mandrake-10.2 = rpm-build,wget,patch,make,ntp-client,perl-File-MimeInfo,diffutils,perl-DateManip
+osperldep md = 
+ospkgdep md = rpm-build,wget,patch,make,ntp-client,perl-File-MimeInfo,perl-File-BaseDir,perl-Date-Manip,diffutils
+# LSB
+osperldep lsb = Module-Build,Date-Manip,File-MimeInfo,File-BaseDir
+ospkgdep lsb = 
+# Debian
+osperldep debian-3.1 = File-MimeInfo,File-BaseDir
+ospkgdep debian-3.1 = wget,patch,dpkg-dev,make,debian-builder,dh-make,fakeroot,ntpdate,libmodule-build-perl,libdate-manip-perl,libmail-sendmail-perl,diff
+osperldep deb = 
+ospkgdep deb = wget,patch,dpkg-dev,make,debian-builder,dh-make,fakeroot,ntpdate,libfile-mimeinfo-perl,libmodule-build-perl,libdate-manip-perl,libmail-sendmail-perl,diff
+# Gentoo
+osperldep gen = 
+ospkgdep gen = wget,ntp,make,patch,DateManip,File-MimeInfo
+# Solaris - Module-Build first for processing as needed by others
+osperldep pkg = Module-Build,Date-Manip,File-MimeInfo,File-BaseDir
+# Should be installed manually first for the moment
+#ospkgdep pkg = wget,make,perl
+# And also need ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/sudo-1.7.2p1-sol10-sparc-local.gz ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/make-3.81-sol10-sparc-local.gz ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libintl-3.4.0-sol10-x86-local.gz ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libiconv-1.9.2-sol10-x86-local.gz ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gz
+#
+# HP-UX
+# TBC
+osperldep sd = Pod2man,Date-Manip,File-MimeInfo
+
+# Version of the perl module as found on CPAN
+# http://search.cpan.org/CPAN/modules/by-module
+osperlver Date-Manip = 5.56
+osperlver Module-Build = 0.3607
+osperlver File-MimeInfo = 0.15
+osperlver File-BaseDir = 0.03
+
+# Code name for debian/ubuntu distro
+# used by debootstrap
+# Cf: http://www.debian.org/releases/
+# and https://wiki.ubuntu.com/DevelopmentCodeNames
+oscodename debian-3.1 = sarge
+oscodename debian-4.0 = etch
+oscodename debian-5.0 = lenny
+oscodename debian-6.0 = squeeze
+oscodename ubuntu-6.06 = dapper
+oscodename ubuntu-7.04 = feisty
+oscodename ubuntu-7.10 = gutsy
+oscodename ubuntu-8.04 = hardy
+oscodename ubuntu-8.10 = intrepid
+oscodename ubuntu-9.04 = jaunty
+oscodename ubuntu-9.10 = karmic
+oscodename ubuntu-10.04 = lucid
+oscodename ubuntu-10.10 = maverick
+oscodename ubuntu-11.04 = natty
+
+# Commands needed on the underlying system
+oscmd pb = tar,chmod,ls
+oscmdopt pb = rpmbuild,dpkg-buildpackage,rpm,dpkg,wget,sudo,apt-get,mv,gzip,ebuild,makepkg,pkgmk,pkgtrans,rm,rpmlint,lintian,chroot,schroot,cp,chown,debsign,qemu-img,qemu,kvm,rpmbootstrap,rinse,mock,debootstrap,mkdir,cat,ssh,scp,yum,bash,make,vi,ssh-keygen,svn,hg,cvs,git,svk,svn2cl,cvs2cl,urpmi
+oscmd rpmbootstrap = rpm,rpm2cpio,wget
+#oscmdopt rpmbootstrap = 
+#
+
+# Some path for commands may defer from one system to another
+ospathcmd-halt default = /sbin/halt
+ospathcmd-halt solaris = /usr/sbin/halt
+
+# How do you want to install pb in your VM/VE (pkg or file)
+pbinstalltype default = pkg
+# No gentoo repo provided yet
+pbinstalltype gen = file
+# No CentOS either (you can manually point to rhel repo)
+pbinstalltype centos = file
+# Default main package for pkg install of pb
+ospkg default = project-builder
+# Where is the associated repo
+osrepo rpm = ftp://ftp.project-builder.org/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/pb.repo
+osrepo deb = ftp://ftp.project-builder.org/$pbos->{'name'}/$pbos->{'version'}/pb.sources.list
+
+# Number of process in // for pb
+#pbparallel pb = 2
+#
+
+#
+# Commands to check packages
+#
+# Config-Model needs oschkcmd:rpm=/.... (Cf Config::Model::Loader)
+oschkcmd rpm = /usr/bin/rpmlint
+oschkopt rpm = 
+oschkcmd deb = /usr/bin/lintian
+oschkopt deb = 
Index: /0.11.2/pb-modules/etc/pb.conf.pod
===================================================================
--- /0.11.2/pb-modules/etc/pb.conf.pod	(revision 1217)
+++ /0.11.2/pb-modules/etc/pb.conf.pod	(revision 1217)
@@ -0,0 +1,786 @@
+=pod
+
+=head1 NAME
+
+Documentation for pb configuration files
+
+=head1 DESCRIPTION
+
+pb helps you build various packages directly from your project sources. 
+In order to work correctly, it relies on a certain number of configuration files. Most of these configuration parameters can be setup in all the configuration files, however, they generally make more sense in a specific one, which is indicated. There are mainly 4 configuration files, the one in the home directory of the user (used first), the one from the project (use in second), the one in the VM/VE hosting directory, and the one provided by the tool in /etc/pb or /usr/local/etc/pb (lastly).
+
+=head1 SYNOPSIS
+
+Those files have the same format, which is near from a a perl hash structure:
+keyword key = value1[,value2,...]
+
+The key could be also default, in which case it will be used as a default value if no more precise content is given for the key.
+
+Each value is detailed below giving the nature of its use (Mandatory or Optional - only used for certain feature), the value of the key (could be the project, an OS name, default, ...), the value of the parameter field and its format, the default configuration file in which it should be defined (home $HOME/.pbrc, conf /etc/pb/pb.conf or /usr/local/etc/pb/pb.conf, VE vepath/.pbrc, VM vmpath/.pbrc,  or project project.pb) and an example of use.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<defpkgdir>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: coma separated list of packages built by default in this project. When not using any package name as a parameter to pb commands, this list will be used.
+ Conffile: project
+ Example: defpkgdir mondorescue = mondo,mindi NB: a default value is not really meaningful.
+
+=item B<delivery>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: directory where to deliver packages once built for ftp/web access.
+ Conffile: project
+ Example: delivery mondorescue = prod
+
+=item B<extpkgdir>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: coma separated list of packages built in addition in this project. When using the all package name as a parameter to pb commands, this list will be used, in addition to the defpkgdir list.
+ Conffile: project
+ Example: extpkgdir mondorescue = mondo-doc,mindi-mindibusybox
+
+=item B<filteredfiles>
+
+ Nature: Optional
+ Key: package (as provided in defpkgdir or extpkgdir)
+ Value: coma separated list of files that will be filtered using the macro system from pb, during the creation of the compressed source tar files for this package. Their path is relative to the directory containing the package.
+ Conffile: project
+ Example: filteredfiles mindi = rootfs/sbin/init,mindi,install.sh,doc/mindi.8
+
+=item B<namingtype>
+
+ Nature: Optional
+ Key: package (as provided in defpkgdir or extpkgdir)
+ Value: perl, if packages are CPAN perl modules that need to be named respecting the distribution perl convention (perl-Name for rpm, libname-perl for deb)
+ Conffile: project
+ Example: namingtype ProjectBuilder = perl
+
+=item B<osambiguous>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). In that case, should be an OS name.
+ Value: coma separated list of distributions which use the same file name in /etc for different distributions (ex: /etc/redhat-release for redhat, rhel, mandriva,...). Cf: B<osrelambfile>
+ Conffile: pb
+ Example: osambiguous debian = debian,ubuntu
+
+=item B<oschkcmd>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: package checker tool.
+ Conffile: pb
+ Example: oschkcmd deb = /usr/bin/lintian
+
+=item B<oschkopt>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: package checker tool options.
+ Conffile: pb
+ Example: oschkcmd rpm = -i
+
+=item B<oscmd>
+
+ Nature: Mandatory
+ Key: tool (pb or rpmbootstrap)
+ Value: come separated list of commands that are mandatory on the underlying system
+ Conffile: pb
+ Example: oscmd pb = tar,ls
+
+=item B<oscmdopt>
+
+ Nature: Mandatory
+ Key: tool (pb or rpmbootstrap)
+ Value: come separated list of commands that are optional on the underlying system
+ Conffile: pb
+ Example: oscmd pb = svn2cl,svn,cvs
+
+=item B<oscodename>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). In that case, should be an os-ver.
+ Value: code name. Mostly useful for debian and ubuntu, due to debootstrap.
+ Conffile: pb
+ Example: oscodename debian-5.0 = lenny
+
+=item B<osfamily>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). In that case, should be an os.
+ Value: OS family name (used to group similar distribution for handling)
+ Conffile: pb
+ Example: osfamily debian = du
+
+=item B<osins>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: OS command to lauch in order to automatically install packages on it.
+ Conffile: pb
+ Example: osins fedora = sudo yum -y install
+
+=item B<osmindep>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). NB: a default value is highly interesting here.
+ Value: coma separated list of packages needed before setupvm|ve can be run. Install them with your distribution in VM or automatically in VE when possible.
+ Conffile: pb
+ Example: osmindep default = perl,sudo,wget,tar,make,gzip
+
+=item B<osnover>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: true|false. True means that this OS has no need to keep the version
+ Conffile: pb
+ Example: osnover gentoo = true
+
+=item B<ospathcmd-*>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: Full path name of the command mentioned after the '-' for the relative OS
+ Conffile: pb
+ Example: ospathcmd-halt solaris = /usr/sbin/halt, ospathcmd-halt default = /sbin/halt
+
+=item B<osperldep>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: coma separated list of perl modules needed by pb and not provided in a package format for the relative OS, and that will be installed from CPAN in your VM/VE.
+ Conffile: pb
+ Example: osperldep rhel-5 = Module-Build,File-MimeInfo,File-BaseDir,Mail-Sendmail
+
+=item B<osperlver>
+
+ Nature: Mandatory (for each module mentioned in B<osperldep>)
+ Key: Perl Module (as defined in B<osperldep>)
+ Value: Version of the perl module that needs to be found on CPAN.
+ Conffile: pb
+ Example: Date-Manip = 5.54
+
+=item B<ospkg>
+
+ Nature: Optional (Mandatory if pbinstalltype is pkg)
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: coma separated list of packages that have to be installed in order for pb to be operational in the VE|VM
+ Conffile: pb
+ Example: ospkg rhel-5 = project-builder
+
+=item B<ospkgdep>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: coma separated list of packages that are needed by pb and should be installed automatically in the VM/VE during the setupvm|ve phasis by pb.
+ Conffile: pb
+ Example: ospkgdep rhel-5 = wget,make,ntp,patch,perl-DateManip
+
+=item B<osrelambfile>
+
+ Nature: Mandatory (per OS mentioned in B<osambiguous>)
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). Should be the OS name here.
+ Value: full path name of the ambiguous file describing that distribution, as well as some others. All the distributions mentioned here should also be mentioned with their ambiguous other distribution in the B<osambiguous> parameter.
+ Conffile: pb
+ Example: osrelambfile debian = /etc/debian_version
+
+=item B<osrelexpr>
+
+ Nature: Mandatory (per OS mentioned in B<osrelambfile> and B<osrelfile>)
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: the perl regular expression used to parse the B<osrelambfile> in order to extract from it the version of the distribution (in parenthesis to allow its usage as $1 by perl)
+ Conffile: pb
+osrelexpr rhel = Red Hat (?:Enterprise Linux|Linux Advanced Server) .*release ([0-9.]+).* \(
+ Example: 
+
+=item B<osrelfile>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). Should be the OS name here.
+ Value: full path name of the file describing non-ambiguously that distribution. There should be a bijection between the file and the distribution name.
+ Conffile: pb
+ Example: osrelfile fedora = /etc/fedora-release
+
+=item B<osremovedotinver>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: true|false. If true, then no '.' (dot) character is kept in the version name of that OS.
+ Conffile: pb
+ Example: osremovedotinver redhat = true
+
+=item B<osrepo>
+
+ Nature: Optional (Mandatory if pbinstalltype is pkg)
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: coma separated list of packages or repo file to be added to the VE|VM to support package installation of pb
+ Conffile: pb
+ Example: osrepo rpm = ftp://ftp.project-builder.org/$ddir/$dver/pb.repo
+
+=item B<ossuffix>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: suffix that will be used in the name of the packages created. By default, concatenation of OS name and version.
+ Conffile: pb
+ Example: ossuffix mandriva = mdv
+
+=item B<ostype>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: build type grouping packages family. This is used internaly by pb to make various handling depending on that build type.
+ Conffile: pb
+ Example: ostype rh = rpm, ostype md = rpm, ostype novell = rpm
+
+=item B<osupd>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: OS command to lauch in order to automatically update th VM|VE
+ Conffile: pb
+ Example: osupd fedora = sudo yum -y update
+
+=item B<pbconfurl>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: B<pb URL> giving access to where the pb configuration dir is stored. Under that directory you have the same tree infrastructure as the upstream project, and under the pb packaging infra, including the project configuration file. Cf: man 
+ Conffile: home|project
+ Example: pbconfurl fossology = svn+ssh://user@svn.project-builder.org/mondo/svn/pb/projects/fossology/pbconf, cvs+ssh://:ext:user@linuxcoe.cvs.sourceforge.net:/cvsroot/linuxcoe/pbconf
+
+=item B<pbdefdir>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: local directory under which every pb related operation will take place. if not defined then /var/cache. A default value is highly interesting here. If you want to use VMs/VEs, then use $ENV{'HOME'} to make it portable to it.
+ Conffile: home
+ Example: pbdefdir default = $ENV{'HOME'}/local/pb/projects
+
+=item B<pbinstalltype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: file or pkg. Indicates how pb will be installed during the setupve|vm phase in the virtual environment|machine, using CPAN files or upstream packages. Only the dev team needs to use file as packages do not yet exist for it. Or when no repository exists to pull project-builder.org from.
+ Conffile: pb
+
+=item B<pbml>
+
+ Nature: Optional (Mandatory if using announce command)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: white space separated list of e-mail adresses used to send announces with the pb announce option.
+ Conffile: project
+ Example: pbml pb = pb-announce@project-builder.org pb-devel@project-builder.org
+
+=item B<pbpackager>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: Firstname Name and e-mail address of the person packaging the software.
+ Conffile: project
+ Example: pbpackager pb = Bruno Cornec <bruno@project-builder.org>
+
+=item B<pbparallel>
+
+ Nature: Optional
+ Key: tool (pb or rpmbootstrap)
+ Value: number of processes to execute in parallel. By default use the number of cores.
+ Conffile: pb
+ Example: pbparallel pb = 12
+
+=item B<pbprojdir>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: local directory under which the project is locally exported. NB: a default value is highly interesting here. By default pbdefdir/projectname
+ Conffile: home
+ Example: pbprojdir mondorescue = $ENV{'HOME'}/local/mondorescue
+
+=item B<pbrepo>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: URL of the server hosting the upstream tar file.
+ Conffile: project
+ Example: pbrepo mondorescue = ftp://ftp.mondorescue.org
+
+=item B<pbsmtp>
+
+ Nature: Optional (Mandatory if using the announce command)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: FQDN of the mail server to use to send announces. NB: a default value is highly interesting here.
+ Conffile: home
+ Example: pbsmtp mondorescue = localhost
+
+=item B<pbsockscmd>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: name of the command to use to socksify network calls. NB: a default value is highly interesting here.
+ Conffile: home
+ Example: pbsockscmd default = tsocks
+
+=item B<pburl>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: B<pb URL> giving access to where the project is stored. Normaly provided by the project, but could be overloaded for specific authentication information in the home configuration file or when using a DVCS
+ Conffile: home|project
+ Example: pburl linuxcoe = cvs+ssh://:ext:user@linuxcoe.cvs.sourceforge.net:/cvsroot/linuxcoe, pburl pb = svk:////local/pb
+
+=item B<pbwf>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: whatever. As soon as this is defined, then that project is known as not well formed (have a subdirectory in its tar file under which all sources are put named project-version). This should be reported upstream to the project. tar files generated by project-builder to not suffer from that. This is valid when packaging for tar files and not CMS.
+ Conffile: project
+ Example: pbwf afio = 1
+
+=item B<pkgtag>
+
+ Nature: Optional
+ Key: package (as provided in defpkgdir or extpkgdir)
+ Value: Tag that needs to be used in package name (on rpm: name-ver-tag.arch.rpm).  Useful when different from the project version B<projtag> and when republishing a package due to package build modification (not code).
+ Conffile: project
+ Example: pkgtag mindi-busybox = 2
+
+=item B<pkgver>
+
+ Nature: Optional
+ Key: package (as provided in defpkgdir or extpkgdir)
+ Value: Version that needs to be used in package name (on rpm: name-ver-tag.arch.rpm). Useful when different from the project version B<projver>.
+ Conffile: project
+ Example: pkgver mindi-busybox = 1.7.3
+
+=item B<projtag>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: tag that will be used for all packages names (on rpm: name-ver-tag.arch.rpm) in the project. Each package can overwrite it using B<pkgtag>.
+ Conffile: project
+ Example: projtag mondorescue = 1
+
+=item B<projver>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: version that will be used for all packages names (on rpm: name-ver-tag.arch.rpm) in the project. Each package can overwrite it using B<pkgver>.
+ Conffile: project
+ Example: projver mondorescue = 2.2.9
+
+=item B<rbsconf>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: for mock it's the configuration directory. For rinse it's its configuration file. For rpmbootstrap it's not used yet.
+ Conffile: ve
+ Example: rbsconf default = /etc/mock, rbsconf default = /etc/pb/pb-rinse.conf
+
+=item B<rbsb4pi>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: for mock it's not used. For rinse it's the script to call before doing installation (in order change the mirror location). For rpmbootstrap it's not used yet.
+ Conffile: ve
+ Example: rbsb4pi centos = /home/rinse/bin/before-post-install.sh
+
+=item B<rbsopt>
+
+ Nature: Optional
+ Key: tool used for rpm based VE. Could be one of rpmbootstrap, rinse, mock, ...
+ Value: Additional option to pass to the command
+ Conffile: ve
+ Example: rbsopt rpmbootstrap = -k
+
+=item B<rbspi>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: for mock it's not used. For rinse it's the script to call after doing installation for customization. For rpmbootstrap it's the script to call after doing installation for customization.
+ Conffile: ve
+ Example: rbspi centos = /home/rinse/bin/post-install.sh
+
+=item B<rmhost>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: IP address or name of the Remote Machine running the OS mentioned in the key, accessed through ssh.
+ Conffile: rm
+ Example: rmhost default = localhost - rmhost hpux-11.3-ia64 = 10.10.10.10 - rmhost mandriva-2010.2-x86_64 = machine1.domain.name
+
+=item B<rmlist>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: list of coma separated OS (under the form of os-ver-arch). The corresponding machines running these distributions are given in the rmpool parameter.
+ Conffile: rm
+ Example: rmlist default = mandriva-2010.2-i386,fedora-14-i386,rhel-6-i386,rhel-5-i386,pensuse-11.3-i386,sles-11-i386,gentoo-nover-i386,debian-5.0-i386,ubuntu-10.10-i386,solaris-10-i386,mandriva-2010.2-x86_64,fedora-14-x86_64,rhel-6-x86_64,rhel-5-x86_64,opensuse-11.3-x86_64,sles-11-x86_64,gentoo-nover-x86_64,debian-5.0-x86_64,ubuntu-10.10-x86_64,solaris-10-x86_64,hp-ux-11.3-ia64,rhel-5-ia64
+
+=item B<rmlogin>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: account name to use on the Remote Machine to build packages. Communication is done with ssh.
+ Conffile: rm
+ Example: rmlogin default = pb
+
+=item B<rmmonport>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: TCP port that is used to dialog with the monitor of the Remote Machine, to pass orders.
+ Conffile: rm
+ Example: rmmonport default = 4444
+
+=item B<rmntp>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: NTP server to contact for time accuracy with B<rmntpcmd> before building.
+ Conffile: rm
+ Example: rmntp default = 1.pool.ntp.org
+
+=item B<rmntpcmd>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: NTP command to use to perform time synchronization with the B<rmntp> server. Use full path name, as this command will be used in the sudoers file to allow its launch by root.
+ Conffile: rm
+ Example: rmntpcmd default = /usr/sbin/ntpdate,rmntpcmd opensuse-10.1-i386 = /usr/sbin/sntp -P no -r
+
+=item B<rmpath>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: path where to find configuration file for Remote Machines management.
+ Conffile: rm
+ Example: rmpath default = /home/remote
+
+=item B<rmport>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: port number to use to communicate with the RM using the SSH protocol. This localport is redirected to the port 22 of the RM.
+ Conffile: rm
+ Example: rmport pb = 2222,rmport mondorescue = 2223
+
+=item B<rmtmout>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here.
+ Value: Time in seconds to wait before interacting with the RM. This may correspond to the time the RM takes to boot.
+ Conffile: rm
+ Example: rmtmout default = 10
+
+=item B<rmtype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: ssh. For the moment, only ssh is supported as a communication means with RM.
+ Conffile: rm
+ Example: rmrtype default = ssh
+
+=item B<sshdir>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: dirname into which packages are uploaded on the B<sshhost> machine.
+ Conffile: project
+ Example: sshdir mondorescue = /pub/mondorescue
+
+=item B<sshhost>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: hostname to connect to in order to deliver packages to the repository server.
+ Conffile: project
+ Example: sshhost mondorescue = ftp.mondorescue.org
+
+=item B<sshlogin>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: login to use when connecting to the repository server B<sshhost> for package delivery.
+ Conffile: project
+ Example: sshlogin mondorescue = mylogin
+
+=item B<sshport>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: port to use when connecting to the repository server B<sshhost> for package delivery.
+ Conffile: project
+ Example: sshport mondorescue = 22
+
+=item B<supfiles>
+
+Not used yet.
+
+=item B<testver>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: true (meaning this is a test version, whose tag will be generated automatically, based on 0+date in order to allow regular updates, and still be inferior to tag 1 of the official version, and delivered under the test subdirectory of the ftp server). By default false.
+ Conffile: project
+ Example: testver mondorescue = true
+
+=item B<vedebtype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: debootstrap (no other tool to create deb distro based chroot)
+ Conffile: ve
+ Example: vedebtype default = debootstrap
+
+=item B<velist>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: list of coma separated OS (under the form of os-ver-arch).
+ Conffile: ve
+ Example: velist default = centos-4-i386,centos-5-i386,centos-4-x86_64,centos-5-x86_64,debian-5.0-i386,debian-5.0-x86_64,lsb-4.0.1-i386,lsb-4.0.1-x86_64
+
+=item B<velogin>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: account name to use in the VE to build packages.
+ Conffile: ve
+ Example: velogin default = pb
+
+=item B<ventp>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: NTP server to contact for time accuracy with B<ventpcmd> before building.
+ Conffile: ve
+ Example: ventp default = 1.pool.ntp.org
+
+=item B<ventpcmd>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: NTP command to use to perform time synchronization with the B<ventp> server. Use full path name, as this command will be used in the sudoers file to allow its launch by root.
+ Conffile: ve
+ Example: ventpcmd default = /usr/sbin/ntpdate
+
+=item B<vepath>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: path where to find VEs. Ve will be created and used under that path. For each VE os-ver-arch, it will create a subdirectory tree os/ver/arch below that point.
+ Conffile: ve
+ Example: vepath default = /home/rpmbootstrap
+
+=item B<verebuild>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: true|false. True means that the VE should be rebuild before usage.
+ Conffile: ve
+ Example: verebuild default = true
+
+=item B<verpmtype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: rpmbootstrap|rinse|mock (different tools to create a chroot environment for RPM based distributions. rpmbootstrap comes with pb. the 2 others are separate projects).
+ Conffile: ve
+ Example: verpmtype default = rpmbootstrap
+
+=item B<vesnap>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: true|false. True means that the snapshot of the VE should be used before call to the VE. This snapshot consists of a compressed tar pf the VE. Which means that you will always start from a known state, resulting of a former snapshot operation on the VE. Also speeds up a lot the VM launch operation.
+ Conffile: ve
+ Example: vesnap default = true
+
+=item B<vetype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: chroot|schroot. There are two different ways of launching a chroot activity in pb. For the moment only chroot has been tested.
+ Conffile: ve
+ Example: vertype default = chroot
+
+=item B<vmbuildtm>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). Default value is set to vmtmout
+ Value: Time in seconds to wait before killing the VM if SSH port already used. This should corresponds to the time to send files, build the project and get packages in the VM.
+ Conffile: project
+ Example: vmbuildtm default = 600,vmbuildtm mandriva-2009.0-x86_64 = 1200
+
+=item B<vmcmd>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). NB: a default value is highly interesting here.
+ Value: Command to call to launch the VM emulator.  It can contain some options. Another way to pass options to the VM manager command launcher is by using the PBVMOPT environment variable, which comes in addition to the option vmopt.
+ Conffile: vm
+ Example: vmcmd default = /usr/bin/kvm
+
+=item B<vmhost>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: hostname to connect to in order to reach the VM through ssh. Generally redirected from a port on localhost.
+ Conffile: vm
+ Example: vmhost default = localhost
+
+=item B<vmlist>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: list of coma separated OS (under the form of os-ver-arch).
+ Conffile: vm
+ Example: vmlist default = asianux-2-i386,asianux-3-i386,mandrake-10.1-i386,mandrake-10.2-i386,mandriva-2006.0-i386,mandriva-2007.0-i386,mandriva-2007.1-i386,mandriva-2008.0-i386,mandriva-2008.1-i386,mandriva-2009.0-i386,mandriva-2009.1-i386,mandriva-2010.0-i386,redhat-7.3-i386,redhat-9-i386,fedora-4-i386,fedora-5-i386,fedora-6-i386,fedora-7-i386,fedora-8-i386,fedora-9-i386,fedora-10-i386,fedora-11-i386,fedora-12-i386,rhel-2.1-i386,rhel-3-i386,rhel-4-i386,rhel-5-i386,suse-10.0-i386,suse-10.1-i386,suse-10.2-i386,opensuse-10.3-i386,opensuse-11.0-i386,opensuse-11.1-i386,opensuse-11.2-i386,sles-9-i386,sles-10-i386,sles-11-i386,gentoo-nover-i386,debian-3.1-i386,debian-4.0-i386,debian-5.0-i386,ubuntu-6.06-i386,ubuntu-7.04-i386,ubuntu-7.10-i386,ubuntu-8.04-i386,ubuntu-8.10-i386,ubuntu-9.04-i386,ubuntu-9.10-i386,solaris-10-i386,asianux-2-x86_64,asianux-3-x86_64,mandriva-2007.0-x86_64,mandriva-2007.1-x86_64,mandriva-2008.0-x86_64,mandriva-2008.1-x86_64,mandriva-2009.0-x86_64,mandriva-2009.1-x86_64,mandriva-2010.0-x86_64,fedora-6-x86_64,fedora-7-x86_64,fedora-8-x86_64,fedora-9-x86_64,fedora-10-x86_64,fedora-11-x86_64,fedora-12-x86_64,rhel-3-x86_64,rhel-4-x86_64,rhel-5-x86_64,suse-10.2-x86_64,opensuse-10.3-x86_64,opensuse-11.0-x86_64,opensuse-11.1-x86_64,opensuse-11.2-x86_64,sles-10-x86_64,sles-11-x86_64,gentoo-nover-x86_64,debian-4.0-x86_64,debian-5.0-x86_64,ubuntu-7.04-x86_64,ubuntu-7.10-x86_64,ubuntu-8.04-x86_64,ubuntu-8.10-x86_64,ubuntu-9.04-x86_64,ubuntu-9.10-x86_64,solaris-10-x86_64
+
+=item B<vmlogin>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: account name to use in the VM to build packages. Communication is done with ssh.
+ Conffile: vm
+ Example: vmlogin default = pb
+
+=item B<vmmem>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: Memory size in MB to allocate to the VM.
+ Conffile: vm
+ Example: vmmem default = 512
+
+=item B<vmmonport>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: TCP port that is used to dialog with the monitor of the VM, to pass orders such as snapshot. Not really operational yet.
+ Conffile: vm
+ Example: vmmonport default = 4444
+
+=item B<vmntp>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: NTP server to contact for time accuracy with B<vmntpcmd> before building.
+ Conffile: vm
+ Example: vmntp default = 1.pool.ntp.org
+
+=item B<vmntpcmd>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: NTP command to use to perform time synchronization with the B<vmntp> server. Use full path name, as this command will be used in the sudoers file to allow its launch by root.
+ Conffile: vm
+ Example: vmntpcmd default = /usr/sbin/ntpdate,vmntpcmd opensuse-11.0-i386 = /usr/sbin/sntp -P no -r
+
+=item B<vmopt>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). NB: a default value is highly interesting here.
+ Value: list of options to pass to the VM manager command launcher for that distribution. Another way to pass options to the VM manager command launcher is by using the PBVMOPT environment variable, which comes in addition to his option.
+ Conffile: vm
+ Example: vmopt default = -m 384 -daemonize,vmopt mandriva-2009.0-i386 = -m 256 -daemonize -no-kvm
+
+=item B<vmpath>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: path where to find VMs. They will be created and used under that path. For each VM os-ver-arch, it will create a os-ver-arch.qemu file below that point.
+ Conffile: vm
+ Example: vmpath default = /home/qemu
+
+=item B<vmport>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: port number to use to communicate with the VM using the SSH protocol. This localport is redirected to the port 22 of the VM.
+ Conffile: vm
+ Example: vmport pb = 2222,vmport mondorescue = 2223
+
+=item B<vmsize>
+
+ Nature: Mandatory
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch).
+ Value: Size of the VM to create when using the newvm command of pb.
+ Conffile: vm
+ Example: vmsize default = 7G
+
+=item B<vmsnap>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: true|false. True means that the snapshot of the VM called pb should be used. Which means that you will always start from a known state, resulting of a former snapshot operation on the VM. Also speeds up a lot the VM launch operation.
+ Conffile: vm
+ Example: vmsnap default = true
+
+=item B<vmtmout>
+
+ Nature: Optional
+ Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). NB: a default value is highly interesting here.
+ Value: Time in seconds to wait before interacting with the VM. This should correspond to the time the VM takes to boot.
+ Conffile: vm
+ Example: vmtmout default = 180,vmtmout mandriva-2009.0-x86_64 = 500
+
+=item B<vmtype>
+
+ Nature: Mandatory
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: qemu|kvm. For the moment, only QEMU or KVM are supported as virtualization technologies.
+ Conffile: vm
+ Example: vmrtype default = kvm
+
+=item B<webdir>
+
+ Nature: Optional
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: Target directory containing the web content in the project that should be delivered when using the sbx|cms2webssh|pkg command of pb.
+ Conffile: project
+ Example: webdir mondorescue = website
+
+=item B<websshdir>
+
+ Nature: Optional (when not using *2webssh commands)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: dirname into which content is uploaded on the B<websshhost> machine.
+ Conffile: project
+ Example: websshdir mondorescue = /var/www/html
+
+=item B<websshhost>
+
+ Nature: Optional (when not using *2webssh commands)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: hostname to connect to in order to deliver content to the Web server.
+ Conffile: project
+ Example: websshhost mondorescue = www.mondorescue.org
+
+=item B<websshlogin>
+
+ Nature: Optional (when not using *2webssh commands)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: login to use when connecting to the Web server B<websshhost> for content delivery.
+ Conffile: project
+ Example: websshlogin mondorescue = mylogin
+
+=item B<websshport>
+
+ Nature: Optional (when not using *2webssh commands)
+ Key: project (as defined in the -p option or PBPROJ environment variable)
+ Value: port to use when connecting to the Web server B<websshhost> for content delivery.
+ Conffile: project
+ Example: websshport mondorescue = 22
+
+=back
+
+=head1 OTHER PARAMETERS
+=item B<pb_URL>
+=item B<pb_directory_desc>
+=item B<pb_environment_variables>
Index: /0.11.2/pb-modules/README
===================================================================
--- /0.11.2/pb-modules/README	(revision 1005)
+++ /0.11.2/pb-modules/README	(revision 1005)
@@ -0,0 +1,5 @@
+License
+=======
+
+The whole Project-builder.org project is provided under the GPL v2 as per the copying file.
+Other licenses may be available in addition later on.
Index: /0.11.2/rpmbootstrap/AUTHORS
===================================================================
--- /0.11.2/rpmbootstrap/AUTHORS	(revision 980)
+++ /0.11.2/rpmbootstrap/AUTHORS	(revision 980)
@@ -0,0 +1,2 @@
+rpmbootstrap is copyrighted under the GPL v2 by 
+Bruno Cornec <bruno@hyper-linux.org>
Index: /0.11.2/rpmbootstrap/INSTALL
===================================================================
--- /0.11.2/rpmbootstrap/INSTALL	(revision 980)
+++ /0.11.2/rpmbootstrap/INSTALL	(revision 980)
@@ -0,0 +1,8 @@
+Basic Installation
+==================
+
+tar xvfz rpmbootstrap-1.0.tar.gz
+cd rpmbootstrap-1.0
+perl Makefile.PL
+make 
+make install
Index: /0.11.2/rpmbootstrap/Makefile.PL
===================================================================
--- /0.11.2/rpmbootstrap/Makefile.PL	(revision 977)
+++ /0.11.2/rpmbootstrap/Makefile.PL	(revision 977)
@@ -0,0 +1,20 @@
+use 5.006001;
+use ExtUtils::MakeMaker;
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    NAME         => 'rpmbootstrap',
+    DISTNAME     => 'rpmbootstrap',
+    VERSION      => 'PBVER',
+    INST_SCRIPT  => 'blib/bin',
+	INSTALLDIRS  => 'perl',
+    PREREQ_PM    => {
+			#HTTP::Headers                    => 1.59,
+			#Template                         => 0,
+    },    # e.g., Module::Name => 1.1
+	#ABSTRACT_FROM => 'bin/pb',   # retrieve abstract from module
+    AUTHOR        => 'Bruno Cornec <bruno#project-builder.org>',
+	EXE_FILES     => [ qw( bin/rpmbootstrap ) ],
+	MAN1PODS      => { 'bin/rpmbootstrap' => '$(INST_MAN1DIR)/rpmbootstrap.$(MAN1EXT)', },
+);
Index: /0.11.2/rpmbootstrap/COPYING
===================================================================
--- /0.11.2/rpmbootstrap/COPYING	(revision 980)
+++ /0.11.2/rpmbootstrap/COPYING	(revision 980)
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
Index: /0.11.2/rpmbootstrap/bin/rpmbootstrap
===================================================================
--- /0.11.2/rpmbootstrap/bin/rpmbootstrap	(revision 1254)
+++ /0.11.2/rpmbootstrap/bin/rpmbootstrap	(revision 1254)
@@ -0,0 +1,540 @@
+#!/usr/bin/perl -w
+#
+# rpmbootstrap application, a debootstrap like for RPM distros
+#
+# $Id$
+#
+# Copyright B. Cornec 2010
+# Provided under the GPL v2
+
+# Syntax: see at end
+
+use strict 'vars';
+use Getopt::Long qw(:config auto_abbrev no_ignore_case);
+use Data::Dumper;
+use English;
+use LWP::UserAgent;
+use File::Basename;
+use File::Copy;
+use File::Find;
+use ProjectBuilder::Version;
+use ProjectBuilder::Base;
+use ProjectBuilder::Env;
+use ProjectBuilder::Conf;
+use ProjectBuilder::Distribution;
+
+# Global variables
+my %opts;					# CLI Options
+
+=pod
+
+=head1 NAME
+
+rpmbootstrap - creates a chrooted RPM based distribution a la debootstrap, aka Virtual Environment (VE)
+
+=head1 DESCRIPTION
+
+rpmbootstrap creates a chroot environment (Virtual Environment or VE) 
+with a minimal distribution in it, suited for building packages for example. 
+It's very much like debootstrap but for RPM based distribution. 
+It aims at supporting all distributions supported by project-builder.org 
+(RHEL, RH, Fedora, OpeSUSE, SLES, Mandriva, ...)
+
+It is inspired by work done by Steve Kemp for rinse (http://www.steve.org.uk/), 
+and similar to mock, but fully integrated with project-builder.org 
+(which also supports rinse and mock).
+
+=head1 SYNOPSIS
+
+rpmbootstrap [-vhmqpdk][-s script][-i iso][-a pkg1[,pkg2,...]] distribution-version-arch [target-dir] [mirror [script]]
+
+rpmbootstrap [--verbose][--help][--man][--quiet][--print-rpms][--download-only]
+[--keep][--script script][--iso iso][--add pkg1,[pkg2,...]] distribution-version-arch [target-dir] [mirror [script]]
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-v|--verbose>
+
+Print a brief help message and exits.
+
+=item B<-h|--help>
+
+Print a brief help message and exits.
+
+=item B<--man>
+
+Prints the manual page and exits.
+
+=item B<-q|--quiet>
+
+Do not print any output.
+
+=item B<-p|--print-rpms>
+
+Print the packages to be installed, and exit. 
+Note that a target directory must be specified so rpmbootstrap can determine 
+which packages should be installed, and to resolve dependencies. 
+The target directory will be deleted.
+
+=item B<-d|--download-only>
+
+Download packages, but don't perform installation.
+
+=item B<-k|--keep>
+
+Keep packages in the cache dir for later reuse. By default remove them.
+
+=item B<-s|--script script>
+
+Name of the script you want to execute on the related VEs after the installation.
+It is executed in host environment. 
+You can use the chroot command to execute actions in the VE.
+
+=item B<-i|--iso iso_image>
+
+Name of the ISO image of the distribution you want to install on the related VE.
+
+=item B<-a|--add pkg1[,pkg2,...]>
+
+Additional packages to add from the distribution you want to install on the related VE 
+at the end of the chroot build.
+
+=back 
+
+=head1 ARGUMENTS
+
+=over 4 
+
+=item B<distribution-version-arch>
+
+Full name of the distribution that needs to be installed in the VE. E.g. fedora-11-x86_64.
+
+=item B<target-dir>
+
+This is the target directory under which the VE will be created. 
+Created on the fly if needed. 
+If none is given use the default directory hosting VE for project-builder.org 
+(Cf: vepath parameter in $HOME/.pbrc)
+
+=back 
+
+=head1 EXAMPLE
+
+To setup a Fedora 12 distribution with an i386 architecture issue:
+
+rpmbootstrap fedora-12-i386 /tmp/fedora/12/i386
+
+=head1 WEB SITES
+
+The main Web site of the project is available at L<http://www.project-builder.org/>. 
+Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
+
+=head1 USER MAILING LIST
+
+Cf: L<http://www.mondorescue.org/sympa/info/pb-announce> for announces and 
+L<http://www.mondorescue.org/sympa/info/pb-devel> for the development of the pb project.
+
+=head1 CONFIGURATION FILE
+
+Uses Project-Builder.org configuration file (/etc/pb/pb.conf or /usr/local/etc/pb/pb.conf)
+
+=head1 AUTHORS
+
+The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
+
+=head1 COPYRIGHT
+
+Project-Builder.org is distributed under the GPL v2.0 license
+described in the file C<COPYING> included with the distribution.
+
+=cut
+
+# ---------------------------------------------------------------------------
+
+my ($projectbuilderver,$projectbuilderrev) = pb_version_init();
+my $appname = "rpmbootstrap";
+$ENV{'PBPROJ'} = $appname;
+
+# Initialize the syntax string
+
+pb_syntax_init("$appname Version $projectbuilderver-$projectbuilderrev\n");
+pb_temp_init();
+
+GetOptions("help|?|h" => \$opts{'h'}, 
+	"man|m" => \$opts{'man'},
+	"verbose|v+" => \$opts{'v'},
+	"quiet|q" => \$opts{'q'},
+	"log-files|l=s" => \$opts{'l'},
+	"script|s=s" => \$opts{'s'},
+	"print-rpms|p" => \$opts{'p'},
+	"download-only|d" => \$opts{'d'},
+	"keep|k" => \$opts{'k'},
+	"iso|i=s" => \$opts{'i'},
+	"add|a=s" => \$opts{'a'},
+	"version|V=s" => \$opts{'V'},
+) || pb_syntax(-1,0);
+
+if (defined $opts{'h'}) {
+	pb_syntax(0,1);
+}
+if (defined $opts{'man'}) {
+	pb_syntax(0,2);
+}
+if (defined $opts{'v'}) {
+	$pbdebug = $opts{'v'};
+}
+if (defined $opts{'q'}) {
+	$pbdebug=-1;
+}
+if (defined $opts{'l'}) {
+	open(pbLOG,"> $opts{'l'}") || die "Unable to log to $opts{'l'}: $!";
+	$pbLOG = \*pbLOG;
+	$pbdebug = 0  if ($pbdebug == -1);
+}
+pb_log_init($pbdebug, $pbLOG);
+#pb_display_init("text","");
+
+#if (defined $opts{'s'}) {
+#$pbscript = $opts{'s'};
+#}
+#if (defined $opts{'i'}) {
+#$iso = $opts{'i'};
+#}
+
+# Get VE name
+$ENV{'PBV'} = shift @ARGV;
+die pb_syntax(-1,1) if (not defined $ENV{'PBV'});
+
+die "Needs to be run as root" if ($EFFECTIVE_USER_ID != 0);
+
+#
+# Initialize distribution info from pb conf file
+#
+pb_log(0,"Starting VE build for $ENV{'PBV'}\n");
+my $pbos = pb_distro_get_context($ENV{'PBV'});
+
+#
+# Check target dir
+# Create if not existent and use default if none given
+#
+pb_env_init_pbrc(); # to get content of HOME/.pbrc
+my $vepath = shift @ARGV;
+
+#
+# Check for command requirements
+#
+my ($req,$opt) = pb_conf_get_if("oscmd","oscmdopt");
+pb_check_requirements($req,$opt,$appname);
+
+if (not defined $vepath) {
+	my ($vestdpath) = pb_conf_get("vepath");
+	$vepath = "$vestdpath->{'default'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}" if (defined $vestdpath->{'default'});
+}
+
+die pb_log(0,"No target-dir specified and no default vepath found in $ENV{'PBETC'}\n") if (not defined $vepath);
+
+pb_mkdir_p($vepath) if (! -d $vepath);
+
+#
+# Get the package list to download, store them in a cache directory
+#
+my ($rbscachedir) = pb_conf_get_if("rbscachedir");
+my ($pkgs,$mirror) = pb_distro_get_param($pbos,pb_conf_get("rbsmindep","rbsmirrorsrv"));
+
+my $cachedir = "/var/cache/rpmbootstrap";
+$cachedir = $rbscachedir->{'default'} if (defined $rbscachedir->{'default'});
+
+# Point to the right subdir and create it if needed
+$cachedir .= "/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+pb_mkdir_p($cachedir) if (! -d $cachedir);
+
+# Get the complete package name from the mirror
+#
+my $ua = LWP::UserAgent->new;
+$ua->timeout(10);
+$ua->env_proxy;
+
+pb_log(0,"Downloading package list from $mirror ...\n");
+my $response = $ua->get($mirror);
+if (! $response->is_success) {
+	if ($mirror =~ /i386/) {
+		# Some distro have an i586 or i686 mirror dir instead for i386
+		warn "Unable to download packages from $mirror for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.";
+		$mirror =~ s|/i386/|/i586/|;
+		$response = $ua->get($mirror);
+		if (! $response->is_success) {
+			die "Unable to download packages from $mirror for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}";
+		}
+	}
+}
+pb_log(3,"Mirror $mirror gave answer: ".Dumper($response->dump(maxlength => 0))."\n");
+
+# Try to find where the repodata structure is for later usage
+my $repo = $mirror;
+my $found = 0;
+if ($pbos->{'install'} =~ /yum/) {
+	my $response1;
+	while ($found == 0) {
+		$response1 = $ua->get("$repo/repodata");
+		pb_log(2,"REPO analyzed: $repo\n");
+		if (! $response1->is_success) {
+			$repo = dirname($repo);
+
+			# There is a limit to the loop, when / is reached and nothing found
+			my ($scheme, $account, $host, $port, $path) = pb_get_uri($repo);
+			die "Unable to find the repodata structure of the mirror $mirror\nPlease check the URL or warn the dev team.\n" if (($path =~ /^[\/]+$/) || ($path =~ /^$/));
+		
+			# / not reached, so looping
+			next;
+		} else {
+			# repodata found $repo is correct
+			$found = 1;
+			pb_log(2,"REPO found: $repo\n");
+			last;
+		}
+	}
+}
+
+# Manages architectures specificities
+my $parch = $pbos->{'arch'};
+$parch = "i[3456]86" if ($pbos->{'arch'} eq "i386");
+
+# Get the list of packages and their URL in this hash
+my %url;
+foreach my $l (split(/\n/,$response->as_string())) {
+	# Find a href ref
+	if ($l =~ /<a href="(.*)">(.*)<\/a>/i) {
+		my $url = $1;
+		my $pkg = $1;
+		my $desc = $2;
+		pb_log(3,"Found desc URL $desc: ");
+		# find an rpm package ref name-ver-tag.arch.rpm
+		if ($pkg =~ /(.+)-([^-]+)-([^-]+)\.(noarch|$parch)\.rpm$/) {
+			pb_log(3,"package ($1 + $2 + $3 + $4)\n");
+			$url{$1} = "$mirror/$url";
+		} else {
+			pb_log(3,"not a package\n");
+		}
+	}
+}
+
+#
+# Prepare early the yum cache env for the VE in order to copy in it packages on the fly
+#
+my $oscachedir = "/tmp";
+my $osupdcachedir;
+my $osupdname = "";
+
+if ($pbos->{'install'} =~ /yum/) {
+	$oscachedir = "$vepath/var/cache/yum/core/packages/";
+	$osupdcachedir = "$vepath/var/cache/yum/updates-released/packages/";
+	$osupdname = "YUM";
+	# Recent Fedora release use a new yum cache dir
+	if (($pbos->{'name'} eq "fedora") && ($pbos->{'version'} > 8)) {
+		$oscachedir = "$vepath/var/cache/yum/$pbos->{'arch'}/$pbos->{'version'}/fedora/packages";
+		$osupdcachedir = "$vepath/var/cache/yum/$pbos->{'arch'}/$pbos->{'version'}/updates/packages";
+		$osupdcachedir = "$vepath/var/cache/yum/updates-released/packages/";
+	}
+} elsif ($pbos->{'install'} =~ /zypper/) {
+	$oscachedir = "$vepath/var/cache/zypp/packages/opensuse/suse/$pbos->{'arch'}";
+	$osupdname = "Zypper";
+} elsif ($pbos->{'install'} =~ /urpmi/) {
+	$oscachedir = "$vepath/var/cache/urpmi/rpms";
+	$osupdname = "URPMI";
+}
+pb_log(1,"Setting up $osupdname cache in VE\n");
+pb_mkdir_p($oscachedir);
+pb_mkdir_p($osupdcachedir) if (defined $osupdcachedir);
+
+# For each package to process, get it, put it in the cache dir 
+# and extract it in the target dir. If not asked to keep, remove it
+# Just download if asked so. 
+
+my $warning = 0;
+my $lwpkg ="";
+foreach my $p (split(/,/,$pkgs)) {
+	pb_log(1,"Processing package $p ...\n");
+	# Just print packages names if asked so. 
+	if (defined $url{$p}) {
+		if ($opts{'p'}) {
+			pb_log(0,"$url{$p}\n");
+			next;
+		} else {
+			# Now download if not already in cache
+			my $p1 = basename($url{$p});
+			if (! -f "$cachedir/$p1") {
+				pb_system("wget --quiet -O $cachedir/$p1 $url{$p}","Downloading package $p1 ...");
+			} else {
+				pb_log(1,"Package $p1 already in cache\n");
+			}
+		
+			# End if download only
+			if ($opts{'d'}) {
+				next;
+			}
+	
+			#
+			# Copy the cached .RPM files into the oscachedir directory, so that os doesn't need to download them again.
+			#
+			pb_log(1,"Link package into $oscachedir\n");
+			copy("$cachedir/$p1",$oscachedir) if (defined $oscachedir);
+			symlink("$oscachedir/$p1","$osupdcachedir/p1") if (defined $osupdcachedir);
+
+			# And extract it to the finale dir
+			pb_system("cd $vepath ; rpm2cpio $cachedir/$p1 | cpio -ivdum","Extracting package $p1 into $vepath");
+		
+			# Remove cached package if not asked to keep
+			if (! $opts{'k'}) {
+				unlink("$cachedir/$p1");
+			}
+	
+		}
+	} else {
+		pb_log(0,"WARNING: unable to find URL for $p\n");
+		$warning++;
+		$lwpkg .= " $p";
+	}
+}
+
+if ($warning ge 1) {
+pb_log(0,"$warning WARNINGS found.\nMaybe you should review your package list for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}\nand remove$lwpkg\n");
+}
+
+# Stop here if we just print
+if ($opts{'p'}) {
+	exit(0);
+}
+
+# Now executes the VE finalization steps required for it to work correctly
+pb_log(0,"VE post configuration\n");
+
+# yum needs that distro-release package be installed, so force it
+if ($pbos->{'install'} =~ /yum/) {
+	my $ddir = $pbos->{'name'};
+	foreach my $p1 (<$cachedir/($ddir|redhat)-release-*.rpm>) {
+		copy("$cachedir/$p1","$vepath/tmp");
+		pb_system("chroot $vepath rpm -ivh --force --nodeps /tmp/$p1","Forcing RPM installation of $p1");
+		unlink("$vepath/tmp/$p1");
+	}
+}
+#
+# Make sure there is a resolv.conf file present, such that DNS lookups succeed.
+#
+pb_log(1,"Creating resolv.conf\n");
+pb_mkdir_p("$vepath/etc");
+copy("/etc/resolv.conf","$vepath/etc/");
+
+#
+# BUGFIX:
+#
+if ((($pbos->{'name'} eq "centos") || ($pbos->{'name'} eq "rhel")) && ($pbos->{'version'} eq "5")) {
+	pb_log(1,"BUGFIX for centos-5\n");
+	pb_mkdir_p("$vepath/usr/lib/python2.4/site-packages/urlgrabber.skx");
+	foreach my $i (<$vepath/usr/lib/python2.4/site-packages/urlgrabber/keepalive.*>) {
+    	move($i,"$vepath/usr/lib/python2.4/site-packages/urlgrabber.skx/");
+	}
+}
+
+#
+# /proc needed
+#
+pb_mkdir_p("$vepath/proc");
+pb_system("mount -o bind /proc $vepath/proc","Mounting /proc");
+
+#
+# Some devices may be needed
+#
+pb_mkdir_p("$vepath/dev");
+chmod 0755,"$vepath/dev";
+pb_system("mknod -m 644 $vepath/dev/random c 1 8","Creating $vepath/dev/random") if (! -c "$vepath/dev/random");
+pb_system("mknod -m 644 $vepath/dev/urandom c 1 9","Creating $vepath/dev/urandom") if (! -c "$vepath/dev/urandom");
+pb_system("mknod -m 666 $vepath/dev/zero c 1 5","Creating $vepath/dev/zero") if (! -c "$vepath/dev/zero");
+
+my $minipkglist;
+
+pb_log(1,"Adapting $osupdname repository entries\n");
+if ($pbos->{'install'} =~ /yum/) {
+	#
+	# Force the architecture for yum
+	# The goal is to allow i386 chroot on x86_64
+	#
+	# FIX: Not sufficient to have yum working
+	# mirrorlist is not usable
+	# $releasever also needs to be filtered
+	# yum.conf as well
+	foreach my $i (<$vepath/etc/yum.repos.d/*>,"$vepath/etc/yum.conf") {
+		pb_system("sed -i -e 's/\$basearch/$pbos->{'arch'}/g' $i","","quiet");
+		pb_system("sed -i -e 's/\$releasever/$pbos->{'version'}/g' $i","","quiet");
+		pb_system("sed -i -e 's/^mirrorlist/#mirrorlist/' $i","","quiet");
+		# rather use neutral separators here
+		pb_system("sed -i -e 's|^#baseurl.*\$|baseurl=$repo|' $i","","quiet");
+	}
+	$minipkglist = "ldconfig yum passwd vim-minimal dhclient authconfig";
+} elsif ($pbos->{'install'} =~ /zypper/) {
+	pb_mkdir_p("$vepath/etc/zypp/repos.d");
+	open(REPO,"> $vepath/etc/zypp/repos.d/$pbos->{'name'}-$pbos->{'version'}") || die "Unable to create repo file";
+	my $baseurl = dirname(dirname($mirror));
+	# Setup the repo
+	print REPO << 'EOF';
+[opensuse]
+name=$pbos->{'name'}-$pbos->{'version'}
+baseurl=$baseurl
+enabled=1
+gpgcheck=1
+
+EOF
+	close(REPO);
+	$minipkglist = "zypper vim-minimal dhclient";
+	# Bootstraping zypper
+	if ($pbos->{'version'} eq "10.2") {
+		pb_system("chroot $vepath /bin/bash -c \"yes | /usr/bin/zypper sa $baseurl $pbos->{'name'}-$pbos->{'version'}\"","Bootstrapping Zypper");
+	}
+} elsif ($pbos->{'install'} =~ /urpmi/) {
+	# Setup the repo
+	my $baseurl = dirname(dirname(dirname($mirror)));
+	pb_system("chroot $vepath /bin/bash -c \"urpmi.addmedia --distrib $baseurl\"","Bootstrapping URPMI");
+	$minipkglist = "ldconfig urpmi passwd vim-minimal dhcp-client";
+}
+
+#
+# Run "install the necessary modules".
+# No need for sudo here
+#
+$pbos->{'install'} =~ s/sudo//g;
+pb_system("chroot $vepath /bin/bash -c \"$pbos->{'install'} $minipkglist \"","Bootstrapping OS by running $pbos->{'install'} $minipkglist");
+
+#
+# make 'passwd' work.
+#
+pb_log(1,"Authfix\n");
+pb_system("chroot $vepath /bin/bash -c \"if [ -x /usr/bin/authconfig ]; then /usr/bin/authconfig --enableshadow --update; fi\"","Calling authconfig");
+
+# Installed additional packages we were asked to
+if (defined $opts{'a'}) {
+	$opts{'a'} =~ s/,/ /g;
+	pb_system("chroot $vepath /bin/bash -c \"$pbos->{'install'} $opts{'a'} \"","Adding packages to OS by running $pbos->{'install'} $opts{'a'}");
+}
+
+#
+# Clean up
+#
+pb_log(1,"Cleaning up\n");
+if ($pbos->{'install'} =~ /yum/) {
+	pb_system("chroot $vepath /usr/bin/yum clean all","Cleaning yum");
+}
+pb_system("umount $vepath/proc","Unmounting /proc");
+find(\&unlink_old_conf, $vepath);
+
+# Executes post-install step if asked for
+if ($opts{'s'}) {
+	pb_system("$opts{'s'} $vepath","Executing the post-install script: $opts{'s'} $vepath");
+}
+
+# Function for File::Find
+sub unlink_old_conf {
+
+	unlink($_) if ($_ =~ /\.rpmorig$/);
+	unlink($_) if ($_ =~ /\.rpmnew$/);
+}
Index: /0.11.2/rpmbootstrap/etc/.pbrc
===================================================================
--- /0.11.2/rpmbootstrap/etc/.pbrc	(revision 1078)
+++ /0.11.2/rpmbootstrap/etc/.pbrc	(revision 1078)
@@ -0,0 +1,43 @@
+#
+# Valid values for vetype are
+# chroot, (schroot, ... TBD)
+vetype default = chroot
+# Possible values are rpmbootstrap, mock, rinse ....TBD
+verpmtype default = rpmbootstrap
+# Possible value is debootstrap
+vedebtype default = debootstrap
+# Conf file for the appli chosen 
+# It's conf dir for mock
+# It's conf file for mock
+# It's not used yet by rpmbootstrap
+rbsconf default = /etc/rinse/rinse-dploy.conf
+# Special for rinse: script to launch before populating the VE
+rbsb4pi centos = /home/rinse/bin/before-post-install.sh
+
+verebuild default = false
+
+# Hash for VE stuff on vmtype
+ventp default = 1.pool.ntp.org
+ventpcmd default = /usr/sbin/ntpdate
+
+# We suppose we can commmunicate with the VE through schroot
+vehost default = localhost
+velogin default = pb
+
+# per VEs needed paramaters
+veopt default = 
+
+# Do we use snapshot mode for VEs ?
+# In which case all modifs in the VE are lost at the end
+vesnap default = false
+
+#
+# For Virtual machines management
+# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
+# followed by '-' and by release number
+# followed by '-' and by architecture
+# a chroot rhel-3-i386 here means that the VE will be located under $VEROOT/rhel/3/i386
+#
+#velist default = mandrake-10.1-i386,mandrake-10.2-i386,mandriva-2006.0-i386,mandriva-2007.0-i386,mandriva-2007.1-i386,mandriva-2008.0-i386,mandriva-2008.1-i386,mandriva-2009.0-i386,redhat-7.3-i386,redhat-9-i386,fedora-4-i386,fedora-5-i386,fedora-6-i386,fedora-7-i386,fedora-8-i386,fedora-9-i386,fedora-10-i386,rhel-2.1-i386,rhel-3-i386,rhel-4-i386,rhel-5-i386,suse-10.0-i386,suse-10.1-i386,suse-10.2-i386,suse-10.3-i386,sles-9-i386,sles-10-i386,gentoo-nover-i386,debian-3.1-i386,debian-4.0-i386,ubuntu-6.06-i386,ubuntu-7.04-i386,ubuntu-7.10-i386,ubuntu-8.04-i386,mandriva-2007.0-x86_64,mandriva-2007.1-x86_64,mandriva-2008.0-x86_64,mandriva-2008.1-x86_64,mandriva-2009.0-x86_64,fedora-6-x86_64,fedora-7-x86_64,fedora-8-x86_64,fedora-9-x86_64,fedora-10-x86_64,rhel-4-x86_64,rhel-5-x86_64,suse-10.2-x86_64,suse-10.3-x86_64,sles-10-x86_64,gentoo-nover-x86_64,debian-4.0-x86_64,ubuntu-7.04-x86_64,ubuntu-7.10-x86_64,rhel-3-ia64,centos-4-i386,centos-5-i386,centos-4-x86_64,centos-5-x86_64
+#velist default = centos-4-i386,centos-5-i386,centos-4-x86_64,centos-5-x86_64
+velist default = centos-4-i386,centos-5-i386,centos-4-x86_64,centos-5-x86_64,debian-5.0-i386,debian-5.0-x86_64,lsb-3.2.0-i386,lsb-3.2.0-x86_64,lsb-4.0.1-i386,lsb-4.0.1-x86_64,mandriva-2010.0-x86_64,ubuntu-10.04-x86_64,mandriva-2010.1-x86_64
Index: /0.11.2/rpmbootstrap/README
===================================================================
--- /0.11.2/rpmbootstrap/README	(revision 1005)
+++ /0.11.2/rpmbootstrap/README	(revision 1005)
@@ -0,0 +1,5 @@
+License
+=======
+
+The whole Project-builder.org project is provided under the GPL v2 as per the copying file.
+Other licenses may be available in addition later on.
