Date: Saturday, March 12, 2016 @ 17:38:56
  Author: seblu
Revision: 261368

upgpkg: dkms 2.2.0.3+git151023-7

- massive use of function in the hook script
- display warning when headers/kernel are missing
- only call dkms when both headers and kernel are installed
- add others arch kernels as optdeps

Modified:
  dkms/trunk/PKGBUILD
  dkms/trunk/hook.install
  dkms/trunk/hook.remove
  dkms/trunk/hook.sh

--------------+
 PKGBUILD     |   32 +++++++++-------
 hook.install |    4 +-
 hook.remove  |    4 +-
 hook.sh      |  114 ++++++++++++++++++++++++++++++++++++++-------------------
 4 files changed, 101 insertions(+), 53 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2016-03-12 16:34:18 UTC (rev 261367)
+++ PKGBUILD    2016-03-12 16:38:56 UTC (rev 261368)
@@ -4,7 +4,7 @@
 
 pkgname=dkms
 pkgver=2.2.0.3+git151023
-pkgrel=6
+pkgrel=7
 pkgdesc='Dynamic Kernel Modules System'
 arch=('any')
 url='http://linux.dell.com/dkms/'
@@ -11,8 +11,10 @@
 license=('GPL2')
 depends=('bash' 'kmod' 'gcc' 'make' 'patch')
 makedepends=('git')
-optdepends=('linux-headers: build modules against Arch kernel'
-            'linux-lts-headers: build modules against LTS Arch kernel')
+optdepends=('linux-headers: build modules against the Arch kernel'
+            'linux-lts-headers: build modules against the LTS kernel'
+            'linux-zen-headers: build modules against the ZEN kernel'
+            'linux-grsec-headers: build modules against the GRSEC kernel')
 backup=('etc/dkms/framework.conf')
 install=$pkgname.install
 source=('git+git://linux.dell.com/dkms.git#commit=7b6e78f'
@@ -22,20 +24,22 @@
         'hook.sh')
 md5sums=('SKIP'
          '82d520c39c99c34977e48b313a189c6c'
-         '8fe2064106958bcfd386e83494c8959a'
-         '41fcecb1c2dfc59a4b648fddcd8b462f'
-         '22f9fc3633b13e548e78bcc48192d817')
+         'e6eada07fc3a56a491e14dfeafec746f'
+         '57d90c89a221c52d78d0ec3953fe2fcf'
+         'd11d8bfbcf61330aa84d6dd9e93ca957')
 
 prepare() {
   cd dkms
-  # patching
-  patches=("$srcdir"/*.patch)
-  if (( ${#patches[*]} > 0 )); then
-    for p in "${patches[@]}"; do
-      msg2 "Apply patch: ${p##*/}"
-      patch -p1 -i "$p"
-    done
-  fi
+
+  # apply patch from the source array (should be a pacman feature)
+  local filename
+  for filename in "${source[@]}"; do
+    if [[ "$filename" =~ \.patch$ ]]; then
+      msg2 "Applying patch $filename"
+      patch -p1 -i "$srcdir/$filename"
+    fi
+  done
+
   # /usr move
   msg2 '/usr move patching'
   for i in dkms{,_framework.conf,.bash-completion,.8,_common.postinst}; do

Modified: hook.install
===================================================================
--- hook.install        2016-03-12 16:34:18 UTC (rev 261367)
+++ hook.install        2016-03-12 16:38:56 UTC (rev 261368)
@@ -3,7 +3,9 @@
 Operation = Upgrade
 Type = File
 Target = usr/src/*/dkms.conf
-Target = usr/lib/modules/*/build/include/
+Target = usr/lib/modules/*/
+Target = !usr/lib/modules/extramodules-*
+Target = !usr/lib/modules/*/?*
 
 [Action]
 Description = Install DKMS modules

Modified: hook.remove
===================================================================
--- hook.remove 2016-03-12 16:34:18 UTC (rev 261367)
+++ hook.remove 2016-03-12 16:38:56 UTC (rev 261368)
@@ -3,7 +3,9 @@
 Operation = Remove
 Type = File
 Target = usr/src/*/dkms.conf
-Target = usr/lib/modules/*/build/include/
+Target = usr/lib/modules/*/
+Target = !usr/lib/modules/extramodules-*
+Target = !usr/lib/modules/*/?*
 
 [Action]
 Description = Remove DKMS modules

Modified: hook.sh
===================================================================
--- hook.sh     2016-03-12 16:34:18 UTC (rev 261367)
+++ hook.sh     2016-03-12 16:38:56 UTC (rev 261368)
@@ -17,46 +17,86 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 
USA.
 
-# prevent to have all each dkms call to fail
-if (( EUID )); then
-       echo 'You must be root to use this hook' >&2
-       exit 1
-fi
+# check kernel is valid for action
+# it means kernel and its headers are installed
+# $1: kernel version
+check_kernel() {
+       local kver="$1"; shift
+       if [[ ! -d "$install_tree/$kver/kernel" ]]; then
+               echo "==> Kernel $kver modules are missing. Nothing will be 
done for this kernel!"
+               echo '==> You have to install the matching kernel package to 
use dkms'
+               return 1
+       elif [[ ! -d "$install_tree/$kver/build/include" ]]; then
+               echo "==> Kernel $kver headers are missing. Nothing will be 
done for this kernel!"
+               echo '==> You have to install the matching kernel headers 
package to use dkms'
+               return 1
+       fi
+       return 0
+}
 
-# check args count
-if (( $# < 1 )); then
-       echo "usage: ${0##*/} dkms-arguments" >&2
-       exit 1
-fi
+# handle actions on module addition/upgrade/removal
+# $1: module name
+# $2: module version
+# $*: dkms args
+do_module() {
+       local modname="$1"; shift
+       local modver="$2"; shift
+       pushd "$install_tree" >/dev/null
+       # do $@ for each kernel with headers for $modname v$modver
+       local path
+       for path in */build/; do
+               local kver="${path%%/*}"
+               check_kernel "$kver" || return
+               dkms "$@" -m "$modname" -v "$modver" -k "$kver"
+       done
+       popd >/dev/null
+}
 
-# dkms path from framework config
-# note: the alpm hooks which trigger this script use static path
-source_tree='/usr/src'
-install_tree='/usr/lib/modules'
-source /etc/dkms/framework.conf
+# handle actions on kernel addition/upgrade/removal
+# $1: kernel version
+# $*: dkms args
+do_kernel() {
+       local kver="$1"; shift
+       check_kernel "$kver" || return
+       # do $@ once for each dkms module in $source_tree
+       local path
+       for path in "$source_tree"/*-*/dkms.conf; do
+               if [[ "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; 
then
+                       dkms "$@" -m "${BASH_REMATCH[1]}" -v 
"${BASH_REMATCH[2]}" -k "$kver"
+               fi
+       done
+}
 
-shopt -s nullglob
+# emulated program entry point
+main() {
+       # prevent to have all each dkms call to fail
+       if (( EUID )); then
+               echo 'You must be root to use this hook' >&2
+               exit 1
+       fi
 
-# parse stdin path to guess what do do
-while read -r path; do
-       if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then
-               # do $@ for each kernel with headers
-               pushd "$install_tree" >/dev/null
-               for incpath in */build/include; do
-                       dkms "$@" -m "${BASH_REMATCH[1]}" -v 
"${BASH_REMATCH[2]}" -k "${incpath%%/*}"
-               done
-               popd >/dev/null
-       elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then
-               kver="${BASH_REMATCH[1]}"
-               # do $@ once for each dkms module in $source_tree
-               for path in "$source_tree"/*-*/dkms.conf; do
-                       if [[ "$path" =~ 
^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then
-                               dkms "$@" -m "${BASH_REMATCH[1]}" -v 
"${BASH_REMATCH[2]}" -k "$kver"
-                       fi
-               done
-       else
-               echo "Skipping invalid path: $path" >&2
+       # check args count
+       if (( $# < 1 )); then
+               echo "usage: ${0##*/} dkms-arguments" >&2
+               exit 1
        fi
-done
 
-true
+       # dkms path from framework config
+       # note: the alpm hooks which trigger this script use static path
+       source_tree='/usr/src'
+       install_tree='/usr/lib/modules'
+       source /etc/dkms/framework.conf
+
+       # parse stdin paths to guess what do do
+       while read -r path; do
+               if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; 
then
+                       do_module "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "$@"
+               elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then
+                       do_kernel "${BASH_REMATCH[1]}" "$@"
+               fi
+       done
+
+       return 0
+}
+
+main "$@"

Reply via email to