From 920dd2de299a53c2a6f7dacf4c9542eb97e23f7d Mon Sep 17 00:00:00 2001 From: James Crayne Date: Sat, 4 Nov 2017 04:41:30 +0000 Subject: sensibleVarLib --- src/SensibleDir.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/SensibleDir.hs b/src/SensibleDir.hs index 6151500..0133736 100644 --- a/src/SensibleDir.hs +++ b/src/SensibleDir.hs @@ -102,3 +102,36 @@ sensibleCacheDir suffix = do sensibleCacheDirCreateIfMissing suffix = do dir <- sensibleCacheDir suffix createDirectoryIfMissing True dir + return dir + +-- | Try to get something approximately equivalent to /var/lib +-- but appropriate to install scenario.. +sensibleVarLib suffix = do + let ifunix x = if isUnix os then x + else PrefixInstall + install <- ifunix <$> detectLikelyInstall + case install of + PrefixInstall -> do + if isUnix os + then do + dirs <- splitDirectories . takeDirectory <$> getExecutablePath + homedir <- getHomeDirectory + let rdir = reverse dirs + case take 1 rdir of + ["bin"] -> do + let dir = foldl1 combine $ reverse (drop 1 rdir) + if homedir == dir then getXdgDirectory XdgData suffix + else return (dir "share" suffix) + _ -> do + let dir = foldl1 combine dirs + if homedir == dir then getXdgDirectory XdgData suffix + else return (dir "share" suffix) + else getAppUserDataDirectory ("share" suffix) + SystemInstall -> return ("/var/lib" suffix) + LocalInstall -> return ("/var/lib" suffix) -- not using /var/local/lib because it should be easy to find + UserInstall -> getXdgDirectory XdgCache suffix + NotInstalled -> do + dir <- splitDirectories . takeDirectory <$> getExecutablePath + let rdir = reverse dir + return . foldl1 combine $ reverse ("share": drop 2 rdir) + -- cgit v1.2.3