Add the InstallAs() method (Charles Crain).
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 11 Jan 2002 00:02:51 +0000 (00:02 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Fri, 11 Jan 2002 00:02:51 +0000 (00:02 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@197 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Environment.py
src/engine/SCons/EnvironmentTests.py

index c19641b52095930ae34a1ef27c904dba2e32f182..c249162f7a5f408dc4f6e032db976e73afec83e2 100644 (file)
@@ -582,6 +582,31 @@ env.Depends('foo.c', 'foo.h')
 .PP
 .fi
 
+Additional methods include:
+
+.IP Install
+Installs one or more files in a destination directory.
+The file names remain the same.
+.IP
+.nf
+env.Install(dir = '/usr/local/bin', source = 'foo bar')
+.PP
+.fi
+
+.IP InstallAs
+Installs one or more files as specific file names.
+This allows changing a file name as part of the
+installation:
+.IP
+.nf
+env.Install(dir = '/usr/local/bin/foo', source = 'foo_debug')
+env.Install(target = '../lib/libfoo.a ../lib/libbar.a',
+            source = 'libFOO.a libBAR.a')
+.PP
+.fi
+It is an error if the target and source
+list different numbers of files.
+
 .SS Construction Variables
 
 A construction environment has an associated dictionary of construction
index e739feabc56667cb05718621df8e3407783d174a..43860f10a25e1ede1ea75c1760f446d905735ed0 100644 (file)
@@ -14,6 +14,8 @@ RELEASE 0.03 -
 
   - Performance improvements in the Node.FS and Sig.Calculator classes.
 
+  - Add the InstallAs() method.
+
   From Steven Knight:
 
   - Search both /usr/lib and /usr/local/lib for scons directories by
@@ -45,6 +47,8 @@ RELEASE 0.03 -
   - Use one CPlusPlusAction in the Object Builder's action dictionary,
     instead of letting it create multiple identical instances.
 
+  - Document the Install() and InstallAs() methods.
+
   From Steve Leblanc:
 
   - Require that a Builder be given a name argument, supplying a
index 6f773543a31ae73fefa94204018d9dbdaf0ed462..612ae9ac9320f8c972f68cb4605ca4b86edbc0c3 100644 (file)
@@ -204,6 +204,17 @@ class Environment:
             tgt = tgt[0]
         return tgt
 
+    def InstallAs(self, target, source):
+        """Install sources as targets."""
+        sources = SCons.Util.scons_str2nodes(source)
+        targets = SCons.Util.scons_str2nodes(target)
+        ret = []
+        for src, tgt in map(lambda x, y: (x, y), sources, targets):
+            ret.append(InstallBuilder(self, tgt, src))
+        if len(ret) == 1:
+            ret = ret[0]
+        return ret
+  
     def subst(self, string):
        """Recursively interpolates construction variables from the
        Environment into the specified string, returning the expanded
index 878e73618318d1bba0fe4121a200d1ac085f2523..a65cc33e4d4106f7937c6eace0891d72d75f49f3 100644 (file)
@@ -215,7 +215,7 @@ class EnvironmentTestCase(unittest.TestCase):
        assert env1 == env2
 
     def test_Install(self):
-       """Test Install method"""
+       """Test Install and InstallAs methods"""
         env=Environment()
         tgt = env.Install('export', [ 'build/foo1', 'build/foo2' ])
         paths = map(str, tgt)
@@ -225,6 +225,15 @@ class EnvironmentTestCase(unittest.TestCase):
         for tnode in tgt:
             assert tnode.builder == InstallBuilder
 
+        tgt = env.InstallAs(target='foo1 foo2', source='bar1 bar2')
+        assert len(tgt) == 2, len(tgt)
+        paths = map(lambda x: str(x.sources[0]), tgt)
+        paths.sort()
+        expect = map(os.path.normpath, [ 'bar1', 'bar2' ])
+        assert paths == expect, paths
+        for tnode in tgt:
+            assert tnode.builder == InstallBuilder
+            
     def test_InstallAs(self):
        pass    # XXX