diff options
author | Patrick Simianer <simianer@cl.uni-heidelberg.de> | 2012-05-13 03:35:30 +0200 |
---|---|---|
committer | Patrick Simianer <simianer@cl.uni-heidelberg.de> | 2012-05-13 03:35:30 +0200 |
commit | 670a8f984fc6d8342180c59ae9e96b0b76f34d3d (patch) | |
tree | 9f2ce7eec1a77e56b3bb1ad0ad40f212d7a996b0 /jam-files/boost-build/options | |
parent | eb3ee28dc0eb1d3e5ed01ba0df843be329ae450d (diff) | |
parent | 2f64af3e06a518b93f7ca2c30a9d0aeb2c947031 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'jam-files/boost-build/options')
-rw-r--r-- | jam-files/boost-build/options/help.jam | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/jam-files/boost-build/options/help.jam b/jam-files/boost-build/options/help.jam new file mode 100644 index 00000000..b507e1ed --- /dev/null +++ b/jam-files/boost-build/options/help.jam @@ -0,0 +1,212 @@ +# Copyright 2003 Dave Abrahams +# Copyright 2003, 2006 Rene Rivera +# Copyright 2003, 2006 Vladimir Prus +# 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) + +# This module is the plug-in handler for the --help and --help-.* +# command-line options +import modules ; +import assert ; +import doc : do-scan set-option set-output set-output-file print-help-usage print-help-top ; +import sequence ; +import set ; +import project ; +import print ; +import os ; +import version ; +import path ; + +# List of possible modules, but which really aren't. +# +.not-modules = + boost-build bootstrap site-config test user-config + -tools allyourbase boost-base features python stlport testing unit-tests ; + +# The help system options are parsed here and handed off to the doc +# module to translate into documentation requests and actions. The +# understood options are: +# +# --help-disable-<option> +# --help-doc-options +# --help-enable-<option> +# --help-internal +# --help-options +# --help-usage +# --help-output <type> +# --help-output-file <file> +# --help [<module-or-class>] +# +rule process ( + command # The option. + : values * # The values, starting after the "=". + ) +{ + assert.result --help : MATCH ^(--help).* : $(command) ; + local did-help = ; + switch $(command) + { + case --help-internal : + local path-to-modules = [ modules.peek : BOOST_BUILD_PATH ] ; + path-to-modules ?= . ; + local possible-modules = [ GLOB $(path-to-modules) : *\\.jam ] ; + local not-modules = [ GLOB $(path-to-modules) : *$(.not-modules)\\.jam ] ; + local modules-to-list = + [ sequence.insertion-sort + [ set.difference $(possible-modules:D=:S=) : $(not-modules:D=:S=) ] ] ; + local modules-to-scan ; + for local m in $(modules-to-list) + { + local module-files = [ GLOB $(path-to-modules) : $(m)\\.jam ] ; + modules-to-scan += $(module-files[1]) ; + } + do-scan $(modules-to-scan) : print-help-all ; + did-help = true ; + + case --help-enable-* : + local option = [ MATCH --help-enable-(.*) : $(command) ] ; option = $(option:L) ; + set-option $(option) : enabled ; + did-help = true ; + + case --help-disable-* : + local option = [ MATCH --help-disable-(.*) : $(command) ] ; option = $(option:L) ; + set-option $(option) ; + did-help = true ; + + case --help-output : + set-output $(values[1]) ; + did-help = true ; + + case --help-output-file : + set-output-file $(values[1]) ; + did-help = true ; + + case --help-doc-options : + local doc-module-spec = [ split-symbol doc ] ; + do-scan $(doc-module-spec[1]) : print-help-options ; + did-help = true ; + + case --help-options : + print-help-usage ; + did-help = true ; + + case --help : + local spec = $(values[1]) ; + if $(spec) + { + local spec-parts = [ split-symbol $(spec) ] ; + if $(spec-parts) + { + if $(spec-parts[2]) + { + do-scan $(spec-parts[1]) : print-help-classes $(spec-parts[2]) ; + do-scan $(spec-parts[1]) : print-help-rules $(spec-parts[2]) ; + do-scan $(spec-parts[1]) : print-help-variables $(spec-parts[2]) ; + } + else + { + do-scan $(spec-parts[1]) : print-help-module ; + } + } + else + { + EXIT "Unrecognized help option '"$(command)" "$(spec)"'." ; + } + } + else + { + version.print ; + ECHO ; + # First print documentation from the current Jamfile, if any. + # FIXME: Generally, this duplication of project.jam logic is bad. + local names = [ modules.peek project : JAMROOT ] + [ modules.peek project : JAMFILE ] ; + local project-file = [ path.glob . : $(names) ] ; + if ! $(project-file) + { + project-file = [ path.glob-in-parents . : $(names) ] ; + } + + for local p in $(project-file) + { + do-scan $(p) : print-help-project $(p) ; + } + + # Next any user-config help. + local user-path = [ os.home-directories ] [ os.environ BOOST_BUILD_PATH ] ; + local user-config = [ GLOB $(user-path) : user-config.jam ] ; + if $(user-config) + { + do-scan $(user-config[1]) : print-help-config user $(user-config[1]) ; + } + + # Next any site-config help. + local site-config = [ GLOB $(user-path) : site-config.jam ] ; + if $(site-config) + { + do-scan $(site-config[1]) : print-help-config site $(site-config[1]) ; + } + + # Then the overall help. + print-help-top ; + } + did-help = true ; + } + if $(did-help) + { + UPDATE all ; + NOCARE all ; + } + return $(did-help) ; +} + +# Split a reference to a symbol into module and symbol parts. +# +local rule split-symbol ( + symbol # The symbol to split. + ) +{ + local path-to-modules = [ modules.peek : BOOST_BUILD_PATH ] ; + path-to-modules ?= . ; + local module-name = $(symbol) ; + local symbol-name = ; + local result = ; + while ! $(result) + { + local module-path = [ GLOB $(path-to-modules) : $(module-name)\\.jam ] ; + if $(module-path) + { + # The 'module-name' in fact refers to module. Return the full + # module path and a symbol within it. If 'symbol' passed to this + # rule is already module, 'symbol-name' will be empty. Otherwise, + # it's initialized on the previous loop iteration. + # In case there are several modules by this name, + # use the first one. + result = $(module-path[1]) $(symbol-name) ; + } + else + { + if ! $(module-name:S) + { + result = - ; + } + else + { + local next-symbol-part = [ MATCH ^.(.*) : $(module-name:S) ] ; + if $(symbol-name) + { + symbol-name = $(next-symbol-part).$(symbol-name) ; + } + else + { + symbol-name = $(next-symbol-part) ; + } + module-name = $(module-name:B) ; + } + } + } + if $(result) != - + { + return $(result) ; + } +} |