Fixed kernel sources path for 'smp' kernels.
[lufs.git] / kernel / Linux / prepmod.in
index 6cfcd11..8acdf0f 100755 (executable)
@@ -118,7 +118,7 @@ my $modules=_readfile "/proc/modules";      # 'lufs' may be already loaded
 _pass if $modules=~/^lufs\b/m;
 _pass if !_system "/sbin/modprobe lufs 2>/dev/null";
 
-print STDERR "Preparing LUFS kernel module - this may take several minutes...\n";      # if !$quiet;
+print STDERR "Preparing LUFS kernel module... Run $basedir/prepmod if problems occur.\n";      # if !$quiet;
 
 my $proc_version=_readfile "/proc/version";
 my $uname_r=($proc_version=~/^Linux version (\S+)/)[0] || _readfile "uname -r|";
@@ -134,7 +134,7 @@ my $moduledir="/lib/modules/$uname_r$uname_smp/kernel/fs/lufs";
 print STDERR "Destination module directory: $moduledir\n" if !$quiet;
 
 my @kernel_paths=(
-                               "/lib/modules/$uname_r/build",
+                               "/lib/modules/$uname_r$uname_smp/build",
                                "/usr/src/kernel-headers-$uname_r",
                                "/usr/src/linux-$uname_r",
                                "/usr/src/linux-$uname_r_base",
@@ -156,6 +156,12 @@ else {
                if (build($kernel,$uname_r,$_)) {
                        do { cluck "Failed to symlink $_"; next; }
                                        if _system "/bin/rm -rf $moduledir; /bin/mkdir -p $moduledir; /bin/ln -s $_ $moduledir/$lufs_o";
+                       # Check if the compiled module matches the currently running kernel.
+                       # We may found some unspecific sources ('/usr/src/linux/'?) not matching the current kernel.
+                       # It still may be worth to try precompiled modules and/or give suggestive error messages.
+                       # Do not: /sbin/insmod -o lufs -p $_ 2>/dev/null
+                       # as 2.6 insmod has no options at all.
+                       next if _system "/sbin/rmmod lufs 2>/dev/null; /sbin/insmod $moduledir/$lufs_o 2>/dev/null";
                        _pass 1;
                        }
                }
@@ -176,7 +182,7 @@ confess "Failed to prepare $lufs_o module for your Linux kernel $uname_r.\n"
                .($kernel ? "Detected Linux kernel sources \"$kernel\" do not appear to be valid.\n"
                                : "No Linux kernel sources for your running kernel were found.\n")
                ."Please install kernel-source-x.y.z.i386.rpm or kernel-headers_x.y.z_i386.deb.\n"
-               ."The following directory paths were search (first existing directory used):\n"
+               ."The following directory paths were searched (first existing directory used):\n"
                .join("",map("\t\t$_\n",@kernel_paths));
 
 
@@ -253,8 +259,13 @@ my($kernel,$uname_r,$destmodule,%args)=@_;
        return $r if $r;
        # Rebuild existing '$kernel/tmp_include_depends' or '$kernel/.depend'
        # as it may contain non-existing pathnames:
-       _system "find $kernel -name .depend|xargs rm -f; make -C $kernel dep"
-                               .($quiet ? ' &>/dev/null' : '');
+       _system "find $kernel -name .depend|xargs rm -f;"
+                       # Red Hat 2.4.18-14 contains precompiled .so-dependent 'mkdep'
+                       ." rm -f $kernel/scripts/mkdep;"
+                       # SuSE 2.4.21-144 contains precompiled .so-dependent 'split-include'
+                       ." rm -f $kernel/scripts/split-include;"
+                       ." make -C $kernel dep"
+                                   .($quiet ? ' &>/dev/null' : '');
        return !_system $cmdline;
 }