packages feed

fficxx 0.5.0.1 → 0.5.1

raw patch · 10 files changed

+261/−115 lines, 10 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- FFICXX.Generate.Builder: notExistThenCreate :: FilePath -> IO ()
- FFICXX.Generate.Config: [fficxxconfig_scriptBaseDir] :: FFICXXConfig -> FilePath
- FFICXX.Generate.Type.Cabal: [gci_ccOptions] :: GeneratedCabalInfo -> [Text]
- FFICXX.Generate.Type.Class: CTCharStarStar :: CTypes
- FFICXX.Generate.Type.Class: CTDoubleStar :: CTypes
- FFICXX.Generate.Type.Class: CTIntStar :: CTypes
+ FFICXX.Generate.Code.Primitive: cfloat :: String -> (Types, String)
+ FFICXX.Generate.Code.Primitive: cfloat_ :: Types
+ FFICXX.Generate.Code.Primitive: cshort :: String -> (Types, String)
+ FFICXX.Generate.Code.Primitive: cshort_ :: Types
+ FFICXX.Generate.Config: SimpleBuilderConfig :: String -> ModuleUnitMap -> Cabal -> [Class] -> [TopLevelFunction] -> [(TemplateClass, HeaderName)] -> [String] -> [(String, [String])] -> [String] -> SimpleBuilderConfig
+ FFICXX.Generate.Config: [fficxxconfig_staticFileDir] :: FFICXXConfig -> FilePath
+ FFICXX.Generate.Config: [sbcCabal] :: SimpleBuilderConfig -> Cabal
+ FFICXX.Generate.Config: [sbcClasses] :: SimpleBuilderConfig -> [Class]
+ FFICXX.Generate.Config: [sbcExtraDeps] :: SimpleBuilderConfig -> [(String, [String])]
+ FFICXX.Generate.Config: [sbcExtraLibs] :: SimpleBuilderConfig -> [String]
+ FFICXX.Generate.Config: [sbcModUnitMap] :: SimpleBuilderConfig -> ModuleUnitMap
+ FFICXX.Generate.Config: [sbcStaticFiles] :: SimpleBuilderConfig -> [String]
+ FFICXX.Generate.Config: [sbcTemplates] :: SimpleBuilderConfig -> [(TemplateClass, HeaderName)]
+ FFICXX.Generate.Config: [sbcTopLevels] :: SimpleBuilderConfig -> [TopLevelFunction]
+ FFICXX.Generate.Config: [sbcTopModule] :: SimpleBuilderConfig -> String
+ FFICXX.Generate.Config: data SimpleBuilderConfig
+ FFICXX.Generate.Type.Cabal: Custom :: [CabalName] -> BuildType
+ FFICXX.Generate.Type.Cabal: Simple :: BuildType
+ FFICXX.Generate.Type.Cabal: [cabal_buildType] :: Cabal -> BuildType
+ FFICXX.Generate.Type.Cabal: [gci_cxxOptions] :: GeneratedCabalInfo -> [Text]
+ FFICXX.Generate.Type.Cabal: data BuildType
+ FFICXX.Generate.Type.Class: CEnum :: CTypes -> String -> CTypes
+ FFICXX.Generate.Type.Class: CTClock :: CTypes
+ FFICXX.Generate.Type.Class: CTFile :: CTypes
+ FFICXX.Generate.Type.Class: CTFloat :: CTypes
+ FFICXX.Generate.Type.Class: CTFpos :: CTypes
+ FFICXX.Generate.Type.Class: CTInt16 :: CTypes
+ FFICXX.Generate.Type.Class: CTInt32 :: CTypes
+ FFICXX.Generate.Type.Class: CTInt64 :: CTypes
+ FFICXX.Generate.Type.Class: CTInt8 :: CTypes
+ FFICXX.Generate.Type.Class: CTIntMax :: CTypes
+ FFICXX.Generate.Type.Class: CTIntPtr :: CTypes
+ FFICXX.Generate.Type.Class: CTJmpBuf :: CTypes
+ FFICXX.Generate.Type.Class: CTLLong :: CTypes
+ FFICXX.Generate.Type.Class: CTPtrdiff :: CTypes
+ FFICXX.Generate.Type.Class: CTSChar :: CTypes
+ FFICXX.Generate.Type.Class: CTSUSeconds :: CTypes
+ FFICXX.Generate.Type.Class: CTShort :: CTypes
+ FFICXX.Generate.Type.Class: CTSigAtomic :: CTypes
+ FFICXX.Generate.Type.Class: CTSize :: CTypes
+ FFICXX.Generate.Type.Class: CTTime :: CTypes
+ FFICXX.Generate.Type.Class: CTUChar :: CTypes
+ FFICXX.Generate.Type.Class: CTUInt16 :: CTypes
+ FFICXX.Generate.Type.Class: CTUInt32 :: CTypes
+ FFICXX.Generate.Type.Class: CTUInt64 :: CTypes
+ FFICXX.Generate.Type.Class: CTUInt8 :: CTypes
+ FFICXX.Generate.Type.Class: CTUIntMax :: CTypes
+ FFICXX.Generate.Type.Class: CTUIntPtr :: CTypes
+ FFICXX.Generate.Type.Class: CTULLong :: CTypes
+ FFICXX.Generate.Type.Class: CTUSeconds :: CTypes
+ FFICXX.Generate.Type.Class: CTUShort :: CTypes
+ FFICXX.Generate.Type.Class: CTWchar :: CTypes
- FFICXX.Generate.Builder: simpleBuilder :: String -> ModuleUnitMap -> (Cabal, [Class], [TopLevelFunction], [(TemplateClass, HeaderName)]) -> [String] -> [(String, [String])] -> IO ()
+ FFICXX.Generate.Builder: simpleBuilder :: FFICXXConfig -> SimpleBuilderConfig -> IO ()
- FFICXX.Generate.Type.Cabal: Cabal :: CabalName -> String -> String -> String -> [AddCInc] -> [AddCSrc] -> [CabalName] -> Maybe String -> Maybe String -> [FilePath] -> [FilePath] -> [FilePath] -> [String] -> Cabal
+ FFICXX.Generate.Type.Cabal: Cabal :: CabalName -> String -> String -> String -> [AddCInc] -> [AddCSrc] -> [CabalName] -> Maybe String -> Maybe String -> [FilePath] -> [FilePath] -> [FilePath] -> [String] -> BuildType -> Cabal
- FFICXX.Generate.Util: intercalateWithM :: (Monad m) => (String -> String -> String) -> (a -> m String) -> [a] -> m String
+ FFICXX.Generate.Util: intercalateWithM :: Monad m => (String -> String -> String) -> (a -> m String) -> [a] -> m String
- FFICXX.Generate.Util.HaskellSrcExts: irule :: Maybe [TyVarBind ()] -> Maybe Context () -> InstHead () -> InstRule ()
+ FFICXX.Generate.Util.HaskellSrcExts: irule :: Maybe [TyVarBind ()] -> Maybe (Context ()) -> InstHead () -> InstRule ()
- FFICXX.Generate.Util.HaskellSrcExts: qualConDecl :: Maybe [TyVarBind ()] -> Maybe Context () -> ConDecl () -> QualConDecl ()
+ FFICXX.Generate.Util.HaskellSrcExts: qualConDecl :: Maybe [TyVarBind ()] -> Maybe (Context ()) -> ConDecl () -> QualConDecl ()
- FFICXX.Generate.Util.HaskellSrcExts: tyForall :: Maybe [TyVarBind ()] -> Maybe Context () -> Type () -> Type ()
+ FFICXX.Generate.Util.HaskellSrcExts: tyForall :: Maybe [TyVarBind ()] -> Maybe (Context ()) -> Type () -> Type ()

Files

fficxx.cabal view
@@ -1,5 +1,5 @@ Name:           fficxx-Version:        0.5.0.1+Version:        0.5.1 Synopsis:       automatic C++ binding generation Description:    automatic C++ binding generation License:        BSD3
lib/FFICXX/Generate/Builder.hs view
@@ -4,7 +4,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : FFICXX.Generate.Builder--- Copyright   : (c) 2011-2018 Ian-Woo Kim+-- Copyright   : (c) 2011-2019 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>@@ -15,27 +15,32 @@  module FFICXX.Generate.Builder where -import           Control.Monad                           (void,when)+import           Control.Monad                           ( void, when ) import qualified Data.ByteString.Lazy.Char8        as L-import           Data.Char                               (toUpper)-import           Data.Digest.Pure.MD5                    (md5)-import           Data.Foldable                           (for_)-import           Data.Monoid                             ((<>),mempty)-import           Language.Haskell.Exts.Pretty            (prettyPrint)-import           System.FilePath                         ((</>),(<.>),splitExtension)-import           System.Directory                        (copyFile, doesDirectoryExist-                                                         ,doesFileExist,getCurrentDirectory)-import           System.IO                               (hPutStrLn,withFile,IOMode(..))-import           System.Process                          (readProcess,system )+import           Data.Char                               ( toUpper )+import           Data.Digest.Pure.MD5                    ( md5 )+import           Data.Foldable                           ( for_ )+import           Data.Monoid                             ( (<>), mempty )+import           Language.Haskell.Exts.Pretty            ( prettyPrint )+import           System.FilePath                         ( (</>), (<.>), splitExtension )+import           System.Directory                        ( copyFile+                                                         , createDirectoryIfMissing+                                                         , doesFileExist+                                                         )+import           System.IO                               ( hPutStrLn, withFile, IOMode(..) )+import           System.Process                          ( readProcess ) -- import           FFICXX.Generate.Code.Cabal import           FFICXX.Generate.Dependency-import           FFICXX.Generate.Config+import           FFICXX.Generate.Config                  ( FFICXXConfig(..)+                                                         , SimpleBuilderConfig(..)+                                                         ) import           FFICXX.Generate.ContentMaker-import           FFICXX.Generate.Type.Cabal              (Cabal(..),CabalName(..)-                                                         ,AddCInc(..),AddCSrc(..))-import           FFICXX.Generate.Type.Config             (ModuleUnitMap(..))-import           FFICXX.Generate.Type.Class+import           FFICXX.Generate.Type.Cabal              ( Cabal(..)+                                                         , CabalName(..)+                                                         , AddCInc(..)+                                                         , AddCSrc(..)+                                                         ) import           FFICXX.Generate.Type.Module import           FFICXX.Generate.Type.PackageInterface import           FFICXX.Generate.Util@@ -44,26 +49,28 @@ macrofy :: String -> String macrofy = map ((\x->if x=='-' then '_' else x) . toUpper) -simpleBuilder :: String-              -> ModuleUnitMap-              -> (Cabal, [Class], [TopLevelFunction], [(TemplateClass,HeaderName)])-              -> [String] -- ^ extra libs-              -> [(String,[String])] -- ^ extra module-              ->  IO ()-simpleBuilder topLevelMod mumap (cabal,classes,toplevelfunctions,templates) extralibs extramods = do++simpleBuilder :: FFICXXConfig -> SimpleBuilderConfig -> IO ()+simpleBuilder cfg sbc = do   putStrLn "----------------------------------------------------"   putStrLn "-- fficxx code generation for Haskell-C++ binding --"   putStrLn "----------------------------------------------------"--  let pkgname = cabal_pkgname cabal+  let SimpleBuilderConfig+        topLevelMod+        mumap+        cabal+        classes+        toplevelfunctions+        templates+        extralibs+        extramods+        staticFiles+        = sbc+      pkgname = cabal_pkgname cabal   putStrLn ("Generating " <> unCabalName pkgname)-  cwd <- getCurrentDirectory-  let cfg =  FFICXXConfig { fficxxconfig_scriptBaseDir = cwd-                          , fficxxconfig_workingDir = cwd </> "working"-                          , fficxxconfig_installBaseDir = cwd </> unCabalName pkgname-                          }-      workingDir = fficxxconfig_workingDir cfg+  let workingDir = fficxxconfig_workingDir cfg       installDir = fficxxconfig_installBaseDir cfg+      staticDir  = fficxxconfig_staticFileDir cfg        pkgconfig@(PkgConfig mods cihs tih tcms _tcihs _ _) =         mkPackageConfig@@ -75,11 +82,14 @@       cabalFileName = unCabalName pkgname <.> "cabal"       jsonFileName = unCabalName pkgname <.> "json"   ---  notExistThenCreate workingDir-  notExistThenCreate installDir-  notExistThenCreate (installDir </> "src")-  notExistThenCreate (installDir </> "csrc")+  createDirectoryIfMissing True workingDir+  createDirectoryIfMissing True installDir+  createDirectoryIfMissing True (installDir </> "src")+  createDirectoryIfMissing True (installDir </> "csrc")   --+  putStrLn "Copying static files"+  mapM_ (\x->copyFileWithMD5Check (staticDir </> x) (installDir </> x)) staticFiles+  --   putStrLn "Generating Cabal file"   buildCabalFile cabal topLevelMod pkgconfig extralibs (workingDir</>cabalFileName)   --@@ -187,12 +197,6 @@ touch fp = void (readProcess "touch" [fp] "")  -notExistThenCreate :: FilePath -> IO ()-notExistThenCreate dir = do-    b <- doesDirectoryExist dir-    if b then return () else system ("mkdir -p " <> dir) >> return ()-- copyFileWithMD5Check :: FilePath -> FilePath -> IO () copyFileWithMD5Check src tgt = do   b <- doesFileExist tgt@@ -240,7 +244,7 @@       newfpath = ddir </> mdir </> mfile' <> fnameext   b <- doesFileExist origfpath   when b $ do-    notExistThenCreate (ddir </> mdir)+    createDirectoryIfMissing True (ddir </> mdir)     copyFileWithMD5Check origfpath newfpath  
lib/FFICXX/Generate/Code/Cabal.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : FFICXX.Generate.Code.Cabal--- Copyright   : (c) 2011-2018 Ian-Woo Kim+-- Copyright   : (c) 2011-2019 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>@@ -16,7 +16,7 @@  import Data.Aeson.Encode.Pretty    (encodePretty) import qualified Data.ByteString.Lazy as BL-import Data.List                   (nub)+import Data.List                   (intercalate, nub) import Data.Monoid                 ((<>)) import Data.Text                   (Text) import Data.Text.Template          (substitute)@@ -25,15 +25,19 @@ import qualified Data.Text.IO as TIO (writeFile) import System.FilePath             ((<.>),(</>)) ---import FFICXX.Generate.Type.Cabal  (AddCInc(..),AddCSrc(..)-                                   ,CabalName(..),Cabal(..)-                                   ,GeneratedCabalInfo(..))+import FFICXX.Generate.Type.Cabal  ( AddCInc(..)+                                   , AddCSrc(..)+                                   , BuildType(..)+                                   , CabalName(..)+                                   , Cabal(..)+                                   , GeneratedCabalInfo(..)+                                   ) import FFICXX.Generate.Type.Module import FFICXX.Generate.Type.PackageInterface import FFICXX.Generate.Util  -cabalIndentation :: Text -- String+cabalIndentation :: Text cabalIndentation = T.replicate 23 " "  @@ -147,8 +151,8 @@   \Maintainer:  $maintainer\n\   \Category:       $category\n\   \Tested-with:    GHC >= 7.6\n\-  \Build-Type:  $buildtype\n\-  \cabal-version:  >=1.10\n\+  \$buildtype\n\+  \cabal-version:  >= 2\n\   \Extra-source-files:\n\   \$extraFiles\n\   \$csrcFiles\n\@@ -160,14 +164,14 @@   \  hs-source-dirs: src\n\   \  ghc-options:  -Wall -funbox-strict-fields -fno-warn-unused-do-bind -fno-warn-orphans -fno-warn-unused-imports\n\   \  ghc-prof-options: -caf-all -auto-all\n\-  \  cc-options: $ccOptions\n\+  \  cxx-options: $cxxOptions\n\   \  Build-Depends: $pkgdeps\n\   \  Exposed-Modules:\n\   \$exposedModules\n\   \  Other-Modules:\n\   \$otherModules\n\   \  extra-lib-dirs: $extralibdirs\n\-  \  extra-libraries:    stdc++ $extraLibraries\n\+  \  extra-libraries:    $extraLibraries\n\   \  Include-dirs:       csrc $extraincludedirs\n\   \  pkgconfig-depends: $pkgconfigDepends\n\   \  Install-includes:\n\@@ -204,11 +208,17 @@      , gci_author           = ""      , gci_maintainer       = ""      , gci_category         = ""-     , gci_buildtype        = "Simple"+     , gci_buildtype        = case cabal_buildType cabal of+                                Simple ->+                                  "Build-Type: Simple"+                                Custom deps ->+                                     "Build-Type: Custom\ncustom-setup\n  setup-depends: "+                                  <> T.pack (intercalate ", " (map unCabalName deps))+                                  <> "\n"      , gci_extraFiles       = map T.pack extrafiles      , gci_csrcFiles        = map T.pack $ genCsrcFiles (tih,classmodules) acincs acsrcs      , gci_sourcerepository = ""-     , gci_ccOptions        = ["-std=c++14"]+     , gci_cxxOptions       = ["-std=c++14"]      , gci_pkgdeps          = map T.pack $ genPkgDeps (cabal_additional_pkgdeps cabal)      , gci_exposedModules   = map T.pack $ genExposedModules summarymodule (classmodules,tmods)      , gci_otherModules     = map T.pack $ genOtherModules classmodules@@ -237,7 +247,7 @@                , ("maintainer"      , gci_maintainer)                , ("category"        , gci_category)                , ("sourcerepository", gci_sourcerepository)-               , ("ccOptions"       , T.intercalate " " gci_ccOptions)+               , ("cxxOptions"       , T.intercalate " " gci_cxxOptions)                , ("pkgdeps"         , T.intercalate ", " gci_pkgdeps)                , ("extraFiles"      , unlinesWithIndent gci_extraFiles)                , ("csrcFiles"       , unlinesWithIndent gci_csrcFiles)
lib/FFICXX/Generate/Code/Cpp.hs view
@@ -366,7 +366,7 @@     in intercalateWith connBSlash id [declstr, "{", returnstr, "}"]   | otherwise =     let declstr = funcToDecl c func-        callstr = "to_nonconst<Type,Type ## _t>(p)->"+        callstr = "TYPECASTMETHOD(Type,"<> aliasedFuncName c func <> "," <> class_name c <> ")(p)->"                   <> cppFuncName c func <> "("                   <> argsToCallString (genericFuncArgs func)                   <> ")"
lib/FFICXX/Generate/Code/HsFrontEnd.hs view
@@ -35,7 +35,6 @@                                                ) import FFICXX.Generate.Name                    (accessorName                                                ,aliasedFuncName-                                               ,constructorName                                                ,hsClassName                                                ,hscAccessorName                                                ,hscFuncName@@ -93,7 +92,7 @@         -- cann = maybe "" id $ M.lookup (PkgMethod, constructorName c) amap         -- newfuncann = mkComment 0 cann         rhs = app (mkVar (hsFuncXformer f)) (mkVar (hscFuncName c f))-    in mkFun (constructorName c) (functionSignature c f) [] rhs Nothing+    in mkFun (aliasedFuncName c f) (functionSignature c f) [] rhs Nothing  genHsFrontInstNonVirtual :: Class -> [Decl ()] genHsFrontInstNonVirtual c =
lib/FFICXX/Generate/Code/Primitive.hs view
@@ -24,18 +24,46 @@ ctypToStr :: CTypes -> IsConst -> String ctypToStr ctyp isconst =   let typword = case ctyp of-        CTString -> "char*"-        CTChar   -> "char"-        CTInt    -> "int"-        CTUInt   -> "unsigned int"-        CTLong   -> "signed long"-        CTULong  -> "long unsigned int"+        CTBool -> "bool"+        CTChar -> "char"+        CTClock -> "clock_t"         CTDouble -> "double"-        CTBool   -> "int"              -- Currently available solution-        CTDoubleStar -> "double *"+        CTFile -> "FILE"+        CTFloat -> "float"+        CTFpos -> "fpos_t"+        CTInt -> "int"+        CTIntMax -> "intmax_t"+        CTIntPtr -> "intptr_t"+        CTJmpBuf -> "jmp_buf"+        CTLLong -> "long long"+        CTLong -> "long"+        CTPtrdiff -> "ptrdiff_t"+        CTSChar -> "sized char"+        CTSUSeconds -> "suseconds_t"+        CTShort -> "short"+        CTSigAtomic -> "sig_atomic_t"+        CTSize -> "size_t"+        CTTime -> "time_t"+        CTUChar -> "unsigned char"+        CTUInt -> "unsigned int"+        CTUIntMax -> "uintmax_t"+        CTUIntPtr -> "uintptr_t"+        CTULLong -> "unsigned long long"+        CTULong -> "unsigned long"+        CTUSeconds -> "useconds_t"+        CTUShort -> "unsigned short"+        CTWchar -> "wchar_t"+        CTInt8 -> "int8_t"+        CTInt16 -> "int16_t"+        CTInt32 -> "int32_t"+        CTInt64 -> "int64_t"+        CTUInt8 -> "uint8_t"+        CTUInt16 -> "uint16_t"+        CTUInt32 -> "uint32_t"+        CTUInt64 -> "uint64_t"+        CTString -> "char*"         CTVoidStar -> "void*"-        CTIntStar -> "int*"-        CTCharStarStar -> "char**"+        CEnum _ type_str -> type_str         CPointer s -> ctypToStr s NoConst <> "*"         CRef s -> ctypToStr s NoConst <> "*"   in case isconst of@@ -75,8 +103,11 @@ char_ :: Types char_ = CT CTChar NoConst +cshort_ :: Types+cshort_ = CT CTShort Const+ short_ :: Types-short_ = int_+short_ = CT CTShort NoConst  cdouble_ :: Types cdouble_ = CT CTDouble Const@@ -85,10 +116,13 @@ double_  = CT CTDouble NoConst  doublep_ :: Types-doublep_ = CT CTDoubleStar NoConst+doublep_ = CT (CPointer CTDouble) NoConst +cfloat_ :: Types+cfloat_ = CT CTFloat Const+ float_ :: Types-float_ = double_+float_ = CT CTFloat NoConst  bool_ :: Types bool_    = CT CTBool   NoConst@@ -100,14 +134,14 @@ voidp_ = CT CTVoidStar NoConst  intp_ :: Types-intp_ = CT CTIntStar NoConst+intp_ = CT (CPointer CTInt) NoConst  intref_ :: Types intref_ = CT (CRef CTInt) NoConst   charpp_ :: Types-charpp_ = CT CTCharStarStar NoConst+charpp_ = CT (CPointer CTString) NoConst  ref_ :: CTypes -> Types ref_ t = CT (CRef t) NoConst@@ -154,8 +188,11 @@ char :: String -> (Types,String) char var = (char_ , var) +cshort :: String -> (Types,String)+cshort var = (cshort_ , var)+ short :: String -> (Types,String)-short = int+short var = (short_ , var)  cdouble :: String -> (Types,String) cdouble var = (cdouble_ , var)@@ -166,8 +203,11 @@ doublep :: String -> (Types,String) doublep var = (doublep_ , var) +cfloat :: String -> (Types,String)+cfloat var = (float_ , var)+ float :: String -> (Types,String)-float = double+float var = (float_ , var)  bool :: String -> (Types,String) bool    var = (bool_    , var)@@ -485,18 +525,46 @@  -- | convertC2HS :: CTypes -> Type ()-convertC2HS CTString     = tycon "CString"-convertC2HS CTChar       = tycon "CChar"-convertC2HS CTInt        = tycon "CInt"-convertC2HS CTUInt       = tycon "CUInt"-convertC2HS CTLong       = tycon "CLong"-convertC2HS CTULong      = tycon "CULong"-convertC2HS CTDouble     = tycon "CDouble"-convertC2HS CTDoubleStar = tyapp (tycon "Ptr") (tycon "CDouble")-convertC2HS CTBool       = tycon "CInt"+convertC2HS CTBool      = tycon "CBool"+convertC2HS CTChar      = tycon "CChar"+convertC2HS CTClock     = tycon "CClock"+convertC2HS CTDouble    = tycon "CDouble"+convertC2HS CTFile      = tycon "CFile"+convertC2HS CTFloat     = tycon "CFloat"+convertC2HS CTFpos      = tycon "CFpos"+convertC2HS CTInt       = tycon "CInt"+convertC2HS CTIntMax    = tycon "CIntMax"+convertC2HS CTIntPtr    = tycon "CIntPtr"+convertC2HS CTJmpBuf    = tycon "CJmpBuf"+convertC2HS CTLLong     = tycon "CLLong"+convertC2HS CTLong      = tycon "CLong"+convertC2HS CTPtrdiff   = tycon "CPtrdiff"+convertC2HS CTSChar     = tycon "CSChar"+convertC2HS CTSUSeconds = tycon "CSUSeconds"+convertC2HS CTShort     = tycon "CShort"+convertC2HS CTSigAtomic = tycon "CSigAtomic"+convertC2HS CTSize      = tycon "CSize"+convertC2HS CTTime      = tycon "CTime"+convertC2HS CTUChar     = tycon "CUChar"+convertC2HS CTUInt      = tycon "CUInt"+convertC2HS CTUIntMax   = tycon "CUIntMax"+convertC2HS CTUIntPtr   = tycon "CUIntPtr"+convertC2HS CTULLong    = tycon "CULLong"+convertC2HS CTULong     = tycon "CULong"+convertC2HS CTUSeconds  = tycon "CUSeconds"+convertC2HS CTUShort    = tycon "CUShort"+convertC2HS CTWchar     = tycon "CWchar"+convertC2HS CTInt8      = tycon "Int8"+convertC2HS CTInt16      = tycon "Int16"+convertC2HS CTInt32      = tycon "Int32"+convertC2HS CTInt64      = tycon "Int64"+convertC2HS CTUInt8      = tycon "Word8"+convertC2HS CTUInt16      = tycon "Word16"+convertC2HS CTUInt32      = tycon "Word32"+convertC2HS CTUInt64      = tycon "Word64"+convertC2HS CTString    = tycon "CString" convertC2HS CTVoidStar   = tyapp (tycon "Ptr") unit_tycon-convertC2HS CTIntStar    = tyapp (tycon "Ptr") (tycon "CInt")-convertC2HS CTCharStarStar = tyapp (tycon "Ptr") (tycon "CString")+convertC2HS (CEnum t _)  = convertC2HS t convertC2HS (CPointer t) = tyapp (tycon "Ptr") (convertC2HS t) convertC2HS (CRef t)     = tyapp (tycon "Ptr") (convertC2HS t) 
lib/FFICXX/Generate/Config.hs view
@@ -1,7 +1,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : FFICXX.Generate.Config--- Copyright   : (c) 2011-2013 Ian-Woo Kim+-- Copyright   : (c) 2011-2019 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>@@ -13,9 +13,27 @@  module FFICXX.Generate.Config where -data FFICXXConfig = FFICXXConfig { -  fficxxconfig_scriptBaseDir :: FilePath, -  fficxxconfig_workingDir :: FilePath, -  fficxxconfig_installBaseDir :: FilePath-} deriving Show+import FFICXX.Generate.Type.Cabal            ( Cabal )+import FFICXX.Generate.Type.Class            ( Class, TemplateClass, TopLevelFunction )+import FFICXX.Generate.Type.Config           ( ModuleUnitMap(..) )+import FFICXX.Generate.Type.PackageInterface ( HeaderName ) ++data FFICXXConfig = FFICXXConfig {+    fficxxconfig_workingDir     :: FilePath+  , fficxxconfig_installBaseDir :: FilePath+  , fficxxconfig_staticFileDir  :: FilePath+  } deriving Show++data SimpleBuilderConfig =+  SimpleBuilderConfig {+    sbcTopModule     :: String+  , sbcModUnitMap    :: ModuleUnitMap+  , sbcCabal         :: Cabal+  , sbcClasses       :: [Class]+  , sbcTopLevels     :: [TopLevelFunction]+  , sbcTemplates     :: [(TemplateClass,HeaderName)]+  , sbcExtraLibs     :: [String]+  , sbcExtraDeps     :: [(String,[String])]+  , sbcStaticFiles   :: [String]+  }
lib/FFICXX/Generate/ContentMaker.hs view
@@ -197,6 +197,13 @@   \\n\   \$alias\n\   \\n\+  \#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)\n\+  \\n\+  \#define TYPECASTMETHOD(cname,mname,oname) \\\n\+  \  IIF( CHECKPROTECT(cname,mname) ) ( \\\n\+  \  (to_nonconst<oname,cname ## _t>), \\\n\+  \  (to_nonconst<cname,cname ## _t>) )\n\+  \\n\   \$cppbody\n"  @@ -314,7 +321,11 @@ buildFFIHsc m = mkModule (mname <.> "FFI") [lang ["ForeignFunctionInterface"]] ffiImports hscBody   where mname = cmModule m         headers = cmCIH m-        ffiImports = [ mkImport "Foreign.C", mkImport "Foreign.Ptr", mkImport (mname <.> "RawType") ]+        ffiImports = [ mkImport "Data.Word"+                     , mkImport "Data.Int"+                     , mkImport "Foreign.C"+                     , mkImport "Foreign.Ptr"+                     , mkImport (mname <.> "RawType") ]                      <> genImportInFFI m                      <> genExtraImport m         hscBody = concatMap genHsFFI headers@@ -344,6 +355,7 @@                             ifaceImports ifaceBody   where classes = cmClass m         ifaceImports = [ mkImport "Data.Word"+                       , mkImport "Data.Int"                        , mkImport "Foreign.C"                        , mkImport "Foreign.Ptr"                        , mkImport "FFICXX.Runtime.Cast" ]@@ -386,6 +398,7 @@   where classes = cmClass m         implImports = [ mkImport "Data.Monoid"                -- for template member                       , mkImport "Data.Word"+                      , mkImport "Data.Int"                       , mkImport "Foreign.C"                       , mkImport "Foreign.Ptr"                       , mkImport "Language.Haskell.TH"        -- for template member
lib/FFICXX/Generate/Type/Cabal.hs view
@@ -3,7 +3,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : FFICXX.Generate.Type.Cabal--- Copyright   : (c) 2011-2018 Ian-Woo Kim+-- Copyright   : (c) 2011-2019 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>@@ -29,22 +29,27 @@ newtype CabalName = CabalName { unCabalName :: String }                   deriving (Show,Eq,Ord) ++data BuildType = Simple+               | Custom [CabalName] -- ^ dependencies+ -- TODO: change String to Text data Cabal =        Cabal {-         cabal_pkgname       :: CabalName-       , cabal_version       :: String-       , cabal_cheaderprefix :: String-       , cabal_moduleprefix  :: String-       , cabal_additional_c_incs :: [AddCInc]-       , cabal_additional_c_srcs :: [AddCSrc]+         cabal_pkgname            :: CabalName+       , cabal_version            :: String+       , cabal_cheaderprefix      :: String+       , cabal_moduleprefix       :: String+       , cabal_additional_c_incs  :: [AddCInc]+       , cabal_additional_c_srcs  :: [AddCSrc]        , cabal_additional_pkgdeps :: [CabalName]-       , cabal_license          :: Maybe String-       , cabal_licensefile      :: Maybe String-       , cabal_extraincludedirs :: [FilePath]-       , cabal_extralibdirs     :: [FilePath]-       , cabal_extrafiles       :: [FilePath]+       , cabal_license            :: Maybe String+       , cabal_licensefile        :: Maybe String+       , cabal_extraincludedirs   :: [FilePath]+       , cabal_extralibdirs       :: [FilePath]+       , cabal_extrafiles         :: [FilePath]        , cabal_pkg_config_depends :: [String]+       , cabal_buildType          :: BuildType        }  data GeneratedCabalInfo =@@ -63,7 +68,7 @@        , gci_extraFiles       :: [Text]        , gci_csrcFiles        :: [Text]        , gci_sourcerepository :: Text-       , gci_ccOptions        :: [Text]+       , gci_cxxOptions       :: [Text]        , gci_pkgdeps          :: [Text]        , gci_exposedModules   :: [Text]        , gci_otherModules     :: [Text]
lib/FFICXX/Generate/Type/Class.hs view
@@ -22,19 +22,48 @@ -- import           FFICXX.Generate.Type.Cabal + -- | C types-data CTypes = CTString+data CTypes = CTBool             | CTChar+            | CTClock+            | CTDouble+            | CTFile+            | CTFloat+            | CTFpos             | CTInt-            | CTUInt+            | CTIntMax+            | CTIntPtr+            | CTJmpBuf+            | CTLLong             | CTLong+            | CTPtrdiff+            | CTSChar+            | CTSUSeconds+            | CTShort+            | CTSigAtomic+            | CTSize+            | CTTime+            | CTUChar+            | CTUInt+            | CTUIntMax+            | CTUIntPtr+            | CTULLong             | CTULong-            | CTDouble-            | CTBool-            | CTDoubleStar+            | CTUSeconds+            | CTUShort+            | CTWchar+            | CTInt8+            | CTInt16+            | CTInt32+            | CTInt64+            | CTUInt8+            | CTUInt16+            | CTUInt32+            | CTUInt64             | CTVoidStar-            | CTIntStar-            | CTCharStarStar+            | CTString+            | CEnum CTypes String             | CPointer CTypes             | CRef CTypes             deriving Show