mirror of
https://github.com/boostorg/build.git
synced 2026-02-19 02:12:17 +00:00
Add AutoIndex tool from sandbox.
Integrate into Boost.Build. Add HTML stylesheet options for Indexes. Add rule to XSL stylesheets to place Indexes in their own HTML CSS class. [SVN r72962]
This commit is contained in:
212
v2/tools/auto-index.jam
Normal file
212
v2/tools/auto-index.jam
Normal file
@@ -0,0 +1,212 @@
|
||||
|
||||
import feature ;
|
||||
import generators ;
|
||||
import "class" ;
|
||||
import toolset ;
|
||||
import targets ;
|
||||
import "class" : new ;
|
||||
import project ;
|
||||
|
||||
feature.feature auto-index : off "on" ;
|
||||
feature.feature auto-index-internal : off "on" ;
|
||||
feature.feature auto-index-verbose : off "on" ;
|
||||
feature.feature auto-index-no-duplicates : off "on" ;
|
||||
feature.feature auto-index-script : : free ;
|
||||
feature.feature auto-index-prefix : : free ;
|
||||
feature.feature auto-index-type : : free ;
|
||||
feature.feature auto-index-section-names : "on" off ;
|
||||
|
||||
toolset.flags auto-index.auto-index FLAGS <auto-index-internal>on : --internal-index ;
|
||||
toolset.flags auto-index.auto-index SCRIPT <auto-index-script> ;
|
||||
toolset.flags auto-index.auto-index PREFIX <auto-index-prefix> ;
|
||||
toolset.flags auto-index.auto-index INDEX_TYPE <auto-index-type> ;
|
||||
toolset.flags auto-index.auto-index FLAGS <auto-index-verbose>on : --verbose ;
|
||||
toolset.flags auto-index.auto-index FLAGS <auto-index-no-duplicates>on : --no-duplicates ;
|
||||
toolset.flags auto-index.auto-index FLAGS <auto-index-section-names>off : --no-section-names ;
|
||||
|
||||
# <auto-index-binary> shell command to run AutoIndex
|
||||
# <auto-index-binary-dependencies> targets to build AutoIndex from sources.
|
||||
feature.feature <auto-index-binary> : : free ;
|
||||
feature.feature <auto-index-binary-dependencies> : : free dependency ;
|
||||
|
||||
class auto-index-generator : generator
|
||||
{
|
||||
import common modules path targets build-system ;
|
||||
rule run ( project name ? : property-set : sources * )
|
||||
{
|
||||
# AutoIndex invocation command and dependencies.
|
||||
local auto-index-binary = [ modules.peek auto-index : .command ] ;
|
||||
local auto-index-binary-dependencies ;
|
||||
|
||||
if $(auto-index-binary)
|
||||
{
|
||||
# Use user-supplied command.
|
||||
auto-index-binary = [ common.get-invocation-command auto-index : auto-index : $(auto-index-binary) ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
# Search for AutoIndex sources in sensible places, like
|
||||
# $(BOOST_ROOT)/tools/auto_index
|
||||
# $(BOOST_BUILD_PATH)/../../auto_index
|
||||
|
||||
# And build auto-index executable from sources.
|
||||
|
||||
local boost-root = [ modules.peek : BOOST_ROOT ] ;
|
||||
local boost-build-path = [ build-system.location ] ;
|
||||
local boost-build-path2 = [ modules.peek : BOOST_BUILD_PATH ] ;
|
||||
|
||||
local auto-index-dir ;
|
||||
|
||||
if $(boost-root)
|
||||
{
|
||||
auto-index-dir += [ path.join $(boost-root) tools ] ;
|
||||
}
|
||||
|
||||
if $(boost-build-path)
|
||||
{
|
||||
auto-index-dir += $(boost-build-path)/../.. ;
|
||||
}
|
||||
if $(boost-build-path2)
|
||||
{
|
||||
auto-index-dir += $(boost-build-path2)/.. ;
|
||||
}
|
||||
|
||||
#ECHO $(auto-index-dir) ;
|
||||
auto-index-dir = [ path.glob $(auto-index-dir) : auto_index ] ;
|
||||
#ECHO $(auto-index-dir) ;
|
||||
|
||||
# If the AutoIndex source directory was found, mark its main target
|
||||
# as a dependency for the current project. Otherwise, try to find
|
||||
# 'auto-index' in user's PATH
|
||||
if $(auto-index-dir)
|
||||
{
|
||||
auto-index-dir = [ path.make $(auto-index-dir[1]) ] ;
|
||||
auto-index-dir = $(auto-index-dir)/build ;
|
||||
|
||||
#ECHO $(auto-index-dir) ;
|
||||
|
||||
# Get the main-target in AutoIndex directory.
|
||||
local auto-index-main-target = [ targets.resolve-reference $(auto-index-dir) : $(project) ] ;
|
||||
|
||||
#ECHO $(auto-index-main-target) ;
|
||||
|
||||
# The first element are actual targets, the second are
|
||||
# properties found in target-id. We do not care about these
|
||||
# since we have passed the id ourselves.
|
||||
auto-index-main-target =
|
||||
[ $(auto-index-main-target[1]).main-target auto_index ] ;
|
||||
|
||||
#ECHO $(auto-index-main-target) ;
|
||||
|
||||
auto-index-binary-dependencies =
|
||||
[ $(auto-index-main-target).generate [ $(property-set).propagated ] ] ;
|
||||
|
||||
# Ignore usage-requirements returned as first element.
|
||||
auto-index-binary-dependencies = $(auto-index-binary-dependencies[2-]) ;
|
||||
|
||||
# Some toolsets generate extra targets (e.g. RSP). We must mark
|
||||
# all targets as dependencies for the project, but we will only
|
||||
# use the EXE target for auto-index-to-boostbook translation.
|
||||
for local target in $(auto-index-binary-dependencies)
|
||||
{
|
||||
if [ $(target).type ] = EXE
|
||||
{
|
||||
auto-index-binary =
|
||||
[ path.native
|
||||
[ path.join
|
||||
[ $(target).path ]
|
||||
[ $(target).name ]
|
||||
]
|
||||
] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ECHO "AutoIndex warning: The path to the auto-index executable was" ;
|
||||
ECHO " not provided. Additionally, couldn't find AutoIndex" ;
|
||||
ECHO " sources searching in" ;
|
||||
ECHO " * BOOST_ROOT/tools/auto-index" ;
|
||||
ECHO " * BOOST_BUILD_PATH/../../auto-index" ;
|
||||
ECHO " Will now try to find a precompiled executable by searching" ;
|
||||
ECHO " the PATH for 'auto-index'." ;
|
||||
ECHO " To disable this warning in the future, or to completely" ;
|
||||
ECHO " avoid compilation of auto-index, you can explicitly set the" ;
|
||||
ECHO " path to a auto-index executable command in user-config.jam" ;
|
||||
ECHO " or site-config.jam with the call" ;
|
||||
ECHO " using auto-index : /path/to/auto-index ;" ;
|
||||
|
||||
# As a last resort, search for 'auto-index' command in path. Note
|
||||
# that even if the 'auto-index' command is not found,
|
||||
# get-invocation-command will still return 'auto-index' and might
|
||||
# generate an error while generating the virtual-target.
|
||||
|
||||
auto-index-binary = [ common.get-invocation-command auto-index : auto-index ] ;
|
||||
}
|
||||
}
|
||||
|
||||
# Add $(auto-index-binary-dependencies) as a dependency of the current
|
||||
# project and set it as the <auto-index-binary> feature for the
|
||||
# auto-index-to-boostbook rule, below.
|
||||
property-set = [ $(property-set).add-raw
|
||||
<dependency>$(auto-index-binary-dependencies)
|
||||
<auto-index-binary>$(auto-index-binary)
|
||||
<auto-index-binary-dependencies>$(auto-index-binary-dependencies)
|
||||
] ;
|
||||
|
||||
#ECHO "binary = " $(auto-index-binary) ;
|
||||
#ECHO "dependencies = " $(auto-index-binary-dependencies) ;
|
||||
|
||||
if [ $(property-set).get <auto-index> ] = "on"
|
||||
{
|
||||
return [ generator.run $(project) $(name) : $(property-set) : $(sources) ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
return [ generators.construct $(project) $(name) : DOCBOOK : $(property-set)
|
||||
: $(sources) ] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Initialization of toolset.
|
||||
#
|
||||
# Parameters:
|
||||
# command ? -> path to AutoIndex executable.
|
||||
#
|
||||
# When command is not supplied toolset will search for AutoIndex directory and
|
||||
# compile the executable from source. If that fails we still search the path for
|
||||
# 'auto_index'.
|
||||
#
|
||||
rule init (
|
||||
command ? # path to the AutoIndex executable.
|
||||
)
|
||||
{
|
||||
if ! $(.initialized)
|
||||
{
|
||||
.initialized = true ;
|
||||
.command = $(command) ;
|
||||
}
|
||||
}
|
||||
|
||||
toolset.flags auto-index.auto-index AI-COMMAND <auto-index-binary> ;
|
||||
toolset.flags auto-index.auto-index AI-DEPENDENCIES <auto-index-binary-dependencies> ;
|
||||
|
||||
generators.register [ class.new auto-index-generator auto-index.auto-index : DOCBOOK : DOCBOOK(%.auto_index) ] ;
|
||||
generators.override auto-index.auto-index : boostbook.boostbook-to-docbook ;
|
||||
|
||||
rule auto-index ( target : source : properties * )
|
||||
{
|
||||
# Signal dependency of auto-index sources on <auto-index-binary-dependencies>
|
||||
# upon invocation of auto-index-to-boostbook.
|
||||
#ECHO "AI-COMMAND= " $(AI-COMMAND) ;
|
||||
DEPENDS $(target) : [ on $(target) return $(AI-DEPENDENCIES) ] ;
|
||||
#DEPENDS $(target) : [ on $(target) return $(SCRIPT) ] ;
|
||||
}
|
||||
|
||||
actions auto-index
|
||||
{
|
||||
$(AI-COMMAND) $(FLAGS) "--prefix="$(PREFIX) "--script="$(SCRIPT) "--index-type="$(INDEX_TYPE) "--in="$(>) "--out="$(<)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user