8d68112be5
Windows needs the setenv package in custom-setup, but I don't want to pull it in on unix, which would probably break some builds and need more work. Instead, split out setEnv to a separate module. Quite likely, unix-compat will get a portable environment layer, and then both modules can be removed from here. This commit was sponsored by Øyvind Andersen Holm.
40 lines
886 B
Haskell
40 lines
886 B
Haskell
{- portable environment variables
|
|
-
|
|
- Copyright 2013 Joey Hess <id@joeyh.name>
|
|
-
|
|
- License: BSD-2-clause
|
|
-}
|
|
|
|
{-# LANGUAGE CPP #-}
|
|
|
|
module Utility.Env.Set where
|
|
|
|
#ifdef mingw32_HOST_OS
|
|
import qualified System.Environment as E
|
|
import qualified System.SetEnv
|
|
#else
|
|
import qualified System.Posix.Env as PE
|
|
#endif
|
|
|
|
{- Sets an environment variable. To overwrite an existing variable,
|
|
- overwrite must be True.
|
|
-
|
|
- On Windows, setting a variable to "" unsets it. -}
|
|
setEnv :: String -> String -> Bool -> IO ()
|
|
#ifndef mingw32_HOST_OS
|
|
setEnv var val overwrite = PE.setEnv var val overwrite
|
|
#else
|
|
setEnv var val True = System.SetEnv.setEnv var val
|
|
setEnv var val False = do
|
|
r <- getEnv var
|
|
case r of
|
|
Nothing -> setEnv var val True
|
|
Just _ -> return ()
|
|
#endif
|
|
|
|
unsetEnv :: String -> IO ()
|
|
#ifndef mingw32_HOST_OS
|
|
unsetEnv = PE.unsetEnv
|
|
#else
|
|
unsetEnv = System.SetEnv.unsetEnv
|
|
#endif
|