From 34bc02c7bc8b7e8c267e6da9a8c35a6c25f1b72e Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Sun, 17 Nov 2019 19:10:45 -0500
Subject: [PATCH] configure: Find Python3 for testsuite

In addition, we prefer the Mingw64 Python distribution on Windows due
to #17483.
---
 .gitlab-ci.yml               |  2 +-
 aclocal.m4                   | 11 +++++++++++
 configure.ac                 |  3 +++
 distrib/configure.ac.in      |  3 +++
 hadrian/cfg/system.config.in |  2 +-
 testsuite/mk/boilerplate.mk  |  2 +-
 6 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e7d78e74af81..683f56c83bfc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -860,7 +860,7 @@ nightly-i386-windows-hadrian:
     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make binary-dist-prep TAR_COMP_OPTS=-1"
     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make test_bindist TEST_PREP=YES"
-    - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
+    - bash -c 'make V=0 test PYTHON=/mingw64/bin/python3 THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
   tags:
     - x86_64-windows
   artifacts:
diff --git a/aclocal.m4 b/aclocal.m4
index ed6e8a7c0d41..6b005acf8229 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -2513,4 +2513,15 @@ AC_DEFUN([FIND_LD],[
     CHECK_LD_COPY_BUG([$1])
 ])
 
+# FIND_PYTHON
+# -----------
+# Find the version of `python` to use (for the testsuite driver)
+#
+AC_DEFUN([FIND_PYTHON],[
+    dnl Prefer the mingw64 distribution on Windows due to #17483.
+    AC_PATH_PROG([PYTHON], [python3], [], [/mingw64/bin $PATH])
+    PythonCmd="$PYTHON"
+    AC_SUBST([PythonCmd])
+])
+
 # LocalWords:  fi
diff --git a/configure.ac b/configure.ac
index 812984ff9bfc..9f0e1567dd76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -855,6 +855,9 @@ AC_PATH_PROG(XELATEX,xelatex)
 dnl ** check for makeinfo
 AC_PATH_PROG(MAKEINFO,makeinfo)
 
+dnl ** check for Python for testsuite driver
+FIND_PYTHON
+
 dnl ** check for ghc-pkg command
 FP_PROG_GHC_PKG
 
diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index 027df47db84c..c3df6203b58a 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -77,6 +77,9 @@ dnl ** Find the path to sed **
 #
 AC_PATH_PROG(SedCmd,gsed sed,sed)
 
+dnl ** check for Python for testsuite driver
+FIND_PYTHON
+
 XCODE_VERSION()
 
 dnl ** Which gcc to use?
diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in
index b531bd8c31a0..5c494cf27e3d 100644
--- a/hadrian/cfg/system.config.in
+++ b/hadrian/cfg/system.config.in
@@ -28,7 +28,7 @@ makeinfo       = @MAKEINFO@
 
 # Python 3 is required to run test driver.
 # See: https://github.com/ghc/ghc/blob/master/testsuite/mk/boilerplate.mk#L220
-python         = python3
+python         = @PythonCmd@
 
 # Information about builders:
 #============================
diff --git a/testsuite/mk/boilerplate.mk b/testsuite/mk/boilerplate.mk
index 7eb89d978573..5cdc40e68c1f 100644
--- a/testsuite/mk/boilerplate.mk
+++ b/testsuite/mk/boilerplate.mk
@@ -217,7 +217,7 @@ $(eval $(call canonicalise,TOP_ABS))
 GS = gs
 CP = cp
 RM = rm -f
-PYTHON = python3
+PYTHON ?= python3
 
 ifeq "$(CHECK_API_ANNOTATIONS)" ""
 CHECK_API_ANNOTATIONS := $(abspath $(TOP)/../inplace/bin/check-api-annotations)
-- 
GitLab