test('driver011',
     extra_clean(['A011.hi', 'A011.o']),
     run_command,
     ['$MAKE -s --no-print-directory test011'])

test('driver012',
     extra_clean(['A012.hi', 'A012.ooo']),
     run_command,
     ['$MAKE -s --no-print-directory test012'])

test('driver013',
     extra_clean(['A013.xhi', 'A013.o']),
     run_command,
     ['$MAKE -s --no-print-directory test013'])

test('driver014',
     extra_clean(['A014.hi', 'obj014/A014.o', 'obj014']),
     run_command,
     ['$MAKE -s --no-print-directory test014'])

test('driver015',
     extra_clean(['A015.o', 'hi015/A015.hi', 'hi015']),
     run_command,
     ['$MAKE -s --no-print-directory test015'])

test('driver016',
     extra_clean(['F016.hi', 'F016.o', 'F016_stub.h']),
     run_command,
     ['$MAKE -s --no-print-directory test016'])

test('driver017',
     extra_clean(['F017.hi', 'F017.o',
                  'stub017/TestStub017_stub.h', 'stub017/']),
     run_command,
     ['$MAKE -s --no-print-directory test017'])

test('driver018',
     extra_clean(['F018.hi', 'F018_stub.h',
                  'obj018/TestStub018.o', 'obj018/TestStub018_stub.o',
                  'obj018']),
     run_command,
     ['$MAKE -s --no-print-directory test018'])

test('driver018a',
     extra_clean(['F018a.hi', 'F018a_stub.h',
                  'F018a.obj.018']),
     run_command,
     ['$MAKE -s --no-print-directory test018a'])

test('driver019',
     extra_clean(['out019/TestStub019.hi',
                  'out019/TestStub019.o',
                  'out019/TestStub019_stub.h',
                  'out019/TestStub019_stub.o']),
     run_command,
     ['$MAKE -s --no-print-directory test019'])

test('driver021',
     extra_clean(['B021/C.hi', 'B021/C.o']),
     run_command,
     ['$MAKE -s --no-print-directory test021'])

test('driver022',
     extra_clean(['B022/C.hi', 'B022/C.ooo']),
     run_command,
     ['$MAKE -s --no-print-directory test022'])

test('driver023',
     extra_clean(['B023/C.xhi', 'B023/C.o']),
     run_command,
     ['$MAKE -s --no-print-directory test023'])

test('driver024',
     extra_clean(['B024/C.hi', 'obj024/B024/C.o', 'obj024/B024', 'obj024']),
     run_command,
     ['$MAKE -s --no-print-directory test024'])

test('driver024a',
     extra_clean(['obj024a/B024a/stub.o', 'obj024a/B024a', 'obj024a',
                  'B024a/stub.c', 'B024a/']),
     run_command,
     ['$MAKE -s --no-print-directory test024a'])

test('driver025',
     extra_clean(['B025/C.hi', 'B025/C.o',
                  'hi025/B025/C.hi', 'hi025/B025', 'hi025']),
     run_command,
     ['$MAKE -s --no-print-directory test025'])

test('driver026',
     extra_clean(['d026/P/Q.hi', 'd026/P/Q.o']),
     run_command,
     ['$MAKE -s --no-print-directory test026'])

test('driver027',
     extra_clean(['B027/F.hi', 'B027/F.o',
                  'B027/F_stub.h', 'B027/F_stub.o']),
     run_command,
     ['$MAKE -s --no-print-directory test027'])

test('driver028',
     extra_clean(['B028/F.hi', 'B028/F.o',
                  'stub028/B028/F_stub.h', 'stub028/B028/', 'stub028/']),
     run_command,
     ['$MAKE -s --no-print-directory test028'])

test('driver031',
     extra_clean(['A031.hi', 'A031.o']),
     run_command,
     ['$MAKE -s --no-print-directory test031'])

test('driver032',
     extra_clean(['A032.hi', 'obj032/A032.o', 'obj032/']),
     run_command,
     ['$MAKE -s --no-print-directory test032'])

test('driver033',
     extra_clean(['A033.hi', 'A033.o', 'hi033/A033.hi', 'hi033']),
     run_command,
     ['$MAKE -s --no-print-directory test033'])

test('driver034',
     extra_clean(['F034.hi', 'F034.o', 'F034_stub.h']),
     run_command,
     ['$MAKE -s --no-print-directory test034'])

test('driver035',
     extra_clean(['F035.hi', 'F035.o',
                  'stub035/TestStub035_stub.h', 'stub035/']),
     run_command,
     ['$MAKE -s --no-print-directory test035'])

test('driver041',
     extra_clean(['B041/C.hi', 'B041/C.o']),
     run_command,
     ['$MAKE -s --no-print-directory test041'])

test('driver042',
     extra_clean(['B042/C.hi', 'obj042/B042/C.o', 'obj042/B042/', 'obj042/']),
     run_command,
     ['$MAKE -s --no-print-directory test042'])

test('driver042stub',
     extra_clean(['B042stub/C.hi', 'obj042stub/B042stub/C.o', 'obj042stub/B042stub/', 'obj042stub/']),
     run_command,
     ['$MAKE -s --no-print-directory test042stub'])

test('driver043',
     extra_clean(['B043/C.hi', 'B043/C.o',
                  'hi043/B043/C.hi', 'hi043/B043', 'hi043']),
     run_command,
     ['$MAKE -s --no-print-directory test043'])

test('driver044',
     extra_clean(['B044/F.hi', 'B044/F.o',
                  'B044/F_stub.h', 'B044/F_stub.o']),
     run_command,
     ['$MAKE -s --no-print-directory test044'])

test('driver045',
     extra_clean(['B045/F.hi', 'B045/F.o',
                  'stub045/B045/F_stub.h', 'stub045/B045/', 'stub045/']),
     run_command,
     ['$MAKE -s --no-print-directory test045'])

test('driver051',
     extra_clean(['d051_1/P/Q.hi', 'd051_1/P/Q.o',
                  'd051_2/R/S.hi', 'd051_2/R/S.o']),
     run_command,
     ['$MAKE -s --no-print-directory test051'])

test('driver052',
     extra_clean(['d052_1/P/Q.hi', 'd052_1/P/Q.o',
                  'd052_2/R/S.hi', 'd052_2/R/S.o',
                  'obj052/P/Q.o', 'obj052/P',
                  'obj052/R/S.o', 'obj052/R',
                  'obj052']),
     run_command,
     ['$MAKE -s --no-print-directory test052'])

test('driver053',
     extra_clean(['d053_1/P/Q.hi', 'd053_1/P/Q.o',
                  'd053_2/R/S.hi', 'd053_2/R/S.o',
                  'hi053/P/Q.hi', 'hi053/P',
                  'hi053/R/S.hi', 'hi053/R',
                  'hi053']),
     run_command,
     ['$MAKE -s --no-print-directory test053'])

test('driver061a',
     extra_clean(['A061a.hi', 'A061a.o', 'A061a.s']),
     run_command,
     ['$MAKE -s --no-print-directory test061a'])

test('driver061b',
     extra_clean(['A061b.hi', 'A061b.o', 'A061b.s']),
     run_command,
     ['$MAKE -s --no-print-directory test061b'])


test('driver062a',
     extra_clean(['Hello062a.hs', 'Hello062a.hi', 'Hello062a.o',
                  'hello062a', 'hello062a.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test062a'])
test('driver062b',
     extra_clean(['Hello062b.hs', 'Hello062b.hi', 'Hello062b.o',
                  'hello062b', 'hello062b.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test062b'])
test('driver062c',
     extra_clean(['Hello062c.hs', 'Hello062c.hi', 'Hello062c.o',
                  'hello062c', 'hello062c.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test062c'])
test('driver062d',
     extra_clean(['B062d/Hello062d.hi', 'B062d/Hello062d.o',
                  'B062d/Hello062d.hs', 'B062d/',
                  'hello062d', 'hello062d.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test062d'])
test('driver062e',
     extra_clean(['B062e/Hello062e.hi', 'B062e/Hello062e.o',
                  'B062e/Hello062e.hs', 'B062e/',
                  'hello062e', 'hello062e.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test062e'])

test('driver063',
     extra_clean(['A063.hi', 'A063.o', 'A063.hc',
                  'D063.hi', 'D063.o', 'D063.hc']),
     run_command,
     ['$MAKE -s --no-print-directory test063'])

test('driver064',
     extra_clean(['A064.hi', 'A064.o', 'A064.hspp']),
     run_command,
     ['$MAKE -s --no-print-directory test064'])

test('driver065',
     extra_clean(['A065.hi', 'A065.o', 'A065.hspp']),
     run_command,
     ['$MAKE -s --no-print-directory test065'])

test('driver066',
     extra_clean(['A066.hi', 'A066.o', 'A066.tmp']),
     run_command,
     ['$MAKE -s --no-print-directory test066'])

test('driver067',
     extra_clean(['A067.hi', 'A067.o', 'A067.tmp']),
     run_command,
     ['$MAKE -s --no-print-directory test067'])

test('driver070',
     extra_clean(['A070.hi', 'A070.o', 'A070.s']),
     run_command,
     ['$MAKE -s --no-print-directory test070'])

test('driver071',
     extra_clean(['A071.hi', 'A071.o', 'A071.tmp']),
     run_command,
     ['$MAKE -s --no-print-directory test071'])

test('driver081a',
     extra_clean(['Test_081a.hs', 'Test_081a.hi', 'Test_081a.o',
                  'Test_081a', 'Test_081a.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test081a'])

test('driver081b',
     extra_clean(['Test.081b.hs', 'Test.081b.hi', 'Test.081b.o',
                  'Test.081b', 'Test.081b.exe']),
     run_command,
     ['$MAKE -s --no-print-directory test081b'])

test('driver100',
     extra_clean(['overlap/List.hi', 'overlap/List.o',
                  'overlap/Overlap.hi', 'overlap/Overlap.o']),
     run_command,
     ['$MAKE -s --no-print-directory test100'])

test('driver200',
     extra_clean(['depend200', 'depend200.bak']),
     run_command,
     ['$MAKE -s --no-print-directory test200'])

test('T2566',
     normalise_fun(normalise_errmsg),
     run_command,
     ['$MAKE -s --no-print-directory T2566'])

test('pragma001', normal, compile, [''])
test('pragma002', normal, compile, [''])

test('T2499', normal, compile_fail, [''])

test('mode001', normal, run_command,
     ['$MAKE -s --no-print-directory mode001'])

if config.os == 'mingw32':
     only_windows = normal
else:
     only_windows = skip

test('shared001',
     [only_windows,
      extra_clean(['Shared001.hi', 'Shared001.o', 'HSdll.dll.a', 'HSdll.dll', 'Shared001_stub.h', 'Shared001_stub.o'])],
     run_command,
     ['$MAKE -s --no-print-directory shared001'])

if config.os == 'darwin':
  only_darwin = normal
else:
  only_darwin = skip

test('static001',
     [only_darwin, expect_broken(8127),
      extra_clean(['Static001.hi', 'Static001.o', 'liba.a', 'Static001_stub.h', 'Static001_stub.o'])],
     run_command,
     ['$MAKE -s --no-print-directory static001'])

test('dynHelloWorld',
     only_ways(['dyn']),
     compile_and_run,
     [''])

test('T5313',
     extra_run_opts('"' + config.libdir + '"'),
     compile_and_run,
     ['-package ghc'])

test('T2464', normal, compile, [''])
test('T3674',
     [ignore_output,
      extra_clean(['T3674_pre.hi', 'T3674_pre.o', 'T3674_pre', 'T3674_pre.exe'])],
     run_command,
     ['$MAKE -s --no-print-directory T3674'])

test('rtsopts001',
     extra_clean(['rtsOpts.hi', 'rtsOpts.o', 'rtsOpts', 'rtsOpts.exe']),
     run_command,
     ['$MAKE -s --no-print-directory rtsopts001'])
test('rtsopts002', normal, run_command,
                ['$MAKE -s --no-print-directory rtsopts002'])

test('withRtsOpts', [ extra_clean(['withRtsOpts', 'withRtsOpts.exe',
                                   'withRtsOpts.hi', 'withRtsOpts.o',
                                   'withRtsOpts.out']) ],
                    run_command,
                    ['$MAKE -s --no-print-directory withRtsOpts'])
test('T3389', normal, compile_and_run, [''])
test('T3364', normalise_fun(normalise_errmsg), run_command,
     ['$MAKE -s --no-print-directory T3364'])

# T4437: A test to ensure that Cabal's language extension list remains
# consistent with those known by GHC.
#
# See Note [Adding a language extension] in DynFlags.hs for details.
test('T4437', only_ways(['normal']), compile_and_run, ['-package ghc'])

test('werror', normal, compile_fail, [''])

test('T706',
     [req_interp,
      extra_clean(['T706.hs'])],
     run_command,
     ['$MAKE -s --no-print-directory T706'])
test('spacesInArgs',
     extra_run_opts('"a   b"   "c   d"'),
     compile_and_run,
     [''])

test('T5584',
     extra_clean(['T5584_in/A.hi-boot', 'T5584_out/T5584/A.o-boot']),
     run_command, ['$MAKE -s --no-print-directory T5584'])
test('T5198', extra_clean(['T5198dump/T5198.dump-simpl', 'T5198dump']),
     run_command,
     ['$MAKE -s --no-print-directory T5198'])
test('T7060',
     extra_clean(['T7060dump/T7060.dump-rules',
                  'T7060dump/T7060.dump-rule-firings',
                  'T7060dump/T7060.dump-rule-rewrites',
                  'T7060dump']),
     run_command,
     ['$MAKE -s --no-print-directory T7060'])
test('T7130', normal, compile_fail, ['-fflul-laziness'])
test('T7563', when(unregisterised(), skip), run_command,
     ['$MAKE -s --no-print-directory T7563'])
test('T6037',
     # The testsuite doesn't know how to set a non-Unicode locale on Windows or Mac OS X
     [when(opsys('mingw32'), expect_fail), when(opsys('darwin'), expect_fail)],
     run_command,
     ['$MAKE -s --no-print-directory T6037'])
test('T2507',
     # The testsuite doesn't know how to set a non-Unicode locale on Windows or Mac OS X
     [when(opsys('mingw32'), expect_fail), when(opsys('darwin'), expect_fail)],
     run_command,
     ['$MAKE -s --no-print-directory T2507'])
test('T8959a',
     # The testsuite doesn't know how to set a non-Unicode locale on Windows or Mac OS X
     [when(opsys('mingw32'), expect_fail), when(opsys('darwin'), expect_fail)],
     run_command,
     ['$MAKE -s --no-print-directory T8959a'])

test('T703', normal, run_command, ['$MAKE -s --no-print-directory T703'])
test('T2182', normal, run_command, ['$MAKE -s --no-print-directory T2182'])
test('T8101', expect_broken(10600), compile, ['-Wall -fno-code'])
test('T8101b', expect_broken(10600), multimod_compile,
     ['T8101b', '-Wall -fno-code'])

def build_T9050(name, way):
     return simple_build(name + '.cmm', way, '-outputdir=. ', 0, '', 0, 0, 0)
test('T9050', normal, build_T9050, [])

test('write_interface_oneshot',
     extra_clean(['write_interface_oneshot_hidir/*']),
     run_command,
     ['$MAKE -s --no-print-directory write_interface_oneshot'])

test('write_interface_make',
     extra_clean(['write_interface_make_hidir/*']),
     run_command,
     ['$MAKE -s --no-print-directory write_interface_make'])

test('T9776', normal, compile_fail, ['-frule-check'])

test('T9938',
     [ extra_clean(['T9938.hi', 'T9938.o', 'T9938']), normal ],
     run_command,
     ['$MAKE -s --no-print-directory T9938'])

test('T9938B',
     [ extra_clean(['T9938B.hi', 'T9938B.o', 'T9938B']) ],
     run_command,
     ['$MAKE -s --no-print-directory T9938B'])

test('T9963', exit_code(1), run_command,
     ['{compiler} --interactive -ignore-dot-ghci --print-libdir'])

test('T10219', normal, run_command,
     # `-x hspp` in make mode should work.
     # Note: need to specify `-x hspp` before the filename.
     ['{compiler} --make -x hspp T10219.hspp -fno-code -v0'])

test('T10220', normal, run_command,
     # Preprocessed T10220.hspp imports T10220B. Should work in --make mode.
     ['{compiler} --make T10220.hspp -fno-code -v0'])

test('T10182',
     extra_clean(['T10182.o', 'T10182a.o', 'T10182.o-boot', 'T10182.hi', 'T10182a.hi', 'T10182.hi-boot']),
     run_command,
     ['$MAKE -s --no-print-directory T10182'])

test('T365',
     [extra_clean(['test_preprocessor.txt']),
      pre_cmd('touch test_preprocessor.txt'),
      unless(opsys('mingw32'), skip)],
      compile_fail,
      [''])

test('T9360a', normal, run_command, ['{compiler} --interactive -e "" -ignore-dot-ghci'])
test('T9360b', normal, run_command, ['{compiler} -e "" --interactive -ignore-dot-ghci'])

test('T10970', normal, compile_and_run, [''])
test('T4931', normal, compile_and_run, [''])
test('T11182', normal, compile_and_run, [''])
test('T11381', normal, compile_fail, [''])
test('T11429a', normal, compile, ['-Wunrecognised-warning-flags -Wfoobar'])
test('T11429b', normal, compile, ['-Wno-unrecognised-warning-flags -Wfoobar'])
test('T11429c', normal, compile_fail, ['-Wunrecognised-warning-flags -Werror -Wfoobar'])
test('T11763', normal, compile_and_run, ['-fno-version-macros'])

test('T10320',
     [ ignore_output
     , extra_clean(['T10320', 'T10320.o', 'T10320.hi'])],
     run_command,
     ['$MAKE -s --no-print-directory T10320'])
