diff options
Diffstat (limited to 'test/AS/AS.py')
-rw-r--r-- | test/AS/AS.py | 317 |
1 files changed, 12 insertions, 305 deletions
diff --git a/test/AS/AS.py b/test/AS/AS.py index 8bfa740..e8a2a59 100644 --- a/test/AS/AS.py +++ b/test/AS/AS.py @@ -24,9 +24,13 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" -import os -import string +""" +Verify the ability to set the $AS construction variable to a different +assembler (a wrapper we create). +""" + import sys + import TestSCons _python_ = TestSCons._python_ @@ -153,314 +157,17 @@ test.write('test6.SPP', r"""This is a .SPP file. test.run(arguments = '.', stderr = None) -test.fail_test(test.read('test1' + _exe) != "This is a .s file.\n") - -test.fail_test(test.read('test2' + _exe) != "This is a .S file.\n") - -test.fail_test(test.read('test3' + _exe) != "This is a .asm file.\n") - -test.fail_test(test.read('test4' + _exe) != "This is a .ASM file.\n") - -test.fail_test(test.read('test5' + _exe) != "This is a .spp file.\n") - -test.fail_test(test.read('test6' + _exe) != "This is a .SPP file.\n") - - -as = test.detect('AS', 'as') -x86 = (sys.platform == 'win32' or string.find(sys.platform, 'linux') != -1) - -if as and x86: - - test.write("wrapper.py", """\ -import os -import string -import sys -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', """\ -aaa = Environment() -bbb = aaa.Clone(AS = r'%(_python_)s wrapper.py ' + WhereIs('as')) -ccc = aaa.Clone(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']) -""" % locals()) - - test.write('aaa.s', -""" .file "aaa.s" -.data -.align 4 -.globl name -name: - .ascii "aaa.s" - .byte 0 -""") - - test.write('bbb.s', """\ -.file "bbb.s" -.data -.align 4 -.globl name -name: - .ascii "bbb.s" - .byte 0 -""") - - test.write('ccc.h', """\ -#define STRING "ccc.S" -""") - - test.write('ccc.S', """\ -#include <ccc.h> -.file STRING -.data -.align 4 -.globl name -name: - .ascii STRING - .byte 0 -""") - - test.write('aaa_main.c', r""" -#include <stdlib.h> -#include <stdio.h> - -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("aaa_main.c %s\n", name); - exit (0); -} -""") - - test.write('bbb_main.c', r""" -#include <stdlib.h> -#include <stdio.h> - -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("bbb_main.c %s\n", name); - exit (0); -} -""") - - test.write('ccc_main.c', r""" -#include <stdlib.h> -#include <stdio.h> - -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("ccc_main.c %s\n", name); - exit (0); -} -""") - - test.write('ddd_main.c', r""" -extern char name[]; - -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: 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') - - - -ml = test.where_is('ml') - -if ml and sys.platform == 'win32': - - test.write("wrapper.py", -"""import os -import string -import sys -open('%s', 'wb').write("wrapper.py\\n") -os.system(string.join(sys.argv[1:], " ")) -""" % string.replace(test.workpath('wrapper.out'), '\\', '\\\\')) - - test.write('SConstruct', """ -import os -ccc = Environment(tools = ['msvc', 'mslink', 'masm'], - ASFLAGS = '/nologo /coff') -ccc['ENV']['PATH'] = ccc['ENV']['PATH'] + os.pathsep + os.environ['PATH'] -ddd = ccc.Clone(AS = r'%(_python_)s wrapper.py ' + ccc['AS']) -ccc.Program(target = 'ccc', source = ['ccc.asm', 'ccc_main.c']) -ddd.Program(target = 'ddd', source = ['ddd.asm', 'ddd_main.c']) -""" % locals()) - - test.write('ccc.asm', -""" -DSEG segment - PUBLIC _name -_name byte "ccc.asm",0 -DSEG ends - end -""") - - test.write('ddd.asm', -""" -DSEG segment - PUBLIC _name -_name byte "ddd.asm",0 -DSEG ends - end -""") - - test.write('ccc_main.c', r""" -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("ccc_main.c %s\n", name); - exit (0); -} -""") - - test.write('ddd_main.c', r""" -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("ddd_main.c %s\n", name); - exit (0); -} -""") - - test.run(arguments = 'ccc' + _exe, stderr = None) - - test.run(program = test.workpath('ccc'), stdout = "ccc_main.c ccc.asm\n") - - test.fail_test(os.path.exists(test.workpath('wrapper.out'))) - - test.run(arguments = 'ddd' + _exe) - - test.run(program = test.workpath('ddd'), stdout = "ddd_main.c ddd.asm\n") - - test.fail_test(test.read('wrapper.out') != "wrapper.py\n") - - - - -nasm = test.where_is('nasm') - -if nasm: - - # Allow flexibility about the type of object/executable format - # needed on different systems. Format_map is a dict that maps - # sys.platform substrings to the correct argument for the nasm -f - # option. The default is "elf," which seems to be a reasonable - # lowest common denominator (works on both Linux and FreeBSD, - # anyway...). - nasm_format = 'elf' - format_map = {} - for k, v in format_map.items(): - if string.find(sys.platform, k) != -1: - nasm_format = v - break - - test.write("wrapper.py", -"""import os -import string -import sys -open('%s', 'wb').write("wrapper.py\\n") -os.system(string.join(sys.argv[1:], " ")) -""" % string.replace(test.workpath('wrapper.out'), '\\', '\\\\')) - - test.write('SConstruct', """ -eee = Environment(tools = ['gcc', 'gnulink', 'nasm'], - ASFLAGS = '-f %(nasm_format)s') -fff = eee.Clone(AS = r'%(_python_)s wrapper.py ' + WhereIs('nasm')) -eee.Program(target = 'eee', source = ['eee.asm', 'eee_main.c']) -fff.Program(target = 'fff', source = ['fff.asm', 'fff_main.c']) -""" % locals()) - - test.write('eee.asm', -""" -global name -name: - db 'eee.asm',0 -""") - - test.write('fff.asm', -""" -global name -name: - db 'fff.asm',0 -""") - - test.write('eee_main.c', r""" -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("eee_main.c %s\n", name); - exit (0); -} -""") - - test.write('fff_main.c', r""" -extern char name[]; - -int -main(int argc, char *argv[]) -{ - argv[argc++] = "--"; - printf("fff_main.c %s\n", name); - exit (0); -} -""") - - test.run(arguments = 'eee' + _exe, stderr = None) +test.must_match('test1' + _exe, "This is a .s file.\n") - test.run(program = test.workpath('eee'), stdout = "eee_main.c eee.asm\n") +test.must_match('test2' + _exe, "This is a .S file.\n") - test.fail_test(os.path.exists(test.workpath('wrapper.out'))) +test.must_match('test3' + _exe, "This is a .asm file.\n") - test.run(arguments = 'fff' + _exe) +test.must_match('test4' + _exe, "This is a .ASM file.\n") - test.run(program = test.workpath('fff'), stdout = "fff_main.c fff.asm\n") +test.must_match('test5' + _exe, "This is a .spp file.\n") - test.fail_test(test.read('wrapper.out') != "wrapper.py\n") +test.must_match('test6' + _exe, "This is a .SPP file.\n") |