diff options
| author | Steven Knight <knight@baldmt.com> | 2003-05-06 05:58:31 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2003-05-06 05:58:31 (GMT) |
| commit | aaf2cbb74e00fdc89da432d18e9fe40bb7de3b9d (patch) | |
| tree | c399116a6a33ae9ad69d04dd43c2f272737c2074 /src/engine/SCons/Tool | |
| parent | e591784eb29edfaf2760024f57ee1462f1bae1f3 (diff) | |
| download | SCons-aaf2cbb74e00fdc89da432d18e9fe40bb7de3b9d.zip SCons-aaf2cbb74e00fdc89da432d18e9fe40bb7de3b9d.tar.gz SCons-aaf2cbb74e00fdc89da432d18e9fe40bb7de3b9d.tar.bz2 | |
Refactor to use real Nodes for command-line attributes and eliminate PathList. (Charles Crain)
Diffstat (limited to 'src/engine/SCons/Tool')
| -rw-r--r-- | src/engine/SCons/Tool/Perforce.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/jar.py | 8 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/javac.py | 82 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/linkloc.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/mingw.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/mslink.py | 59 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/zip.py | 2 |
7 files changed, 77 insertions, 84 deletions
diff --git a/src/engine/SCons/Tool/Perforce.py b/src/engine/SCons/Tool/Perforce.py index 3c574b4..3526952 100644 --- a/src/engine/SCons/Tool/Perforce.py +++ b/src/engine/SCons/Tool/Perforce.py @@ -70,7 +70,7 @@ def generate(env): # calling getcwd() for itself, which is odd. If no PWD variable # is present, p4 WILL call getcwd, but this seems to cause problems # with good ol' Win32's tilde-mangling for long file names. - environ['PWD'] = SCons.Node.FS.default_fs.Dir('#').abspath + environ['PWD'] = SCons.Node.FS.default_fs.Dir('#').get_abspath() for var in _import_env: v = os.environ.get(var) diff --git a/src/engine/SCons/Tool/jar.py b/src/engine/SCons/Tool/jar.py index b1164b5..fa21f3c 100644 --- a/src/engine/SCons/Tool/jar.py +++ b/src/engine/SCons/Tool/jar.py @@ -38,15 +38,15 @@ import os.path import SCons.Builder +JarBuilder = SCons.Builder.Builder(action = '$JARCOM', + source_factory = SCons.Node.FS.default_fs.Entry, + suffix = '$JARSUFFIX') + def generate(env): """Add Builders and construction variables for jar to an Environment.""" try: bld = env['BUILDERS']['Jar'] except KeyError: - JarBuilder = SCons.Builder.Builder(action = '$JARCOM', - source_factory = SCons.Node.FS.default_fs.Entry, - suffix = '$JARSUFFIX') - env['BUILDERS']['Jar'] = JarBuilder env['JAR'] = 'jar' diff --git a/src/engine/SCons/Tool/javac.py b/src/engine/SCons/Tool/javac.py index 331e183..8606c02 100644 --- a/src/engine/SCons/Tool/javac.py +++ b/src/engine/SCons/Tool/javac.py @@ -225,50 +225,50 @@ else: """ return os.path.split(file) +def emit_java_files(target, source, env): + """Create and return lists of source java files + and their corresponding target class files. + """ + env['_JAVACLASSDIR'] = target[0] + env['_JAVASRCDIR'] = source[0].rdir() + java_suffix = env.get('JAVASUFFIX', '.java') + class_suffix = env.get('JAVACLASSSUFFIX', '.class') + + slist = [] + js = _my_normcase(java_suffix) + def visit(arg, dirname, names, js=js, dirnode=source[0].rdir()): + java_files = filter(lambda n, js=js: + _my_normcase(n[-len(js):]) == js, + names) + mydir = dirnode.Dir(dirname) + java_paths = map(lambda f, d=mydir: d.File(f), java_files) + arg.extend(java_paths) + os.path.walk(source[0].rdir().get_abspath(), visit, slist) + + tlist = [] + for file in slist: + pkg_dir, classes = parse_java(file.get_abspath()) + if pkg_dir: + for c in classes: + tlist.append(target[0].Dir(pkg_dir).File(c+class_suffix)) + elif classes: + for c in classes: + tlist.append(target[0].File(c+class_suffix)) + else: + # This is an odd end case: no package and no classes. + # Just do our best based on the source file name. + tlist.append(target[0].File(str(file)[:-len(java_suffix)] + class_suffix)) + + return tlist, slist + +JavaBuilder = SCons.Builder.Builder(action = '$JAVACCOM', + emitter = emit_java_files, + target_factory = SCons.Node.FS.default_fs.Dir, + source_factory = SCons.Node.FS.default_fs.Dir) + def generate(env): """Add Builders and construction variables for javac to an Environment.""" - def emit_java_files(target, source, env): - """Create and return lists of source java files - and their corresponding target class files. - """ - env['_JAVACLASSDIR'] = target[0] - env['_JAVASRCDIR'] = source[0].rdir() - java_suffix = env.get('JAVASUFFIX', '.java') - class_suffix = env.get('JAVACLASSSUFFIX', '.class') - - slist = [] - js = _my_normcase(java_suffix) - def visit(arg, dirname, names, js=js, dirnode=source[0].rdir()): - java_files = filter(lambda n, js=js: - _my_normcase(n[-len(js):]) == js, - names) - mydir = dirnode.Dir(dirname) - java_paths = map(lambda f, d=mydir: d.File(f), java_files) - arg.extend(java_paths) - os.path.walk(source[0].rdir().abspath, visit, slist) - - tlist = [] - for file in slist: - pkg_dir, classes = parse_java(file.abspath) - if pkg_dir: - for c in classes: - tlist.append(target[0].Dir(pkg_dir).File(c+class_suffix)) - elif classes: - for c in classes: - tlist.append(target[0].File(c+class_suffix)) - else: - # This is an odd end case: no package and no classes. - # Just do our best based on the source file name. - tlist.append(target[0].File(str(file)[:-len(java_suffix)] + class_suffix)) - - return tlist, slist - - JavaBuilder = SCons.Builder.Builder(action = '$JAVACCOM', - emitter = emit_java_files, - target_factory = SCons.Node.FS.default_fs.Dir, - source_factory = SCons.Node.FS.default_fs.Dir) - env['BUILDERS']['Java'] = JavaBuilder env['JAVAC'] = 'javac' diff --git a/src/engine/SCons/Tool/linkloc.py b/src/engine/SCons/Tool/linkloc.py index fc315d9..3aafe6c 100644 --- a/src/engine/SCons/Tool/linkloc.py +++ b/src/engine/SCons/Tool/linkloc.py @@ -65,8 +65,8 @@ class LinklocGenerator: def __init__(self, cmdline): self.cmdline = cmdline - def __call__(self, env, target, source): - if target is None: + def __call__(self, env, target, source, for_signature): + if for_signature: # Expand the contents of any linker command files recursively subs = 1 strsub = env.subst(self.cmdline) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index c89bc21..cd18bb5 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -55,10 +55,10 @@ def shlib_generator(target, source, env, for_signature): cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS']) implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') - if implib: cmd.append('-Wl,--out-implib,'+str(implib)) + 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,'+str(def_target)) + if def_target: cmd.append('-Wl,--output-def,'+def_target.get_string(for_signature)) return [cmd] diff --git a/src/engine/SCons/Tool/mslink.py b/src/engine/SCons/Tool/mslink.py index 4bf8f0e..8aa6f09 100644 --- a/src/engine/SCons/Tool/mslink.py +++ b/src/engine/SCons/Tool/mslink.py @@ -44,41 +44,34 @@ import msvc from SCons.Tool.msvc import get_msdev_paths -def pdbGenerator(env, target, source): +def pdbGenerator(env, target, source, for_signature): if target and env.has_key('PDB') and env['PDB']: - return ['/PDB:%s'%target[0].File(env['PDB']), '/DEBUG'] - -def win32ShlinkTargets(target, source, env): - if target: - listCmd = [] - dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX') - if dll: listCmd.append("/out:%s"%dll) - - implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') - if implib: listCmd.append("/implib:%s"%implib) - - return listCmd - else: - # For signature calculation - return '/out:$TARGET' - -def win32ShlinkSources(target, source, env): - if target: - listCmd = [] - - deffile = env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX") - for src in source: - if src == deffile: - # Treat this source as a .def file. - listCmd.append("/def:%s" % src) - else: - # Just treat it as a generic source file. - listCmd.append(str(src)) - return listCmd - else: - # For signature calculation - return "$SOURCES" + return ['/PDB:%s'%target[0].File(env['PDB']).get_string(for_signature), + '/DEBUG'] +def win32ShlinkTargets(target, source, env, for_signature): + listCmd = [] + dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX') + if dll: listCmd.append("/out:%s"%dll.get_string(for_signature)) + + implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') + if implib: listCmd.append("/implib:%s"%implib.get_string(for_signature)) + + return listCmd + +def win32ShlinkSources(target, source, env, for_signature): + listCmd = [] + + deffile = env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX") + for src in source: + if src == deffile: + # Treat this source as a .def file. + listCmd.append("/def:%s" % src.get_string(for_signature)) + else: + # Just treat it as a generic source file. + listCmd.append(src) + return listCmd + def win32LibEmitter(target, source, env): msvc.validate_vars(env) diff --git a/src/engine/SCons/Tool/zip.py b/src/engine/SCons/Tool/zip.py index 4404247..510aa6e 100644 --- a/src/engine/SCons/Tool/zip.py +++ b/src/engine/SCons/Tool/zip.py @@ -59,7 +59,7 @@ try: internal_zip = 1 except ImportError: - zip = "$ZIP $ZIPFLAGS $( ${TARGET.abspath} $) $SOURCES" + zip = "$ZIP $ZIPFLAGS ${TARGET.abspath} $SOURCES" internal_zip = 0 |
