summaryrefslogtreecommitdiff
path: root/Annex/Path.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-11-24 16:03:03 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-11-24 16:03:03 -0400
commitc22facd63b079f50e39926d172b66e3bf3835e7e (patch)
tree9fbb36bcee3edef556beb9aef01b9f5ecb1f94a8 /Annex/Path.hs
parent774b203d85bbbb4ac03f95d622fd9b6ef9fe54d5 (diff)
move programPath out of Config.Files to Annex.Path
This works around horribleness in the Mavericks cpp, which falls over on the #if when configure is running. Moving it avoids the file being built at that point. But it's also a location that makes sense..
Diffstat (limited to 'Annex/Path.hs')
-rw-r--r--Annex/Path.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/Annex/Path.hs b/Annex/Path.hs
new file mode 100644
index 000000000..a8c4907b2
--- /dev/null
+++ b/Annex/Path.hs
@@ -0,0 +1,34 @@
+{- git-annex program path
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Annex.Path where
+
+import Common
+import Config.Files
+import System.Environment
+
+{- A fully qualified path to the currently running git-annex program.
+ -
+ - getExecutablePath is available since ghc 7.4.2. On OSs it supports
+ - well, it returns the complete path to the program. But, on other OSs,
+ - it might return just the basename.
+ -}
+programPath :: IO (Maybe FilePath)
+programPath = do
+#if MIN_VERSION_base(4,6,0)
+ exe <- getExecutablePath
+ p <- if isAbsolute exe
+ then return exe
+ else readProgramFile
+#else
+ p <- readProgramFile
+#endif
+ -- In case readProgramFile returned just the command name,
+ -- fall back to finding it in PATH.
+ searchPath p