From 23fc82387d7e6dd50e273e7ec512959966f95f91 Mon Sep 17 00:00:00 2001 From: James Crayne Date: Sat, 4 Nov 2017 04:41:30 +0000 Subject: sensibleVarLib --- sensible-directory/src/SensibleDir.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'sensible-directory') diff --git a/sensible-directory/src/SensibleDir.hs b/sensible-directory/src/SensibleDir.hs index 61515001..0133736d 100644 --- a/sensible-directory/src/SensibleDir.hs +++ b/sensible-directory/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