aboutsummaryrefslogtreecommitdiffstats
path: root/community/ghc/fix-testsuite.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/ghc/fix-testsuite.patch')
-rw-r--r--community/ghc/fix-testsuite.patch129
1 files changed, 129 insertions, 0 deletions
diff --git a/community/ghc/fix-testsuite.patch b/community/ghc/fix-testsuite.patch
new file mode 100644
index 0000000000..2d14d19d9d
--- /dev/null
+++ b/community/ghc/fix-testsuite.patch
@@ -0,0 +1,129 @@
+From 43fd712b4f679fe00d6d75c8bc088357052a0365 Mon Sep 17 00:00:00 2001
+From: Ben Gamari <ben@smart-cactus.org>
+Date: Tue, 11 Jun 2019 09:54:55 -0400
+Subject: [PATCH] testsuite: A more portable solution to #9399
+
+Previously we used an awful hybrid batch script/Bourne shell script to
+allow this test to run both on Windows and Linux (fixing #9399).
+However, this breaks on some libc implementations (e.g. musl). Fix this.
+
+Fixes #16798.
+---
+ libraries/base/tests/all.T | 28 ++++++++++++++++++-------
+ libraries/base/tests/enum01.hs | 4 ----
+ libraries/base/tests/enum02.hs | 4 ----
+ libraries/base/tests/enum03.hs | 4 ----
+ libraries/base/tests/enum_processor.bat | 6 ------
+ libraries/base/tests/enum_processor.py | 2 ++
+ 6 files changed, 23 insertions(+), 25 deletions(-)
+ mode change 100644 => 100755 libraries/base/tests/enum_processor.py
+
+diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T
+index e64ca40006..33e9e196a8 100644
+--- a/libraries/base/tests/all.T
++++ b/libraries/base/tests/all.T
+@@ -94,13 +94,27 @@ test('dynamic004', omit_ways(['normal', 'threaded1', 'ghci']), compile_and_
+ test('dynamic005', normal, compile_and_run, [''])
+
+ enum_setups = [when(fast(), skip)]
+-test('enum01', [extra_files(['enum_processor.bat', 'enum_processor.py']),
+- enum_setups], compile_and_run, [''])
+-test('enum02', [extra_files(['enum_processor.bat', 'enum_processor.py']),
+- enum_setups], compile_and_run, [''])
+-test('enum03', [extra_files(['enum_processor.bat', 'enum_processor.py']),
+- enum_setups], compile_and_run, [''])
+-test('enum04', normal, compile_and_run, [''])
++def enum_test(name):
++ """
++ These tests have a funky Python preprocessor which require some headstands
++ to run on Windows.
++ """
++ if opsys('mingw32'):
++ test(name,
++ [when(opsys('mingw32'), extra_files(['enum_processor.bat'])),
++ extra_files(['enum_processor.py'])],
++ compile_and_run,
++ ['-F -pgmF ./enum_processor.bat'])
++ else:
++ test(name,
++ [extra_files(['enum_processor.py'])],
++ compile_and_run,
++ ['-F -pgmF ./enum_processor.py'])
++
++enum_test('enum01')
++enum_test('enum02')
++enum_test('enum03')
++test('enum04', normal, compile_and_run, [''])
+
+ test('exceptionsrun001', normal, compile_and_run, [''])
+ test('exceptionsrun002', normal, compile_and_run, [''])
+diff --git a/libraries/base/tests/enum01.hs b/libraries/base/tests/enum01.hs
+index 5aea7dea4d..4dfc29978c 100644
+--- a/libraries/base/tests/enum01.hs
++++ b/libraries/base/tests/enum01.hs
+@@ -1,8 +1,4 @@
+ -- !!! Testing the Prelude's Enum instances.
+-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
+--- The processor is a non-CPP-based equivalent of
+--- #define printTest(x) (do{ putStr ( " " ++ "x" ++ " = " ) ; print (x) })
+--- which is not portable to clang
+
+ module Main(main) where
+
+diff --git a/libraries/base/tests/enum02.hs b/libraries/base/tests/enum02.hs
+index 2d06f95f90..3741880f57 100644
+--- a/libraries/base/tests/enum02.hs
++++ b/libraries/base/tests/enum02.hs
+@@ -1,8 +1,4 @@
+ -- !!! Testing the Int Enum instances.
+-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
+--- The processor is a non-CPP-based equivalent of
+--- #define printTest(x) (do{ putStr ( " " ++ "x" ++ " = " ) ; print (x) })
+--- which is not portable to clang
+
+ module Main(main) where
+
+diff --git a/libraries/base/tests/enum03.hs b/libraries/base/tests/enum03.hs
+index 28d02d1c13..a701df4501 100644
+--- a/libraries/base/tests/enum03.hs
++++ b/libraries/base/tests/enum03.hs
+@@ -1,8 +1,4 @@
+ -- !!! Testing the Word Enum instances.
+-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
+--- The processor is a non-CPP-based equivalent of
+--- #define printTest(x) (do{ putStr ( " " ++ "x" ++ " = " ) ; print (x) })
+--- which is not portable to clang
+
+ module Main(main) where
+
+diff --git a/libraries/base/tests/enum_processor.bat b/libraries/base/tests/enum_processor.bat
+index 2b13a7db07..6f9eb0fd29 100755
+--- a/libraries/base/tests/enum_processor.bat
++++ b/libraries/base/tests/enum_processor.bat
+@@ -1,11 +1,5 @@
+ :;# Problem: GHC on Windows doesn't like '-pgmF ./enum_processor.py'.
+ :;# See ticket:365#comment:7 for details.
+ :;#
+-:;# Workaround: this file, which functions both as a Windows .bat script and a
+-:;# Unix shell script. Hacky, but it seems to work.
+
+-:;# Starts with a ':', to skip on Windows.
+-:; "${PYTHON}" enum_processor.py $@; exit $?
+-
+-:;# Windows only:
+ %PYTHON% enum_processor.py %*
+diff --git a/libraries/base/tests/enum_processor.py b/libraries/base/tests/enum_processor.py
+old mode 100644
+new mode 100755
+index 15243f11ff..b4ca3e9797
+--- a/libraries/base/tests/enum_processor.py
++++ b/libraries/base/tests/enum_processor.py
+@@ -1,3 +1,5 @@
++#!/usr/bin/env python3
++
+ # The rough equivalent of the traditional CPP:
+ # #define printTest(x) (do{ putStr ( " " ++ "x" ++ " = " ) ; print (x) })
+ # which is not portable to clang.
+--
+2.22.0
+