r2649 - trunk/build.d/dist/debian

mikma at minisip.org mikma at minisip.org
Thu Jun 8 23:58:12 CEST 2006


Author: mikma
Date: 2006-06-08 23:58:11 +0200 (Thu, 08 Jun 2006)
New Revision: 2649

Modified:
   trunk/build.d/dist/debian/dist.conf
   trunk/build.d/dist/debian/dist.local.example
   trunk/build.d/dist/debian/dist.pl
Log:
Improvements to the Debian build script.
* Add support for building for multiple Debian/Ubuntu releases using
  pdebuild/pbuilder and a repreprop repository. 


Modified: trunk/build.d/dist/debian/dist.conf
===================================================================
--- trunk/build.d/dist/debian/dist.conf	2006-06-08 14:13:34 UTC (rev 2648)
+++ trunk/build.d/dist/debian/dist.conf	2006-06-08 21:58:11 UTC (rev 2649)
@@ -8,6 +8,8 @@
 #
 #######
 
+our $debian_release_default = 'sid';
+
 set_callbacks('libmutil', 'bootstrap-pre' => sub {
 		for my $i ( qw( libtool ltdl ) ) {
 			copy("/usr/share/aclocal/$i.m4", "$srcdir/$i.m4")
@@ -15,4 +17,50 @@
 		}
 	});
 
+my %sid_params = (
+	suite => 'unstable',
+	codename => 'sid',
+	description => 'Debian unstable/sid',
+	buildareadir => "$topdir/build/build-area/debian",
+);
+
+my %etch_params = (
+	suite => 'testing',
+	codename => 'etch',
+	description => 'Debian testing/etch',
+	buildareadir => "$topdir/build/build-area/debian",
+);
+
+my %sarge_params = (
+	suite => 'stable',
+	codename => 'sarge',
+	description => 'Debian stable/sarge',
+	buildareadir => "$topdir/build/build-area/debian",
+);
+
+my %dapper_params = (
+	suite => 'dapper',
+	codename => 'dapper',
+	description => 'Ubuntu dapper',
+	buildareadir => "$topdir/build/build-area/ubuntu",
+);
+
+our %debian_releases = (
+	sid => \%sid_params,
+	sarge => \%sarge_params,
+	etch => \%etch_params,
+
+	dapper => \%dapper_params,
+);
+
+our %debian_callbacks = (
+	# Parameters: %debian_release
+	# Returns:    builder used as --svn-builder
+	builder => undef,
+
+	# Parameters: %debian_release, $changes_filename
+	# Returns:    -
+	'package-post' => undef,
+);
+
 1

Modified: trunk/build.d/dist/debian/dist.local.example
===================================================================
--- trunk/build.d/dist/debian/dist.local.example	2006-06-08 14:13:34 UTC (rev 2648)
+++ trunk/build.d/dist/debian/dist.local.example	2006-06-08 21:58:11 UTC (rev 2649)
@@ -9,4 +9,30 @@
 #
 #######
 
+## One of sid, etch, sarge, dapper
+#$debian_release_default = 'sid';
+
+##
+## builder callback
+## Adds support for building packages in a pdebuild/pbuilder chroot
+##
+#debian_set_callback('builder', sub {
+#	my ($params) = @_;
+#	my $codename = $params->{'codename'};
+#	my $buildareadir = $params->{'buildareadir'};
+#
+#	return "pdebuild --pbuilderroot sudo --configfile /etc/pbuilder/${codename} --buildresult ${buildareadir}",
+#} );
+#
+##
+## package-post callback
+## Includes the created package in a reprepro repository
+##
+#debian_set_callback('package-post', sub {
+#	my ($params, $changes) = @_;
+#	my $codename = $params->{'codename'};
+#
+#	act('debian: reprepro', qw( reprepro --basedir /var/lib/reprepro/debian include ), $codename, $changes );
+#} );
+
 1

Modified: trunk/build.d/dist/debian/dist.pl
===================================================================
--- trunk/build.d/dist/debian/dist.pl	2006-06-08 14:13:34 UTC (rev 2648)
+++ trunk/build.d/dist/debian/dist.pl	2006-06-08 21:58:11 UTC (rev 2649)
@@ -9,30 +9,93 @@
 #
 
 our $debian_tarballsdir = "$topdir/build/tarballs";
-our $debian_buildareadir = "$topdir/build/build-area";
+our $default_buildareadir = "$topdir/build/build-area";
 our $debian_dir = "$confdir/dist/debian/src";
 our $svn_url_base = 'minisip+svn://svn.minisip.org/minisip';
 my $debian_tags_url = "${svn_url_base}/tags/build.d/dist/src/debian";
 my $upstream_tags_url = "${svn_url_base}/tags";
 
+
+sub debian_set_callback {
+	my ($name, $callback) = @_;
+
+	$debian_callbacks{$name} = $callback;
+}
+
+sub debian_release {
+	my $release = $debian_release_default;
+	my $params = $debian_releases{$release};
+
+	return $params;
+}
+
+sub debian_buildarea {
+	my $params = &debian_release;
+
+	unless ($params) {
+		warn "warning: Debian release not found\n";
+		return;
+	}
+
+	my $debian_buildareadir = $params->{'buildareadir'} || $default_buildareadir;
+	return $debian_buildareadir;
+}
+
 #
+# debian_version
+#
+sub debian_version {
+	my $versionline = `dpkg-parsechangelog -l${debian_dir}/$pkg/debian/changelog | grep ^Version`;
+
+	$versionline =~ /^Version: (.*)/;
+	my $version = $1;
+
+	return $version;
+}
+
+#
+# debian_version_full
+#
+sub debian_version_full {
+	my ($params) = @_;
+	my $version = &debian_version;
+	
+	if( $suite ne 'unstable' ){
+		my $codename = $params->{'codename'};
+
+		if ( $version !~ /$codename/ ) {
+			$version = "${version}${codename}1";
+		}
+	}
+
+	return $version;
+}
+
+#
 # debian_changes
 # return .changes file
 #
 sub debian_changes {
+	my ($params) = @_;
+	my $debian_buildareadir = &debian_buildarea;
+
     my $arch = `dpkg-architecture -qDEB_BUILD_ARCH`;
 
     $arch =~ s/\s*//g;
 
-    my $versionline = `dpkg-parsechangelog -l${debian_dir}/$pkg/debian/changelog | grep ^Version`;
+    my $version = &debian_version_full($params);
 
-    $versionline =~ /^Version: (.*)/;
-    my $version = $1;
-
     my $changes = "$debian_buildareadir/${pkg}_${version}_${arch}.changes";
-    $changes = "$debian_buildareadir/${pkg}_${version}_source.changes" unless -e $changes;
 
-    return $changes;
+	return $changes if -e $changes;
+
+	$changes = "$debian_buildareadir/${pkg}_${version}_source.changes";
+
+	return $changes if -e $changes;
+
+	print "Changes not found: $changes";
+
+	return undef;
 }
 
 #
@@ -40,6 +103,16 @@
 # build source and binary package
 #
 sub debian_package {
+	my $params = &debian_release;
+
+	unless ($params) {
+		warn "warning: Debian release not found\n";
+		return;
+	}
+
+	my $builder = $debian_callbacks{'builder'};
+	my $buildareadir = $params->{'buildareadir'} || $default_buildaredir;
+
 	my @distfiles = distfiles();
 	unless (@distfiles) {
 		warn <<NEED_TARBALLS;
@@ -66,13 +139,55 @@
 	    }
 	}
 
-	easy_mkdir($debian_buildareadir);
+	easy_mkdir($buildareadir);
 
-	my $svn_override = "tagsUrl=$debian_tags_url/${pkg},upsTagUrl=$upstream_tags_url/${pkg},buildArea=$debian_buildareadir,origDir=$debian_tarballsdir";
+	my $svn_override = "tagsUrl=$debian_tags_url/${pkg},upsTagUrl=$upstream_tags_url/${pkg},buildArea=$buildareadir,origDir=$debian_tarballsdir";
+	my @buildpackage_args = qw( --svn-dont-clean --svn-ignore-new );
 
+	push(@buildpackage_args, "--svn-override=${svn_override}");
+
+	my $builder_str;
+	if ($builder) {
+		$builder_str = &$builder($params);
+	}
+
+	if ($builder_str) {
+		push(@buildpackage_args, "--svn-builder=${builder_str}");
+	} else {
+		push(@buildpackage_args, qw( -us -uc -rfakeroot ));
+	}
+
 	easy_chdir("$debian_dir/$pkg");
-	act('debian: svn-buildpackage', qw( svn-buildpackage -us -uc -rfakeroot --svn-dont-clean --svn-ignore-new ), "--svn-override=${svn_override}" );
 
+	my $suite = $params->{'suite'};
+	my $description = $params->{'description'};
+	my $version = &debian_version;
+	my $version_full = &debian_version_full($params);
+	
+	if( $version ne $version_full ){
+		my $codename = $params->{'codename'};
+
+		act('debian: backup changelog',
+		    qw( cp -a debian/changelog debian/changelog.build_bak ) );
+
+		act('debian: update changelog', 'dch',
+		    '--newversion', $version_full,
+		    '--distribution', $suite,
+		    "Package for $description");
+	}
+
+	if( act('debian: svn-buildpackage', 'svn-buildpackage', @buildpackage_args) ){
+		my $changes = &debian_changes($params);
+		my $package_post = $debian_callbacks{'package-post'};
+
+		&$package_post( $params, $changes ) if $package_post;
+	}
+
+	if( $suite ne 'unstable' ){
+		act('debian: restore changelog',
+		    qw( mv -f debian/changelog.build_bak debian/changelog ) );
+	}
+
 	return debian_pkgfiles();
 }
 
@@ -82,8 +197,18 @@
 # all files listed in the .changes file
 #
 sub debian_pkgfiles {
-    my $changes = &debian_changes;
+	my $params = &debian_release;
 
+	unless ($params) {
+		warn "warning: Debian release not found\n";
+		return;
+	}
+
+    my $changes = &debian_changes($params);
+    my $debian_buildareadir = &debian_buildarea;
+
+    die "No changes file found" unless $changes;
+
     open(CHANGES, "< $changes") or die "can't read $changes";
 
     my @files;
@@ -113,8 +238,15 @@
 # dump contents of all packages listed in .changes file
 #
 sub debian_pkgcontents {
-    my $changes = &debian_changes;
+	my $params = &debian_release;
 
+	unless ($params) {
+		warn "warning: Debian release not found\n";
+		return;
+	}
+
+	my $changes = &debian_changes($params);
+
     act('debian: debc', 'debc', $changes);
 }
 
@@ -122,8 +254,16 @@
 # debian_install
 # install all packages listed in the .changes file
 sub debian_install {
-    my $changes = &debian_changes;
+	my $params = &debian_release;
 
+	unless ($params) {
+		warn "warning: Debian release not found\n";
+		return;
+	}
+
+	my $changes = &debian_changes($params);
+    my $debian_buildareadir = &debian_buildarea;
+
     act('debian: debi', qw( debi ), '--debs-dir', $debian_buildareadir, $changes );
 }
 



More information about the Minisip-devel mailing list