Fix detection of llvm-x.x
authorThomas Miedema <thomasmiedema@gmail.com>
Mon, 2 Mar 2015 17:09:33 +0000 (11:09 -0600)
committerAustin Seipp <austin@well-typed.com>
Mon, 2 Mar 2015 17:09:33 +0000 (11:09 -0600)
Summary:
Four bug fixes and a little refactoring.
* `find -perm \mode` should be `find -perm /mode` (#9697)

* `find -regex '$3' should be `find -regex "$3"` (#7661)

From `man sh` on my system (Ubuntu 14.04):
"Enclosing characters in single quotes preserves the literal meaning of all
the characters ..."

* LlcCmd and OptCmd should be passed to ghc, using `-pgmlo` and `-pgmlc`, for
  detection of #9439.

* -pgmlo and -pgmlc were undocumented because of an xml tag misplacement.

Test Plan:
The aclocal.m4 macro has seen about 10 iterations since its inception. Without a
testsuite, I can't guarantee this version is bug free either. It's all pretty
frustrating.

Reviewers: bgamari, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D683

GHC Trac Issues: #9697, #7661, #9439

aclocal.m4
configure.ac
docs/users_guide/flags.xml

index 73b8890..a4944c1 100644 (file)
@@ -2095,21 +2095,31 @@ AC_DEFUN([XCODE_VERSION],[
 AC_DEFUN([FIND_LLVM_PROG],[
     FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL_NOTARGET([$1], [$2], [$3])
     if test "$$1" = ""; then
+        echo -n "checking for $3-x.x... "
         save_IFS=$IFS
         IFS=":;"
+        if test "$windows" = YES; then
+            PERM=
+            MODE=
+        else
+            # Search for executables.
+            PERM="-perm"
+            MODE="/+x"
+        fi
         for p in ${PATH}; do
             if test -d "${p}"; then
-                if test "$windows" = YES; then
-                    $1=`${FindCmd} "${p}" -type f -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' -or -type l -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' | ${SortCmd} -n | tail -1`
-                else
-                    $1=`${FindCmd} "${p}" -type f -perm \111 -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' -or -type l -perm \111 -maxdepth 1 -regex '.*/$3-[[0-9]]\.[[0-9]]' | ${SortCmd} -n | tail -1`
-                fi
+                $1=`${FindCmd} "${p}" -maxdepth 1 \( -type f -o -type l \) ${PERM} ${MODE} -regex ".*/$3-[[0-9]]\.[[0-9]]" | ${SortCmd} -n | tail -1`
                 if test -n "$$1"; then
                     break
                 fi
             fi
         done
         IFS=$save_IFS
+        if test -n "$$1"; then
+            echo "$$1"
+        else
+            echo "no"
+        fi
     fi
 ])
 
index f65d133..c64af90 100644 (file)
@@ -508,7 +508,7 @@ then
     echo "main = putStrLn \"%function\"" > conftestghc.hs
 
     # Check whether LLVM backend is default for this platform
-    "${WithGhc}" conftestghc.hs 2>&1 >/dev/null
+    "${WithGhc}" -pgmlc="${LlcCmd}" -pgmlo="${OptCmd}" conftestghc.hs 2>&1 >/dev/null
     res=`./conftestghc`
     if test "x$res" = "x%object"
     then
@@ -525,7 +525,7 @@ then
 
     # -fllvm is not the default, but set a flag so the Makefile can check
     # -for it in the build flags later on
-    "${WithGhc}" -fforce-recomp -fllvm conftestghc.hs 2>&1 >/dev/null
+    "${WithGhc}" -fforce-recomp -pgmlc="${LlcCmd}" -pgmlo="${OptCmd}" -fllvm conftestghc.hs 2>&1 >/dev/null
     if test $? = 0
     then
         res=`./conftestghc`
index 3d90479..4bf78b6 100644 (file)
             <entry>Use <replaceable>cmd</replaceable> as the C compiler</entry>
             <entry>dynamic</entry>
             <entry>-</entry>
+          </row>
             <row>
               <entry><option>-pgmlo</option> <replaceable>cmd</replaceable></entry>
               <entry>Use <replaceable>cmd</replaceable> as the LLVM optimiser</entry>
               <entry>dynamic</entry>
               <entry>-</entry>
             </row>
-          </row>
           <row>
             <entry><option>-pgms</option> <replaceable>cmd</replaceable></entry>
             <entry>Use <replaceable>cmd</replaceable> as the splitter</entry>