diff options
Diffstat (limited to 'tools/crossmingw.py')
-rw-r--r-- | tools/crossmingw.py | 98 |
1 files changed, 46 insertions, 52 deletions
diff --git a/tools/crossmingw.py b/tools/crossmingw.py index 299bfca929d..ba6d4878593 100644 --- a/tools/crossmingw.py +++ b/tools/crossmingw.py @@ -1,7 +1,4 @@ -#coments are #JB where this file was altered by Jasen Betts -# email: 'n@tres'.join(['jase','hna.com']) - -"""tools.crossmingw +"""SCons.Tool.gcc Tool-specific initialization for MinGW (http://www.mingw.org/) @@ -12,7 +9,7 @@ selection method. """ # -# Copyright (c) 2001, 2002, 2003, 2004 The SCons Foundation +# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the @@ -34,7 +31,7 @@ selection method. # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -__revision__ = "/home/scons/scons/branch.0/branch.96/baseline/src/engine/SCons/Tool/mingw.py 0.96.91.D001 2005/09/08 09:14:36 knight" +__revision__ = "src/engine/SCons/Tool/mingw.py 4043 2009/02/23 09:06:45 scons" import os import os.path @@ -42,6 +39,7 @@ import string import SCons.Action import SCons.Builder +import SCons.Defaults import SCons.Tool import SCons.Util @@ -63,18 +61,20 @@ def find(env): return '' def shlib_generator(target, source, env, for_signature): - cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS']) + cmd = SCons.Util.CLVar(['$SHLINK']) dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX') if dll: cmd.extend(['-o', dll]) - cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS']) + cmd.extend(['$SOURCES', '$SHLINKFLAGS', '$_LIBDIRFLAGS', '$_LIBFLAGS']) implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') if implib: cmd.append('-Wl,--out-implib,'+implib.get_string(for_signature)) - def_target = env.FindIxes(target, 'WIN32DEFPREFIX', 'WIN32DEFSUFFIX') - if def_target: cmd.append('-Wl,--output-def,'+def_target.get_string(for_signature)) + def_target = env.FindIxes(target, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX') + insert_def = env.subst("$WINDOWS_INSERT_DEF") + if not insert_def in ['', '0', 0] and def_target: \ + cmd.append('-Wl,--output-def,'+def_target.get_string(for_signature)) return [cmd] @@ -89,7 +89,7 @@ def shlib_emitter(target, source, env): not env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX'): # Append an import library to the list of targets. - target.append(env.ReplaceIxes(dll, + target.append(env.ReplaceIxes(dll, 'SHLIBPREFIX', 'SHLIBSUFFIX', 'LIBPREFIX', 'LIBSUFFIX')) @@ -97,76 +97,64 @@ def shlib_emitter(target, source, env): # or a def file source. There is no option to disable def file # target emitting, because I can't figure out why someone would ever # want to turn it off. - def_source = env.FindIxes(source, 'WIN32DEFPREFIX', 'WIN32DEFSUFFIX') - def_target = env.FindIxes(target, 'WIN32DEFPREFIX', 'WIN32DEFSUFFIX') + def_source = env.FindIxes(source, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX') + def_target = env.FindIxes(target, 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX') if not def_source and not def_target: - target.append(env.ReplaceIxes(dll, + target.append(env.ReplaceIxes(dll, 'SHLIBPREFIX', 'SHLIBSUFFIX', - 'WIN32DEFPREFIX', 'WIN32DEFSUFFIX')) + 'WINDOWSDEFPREFIX', 'WINDOWSDEFSUFFIX')) return (target, source) -#JB """ I'm blindly susbstuting lines from the mingw.py -#JB file becase these lines cause python errors here. """ -#JB shlib_action = SCons.Action.Action(shlib_generator,generator=1) -shlib_action = SCons.Action.CommandGeneratorAction(shlib_generator) - -res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR') -#JB """ changed for what was in mingw.py """ -#JB res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', -#JB source_scanner=SCons.Tool.SourceFileScanner) +shlib_action = SCons.Action.Action(shlib_generator, generator=1) -res_builder = SCons.Builder.Builder(action='$RCCOM', suffix='.o', - source_scanner=SCons.Defaults.ObjSourceScan) +res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR') -#JB SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) -SCons.Defaults.ObjSourceScan.add_scanner('.rc', SCons.Defaults.CScan) -#JB """ no more changes """ +res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', + source_scanner=SCons.Tool.SourceFileScanner) +SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) def generate(env): - mingw_prefix = find(env) - - if mingw_prefix: - dir = os.path.dirname(env.WhereIs(mingw_prefix + 'gcc') or SCons.Util.WhereIs(mingw_prefix + 'gcc')) - - # The mingw bin directory must be added to the path: - path = env['ENV'].get('PATH', []) - if not path: - path = [] - if SCons.Util.is_String(path): - path = string.split(path, os.pathsep) - - env['ENV']['PATH'] = string.join([dir] + path, os.pathsep) + mingw = find(env) + if mingw: + dir = os.path.dirname(mingw) + env.PrependENVPath('PATH', dir ) + # Most of mingw is the same as gcc and friends... - gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas'] + gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas', 'm4'] for tool in gnu_tools: SCons.Tool.Tool(tool)(env) #... but a few things differ: - env['CC'] = mingw_prefix + 'gcc' + env['CC'] = mingw + 'gcc' env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') - env['CXX'] = mingw_prefix + 'g++' + env['CXX'] = mingw + 'g++' env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS') env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared') env['SHLINKCOM'] = shlib_action - env['AR'] = mingw_prefix + 'ar' - env['RANLIB'] = mingw_prefix + 'ranlib' + env['LDMODULECOM'] = shlib_action env.Append(SHLIBEMITTER = [shlib_emitter]) - env['LINK'] = mingw_prefix + 'gcc' - env['AS'] = mingw_prefix + 'as' + env['RANLIB'] = mingw + 'ranlib' + env['LINK'] = mingw + 'gcc' + env['AS'] = mingw + 'as' + env['AR'] = mingw + 'ar' + env['WIN32DEFPREFIX'] = '' env['WIN32DEFSUFFIX'] = '.def' + env['WINDOWSDEFPREFIX'] = '${WIN32DEFPREFIX}' + env['WINDOWSDEFSUFFIX'] = '${WIN32DEFSUFFIX}' + env['SHOBJSUFFIX'] = '.o' env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 - env['RC'] = mingw_prefix + 'windres' + env['RC'] = mingw + 'windres' env['RCFLAGS'] = SCons.Util.CLVar('') - env['RCINCFLAGS'] = '$( ${_concat(RCINCPREFIX, CPPPATH, RCINCSUFFIX, __env__, RDirs, TARGET)} $)' + env['RCINCFLAGS'] = '$( ${_concat(RCINCPREFIX, CPPPATH, RCINCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)' env['RCINCPREFIX'] = '--include-dir ' env['RCINCSUFFIX'] = '' - env['RCCOM'] = '$RC $RCINCFLAGS $RCINCPREFIX $SOURCE.dir $RCFLAGS -i $SOURCE -o $TARGET' + env['RCCOM'] = '$RC $_CPPDEFFLAGS $RCINCFLAGS ${RCINCPREFIX} ${SOURCE.dir} $RCFLAGS -i $SOURCE -o $TARGET' env['BUILDERS']['RES'] = res_builder # Some setting from the platform also have to be overridden: @@ -187,3 +175,9 @@ def generate(env): def exists(env): return find(env) + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=4 shiftwidth=4: |