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);
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$#) {
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
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";
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\""
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|";
}
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;
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;
}
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;
}