# 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 ; import os ; 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 = $(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=)) > "$(<)" } if [ os.name ] = VMS { actions write { @($(STDOUT):E=$(FILE_CONTENTS:J=)) | TYPE SYS$INPUT /OUT=$(<:W) } } 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 $(cache-file) ; } .cache-file = $(cache-file) ; }