From 38655bb5d62f72519684218dc45a727886cbc9bb Mon Sep 17 00:00:00 2001 From: William Deegan Date: Mon, 19 Jun 2023 23:39:04 +0000 Subject: Clean up and simplify logic. TODO: scons -c isn't removing the .di files. Mainly these changes only work for dmd at present --- SCons/Defaults.py | 3 +++ SCons/Tool/DCommon.py | 14 ++++++++------ SCons/Tool/DCommon.xml | 5 ++--- SCons/Tool/default.xml | 5 ++--- SCons/Tool/dmd.py | 10 +++++++--- SCons/Tool/ldc.py | 9 +++++++-- test/D/di/Image/SConstruct_template | 15 ++++++++++----- 7 files changed, 39 insertions(+), 22 deletions(-) diff --git a/SCons/Defaults.py b/SCons/Defaults.py index 15041a5..a680cb4 100644 --- a/SCons/Defaults.py +++ b/SCons/Defaults.py @@ -677,6 +677,9 @@ def __lib_either_version_flag(env, version_var1, version_var2, flags_var): return None + + + ConstructionEnvironment = { 'BUILDERS': {}, 'SCANNERS': [SCons.Tool.SourceFileScanner], diff --git a/SCons/Tool/DCommon.py b/SCons/Tool/DCommon.py index b4c5d85..d0c07a3 100644 --- a/SCons/Tool/DCommon.py +++ b/SCons/Tool/DCommon.py @@ -58,12 +58,14 @@ def allAtOnceEmitter(target, source, env): return target, source def DObjectEmitter(target,source,env): - if "DINTFDIR" in env and len(env["DINTFDIR"]): - if (len(target) != 1): - raise Exception("expect only one object target") - targetBase, targetName = os.path.split(SCons.Util.to_String(target[0])) - extraTarget = os.path.join(targetBase,str(env["DINTFDIR"]),targetName[:-len(env["OBJSUFFIX"])] + env["DIFILESUFFIX"]) - target.append(extraTarget) + di_file_dir = env.get('DI_FILE_DIR', False) + # TODO: Verify sane DI_FILE_DIR? + if di_file_dir: + di_file_suffix = env.subst('$DI_FILE_SUFFIX', target=target, source=source) + file_base = os.path.basename(target[0].get_path()) + # print(f'DObjectEmitter: {di_file_dir}/*{file_base}*{di_file_suffix}') + target.append(env.fs.File(f"{file_base}{di_file_suffix}", di_file_dir)) + # print("New Target:%s"%" ".join([str(t) for t in target])) return (target,source) def DStaticObjectEmitter(target,source,env): diff --git a/SCons/Tool/DCommon.xml b/SCons/Tool/DCommon.xml index 636329c..6b4ebf1 100644 --- a/SCons/Tool/DCommon.xml +++ b/SCons/Tool/DCommon.xml @@ -1,9 +1,8 @@ None: env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' env['_DDEBUGFLAGS'] = '${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)}' - env['_DINTFDIR'] = '${_concat(DINTFDIRPREFIX, DINTFDIR, DINTFDIRSUFFIX, __env__, Dirs, TARGET, SOURCE)}' + + env['_DINTFDIR'] = "${DI_FILE_DIR and DINTFDIRPREFIX+DI_FILE_DIR+DINTFDIRSUFFIX}" + env['_DFLAGS'] = '${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)}' env['SHDC'] = '$DC' @@ -105,7 +107,6 @@ def generate(env) -> None: env['DFLAGS'] = [] env['DVERSIONS'] = [] env['DDEBUG'] = [] - env['DINTFDIR'] = [] if env['DC']: DCommon.addDPATHToEnv(env, env['DC']) @@ -119,7 +120,10 @@ def generate(env) -> None: env['DFLAGPREFIX'] = '-' env['DFLAGSUFFIX'] = '' env['DFILESUFFIX'] = '.d' - env['DIFILESUFFIX'] = '.di' + + env['DI_FILE_DIR'] = '' + env['DI_FILE_SUFFIX'] = '.di' + env['DINTFDIRPREFIX'] = '-Hd=' env['DINTFDIRSUFFIX'] = '' diff --git a/SCons/Tool/ldc.py b/SCons/Tool/ldc.py index 8d9f920..9fe4343 100644 --- a/SCons/Tool/ldc.py +++ b/SCons/Tool/ldc.py @@ -71,7 +71,9 @@ def generate(env) -> None: env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' env['_DDEBUGFLAGS'] = '${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)}' - env['_DINTFDIR'] = '${_concat(DINTFDIRPREFIX, DINTFDIR, DINTFDIRSUFFIX, __env__, Dirs, TARGET, SOURCE)}' + + env['_DINTFDIR'] = "${DI_FILE_DIR and DINTFDIRPREFIX+DI_FILE_DIR+DINTFDIRSUFFIX}" + env['_DFLAGS'] = '${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)}' env['SHDC'] = '$DC' @@ -95,7 +97,10 @@ def generate(env) -> None: env['DFLAGPREFIX'] = '-' env['DFLAGSUFFIX'] = '' env['DFILESUFFIX'] = '.d' - env['DIFILESUFFIX'] = '.di' + + env['DI_FILE_DIR'] = '' + env['DI_FILE_SUFFIX'] = '.di' + env['DINTFDIRPREFIX'] = '-Hd=' env['DINTFDIRSUFFIX'] = '' diff --git a/test/D/di/Image/SConstruct_template b/test/D/di/Image/SConstruct_template index bd33320..d734329 100644 --- a/test/D/di/Image/SConstruct_template +++ b/test/D/di/Image/SConstruct_template @@ -4,11 +4,16 @@ import os DefaultEnvironment(tools=[]) -environment = Environment( - tools=['link','ar' ,'{}'] +env = Environment( + tools=['link','ar' ,'{}'], + DPATH=['include'], + DI_FILE_DIR='include' ) -o1 = environment.Object('source/helloWorld.d',DINTFDIR = "../include")[0] -o2 = environment.Object('helloWorldMain.d',DPATH="include") -environment.Program('hw', [o2,o1]) +# o1 = env.Object('source/helloWorld.d') +# o2 = env.Object('helloWorldMain.d') +# env.Program('hw', [o1[0], o2[0]]) + +# Alternatively +env.Program('hw', ['helloWorldMain.d','source/helloWorld.d']) -- cgit v0.12