drmaa 0.1.1 → 0.2.0
raw patch · 2 files changed
+34/−34 lines, 2 filesdep +directorydep −shellydep −text
Dependencies added: directory
Dependencies removed: shelly, text
Files
- drmaa.cabal +3/−4
- src/DRMAA.hs +31/−30
drmaa.cabal view
@@ -1,12 +1,12 @@ name: drmaa-version: 0.1.1+version: 0.2.0 synopsis: A minimal Haskell bindings to DRMAA C library. description: A minimal Haskell bindings to DRMAA C library. license: BSD3 license-file: LICENSE author: Kai Zhang maintainer: kai@kzhang.org-copyright: (c) 2016 Kai Zhang+copyright: (c) 2016-2017 Kai Zhang category: Language build-type: Simple extra-source-files: ChangeLog.md@@ -20,8 +20,7 @@ build-depends: base >=4.7 && <5.0 , inline-c- , text- , shelly+ , directory hs-source-dirs: src c-sources: src/DRMAA.c
src/DRMAA.hs view
@@ -1,39 +1,32 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE TemplateHaskell #-}-module DRMAA where+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TemplateHaskell #-}+module DRMAA+ ( withSession+ , initSession+ , exitSession+ , DrmaaAttribute(..)+ , defaultDrmaaConfig+ , drmaaRun+ ) where -import Control.Exception (bracket, bracket_)-import qualified Data.Text as T+import Control.Exception (bracket_)+import Control.Monad (when) import Foreign.C.String import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Ptr import qualified Language.C.Inline as C-import Shelly hiding (FilePath, withTmpDir)+import System.Directory (getCurrentDirectory) import Text.Printf (printf) C.include "stddef.h" C.include "stdio.h" C.include "drmaa.h" -withTmpFile :: FilePath -> (FilePath -> IO a) -> IO a-withTmpFile dir = bracket create delete- where- create = shelly $ fmap (T.unpack . head . T.lines) $ silently $- run "mktemp" [T.pack $ dir ++ "/tmp_file_XXXXXXXX_delete.me"]- delete = shelly . rm_f . fromText . T.pack--withTmpDir :: FilePath -> (FilePath -> IO a) -> IO a-withTmpDir dir = bracket create delete- where- create = shelly $ fmap (T.unpack . head . T.lines) $ silently $- run "mktemp" ["-d", T.pack $ dir ++ "/tmp_dir_XXXXXXXX_delete.me"]- delete = shelly . rm_rf . fromText . T.pack--withSGESession :: IO a -> IO a-withSGESession f = bracket_ drmaaInit drmaaExit f+withSession :: IO a -> IO a+withSession = bracket_ initSession exitSession +{- drmaaScript :: String -> DrmaaAttribute -> IO () drmaaScript script config = bracket (shelly $ fmap (T.unpack . head . T.lines) $ silently $ run "mktemp" [template])@@ -44,10 +37,11 @@ drmaaRun tmpFl [] config where template = T.pack $ drmaa_wd config ++ "/drmaa_script.XXXXXXXX.delete.me.sh"+ -} -- | Initialize a session-drmaaInit :: IO ()-drmaaInit = alloca $ \ptr -> do+initSession :: IO ()+initSession = alloca $ \ptr -> do status <- [C.block| int { int errnum = 0; errnum = drmaa_init (NULL, $(char* ptr), DRMAA_ERROR_STRING_BUFFER);@@ -57,9 +51,10 @@ return 0; }|] when (status /= 0) $ peekCString ptr >>= error+{-# INLINE initSession #-} -drmaaExit :: IO ()-drmaaExit = do+exitSession :: IO ()+exitSession = do r <- [C.block| int { char error[DRMAA_ERROR_STRING_BUFFER]; int errnum = 0;@@ -71,16 +66,17 @@ return 0; }|] when (r /= 0) $ error "Exit 1"+{-# INLINE exitSession #-} data DrmaaAttribute = DrmaaAttribute- { drmaa_wd :: !FilePath+ { drmaa_wd :: !(Maybe FilePath) , drmaa_env :: ![(String, String)] , drmaa_native :: !String } deriving (Show, Read) defaultDrmaaConfig :: DrmaaAttribute defaultDrmaaConfig = DrmaaAttribute- { drmaa_wd = "./"+ { drmaa_wd = Nothing , drmaa_env = [ ("DRMAA_ENV_HAS_SET", "True") ] , drmaa_native = "" }@@ -91,7 +87,7 @@ c_args <- mapM newCString args -- options- wd <- newCString $ drmaa_wd config+ wd <- get_wd (drmaa_wd config) >>= newCString env <- mapM (\(a,b) -> newCString $ a ++ "=" ++ b) $ drmaa_env config native <- newCString $ drmaa_native config @@ -212,3 +208,8 @@ when (e/=0) $ error $ printf "Job failed (status=%d). Please see SGE log for details" (fromIntegral e :: Int)++get_wd :: Maybe FilePath -> IO FilePath+get_wd Nothing = getCurrentDirectory+get_wd (Just x) = return x+{-# INLINE get_wd #-}