linux-fedora9-packaging-updates-20080422
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Tue, 22 Apr 2008 13:50:23 +0000 (13:50 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 22 Apr 2008 13:50:23 +0000 (13:50 +0000)
LICENSE IPL10

make build system able to cope with fedora 9

src/packaging/RedHat/mockbuild.pl
src/packaging/RedHat/openafs-kmodtool
src/packaging/RedHat/openafs.spec.in

index ace74ca..d632acc 100755 (executable)
@@ -20,6 +20,50 @@ my $buildall = 0;
 my $ignorerelease = 1;
 my @newrpms;
 
+# Words cannot describe how gross this is. Yum no longer provides usable
+# output, so we need to call the python interface. At some point this
+# probably means this script should be entirely rewritten in python,
+# but this is not that point.
+
+sub findKernelModules {
+  my ($root, $uname, @modules) = @_;
+
+  my $modlist = join(",",map { "'".$_."'" } @modules);
+  my $python = <<EOS;
+import yum;
+import sys;
+base = yum.YumBase();
+base.doConfigSetup('$root/etc/yum.conf', '$root');
+base.doRepoSetup();
+base.doSackSetup();
+EOS
+
+  if ($uname) {
+    $python.= <<EOS;
+
+for pkg, values in base.searchPackageProvides(['kernel-devel-uname-r']).items():
+  if values[0].find('kernel-devel-uname-r = ') != -1:
+    print '%s.%s %s' % (pkg.name, pkg.arch, values[0].replace('kernel-devel-uname-r = ',''));
+
+EOS
+  } else {
+    $python.= <<EOS;
+
+print '\\n'.join(['%s.%s %s' % (x.name, x.arch, x.printVer()) for x in base.searchPackageProvides([$modlist]).keys()]);
+
+EOS
+  }
+
+#  my $output = `$suser -c "python -c \\\"$python\\\"" `;
+  my $output = `python -c "$python"`;
+
+  die "Python script to figure out available kernels failed : $output" 
+    if $?;
+
+  return $output;
+}
+
+
 my %platconf = ( "fedora-5-i386" => { osver => "fc5",
                                      kmod => '1',
                                      basearch => 'i386',
@@ -80,21 +124,21 @@ my %platconf = ( "fedora-5-i386" => { osver => "fc5",
                                        basearch => 'x86_64',
                                        updaterepo => 'update',
                                        results => "el5/x86_64" },
-#               "fedora-development-i386" => { osver => "fcd",
-#                                        kmod => '1',
-#                                        basearch => 'i386',
-#                                        results => 'fedora-devel/i386'},
-#               "fedora-development-x86_64" => { osver => "fcd",
-#                                          kmod => '1',
-#                                          basearch => 'x86_64',
-#                                          results => 'fedora-devel/x86_64'} 
+                "fedora-development-i386" => { osver => "fcd",
+                                         kmod => '1',
+                                         basearch => 'i386',
+                                         results => 'fedora-devel/i386'},
+                "fedora-development-x86_64" => { osver => "fcd",
+                                           kmod => '1',
+                                           basearch => 'x86_64',
+                                           results => 'fedora-devel/x86_64'} 
 );
 
 # The following are kernels that we can't successfully build modules against
 # due to issues in the packaged kernel-devel RPM.
 
 my %badkernels = (
-       "2.6.21-2950.fc8" => { "xen" => 1} # Missing build ID
+       "2.6.21-2950.fc8" => { "xen" => 1}, # Missing build ID
 );
 
 my $help;
@@ -155,21 +199,19 @@ foreach my $platform (@platforms) {
   print "Finding available kernel modules\n";
 
   my $arbitraryversion = "";
-  my $modules=`$suser -c 'yum --installroot $root provides kernel-devel'`;
-  if ($modules eq "") {
-      $modules=`$suser -c 'yum -d 2 --installroot $root provides kernel-devel'`;
-      my $modulen;
-      my %modulel;
-      foreach $modulen (split(/\n/, $modules)) {
-         my ($pk, $colon, $comment)=split(/\s+/, $modulen);
-         if ($pk =~ /^kernel/) {
-             $modulel{$pk} = "$pk";
-         } 
-      }
-      $modulen=join(" ", keys(%modulel));
-      $modules=`$suser -c 'yum --installroot $root list $modulen'`;
+
+  my $modules;
+  if ($platform=~/fedora-development/) {
+    $modules = findKernelModules($root, 0, "kernel-devel");
+  } elsif ($platform=~/centos-4/) {
+    $modules = findKernelModules($root, 0, "kernel-devel", "kernel-smp-devel", 
+                                "kernel-hugemem-devel", "kernel-xenU-devel");
+  } else {
+    $modules = findKernelModules($root, 0, 'kernel-devel');
   }
+
   foreach my $module (split(/\n/, $modules)) {
+      chomp $module;
       my ($package, $version, $repo)=split(/\s+/, $module);
       my ($arch) = ($package=~/\.(.*)$/);
       my ($variant) = ($package=~/kernel-(.*)-devel/);
@@ -182,7 +224,7 @@ foreach my $platform (@platforms) {
          next if ($variant eq "xen0"); # Fedora 5 has some bad xen0 kernel-devels
          next if ($variant eq "smp");
       }
-      if ($platform=~/fedora-8/) {
+      if ($platform=~/fedora-8/ || $platform=~/fedora-9/ || $platform=~/fedora-development/) {
          next if ($variant =~/debug$/); # Fedora 8 debug kernels are bad
       }
       print "$arch : $variant : $version\n";
index 5487547..ac887d2 100644 (file)
@@ -70,11 +70,16 @@ get_rpmtemplate ()
         *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;;
         *)     kdep="kernel-%{_target_cpu} = ${verrel}${variant}"     ;;
     esac
+    case "$verrel" in
+        *.fc9*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
+        *)      kname="${verrel}${variant}"                             ;;
+    esac
+
     cat <<EOF
 %package       -n kmod-${kmod_name}${dashvariant}
 Summary:          ${kmod_name} kernel module(s)
 Group:            System Environment/Kernel
-Provides:         kernel-modules = ${verrel}${variant}
+Provides:         kernel-modules = ${kname}
 Provides:         ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
 Provides:         openafs-kernel = %{PACKAGE_VERSION}
 Requires:         ${kdep}
@@ -85,14 +90,14 @@ Release:          %{pkgrel}.%(echo ${verrel} | tr - _)
 BuildRequires:    kernel${dashvariant}-devel-%{_target_cpu} = ${verrel}
 %description   -n kmod-${kmod_name}${dashvariant}
 This package provides the ${kmod_name} kernel modules built for the Linux
-kernel ${verrel}${variant} for the %{_target_cpu} family of processors.
+kernel ${kname} for the %{_target_cpu} family of processors.
 %post          -n kmod-${kmod_name}${dashvariant}
-/sbin/depmod -aeF /boot/System.map-${verrel}${variant} ${verrel}${variant} > /dev/null || :
+/sbin/depmod -aeF /boot/System.map-${kname} ${kname} > /dev/null || :
 %postun        -n kmod-${kmod_name}${dashvariant}
-/sbin/depmod -aF /boot/System.map-${verrel}${variant} ${verrel}${variant} &> /dev/null || :
+/sbin/depmod -aF /boot/System.map-${kname} ${kname} &> /dev/null || :
 %files         -n kmod-${kmod_name}${dashvariant}
 %defattr(644,root,root,755)
-/lib/modules/${verrel}${variant}/extra/${kmod_name}/
+/lib/modules/${kname}/extra/${kmod_name}/
 
 EOF
 }
index 13d3b8a..b0dfa2e 100644 (file)
 %define upvar ""
 %{!?kvariants: %define kvariants %{?upvar}}
 
-%{!?ksrcdir: %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+%if %{?ksrcdir:1}%{!?ksrcdir:0}
+  if ( -d %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}) ; then
+    %define ksrcdir %{_usrsrc}/kernels/%{kverrel}-%{_target_cpu}}
+  else
+    %define ksrcdir %{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}}
+  fi
+%endif
 
 %else # Legacy kernel build stuff 
 
@@ -821,7 +827,11 @@ ksrc=""
 %if %{fedorakmod} 
   for kvariant in %{kvariants} ; do
     if [ -z "${kvariant}" -o -z "$ksrc" ] ; then
-      ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+      if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+        ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+      else
+        ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+      fi
     fi
   done
 %endif
@@ -854,6 +864,12 @@ make only_libafs_tree || exit 1
 %if %{fedorakmod} && %{build_modules}
 for kvariant in %{kvariants} ; do
   if [ -n "${kvariant}" ] ; then
+    if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+      ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+    else
+      ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
+    fi
+
     cp -R libafs_tree _kmod_build_${kvariant}
     pushd _kmod_build_${kvariant}
     ./configure --with-afs-sysname=${sysname} \
@@ -861,7 +877,7 @@ for kvariant in %{kvariants} ; do
        --libdir=%{_libdir} \
        --bindir=%{_bindir} \
        --sbindir=%{_sbindir} \
-       --with-linux-kernel-headers=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} \
+       --with-linux-kernel-headers=${ksrc} \
 %if %{krb5support}
        --with-krb5-conf=/usr/kerberos/bin/krb5-config \
 %endif
@@ -1196,14 +1212,25 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libafsrpc.so.*
 for kvariant in %{kvariants}
 do
   if [ -n "$kvariant" ] ; then
-    srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+    if [ -d _kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP ] ; then
+      srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
+    else
+      srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}.${kvariant}-SP
+    fi
   else
     srcdir=${sysname}/dest/root.client%{_prefix}/vice/etc/modload
   fi
 
-  dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+  if [ -f ${srcdir}/libafs-%{kverrel}${kvariant}.ko ] ; then
+    srcmod=${srcdir}/libafs-%{kverrel}${kvariant}.ko
+    dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+  else
+    srcmod=${srcdir}/libafs-%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}.ko
+    dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}/extra/openafs
+  fi
+
   mkdir -p ${dstdir}
-  install -m 755 ${srcdir}/libafs-%{kverrel}${kvariant}.ko $dstdir/openafs.ko
+  install -m 755 ${srcmod} ${dstdir}/openafs.ko
 done
 %else
 # Install the kernel modules