Lookup builder in PATH if they are given without path.
authorMoritz Angermann <moritz.angermann@gmail.com>
Wed, 6 Jan 2016 15:22:43 +0000 (23:22 +0800)
committerMoritz Angermann <moritz.angermann@gmail.com>
Wed, 6 Jan 2016 15:22:53 +0000 (23:22 +0800)
`system-gcc` may be given without path (e.g. `clang`), this patch adds lookup using `which`
for those commands. Also drops calling `fixAbsolutePathOnWindows` on non window hosts.
Fixes #26

src/Builder.hs
src/Oracles/WindowsRoot.hs

index 5ed9e1d..6e4dba5 100644 (file)
@@ -94,7 +94,9 @@ builderPath builder = do
     path <- askConfigWithDefault (builderKey builder) $
             putError $ "\nCannot find path to '" ++ (builderKey builder)
                      ++ "' in configuration files."
-    fixAbsolutePathOnWindows $ if null path then "" else path -<.> exe
+    windows <- windowsHost
+    let path' = if null path then "" else path -<.> exe in
+        (if windows then fixAbsolutePathOnWindows else lookupInPath) path'
 
 getBuilderPath :: Builder -> ReaderT a Action FilePath
 getBuilderPath = lift . builderPath
index 413f289..195f591 100644 (file)
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
 module Oracles.WindowsRoot (
-    windowsRoot, fixAbsolutePathOnWindows, topDirectory, windowsRootOracle
+    windowsRoot, fixAbsolutePathOnWindows, lookupInPath, topDirectory, windowsRootOracle
     ) where
 
 import Data.Char (isSpace)
@@ -38,6 +38,15 @@ fixAbsolutePathOnWindows path = do
     else
         return path
 
+-- | Lookup a @command@ in @PATH@ environment.
+lookupInPath :: FilePath -> Action FilePath
+lookupInPath command
+    | command /= takeFileName command = return command
+    | otherwise = do
+        Stdout out <- quietly $ cmd ["which", command]
+        let path = dropWhileEnd isSpace out
+        return path
+
 -- Oracle for windowsRoot. This operation requires caching as looking up
 -- the root is slow (at least the current implementation).
 windowsRootOracle :: Rules ()