diff options
author | James Crayne <jim.crayne@gmail.com> | 2017-11-04 04:41:30 +0000 |
---|---|---|
committer | James Crayne <jim.crayne@gmail.com> | 2017-11-04 05:12:33 +0000 |
commit | 920dd2de299a53c2a6f7dacf4c9542eb97e23f7d (patch) | |
tree | 2df27a7a8d78bad4dc6031f5696fc4df87cfe248 | |
parent | ee4efc12fb20f14d4a2a1bb47a523c03b7bbeb59 (diff) |
sensibleVarLib
-rw-r--r-- | src/SensibleDir.hs | 33 |
1 files changed, 33 insertions, 0 deletions
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 | |||
102 | sensibleCacheDirCreateIfMissing suffix = do | 102 | sensibleCacheDirCreateIfMissing suffix = do |
103 | dir <- sensibleCacheDir suffix | 103 | dir <- sensibleCacheDir suffix |
104 | createDirectoryIfMissing True dir | 104 | createDirectoryIfMissing True dir |
105 | return dir | ||
106 | |||
107 | -- | Try to get something approximately equivalent to /var/lib | ||
108 | -- but appropriate to install scenario.. | ||
109 | sensibleVarLib suffix = do | ||
110 | let ifunix x = if isUnix os then x | ||
111 | else PrefixInstall | ||
112 | install <- ifunix <$> detectLikelyInstall | ||
113 | case install of | ||
114 | PrefixInstall -> do | ||
115 | if isUnix os | ||
116 | then do | ||
117 | dirs <- splitDirectories . takeDirectory <$> getExecutablePath | ||
118 | homedir <- getHomeDirectory | ||
119 | let rdir = reverse dirs | ||
120 | case take 1 rdir of | ||
121 | ["bin"] -> do | ||
122 | let dir = foldl1 combine $ reverse (drop 1 rdir) | ||
123 | if homedir == dir then getXdgDirectory XdgData suffix | ||
124 | else return (dir </> "share" </> suffix) | ||
125 | _ -> do | ||
126 | let dir = foldl1 combine dirs | ||
127 | if homedir == dir then getXdgDirectory XdgData suffix | ||
128 | else return (dir </> "share" </> suffix) | ||
129 | else getAppUserDataDirectory ("share" </> suffix) | ||
130 | SystemInstall -> return ("/var/lib" </> suffix) | ||
131 | LocalInstall -> return ("/var/lib" </> suffix) -- not using /var/local/lib because it should be easy to find | ||
132 | UserInstall -> getXdgDirectory XdgCache suffix | ||
133 | NotInstalled -> do | ||
134 | dir <- splitDirectories . takeDirectory <$> getExecutablePath | ||
135 | let rdir = reverse dir | ||
136 | return . foldl1 combine $ reverse ("share": drop 2 rdir) | ||
137 | |||