The cabal-cargs package

[Tags: bsd3, library, program]

For further details please consult the README.

[Skip to ReadMe]


Versions0.1.1, 0.2, 0.3, 0.3.1, 0.4, 0.5, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8
Dependenciesbase (>=3 && <5), Cabal (>=1.16 && <1.23), cabal-cargs, cabal-lenses (>=0.4.6 && <0.5), cmdargs (>=0.10.5 && <0.11), directory (>=1.0 && <1.3), either (>=4.1.1 && <4.4), lens (>=4.0.1 && <4.9), strict (>=0.3.2 && <0.4), system-fileio (>=0.3.12 && <0.4), system-filepath (>=0.4.9 && <0.5), text (>= && <1.3), transformers (>= && <0.5), unordered-containers (>= && <0.3) [details]
AuthorDaniel Trstenjak
CategoryUtils, Development
Source repositoryhead: git clone
UploadedWed Aug 19 19:09:55 UTC 2015 by DanielTrstenjak
Downloads2119 total (102 in last 30 days)
0 []
StatusDocs not available [build log]
Last success reported on 2015-09-28 [all 3 reports]



Maintainers' corner

For package maintainers and hackage trustees

Readme for cabal-cargs-0.7.8


cabal-cargs is a command line program for extracting compiler relevant arguments from a cabal file and print them out formatted so that they're directly usable as arguments for ghc or hdevtools.

The main motivation for writing cabal-cargs was to get a mostly just working default, non modified hdevtools.

Example: Cabal and Sandbox aware Hdevtools

If you want to call hdevtools check for a source file of a cabalized project and would like to consider all compiler relevant arguments in the cabal file - like hs-source-dirs, ghc-options, cpp-options ... - and also the cabal sandbox, then you could just use cabal-cargs the following way:

$> hdevtools check `cabal-cargs --format=hdevtools --sourcefile=Source.hs` Source.hs

This call of cabal-cargs will search for a cabal file starting at the directory of Source.hs upwards the directory tree. The cabal file is then searched for a fitting section for the given source file. A section is considered fitting if the source file is contained in a directory or sub-directory listed in hs-source-dirs.

At the end the fields of the found sections are printed out in the desired format.

Normally you don't want to use cabal-cargs manually, but use it to initialize the options of hdevtools. So in the case of the editor vim and the plugin vim-hdevtools you could use something like:

function! s:CabalCargs(args)
   let l:output = system('cabal-cargs ' . a:args)
   if v:shell_error != 0
      let l:lines = split(l:output, '\n')
      echohl ErrorMsg
      echomsg 'args: ' . a:args
      for l:line in l:lines
         echomsg l:line
      echohl None
      return ''
   return l:output

function! s:HdevtoolsOptions()
    return s:CabalCargs('--format=hdevtools --sourcefile=' . shellescape(expand('%')))

autocmd Bufenter *.hs :call s:InitHaskellVars()

function! s:InitHaskellVars()
   if filereadable(expand('%'))
      let g:hdevtools_options = s:HdevtoolsOptions()

To see if cabal-cargs did the right thing you can verify the hdevtools options by calling in the vim command line:

:let g:hdevtools_options

Example: Compiler Arguments from Cabal File

Instead of searching for the cabal file by a source file the cabal file can be given explicitly:

$> cabal-cargs --cabalfile=Some.cabal

If an additional source file is given, then the cabal file is searched for a fitting section.

If no cabal file nor a source file is given, then starting at the current directory a cabal file is searched upwards the directory tree.


If you don't want any automatic finding of sections or only want to consider a certain section, then you could do this by using the options:

You can use multiple of these options at once and even specify multiple e.g. executables at once: --executable=exe1 --executable=exe2 ....


By default all fields of a section are printed out. You can constrain the output by the options: --only=name or --ignore=name. These options can be specified multiple times.

The allowed names are the field names from the cabal file, just the hyphen replaced by an underscore e.g.: hs-source-dirs -> hs_source_dirs.

Currently supported cabal fields are:

There are further some special fields:

It's not quite true, that all fields are printed out if not constrained, that's only the case for the pure formatting option. For the other formatting options currently the fields c_sources and ld_options are ignored and additionally the ghc formatting option ignores the hdevtools_socket field.


The conditional parts of the cabal file are respected by cabal-cargs by taking the default values of the flags defined in the cabal file into account.

You can overwrite the default values of the flags with the options:

It's also possible to overwrite the OS and Arch values - which by default are the ones the cabal library was build on - with the options:


By default the fields are formatted for the ghc compiler. The available options for --format are:

pure prints the values like they are present in the cabal file and is mostly only useful in conjunction with --only to get the value of one cabal field.


It's recommended to build cabal-cargs in a cabal sandbox with: cabal install cabal-cargs.