Don't use the dyn way if we're dynamic by default
[ghc.git] / testsuite / config / ghc
index ddd7ebf..ee6b493 100644 (file)
@@ -1,4 +1,3 @@
-
 import os
 import re
 
@@ -8,89 +7,185 @@ import re
 #
 config.compiler_type         = 'ghc'
 config.compiler              = 'ghc'
-config.compiler_always_flags = ['-no-recomp', '-dcore-lint', '-dcmm-lint']
+config.compiler_always_flags = ghc_compiler_always_flags.split()
 
-config.hp2ps                = 'hp2ps'
-config.gs                   = 'gs'
+config.hp2ps                 = 'hp2ps'
+config.hpc                   = 'hpc'
+config.gs                    = 'gs'
 config.confdir               = '.'
 
 # By default, we test the 'normal', 'opt' and 'hpc' ways.
 # 'optasm' is added by mk/test.mk if the compiler has a native code gen,
 # 'prof'   is added by mk/test.mk if the profiling way is enabled.
-config.compile_ways         = ['normal', 'optc', 'hpc']
-config.run_ways                     = ['normal', 'optc', 'hpc']
+config.compile_ways       = ['normal', 'hpc']
+config.run_ways           = ['normal', 'hpc']
 
 # ways that are not enabled by default, but can always be invoked explicitly
-config.other_ways            = ['extcore','optextcore',
-                                'prof_hc_hb','prof_hb',
-                                'prof_hd','prof_hy','prof_hr']
+config.other_ways         = ['extcore','optextcore',
+                             'prof',
+                             'prof_hc_hb','prof_hb',
+                             'prof_hd','prof_hy','prof_hr',
+                             'threaded1_ls', 'threaded2_hT',
+                             'llvm', 'debugllvm',
+                             'profllvm', 'profoptllvm', 'profthreadedllvm',
+                             'threaded1llvm', 'threaded2llvm',
+                             'dynllvm']
 
 if (ghc_with_native_codegen == 1):
-       config.compile_ways.append('optasm')
-       config.run_ways.append('optasm')
+    config.compile_ways.append('optasm')
+    config.run_ways.append('optasm')
 
 if (ghc_with_profiling == 1):
-       config.have_profiling = True
-       config.compile_ways.append('profc')
-       config.run_ways.append('profc')
-       if (ghc_with_native_codegen == 1):
-               config.compile_ways.append('profasm')
-               config.run_ways.append('profasm')
+    config.have_profiling = True
+    config.compile_ways.append('profasm')
+    config.run_ways.append('profasm')
 
 if (ghc_with_interpreter == 1):
-       config.run_ways.append('ghci')
+    config.have_interp = True
+    config.run_ways.append('ghci')
 
 config.unregisterised = (ghc_unregisterised == 1)
 
 if (ghc_with_threaded_rts == 1):
-       config.run_ways.append('threaded1')
-       if (ghc_with_smp == 1):
-               config.run_ways.append('threaded2')
+    config.run_ways.append('threaded1')
+    if (ghc_with_smp == 1):
+        config.have_smp = True
+        config.run_ways.append('threaded2')
+
+if (ghc_dynamic_by_default == 1):
+    config.run_ways.append('static')
+else:
+    if (ghc_with_dynamic_rts == 1):
+        config.have_shared_libs = True
+        config.run_ways.append('dyn')
+
+if (ghc_with_profiling == 1 and ghc_with_threaded_rts == 1):
+    config.run_ways.append('profthreaded')
+
+if (ghc_with_llvm == 1):
+    config.compile_ways.append('optllvm')
+    config.run_ways.append('optllvm')
+
+config.in_tree_compiler = in_tree_compiler
+config.clean_only       = clean_only
 
 config.way_flags = {
-       'normal'     : [],
-       'optc'       : ['-O -fvia-C'],
-       'optasm'     : ['-O -fasm'],
-       'profc'      : ['-O -prof -auto-all -fvia-C'],
-       'profasm'    : ['-O -prof -auto-all -fasm'],
-       'ghci'       : ['--interactive', '-v0', '-ignore-dot-ghci'],
-       'extcore'    : ['-fext-core'],
-       'optextcore' : ['-O -fext-core'],
-       'threaded1'  : ['-threaded', '-debug'],
-       'threaded2'  : ['-O', '-threaded'],
-       'hpc'        : ['-O', '-fhpc' ],
-        'prof_hc_hb' : ['-O -prof -auto-all'],
-        'prof_hb'    : ['-O -prof -auto-all'],
-        'prof_hd'    : ['-O -prof -auto-all'],
-        'prof_hy'    : ['-O -prof -auto-all'],
-        'prof_hr'    : ['-O -prof -auto-all']
-       }
+    'normal'       : [],
+    'g1'           : [],
+    'optasm'       : ['-O', '-fasm'],
+    'llvm'         : ['-fllvm'],
+    'optllvm'      : ['-O', '-fllvm'],
+    'debugllvm'    : ['-fllvm', '-keep-llvm-files'],
+    'prof'         : ['-prof', '-auto-all', '-fasm'],
+    'profasm'      : ['-O', '-prof', '-auto-all'],
+    'profthreaded' : ['-O', '-prof', '-auto-all', '-threaded'],
+    'ghci'         : ['--interactive', '-v0', '-ignore-dot-ghci', '+RTS', '-I0.1', '-RTS'],
+    'extcore'      : ['-fext-core'],
+    'optextcore'   : ['-O', '-fext-core'],
+    'threaded1'    : ['-threaded', '-debug'],
+    'threaded1_ls' : ['-threaded', '-debug'],
+    'threaded2'    : ['-O', '-threaded', '-eventlog'],
+    'threaded2_hT' : ['-O', '-threaded'],
+    'hpc'          : ['-O', '-fhpc' ],
+    'prof_hc_hb'   : ['-O', '-prof', '-auto-all'],
+    'prof_hb'      : ['-O', '-prof', '-auto-all'],
+    'prof_hd'      : ['-O', '-prof', '-auto-all'],
+    'prof_hy'      : ['-O', '-prof', '-auto-all'],
+    'prof_hr'      : ['-O', '-prof', '-auto-all'],
+    'dyn'          : ['-O', '-dynamic'],
+    'static'       : ['-O', '-static'],
+    # llvm variants...
+    'profllvm'         : ['-prof', '-auto-all', '-fllvm'],
+    'profoptllvm'      : ['-O', '-prof', '-auto-all', '-fllvm'],
+    'profthreadedllvm' : ['-O', '-prof', '-auto-all', '-threaded', '-fllvm'],
+    'threaded1llvm'    : ['-threaded', '-debug', '-fllvm'],
+    'threaded2llvm'    : ['-O', '-threaded', '-eventlog', '-fllvm'],
+    'dynllvm'          : ['-O', '-dynamic', '-fllvm']
+   }
 
 config.way_rts_flags = { 
-       'normal'     : [],
-       'optc'       : [],
-       'optasm'     : [],
-       'profc'      : ['-p'],
-       'profasm'    : ['-hc'], # test heap profiling too
-       'ghci'       : [],
-       'extcore'    : [],
-       'optextcore' : [],
-       'threaded1'  : [],
-       'threaded2'  : ['-N2'],
-       'hpc'        : [],
-        'prof_hc_hb' : ['-hc -hbvoid'],
-        'prof_hb'    : ['-hb'],
-        'prof_hd'    : ['-hd'],
-        'prof_hy'    : ['-hy'],
-        'prof_hr'    : ['-hr']
-       }
+    'normal'       : [],
+    'g1'           : ['-G1'],
+    'optasm'       : [],
+    'llvm'         : [],
+    'optllvm'      : [],
+    'debugllvm'    : [],
+    'prof'         : ['-p'],
+    'profasm'      : ['-hc', '-p'], # test heap profiling too
+    'profthreaded' : ['-p'],
+    'ghci'         : [],
+    'extcore'      : [],
+    'optextcore'   : [],
+    'threaded1'    : [],
+    'threaded1_ls' : ['-ls'],
+    'threaded2'    : ['-N2 -ls'],
+    'threaded2_hT' : ['-N2', '-hT'],
+    'hpc'          : [],
+    'prof_hc_hb'   : ['-hc -hbvoid'],
+    'prof_hb'      : ['-hb'],
+    'prof_hd'      : ['-hd'],
+    'prof_hy'      : ['-hy'],
+    'prof_hr'      : ['-hr'],
+    'dyn'          : [],
+    'static'       : [],
+    # llvm variants...
+    'profllvm'         : ['-p'],
+    'profoptllvm'      : ['-hc', '-p'],
+    'profthreadedllvm' : ['-p'],
+    'threaded1llvm'    : [],
+    'threaded2llvm'    : ['-N2 -ls'],
+    'dynllvm'          : []
+   }
+
+# Useful classes of ways that can be used with only_ways() and
+# expect_broken_for().
+
+prof_ways = map (lambda x: x[0], \
+                 filter(lambda x: '-prof' in x[1], \
+                        config.way_flags.items()))
+
+threaded_ways = map (lambda x: x[0], \
+                 filter(lambda x: '-threaded' in x[1] or 'ghci' == x[0], \
+                        config.way_flags.items()))
+
+opt_ways = map (lambda x: x[0], \
+                 filter(lambda x: '-O' in x[1], \
+                        config.way_flags.items()))
 
 def get_compiler_info():
-    h = os.popen(config.compiler + ' --numeric-version', 'r')
-    v = h.read()
+# This should really not go through the shell
+    h = os.popen('"' + config.compiler + '" --info', 'r')
+    s = h.read()
+    s = re.sub('[\r\n]', '', s)
+    h.close()
+    compilerInfoDict = dict(eval(s))
+    h = os.popen('"' + config.compiler + '" +RTS --info', 'r')
+    s = h.read()
+    s = re.sub('[\r\n]', '', s)
     h.close()
-    v = re.sub('[\r\n]', '', v)
-    v = v.split('-')
+    rtsInfoDict = dict(eval(s))
+
+    # We use a '/'-separated path for libdir, even on Windows
+    config.libdir = re.sub('\\\\','/',compilerInfoDict['LibDir'])
+
+    v = compilerInfoDict["Project version"].split('-')
     config.compiler_version = v[0]
+    config.compiler_maj_version = re.sub('^([0-9]+\.[0-9]+).*',r'\1', v[0])
     config.compiler_tags = v[1:]
 
+    # -fno-ghci-history was added in 7.3
+    if version_ge(config.compiler_version, '7.3'):
+       config.compiler_always_flags = \
+          config.compiler_always_flags + ['-fno-ghci-history']
+
+    if re.match(".*_p(_.*|$)", rtsInfoDict["RTS way"]):
+        config.compiler_profiled = True
+        config.run_ways = filter(lambda x: x != 'ghci', config.run_ways)
+    else:
+        config.compiler_profiled = False
+
+    try:
+        config.package_conf_cache_file = compilerInfoDict["Global Package DB"] + '/package.cache'
+    except:
+        config.package_conf_cache_file = ''
+