mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			216 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			216 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/python
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Copyright 2008 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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test that the expected default toolset is used when no toolset is explicitly
							 | 
						||
| 
								 | 
							
								# specified on the command line or used from code via the using rule. Test that
							 | 
						||
| 
								 | 
							
								# the default toolset is correctly used just like any other explicitly used
							 | 
						||
| 
								 | 
							
								# toolset (e.g. toolset prerequisites, properties conditioned on toolset
							 | 
						||
| 
								 | 
							
								# related features, etc.).
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Note that we need to ignore regular site/user/test configuration files to
							 | 
						||
| 
								 | 
							
								# avoid them marking any toolsets not under our control as used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import BoostBuild
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Line displayed by Boost Build when using the default toolset.
							 | 
						||
| 
								 | 
							
								configuring_default_toolset_message = \
							 | 
						||
| 
								 | 
							
								    'warning: Configuring default toolset "%s".'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# test_conditions_on_default_toolset()
							 | 
						||
| 
								 | 
							
								# ------------------------------------
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def test_conditions_on_default_toolset():
							 | 
						||
| 
								 | 
							
								    """Test that toolset and toolset subfeature conditioned properties get
							 | 
						||
| 
								 | 
							
								    applied correctly when the toolset is selected by default. Implicitly tests
							 | 
						||
| 
								 | 
							
								    that we can use the set-default-toolset rule to set the default toolset to
							 | 
						||
| 
								 | 
							
								    be used by Boost Build.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t = BoostBuild.Tester("--user-config= --ignore-site-config",
							 | 
						||
| 
								 | 
							
								        pass_toolset=False, use_test_config=False)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    toolset_name           = "myCustomTestToolset"
							 | 
						||
| 
								 | 
							
								    toolset_version        = "v"
							 | 
						||
| 
								 | 
							
								    toolset_version_unused = "v_unused"
							 | 
						||
| 
								 | 
							
								    message_loaded         = "Toolset '%s' loaded." % toolset_name
							 | 
						||
| 
								 | 
							
								    message_initialized    = "Toolset '%s' initialized." % toolset_name ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Custom toolset.
							 | 
						||
| 
								 | 
							
								    t.write(toolset_name + ".jam", """
							 | 
						||
| 
								 | 
							
								import feature ;
							 | 
						||
| 
								 | 
							
								ECHO "%(message_loaded)s" ;
							 | 
						||
| 
								 | 
							
								feature.extend toolset : %(toolset_name)s ;
							 | 
						||
| 
								 | 
							
								feature.subfeature toolset %(toolset_name)s : version : %(toolset_version)s %(toolset_version_unused)s ;
							 | 
						||
| 
								 | 
							
								rule init ( version ) { ECHO "%(message_initialized)s" ; }
							 | 
						||
| 
								 | 
							
								""" % {'message_loaded'     : message_loaded     ,
							 | 
						||
| 
								 | 
							
								    'message_initialized'   : message_initialized,
							 | 
						||
| 
								 | 
							
								    'toolset_name'          : toolset_name       ,
							 | 
						||
| 
								 | 
							
								    'toolset_version'       : toolset_version    ,
							 | 
						||
| 
								 | 
							
								    'toolset_version_unused': toolset_version_unused})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Main Boost Build project script.
							 | 
						||
| 
								 | 
							
								    t.write("jamroot.jam", """
							 | 
						||
| 
								 | 
							
								import build-system ;
							 | 
						||
| 
								 | 
							
								import errors ;
							 | 
						||
| 
								 | 
							
								import feature ;
							 | 
						||
| 
								 | 
							
								import notfile ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build-system.set-default-toolset %(toolset_name)s : %(toolset_version)s ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature.feature description : : free incidental ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# We use a rule instead of an action to avoid problems with action output not
							 | 
						||
| 
								 | 
							
								# getting piped to stdout by the testing system.
							 | 
						||
| 
								 | 
							
								rule buildRule ( names : targets ? : properties * )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    local descriptions = [ feature.get-values description : $(properties) ] ;
							 | 
						||
| 
								 | 
							
								    ECHO "descriptions:" /$(descriptions)/ ;
							 | 
						||
| 
								 | 
							
								    local toolset = [ feature.get-values toolset : $(properties) ] ;
							 | 
						||
| 
								 | 
							
								    ECHO "toolset:" /$(toolset)/ ;
							 | 
						||
| 
								 | 
							
								    local toolset-version = [ feature.get-values "toolset-$(toolset):version" : $(properties) ] ;
							 | 
						||
| 
								 | 
							
								    ECHO "toolset-version:" /$(toolset-version)/ ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								notfile testTarget
							 | 
						||
| 
								 | 
							
								    : @buildRule
							 | 
						||
| 
								 | 
							
								    :
							 | 
						||
| 
								 | 
							
								    :
							 | 
						||
| 
								 | 
							
								    <description>stand-alone
							 | 
						||
| 
								 | 
							
								    <toolset>%(toolset_name)s:<description>toolset
							 | 
						||
| 
								 | 
							
								    <toolset>%(toolset_name)s-%(toolset_version)s:<description>toolset-version
							 | 
						||
| 
								 | 
							
								    <toolset>%(toolset_name)s-%(toolset_version_unused)s:<description>toolset-version-unused ;
							 | 
						||
| 
								 | 
							
								""" % {'toolset_name'       : toolset_name   ,
							 | 
						||
| 
								 | 
							
								    'toolset_version'       : toolset_version,
							 | 
						||
| 
								 | 
							
								    'toolset_version_unused': toolset_version_unused})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.run_build_system()
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines(configuring_default_toolset_message % toolset_name)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines(message_loaded)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines(message_initialized)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines("descriptions: /stand-alone/ /toolset/ "
							 | 
						||
| 
								 | 
							
								        "/toolset-version/")
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines("toolset: /%s/" % toolset_name)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines("toolset-version: /%s/" % toolset_version)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.cleanup()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# test_default_toolset_on_os()
							 | 
						||
| 
								 | 
							
								# ----------------------------
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def test_default_toolset_on_os( os, expected_toolset ):
							 | 
						||
| 
								 | 
							
								    """Test that the given toolset is used as the default toolset on the given
							 | 
						||
| 
								 | 
							
								    os. Uses hardcoded knowledge of how Boost Build decides on which host OS it
							 | 
						||
| 
								 | 
							
								    is currently running. Note that we must not do much after tricking Boost
							 | 
						||
| 
								 | 
							
								    Build into believing it has a specific host OS as this might mess up other
							 | 
						||
| 
								 | 
							
								    important internal Boost Build state.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t = BoostBuild.Tester("--user-config= --ignore-site-config",
							 | 
						||
| 
								 | 
							
								        pass_toolset=False, use_test_config=False)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.write("jamroot.jam", "modules.poke os : .name : %s ;" % os)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # We need to tell the test system to ignore stderr output as attempting to
							 | 
						||
| 
								 | 
							
								    # load missing toolsets might cause random failures with which we are not
							 | 
						||
| 
								 | 
							
								    # concerned in this test.
							 | 
						||
| 
								 | 
							
								    t.run_build_system(stderr=None)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines(configuring_default_toolset_message %
							 | 
						||
| 
								 | 
							
								        expected_toolset)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.cleanup()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# test_default_toolset_requirements()
							 | 
						||
| 
								 | 
							
								# -----------------------------------
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def test_default_toolset_requirements():
							 | 
						||
| 
								 | 
							
								    """Test that default toolset's requirements get applied correctly.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t = BoostBuild.Tester("--user-config= --ignore-site-config",
							 | 
						||
| 
								 | 
							
								        pass_toolset=False, use_test_config=False,
							 | 
						||
| 
								 | 
							
								        ignore_toolset_requirements=False)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    toolset_name = "customTestToolsetWithRequirements"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Custom toolset.
							 | 
						||
| 
								 | 
							
								    t.write(toolset_name + ".jam", """
							 | 
						||
| 
								 | 
							
								import feature ;
							 | 
						||
| 
								 | 
							
								import toolset ;
							 | 
						||
| 
								 | 
							
								feature.extend toolset : %(toolset_name)s ;
							 | 
						||
| 
								 | 
							
								toolset.add-requirements <description>toolset-requirement ;
							 | 
						||
| 
								 | 
							
								rule init ( ) { }
							 | 
						||
| 
								 | 
							
								""" % {'toolset_name': toolset_name})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Main Boost Build project script.
							 | 
						||
| 
								 | 
							
								    t.write("jamroot.jam", """
							 | 
						||
| 
								 | 
							
								import build-system ;
							 | 
						||
| 
								 | 
							
								import errors ;
							 | 
						||
| 
								 | 
							
								import feature ;
							 | 
						||
| 
								 | 
							
								import notfile ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build-system.set-default-toolset %(toolset_name)s ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								feature.feature description : : free incidental ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# We use a rule instead of an action to avoid problems with action output not
							 | 
						||
| 
								 | 
							
								# getting piped to stdout by the testing system.
							 | 
						||
| 
								 | 
							
								rule buildRule ( names : targets ? : properties * )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    local descriptions = [ feature.get-values description : $(properties) ] ;
							 | 
						||
| 
								 | 
							
								    ECHO "descriptions:" /$(descriptions)/ ;
							 | 
						||
| 
								 | 
							
								    local toolset = [ feature.get-values toolset : $(properties) ] ;
							 | 
						||
| 
								 | 
							
								    ECHO "toolset:" /$(toolset)/ ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								notfile testTarget
							 | 
						||
| 
								 | 
							
								    : @buildRule
							 | 
						||
| 
								 | 
							
								    :
							 | 
						||
| 
								 | 
							
								    :
							 | 
						||
| 
								 | 
							
								    <description>target-requirement
							 | 
						||
| 
								 | 
							
								    <description>toolset-requirement:<description>conditioned-requirement
							 | 
						||
| 
								 | 
							
								    <description>unrelated-condition:<description>unrelated-description ;
							 | 
						||
| 
								 | 
							
								""" % {'toolset_name': toolset_name})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.run_build_system()
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines(configuring_default_toolset_message % toolset_name)
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines("descriptions: /conditioned-requirement/ "
							 | 
						||
| 
								 | 
							
								        "/target-requirement/ /toolset-requirement/")
							 | 
						||
| 
								 | 
							
								    t.expect_output_lines("toolset: /%s/" % toolset_name)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    t.cleanup()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# main()
							 | 
						||
| 
								 | 
							
								# ------
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								###############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test_default_toolset_on_os("NT"         , "msvc")
							 | 
						||
| 
								 | 
							
								test_default_toolset_on_os("LINUX"      , "gcc" )
							 | 
						||
| 
								 | 
							
								test_default_toolset_on_os("CYGWIN"     , "gcc" )
							 | 
						||
| 
								 | 
							
								test_default_toolset_on_os("SomeOtherOS", "gcc" )
							 | 
						||
| 
								 | 
							
								test_default_toolset_requirements()
							 | 
						||
| 
								 | 
							
								test_conditions_on_default_toolset()
							 |