mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			158 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			158 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/python
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Copyright 2003 Vladimir Prus
							 | 
						||
| 
								 | 
							
								# Distributed under the Boost Software License, Version 1.0.
							 | 
						||
| 
								 | 
							
								# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# This tests correct handling of dependencies, specifically, on generated
							 | 
						||
| 
								 | 
							
								# sources, and from generated sources.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import BoostBuild
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import string
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t = BoostBuild.Tester(pass_toolset=0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.write("core-dependency-helpers", """
							 | 
						||
| 
								 | 
							
								rule hdrrule
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   INCLUDES $(1) : $(2) ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								actions copy
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   cp $(>) $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								""")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								code = """include core-dependency-helpers ;
							 | 
						||
| 
								 | 
							
								DEPENDS all : a ;
							 | 
						||
| 
								 | 
							
								DEPENDS a : b ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								actions create-b
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   echo '#include <foo.h>' > $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								copy a : b ;
							 | 
						||
| 
								 | 
							
								create-b b ;
							 | 
						||
| 
								 | 
							
								HDRRULE on b foo.h bar.h = hdrrule ;
							 | 
						||
| 
								 | 
							
								HDRSCAN on b foo.h bar.h = \"#include <(.*)>\" ;
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# This creates 'a' which depends on 'b', which is generated. The generated 'b'
							 | 
						||
| 
								 | 
							
								# contains '#include <foo.h>' and no rules for foo.h are given. The system
							 | 
						||
| 
								 | 
							
								# should error out on the first invocation.
							 | 
						||
| 
								 | 
							
								t.run_build_system("-f-", stdin=code)
							 | 
						||
| 
								 | 
							
								t.fail_test(string.find(t.stdout(), "...skipped a for lack of foo.h...") == -1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm('b')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Now test that if target 'c' also depends on 'b', then it will not be built, as
							 | 
						||
| 
								 | 
							
								# well.
							 | 
						||
| 
								 | 
							
								t.run_build_system("-f-", stdin=code + " copy c : b ; DEPENDS c : b ; DEPENDS all : c ; ")
							 | 
						||
| 
								 | 
							
								t.fail_test(string.find(t.stdout(), "...skipped c for lack of foo.h...") == -1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm('b')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Now add a rule for creating foo.h.
							 | 
						||
| 
								 | 
							
								code += """
							 | 
						||
| 
								 | 
							
								actions create-foo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    echo // > $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								create-foo foo.h ;
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								t.run_build_system("-f-", stdin=code)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Run two times, adding explicit dependency from all to foo.h at the beginning
							 | 
						||
| 
								 | 
							
								# and at the end, to make sure that foo.h is generated before 'a' in all cases.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def mk_correct_order_func(s1, s2):
							 | 
						||
| 
								 | 
							
								    def correct_order(s):
							 | 
						||
| 
								 | 
							
								        n1 = string.find(s, s1)
							 | 
						||
| 
								 | 
							
								        n2 = string.find(s, s2)
							 | 
						||
| 
								 | 
							
								        return ( n1 != -1 ) and ( n2 != -1 ) and ( n1 < n2 )
							 | 
						||
| 
								 | 
							
								    return correct_order
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								correct_order = mk_correct_order_func("create-foo", "copy a")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm(["a", "b", "foo.h"])
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d+2 -f-", stdin=code + " DEPENDS all : foo.h ;")
							 | 
						||
| 
								 | 
							
								t.fail_test(not correct_order(t.stdout()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm(["a", "b", "foo.h"])
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d+2 -f-", stdin=" DEPENDS all : foo.h ; " + code)
							 | 
						||
| 
								 | 
							
								t.fail_test(not correct_order(t.stdout()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Now foo.h exists. Test include from b -> foo.h -> bar.h -> biz.h. b and foo.h
							 | 
						||
| 
								 | 
							
								# already have updating actions.
							 | 
						||
| 
								 | 
							
								t.rm(["a", "b"])
							 | 
						||
| 
								 | 
							
								t.write("foo.h", "#include <bar.h>")
							 | 
						||
| 
								 | 
							
								t.write("bar.h", "#include <biz.h>")
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d+2 -f-", stdin=code)
							 | 
						||
| 
								 | 
							
								t.fail_test(string.find(t.stdout(), "...skipped a for lack of biz.h...") == -1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Add an action for biz.h.
							 | 
						||
| 
								 | 
							
								code += """
							 | 
						||
| 
								 | 
							
								actions create-biz
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   echo // > $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								create-biz biz.h ;
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm(["b"])
							 | 
						||
| 
								 | 
							
								correct_order = mk_correct_order_func("create-biz", "copy a")
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d+2 -f-", stdin=code + " DEPENDS all : biz.h ;")
							 | 
						||
| 
								 | 
							
								t.fail_test(not correct_order(t.stdout()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.rm(["a", "biz.h"])
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d+2 -f-", stdin=" DEPENDS all : biz.h ; " + code)
							 | 
						||
| 
								 | 
							
								t.fail_test(not correct_order(t.stdout()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.write("a", "")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								code="""
							 | 
						||
| 
								 | 
							
								DEPENDS all : main d ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								actions copy
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    cp $(>) $(<) ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DEPENDS main : a ;
							 | 
						||
| 
								 | 
							
								copy main : a ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INCLUDES a : <1>c ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NOCARE <1>c ;
							 | 
						||
| 
								 | 
							
								SEARCH on <1>c = . ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								actions create-c
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    echo d > $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								actions create-d
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    echo // > $(<)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create-c <2>c ;
							 | 
						||
| 
								 | 
							
								LOCATE on <2>c = . ;
							 | 
						||
| 
								 | 
							
								create-d d ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HDRSCAN on <1>c = (.*) ;
							 | 
						||
| 
								 | 
							
								HDRRULE on <1>c = hdrrule ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								rule hdrrule
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    INCLUDES $(1) : d ;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								correct_order = mk_correct_order_func("create-d", "copy main")
							 | 
						||
| 
								 | 
							
								t.run_build_system("-d2 -f-", stdin=code)
							 | 
						||
| 
								 | 
							
								t.fail_test(not correct_order(t.stdout()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								t.cleanup()
							 |