From 42e67f115a8e923c416267b1e3c89ba346adc68a Mon Sep 17 00:00:00 2001 From: Sam Hartman Date: Sun, 30 May 2004 19:03:22 +0000 Subject: [PATCH] * Apply patch from /afs/cs.cmu.edu/user/jhutz/junk/openafs-patches/openafs-build-on-linux26 which correctly generates 2.6 modules. * Make sure makefile generation script is executable in debian/rules --- debian/changelog | 4 +- debian/rules | 1 + src/afs/LINUX/osi_module.c | 2 +- src/config/param.i386_linux26.h | 5 -- src/libafs/MakefileProto.LINUX.in | 40 +++++++---- src/libafs/make_kbuild_makefile.pl | 103 +++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 19 deletions(-) create mode 100755 src/libafs/make_kbuild_makefile.pl diff --git a/debian/changelog b/debian/changelog index d6bbc5567..b217bd963 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,10 @@ openafs (1.3.64-1) experimental; urgency=low * New upstream version * Add 2.6 to kern-sysname for i386 + * Apply patch from + /afs/cs.cmu.edu/user/jhutz/junk/openafs-patches/openafs-build-on-linux26 which correctly generates 2.6 modules. - -- Sam Hartman Sun, 23 May 2004 22:35:31 -0400 + -- openafs (1.2.11-1) unstable; urgency=high diff --git a/debian/rules b/debian/rules index 2be8eb9a1..31f54dd0c 100755 --- a/debian/rules +++ b/debian/rules @@ -39,6 +39,7 @@ configure-stamp: afslogsdir=/var/log/openafs sh configure --with-afs-sysname=$(SYS_NAME) --disable-kernel-module \ --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib \ --localstatedir=/var/lib + chmod a+x src/libafs/make_kbuild_makefile.pl install -d $(SYS_NAME)/dest/root.client/usr/vice/etc install -d dest/root.server/usr/afs/bin diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index 4eafd9d40..202b51b9c 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -147,7 +147,7 @@ afsproc_init() struct proc_dir_entry *entry1; openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs); - entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0, openafs_procfs); + entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs); entry1->proc_fops = &afs_syscall_fops; diff --git a/src/config/param.i386_linux26.h b/src/config/param.i386_linux26.h index 641dc8d05..392c469bc 100644 --- a/src/config/param.i386_linux26.h +++ b/src/config/param.i386_linux26.h @@ -49,11 +49,6 @@ #define AFS_GLOBAL_SUNLOCK #endif -#if defined(MODULE) && defined(CONFIG_MODVERSIONS) -#define MODVERSIONS -#include -#endif - #endif /* __KERNEL__ && !DUMP_KERNEL */ #include diff --git a/src/libafs/MakefileProto.LINUX.in b/src/libafs/MakefileProto.LINUX.in index 010ed4d07..aeaf2ba94 100644 --- a/src/libafs/MakefileProto.LINUX.in +++ b/src/libafs/MakefileProto.LINUX.in @@ -36,8 +36,10 @@ LINUX_KERNEL_PATH=@LINUX_KERNEL_PATH@ # System specific build commands and flags -CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@ -I../mach -DEFINES = $(COMMON_DEFINES) -DCPU=586 -DKBUILD_BASENAME=libafs_$(subst .,_,$(subst -,_,${CLIENT})) -DKBUILD_MODNAME=libafs_$(subst .,_,$(subst -,_,${CLIENT})) +# All the platform-specific and kernel-related things are provided by +# the kernel build system. So we should _not_ use COMMON_KERN_CFLAGS! +CCFLAGS = -Wno-strict-prototypes +DEFINES = $(COMMON_DEFINES) CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@ @@ -86,7 +88,8 @@ CCFLAGS = $(COMMON_KERN_CFLAGS) -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -fali DEFINES = $(COMMON_DEFINES) -INCLUDES = -I. -I../ -I${TOP_OBJDIR}/src/config +INCLUDES = -I. -I../ -I${TOP_OBJDIR}/src/config \ + -I${TOP_SRCDIR}/rx -I${TOP_SRCDIR}/rxstat CFLAGS = $(CCFLAGS) $(DEFINES) $(INCLUDES) @@ -101,6 +104,12 @@ DESTDIRS=linux_destdirs include Makefile.common + +LINUX_MODULE_EXT=ko + +LINUX_MODULE_EXT=o + + LINUX_MODULE_NAME= LOCAL_SMP_DEF= @@ -110,7 +119,7 @@ setup: for m in ${MPS} ; do \ KDIR=$(KOBJ)-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m; \ mkdir -p $${KDIR}; \ - ln -fs ../Makefile $${KDIR}/Makefile ; \ + ln -fs ../Makefile $${KDIR}/Makefile.afs ; \ ln -fs ../Makefile.common $${KDIR}/Makefile.common; \ ln -fs ../config $${KDIR}/config; \ done @@ -135,7 +144,7 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: ln -fs ${LINUX_KERNEL_PATH}/include/asm-parisc asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-alpha asm - + ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386 asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-um asm @@ -153,8 +162,6 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: ln -fs ${LINUX_KERNEL_PATH}/include/asm-sparc64 asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-ia64 asm - - ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386/mach-default mach for m in ${MPS} ; do \ KDIR=${KOBJ}-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m ; \ @@ -173,8 +180,9 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: TARG=libafs ; \ fi ; \ cd $${KDIR} ; \ - $(MAKE) SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} || exit $$?; \ + $(MAKE) -f Makefile.afs SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} KDIR=$${KDIR} || exit $$?; \ cd ../ ; \ + done linux_compdirs_libafs: depsrcs libafs @@ -193,10 +201,10 @@ linux_destdirs_libafs.bm: dest_libafs.bm # Below this line are targets when in the COMMON directory: # For Linux there is no kernel NFS server. -LIBAFS = libafs-${CLIENT}.o -LIBAFS_MP = libafs-${CLIENT}.mp.o -LIBAFS_EP = libafs-${CLIENT}.ep.o -LIBAFS_BM = libafs-${CLIENT}.bm.o +LIBAFS = libafs-${CLIENT}.${LINUX_MODULE_EXT} +LIBAFS_MP = libafs-${CLIENT}.mp.${LINUX_MODULE_EXT} +LIBAFS_EP = libafs-${CLIENT}.ep.${LINUX_MODULE_EXT} +LIBAFS_BM = libafs-${CLIENT}.bm.${LINUX_MODULE_EXT} INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS} INST_LIBAFS_MP = ${DESTDIR}${afskerneldir}/${LIBAFS_MP} @@ -219,6 +227,13 @@ libafs.ep: $(LIBAFS_EP) libafs.bm: $(LIBAFS_BM) echo BM Build Complete + +${LIBAFS} ${LIBAFS_MP} ${LIBAFS_EP} ${LIBAFS_BM}: + ../make_kbuild_makefile.pl ${KDIR} $@ @TOP_OBJDIR@/src/config/Makefile.config \ + Makefile.afs Makefile.common + $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules + + ${LIBAFS}: $(AFSAOBJS) $(AFSNONFSOBJS) $(RM) -f $@ $(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS) @@ -234,6 +249,7 @@ ${LIBAFS_EP}: $(AFSAOBJS) $(AFSNONFSOBJS) ${LIBAFS_BM}: $(AFSAOBJS) $(AFSNONFSOBJS) $(RM) -f $@ $(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS) + install_libafs: $(INST_LIBAFS) echo SP Install Complete diff --git a/src/libafs/make_kbuild_makefile.pl b/src/libafs/make_kbuild_makefile.pl new file mode 100755 index 000000000..878d1a58f --- /dev/null +++ b/src/libafs/make_kbuild_makefile.pl @@ -0,0 +1,103 @@ +#!/usr/bin/perl +# make_kbuild_makefile.pl +# Generate a Makefile for use with the Linux 2.6+ kernel build system +# +# Usage: make_kbuild_makefile.pl ${KDIR} ${TARG} Makefiles... +# +# The specified makefiles will be scanned for variable values +# The module ${TARG} will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}. +# It will include objects listed in ${AFSAOBJS} and ${AFSNONFSOBJS} +# Appropriate source files for each object will be symlinked into ${KDIR} +# EXTRA_CFLAGS will be set to ${CFLAGS} ${COMMON_INCLUDE} + +# Produces ${KDIR}/Makefile, suitable for use with kbuild + +use IO::File; + + +if (@ARGV < 3) { + die "Usage: echo objects... | $0 KDIR TARG Makefiles...\n"; +} + +($KDIR, $TARG, @Makefiles) = @ARGV; +$TARG =~ s/\.k?o$//; + +## Read in all of the Makefiles given on the command line +## Our ultimate goal is to find the correct source file for each object. +## We make the following assumptions: +## - Every variable is defined before it is used. +## - Each of our objects has exactly one dependency, which is the name +## of the source file that needs to be symlinked into $KDIR +foreach $mf (@Makefiles) { + $F = new IO::File($mf, O_RDONLY) or die "$mf: $!\n"; + $text = ''; + while (<$F>) { + chomp; + $text .= $_; + next if $text =~ s/\\$/ /; ## Continuation + if ($text =~ /^#/) { $text = ''; next } ## Comment + #print STDERR "<< $text\n"; + + $text =~ s/\$\((\w+)\)/$vars{$1}/g; # Substitute variables + $text =~ s/\$\{(\w+)\}/$vars{$1}/g; + #print STDERR ">> $text\n"; + + if ($text =~ /^\s*(\S+)\s*=/) { ## Variable definition + ($key, $value) = ($1, $'); + $value =~ s/^\s*//; # Remove leading and + $value =~ s/\s*$//; # trailing whitespace + $vars{$key} = $value; # Store it + } + elsif ($text =~ /^(\S+\.o):\s*(\S+\.c)/) { ## Dependency + $deps{$1} = $2; + } + $text = ''; + } + $F->close(); +} + + +$KDIR = "$vars{TOP_OBJDIR}/src/libafs/$KDIR"; +@objects = (split(' ', $vars{AFSAOBJS}), split(' ', $vars{AFSNONFSOBJS})); + +$MV = new IO::File("$vars{TOP_OBJDIR}/src/config/Makefile.version", O_RDONLY) + or die "$vars{TOP_OBJDIR}/src/config/Makefile.version: $!\n"; +while (<$MV>) { + s#AFS_component_version_number#$KDIR/AFS_component_version_number#g; + $MakefileVersion .= $_; +} +$MV->close(); + +if (! -d $KDIR) { + mkdir($KDIR, 0777) or die "$KDIR: $!\n"; +} + + +foreach (@objects) { + ($src = $_) =~ s/\.o$/.c/; + die "No source known for $_\n" unless exists $deps{$_}; + if (-e "$KDIR/$src" || -l "$KDIR/$src") { + unlink("$KDIR/$src") or die "$KDIR/$src: $!\n"; + } + next unless $deps{$_} =~ m#/#; + symlink($deps{$_}, "$KDIR/$src") or die "$KDIR/$src: $!\n"; +} + +foreach $src (qw(h sys netinet)) { + if (-e "$KDIR/$src" || -l "$KDIR/$src") { + unlink("$KDIR/$src") or die "$KDIR/$src: $!\n"; + } + symlink("$vars{LINUX_KERNEL_PATH}/include/linux", "$KDIR/$src") + or die "$KDIR/$src: $!\n"; +} + +$cflags = "$vars{CFLAGS} $vars{COMMON_INCLUDE}"; +$cflags =~ s#-I(?!/)#-I$KDIR/#g; +$cflags =~ s/\s+/ \\\n /g; +$F = new IO::File("$KDIR/Makefile", O_WRONLY|O_CREAT|O_TRUNC, 0666) + or die "$KDIR/Makefile: $!\n"; +print $F "EXTRA_CFLAGS=$cflags\n"; +print $F "obj-m := $TARG.o\n"; +print $F "$TARG-objs := ", join("\\\n $_", @objects), "\n"; +print $F "\n$MakefileVersion\n"; +$F->close() or die "$KDIR/Makefile: $!\n"; -- 2.39.5