aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/d.py
diff options
context:
space:
mode:
authorGoaLitiuM <goalitium@kapsi.fi>2018-08-18 15:11:35 +0300
committerGoaLitiuM <goalitium@kapsi.fi>2018-09-27 17:49:48 +0300
commit8776dac773a2e865f6897da62accdce0f5814062 (patch)
tree129a487107604352c711192847721c9365c62901 /mesonbuild/compilers/d.py
parentdc7bb37c465822b3918c7d4d942b4b32ed66d155 (diff)
downloadmeson-8776dac773a2e865f6897da62accdce0f5814062.zip
meson-8776dac773a2e865f6897da62accdce0f5814062.tar.gz
meson-8776dac773a2e865f6897da62accdce0f5814062.tar.bz2
Add conditional debug identifiers for D compilers, and enable for debug builds
Also includes parsing the highest integer level for debug and version.
Diffstat (limited to 'mesonbuild/compilers/d.py')
-rw-r--r--mesonbuild/compilers/d.py50
1 files changed, 47 insertions, 3 deletions
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index e9ceafb..2865b1f 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -30,14 +30,17 @@ from .compilers import (
)
d_feature_args = {'gcc': {'unittest': '-funittest',
+ 'debug': '-fdebug',
'version': '-fversion',
'import_dir': '-J'
},
'llvm': {'unittest': '-unittest',
+ 'debug': '-d-debug',
'version': '-d-version',
'import_dir': '-J'
},
'dmd': {'unittest': '-unittest',
+ 'debug': '-debug',
'version': '-version',
'import_dir': '-J'
}
@@ -168,16 +171,53 @@ class DCompiler(Compiler):
if unittest:
res.append(unittest_arg)
+ if 'debug' in kwargs:
+ debug_level = -1
+ debugs = kwargs.pop('debug')
+ if not isinstance(debugs, list):
+ debugs = [debugs]
+
+ debug_arg = d_feature_args[self.id]['debug']
+ if not debug_arg:
+ raise EnvironmentException('D compiler %s does not support conditional debug identifiers.' % self.name_string())
+
+ # Parse all debug identifiers and the largest debug level identifier
+ for d in debugs:
+ if isinstance(d, int):
+ if d > debug_level:
+ debug_level = d
+ elif isinstance(d, str) and d.isdigit():
+ if int(d) > debug_level:
+ debug_level = int(d)
+ else:
+ res.append('{0}={1}'.format(debug_arg, d))
+
+ if debug_level >= 0:
+ res.append('{0}={1}'.format(debug_arg, debug_level))
+
if 'versions' in kwargs:
+ version_level = -1
versions = kwargs.pop('versions')
if not isinstance(versions, list):
versions = [versions]
version_arg = d_feature_args[self.id]['version']
if not version_arg:
- raise EnvironmentException('D compiler %s does not support the "feature versions" feature.' % self.name_string())
+ raise EnvironmentException('D compiler %s does not support conditional version identifiers.' % self.name_string())
+
+ # Parse all version identifiers and the largest version level identifier
for v in versions:
- res.append('{0}={1}'.format(version_arg, v))
+ if isinstance(v, int):
+ if v > version_level:
+ version_level = v
+ elif isinstance(v, str) and v.isdigit():
+ if int(v) > version_level:
+ version_level = int(v)
+ else:
+ res.append('{0}={1}'.format(version_arg, v))
+
+ if version_level >= 0:
+ res.append('{0}={1}'.format(version_arg, version_level))
if 'import_dirs' in kwargs:
import_dirs = kwargs.pop('import_dirs')
@@ -378,7 +418,11 @@ class DCompiler(Compiler):
return args
def get_debug_args(self, is_debug):
- return clike_debug_args[is_debug]
+ ddebug_args = []
+ if is_debug:
+ ddebug_args = [d_feature_args[self.id]['debug']]
+
+ return clike_debug_args[is_debug] + ddebug_args
def get_crt_args(self, crt_val, buildtype):
if not is_windows():