blob: 5297dbb84be0462de4b1694cabc03cabf916f687 [file] [log] [blame]
# Copyright 2012 Steven Watanabe
# 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)
import modules ;
import errors ;
import regex ;
import path ;
import project ;
rule get ( name )
{
return $(.vars.$(name)) ;
}
rule set ( name : value * )
{
.all-vars += $(name) ;
.vars.$(name) = $(value) ;
}
rule save ( )
{
if $(.cache-file)
{
local cache-file-native = [ path.native $(.cache-file) ] ;
local target = <new-cache-file>$(cache-file-native) ;
local contents = "# Automatically generated by Boost.Build.\n# Do not edit.\n\nmodule config-cache {\n" ;
for local var in $(.all-vars)
{
local transformed ;
for local value in $(.vars.$(var))
{
transformed += [ regex.escape $(value) : \"\\ : \\ ] ;
}
local quoted = \"$(transformed)\" ;
contents += " set \"$(var)\" : $(quoted:J= ) ;\n" ;
}
contents += "}\n" ;
FILE_CONTENTS on $(target) = $(contents) ;
ALWAYS $(target) ;
config-cache.write $(target) ;
UPDATE_NOW $(target) : [ modules.peek configure : .log-fd ] : ignore-minus-n ;
}
}
actions write
{
@($(STDOUT):E=$(FILE_CONTENTS:J=)) > "$(<)"
}
rule load ( cache-file )
{
if $(.cache-file)
{
errors.error duplicate load of cache file ;
}
cache-file = [ path.native $(cache-file) ] ;
if [ path.exists $(cache-file) ] && ! ( --reconfigure in [ modules.peek : ARGV ] )
{
include <old-cache-file>$(cache-file) ;
}
.cache-file = $(cache-file) ;
}