{-# LANGUAGE CPP #-} #ifndef POSIX_LIKE #define POSIX_LIKE !(defined(_WIN32_HOST_OS) || defined(_WIN64_HOST_OS)) && \ (defined(unix_HOST_OS) || defined(__unix___HOST_OS) || \ defined(__unix_HOST_OS) || defined(linux_HOST_OS) || \ defined(__linux___HOST_OS) || defined(__linux_HOST_OS) || \ (defined(__APPLE___HOST_OS) && defined(__MACH___HOST_OS))) #endif module Main where import Control.Monad import Distribution.PackageDescription import Distribution.Simple import Distribution.Simple.LocalBuildInfo import Distribution.Simple.Setup import System.Directory import System.Environment.XDG.BaseDir #if POSIX_LIKE import System.Posix.Files #endif main :: IO () main = defaultMainWithHooks $ simpleUserHooks {postInst = setupXDG} setupXDG :: Args -> InstallFlags -> PackageDescription -> LocalBuildInfo -> IO () setupXDG _ _ _ _ = do configDir <- getUserConfigDir "purescript" configExists <- doesDirectoryExist configDir unless configExists $ do createDirectoryIfMissing True configDir #if POSIX_LIKE setFileMode configDir ownerModes #endif #undef POSIX_LIKE