Add a Dirs() function that can be used in hBcexpansions. (Stanislav Baranov)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 13 Aug 2005 19:09:11 +0000 (19:09 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 13 Aug 2005 19:09:11 +0000 (19:09 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1329 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/engine/SCons/Defaults.py
src/engine/SCons/Defaults.xml
src/engine/SCons/Node/FS.py
src/engine/SCons/Node/FSTests.py

index a1fc076b370ef8fbfe81dd83e861e34ec1fe153e..96bd467fff1512d9b3e9cd35541f0372bd75e7f1 100644 (file)
@@ -4882,19 +4882,15 @@ This may or may not be set,
 depending on the specific C compiler being used.
 
 .IP _concat
-A function used to produce variables like $_CPPINCFLAGS.
-It takes four to seven arguments:
-a prefix to concatenate onto each element;
-a list of elements;
-a suffix to concatenate onto each element;
-an environment for variable interpolation;
-an optional function that will be
-called to transform the list before concatenation;
-a target or list of targets;
-and a source or list of sources.
+A function used to produce variables like $_CPPINCFLAGS. It takes
+four or five
+arguments: a prefix to concatenate onto each element, a list of
+elements, a suffix to concatenate onto each element, an environment
+for variable interpolation, and an optional function that will be
+called to transform the list before concatenation.
 
 .ES
-env['_CPPINCFLAGS'] = '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
+env['_CPPINCFLAGS'] = '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs)} $)',
 .EE
 
 .IP CPPDEFINES
@@ -5151,8 +5147,12 @@ This may or may not be set,
 depending on the specific C++ compiler being used.
 
 .IP Dir
-A function that converts a file name into a Dir instance relative to the
-target being built. 
+A function that converts a string
+into a Dir instance relative to the target being built. 
+
+.IP Dirs
+A function that converts a list of strings
+into a list of Dir instances relative to the target being built.
 
 .IP DSUFFIXES
 The list of suffixes of files that will be scanned
@@ -5723,7 +5723,7 @@ The default list is:
 .EE
 
 .IP File
-A function that converts a file name into a File instance relative to the
+A function that converts a string into a File instance relative to the
 target being built. 
 
 .IP FRAMEWORKPATH
@@ -6756,7 +6756,7 @@ The string displayed when registering a newly-built DLL file.
 If this is not set, then $REGSVRCOM (the command line) is displayed.
 
 .IP RDirs
-A function that converts a file name into a list of Dir instances by
+A function that converts a string into a list of Dir instances by
 searching the repositories. 
 
 .IP RMIC
index e8df84febb573cbe2f0917f69a5e1ab2135e5d83..88a167a6714258b281837588153a9204d4beefa3 100644 (file)
@@ -364,6 +364,7 @@ ConstructionEnvironment = {
     '_CPPDEFFLAGS'  : '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
     'TEMPFILE'      : NullCmdGenerator,
     'Dir'           : Variable_Method_Caller('TARGET', 'Dir'),
+    'Dirs'          : Variable_Method_Caller('TARGET', 'Dirs'),
     'File'          : Variable_Method_Caller('TARGET', 'File'),
     'RDirs'         : Variable_Method_Caller('TARGET', 'RDirs'),
 }
index 837dd6398f346e68a336503b9aed78de4e623311..71f2f218168c25990cb8179b9a2a29827910998d 100644 (file)
@@ -71,16 +71,12 @@ env.PDF(target = 'bbb', source = 'bbb.dvi')
 
 <cvar name ="_concat">
 <summary>
-A function used to produce variables like &cv-_CPPINCFLAGS;.
-It takes four to seven arguments:
-a prefix to concatenate onto each element;
-a list of elements;
-a suffix to concatenate onto each element;
-an environment for variable interpolation;
-an optional function that will be
-called to transform the list before concatenation;
-a target or list of targets;
-and a source or list of sources.
+A function used to produce variables like &cv-_CPPINCFLAGS;. It takes
+four or five
+arguments: a prefix to concatenate onto each element, a list of
+elements, a suffix to concatenate onto each element, an environment
+for variable interpolation, and an optional function that will be
+called to transform the list before concatenation.
 
 <example>
 env['_CPPINCFLAGS'] = '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs)} $)',
@@ -239,6 +235,20 @@ env = Environment(CCCOM="my_compiler $_CPPINCFLAGS -c -o $TARGET $SOURCE")
 </summary>
 </cvar>
 
+<cvar name="Dir">
+<summary>
+A function that converts a string
+into a Dir instance relative to the target being built. 
+</summary>
+</cvar>
+
+<cvar name="Dirs">
+<summary>
+A function that converts a list of strings
+into a list of Dir instances relative to the target being built.
+</summary>
+</cvar>
+
 <cvar name="DSUFFIXES">
 <summary>
 The list of suffixes of files that will be scanned
@@ -251,6 +261,13 @@ The default list is:
 </summary>
 </cvar>
 
+<cvar name="File">
+<summary>
+A function that converts a string into a File instance relative to the
+target being built. 
+</summary>
+</cvar>
+
 <cvar name="IDLSUFFIXES">
 <summary>
 The list of suffixes of files that will be scanned
@@ -473,3 +490,10 @@ The prefix used for PDF file names.
 The suffix used for PDF file names.
 </summary>
 </cvar>
+
+<cvar name="RDirs">
+<summary>
+A function that converts a string into a list of Dir instances by
+searching the repositories. 
+</summary>
+</cvar>
index dbe7749285746e991199a766ad31a7c7df24c0f9..d073d539e750e44e97b60fe20ce20bfb81c4dd32 100644 (file)
@@ -1614,6 +1614,11 @@ class File(Base):
         the SConscript directory of this file."""
         return self.fs.Dir(name, self.cwd)
 
+    def Dirs(self, pathlist):
+        """Create a list of directories relative to the SConscript
+        directory of this file."""
+        return map(lambda p, s=self: s.Dir(p), pathlist)
+
     def File(self, name):
         """Create a file node named 'name' relative to
         the SConscript directory of this file."""
index a8b5b6d3ec1c541530823c2a6de5b868ee0dc819..c8c8ad799138386e1627d2c3949e87ea835d1070 100644 (file)
@@ -1808,6 +1808,23 @@ class EntryTestCase(_tempdirTestCase):
         self.fs.Entry('#topdir')
         self.fs.Entry('#topdir/a/b/c')
 
+
+
+class FileTestCase(_tempdirTestCase):
+
+    def test_Dirs(self):
+        """Test the File.Dirs() method"""
+        fff = self.fs.File('subdir/fff')
+        # This simulates that the SConscript file that defined
+        # fff is in subdir/.
+        fff.cwd = self.fs.Dir('subdir')
+        d1 = self.fs.Dir('subdir/d1')
+        d2 = self.fs.Dir('subdir/d2')
+        dirs = fff.Dirs(['d1', 'd2'])
+        assert dirs == [d1, d2], map(str, dirs)
+
+
+
 class RepositoryTestCase(_tempdirTestCase):
 
     def setUp(self):
@@ -2798,6 +2815,7 @@ if __name__ == "__main__":
         BaseTestCase,
         BuildInfoTestCase,
         EntryTestCase,
+        FileTestCase,
         NodeInfoTestCase,
         FSTestCase,
         DirTestCase,