From 551e2ae90d8fcaec292b9ae6104e0dac99005ced Mon Sep 17 00:00:00 2001 From: stevenknight Date: Sat, 4 Oct 2003 13:37:54 +0000 Subject: [PATCH] Add .S, .spp and .SPP to the list of files scanned for C preprocessor dependencies. (J.T. Conklin) git-svn-id: http://scons.tigris.org/svn/scons/trunk@810 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- src/CHANGES.txt | 2 + src/engine/SCons/Scanner/C.py | 3 +- src/engine/SCons/Scanner/CTests.py | 21 +++++++-- test/AS.py | 69 ++++++++++++++++++++++++------ 4 files changed, 78 insertions(+), 17 deletions(-) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 61011915..432d6247 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -15,6 +15,8 @@ RELEASE X.XX - XXX - On POSIX, execute commands with the more modern os.spawnvpe() function, if it's available. + - Scan .S, .spp and .SPP files for C preprocessor dependencies. + From Charles Crain: - Add support for a JARCHDIR variable to control changing to a diff --git a/src/engine/SCons/Scanner/C.py b/src/engine/SCons/Scanner/C.py index c78fa4b5..4fcf327c 100644 --- a/src/engine/SCons/Scanner/C.py +++ b/src/engine/SCons/Scanner/C.py @@ -38,7 +38,8 @@ def CScan(fs = SCons.Node.FS.default_fs): cs = SCons.Scanner.ClassicCPP("CScan", [".c", ".C", ".cxx", ".cpp", ".c++", ".cc", ".h", ".H", ".hxx", ".hpp", ".hh", - ".F", ".fpp", ".FPP"], + ".F", ".fpp", ".FPP", + ".S", ".spp", ".SPP"], "CPPPATH", '^[ \t]*#[ \t]*(?:include|import)[ \t]*(<|")([^>"]+)(>|")', fs = fs) diff --git a/src/engine/SCons/Scanner/CTests.py b/src/engine/SCons/Scanner/CTests.py index 3a5d3082..253af885 100644 --- a/src/engine/SCons/Scanner/CTests.py +++ b/src/engine/SCons/Scanner/CTests.py @@ -194,13 +194,13 @@ class DummyEnvironment: def __delitem__(self,key): del self.Dictionary()[key] -global my_normpath -my_normpath = os.path.normpath if os.path.normcase('foo') == os.path.normcase('FOO'): - global my_normpath my_normpath = os.path.normcase +else: + my_normpath = os.path.normpath def deps_match(self, deps, headers): + global my_normpath scanned = map(my_normpath, map(str, deps)) expect = map(my_normpath, headers) self.failUnless(scanned == expect, "expect %s != scanned %s" % (expect, scanned)) @@ -393,7 +393,19 @@ class CScannerTestCase14(unittest.TestCase): deps = s(make_node('f5.c'), env, path) headers = ['f5a.h', 'f5b.h'] deps_match(self, deps, map(test.workpath, headers)) - + +class CScannerTestCase15(unittest.TestCase): + def runTest(self): + env = DummyEnvironment([]) + s = SCons.Scanner.C.CScan() + suffixes = [".c", ".C", ".cxx", ".cpp", ".c++", ".cc", + ".h", ".H", ".hxx", ".hpp", ".hh", + ".F", ".fpp", ".FPP", + ".S", ".spp", ".SPP"] + for suffix in suffixes: + assert suffix in s.skeys, "%s not in skeys" % suffix + + def suite(): suite = unittest.TestSuite() @@ -410,6 +422,7 @@ def suite(): suite.addTest(CScannerTestCase12()) suite.addTest(CScannerTestCase13()) suite.addTest(CScannerTestCase14()) + suite.addTest(CScannerTestCase15()) return suite if __name__ == "__main__": diff --git a/test/AS.py b/test/AS.py index 1fdb964a..b8411540 100644 --- a/test/AS.py +++ b/test/AS.py @@ -172,19 +172,22 @@ x86 = (sys.platform == 'win32' or string.find(sys.platform, 'linux') != -1) if as and x86: - test.write("wrapper.py", -"""import os + test.write("wrapper.py", """\ +import os import string import sys -open('%s', 'wb').write("wrapper.py\\n") -os.system(string.join(sys.argv[1:], " ")) +open('%s', 'wb').write("wrapper.py: %%s\\n" %% sys.argv[-1]) +cmd = string.join(sys.argv[1:]) +os.system(cmd) """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\')) - test.write('SConstruct', """ + test.write('SConstruct', """\ aaa = Environment() bbb = aaa.Copy(AS = r'%s wrapper.py ' + WhereIs('as')) +ccc = aaa.Copy(CPPPATH=['.']) aaa.Program(target = 'aaa', source = ['aaa.s', 'aaa_main.c']) bbb.Program(target = 'bbb', source = ['bbb.s', 'bbb_main.c']) +ccc.Program(target = 'ccc', source = ['ccc.S', 'ccc_main.c']) """ % python) test.write('aaa.s', @@ -197,8 +200,8 @@ name: .byte 0 """) - test.write('bbb.s', -""" .file "bbb.s" + test.write('bbb.s', """\ +.file "bbb.s" .data .align 4 .globl name @@ -207,6 +210,21 @@ name: .byte 0 """) + test.write('ccc.h', """\ +#define STRING "ccc.S" +""") + + test.write('ccc.S', """\ +#include +.file STRING +.data +.align 4 +.globl name +name: + .ascii STRING + .byte 0 +""") + test.write('aaa_main.c', r""" extern char name[]; @@ -231,17 +249,44 @@ main(int argc, char *argv[]) } """) - test.run(arguments = 'aaa' + _exe, stderr = None) + test.write('ccc_main.c', r""" +extern char name[]; - test.run(program = test.workpath('aaa'), stdout = "aaa_main.c aaa.s\n") +int +main(int argc, char *argv[]) +{ + argv[argc++] = "--"; + printf("ccc_main.c %s\n", name); + exit (0); +} +""") - test.fail_test(os.path.exists(test.workpath('wrapper.out'))) + test.write('ddd_main.c', r""" +extern char name[]; - test.run(arguments = 'bbb' + _exe) +int +main(int argc, char *argv[]) +{ + argv[argc++] = "--"; + printf("ddd_main.c %s\n", name); + exit (0); +} +""") + + test.run() + test.run(program = test.workpath('aaa'), stdout = "aaa_main.c aaa.s\n") test.run(program = test.workpath('bbb'), stdout = "bbb_main.c bbb.s\n") + test.run(program = test.workpath('ccc'), stdout = "ccc_main.c ccc.S\n") - test.fail_test(test.read('wrapper.out') != "wrapper.py\n") + test.fail_test(test.read('wrapper.out') != "wrapper.py: bbb.s\n") + + test.write("ccc.h", """\ +#define STRING "ccc.S 2" +""") + + test.run() + test.run(program = test.workpath('ccc'), stdout = "ccc_main.c ccc.S 2\n") test.unlink('wrapper.out') -- 2.26.2