This commit is contained in:
Matvey B. Aksenov 2013-09-25 14:46:36 -07:00
commit 3c0feb50b5
1 changed files with 126 additions and 30 deletions

View File

@ -68,14 +68,17 @@ _cabal_command ()
'list:list packages matching a search string' 'list:list packages matching a search string'
'info:display detailed information about a particular package' 'info:display detailed information about a particular package'
'fetch:downloads packages for later installation' 'fetch:downloads packages for later installation'
'unpack:unpacks packages for user inspection' "get:get a package's source code"
'check:check the package for common mistakes' 'check:check the package for common mistakes'
'sdist:generate a source distribution file (.tar.gz)' 'sdist:generate a source distribution file (.tar.gz)'
'upload:uploads source packages to Hackage' 'upload:uploads source packages to Hackage'
'report:upload build reports to a remote server' 'report:upload build reports to a remote server'
'run:runs the compiled executable'
'init:interactively create a .cabal file' 'init:interactively create a .cabal file'
'configure:prepare to build the package' 'configure:prepare to build the package'
'build:make this package ready for installation' 'build:make this package ready for installation'
'repl:open an interpreter session for the given target'
'sandbox:create/modify/delete a sandbox'
'copy:copy the files into the install locations' 'copy:copy the files into the install locations'
'haddock:generate Haddock HTML documentation' 'haddock:generate Haddock HTML documentation'
'clean:clean up after a build' 'clean:clean up after a build'
@ -85,6 +88,22 @@ _cabal_command ()
'bench:run the benchmark, if any (configure with UserHooks)' 'bench:run the benchmark, if any (configure with UserHooks)'
'help:help about commands' 'help:help about commands'
) )
local -a _cabal_programs
_cabal_programs=()
programs=(alex ar c2hs cpphs ffihugs gcc ghc ghc-pkg greencard haddock
happy hmake hpc hsc2hs hscolour hugs jhc ld lhc lhc-pkg nhc98 pkg-config
ranlib strip tar uhc)
for program in $programs; do
_cabal_programs+=(
"--with-${program}=[give the path to ${program}]:file:_files"
"--${program}-options=[give extra options to ${program}]"
"--${program}-option=[give an extra option to ${program}]"
)
done
if (( CURRENT == 1 )) then if (( CURRENT == 1 )) then
_describe -t commands 'command' _cabal_cmds || compadd "$@" _describe -t commands 'command' _cabal_cmds || compadd "$@"
else else
@ -105,7 +124,9 @@ _cabal_bench ()
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \
'--benchmark-options=[give extra options to benchmark executables]' \ '--benchmark-options=[give extra options to benchmark executables]' \
'--benchmark-option=[give an extra option to benchmark executables (no need to quote options containing spaces)]' '--benchmark-option=[give an extra option to benchmark executables (no need to quote options containing spaces)]' \
{-j,--jobs=}'[run NUM jobs simultaneously]' \
"--only[don't reinstall add-source dependencies (sandbox-only)]"
} }
_cabal_build () _cabal_build ()
@ -114,9 +135,9 @@ _cabal_build ()
{-h,--help}'[show help]' \ {-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \ '--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \
'--with-PROG=[give the path to PROG]:file:_files' \ $_cabal_programs \
'--PROG-options=[give extra options to PROG]' \ {-j,--jobs=}'[run NUM jobs simultaneously]' \
'--PROG-option=[give an extra option to PROG (no need to quote options containing spaces)]' "--only[don't reinstall add-source dependencies (sandbox-only)]"
} }
_cabal_check () _cabal_check ()
@ -157,6 +178,7 @@ _cabal_configure ()
'--docdir=[installation directory for documentation]:directory:_files -/' \ '--docdir=[installation directory for documentation]:directory:_files -/' \
'--htmldir=[installation directory for HTML]:directory:_files -/' \ '--htmldir=[installation directory for HTML]:directory:_files -/' \
'--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \ '--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \
'--sysconfdir=[installation directory for configuration files]:directory:_files -/' \
{-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \ {-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \
'--program-prefix=[prefix to be applied to installed executables]' \ '--program-prefix=[prefix to be applied to installed executables]' \
'--program-suffix=[suffix to be applied to installed executables]' \ '--program-suffix=[suffix to be applied to installed executables]' \
@ -185,15 +207,14 @@ _cabal_configure ()
{-f,--flags=}'[force values for the given flags]:flags:' \ {-f,--flags=}'[force values for the given flags]:flags:' \
'--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \ '--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \
'--extra-lib-dirs=[a list of directories to search for externallibraries]:directory:_files -/' \ '--extra-lib-dirs=[a list of directories to search for externallibraries]:directory:_files -/' \
'--extra-prog-path=[A list of directories to search for required programs]:directory:_files -/' \
'--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \ '--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \
'--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \ '--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \
'--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ '--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \
'--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ '--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \
'--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \ '--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \
'--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \ '--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \
'--with-PROG=[give the path to PROG]:file:_files' \ $_cabal_programs \
'--PROG-options=[give extra options to PROG]' \
'--PROG-option=[give an extra option to PROG (no need to quote options containing spaces)]' \
'--cabal-lib-version=[select which version of the Cabal lib to use]' \ '--cabal-lib-version=[select which version of the Cabal lib to use]' \
'--constraint=[a list of additional constraints on the dependencies]' \ '--constraint=[a list of additional constraints on the dependencies]' \
'--preference=[specify preferences on the version of a package]' \ '--preference=[specify preferences on the version of a package]' \
@ -224,16 +245,31 @@ _cabal_fetch ()
'*:package:_cabal_list_packages' '*:package:_cabal_list_packages'
} }
_cabal_get ()
{
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
{-d,--destdir=}'[where to unpack the packages]:directory:_files -/' \
{-s,--source-repository=}"[copy the package's source repository]" \
'--pristine[unpack the original pristine tarball, rather than updating the .cabal file with the latest revision from the package archive.]' \
'*:package:_cabal_list_packages'
}
_cabal_haddock () _cabal_haddock ()
{ {
_arguments \ _arguments \
{-h,--help}'[show help]' \ {-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \
'--keep-temp-files[keep temporary files]' \
'--hoogle[generate a hoogle database]' \ '--hoogle[generate a hoogle database]' \
'--html[generate HTML documentation]' \ '--html[generate HTML documentation]' \
'--html-location=[location of HTML documentation]:url:' \ '--html-location=[location of HTML documentation]:url:' \
'--executables[run haddock for Executables targets]' \ '--executables[run haddock for Executables targets]' \
'--tests[run haddock for Test Suite targets]' \
'--benchmarks[run haddock for Benchmark targets]' \
'--all[run haddock for all targets]' \
'--internal[run haddock for internal modules]' \ '--internal[run haddock for internal modules]' \
'--css=[path to the haddock stylesheet]:file:_files' \ '--css=[path to the haddock stylesheet]:file:_files' \
'--hyperlink-source[hyperlink the documentation to the source code]' \ '--hyperlink-source[hyperlink the documentation to the source code]' \
@ -241,17 +277,16 @@ _cabal_haddock ()
'--contents-location=[bake URL in as the location for the contents page]:url:' \ '--contents-location=[bake URL in as the location for the contents page]:url:' \
'--with-ghc=[path to ghc]:file:_files' \ '--with-ghc=[path to ghc]:file:_files' \
'--with-haddock=[path to haddock]:file:_files' \ '--with-haddock=[path to haddock]:file:_files' \
'--PROG-option=[give an extra option to PROG (no need to quote options containing spaces)]:option:' \
'--ghc-options=[give extra options to ghc]:option:' \ '--ghc-options=[give extra options to ghc]:option:' \
'--haddock-options=[give extra options to haddock]:option:' \ '--haddock-options=[give extra options to haddock]:option:' \
'--ghc-option=[give an extra option to ghc (no need to quote options containing spaces)]:option:' \
'--haddock-option=[give an extra option to haddock (no need to quote options containing spaces)]:option:'
} }
_cabal_help () _cabal_help ()
{ {
local -a cmds local -a cmds
cmds=(configure install list info update fetch upload bench init cmds=(install update list info fetch get check sdist upload report run init
check sdist report unpack build copy haddock clean hscolour register test help) configure build repl sandbox copy haddock clean hscolour register test bench help)
_arguments \ _arguments \
{-h,--help}'[Show help]' \ {-h,--help}'[Show help]' \
'*::command:( $cmds )' '*::command:( $cmds )'
@ -264,6 +299,9 @@ _cabal_hscolour ()
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \
'--executables[run hscolour for Executables targets]' \ '--executables[run hscolour for Executables targets]' \
'--tests[run hscolour for Test Suite targets]' \
'--benchmarks[run hscolour for Benchmarks targets]' \
'--all[run hscolour for all targets]' \
'--css=[path to stylesheet]:file:_files' '--css=[path to stylesheet]:file:_files'
} }
@ -277,6 +315,9 @@ _cabal_info ()
_cabal_install () _cabal_install ()
{ {
local context state state_descr line
typeset -A opt_args
_arguments \ _arguments \
{-h,--help}'[show help]' \ {-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
@ -299,6 +340,7 @@ _cabal_install ()
'--docdir=[installation directory for documentation]:directory:_files -/' \ '--docdir=[installation directory for documentation]:directory:_files -/' \
'--htmldir=[installation directory for HTML]:directory:_files -/' \ '--htmldir=[installation directory for HTML]:directory:_files -/' \
'--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \ '--haddockdir=[installation directory for haddock interfaces]:directory:_files -/' \
'--sysconfdir=[installation directory for configuration files]:directory:_files -/' \
{-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \ {-b,--scratchdir=}'[directory to receive the built package]:directory:_files -/' \
'--program-prefix=[prefix to be applied to installed executables]' \ '--program-prefix=[prefix to be applied to installed executables]' \
'--program-suffix=[suffix to be applied to installed executables]' \ '--program-suffix=[suffix to be applied to installed executables]' \
@ -326,16 +368,15 @@ _cabal_install ()
'--package-db=[use a specific package database]:files:_files' \ '--package-db=[use a specific package database]:files:_files' \
{-f,--flags=}'[force values for the given flags]:flags:' \ {-f,--flags=}'[force values for the given flags]:flags:' \
'--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \ '--extra-include-dirs=[a list of directories to search for header files]:directory:_files -/' \
'--extra-lib-dirs=[a list of directories to search for externallibraries]:directory:_files -/' \ '--extra-lib-dirs=[a list of directories to search for external libraries]:directory:_files -/' \
'--extra-prog-path=[a list of directories to search for required programs]:directory:_files -/' \
'--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \ '--enable-tests[enable dependency checking and compilation for test suites listed in the package description file]' \
'--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \ '--disable-tests[disable dependency checking and compilation for test suites listed in the package description file]' \
'--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ '--enable-library-coverage[enable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \
'--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \ '--disable-library-coverage[disable build library and test suites with, Haskell Program Coverage enabled. (GHC only)]' \
'--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \ '--enable-benchmarks[enable dependency checking and compilation, for benchmarks listed in the package]' \
'--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \ '--disable-benchmarks[disable dependency checking and compilation, for benchmarks listed in the package]' \
'--with-PROG=[give the path to PROG]:file:_files' \ $_cabal_programs \
'--PROG-options=[give extra options to PROG]' \
'--PROG-option=[give an extra option to PROG (no need to quote options containing spaces)]' \
'--cabal-lib-version=[select which version of the Cabal lib to use]' \ '--cabal-lib-version=[select which version of the Cabal lib to use]' \
'--constraint=[a list of additional constraints on the dependencies]' \ '--constraint=[a list of additional constraints on the dependencies]' \
'--preference=[specify preferences on the version of a package]' \ '--preference=[specify preferences on the version of a package]' \
@ -351,14 +392,14 @@ _cabal_install ()
'--avoid-reinstalls[do not select versions that would destructively overwrite installed packages]' \ '--avoid-reinstalls[do not select versions that would destructively overwrite installed packages]' \
'--force-reinstalls[reinstall packages even if they will most likely break other installed packages]' \ '--force-reinstalls[reinstall packages even if they will most likely break other installed packages]' \
'--upgrade-dependencies[pick the latest version for all dependencies, rather than trying to pick an installed version]' \ '--upgrade-dependencies[pick the latest version for all dependencies, rather than trying to pick an installed version]' \
'--only-dependencies[install only the dependencies necessary to build the given packages]' \ {--only-dependencies,--dependencies-only}'[install only the dependencies necessary to build the given packages]' \
'--root-cmd=[command used to gain root privileges]::' \ '--root-cmd=[command used to gain root privileges]::' \
'--symlink-bindir=[add symlinks into this directory]:directory:_files -/' \ '--symlink-bindir=[add symlinks into this directory]:directory:_files -/' \
'--build-summary=[save build summaries to file]:file:_files' \ '--build-summary=[save build summaries to file]:file:_files' \
'--build-log=[log all builds to file]:file:_files' \ '--build-log=[log all builds to file]:file:_files' \
'--remote-build-reporting=[generate build reports to send to a remote]:level:(none anonymous detailed)' \ '--remote-build-reporting=[generate build reports to send to a remote]:level:(none anonymous detailed)' \
'--one-shot[do not record the packages in the world file]' \ '--one-shot[do not record the packages in the world file]' \
{-j,--jobs=}'[run NUM jobs simultaneously.]' \ {-j,--jobs=}'[run NUM jobs simultaneously]' \
'--haddock-hoogle[generate a hoogle database]' \ '--haddock-hoogle[generate a hoogle database]' \
'--haddock-html[generate HTML documentation]' \ '--haddock-html[generate HTML documentation]' \
'--haddock-html-location=[location of HTML documentation]:url:' \ '--haddock-html-location=[location of HTML documentation]:url:' \
@ -368,7 +409,15 @@ _cabal_install ()
'--haddock-hyperlink-source[hyperlink the documentation to the source code]' \ '--haddock-hyperlink-source[hyperlink the documentation to the source code]' \
'--haddock-hscolour-css=[path to the HsColour stylesheet]:file:_files' \ '--haddock-hscolour-css=[path to the HsColour stylesheet]:file:_files' \
'--haddock-contents-location=[bake URL in as the location for the contents page]:url:' \ '--haddock-contents-location=[bake URL in as the location for the contents page]:url:' \
'*:package:_cabal_list_packages' '*:: :->package-or-cabal-file'
case $state in
(package-or-cabal-file)
_alternative \
':package:_cabal_list_packages' \
':files:_files -g "*.cabal"'
;;
esac
} }
_cabal_list () _cabal_list ()
@ -394,6 +443,15 @@ _cabal_register ()
'--gen-pkg-config=[generate package registration file]' '--gen-pkg-config=[generate package registration file]'
} }
_cabal_repl ()
{
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \
$_cabal_programs
}
_cabal_report () _cabal_report ()
{ {
_arguments \ _arguments \
@ -403,12 +461,58 @@ _cabal_report ()
{-p,--password=}'[hackage password]' {-p,--password=}'[hackage password]'
} }
_cabal_run ()
{
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated build files]:directory:_files -/' \
$_cabal_programs \
{-j,--jobs=}'[run NUM jobs simultaneously]' \
"--only[don't reinstall add-source dependencies (sandbox-only)]"
}
_cabal_sandbox ()
{
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--sandbox=[Sandbox location]:sandbox:_files -/'
if (( CURRENT == 2 )); then
local -a _cabal_sandbox_cmds
_cabal_sandbox_cmds=(
'init:initialize the sandbox'
'delete:delete the sandbox'
'add-source:add sources path to sandbox'
'hc-pkg:call sandbox related haskell compiler package database'
'list-sources:list added sources paths'
)
_describe -t sandbox-commands 'sandbox-command' _cabal_sandbox_cmds || compadd "$@"
else
case $WORDS[3] in
add-source)
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--snapshot[take a snapshot instead of creating a link]' \
'--sandbox=[Sandbox location]:sandbox:_files -/' \
'*:sources:_files -/'
;;
*)
_message "unknown cabal sandbox command: $WORDS[3]"
;;
esac
fi
}
_cabal_sdist () _cabal_sdist ()
{ {
_arguments \ _arguments \
{-h,--help}'[show help]' \ {-h,--help}'[show help]' \
{-v,--verbose=}'[control verbosity]:level:(0 1 2 3)' \ {-v,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
'--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \ '--builddir=[the directory where Cabal puts generated files]:directory:_files -/' \
"--list-sources=[just write a list of the package's sources to a file]:directory:_files -/" \
'--snapshot[produce a snapshot source distribution]' \ '--snapshot[produce a snapshot source distribution]' \
'--output-directory=[generate a source distribution in the given directory]:directory:_files -/' \ '--output-directory=[generate a source distribution in the given directory]:directory:_files -/' \
'--targz[produce a .tar.gz format archive]' \ '--targz[produce a .tar.gz format archive]' \
@ -426,17 +530,9 @@ _cabal_test ()
'--show-details=[when to show results of individual test cases?]:filter:(always never failures)' \ '--show-details=[when to show results of individual test cases?]:filter:(always never failures)' \
'--keep-tix-files[keep .tix files for HPC between test runs]' \ '--keep-tix-files[keep .tix files for HPC between test runs]' \
'--test-options=[give extra options to test executables]' \ '--test-options=[give extra options to test executables]' \
'--test-option=[give an extra option to test executables]' '--test-option=[give an extra option to test executables]' \
} {-j,--jobs=}'[run NUM jobs simultaneously]' \
"--only[don't reinstall add-source dependencies (sandbox-only)]"
_cabal_unpack ()
{
_arguments \
{-h,--help}'[show help]' \
{-v-,--verbose=}'[control verbosity]:level:(0 1 2 3)' \
{-d,--destdir=}'[where to unpack the packages]:directory:_files -/' \
'--pristine[unpack the original pristine tarball, rather than updating the .cabal file with the latest revision from the package archive.]' \
'*:package:_cabal_list_packages'
} }
_cabal_update () _cabal_update ()