I want to have a look at fruit which is using GCJNI, greencard, ...
That's why I want to learn how to use greencard with cabal.
If this is only a RTFM problem, can you point me to the docs?
When using the cabal builtin preprocessor I get the error that
--libdir has to be specified.
So I tried adding this manually using a custom proprocessor beeing
copied mostly from the already existing one:
-- setup.hs -----------------------------------------------------------
import Distribution.PackageDescription
import Distribution.Simple.Utils (rawSystemVerbose, dieWithLocation)
main= do
defaultMainWithHooks $ defaultUserHooks { hookedPreProcessors = [
myGreencardPP ] }
where myGreencardPP :: (String, BuildInfo -> LocalBuildInfo ->
PreProcessor)
myGreencardPP = ("gc", ppGreenCard' ["--libdir ../c_lib"] [])
-- << --libdir is added here
-- copied from Distribution.PreProcess
ppGreenCard' :: [String] -> [String] -> BuildInfo -> LocalBuildInfo ->
PreProcessor
ppGreenCard' args inputArgs bi lbi
= maybe (ppNone "greencard") pp (withGreencard lbi)
where pp greencard inFile outFile verbose
= rawSystemVerbose verbose greencard (args ++ ["-tffi",
"-o" ++ outFile, inFile] ++ inputArgs)
ppNone :: String -> PreProcessor
ppNone name inFile _ _ =
dieWithLocation inFile Nothing $ "no " ++ name ++ " preprocessor
available"
----------------------------------------------------------------------------
I don't understand why the command does work but not when beeing executed by
cabal:
The commandline shows the directory content (no Greencard.hs). (1>)
Then it executes ./setup -v build which shows the commandline failing (2>)
Then it executes this commandline from shell
(using bash eval and getting the greencard line by grepping the output from
./setup -v build)
The final ls (3>) shows that Greencard.hs is there.
I've marked these parts using > and * *
I've also replaced the greencard executable by a shell script printing pwd
which is the same..
Whats going wrong here? How to do it right?
> $ ls; ./setup -v build || echo -e "\n\n ===> build failed \n\n"; eval
> `./setup -v build 2>&1 | grep /usr/local/bin/greencard` && echo -e "\n\n
> =====> this works why?" ; ls
1> Greencard.cabal Greencard.gc Greencard_stub_ffi.c
Greencard_stub_ffi.h dist greencard_stub_ffi.c greencard_stub_ffi.h setup
setup.hi setup.hs
Preprocessing executables for greencard-0.0...
2> */usr/local/bin/greencard --libdir ../c_lib -tffi -oGreencard.hs
Greencard.gc*
unrecognized option `--libdir ../c_lib'
Usage: greencard [OPTION]... SOURCE
Run Green Card, a foreign function interface preprocessor
for Haskell, over SOURCE
Green Card home page:
http://www.haskell.org/greencard
-?, -h --help print out this help message
and exit
-V --version output version information
and exit
-v --verbose print more information
-d --debug output extra debug
information
--print-libdir output default library
location
--libdir=DIR use base library location
-i DIRS --include-dir=DIRS Add DIRS (colon separated)
to the include search path
-s SUFS --suffix=SUFS colon separated list of
source file suffixes
-t TARGET --target=TARGET generate Haskell code for a
particular system (ghc, ffi)
-S --safe-code call C `safely' (GHC only)
-n --no-inline put C code in a separate
file (GHC only)
-4 --haskell1.4 generate code compatible
with a Haskell 1.4 system
-m SCHEME --name-mangling-scheme=SCHEME controls mapping of
external names into Haskell ones (std, classic)
-D --stub-debug include debugging code in
generated code
-f DLL --dllname=DLL generate 'foreign imports'
to dynamic library DLL (FFI backend only)
-C CCONV --callconv=CCONV use specific calling
convention (stdcall, ccall)
-o FILE --output=FILE write Green Card Haskell
output to FILE
-c FILE --output-c=FILE write Green Card C output
to FILE
-p PRE --output-prefix=PRE write Green Card Haskell
output to PRE.{hs,c}
Building greencard-0.0...
/usr/bin/ghc -Idist/build -o dist/build/greencard/greencard --make
-hide-all-packages -i -idist/build/autogen -i. -odir
dist/build/greencard/greencard-tmp -hidir dist/build/greencard/greencard-tmp
-package haskell98-1.0 -package base-2.0 -package QuickCheck-1.0 Greencard.gc
-lc_lib -L../c_lib/
ghc-6.5.20060917: no input files
Usage: For basic information, try the `--help' option.
===> build failed
=====> this works why?
3> Greencard.cabal Greencard.gc *Greencard.hs* Greencard_stub_ffi.c
Greencard_stub_ffi.h dist greencard_stub_ffi.c greencard_stub_ffi.h setup
setup.hi setup.hs
Marc
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe