Store pre-compiled local custom lufs module to: /var/lib/lufs
authorshort <>
Wed, 20 Aug 2003 17:29:50 +0000 (17:29 +0000)
committershort <>
Wed, 20 Aug 2003 17:29:50 +0000 (17:29 +0000)
Fixed custom lufs module build if lufs-devel is not yet installed.
Various bootstrap fixes.

kernel/Linux/prepmod.in

index ca9daa7..d138bdb 100755 (executable)
@@ -26,7 +26,9 @@ use Getopt::Long;
 
 
 my $basedir='@datadir@/lufs';
-$basedir=~s#\$\Q{prefix}\E#@prefix@#g;
+my $vardir='@localstatedir@/lib/lufs';
+$basedir=~s#\$\Q{prefix}\E#'@prefix@';#ge;
+$vardir=~s#\$\Q{prefix}\E#'@prefix@';#ge;
 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);
@@ -35,19 +37,22 @@ my $tmp_dir="prepmod-tmp-dir";
 my $quiet;
 my $kernel;
 my $prebuild;
-die if !GetOptions(
-               "q|quiet",\$quiet,
-                 "kernel",\$kernel,    # it must contain "include" subdir
-                 "modbindir=s",\$modbindir,
-                 "basedir=s",\$basedir,
-                 "prebuild",\&prebuild,
-                );
-
+my $kernel_gcc_args="";
 
 my $lufsmnt_bin;
 if ($0 eq "lufsmnt" || $0=~m#/lufsmnt$#) {
        $quiet=1;
-       $lufsmnt_bin='@modbindir@/lufsmnt-bin';
+       $lufsmnt_bin='@bindir@/lufsmnt-bin';
+       }
+else {
+       die if !GetOptions(
+                       "q|quiet",\$quiet,
+                         "kernel",\$kernel,    # it must contain "include" subdir
+                         "modbindir=s",\$modbindir,
+                         "basedir=s",\$basedir,
+                         "prebuild",\&prebuild,
+                         "kernel-gcc-args=s",\$kernel_gcc_args,
+                       );
        }
 
 
@@ -89,7 +94,7 @@ my $filesystems=_readfile "/proc/filesystems";        # 'lufs' may be built-in
 _pass if $filesystems=~/\blufs$/m;
 my $modules=_readfile "/proc/modules"; # 'lufs' may be already loaded
 _pass if $modules=~/^lufs\b/m;
-_pass if !_system "modprobe lufs";
+_pass if !_system "modprobe lufs 2>/dev/null";
 
 my $proc_version=_readfile "/proc/version";
 my $uname_r=($proc_version=~/^Linux version (\S+)/)[0] || _readfile "uname -r|";
@@ -107,9 +112,17 @@ confess "Failed to find kernel headers for $uname_r" if !$kernel;
 
 my $moduledir="/lib/modules/$uname_r/kernel/fs/lufs";
 print STDERR "Destination module directory: $moduledir\n" if !$quiet;
-_system "mkdir -p $moduledir" and confess "Cannot create moduledir: $moduledir";
 
-_pass 1 if build($kernel,$uname_r,"$moduledir/lufs.o");
+for ("$vardir/lufs.o") {
+       # Create the 'lufs.o' in our /var/lib directory and only link it
+       # to prevent using obsolete modules after upgrading 'lufs' package.
+       # depmod(1) will take the larget symlink name - we must create directory for  it.
+       if (build($kernel,$uname_r,$_)) {
+               do { cluck "Failed to symlink $_"; next; }
+                               if _system "rm -rf $moduledir; mkdir -p $moduledir; ln -s $_ $moduledir/lufs.o";
+               _pass 1;
+               }
+       }
 
 local $_;
 while (<$modbindir/*.o>) {
@@ -131,6 +144,7 @@ my($kernel,$uname_r,$destmodule)=@_;
                        .($quiet ? " 2>/dev/null" : "")
                        ." -O2 -pipe -fomit-frame-pointer -fno-strict-aliasing -mpreferred-stack-boundary=2 -Wall"
                        ." -D__KERNEL__ -DMODULE -DLINUX -DKBUILD_MODNAME=lufs"
+                       ." ".$kernel_gcc_args
                        ." -I$kernel/include"
                        ." -I$kernel/include/asm-i386/mach-default";    # gcc should not care if this 2.5 dir does not exist
 
@@ -143,7 +157,8 @@ my($kernel,$uname_r,$destmodule)=@_;
                                        || (!$config && !$autoconf);    # assume modversions if not known
 
        my @objects=map({ my $o=$_; $o=~s/[.]c$/.o/; $o; } @sources);
-       return !_system "set -e; mkdir -p `dirname $destmodule`;"
+       return !_system "set -e; mkdir -p `dirname $destmodule`; rm -f $destmodule;"
+                       .(!$vardir ? "" : " cd $vardir;")
                        ." $cmdline -c ".join(" ",map({ srcdir($uname_r)."/".$_; } @sources)).";"
                        ." ld -r -o $destmodule ".join(" ",@objects).";"
                        ." rm -f ".join(" ",@objects);
@@ -193,6 +208,7 @@ my($dir)=@_;
 
 sub prebuild
 {
+       $vardir=undef();        # we may not yet have /var/lib/lufs
        for (@ARGV) {
                do { prebuild_rpm $_; next; } if /[.]rpm$/;
                do { prebuild_dir $_; next; } if -d $_;