RedHat: fix makesrpm.pl version discovery
[openafs.git] / src / packaging / RedHat / makesrpm.pl
index 3fd938a..7a238f3 100755 (executable)
@@ -29,8 +29,10 @@ if (! -f $srcball) {
 
 my $tmpdir = File::Temp::tempdir(CLEANUP => 1);
 
-system("tar -C $tmpdir -xvjf $srcball '\*/configure.in' ".
-       "'\*/src/packaging/RedHat' > /dev/null")==0
+system("tar -C $tmpdir -xvjf $srcball '\*/configure.ac' ".
+       "'\*/src/packaging/RedHat' ".
+       "'\*/.version' ".
+       "'\*/build-tools' > /dev/null")==0
   or die "Unable to unpack src tar ball\n";
 
 my $dirh = IO::Dir->new($tmpdir);
@@ -41,29 +43,49 @@ die "Unable to find unpacked source code\n" if !$vdir;
 
 my $srcdir = $tmpdir."/".$vdir;
 
-# Work out which version we're dealing with from the configure.in file
+# Work out which version we're dealing with from git-version script
+# (which may use a .version file)
 my $afsversion;
 my $linuxver;
 my $linuxrel;
-my $fh = new IO::File $srcdir."/configure.in"
-  or die "Unable to find unpacked configure.in file";
-while(<$fh>) {
-  next if (/^\s*\#/);
-
-  if (/AM_INIT_AUTOMAKE\(openafs,(.*)\)/) {
-    $afsversion = $1;
-    next;
-  }
-  if (/LINUX_PKGVER=(.*)/) {
-    $linuxver = $1;
-    next;
-  }
-  if (/LINUX_PKGREL=(.*)/) {
-    $linuxrel = $1;
-    next;
-  }
+
+if (not defined($afsversion)) {
+  $afsversion = `"/bin/sh" "$srcdir/build-tools/git-version" "$srcdir"`;
 }
-undef $fh;
+
+# Build the Linux version and release information from the package version
+# We need to handle a number of varieties of package version -
+# Normal: 1.7.0
+# Prereleases: 1.7.0pre1
+# Development trees: 1.7.0dev
+# and RPMS which are built from trees midway between heads, such as 
+# 1.7.0-45-gabcdef or 1.7.0pre1-37-g12345 or 1.7.0dev-56-g98765
+
+if ($afsversion=~m/(.*)(pre[0-9]+)/) {
+    $linuxver=$1;
+    $linuxrel="0.$2";
+} elsif ($afsversion=~m/(.*)dev/) {
+    $linuxver=$1;
+    $linuxrel="0.dev";
+} else {
+    $linuxver=$afsversion;
+    $linuxrel=1;
+}
+
+if ($afsversion=~m/(.*)-([0-9]+)-(g[a-f0-9]+)$/) {
+    $linuxver = $1 if ($linuxver eq $afsversion);
+    $linuxrel.=".$2.$3";
+}
+
+print "Linux release is $linuxrel\n";
+print "Linux version is $linuxver\n";
+
+# Figure out a major, minor and release so that we know which version we're
+# building, and therefore what the srpm is going to be called
+$linuxver=~/([0-9]+)\.([0-9]+)\.([0-9]+)/;
+my $major = $1;
+my $minor = $2;
+my $patchlevel = $3;
 
 # Build the RPM root
 
@@ -137,14 +159,24 @@ if ($changelog) {
 }
 
 # Build an RPM
-system("rpmbuild -bs --define \"_topdir $tmpdir/rpmdir\" ".
+system("rpmbuild -bs --define \"dist %undefined\" ".
+       "--define \"_topdir $tmpdir/rpmdir\" ".
        "$tmpdir/rpmdir/SPECS/openafs.spec > /dev/null") == 0
   or die "rpmbuild failed : $!\n";
 
 # Copy it out to somewhere useful
-File::Copy::copy("$tmpdir/rpmdir/SRPMS/openafs-$linuxver-1.$linuxrel.src.rpm",
-                "openafs-$linuxver-1.$linuxrel.src.rpm")
-  or die "Unable to copy output RPM : $!\n";
+if (!defined($major) || $major > 1 || ($major == 1 && $minor >= 6)) {
+  File::Copy::copy("$tmpdir/rpmdir/SRPMS/openafs-$linuxver-$linuxrel.src.rpm",
+                  "openafs-$linuxver-$linuxrel.src.rpm")
+    or die "Unable to copy output RPM : $!\n";
+
+  print "SRPM is openafs-$linuxver-$linuxrel.src.rpm\n";
+} else {
+  File::Copy::copy("$tmpdir/rpmdir/SRPMS/openafs-$linuxver-1.$linuxrel.src.rpm",
+                  "openafs-$linuxver-1.$linuxrel.src.rpm")
+    or die "Unable to copy output RPM : $!\n";
+
+  print "SRPM is openafs-$linuxver-1.$linuxrel.src.rpm\n";
+}
 
-print "SRPM is openafs-$linuxver-1.$linuxrel.src.rpm\n";