native-0.1.0.0: src/PowerShell.hs
module PowerShell where
import Paths_native
import Data.Monoid
import Control.Monad
import System.Process
import System.Exit
import System.Directory
import System.FilePath
paramsList :: [(String, String)] -> [String]
paramsList = concatMap (\(p, v) -> ["-" <> p, v])
runPS :: String -> String -> IO String
runPS psPath parStr = do
let cmdString = "powershell -ExecutionPolicy ByPass -File \"" ++ psPath ++ "\" " ++ parStr
cmd = shell cmdString
(ec, out, err) <- readCreateProcessWithExitCode cmd ""
case ec of
ExitSuccess -> return out
ExitFailure c -> error $ "Command `" ++ cmdString ++ "` failed with exit code " ++ show c
++ "\nThe error was:\n" ++ err
runPSStream :: String -> String -> IO ()
runPSStream psPath parStr = do
let cmdString = "powershell -ExecutionPolicy ByPass -File \"" ++ psPath ++ "\" " ++ parStr
callCommand cmdString
runDataPS :: String -> [(String, String)] -> IO String
runDataPS psFile params = do
psPath <- getDataFileName psFile
runPS psPath parStr
where parStr = unwords $ paramsList params
getEnvVar :: String -> IO (Maybe String)
getEnvVar v = do
val <- runDataPS "GetEnvironmentVariable.ps1" [("var", v)]
case val of
"" -> return Nothing
x -> return (Just x)
setupEnvVars :: IO ()
setupEnvVars = void $ runDataPS "Setup.ps1" []
addPath :: IO ()
addPath = void $ runDataPS "AddPath.ps1" []
download :: String -> IO String
download url = runDataPS "Download.ps1" [("url", url)]
cleanTemp :: IO ()
cleanTemp = do
dataDir <- getAppUserDataDirectory "native-libs"
void $ runDataPS "CleanTemp.ps1" [("tempDir", dataDir </> "temp")]