dynamic-cabal alternatives and similar packages
Based on the "Distribution" category.
Alternatively, view dynamic-cabal alternatives based on common mentions on social networks and blogs.
-
cabal-dev
A wrapper program around cabal and cabal-install that maintains sandboxed build environments. -
language-nix
DISCONTINUED. Data types and useful functions to represent and manipulate the Nix language. | Source has moved to https://github.com/nixos/cabal2nix -
hackage-db
DISCONTINUED. provide access to the Hackage database via Data.Map | Source has moved to https://github.com/nixos/cabal2nix -
distribution-nixpkgs
DISCONTINUED. Haskell types and functions to represent, query, and manipulate the Nixpkgs distribution. | Source has moved to https://github.com/nixos/cabal2nix
CodeRabbit: AI Code Reviews for Developers
Do you think we are missing an alternative of dynamic-cabal or a related project?
README
dynamic-cabal
Note: The problem this library solves no longer exists starting with GHC 7.10, since versions later than that do not depend on the Cabal library. You only need this library if you like to support older GHC versions.
If you've ever used Cabal together with the GHC-API, you know the problem. Because GHC depends on a version of Cabal, which is often outdated, there is no way to parse the setup-config file generated by newer cabal versions. This library attemps to solve the problem by dynamically generating code that performs the action you want, and then compiling and loading that with GHC. With this method, you don't need to depend on Cabal at compile time and so you can use any version of Cabal.
Usage
Currently, the library only allows two queries: Getting the targets (along with their dependencies, ghc options, etc) and the package databases. The first is easily achieved using the targets
query provided by the library. To run the query, you can use the runQuery
function, which takes the path to the setup-config file as an argument. For example, the following little program prints out the names of all test suites, when run in a configured cabal project root directory:
import Distribution.Client.Dynamic
main :: IO ()
main = do
tgs <- runQuery (on localPkgDesc targets) "dist/setup-config"
mapM_ putStrLn [ n | TestSuite n <- map name tgs ]
Because targets
works on a PackageDescription, on localPkgDesc
is used to get the current PackageDescription.
Contributing
At the moment, I only implemented the functions I need myself. If you have more functions you want to implement, just send a pull request or open an issue.