summary refs log tree commit diff
path: root/Completion/Linux
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Linux')
-rw-r--r--Completion/Linux/Command/_dkms162
1 files changed, 162 insertions, 0 deletions
diff --git a/Completion/Linux/Command/_dkms b/Completion/Linux/Command/_dkms
new file mode 100644
index 000000000..7ea34aa2e
--- /dev/null
+++ b/Completion/Linux/Command/_dkms
@@ -0,0 +1,162 @@
+#compdef dkms
+
+local curcontext="$curcontext" ign cmds opts ret=1
+local -a state line expl args subcmds dirs
+local -A opt_args
+
+subcmds=(
+  'add:add a module/version combination to the tree for builds and installs'
+  'remove:remove a module from the tree'
+  'build:compile a module for a kernel'
+  "install:install a build module for it's corresponding kernel"
+  'uninstall:uninstall a module for a kernel'
+  'match:install every module that is installed for a template kernel for another kernel'
+  'mkdriverdisk:create a floppy driver disk image for use when updated drivers are needed to install an OS'
+  'mktarball:tar up files in the DKMS tree for a specific module'
+  'ldtarball:extract a tarball created with mktarball into the DKMS tree'
+  'mkrpm:create an RPM package for a module'
+  'mkdeb:create a debian binary package for a module'
+  'mkdsc:create a debian source package for a module'
+  'mkkmp:create a Kernel Module Package source RPM for a module'
+  'status:display the current status of modules, versions and kernels within the tree'
+  'autoinstall:try to install the latest revision of all modules that have been installed for other kernel revisions'
+)
+
+args=(
+  '(1)-m[specify module]:module:->modules'
+  '(1)-v[specify module version]:version'
+  '(-q --quiet)'{-q,--quiet}'[suppress output]'
+  '(--all)*'{-a,--arch}'[specify system architecture]:architecture:->architectures'
+  '*--directive=:directive'
+  '--dkmstree=:path:_directories'
+  '--installtree=:path:_directories'
+  '--sourcetree=:path:_directories'
+  '--dkmsframework=:path:_directories'
+  '1: : _describe -t commands command subcmds'
+)
+
+cmd=${${${subcmds%%:*}:*words}[1]}
+if [[ -n $cmd ]]; then
+  curcontext="${curcontext%:*}-$cmd:"
+else
+  # exclude sub-commands based on any options specified so far
+  for cmds opts in \
+    '(remove|build|install|uninstall|match|status|mk(^kmp))' 'k' \
+    '(add|remove)' '-rpm_safe_upgrade' \
+    'mk(driverdisk|kmp)' '-spec' \
+    'mk(deb|dsc|rpm)' '-legacy-postinst' \
+    'mk(tarball|rpm|deb|dsc)' '-(source|binary)-only' \
+    '(match|build|mkkmp)' '(k|-no-(prepare|clean)-kernel|-kernelsourcedir)' \
+    '(|un)install' '-no-(depmod|initrd)' \
+    'mkdriverdisk' '([dr]|-distro|-release|-size|-media)' \
+    '(add|build|install|ldtarball)' '-force' \
+    'match' '-templatekernel' \
+    '*tarball' '-archive' \
+    '(match|build|mkkmp)' '(j*|-no-(prepare|clean)-kernel|-kernelsourcedir)' \
+    '(remove|build|install|status|mk(^kmp))' '-all' \
+    'build' '-config'
+  do
+    [[ -n ${(M)words:#-${~opts}*} ]] &&
+      subcmds=( ${(M)subcmds:#${~cmds}:*} )
+  done
+  args+=( '(1 -)'{-V,--version}'[display version information]' )
+  ign='!' # hide some uncommon options but handle their arguments
+fi
+
+case $cmd in
+  remove|build|install|uninstall|mk*|status)
+    args+=( ': :->modules' )
+  ;|
+  |remove|build|install|uninstall|match|status|mk(^kmp))
+    args+=( '(--all)*-k[specify kernel version]:kernel:->kernels' )
+  ;|
+  |add|remove) args+=( "${ign}--rpm_safe_upgrade" ) ;|
+  |mk(driverdisk|kmp))
+    args+=( "${ign}--spec=:spec file:_files -g '*.spec(-.)'" )
+  ;|
+  |(mk|ld)tarball)
+    args+=( "${ign}--archive=:tarball:_files -g '*.tar(-.)'" )
+  ;|
+  |mk(deb|dsc|rpm))
+    args+=( "${ign}--legacy-postinst=:value [1]:(0 1)" )
+  ;|
+  |mk(tarball|rpm|deb|dsc)) args+=( "${ign}(--source-only --binaries-only)--"{source,binaries}-only ) ;|
+  |match|build|mkkmp)
+    args+=( #TODO: check ignore needed in absence of parameters
+      "${ign}--no-prepare-kernel"
+      "${ign}--no-clean-kernel"
+      '--kernelsourcedir=:directory:_directories'
+      "${ign}-j+[specify maximum number of jobs to use when building]:jobs"
+    )
+  ;|
+  |(|un)install)
+    args+=(
+      "${ign}--no-depmod"
+      "${ign}--no-initrd"
+    )
+  ;|
+  |add)
+    args+=(
+      '-c[specify location of dkms.conf file]:location:_files'
+    )
+  ;|
+  |remove|build|install|status|mk(^kmp))
+    args+=( '(-a --arch -k)--all[specify all relevant kernels/arches]' )
+  ;|
+  |build)
+    args+=( "${ign}--config=:kernel config file:_files" )
+  ;|
+  |add|build|install|ldtarball)
+    args+=( '--force[force overwriting of extant files]' )
+  ;|
+  |match)
+    args+=( "${ign}--templatekernel=:kernel:->kernels" )
+  ;|
+  |mkdriverdisk)
+    args+=(
+      "${ign}(-d --distro)"{-d,--distro=}':distribution:(redhat'{,1,2,3}' suse unitedlinux)'
+      "${ign}(-r --release)"{-r,--release=}':release'
+      "${ign}--size=:size (kb) [1440]"
+      "${ign}--media=:media type [floppy]:(floppy iso tar)"
+    )
+  ;|
+  add)
+    args+=(
+      '2:path:_directories'
+      '3:tarball:_files -g "*.tar(-.)"'
+    )
+  ;;
+  install)
+    args+=(
+      '2:rpm file:_files -g "*.rpm(-.)"'
+    )
+  ;;
+esac
+
+_arguments -C $args && ret=0
+
+case $state in
+  modules)
+    dirs=( ${(e)opt_args[--dkmstree]:-/var/lib/dkms}/*/*(/) )
+    dirs=( ${${(M)dirs%/*/*}#/} )
+    _description modules expl module
+    _multi_parts -i "$expl[@]" / dirs && ret=0
+  ;;
+  kernels)
+    if compset -P 1 '*/'; then
+      _description architectures expl architecture
+      compadd "$expl[@]" /lib/modules/$IPREFIX/build/arch/*(/:t) && ret=0
+    else
+      compset -S '/*'
+      dirs=( /lib/modules/*(/:t) )
+      _description -V kernels expl kernel
+      compadd "$expl[@]" -r "/ \t\n\-" ${(on)dirs} && ret=0
+    fi
+  ;;
+  architectures)
+    _description architectures expl architecture
+    compadd "$expl[@]" /lib/modules/$(uname -r)/build/arch/*(/:t) && ret=0
+  ;;
+esac
+
+return ret