diff options
author | Steven Knight <knight@baldmt.com> | 2002-04-16 10:24:10 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-04-16 10:24:10 (GMT) |
commit | 0331e6f13472a35aedb7e61db4ab8219e464bed2 (patch) | |
tree | e192d252429dd89fcbd368fe2be9b8554f27790b /src/engine/SCons | |
parent | bbdad76b308f2bc3a38da616ab8333e469c558c6 (diff) | |
download | SCons-0331e6f13472a35aedb7e61db4ab8219e464bed2.zip SCons-0331e6f13472a35aedb7e61db4ab8219e464bed2.tar.gz SCons-0331e6f13472a35aedb7e61db4ab8219e464bed2.tar.bz2 |
Handle long command lines for the MSVC linker.
Diffstat (limited to 'src/engine/SCons')
-rw-r--r-- | src/engine/SCons/Defaults.py | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/engine/SCons/Defaults.py b/src/engine/SCons/Defaults.py index 18233cf..929dbc9 100644 --- a/src/engine/SCons/Defaults.py +++ b/src/engine/SCons/Defaults.py @@ -134,13 +134,42 @@ Object = SCons.Builder.Builder(name = 'Object', src_suffix = static_obj.src_suffixes(), src_builder = [CFile, CXXFile]) -Program = SCons.Builder.Builder(name = 'Program', - action = '$LINKCOM', - prefix = '$PROGPREFIX', - suffix = '$PROGSUFFIX', - src_suffix = '$OBJSUFFIX', - src_builder = Object, - scanner = SCons.Scanner.Prog.ProgScan()) +def win32LinkGenerator(env, target, source, **kw): + args = [] + for a in [env['LINKFLAGS'], + '/OUT:' + str(target[0]), + env['_LIBDIRFLAGS'], + env['_LIBFLAGS'], + map(lambda x: str(x), source)]: + if SCons.Util.is_List(a): + args.extend(a) + else: + args.append(a) + argstring = string.join(args, " ") + if len(argstring) <= 2048: + return env['LINK'] + " " + argstring + else: + import tempfile + tmp = tempfile.mktemp() + open(tmp, 'w').write(argstring + "\n") + return [ env['LINK'] + " @" + tmp, + "del " + tmp, ] + +kw = { + 'name' : 'Program', + 'prefix' : '$PROGPREFIX', + 'suffix' : '$PROGSUFFIX', + 'src_suffix' : '$OBJSUFFIX', + 'src_builder' : Object, + 'scanner' : SCons.Scanner.Prog.ProgScan() +} + +if sys.platform == 'win32': + kw['generator'] = win32LinkGenerator +else: + kw['action'] = '$LINKCOM' + +Program = apply(SCons.Builder.Builder, (), kw) class LibAffixGenerator: def __init__(self, static, shared): @@ -389,7 +418,11 @@ def make_win32_env_from_paths(include, lib, path): 'SHF77PPCOM' : '$SHF77 $SHF77FLAGS $CPPFLAGS $_INCFLAGS -c -o $TARGET $SOURCES', 'LINK' : 'link', 'LINKFLAGS' : '/nologo', - 'LINKCOM' : '$LINK $LINKFLAGS /OUT:$TARGET $_LIBDIRFLAGS $_LIBFLAGS $SOURCES', + # XXX - We'd like to do this as follows, but '$LINKCOM' in + # a Builder above gets expanded too soon to stick a function + # right in the environment like this. Revisit this when this + # capability has been added (cf. bug report #537058). + #'LINKCOM' : win32Link, 'SHLINK' : '$LINK', 'SHLINKFLAGS': '$LINKFLAGS /dll', 'SHLINKCOM' : '$SHLINK $SHLINKFLAGS /OUT:$TARGET $_LIBDIRFLAGS $_LIBFLAGS $SOURCES', |