plugins
plugins copied to clipboard
Dynamic linking and runtime evaluation of Haskell, and C, including dependency chasing and package resolution.
NOTE: This README is now very out of date.
hs-plugins
Compiler and tool support for compiling and loading, and evaluating Haskell at runtime.
The library provides a convenient interface to GHC's runtime loader and linker, letting you load compiled Haskell code.
It also provides a `make' system for compiling plugin source automagically and for combining the user's .hs file with a stub of standard declarations and syntax, saving the user from having to write standard code themselves.
It provides an `eval' function, for generating new, well-typed, compiled code from a Haskell source string.
It also provides a new variation of printf for Haskell-- a runtime generated, dynamically-typed printf.
Read the documentation in doc/ for more.
BUILDING: $ chmod +x Setup.lhs configure $ ./Setup.lhs configure --prefix=/usr/local $ ./Setup.lhs build $ ./Setup.lhs install
DEPENDENCIES:
- Requires GHC >= 6.4
- Requires Cabal
-
Optional: If you are doing a lot of `merge'-related operations, and require an extended haskell parser, you can compile hs-plugins to use HSX, Niklas Broberg's Haskell parser library, available at:
darcs get http://www.cs.chalmers.se/~d00nibro/haskell-src-exts
To get hs-plugins to use HSX, use:
$ mv plugins.cabal.hsx plugins.cabal $ ./Setup.lhs configure --enable-hsx
Make sure to install HSX first though :)
-
On cygwin/windows you (a) make sure the cygwin "find" is before the windows "find" on your PATH, and (b) to give the windows-style path (e.g., "c:/cygwin/usr/local") in the ./configure --prefix=foo/bar step
-
'plugs' requires a working readline library.
-
If you wish to use TH in plugins, or to run load()-programs in GHCi, you require a patch to GHC's linker, that was committed into ghc 6.3, and ghc 6.2 -stable branch, and is available from 6.2.2 onwards.
-
If you need to regenerate ./configure you need >= autoreconf-2.53
-
The documentation relies on haddock, latex, dvips, tex2page:
$ cd doc && make
EXAMPLES:
Have a look in the testsuite/ directory for many examples of how to arrange your code.
LICENSE:
This library is distributed under the terms of the LGPL. The runtime loader code is based on code written by André Pang, and others, and is distributed under the BSD-style Glasgow University license.
PORTABILITY:
Requires GHC 6.4 or greater, though most testing has be done on 6.4. The dynamic loader requires a functional GHCi implementation.
---------------------+--------------------------------------------------
Platform | Works Should work* Unknown Won't work
---------------------+--------------------------------------------------
i386--linux | X
i386--freebsd | X
i386--openbsd | X
powerpc-apple-darwin | X
powerpc--linux | X
sparc--solaris2 | X
ia64--linux | #
i386--solaris2 | X
sparc--linux | X
sparc--openbsd | X
i386--netbsd | X
amd64-*-openbsd | X
mips64-sgi-irix | X
---------------------+--------------------------------------------------