mirror of
https://github.com/boostorg/build.git
synced 2026-02-21 15:02:19 +00:00
topological sort ordered includes.
This commit is contained in:
@@ -17,6 +17,8 @@ import regex ;
|
||||
import sequence ;
|
||||
import set ;
|
||||
import property-set ;
|
||||
import order ;
|
||||
import "class" : new ;
|
||||
|
||||
|
||||
.flag-no = 1 ;
|
||||
@@ -237,6 +239,7 @@ rule handle-flag-value ( value * : properties * )
|
||||
if $(value:G)
|
||||
{
|
||||
local matches = [ property.select $(value) : $(properties) ] ;
|
||||
local order ;
|
||||
for local p in $(matches)
|
||||
{
|
||||
local att = [ feature.attributes $(p:G) ] ;
|
||||
@@ -263,11 +266,24 @@ rule handle-flag-value ( value * : properties * )
|
||||
}
|
||||
if path in $(att)
|
||||
{
|
||||
result += [ sequence.transform path.native : $(values) ] ;
|
||||
values = [ sequence.transform path.native : $(values) ] ;
|
||||
}
|
||||
else
|
||||
result += $(values) ;
|
||||
if $(values[2])
|
||||
{
|
||||
result += $(values) ;
|
||||
if ! $(order)
|
||||
{
|
||||
order = [ new order ] ;
|
||||
}
|
||||
local prev ;
|
||||
for local v in $(values)
|
||||
{
|
||||
if $(prev)
|
||||
{
|
||||
$(order).add-pair $(prev) $(v) ;
|
||||
}
|
||||
prev = $(v) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -275,6 +291,11 @@ rule handle-flag-value ( value * : properties * )
|
||||
result += $(p:G=) ;
|
||||
}
|
||||
}
|
||||
if $(order)
|
||||
{
|
||||
result = [ $(order).order [ sequence.unique $(result) : stable ] ] ;
|
||||
DELETE_MODULE $(order) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -15,17 +15,17 @@ class c-scanner : scanner
|
||||
import regex ;
|
||||
import scanner ;
|
||||
import sequence ;
|
||||
import toolset ;
|
||||
import virtual-target ;
|
||||
|
||||
rule __init__ ( includes * )
|
||||
{
|
||||
scanner.__init__ ;
|
||||
|
||||
for local i in $(includes)
|
||||
{
|
||||
self.includes += [ sequence.transform path.native : [ regex.split
|
||||
$(i:G=) "&&" ] ] ;
|
||||
}
|
||||
# toolset.handle-flag-value is a bit of overkill, but it
|
||||
# does correctly handle the topological sort of && separated
|
||||
# include paths
|
||||
self.includes = [ toolset.handle-flag-value <include> : $(includes) ] ;
|
||||
}
|
||||
|
||||
rule pattern ( )
|
||||
|
||||
Reference in New Issue
Block a user