Prevent -I/usr/include during Linux kernel module compilation.
authorshort <>
Mon, 6 Oct 2003 09:57:56 +0000 (09:57 +0000)
committershort <>
Mon, 6 Oct 2003 09:57:56 +0000 (09:57 +0000)
Workaround Red Hat kernels: <linux/version.h> before <linux/modversions.h>
Workaround broken pre-built 'dependencies' file on installed kernel sources.

kernel/Linux/prepmod.in

index a458f2e..b3c93cf 100755 (executable)
@@ -27,12 +27,9 @@ use Getopt::Long;
 
 my $basedir='@datadir@/lufs';
 my $vardir='@localstatedir@/lib/lufs';
-my $includedir='@includedir@'; # '/lufs' is required by C '#include'
 $basedir=~s#\$\Q{prefix}\E#'@prefix@';#ge;
 $vardir=~s#\$\Q{prefix}\E#'@prefix@';#ge;
 $vardir="" if $vardir=~/^@/;
-$includedir=~s#\$\Q{prefix}\E#'@prefix@';#ge;
-$includedir="" if $includedir=~/^@/;
 sub srcdir { my($uname_r)=@_; $basedir."/".($uname_r lt "2.5" ? "2.4" : "2.5"); }
 my $modbindir=$basedir."/modbin";
 my @sources=qw(proc.c inode.c dir.c file.c symlink.c);
@@ -42,7 +39,6 @@ my $kernel;
 my $prebuild;
 use vars qw($kernel_gcc_args);
 $kernel_gcc_args="";
-$kernel_gcc_args="-I$includedir" if $includedir;
 
 my $lufsmnt_bin;
 if ($0 eq "lufsmnt" || $0=~m#/lufsmnt$#) {
@@ -190,7 +186,7 @@ my($kernel,$uname_r,$destmodule)=@_;
 
        my $config=_readfile "$kernel/.config","optional";
        my $autoconf=_readfile "$kernel/include/linux/autoconf.h","optional";
-       $cmdline.=" -DMODVERSIONS -include $kernel/include/linux/modversions.h"
+       $cmdline.=" -DMODVERSIONS -include $kernel/include/linux/version.h -include $kernel/include/linux/modversions.h"
                        if 0
                                        || $config=~/^CONFIG_MODVERSIONS=y\b/m
                                        || $autoconf=~/^#define CONFIG_MODVERSIONS\b/m
@@ -207,7 +203,7 @@ my($kernel,$uname_r,$destmodule)=@_;
 
 sub build_make
 {
-my($kernel,$uname_r,$destmodule)=@_;
+my($kernel,$uname_r,$destmodule,%args)=@_;
 
        print STDERR "Using kernel sources: $kernel\n" if !$quiet;
        confess "Kernel sources $kernel do not contain 'Rules.make' file" if ! -f $kernel."/Rules.make";
@@ -216,6 +212,14 @@ my($kernel,$uname_r,$destmodule)=@_;
        do { $kdebug=$_ if !/^@/; } for ('@KDEBUG_FLAGS@');
        my $predir=srcdir $uname_r;
        $predir=$ENV{"PWD"}."/$predir" if $predir!~m#^/#;
+       # Do not use existing '$kernel/tmp_include_depends' or '$kernel/.depend'
+       # as it may contain non-existing pathnames:
+       _system "make -C $kernel dep" if !$args{"nodep"};
+       # Workaround a bug in at least Red Hat 2.4.18-18.8.0
+       for ("$kernel/include/linux/modversions.h") {
+               _system "cp -p $_ $_-orig" if ! -f "$_-orig";
+               _writefile $_,"#include <linux/version.h>\t/* lufs */\n"._readfile $_;
+               }
        my $cmdline="make -C $kernel"
                        ." SUBDIRS=\"$predir\" modules"
                        ." EXTRA_CFLAGS=\"$kernel_gcc_args\""
@@ -230,7 +234,7 @@ my($kernel,$uname_r,$destmodule)=@_;
 
 sub build
 {
-my($kernel,$uname_r,$destmodule)=@_;
+my($kernel,$uname_r,$destmodule,%args)=@_;
 
        # Debian uname(1) does not support '-p'.
        my $arch=_readfile "uname -p|" || _readfile "uname -m|";
@@ -243,9 +247,9 @@ my($kernel,$uname_r,$destmodule)=@_;
                }
        my $r;
        if (-f "$kernel/Rules.make" && -f "$kernel/.config")
-               { $r=build_make $kernel,$uname_r,$destmodule; }
+               { $r=build_make $kernel,$uname_r,$destmodule,%args; }
        else
-               { $r=build_gcc $kernel,$uname_r,$destmodule; }
+               { $r=build_gcc $kernel,$uname_r,$destmodule,%args; }
        _system "rm -f $kernel/.config"
                        if !$single_config;
        return $r;
@@ -254,11 +258,11 @@ my($kernel,$uname_r,$destmodule)=@_;
 
 sub prebuild_kernel
 {
-my($dir,$vendor,$uname_r)=@_;
+my($dir,$vendor,$uname_r,%args)=@_;
 
        confess "Unrecognized vendor for dir: $dir" if !$vendor;
        confess "Unrecognized uname_r for dir: $dir" if !$uname_r;
-       confess "Failed to build $dir" if !build $dir,$uname_r,$modbindir."/lufs-$vendor-$uname_r.o";
+       confess "Failed to build $dir" if !build $dir,$uname_r,$modbindir."/lufs-$vendor-$uname_r.o",%args;
 }
 
 
@@ -325,7 +329,7 @@ RHCONFIG_H_NOBOOT_EOF
                                next if ! -f $spec_config;
                                _system "ln -s $spec_config $dir/.config";
                                }
-                       prebuild_kernel $dir,$vendor,$uname_r.$smp.".".$arch;
+                       prebuild_kernel $dir,$vendor,$uname_r.$smp.".".$arch,"nodep"=>1;
                        _system "rm -f $dir/.config"
                                        if !$single_config;
                        }