testsuite: A more portable solution to #9399
authorBen Gamari <ben@smart-cactus.org>
Tue, 11 Jun 2019 13:54:55 +0000 (09:54 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Thu, 13 Jun 2019 15:52:47 +0000 (11:52 -0400)
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
libraries/base/tests/enum01.hs
libraries/base/tests/enum02.hs
libraries/base/tests/enum03.hs
libraries/base/tests/enum_processor.bat
libraries/base/tests/enum_processor.py [changed mode: 0644->0755]

index 6218456..0fd9761 100644 (file)
@@ -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, [''])
index 5aea7de..4dfc299 100644 (file)
@@ -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
 
index 2d06f95..3741880 100644 (file)
@@ -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
 
index 28d02d1..a701df4 100644 (file)
@@ -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
 
index 2b13a7d..6f9eb0f 100755 (executable)
@@ -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 %*
old mode 100644 (file)
new mode 100755 (executable)
index 15243f1..b4ca3e9
@@ -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.