summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Tool
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-05-06 05:58:31 (GMT)
committerSteven Knight <knight@baldmt.com>2003-05-06 05:58:31 (GMT)
commitaaf2cbb74e00fdc89da432d18e9fe40bb7de3b9d (patch)
treec399116a6a33ae9ad69d04dd43c2f272737c2074 /src/engine/SCons/Tool
parente591784eb29edfaf2760024f57ee1462f1bae1f3 (diff)
downloadSCons-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.py2
-rw-r--r--src/engine/SCons/Tool/jar.py8
-rw-r--r--src/engine/SCons/Tool/javac.py82
-rw-r--r--src/engine/SCons/Tool/linkloc.py4
-rw-r--r--src/engine/SCons/Tool/mingw.py4
-rw-r--r--src/engine/SCons/Tool/mslink.py59
-rw-r--r--src/engine/SCons/Tool/zip.py2
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