rts-loader alternatives and similar packages
Based on the "Distribution" category.
Alternatively, view rts-loader alternatives based on common mentions on social networks and blogs.
-
Cabal-ide-backend
Official upstream development repository for Cabal and cabal-install -
stackage
Stable Haskell package sets: vetted consistent packages from Hackage -
cabal-dev
A wrapper program around cabal and cabal-install that maintains sandboxed build environments. -
redo
djb's redo implementation in Haskell (for Haskell from Scratch video series) -
hackage-security-HTTP
Hackage security framework based on TUF (The Update Framework) -
hackage-security
Hackage security framework based on TUF (The Update Framework) -
hackage-repo-tool
Hackage security framework based on TUF (The Update Framework) -
cabal-helper
Give Haskell development tools access to Cabal project environment. -
hackport
A command line tool to generate Gentoo ebuilds from Hackage packages. -
stackage-upload
A more secure version of cabal upload which uses HTTPS -
haddocset
Generate docset of Dash by Haddock haskell documentation tool -
hackage-diff
Compare the public API of different versions of a Hackage library -
cabal-bounds
Set the version bounds of dependencies in a cabal file -
stackage-cabal
A CLI executable for cabal-based stackage commands -
cabal-meta
avoid cabal dependency hell by installing all your cabal dependencies at the same time -
language-nix
Data types and useful functions to represent and manipulate the Nix language. | Source has moved to https://github.com/nixos/cabal2nix -
cblrepo
Tool to simplify managing a consistent set of Haskell packages for distributions. -
hackage-db
provide access to the Hackage database via Data.Map | Source has moved to https://github.com/nixos/cabal2nix -
haskell-packages
Haskell suite library for package management and integration with Cabal -
distribution-nixpkgs
Haskell types and functions to represent, query, and manipulate the Nixpkgs distribution. | Source has moved to https://github.com/nixos/cabal2nix -
cabal-dependency-licenses
Compose a list of a project's transitive dependencies with their licenses -
jailbreak-cabal
Strip version restrictions from build dependencies in Cabal files. -
haskell-updater
rebuilds Haskell packages after a GHC upgrade or a dependency upgrade -
cabal-uninstall
Very simple Haskell script to uninstall cabal packages -
stackage-update
Update your package index incrementally (requires git) -
dynamic-cabal
Dynamically load the Cabal library to use a newer version with the GHC API -
cabal-file-th
Template haskell function to bring cabal file fields into your source. -
stackage-metadata
Tool for extracting metadata on all packages -
cabal-constraints
Repeatable builds for cabalized Haskell projects
InfluxDB - Power Real-Time Data Analytics at Scale
Do you think we are missing an alternative of rts-loader or a related project?
README
Haskell dynamic library loader
Load and execute functions from Haskell dynamic libraries without being restricted to a single RTS/GHC version.
This package consists of the initial loader executable rts-loader
written
in plain C and a Haskell library providing a convinient interface to it. The
initial loader executable is implemented in C since writing it in Haskell would
mean linking against the RTS which means we can't load libraries compiled with
another version of GHC.
In order to get Cabal to compile a pure C executable while not linking against
the RTS still some hacks in Setup.hs
are employed to call gcc
directly so
beware.
Usage
The example below will locate the package "foopkg" in the package databases
configured for the Cabal project in the current directory and execute the
function "main" from the module "Lib". The package can be found in
tests/lib
in the rts-loader source tree.
To run the example, execute the following commands in the rts-loader source tree.
$ cabal install --only-dependencies && cabal configure && cabal build && cabal install tests/lib
$ rts_loader_libexecdir=dist/build/rts-loader dist/build/rts-loader-example/rts-loader-example
rts_loader_libexecdir=...
is only required if you didn't install rts-loader
into a sandbox or elsewhere already.
import System.Loader.RTS
import System.Process
import Distribution.Verbosity
import Distribution.Package
import Distribution.Simple.Configure
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Configure (getPersistBuildConfig)
main :: IO ()
main = do
lbi <- getPersistBuildConfig "dist"
let verbosity = normal
comp = compiler lbi
pkg_db_stack = withPackageDB lbi
prog_conf = withPrograms lbi
pidx <- getInstalledPackages verbosity comp pkg_db_stack prog_conf
loader_exe <- loaderExecutablePath
loader_args <- loaderInvocation (SymbolIdentifier "Lib" "main") [] <$>
(resolveLibraryInfo comp [WayDyn] $
lookupLibraryInfo pidx $
PQName $ PackageName "foopkg")
print =<< rawSystem loader_exe loader_args
We use information written by cabal configure
(see getPersistBuildConfig
)
for convinience only this is not actually required to use the loader.