mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| # Copyright 2012 Jurko Gospodnetic
 | |
| # Distributed under the Boost Software License, Version 1.0.
 | |
| # (See accompanying file LICENSE_1_0.txt or copy at
 | |
| # http://www.boost.org/LICENSE_1_0.txt)
 | |
| 
 | |
| # Tests rc toolset behaviour.
 | |
| 
 | |
| import BoostBuild
 | |
| 
 | |
| 
 | |
| def included_resource_newer_than_rc_script():
 | |
|     """
 | |
|       When a .rc script file includes another resource file - the resource file
 | |
|     being newer than the .rc script file should not cause the .rc script file
 | |
|     to be considered old and force all of its dependents to rebuild.
 | |
| 
 | |
|     """
 | |
|     toolsetName = "__myDummyResourceCompilerToolset__"
 | |
| 
 | |
|     # Used options rationale:
 | |
|     #
 | |
|     # -d4 & --debug-configuration
 | |
|     #     Display additional information in case of test failure. In the past
 | |
|     #   we have had testing system issues  causing this test to fail
 | |
|     #   sporadically for which -d+3 output had been instrumental in getting to
 | |
|     #   the root cause (a touched file's timestamp was not as new as it should
 | |
|     #   have been).
 | |
|     #
 | |
|     # --ignore-site-config --user-config=
 | |
|     #     Disable reading any external Boost Build configuration. This test is
 | |
|     #   self sufficient so these options protect it from being adversly
 | |
|     #   affected by any local (mis)configuration..
 | |
|     t = BoostBuild.Tester(["-d4", "--debug-configuration",
 | |
|         "--ignore-site-config", "--user-config=", "toolset=%s" % toolsetName],
 | |
|         pass_d0=False, pass_toolset=False, use_test_config=False,
 | |
|         translate_suffixes=False)
 | |
| 
 | |
|     # Prepare a dummy toolset so we do not get errors in case the default one
 | |
|     # is not found and that we can test rc.jam functionality without having to
 | |
|     # depend on the externally specified toolset actually supporting it exactly
 | |
|     # the way it is required for this test, e.g. gcc toolset, under some
 | |
|     # circumstances, uses a quiet action for generating its null RC targets.
 | |
|     t.write(toolsetName + ".jam", """\
 | |
| import feature ;
 | |
| import rc ;
 | |
| import type ;
 | |
| local toolset-name = "%s" ;
 | |
| feature.extend toolset : $(toolset-name) ;
 | |
| rule init ( ) { }
 | |
| rc.configure dummy-rc-command : <toolset>$(toolset-name) : <rc-type>dummy ;
 | |
| module rc
 | |
| {
 | |
|     rule compile.resource.dummy ( targets * : sources * : properties * )
 | |
|     {
 | |
|         import common ;
 | |
|         .TOUCH on $(targets) = [ common.file-touch-command ] ;
 | |
|     }
 | |
|     actions compile.resource.dummy { $(.TOUCH) "$(<)" }
 | |
| }
 | |
| # Make OBJ files generated by our toolset use the "obj" suffix on all
 | |
| # platforms. We need to do this explicitly for <target-os> windows & cygwin to
 | |
| # override the default OBJ type configuration (otherwise we would get
 | |
| # 'ambiguous key' errors on those platforms).
 | |
| local rule set-generated-obj-suffix ( target-os ? )
 | |
| {
 | |
|     type.set-generated-target-suffix OBJ : <toolset>$(toolset-name)
 | |
|         <target-os>$(target-os) : obj ;
 | |
| }
 | |
| set-generated-obj-suffix ;
 | |
| set-generated-obj-suffix windows ;
 | |
| set-generated-obj-suffix cygwin ;
 | |
| """ % toolsetName)
 | |
| 
 | |
|     t.write(
 | |
|         toolsetName + '.py',
 | |
| """
 | |
| from b2.build import feature, type as type_
 | |
| from b2.manager import get_manager
 | |
| from b2.tools import rc, common
 | |
| 
 | |
| MANAGER = get_manager()
 | |
| ENGINE = MANAGER.engine()
 | |
| 
 | |
| toolset_name = "{0}"
 | |
| 
 | |
| feature.extend('toolset', [toolset_name])
 | |
| 
 | |
| def init(*args):
 | |
|     pass
 | |
| 
 | |
| rc.configure(['dummy-rc-command'], ['<toolset>' + toolset_name], ['<rc-type>dummy'])
 | |
| 
 | |
| ENGINE.register_action(
 | |
|     'rc.compile.resource.dummy',
 | |
|     '''
 | |
|     %s "$(<)"
 | |
|     ''' % common.file_creation_command()
 | |
| )
 | |
| 
 | |
| def set_generated_obj_suffix(target_os=''):
 | |
|     requirements = ['<toolset>' + toolset_name]
 | |
|     if target_os:
 | |
|         requirements.append('<target-os>' + target_os)
 | |
|     type_.set_generated_target_suffix('OBJ', requirements, 'obj')
 | |
| 
 | |
| set_generated_obj_suffix()
 | |
| set_generated_obj_suffix('windows')
 | |
| set_generated_obj_suffix('cygwin')
 | |
| """.format(toolsetName)
 | |
|     )
 | |
| 
 | |
|     # Prepare project source files.
 | |
|     t.write("jamroot.jam", """\
 | |
| ECHO {{{ [ modules.peek : XXX ] [ modules.peek : NOEXEC ] }}} ;
 | |
| obj xxx : xxx.rc ;
 | |
| """)
 | |
|     t.write("xxx.rc", '1 MESSAGETABLE "xxx.bin"\n')
 | |
|     t.write("xxx.bin", "foo")
 | |
| 
 | |
|     def test1(n, expect, noexec=False):
 | |
|         params = ["-sXXX=%d" % n]
 | |
|         if noexec:
 | |
|             params.append("-n")
 | |
|             params.append("-sNOEXEC=NOEXEC")
 | |
|         t.run_build_system(params)
 | |
|         t.expect_output_lines("*NOEXEC*", noexec)
 | |
|         obj_file = "xxx_res.obj"
 | |
|         t.expect_output_lines("compile.resource.dummy *%s" % obj_file, expect)
 | |
|         if expect and not noexec:
 | |
|             expect("bin/%s/debug/%s" % (toolsetName, obj_file))
 | |
|         t.expect_nothing_more()
 | |
| 
 | |
|     def test(n, expect):
 | |
|         test1(n, expect, noexec=True)
 | |
|         test1(n, expect)
 | |
| 
 | |
|     test(1, t.expect_addition)
 | |
|     test(2, None)
 | |
|     t.touch("xxx.bin")
 | |
|     test(3, t.expect_touch)
 | |
|     test(4, None)
 | |
| 
 | |
|     t.cleanup()
 | |
| 
 | |
| 
 | |
| included_resource_newer_than_rc_script()
 |