java-bridge-0.20130602: java-bridge.cabal
name: java-bridge
version: 0.20130602
license: MIT
license-file: LICENSE
author: Julian Fleischer <julian.fleischer@fu-berlin.de>
maintainer: Julian Fleischer <julian.fleischer@fu-berlin.de>
stability: experimental
category: Foreign, Java, JVM, FFI Tools
cabal-version: >= 1.8
synopsis: Bindings to the JNI and a high level interface generator.
description: This package offers bindings to the /Java Native Interface/
and a high level interface generator.
.
[@low level bindings to the JNI@]
The low level bindings are located in "Foreign.Java.JNI.Safe"
and "Foreign.Java.JNI.Unsafe". When using these bindings you
will have to deal with pointers and manage global references
manually.
.
[@medium level interface@]
The medium level interface is located in "Foreign.Java".
It offers an abstraction over the JNI, i.e. you will not
have to deal with pointers explicitly nor do you need to
manually do conversions between native types and Haskell
types. Also references will automatically be released by
the Haskell runtime when no longer needed. You will still
need to manually lookup classes and methods in order to use
them.
.
[@high level bindings generator@]
You can also generate high level bindings using the tools
@j2hs@ and @hs2j@ that come along with this package. The tools
works in both directions, i.e. you can generate glue code to use
existing Java libraries from within Haskell as well as to use
Haskell from within Java. This is the most convenient way
to deal with a Java library.
.
.
>>> INSTALLATION / USAGE
.
It should suffice to do @cabal install@ (or
@cabal install java-bridge@ when installing from hackageDB).
/You need to have a JDK installed prior to installing this library/.
.
Setup will try to find the location of your java installation
automatically. This is needed in order to load @libjvm@.
Note that this library is loaded dynamically, which
means that linking errors might not show up during installation.
.
You can specify the location of @libjvm@ manually using the
environment variable @FFIJNI_LIBJVM@. This environment variable
is consulted by @Setup.hs@ as well as by the library each time
@libjvm@ is loaded - which means that you can override the path to
@libjvm@ at any time. The function @getCompiledLibjvmPath@ in
"Foreign.Java.JNI.Safe" will tell you what path to @libjvm@ has
been set during compilation of the library.
.
.
>>> FUN WITH (cabal-) FLAGS
.
The following cabal flags are available to you for configuring
your installation:
.
[@ONLY_CORE@]
Build only the Core Modules which offer a
direct binding to the Java Native Interface.
The core modules are "Foreign.Java.JNI",
"Foreign.Java.JNI.Safe", and "Foreign.Java.JNI.Unsafe".
This implies @NO_TOOLS@.
Defaults to @False@.
.
[@NO_TOOLS@]
Do not build the @j2hs@ and @hs2j@ executables.
Defaults to @False@.
.
[@DEBUG@]
Enable a debug build. Defaults to @False@.
.
[@OSX_GUI@]
Build the library with special support for
Cocoa on Mac OS X (you will not be able to
use AWT or Swing without). Defaults to @True@
on Darwin (OS X).
.
[@OSX_FRAMEWORK@]
Use the JavaVM framework on MacOS X instead
of loading the dynamic library. Defaults to
@False@. Enable this flag if building on your
OS X machine fails. Defaults to @False@.
.
[@EXAMPLES@]
Build a set of examples. They are prefixed
with @java-@ and located along your haskell
executables. Defaults to @False@.
.
Use for example @cabal install -f OSX_FRAMEWORK -f EXAMPLES@
or @cabal configure -f DEBUG@.
.
.
>>> HACKING
.
See @HACKING.txt@ and @ISSUES.txt@ in the tar.gz-package.
build-type: Custom
extra-source-files: src/Foreign/Java/JNI/core.hs,
src/ffijni.h,
GetProperty.java,
examples/calculator/calculator.cabal,
examples/system-properties/Makefile,
HACKING.txt,
ISSUES.txt,
README.md
flag ONLY_CORE
Description: Build only the Core Modules which offer a
direct binding to the Java Native Interface.
Default: False
flag NO_TOOLS
Description: Do not build the `j2hs' and `hs2j' executables.
Default: False
flag DEBUG
Description: Enable a debug build.
Default: False
flag OSX_GUI
Description: Build the library with special support for
Cocoa on Mac OS X.
Default: True
flag OSX_FRAMEWORK
Description: Use the JavaVM framework on MacOS X instead
of loading the dynamic library.
Default: False
flag EXAMPLES
Description: Build a set of sample executables.
Default: False
Library
cc-options: -DFFIJNI_BRIDGE_VERSION="0.20130602"
cpp-options: -DFFIJNI_BRIDGE_VERSION="0.20130602"
build-depends: base >= 4.5 && < 5
, directory >= 1.1.0.2
, filepath >= 1.3
hs-source-dirs: src
exposed-modules: Foreign.Java.JNI,
Foreign.Java.JNI.Safe,
Foreign.Java.JNI.Unsafe
other-modules: Foreign.Java.JNI.Types
if flag(ONLY_CORE)
cc-options: -DFFIJNI_ONLY_CORE
cpp-options: -DFFIJNI_ONLY_CORE
else
exposed-modules: Foreign.Java
, Foreign.Java.Bindings
, Foreign.Java.Bindings.JavaTypes
, Foreign.Java.Bindings.HaskellTypes
, Foreign.Java.Bindings.Support
, Foreign.Java.Control
, Foreign.Java.IO
, Foreign.Java.Maybe
, Foreign.Java.Utils
, Foreign.Java.Value
, Foreign.Java.Tutorial
build-depends: hinduce-missingh
, cpphs >= 1.16
, strings >= 1.1
, multimap >= 1.2
-- the following are part of the Haskell Platform
, mtl >= 2.1.1
, syb >= 0.3.6.1
, transformers >= 0.3
, containers >= 0.4.2.1
other-modules: Foreign.Java.Types
, Foreign.Java.JavaMonad
, Foreign.Java.Util
, Foreign.Java.Bindings.ReflectJava
, Foreign.Java.Bindings.ReflectHaskell
, Foreign.Java.Bindings.Java2Haskell
, Foreign.Java.Bindings.Haskell2Java
, Foreign.Java.Bindings.JavaSE6
, Foreign.Java.Bindings.Typomatic
if flag(DEBUG)
cc-options: -DFFIJNI_DEBUG
cpp-options: -DFFIJNI_DEBUG
c-sources: src/ffijni.c
includes: src/ffijni.h
cc-options: -Wall --std=c99
if os(darwin)
buildable: True
cc-options: -Wno-deprecated-declarations -DFFIJNI_MACOSX
cpp-options: -DFFIJNI_MACOSX
build-depends: unix
if flag(OSX_GUI)
cc-options: -DFFIJNI_OSX_GUI
cpp-options: -DFFIJNI_OSX_GUI
frameworks: Cocoa
if flag(OSX_FRAMEWORK)
cc-options: -DFFIJNI_OSX_FRAMEWORK
cpp-options: -DFFIJNI_OSX_FRAMEWORK
frameworks: JavaVM
else
if os(linux)
buildable: True
cc-options: -DFFIJNI_LINUX
cpp-options: -DFFIJNI_LINUX
build-depends: unix
else
if os(windows)
buildable: True
cc-options: -DFFIJNI_WINDOWS
cpp-options: -DFFIJNI_WINDOWS
else
buildable: False
Executable j2hs
if flag(ONLY_CORE)
buildable: False
else
if flag(NO_TOOLS)
buildable: False
else
buildable: True
hs-source-dirs: j2hs
main-is: Main.hs
other-modules: Common
, Options
, Java2Haskell
build-depends: base >= 4.5 && < 5
, java-bridge
-- The following are part of the GHC core packages:
, containers >= 0.4.2.1
, directory >= 1.1.0.2
, filepath >= 1.3
-- These are part of the Haskell Platform:
, syb >= 0.3.6.1
, split >= 0.2.1.1
-- These are available from HackageDB:
, strings >= 1.1
, multimap >= 1.2
, names >= 0.3.1 && < 0.4
, named-records >= 0.5
-- These are also available form HackageDB but from
-- another maintainer than this package:
, bimap >= 0.2.4
, hint >= 0.3.3.4
Executable h2js
if flag(ONLY_CORE)
buildable: False
else
if flag(NO_TOOLS)
buildable: False
else
buildable: True
hs-source-dirs: hs2j
main-is: Main.hs
other-modules: Common
, Options
, Haskell2Java
build-depends: base >= 4.5 && < 5
, java-bridge
-- The following are part of the GHC core packages:
, containers >= 0.4.2.1
, directory >= 1.1.0.2
, filepath >= 1.3
-- These are part of the Haskell Platform:
, syb >= 0.3.6.1
, split >= 0.2.1.1
-- These are available from HackageDB:
, strings >= 1.1
, multimap >= 1.1
, names >= 0.3.1 && < 0.4
, named-records >= 0.5
-- These are also available form HackageDB but from
-- another maintainer than this package:
, bimap >= 0.2.4
, hint >= 0.3.3.4
Executable java-calculator
if flag(EXAMPLES)
if os(darwin)
if flag(OSX_GUI)
buildable: True
else
buildable: False
else
buildable: True
else
buildable: False
build-depends: base >= 4 && < 5
, java-bridge
hs-source-dirs: examples/calculator/src
main-is: calculator.hs
ghc-options: -threaded
Executable java-system-properties
if flag(EXAMPLES)
buildable: True
else
buildable: False
build-depends: base >= 4 && < 5
, java-bridge
hs-source-dirs: examples/system-properties
main-is: system-properties.hs