mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-17 17:42:02 -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()
|