From d4ec7b3a5abda5f97d5d3ef359eef78567e75a4a Mon Sep 17 00:00:00 2001 From: Jesus Alvarez Date: Fri, 11 Apr 2014 00:01:00 -0700 Subject: [PATCH] Fix kernel module path using --with-linux config flag Sometimes the arch linux kernel is versioned without a minor version number. For example, 3.14 instead of 3.14.0. However, the kernel module path always uses the minor version number (/usr/lib/modules/3.14.0-1-ARCH). This change adds support for detecting missing minor version number in the linux version and adds "0" to it to create the proper module path. --- spl/PKGBUILD | 17 +++++++++++++++-- zfs/PKGBUILD | 22 ++++++++++++++-------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/spl/PKGBUILD b/spl/PKGBUILD index 215ad1a..eb94fe3 100644 --- a/spl/PKGBUILD +++ b/spl/PKGBUILD @@ -21,6 +21,19 @@ LINUX_VERSION_X32="3.13.8-1" LINUX_VERSION_X64="3.13.8-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 +# If LINUX_VERSION does not have a minor version, we need to add "0" as the +# minor version for the kernel module path. Kernel modules for linux versions +# with no minor version (i.e. 3.14) are kept in /usr/lib/modules/3.14.0-4-ARCH +[[ $LINUX_VERSION =~ ^[:digit:]+\.[:digit:]+\.([:digit:]+)\-[:digit:]+ ]] +if [[ ${BASH_REMATCH[1]} == "" ]]; then + [[ $LINUX_VERSION =~ ^([[:digit:]\.]+)\-([[:digit:]]+) ]] && + MOD_LINUX_VERSION=${BASH_REMATCH[1]}; + MOD_LINUX_PKGREL=${BASH_REMATCH[2]} + MOD_BASENAME=${MOD_LINUX_VERSION}.0-$MOD_LINUX_PKGREL-ARCH +else + MOD_BASENAME=$LINUX_VERSION-ARCH +fi + pkgdesc="Solaris Porting Layer kernel modules." depends=("spl-utils" "linux=$LINUX_VERSION") makedepends=("linux-headers=$LINUX_VERSION") @@ -50,11 +63,11 @@ build() { ./autogen.sh if [[ $CARCH == "i686" ]]; then ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ - --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build \ + --with-linux=/usr/lib/modules/$MOD_BASENAME/build \ --with-config=kernel --enable-atomic-spinlocks else ./configure --prefix=/usr --libdir=/usr/lib --sbindir=/usr/bin \ - --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build \ + --with-linux=/usr/lib/modules/$MOD_BASENAME/build \ --with-config=kernel fi make diff --git a/zfs/PKGBUILD b/zfs/PKGBUILD index 6e23337..adc3c52 100644 --- a/zfs/PKGBUILD +++ b/zfs/PKGBUILD @@ -21,12 +21,18 @@ LINUX_VERSION_X32="3.13.8-1" LINUX_VERSION_X64="3.13.8-1" [[ $CARCH == "i686" ]] && LINUX_VERSION=$LINUX_VERSION_X32 || LINUX_VERSION=$LINUX_VERSION_X64 -# Build the kernel module path string -[[ $AZB_LINUX_VERSION =~ ^[[:digit:]]+\.[[:digit:]]+\.([[:digit:]]+)\-[[:digit:]]+]] ]] && - MOD_PATH=${BASH_REMATCH[1]} - -echo $MOD_PATH -exit 1 +# If LINUX_VERSION does not have a minor version, we need to add "0" as the +# minor version for the kernel module path. Kernel modules for linux versions +# with no minor version (i.e. 3.14) are kept in /usr/lib/modules/3.14.0-4-ARCH +[[ $LINUX_VERSION =~ ^[:digit:]+\.[:digit:]+\.([:digit:]+)\-[:digit:]+ ]] +if [[ ${BASH_REMATCH[1]} == "" ]]; then + [[ $LINUX_VERSION =~ ^([[:digit:]\.]+)\-([[:digit:]]+) ]] && + MOD_LINUX_VERSION=${BASH_REMATCH[1]}; + MOD_LINUX_PKGREL=${BASH_REMATCH[2]} + MOD_BASENAME=${MOD_LINUX_VERSION}.0-$MOD_LINUX_PKGREL-ARCH +else + MOD_BASENAME=$LINUX_VERSION-ARCH +fi pkgdesc="Kernel modules for the Zettabyte File System." depends=("spl=0.6.2_3.13.8-1" "zfs-utils" "linux=$LINUX_VERSION") @@ -52,7 +58,7 @@ build() { --with-udevdir=/lib/udev \ --libexecdir=/usr/lib/zfs-0.6.2 \ --with-config=kernel \ - --with-linux=/usr/lib/modules/$LINUX_VERSION_X32-ARCH/build + --with-linux=/usr/lib/modules/$MOD_BASENAME/build else ./configure --prefix=/usr \ --sysconfdir=/etc \ @@ -63,7 +69,7 @@ build() { --with-udevdir=/lib/udev \ --libexecdir=/usr/lib/zfs-0.6.2 \ --with-config=kernel \ - --with-linux=/usr/lib/modules/$LINUX_VERSION_X64-ARCH/build + --with-linux=/usr/lib/modules/$MOD_BASENAME/build fi make }