mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2025-01-02 17:09:36 +03:00
110 lines
3.2 KiB
Plaintext
110 lines
3.2 KiB
Plaintext
# 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) ;
|
|
}
|