detect 'autoreconf' path during configure, and use it in hadrian
authorAlp Mestanogullari <alpmestan@gmail.com>
Tue, 26 Feb 2019 10:21:55 +0000 (11:21 +0100)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Mon, 4 Mar 2019 00:35:18 +0000 (19:35 -0500)
configure.ac
hadrian/cfg/system.config.in
hadrian/src/Builder.hs

index e5ea091..1aae465 100644 (file)
@@ -817,6 +817,9 @@ dnl ** check for patch
 dnl if GNU patch is named gpatch, look for it first
 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
 
+dnl ** check for autoreconf
+AC_PATH_PROG(AutoreconfCmd, autoreconf, autoreconf)
+
 dnl ** check for dtrace (currently only implemented for Mac OS X)
 AC_ARG_ENABLE(dtrace,
     [AC_HELP_STRING([--enable-dtrace],
index 7b92b29..4cae2b6 100644 (file)
@@ -7,7 +7,7 @@
 
 alex           = @AlexCmd@
 ar             = @ArCmd@
-autoreconf     = autoreconf
+autoreconf     = @AutoreconfCmd@
 cc             = @CC@
 happy          = @HappyCmd@
 hs-cpp         = @HaskellCPPCmd@
index 02edb19..38d21b3 100644 (file)
@@ -288,7 +288,7 @@ systemBuilderPath builder = case builder of
     Alex            -> fromKey "alex"
     Ar _ Stage0     -> fromKey "system-ar"
     Ar _ _          -> fromKey "ar"
-    Autoreconf _    -> fromKey "autoreconf"
+    Autoreconf _    -> stripExe =<< fromKey "autoreconf"
     Cc  _  Stage0   -> fromKey "system-cc"
     Cc  _  _        -> fromKey "cc"
     -- We can't ask configure for the path to configure!
@@ -329,6 +329,18 @@ systemBuilderPath builder = case builder of
                 (True , True ) -> fixAbsolutePathOnWindows fullPath
                 (True , False) -> fixAbsolutePathOnWindows fullPath <&> (<.> exe)
 
+    -- Without this function, on Windows we can observe a bad builder path
+    -- for 'autoreconf'. If the relevant system.config field is set to
+    -- /usr/bin/autoreconf in the file, the path that we read
+    -- is C:/msys64/usr/bin/autoreconf.exe. A standard msys2 set up happens
+    -- to have an executable named 'autoreconf' there, without the 'exe'
+    -- extension. Hence this function.
+    stripExe s = do
+        let sNoExt = dropExtension s
+        exists <- doesFileExist s
+        if exists then return s else return sNoExt
+
+
 -- | Was the path to a given system 'Builder' specified in configuration files?
 isSpecified :: Builder -> Action Bool
 isSpecified = fmap (not . null) . systemBuilderPath