mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05: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()
 |