/usr/share/boost-build/util/option.jam is in libboost1.54-tools-dev 1.54.0-4ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # Copyright (c) 2005 Vladimir Prus.
#
# Use, modification and distribution is subject to 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 ;
# Set a value for a named option, to be used when not overridden on the command
# line.
rule set ( name : value ? )
{
.option.$(name) = $(value) ;
}
rule get ( name : default-value ? : implied-value ? )
{
local m = [ MATCH --$(name)=(.*) : [ modules.peek : ARGV ] ] ;
if $(m)
{
return $(m[1]) ;
}
else
{
m = [ MATCH (--$(name)) : [ modules.peek : ARGV ] ] ;
if $(m) && $(implied-value)
{
return $(implied-value) ;
}
else if $(.option.$(name))
{
return $(.option.$(name)) ;
}
else
{
return $(default-value) ;
}
}
}
# Check command-line args as soon as possible. For each option try to load
# module named after option. Is that succeeds, invoke 'process' rule in the
# module. The rule may return "true" to indicate that the regular build process
# should not be attempted.
#
# Options take the general form of: --<name>[=<value>] [<value>]
#
rule process ( )
{
local ARGV = [ modules.peek : ARGV ] ;
local BOOST_BUILD_PATH = [ modules.peek : BOOST_BUILD_PATH ] ;
local dont-build ;
local args = $(ARGV) ;
while $(args)
{
local arg = [ MATCH ^--(.*) : $(args[1]) ] ;
while $(args[2-]) && ! $(arg)
{
args = $(args[2-]) ;
arg = [ MATCH ^--(.*) : $(args[1]) ] ;
}
args = $(args[2-]) ;
if $(arg)
{
local split = [ MATCH ^(([^-=]+)[^=]*)(=?)(.*)$ : $(arg) ] ;
local full-name = $(split[1]) ;
local prefix = $(split[2]) ;
local values ;
if $(split[3])
{
values = $(split[4]) ;
}
if $(args) && ! [ MATCH ^(--).* : $(args[1]) ]
{
values += $(args[1]) ;
args = $(args[2-]) ;
}
# Jook in options subdirectories of BOOST_BUILD_PATH for modules
# matching the full option name and then its prefix.
local plugin-dir = options ;
local option-files = [ GLOB $(plugin-dir:D=$(BOOST_BUILD_PATH)) :
$(full-name).jam $(prefix).jam ] ;
if $(option-files)
{
# Load the file into a module named for the option.
local f = $(option-files[1]) ;
local module-name = --$(f:D=:S=) ;
modules.load $(module-name) : $(f:D=) : $(f:D) ;
# If there is a process rule, call it with the full option name
# and its value (if any). If there was no "=" in the option, the
# value will be empty.
if process in [ RULENAMES $(module-name) ]
{
dont-build += [ modules.call-in $(module-name) : process
--$(full-name) : $(values) ] ;
}
}
}
}
return $(dont-build) ;
}
|