cabal-cargs alternatives and similar packages
Based on the "cabal" category
Do you think we are missing an alternative of cabal-cargs or a related project?
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
The main motivation for writing
cabal-cargs was to get a mostly just working
default, non modified
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
cpp-options ... - and also the
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
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
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
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 endfor echohl None return '' endif return l:output endfunction function! s:HdevtoolsOptions() return s:CabalCargs('--format=hdevtools --sourcefile=' . shellescape(expand('%'))) endfunction autocmd Bufenter *.hs :call s:InitHaskellVars() function! s:InitHaskellVars() if filereadable(expand('%')) let g:hdevtools_options = s:HdevtoolsOptions() endif endfunction
To see if
cabal-cargs did the right thing you can verify the hdevtools options by
calling in the vim command line:
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:
--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.:
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
ld_options are ignored
and additionally the
ghc formatting option ignores the
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
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
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.