From 7d469fba03085e1538f7b33227a3b69fc68d037f Mon Sep 17 00:00:00 2001 From: ross Date: Fri, 28 Jan 2005 10:15:44 +0000 Subject: [PATCH] [project @ 2005-01-28 10:15:44 by ross] fix foreign imports for non-GHC --- Text/Regex/Posix.hsc | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/Text/Regex/Posix.hsc b/Text/Regex/Posix.hsc index ee22088..f2dda51 100644 --- a/Text/Regex/Posix.hsc +++ b/Text/Regex/Posix.hsc @@ -176,7 +176,14 @@ unpack string p_match = do type CRegMatch = () -#ifdef __GLASGOW_HASKELL__ +-- GHC and Hugs get the appropriate include file from the OPTIONS +-- pragma generated by hsc2hs from the above #include. +-- Implementations following the FFI spec have to specify it in the +-- foreign import, which is awkward because some systems provide +-- regex.h and the rest of the regex library, but otherwise we +-- need to use our own copy, regex/regex.h. + +#if __GLASGOW_HASKELL__ || __HUGS__ foreign import ccall unsafe "regcomp" c_regcomp :: Ptr CRegex -> CString -> CInt -> IO CInt @@ -186,16 +193,7 @@ foreign import ccall unsafe "®free" foreign import ccall unsafe "regexec" c_regexec :: Ptr CRegex -> CString -> CSize -> Ptr CRegMatch -> CInt -> IO CInt -#else --- For NHC and (we think) Hugs, we have to hackily put --- the regex.h include in the name of the C function to --- import. (GHC does this by interpreting the --- "-#include regex.h" OPTIONS pragma that hsc2hs generates. --- The trouble with the hacky solution is that sometimes --- we want regex.h and sometimes regex/regex.h. I'm not --- sure if the hack will work for NHC and Hugs on all --- platforms - +#elif HAVE_REGEX_H && HAVE_REGCOMP foreign import ccall unsafe "regex.h regcomp" c_regcomp :: Ptr CRegex -> CString -> CInt -> IO CInt @@ -205,4 +203,14 @@ foreign import ccall unsafe "regex.h ®free" foreign import ccall unsafe "regex.h regexec" c_regexec :: Ptr CRegex -> CString -> CSize -> Ptr CRegMatch -> CInt -> IO CInt +#else +foreign import ccall unsafe "regex/regex.h regcomp" + c_regcomp :: Ptr CRegex -> CString -> CInt -> IO CInt + +foreign import ccall unsafe "regex/regex.h ®free" + ptr_regfree :: FunPtr (Ptr CRegex -> IO ()) + +foreign import ccall unsafe "regex/regex.h regexec" + c_regexec :: Ptr CRegex -> CString -> CSize + -> Ptr CRegMatch -> CInt -> IO CInt #endif -- 1.7.10.4