diff options
author | Beman Dawes <bdawes@acm.org> | 2008-08-12 12:44:50 +0000 |
---|---|---|
committer | Beman Dawes <bdawes@acm.org> | 2008-08-12 12:44:50 +0000 |
commit | a8af51b87452198b6aab0efc6a13168f6cfa1b94 (patch) | |
tree | 12a1352746468e3657a6c15f7d6d6c606a84b7d7 | |
parent | ce5e16b6ae28e66369cdcfc6c416db64fd0298ba (diff) | |
parent | 99c7b5a9d591f0047be4da8de20fa806a4626a25 (diff) | |
download | boost-a8af51b87452198b6aab0efc6a13168f6cfa1b94.tar.gz |
1.36.0
[SVN r48100]
359 files changed, 35458 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules index d72a772305..937d16a69f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,339 @@ path = libs/smart_ptr url = ../smart_ptr.git fetchRecurseSubmodules = on-demand +[submodule "quickbook"] + path = tools/quickbook + url = ../quickbook.git + fetchRecurseSubmodules = on-demand +[submodule "rational"] + path = libs/rational + url = ../rational.git + fetchRecurseSubmodules = on-demand +[submodule "iterator"] + path = libs/iterator + url = ../iterator.git + fetchRecurseSubmodules = on-demand +[submodule "litre"] + path = tools/litre + url = ../litre.git + fetchRecurseSubmodules = on-demand +[submodule "build"] + path = tools/build + url = ../build.git + fetchRecurseSubmodules = on-demand +[submodule "bcp"] + path = tools/bcp + url = ../bcp.git + fetchRecurseSubmodules = on-demand +[submodule "filesystem"] + path = libs/filesystem + url = ../filesystem.git + fetchRecurseSubmodules = on-demand +[submodule "crc"] + path = libs/crc + url = ../crc.git + fetchRecurseSubmodules = on-demand +[submodule "any"] + path = libs/any + url = ../any.git + fetchRecurseSubmodules = on-demand +[submodule "preprocessor"] + path = libs/preprocessor + url = ../preprocessor.git + fetchRecurseSubmodules = on-demand +[submodule "spirit"] + path = libs/spirit + url = ../spirit.git + fetchRecurseSubmodules = on-demand +[submodule "static_assert"] + path = libs/static_assert + url = ../static_assert.git + fetchRecurseSubmodules = on-demand +[submodule "array"] + path = libs/array + url = ../array.git + fetchRecurseSubmodules = on-demand +[submodule "multi_array"] + path = libs/multi_array + url = ../multi_array.git + fetchRecurseSubmodules = on-demand +[submodule "intrusive"] + path = libs/intrusive + url = ../intrusive.git + fetchRecurseSubmodules = on-demand +[submodule "statechart"] + path = libs/statechart + url = ../statechart.git + fetchRecurseSubmodules = on-demand +[submodule "xpressive"] + path = libs/xpressive + url = ../xpressive.git + fetchRecurseSubmodules = on-demand +[submodule "inspect"] + path = tools/inspect + url = ../inspect.git + fetchRecurseSubmodules = on-demand +[submodule "thread"] + path = libs/thread + url = ../thread.git + fetchRecurseSubmodules = on-demand +[submodule "config"] + path = libs/config + url = ../config.git + fetchRecurseSubmodules = on-demand +[submodule "assign"] + path = libs/assign + url = ../assign.git + fetchRecurseSubmodules = on-demand +[submodule "functional"] + path = libs/functional + url = ../functional.git + fetchRecurseSubmodules = on-demand +[submodule "format"] + path = libs/format + url = ../format.git + fetchRecurseSubmodules = on-demand +[submodule "detail"] + path = libs/detail + url = ../detail.git + fetchRecurseSubmodules = on-demand +[submodule "signals"] + path = libs/signals + url = ../signals.git + fetchRecurseSubmodules = on-demand +[submodule "exception"] + path = libs/exception + url = ../exception.git + fetchRecurseSubmodules = on-demand +[submodule "tr1"] + path = libs/tr1 + url = ../tr1.git + fetchRecurseSubmodules = on-demand +[submodule "unordered"] + path = libs/unordered + url = ../unordered.git + fetchRecurseSubmodules = on-demand +[submodule "tokenizer"] + path = libs/tokenizer + url = ../tokenizer.git + fetchRecurseSubmodules = on-demand +[submodule "gil"] + path = libs/gil + url = ../gil.git + fetchRecurseSubmodules = on-demand +[submodule "compatibility"] + path = libs/compatibility + url = ../compatibility.git + fetchRecurseSubmodules = on-demand +[submodule "typeof"] + path = libs/typeof + url = ../typeof.git + fetchRecurseSubmodules = on-demand +[submodule "function_types"] + path = libs/function_types + url = ../function_types.git + fetchRecurseSubmodules = on-demand +[submodule "interprocess"] + path = libs/interprocess + url = ../interprocess.git + fetchRecurseSubmodules = on-demand +[submodule "algorithm"] + path = libs/algorithm + url = ../algorithm.git + fetchRecurseSubmodules = on-demand +[submodule "compose"] + path = libs/compose + url = ../compose.git + fetchRecurseSubmodules = on-demand +[submodule "asio"] + path = libs/asio + url = ../asio.git + fetchRecurseSubmodules = on-demand +[submodule "variant"] + path = libs/variant + url = ../variant.git + fetchRecurseSubmodules = on-demand +[submodule "logic"] + path = libs/logic + url = ../logic.git + fetchRecurseSubmodules = on-demand +[submodule "iostreams"] + path = libs/iostreams + url = ../iostreams.git + fetchRecurseSubmodules = on-demand +[submodule "ptr_container"] + path = libs/ptr_container + url = ../ptr_container.git + fetchRecurseSubmodules = on-demand +[submodule "io"] + path = libs/io + url = ../io.git + fetchRecurseSubmodules = on-demand +[submodule "multi_index"] + path = libs/multi_index + url = ../multi_index.git + fetchRecurseSubmodules = on-demand +[submodule "conversion"] + path = libs/conversion + url = ../conversion.git + fetchRecurseSubmodules = on-demand +[submodule "type_traits"] + path = libs/type_traits + url = ../type_traits.git + fetchRecurseSubmodules = on-demand +[submodule "system"] + path = libs/system + url = ../system.git + fetchRecurseSubmodules = on-demand +[submodule "optional"] + path = libs/optional + url = ../optional.git + fetchRecurseSubmodules = on-demand +[submodule "program_options"] + path = libs/program_options + url = ../program_options.git + fetchRecurseSubmodules = on-demand +[submodule "bind"] + path = libs/bind + url = ../bind.git + fetchRecurseSubmodules = on-demand +[submodule "python"] + path = libs/python + url = ../python.git + fetchRecurseSubmodules = on-demand +[submodule "accumulators"] + path = libs/accumulators + url = ../accumulators.git + fetchRecurseSubmodules = on-demand +[submodule "units"] + path = libs/units + url = ../units.git + fetchRecurseSubmodules = on-demand +[submodule "foreach"] + path = libs/foreach + url = ../foreach.git + fetchRecurseSubmodules = on-demand +[submodule "lambda"] + path = libs/lambda + url = ../lambda.git + fetchRecurseSubmodules = on-demand +[submodule "parameter"] + path = libs/parameter + url = ../parameter.git + fetchRecurseSubmodules = on-demand +[submodule "concept_check"] + path = libs/concept_check + url = ../concept_check.git + fetchRecurseSubmodules = on-demand +[submodule "math"] + path = libs/math + url = ../math.git + fetchRecurseSubmodules = on-demand +[submodule "bimap"] + path = libs/bimap + url = ../bimap.git + fetchRecurseSubmodules = on-demand +[submodule "timer"] + path = libs/timer + url = ../timer.git + fetchRecurseSubmodules = on-demand +[submodule "graph_parallel"] + path = libs/graph_parallel + url = ../graph_parallel.git + fetchRecurseSubmodules = on-demand +[submodule "disjoint_sets"] + path = libs/disjoint_sets + url = ../disjoint_sets.git + fetchRecurseSubmodules = on-demand +[submodule "graph"] + path = libs/graph + url = ../graph.git + fetchRecurseSubmodules = on-demand +[submodule "dynamic_bitset"] + path = libs/dynamic_bitset + url = ../dynamic_bitset.git + fetchRecurseSubmodules = on-demand +[submodule "mpi"] + path = libs/mpi + url = ../mpi.git + fetchRecurseSubmodules = on-demand +[submodule "mpl"] + path = libs/mpl + url = ../mpl.git + fetchRecurseSubmodules = on-demand +[submodule "tuple"] + path = libs/tuple + url = ../tuple.git + fetchRecurseSubmodules = on-demand +[submodule "test"] + path = libs/test + url = ../test.git + fetchRecurseSubmodules = on-demand +[submodule "integer"] + path = libs/integer + url = ../integer.git + fetchRecurseSubmodules = on-demand +[submodule "serialization"] + path = libs/serialization + url = ../serialization.git + fetchRecurseSubmodules = on-demand +[submodule "circular_buffer"] + path = libs/circular_buffer + url = ../circular_buffer.git + fetchRecurseSubmodules = on-demand +[submodule "boostbook"] + path = tools/boostbook + url = ../boostbook.git + fetchRecurseSubmodules = on-demand +[submodule "wave"] + path = libs/wave + url = ../wave.git + fetchRecurseSubmodules = on-demand +[submodule "date_time"] + path = libs/date_time + url = ../date_time.git + fetchRecurseSubmodules = on-demand +[submodule "range"] + path = libs/range + url = ../range.git + fetchRecurseSubmodules = on-demand +[submodule "pool"] + path = libs/pool + url = ../pool.git + fetchRecurseSubmodules = on-demand +[submodule "property_map"] + path = libs/property_map + url = ../property_map.git + fetchRecurseSubmodules = on-demand +[submodule "interval"] + path = libs/numeric/interval + url = ../interval.git + fetchRecurseSubmodules = on-demand +[submodule "numeric_conversion"] + path = libs/numeric/conversion + url = ../numeric_conversion.git + fetchRecurseSubmodules = on-demand +[submodule "ublas"] + path = libs/numeric/ublas + url = ../ublas.git + fetchRecurseSubmodules = on-demand +[submodule "fusion"] + path = libs/fusion + url = ../fusion.git + fetchRecurseSubmodules = on-demand +[submodule "utility"] + path = libs/utility + url = ../utility.git + fetchRecurseSubmodules = on-demand +[submodule "function"] + path = libs/function + url = ../function.git + fetchRecurseSubmodules = on-demand +[submodule "regex"] + path = libs/regex + url = ../regex.git + fetchRecurseSubmodules = on-demand +[submodule "random"] + path = libs/random + url = ../random.git + fetchRecurseSubmodules = on-demand diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000000..0f669e6db7 --- /dev/null +++ b/INSTALL @@ -0,0 +1,8 @@ +See ./index.html for information about this release. The "Getting Started" +section is a useful starting place. + +--------------------------- +Copyright Beman Dawes, 2008 + +Distributed under the Boost Software License, Version 1.0. +See ./LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt
\ No newline at end of file diff --git a/Jamroot b/Jamroot new file mode 100644 index 0000000000..2de4c68d77 --- /dev/null +++ b/Jamroot @@ -0,0 +1,508 @@ +# Copyright Vladimir Prus 2002-2006. +# Copyright Dave Abrahams 2005-2006. +# Copyright Rene Rivera 2005-2007. +# Copyright Douglas Gregor 2005. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +# Usage: +# +# bjam [options] [install|stage] +# +# Builds and installs Boost. +# +# Targets and Related Options: +# +# install Install headers and compiled library files to the +# ======= configured locations (below). +# +# --prefix=<PREFIX> Install architecture independent files here. +# Default; C:\Boost on Win32 +# Default; /usr/local on Unix. Linux, etc. +# +# --exec-prefix=<EPREFIX> Install architecture dependent files here. +# Default; <PREFIX> +# +# --libdir=<DIR> Install library files here. +# Default; <EPREFIX>/lib +# +# --includedir=<HDRDIR> Install header files here. +# Default; <PREFIX>/include +# +# stage Build and install only compiled library files +# ===== to the stage directory. +# +# --stagedir=<STAGEDIR> Install library files here +# Default; ./stage +# +# Other Options: +# +# --build-type=<type> Build the specified pre-defined set of variations +# of the libraries. Note, that which variants get +# built depends on what each library supports. +# +# minimal (default) - Builds the single +# "release" version of the libraries. This +# release corresponds to specifying: +# "release <threading>multi <link>shared +# <link>static <runtime-link>shared" as the +# Boost.Build variant to build. +# +# complete - Attempts to build all possible +# variations. +# +# --build-dir=DIR Build in this location instead of building +# within the distribution tree. Recommended! +# +# --toolset=toolset Indicates the toolset to build with. +# +# --show-libraries Displays the list of Boost libraries that require +# build and installation steps, then exit. +# +# --layout=<layout> Determines whether to choose library names +# and header locations such that multiple +# versions of Boost or multiple compilers can +# be used on the same system. +# +# versioned (default) - Names of boost +# binaries include the Boost version +# number and the name and version of the +# compiler. Boost headers are installed +# in a subdirectory of <HDRDIR> whose +# name contains the Boost version +# number. +# +# system - Binaries names do not include +# the Boost version number or the name +# and version number of the compiler. +# Boost headers are installed directly +# into <HDRDIR>. This option is +# intended for system integrators who +# are building distribution packages. +# +# --buildid=ID Adds the specified ID to the name of built +# libraries. The default is to not add anything. +# +# --help This message. +# +# --with-<library> Build and install the specified <library> +# If this option is used, only libraries +# specified using this option will be built. +# +# --without-<library> Do not build, stage, or install the specified +# <library>. By default, all libraries are built. + +# TODO: +# - handle boost version +# - handle python options such as pydebug + +import generate ; +import modules ; +import set ; +import stage ; +import package ; +import path ; +import common ; +import os ; +import regex ; +import errors ; +import "class" : new ; +import common ; +import sequence ; +import symlink ; + +path-constant BOOST_ROOT : . ; +constant BOOST_VERSION : 1.36.0 ; +constant BOOST_JAMROOT_MODULE : $(__name__) ; + +local version-tag = [ MATCH "^([^.]+)[.]([^.]+)[.]([^.]+)" : $(BOOST_VERSION) ] ; +if $(version-tag[3]) = 0 +{ + version-tag = $(version-tag[1-2]) ; +} + +constant BOOST_VERSION_TAG : $(version-tag:J="_") ; + +# Option to choose how many variants to build. The default is "minimal", +# which builds only the "release <threading>multi <link>shared" variant. +local build-type = [ MATCH "^--build-type=(.*)" : [ modules.peek : ARGV ] ] ; +build-type ?= minimal ; +if ! ( $(build-type) in minimal complete ) +{ + build-type = minimal ; +} + +# Specify the build variants keyed on the build-type. +local default-build,minimal = + release + <threading>multi + <link>shared <link>static + <runtime-link>shared + ; +local default-build,complete = + debug release + <threading>single <threading>multi + <link>shared <link>static + <runtime-link>shared <runtime-link>static + ; + +# Set the default build. +local default-build = $(default-build,$(build-type)) ; + +# We only use the default build when building at the root to +# avoid having it impact the default regression testing of "debug". +# TODO: Consider having a "testing" build type instead of this check. +if $(__file__:D) != "" +{ + default-build = debug ; +} + + +rule handle-static-runtime ( properties * ) +{ + # This property combination is dangerous. + # Ideally, we'd add constraint to default build, + # so that user can build with property combination + # by hand. But we don't have any 'constraint' mechanism + # for default-build, so disable such builds in requirements. + + # For CW, static runtime is needed so that + # std::locale works. + if <link>shared in $(properties) + && <runtime-link>static in $(properties) + && ! ( <toolset>cw in $(properties) ) + { + return <build>no ; + } +} + + +project boost + : requirements <include>. + # disable auto-linking for all targets here, + # primarily because it caused troubles with V2 + <define>BOOST_ALL_NO_LIB=1 + # Used to encode variant in target name. See the + # 'tag' rule below. + <tag>@$(__name__).tag + <conditional>@handle-static-runtime + + : usage-requirements <include>. + : build-dir bin.v2 + : default-build $(default-build) + ; + +# Setup convenient aliases for all libraries. + +all-libraries = + [ MATCH .*libs/(.*)/build/.* : [ glob libs/*/build/Jamfile.v2 ] [ glob libs/*/build/Jamfile ] ] + ; + +all-libraries = [ sequence.unique $(all-libraries) ] ; + +# First, the complicated libraries: where the target name in +# Jamfile is different from directory name. +alias prg_exec_monitor : libs/test/build//boost_prg_exec_monitor ; +alias test_exec_monitor : libs/test/build//boost_test_exec_monitor ; +alias unit_test_framework : libs/test/build//boost_unit_test_framework ; +alias bgl-vis : libs/graps/build//bgl-vis ; +alias serialization : libs/serialization/build//boost_serialization ; +alias wserialization : libs/serialization/build//boost_wserialization ; + +explicit prg_exec_monitor test_exec_monitor unit_test_framework + bgl-vis serialization wserialization ; + +for local l in $(all-libraries) +{ + if ! $(l) in test graph serialization + { + alias $(l) : libs/$(l)/build//boost_$(l) ; + explicit $(l) ; + } +} + +alias headers : : : : <include>. ; + + +# Decides which libraries are to be installed by looking at --with-<library> +# --without-<library> arguments. Returns the list of directories under "libs" +# which must be built at installed. +rule libraries-to-install ( existing-libraries * ) +{ + local argv = [ modules.peek : ARGV ] ; + local with-parameter = [ MATCH --with-(.*) : $(argv) ] ; + local without-parameter = [ MATCH --without-(.*) : $(argv) ] ; + + # Do some checks + if $(with-parameter) && $(without-parameter) + { + ECHO "error: both --with-<library> and --without-<library> specified" ; + EXIT ; + } + + local wrong = [ set.difference $(with-parameter) : $(existing-libraries) ] ; + if $(wrong) + { + ECHO "error: wrong library name '$(wrong[1])' in the --with-<library> option." ; + EXIT ; + } + local wrong = [ set.difference $(without-parameter) : $(existing-libraries) ] ; + if $(wrong) + { + ECHO "error: wrong library name '$(wrong[1])' in the --without-<library> option." ; + EXIT ; + } + + if $(with-parameter) + { + return [ set.intersection $(existing-libraries) : $(with-parameter) ] ; + } + else + { + return [ set.difference $(existing-libraries) : $(without-parameter) ] ; + } +} + +# what kind of layout are we doing? +layout = [ MATCH "^--layout=(.*)" : [ modules.peek : ARGV ] ] ; +layout ?= versioned ; +layout-$(layout) = true ; + +# possible stage only location +local stage-locate = [ MATCH "^--stagedir=(.*)" : [ modules.peek : ARGV ] ] ; +stage-locate ?= stage ; + +path-constant BOOST_STAGE_LOCATE : $(stage-locate) ; + + +# location of python +local python-root = [ MATCH "^--with-python-root=(.*)" : [ modules.peek : ARGV ] ] ; +PYTHON_ROOT ?= $(python-root) ; + +# Select the libraries to install. +libraries = [ libraries-to-install $(all-libraries) ] ; + +if --show-libraries in [ modules.peek : ARGV ] +{ + ECHO "The following libraries require building:" ; + for local l in $(libraries) + { + ECHO " - $(l)" ; + } + EXIT ; +} + +# Custom build ID. +local build-id = [ MATCH "^--buildid=(.*)" : [ modules.peek : ARGV ] ] ; +if $(build-id) +{ + constant BUILD_ID : [ regex.replace $(build-id) "[*\\/:.\"\' ]" "_" ] ; +} + +# This rule is called by Boost.Build to determine the name of +# target. We use it to encode build variant, compiler name and +# boost version in the target name +rule tag ( name : type ? : property-set ) +{ + if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB + { + if $(layout) = versioned + { + local result = [ common.format-name + <base> <toolset> <threading> <runtime> -$(BOOST_VERSION_TAG) + -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + + # Optionally add version suffix. + # On NT, library with version suffix won't be recognized + # by linkers. On CYGWIN, we get strage duplicate symbol + # errors when library is generated with version suffix. + # On OSX, version suffix is not needed -- the linker expets + # libFoo.1.2.3.dylib format. + # AIX linkers don't accept version suffixes either. + # Pgi compilers can't accept library with version suffix + if $(type) = SHARED_LIB && + ( ! ( [ $(property-set).get <target-os> ] in windows cygwin darwin aix ) && + ! ( [ $(property-set).get <toolset> ] in pgi ) ) + { + result = $(result).$(BOOST_VERSION) ; + } + + return $(result) ; + } + else + { + return [ common.format-name + <base> <threading> <runtime> -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + } + } +} + +# Install to system location. + +local install-requirements = + <install-source-root>boost + ; +if $(layout-versioned) +{ + install-requirements += <install-header-subdir>boost-$(BOOST_VERSION_TAG)/boost ; +} +else +{ + install-requirements += <install-header-subdir>boost ; +} +if [ modules.peek : NT ] +{ + install-requirements += <install-default-prefix>C:/Boost ; +} +else if [ modules.peek : UNIX ] +{ + install-requirements += <install-default-prefix>/usr/local ; +} + +local headers = + [ path.glob-tree boost : *.hpp *.ipp *.h *.inc : CVS ] + [ path.glob-tree boost/compatibility/cpp_c_headers : c* : CVS ] + ; + + +# Complete install +package.install install-proper + : $(install-requirements) <install-no-version-symlinks>on + : + : libs/$(libraries)/build + : $(headers) + ; +explicit install-proper ; + +# Install just library. +install stage-proper + : libs/$(libraries)/build + : <location>$(stage-locate)/lib + <install-dependencies>on <install-type>LIB + <install-no-version-symlinks>on + ; +explicit stage-proper ; + + +if $(layout-versioned) + && ( [ modules.peek : NT ] || [ modules.peek : UNIX ] ) +{ + rule make-unversioned-links ( project name ? : property-set : sources * ) + { + local result ; + local filtered ; + local pattern ; + local nt = [ modules.peek : NT ] ; + + # Collect the libraries that have the version number in 'filtered'. + for local s in $(sources) + { + local m ; + if $(nt) + { + m = [ MATCH "(.*[.]lib)" : [ $(s).name ] ] ; + } + else + { + m = [ MATCH "(.*[.]so[.0-9]+)" "(.*[.]dylib)" "(.*[.]a)" : [ $(s).name ] ] ; + } + if $(m) + { + filtered += $(s) ; + } + } + + # Create links without version. + for local s in $(filtered) + { + local name = [ $(s).name ] ; + local ea = [ $(s).action ] ; + local ep = [ $(ea).properties ] ; + local a = [ + new non-scanning-action $(s) : symlink.ln : $(ep) ] ; + + local noversion-file ; + if $(nt) + { + noversion-file = [ MATCH "(.*)-[0-9_]+([.]lib)" : $(name) ] ; + } + else + { + noversion-file = + [ MATCH "(.*)-[0-9_]+([.]so)[.0-9]*" : $(name) ] + [ MATCH "(.*)-[0-9_]+([.]dylib)" : $(name) ] + [ MATCH "(.*)-[0-9_]+([.]a)" : $(name) ] + [ MATCH "(.*)-[0-9_]+([.]dll[.]a)" : $(name) ] ; + } + + local new-name = + $(noversion-file[1])$(noversion-file[2]) ; + result += [ new file-target $(new-name) exact : [ $(s).type ] : $(project) + : $(a) ] ; + + } + return $(result) ; + } + + generate stage-unversioned : stage-proper : + <generating-rule>@make-unversioned-links ; + explicit stage-unversioned ; + + generate install-unversioned : install-proper : + <generating-rule>@make-unversioned-links ; + explicit install-unversioned ; +} +else +{ + # Create do-nothing aliases + alias stage-unversioned ; + explicit stage-unversioned ; + alias install-unversioned ; + explicit install-unversioned ; +} + +alias install : install-proper install-unversioned ; +alias stage : stage-proper stage-unversioned ; +explicit install ; +explicit stage ; + + +# Just build the libraries, don't install them anywhere. +# This is what happens with just "bjam --v2". +alias build_all : libs/$(libraries)/build ; + +# This rule should be called from libraries' Jamfiles and will +# create two targets, "install" and "stage", that will install +# or stage that library. The --prefix option is respected, but +# --with and --without options, naturally, are ignored. +# +# - libraries -- list of library targets to install. +rule boost-install ( libraries * ) +{ + package.install install + : <dependency>/boost//install-headers $(install-requirements) + : # No binaries + : $(libraries) + : # No headers, it's handled by the dependency + ; + + install stage : $(libraries) : <location>$(BOOST_STAGE_LOCATE) ; + + local c = [ project.current ] ; + local project-module = [ $(c).project-module ] ; + module $(project-module) + { + explicit stage ; + explicit install ; + } +} + +# Make project ids of all libraries known. +for local l in $(all-libraries) +{ + use-project /boost/$(l) : libs/$(l)/build ; +} diff --git a/LICENSE_1_0.txt b/LICENSE_1_0.txt new file mode 100644 index 0000000000..36b7cd93cd --- /dev/null +++ b/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/boost-build.jam b/boost-build.jam new file mode 100644 index 0000000000..1ba9dd2de3 --- /dev/null +++ b/boost-build.jam @@ -0,0 +1,16 @@ +# Copyright (C) 2002-2003 David Abrahams. +# Copyright (C) 2002-2003 Vladimir Prus. +# Copyright (C) 2003,2007 Rene Rivera. +# Use, modification and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +# This is the initial file loaded by Boost Jam when run from any Boost library +# folder. It allows us to choose which Boost Build installation to use for +# building Boost libraries. Unless explicitly selected using a command-line +# option, the version included with the Boost library distribution is used (as +# opposed to any other Boost Build version installed on the user's sytem). +BOOST_ROOT = $(.boost-build-file:D) ; +BOOST_BUILD = [ MATCH --boost-build=(.*) : $(ARGV) ] ; +BOOST_BUILD ?= tools/build/v2 ; +boost-build $(BOOST_BUILD) ; diff --git a/boost.css b/boost.css new file mode 100644 index 0000000000..9f8d4bda8f --- /dev/null +++ b/boost.css @@ -0,0 +1,65 @@ +/*============================================================================= + Copyright 2002 William E. Kempf + Distributed under the Boost Software License, Version 1.0. (See accompany- + ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +H1 +{ + FONT-SIZE: 200%; + COLOR: #00008B; +} +H2 +{ + FONT-SIZE: 150%; +} +H3 +{ + FONT-SIZE: 125%; +} +H4 +{ + FONT-SIZE: 108%; +} +BODY +{ + FONT-SIZE: 100%; + BACKGROUND-COLOR: #ffffff; +} +PRE +{ + MARGIN-LEFT: 2em; + FONT-FAMILY: Courier, + monospace; +} +CODE +{ + FONT-FAMILY: Courier, + monospace; +} +CODE.as_pre +{ + white-space: pre; +} +.index +{ + TEXT-ALIGN: left; +} +.page-index +{ + TEXT-ALIGN: left; +} +.definition +{ + TEXT-ALIGN: left; +} +.footnote +{ + FONT-SIZE: 66%; + VERTICAL-ALIGN: super; + TEXT-DECORATION: none; +} +.function-semantics +{ + CLEAR: left; +}
\ No newline at end of file diff --git a/boost.png b/boost.png Binary files differnew file mode 100644 index 0000000000..b4d51fcd5c --- /dev/null +++ b/boost.png diff --git a/configure b/configure new file mode 100755 index 0000000000..4e967e6227 --- /dev/null +++ b/configure @@ -0,0 +1,368 @@ +#!/bin/sh +# Copyright (C) 2005, 2006 Douglas Gregor. +# Copyright (C) 2006 The Trustees of Indiana University +# +# 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) + +# boostinspect:notab - Tabs are required for the Makefile. + +BJAM="" +TOOLSET="" +BJAM_CONFIG="" +BUILD="" +PREFIX=/usr/local +EPREFIX= +LIBDIR= +INCLUDEDIR= +LIBS="" +PYTHON=python +PYTHON_VERSION= +PYTHON_ROOT= +ICU_ROOT= + +# Internal flags +flag_no_python= +flag_icu= +flag_show_libraries= + +for option +do + case $option in + + -help | --help | -h) + want_help=yes ;; + + -prefix=* | --prefix=*) + PREFIX=`expr "x$option" : "x-*prefix=\(.*\)"` + ;; + + -exec-prefix=* | --exec-prefix=*) + EPREFIX=`expr "x$option" : "x-*exec-prefix=\(.*\)"` + ;; + + -libdir=* | --libdir=*) + LIBDIR=`expr "x$option" : "x-*libdir=\(.*\)"` + ;; + + -includedir=* | --includedir=*) + INCLUDEDIR=`expr "x$option" : "x-*includedir=\(.*\)"` + ;; + + -show-libraries | --show-libraries ) + flag_show_libraries=yes + ;; + + -with-bjam=* | --with-bjam=* ) + BJAM=`expr "x$option" : "x-*with-bjam=\(.*\)"` + ;; + + -with-icu | --with-icu ) + flag_icu=yes + ;; + + -with-icu=* | --with-icu=* ) + flag_icu=yes + ICU_ROOT=`expr "x$option" : "x-*with-icu=\(.*\)"` + ;; + + -without-icu | --without-icu ) + flag_icu=no + ;; + + -with-libraries=* | --with-libraries=* ) + library_list=`expr "x$option" : "x-*with-libraries=\(.*\)"` + if test "$library_list" != "all"; then + old_IFS=$IFS + IFS=, + for library in $library_list + do + LIBS="$LIBS --with-$library" + + if test $library = python; then + requested_python=yes + fi + done + IFS=$old_IFS + + if test "x$requested_python" != xyes; then + flag_no_python=yes + fi + fi + ;; + + -without-libraries=* | --without-libraries=* ) + library_list=`expr "x$option" : "x-*without-libraries=\(.*\)"` + old_IFS=$IFS + IFS=, + for library in $library_list + do + LIBS="$LIBS --without-$library" + + if test $library = python; then + flag_no_python=yes + fi + done + IFS=$old_IFS + ;; + + -with-python=* | --with-python=* ) + PYTHON=`expr "x$option" : "x-*with-python=\(.*\)"` + ;; + + -with-python-root=* | --with-python-root=* ) + PYTHON_ROOT=`expr "x$option" : "x-*with-python-root=\(.*\)"` + ;; + + -with-python-version=* | --with-python-version=* ) + PYTHON_VERSION=`expr "x$option" : "x-*with-python-version=\(.*\)"` + ;; + + -with-toolset=* | --with-toolset=* ) + TOOLSET=`expr "x$option" : "x-*with-toolset=\(.*\)"` + ;; + + -*) + { echo "error: unrecognized option: $option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + esac +done + +if test "x$want_help" = xyes; then + cat <<EOF +\`configure' configures Boost to adapt to a few kinds of systems. + +Usage: $0 [OPTION]... + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --with-bjam=BJAM use existing Boost.Jam executable (bjam) + [automatically built] + --with-toolset=TOOLSET use specific Boost.Build toolset + [automatically detected] + --show-libraries show the set of libraries that require build + and installation steps (i.e., those libraries + that can be used with --with-libraries or + --without-libraries), then exit + --with-libraries=list build only a particular set of libraries, + describing using either a comma-separated list of + library names or "all" + [all] + --without-libraries=list build all libraries except the ones listed [] + --with-icu enable Unicode/ICU support in Regex + [automatically detected] + --without-icu disable Unicode/ICU support in Regex + --with-icu=DIR specify the root of the ICU library installation + and enable Unicode/ICU support in Regex + [automatically detected] + --with-python=PYTHON specify the Python executable [python] + --with-python-root=DIR specify the root of the Python installation + [automatically detected] + --with-python-version=X.Y specify the Python version as X.Y + [automatically detected] + +Installation directories: + --prefix=PREFIX install Boost into the given PREFIX + [/usr/local] + --exec-prefix=EPREFIX install Boost binaries into the given EPREFIX + [PREFIX] + +More precise control over installation directories: + --libdir=DIR install libraries here [EPREFIX/lib] + --includedir=DIR install headers here [PREFIX/include] + +EOF +fi +test -n "$want_help" && exit 0 + +# TBD: Determine where the script is located +my_dir="." + +# Determine the toolset, if not already decided +if test "x$TOOLSET" = x; then + guessed_toolset=`$my_dir/tools/jam/src/build.sh --guess-toolset` + case $guessed_toolset in + acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp ) + TOOLSET=$guessed_toolset + ;; + + intel-* ) + TOOLSET=intel + ;; + + mingw ) + TOOLSET=gcc + ;; + + sun* ) + TOOLSET=sun + ;; + + * ) + # Not supported by Boost.Build + ;; + esac +fi + +rm -f config.log + +# Build bjam +if test "x$BJAM" = x; then + echo -n "Building Boost.Jam with toolset $TOOLSET... " + pwd=`pwd` + cd "$my_dir/tools/jam/src" && ./build.sh "$TOOLSET" > config.log 2>&1 + cd $pwd + arch=`cd $my_dir/tools/jam/src && ./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target && cd ..` + BJAM="$my_dir/tools/jam/src/$arch/bjam" + echo "tools/jam/src/$arch/bjam" +fi + +# TBD: Turn BJAM into an absolute path + +# If there is a list of libraries +if test "x$flag_show_libraries" = xyes; then + libraries=`$BJAM -d0 --show-libraries` + cat <<EOF + +The following Boost libraries have portions that require a separate build +and installation step. Any library not listed here can be used by including +the headers only. + +The Boost libraries requiring separate building and installation are: +EOF + for lib in $libraries + do + echo " $lib" + done + exit 0 +fi + +# Setup paths +if test "x$EPREFIX" = x; then + EPREFIX="\$(prefix)" +fi + +if test "x$LIBDIR" = x; then + LIBDIR="\$(exec_prefix)/lib" +fi + +if test "x$INCLUDEDIR" = x; then + INCLUDEDIR="\$(prefix)/include" +fi + +# Find Python +if test "x$flag_no_python" = x; then + result=`$PYTHON -c "exit" > /dev/null 2>&1` + if [ "$?" -ne "0" ]; then + flag_no_python=yes + fi +fi + +if test "x$flag_no_python" = x; then + if test "x$PYTHON_VERSION" = x; then + echo -n "Detecting Python version... " + PYTHON_VERSION=`$PYTHON -c "import sys; print (\"%d.%d\" % (sys.version_info[0], sys.version_info[1]))"` + echo $PYTHON_VERSION + fi + + if test "x$PYTHON_ROOT" = x; then + echo -n "Detecting Python root... " + PYTHON_ROOT=`$PYTHON -c "import sys; print sys.prefix"` + echo $PYTHON_ROOT + fi +fi + +# Configure ICU +echo -n "Unicode/ICU support for Boost.Regex?... " +if test "x$flag_icu" != xno; then + if test "x$ICU_ROOT" = x; then + COMMON_ICU_PATHS="/usr /usr/local /sw" + for p in $COMMON_ICU_PATHS; do + if test -r $p/include/unicode/utypes.h; then + ICU_ROOT=$p + fi + done + + if test "x$ICU_ROOT" = x; then + echo "not found." + else + BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT" + echo "$ICU_ROOT" + fi + else + BJAM_CONFIG="$BJAM_CONFIG -sICU_PATH=$ICU_ROOT" + echo "$ICU_ROOT" + fi +else + echo "disabled." +fi + +# Backup the user's existing user-config.jam +JAM_CONFIG_OUT="user-config.jam" +if test -r "user-config.jam"; then + counter=1 + + while test -r "user-config.jam.$counter"; do + counter=`expr $counter + 1` + done + + echo "Backing up existing Boost.Build configuration in user-config.jam.$counter" + mv "user-config.jam" "user-config.jam.$counter" +fi + +# Generate user-config.jam +echo "Generating Boost.Build configuration in user-config.jam..." +cat > user-config.jam <<EOF +# Boost.Build Configuration +# Automatically generated by Boost configure + +# Compiler configuration +using $TOOLSET ; +EOF + +# - Python configuration +if test "x$flag_no_python" = x; then + cat >> user-config.jam <<EOF + +# Python configuration +using python : $PYTHON_VERSION : $PYTHON_ROOT ; +EOF +fi + +# Generate the Makefile +echo "Generating Makefile..." +cat > Makefile <<EOF +BJAM=$BJAM +BJAM_CONFIG=$BJAM_CONFIG +prefix=$PREFIX +exec_prefix=$EPREFIX +libdir=$LIBDIR +includedir=$INCLUDEDIR +LIBS=$LIBS + +all: .dummy + @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS)" + @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS) || \\ + echo "Not all Boost libraries built properly." + +clean: .dummy + rm -rf bin.v2 + +distclean: clean + rm -rf Makefile config.log + +check: .dummy + @cd status && ../\$(BJAM) \$(BJAM_CONFIG) --user-config=../user-config.jam || echo "Some Boost regression tests failed. This is normal for many compilers." + +install: .dummy + @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(prefix) --exec-prefix=\$(exec_prefix) --libdir=\$(libdir) --includedir=\$(includedir) \$(LIBS) install" + @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(prefix) --exec-prefix=\$(exec_prefix) --libdir=\$(libdir) --includedir=\$(includedir) \$(LIBS) install || echo "Not all Boost libraries built properly." + +.dummy: + +EOF diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 new file mode 100644 index 0000000000..78fb0b40e0 --- /dev/null +++ b/doc/Jamfile.v2 @@ -0,0 +1,76 @@ +# Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +project boost/doc ; +import boostbook : boostbook ; + +alias asio : ../libs/asio/doc//asio/<xsl:param>boost.libraries=../../libs/libraries.htm ; + +boostbook doc + : + src/boost.xml + : + ## Build the various generated docs (Doxygen and QuickBook)... + + <dependency>../libs/accumulators/doc//accdoc.xml + <dependency>../libs/accumulators/doc//statsdoc.xml + <dependency>../libs/accumulators/doc//opdoc.xml + <dependency>../libs/accumulators/doc//accumulators + <dependency>../libs/program_options/doc//autodoc.xml + <dependency>../libs/algorithm/string/doc//autodoc.xml + <dependency>../libs/logic/doc//reference.xml + <dependency>../libs/functional/hash/doc//hash + #<dependency>../libs/type_traits/doc//type_traits + <dependency>../libs/static_assert/doc//static_assert + <dependency>../libs/tr1/doc//tr1 + <dependency>../libs/foreach/doc//foreach + <dependency>../libs/mpi/doc//mpi + <dependency>../libs/mpi/doc//mpi_autodoc.xml + <dependency>../libs/typeof/doc//typeof + <dependency>../libs/xpressive/doc//autodoc.xml + <dependency>../libs/xpressive/doc//xpressive + <dependency>../libs/date_time/xmldoc//date_time_autodoc.xml + <dependency>../libs/date_time/xmldoc//gregorian_autodoc.xml + <dependency>../libs/date_time/xmldoc//posix_time_autodoc.xml + <dependency>../libs/date_time/xmldoc//local_time_autodoc.xml + <dependency>../tools/jam/doc//bjam + <dependency>../libs/interprocess/doc//autodoc.xml + <dependency>../libs/interprocess/doc//interprocess + <dependency>../libs/intrusive/doc//autodoc.xml + <dependency>../libs/intrusive/doc//intrusive + <dependency>../libs/units/doc//units + <dependency>../libs/unordered/doc//unordered + <dependency>../libs/thread/doc//thread + + ## Add path references to the QuickBook generated docs... + + <implicit-dependency>../libs/accumulators/doc//accumulators + <implicit-dependency>../libs/functional/hash/doc//hash + #<implicit-dependency>../libs/type_traits/doc//type_traits + <implicit-dependency>../libs/static_assert/doc//static_assert + <implicit-dependency>../libs/tr1/doc//tr1 + <implicit-dependency>../libs/foreach/doc//foreach + <implicit-dependency>../libs/typeof/doc//typeof + <implicit-dependency>../libs/xpressive/doc//xpressive + <implicit-dependency>../tools/jam/doc//bjam + <implicit-dependency>../libs/mpi/doc//mpi + <implicit-dependency>../libs/interprocess/doc//interprocess + <implicit-dependency>../libs/intrusive/doc//intrusive + <implicit-dependency>../libs/units/doc//units + <implicit-dependency>../libs/unordered/doc//unordered + <implicit-dependency>../libs/thread/doc//thread + + <xsl:param>boost.libraries=../../libs/libraries.htm + + <dependency>css + <dependency>images + ; + +install css : [ glob src/*.css ] : <location>html ; +explicit css ; +install images : [ glob src/images/*.png ] : <location>html/images ; +explicit images ; + + diff --git a/doc/html/CopyConstructible.html b/doc/html/CopyConstructible.html new file mode 100644 index 0000000000..1b54c06451 --- /dev/null +++ b/doc/html/CopyConstructible.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/CopyConstructible.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/CopyConstructible.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/CopyConstructible.html</a> + </body> +</html> diff --git a/doc/html/any.html b/doc/html/any.html new file mode 100644 index 0000000000..1f9e5bbe04 --- /dev/null +++ b/doc/html/any.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/any.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/any.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/any.html</a> + </body> +</html> diff --git a/doc/html/array.html b/doc/html/array.html new file mode 100644 index 0000000000..fb09b4b23b --- /dev/null +++ b/doc/html/array.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/array.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/array.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/array.html</a> + </body> +</html> diff --git a/doc/html/bbv2.html b/doc/html/bbv2.html new file mode 100644 index 0000000000..c6f156a921 --- /dev/null +++ b/doc/html/bbv2.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2.html</a> + </body> +</html> diff --git a/doc/html/bbv2/installation.html b/doc/html/bbv2/installation.html new file mode 100644 index 0000000000..d265e3238b --- /dev/null +++ b/doc/html/bbv2/installation.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2/installation.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2/installation.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/bbv2/installation.html</a> + </body> +</html> + + diff --git a/doc/html/boost_asio.html b/doc/html/boost_asio.html new file mode 100644 index 0000000000..2ab60e724c --- /dev/null +++ b/doc/html/boost_asio.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_asio.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_asio.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_asio.html</a> + </body> +</html> + diff --git a/doc/html/boost_staticassert.html b/doc/html/boost_staticassert.html new file mode 100644 index 0000000000..723a884b14 --- /dev/null +++ b/doc/html/boost_staticassert.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_staticassert.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_staticassert.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_staticassert.html</a> + </body> +</html> + diff --git a/doc/html/boost_tr1.html b/doc/html/boost_tr1.html new file mode 100644 index 0000000000..522d3730b2 --- /dev/null +++ b/doc/html/boost_tr1.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_tr1.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_tr1.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boost_tr1.html</a> + </body> +</html> + diff --git a/doc/html/boostbook.css b/doc/html/boostbook.css new file mode 100644 index 0000000000..252fa9ecfd --- /dev/null +++ b/doc/html/boostbook.css @@ -0,0 +1,588 @@ +/*============================================================================= + Copyright (c) 2004 Joel de Guzman + http://spirit.sourceforge.net/ + + Distributed under the Boost Software License, Version 1.0. (See accompany- + ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +/*============================================================================= + Body defaults +=============================================================================*/ + + body + { + margin: 1em; + font-family: sans-serif; + } + +/*============================================================================= + Paragraphs +=============================================================================*/ + + p + { + text-align: left; + font-size: 10pt; + line-height: 1.15; + } + +/*============================================================================= + Program listings +=============================================================================*/ + + /* Code on paragraphs */ + p tt.computeroutput + { + font-size: 9pt; + } + + pre.synopsis + { + font-size: 90%; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + .programlisting, + .screen + { + font-size: 9pt; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + /* Program listings in tables don't get borders */ + td .programlisting, + td .screen + { + margin: 0pc 0pc 0pc 0pc; + padding: 0pc 0pc 0pc 0pc; + } + +/*============================================================================= + Headings +=============================================================================*/ + + h1, h2, h3, h4, h5, h6 + { + text-align: left; + margin: 1em 0em 0.5em 0em; + font-weight: bold; + } + + h1 { font: 140% } + h2 { font: bold 140% } + h3 { font: bold 130% } + h4 { font: bold 120% } + h5 { font: italic 110% } + h6 { font: italic 100% } + + /* Top page titles */ + title, + h1.title, + h2.title + h3.title, + h4.title, + h5.title, + h6.title, + .refentrytitle + { + font-weight: bold; + margin-bottom: 1pc; + } + + h1.title { font-size: 140% } + h2.title { font-size: 140% } + h3.title { font-size: 130% } + h4.title { font-size: 120% } + h5.title { font-size: 110% } + h6.title { font-size: 100% } + + .section h1 + { + margin: 0em 0em 0.5em 0em; + font-size: 140%; + } + + .section h2 { font-size: 140% } + .section h3 { font-size: 130% } + .section h4 { font-size: 120% } + .section h5 { font-size: 110% } + .section h6 { font-size: 100% } + + /* Code on titles */ + h1 tt.computeroutput { font-size: 140% } + h2 tt.computeroutput { font-size: 140% } + h3 tt.computeroutput { font-size: 130% } + h4 tt.computeroutput { font-size: 120% } + h5 tt.computeroutput { font-size: 110% } + h6 tt.computeroutput { font-size: 100% } + +/*============================================================================= + Author +=============================================================================*/ + + h3.author + { + font-size: 100% + } + +/*============================================================================= + Lists +=============================================================================*/ + + li + { + font-size: 10pt; + line-height: 1.3; + } + + /* Unordered lists */ + ul + { + text-align: left; + } + + /* Ordered lists */ + ol + { + text-align: left; + } + +/*============================================================================= + Links +=============================================================================*/ + + a + { + text-decoration: none; /* no underline */ + } + + a:hover + { + text-decoration: underline; + } + +/*============================================================================= + Spirit style navigation +=============================================================================*/ + + .spirit-nav + { + text-align: right; + } + + .spirit-nav a + { + color: white; + padding-left: 0.5em; + } + + .spirit-nav img + { + border-width: 0px; + } + +/*============================================================================= + Copyright footer +=============================================================================*/ + .copyright-footer + { + text-align: right; + font-size: 70%; + } + + .copyright-footer p + { + text-align: right; + font-size: 80%; + } + +/*============================================================================= + Table of contents +=============================================================================*/ + + .toc + { + margin: 1pc 4% 0pc 4%; + padding: 0.1pc 1pc 0.1pc 1pc; + font-size: 80%; + line-height: 1.15; + } + + .boost-toc + { + float: right; + padding: 0.5pc; + } + +/*============================================================================= + Tables +=============================================================================*/ + + .table-title, + div.table p.title + { + margin-left: 4%; + padding-right: 0.5em; + padding-left: 0.5em; + } + + .informaltable table, + .table table + { + width: 92%; + margin-left: 4%; + margin-right: 4%; + } + + div.informaltable table, + div.table table + { + padding: 4px; + } + + /* Table Cells */ + div.informaltable table tr td, + div.table table tr td + { + padding: 0.5em; + text-align: left; + font-size: 9pt; + } + + div.informaltable table tr th, + div.table table tr th + { + padding: 0.5em 0.5em 0.5em 0.5em; + border: 1pt solid white; + font-size: 80%; + } + + table.simplelist + { + width: auto !important; + margin: 0em !important; + padding: 0em !important; + border: none !important; + } + table.simplelist td + { + margin: 0em !important; + padding: 0em !important; + text-align: left !important; + font-size: 9pt !important; + border: none !important; + } + +/*============================================================================= + Blurbs +=============================================================================*/ + + div.note, + div.tip, + div.important, + div.caution, + div.warning, + p.blurb + { + font-size: 9pt; /* A little bit smaller than the main text */ + line-height: 1.2; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + p.blurb img + { + padding: 1pt; + } + +/*============================================================================= + Variable Lists +=============================================================================*/ + + /* Make the terms in definition lists bold */ + div.variablelist dl dt, + span.term + { + font-weight: bold; + font-size: 10pt; + } + + div.variablelist table tbody tr td + { + text-align: left; + vertical-align: top; + padding: 0em 2em 0em 0em; + font-size: 10pt; + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + + div.variablelist dl dt + { + margin-bottom: 0.2em; + } + + div.variablelist dl dd + { + margin: 0em 0em 0.5em 2em; + font-size: 10pt; + } + + div.variablelist table tbody tr td p, + div.variablelist dl dd p + { + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + +/*============================================================================= + Misc +=============================================================================*/ + + /* Title of books and articles in bibliographies */ + span.title + { + font-style: italic; + } + + span.underline + { + text-decoration: underline; + } + + span.strikethrough + { + text-decoration: line-through; + } + + /* Copyright, Legal Notice */ + div div.legalnotice p + { + text-align: left + } + +/*============================================================================= + Colors +=============================================================================*/ + + @media screen + { + body { + background-color: #FFFFFF; + } + + /* Links */ + a + { + color: #005a9c; + } + + a:visited + { + color: #9c5a9c; + } + + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, + h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, + h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited + { + text-decoration: none; /* no underline */ + color: #000000; + } + + /* Syntax Highlighting */ + .keyword { color: #0000AA; } + .identifier { color: #000000; } + .special { color: #707070; } + .preprocessor { color: #402080; } + .char { color: teal; } + .comment { color: #800000; } + .string { color: teal; } + .number { color: teal; } + .white_bkd { background-color: #FFFFFF; } + .dk_grey_bkd { background-color: #999999; } + + /* Copyright, Legal Notice */ + .copyright + { + color: #666666; + font-size: small; + } + + div div.legalnotice p + { + color: #666666; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid #DCDCDC; + } + + .programlisting, + .screen + { + border: 1px solid #DCDCDC; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Blurbs */ + div.note, + div.tip, + div.important, + div.caution, + div.warning, + p.blurb + { + border: 1px solid #DCDCDC; + } + + /* Table of contents */ + .toc + { + border: 1px solid #DCDCDC; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid #DCDCDC; + } + + div.informaltable table tr th, + div.table table tr th + { + background-color: #F0F0F0; + border: 1px solid #DCDCDC; + } + + .copyright-footer + { + color: #8F8F8F; + } + + /* Misc */ + span.highlight + { + color: #00A000; + } + } + + @media print + { + /* Links */ + a + { + color: black; + } + + a:visited + { + color: black; + } + + .spirit-nav + { + display: none; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid gray; + } + + .programlisting, + .screen + { + border: 1px solid gray; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Table of contents */ + .toc + { + border: 1px solid gray; + } + + .informaltable table, + .table table + { + border: 1px solid gray; + border-collapse: collapse; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid gray; + } + + div.informaltable table tr th, + div.table table tr th + { + border: 1px solid gray; + } + + table.simplelist tr td + { + border: none !important; + } + + /* Misc */ + span.highlight + { + font-weight: bold; + } + } + +/*============================================================================= + Images +=============================================================================*/ + + span.inlinemediaobject img + { + vertical-align: middle; + } + +/*============================================================================== + Super and Subscript: style so that line spacing isn't effected, see + http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341 +==============================================================================*/ + +sup, +sub { + height: 0; + line-height: 1; + vertical-align: baseline; + _vertical-align: bottom; + position: relative; + +} + +sup { + bottom: 1ex; +} + +sub { + top: .5ex; +} + diff --git a/doc/html/boostbook.html b/doc/html/boostbook.html new file mode 100644 index 0000000000..a4194abb63 --- /dev/null +++ b/doc/html/boostbook.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boostbook.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boostbook.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/boostbook.html</a> + </body> +</html> diff --git a/doc/html/date_time.html b/doc/html/date_time.html new file mode 100644 index 0000000000..f7265365ba --- /dev/null +++ b/doc/html/date_time.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time.html</a> + </body> +</html> diff --git a/doc/html/date_time/date_time_io.html b/doc/html/date_time/date_time_io.html new file mode 100644 index 0000000000..8a4db6ed71 --- /dev/null +++ b/doc/html/date_time/date_time_io.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/date_time_io.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/date_time_io.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/date_time_io.html</a> + </body> +</html> + diff --git a/doc/html/date_time/details.html b/doc/html/date_time/details.html new file mode 100644 index 0000000000..fa809beed0 --- /dev/null +++ b/doc/html/date_time/details.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/details.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/details.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/details.html</a> + </body> +</html> + diff --git a/doc/html/date_time/local_time.html b/doc/html/date_time/local_time.html new file mode 100644 index 0000000000..defe1c8503 --- /dev/null +++ b/doc/html/date_time/local_time.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/local_time.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/local_time.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/date_time/local_time.html</a> + </body> +</html> + diff --git a/doc/html/docutils.css b/doc/html/docutils.css new file mode 100644 index 0000000000..620cf86102 --- /dev/null +++ b/doc/html/docutils.css @@ -0,0 +1,275 @@ +/* +:Author: David Goodger +:Contact: goodger@python.org +:Date: $Date$ +:Revision: $Revision$ +:Copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. +*/ + +/* used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0 } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 ! important } + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 ! important } + +.last, .with-subtitle { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dl.docutils dd { + margin-bottom: 0.5em } + +/* Uncomment (and remove this text!) to get bold-faced definition list terms +dl.docutils dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.admonition, div.attention, div.caution, div.danger, div.error, +div.hint, div.important, div.note, div.tip, div.warning { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.admonition p.admonition-title, div.hint p.admonition-title, +div.important p.admonition-title, div.note p.admonition-title, +div.tip p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +/* Uncomment (and remove this text!) to get reduced vertical space in + compound paragraphs. +div.compound .compound-first, div.compound .compound-middle { + margin-bottom: 0.5em } + +div.compound .compound-last, div.compound .compound-middle { + margin-top: 0.5em } +*/ + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em ; + margin-right: 2em } + +div.footer, div.header { + clear: both; + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin-left: 1em ; + border: medium outset ; + padding: 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, +h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { + margin-top: 0.4em } + +h1.title { + text-align: center } + +h2.subtitle { + text-align: center } + +hr.docutils { + width: 75% } + +img.align-left { + clear: left } + +img.align-right { + clear: right } + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font-family: serif ; + font-size: 100% } + +pre.literal-block, pre.doctest-block { + margin-left: 2em ; + margin-right: 2em } + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80% } + +table.citation { + border-left: solid 1px gray; + margin-left: 1px } + +table.docinfo { + margin: 2em 4em } + +table.docutils { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.footnote { + border-left: solid 1px black; + margin-left: 1px } + +table.docutils td, table.docutils th, +table.docinfo td, table.docinfo th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +table.docutils th.field-name, table.docinfo th.docinfo-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap ; + padding-left: 0 } + +h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, +h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { + font-size: 100% } + +ul.auto-toc { + list-style-type: none } diff --git a/doc/html/foreach.html b/doc/html/foreach.html new file mode 100644 index 0000000000..3a063dd576 --- /dev/null +++ b/doc/html/foreach.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/foreach.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/foreach.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/foreach.html</a> + </body> +</html> + diff --git a/doc/html/function.html b/doc/html/function.html new file mode 100644 index 0000000000..01a4c010d1 --- /dev/null +++ b/doc/html/function.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/function.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/function.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/function.html</a> + </body> +</html> diff --git a/doc/html/hash.html b/doc/html/hash.html new file mode 100644 index 0000000000..e48943f924 --- /dev/null +++ b/doc/html/hash.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash.html</a> + </body> +</html> diff --git a/doc/html/hash/custom.html b/doc/html/hash/custom.html new file mode 100644 index 0000000000..4bb71dc1c7 --- /dev/null +++ b/doc/html/hash/custom.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash/custom.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash/custom.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/hash/custom.html</a> + </body> +</html> diff --git a/doc/html/images/blank.png b/doc/html/images/blank.png Binary files differnew file mode 100644 index 0000000000..764bf4f0c3 --- /dev/null +++ b/doc/html/images/blank.png diff --git a/doc/html/images/caution.png b/doc/html/images/caution.png Binary files differnew file mode 100644 index 0000000000..5b7809ca4a --- /dev/null +++ b/doc/html/images/caution.png diff --git a/doc/html/images/draft.png b/doc/html/images/draft.png Binary files differnew file mode 100644 index 0000000000..0084708c9b --- /dev/null +++ b/doc/html/images/draft.png diff --git a/doc/html/images/home.png b/doc/html/images/home.png Binary files differnew file mode 100644 index 0000000000..5584aacb09 --- /dev/null +++ b/doc/html/images/home.png diff --git a/doc/html/images/important.png b/doc/html/images/important.png Binary files differnew file mode 100644 index 0000000000..12c90f607a --- /dev/null +++ b/doc/html/images/important.png diff --git a/doc/html/images/next.png b/doc/html/images/next.png Binary files differnew file mode 100644 index 0000000000..59800b4e87 --- /dev/null +++ b/doc/html/images/next.png diff --git a/doc/html/images/next_disabled.png b/doc/html/images/next_disabled.png Binary files differnew file mode 100644 index 0000000000..10a8c59d7b --- /dev/null +++ b/doc/html/images/next_disabled.png diff --git a/doc/html/images/note.png b/doc/html/images/note.png Binary files differnew file mode 100644 index 0000000000..d0c3c645ab --- /dev/null +++ b/doc/html/images/note.png diff --git a/doc/html/images/prev.png b/doc/html/images/prev.png Binary files differnew file mode 100644 index 0000000000..d88a40f923 --- /dev/null +++ b/doc/html/images/prev.png diff --git a/doc/html/images/prev_disabled.png b/doc/html/images/prev_disabled.png Binary files differnew file mode 100644 index 0000000000..ab3c17e02d --- /dev/null +++ b/doc/html/images/prev_disabled.png diff --git a/doc/html/images/tip.png b/doc/html/images/tip.png Binary files differnew file mode 100644 index 0000000000..5c4aab3bb3 --- /dev/null +++ b/doc/html/images/tip.png diff --git a/doc/html/images/toc-blank.png b/doc/html/images/toc-blank.png Binary files differnew file mode 100644 index 0000000000..6ffad17a0c --- /dev/null +++ b/doc/html/images/toc-blank.png diff --git a/doc/html/images/toc-minus.png b/doc/html/images/toc-minus.png Binary files differnew file mode 100644 index 0000000000..abbb020c8e --- /dev/null +++ b/doc/html/images/toc-minus.png diff --git a/doc/html/images/toc-plus.png b/doc/html/images/toc-plus.png Binary files differnew file mode 100644 index 0000000000..941312ce0d --- /dev/null +++ b/doc/html/images/toc-plus.png diff --git a/doc/html/images/up.png b/doc/html/images/up.png Binary files differnew file mode 100644 index 0000000000..17d9c3ec49 --- /dev/null +++ b/doc/html/images/up.png diff --git a/doc/html/images/up_disabled.png b/doc/html/images/up_disabled.png Binary files differnew file mode 100644 index 0000000000..e22bc87121 --- /dev/null +++ b/doc/html/images/up_disabled.png diff --git a/doc/html/images/warning.png b/doc/html/images/warning.png Binary files differnew file mode 100644 index 0000000000..1c33db8f34 --- /dev/null +++ b/doc/html/images/warning.png diff --git a/doc/html/interprocess.html b/doc/html/interprocess.html new file mode 100644 index 0000000000..14836ac0bb --- /dev/null +++ b/doc/html/interprocess.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/interprocess.html"> + <title>Redirect to generated documentation</title> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/interprocess.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/interprocess.html</a> + </body> +</html> + diff --git a/doc/html/intrusive.html b/doc/html/intrusive.html new file mode 100644 index 0000000000..2598c90309 --- /dev/null +++ b/doc/html/intrusive.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/intrusive.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/intrusive.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/intrusive.html</a> + </body> +</html> + diff --git a/doc/html/jam.html b/doc/html/jam.html new file mode 100644 index 0000000000..2394af9984 --- /dev/null +++ b/doc/html/jam.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam.html</a> + </body> +</html> diff --git a/doc/html/jam/building.html b/doc/html/jam/building.html new file mode 100644 index 0000000000..ab40e89632 --- /dev/null +++ b/doc/html/jam/building.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam/building.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam/building.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/jam/building.html</a> + </body> +</html> + + diff --git a/doc/html/lambda.html b/doc/html/lambda.html new file mode 100644 index 0000000000..f37d9dfc8b --- /dev/null +++ b/doc/html/lambda.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/lambda.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/lambda.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/lambda.html</a> + </body> +</html> diff --git a/doc/html/minimal.css b/doc/html/minimal.css new file mode 100644 index 0000000000..2e5812a9b8 --- /dev/null +++ b/doc/html/minimal.css @@ -0,0 +1,29 @@ +/* + + © Copyright Beman Dawes, 2007 + + Distributed under the Boost Software License, Version 1.0. + See www.boost.org/LICENSE_1_0.txt + +*/ + +/******************************************************************************* + Body +*******************************************************************************/ + +body { font-family: sans-serif; margin: 1em; } + +/******************************************************************************* + Table +*******************************************************************************/ + +table { margin: 0.5em; } + +/******************************************************************************* + Font sizes +*******************************************************************************/ + +p, td, li, blockquote { font-size: 10pt; } +pre { font-size: 9pt; } + +/*** end ***/
\ No newline at end of file diff --git a/doc/html/mpi.html b/doc/html/mpi.html new file mode 100644 index 0000000000..f9b6b16818 --- /dev/null +++ b/doc/html/mpi.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2007 Trustees of Indiana University + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/mpi.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/mpi.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/mpi.html</a> + </body> +</html> diff --git a/doc/html/program_options.html b/doc/html/program_options.html new file mode 100644 index 0000000000..166fb44b92 --- /dev/null +++ b/doc/html/program_options.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/program_options.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/program_options.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/program_options.html</a> + </body> +</html> diff --git a/doc/html/ref.html b/doc/html/ref.html new file mode 100644 index 0000000000..4f5a4678f8 --- /dev/null +++ b/doc/html/ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/ref.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/ref.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/ref.html</a> + </body> +</html> diff --git a/doc/html/reference.css b/doc/html/reference.css new file mode 100644 index 0000000000..6826962afc --- /dev/null +++ b/doc/html/reference.css @@ -0,0 +1,11 @@ +/*============================================================================ + Copyright 2003-2004 Douglas Gregor + Distributed under the Boost Software License, Version 1.0. (See accompany- + ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +============================================================================*/ + +PRE.synopsis { + background-color: #e0ffff; + border: thin solid blue; + padding: 1em +}
\ No newline at end of file diff --git a/doc/html/signals.html b/doc/html/signals.html new file mode 100644 index 0000000000..75016d41f8 --- /dev/null +++ b/doc/html/signals.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/signals.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/signals.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/signals.html</a> + </body> +</html> diff --git a/doc/html/string_algo.html b/doc/html/string_algo.html new file mode 100644 index 0000000000..a4ebc5c2c7 --- /dev/null +++ b/doc/html/string_algo.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/string_algo.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/string_algo.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/string_algo.html</a> + </body> +</html> diff --git a/doc/html/thread.html b/doc/html/thread.html new file mode 100644 index 0000000000..7eff4c9b77 --- /dev/null +++ b/doc/html/thread.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/thread.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/thread.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/thread.html</a> + </body> +</html> diff --git a/doc/html/tribool.html b/doc/html/tribool.html new file mode 100644 index 0000000000..ccd8f50034 --- /dev/null +++ b/doc/html/tribool.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/tribool.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/tribool.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/tribool.html</a> + </body> +</html> diff --git a/doc/html/typeof.html b/doc/html/typeof.html new file mode 100644 index 0000000000..61d86e0c28 --- /dev/null +++ b/doc/html/typeof.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/typeof.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/typeof.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/typeof.html</a> + </body> +</html> diff --git a/doc/html/unordered.html b/doc/html/unordered.html new file mode 100644 index 0000000000..8bce4be555 --- /dev/null +++ b/doc/html/unordered.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/unordered.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/unordered.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/unordered.html</a> + </body> +</html> diff --git a/doc/html/variant.html b/doc/html/variant.html new file mode 100644 index 0000000000..a370ac4fc6 --- /dev/null +++ b/doc/html/variant.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/variant.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/variant.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/variant.html</a> + </body> +</html> diff --git a/doc/html/xpressive.html b/doc/html/xpressive.html new file mode 100644 index 0000000000..b8b3345a95 --- /dev/null +++ b/doc/html/xpressive.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) --> + <title>Redirect to generated documentation</title> + <meta http-equiv="refresh" content="0; URL=http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/xpressive.html"> + </head> + <body> + Automatic redirection failed, please go to + <a href="http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/xpressive.html">http://www.boost.org/regression-logs/cs-win32_metacomm/doc/html/xpressive.html</a> + </body> +</html> + diff --git a/doc/src/boost.xml b/doc/src/boost.xml new file mode 100644 index 0000000000..0eb208acc1 --- /dev/null +++ b/doc/src/boost.xml @@ -0,0 +1,770 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE boostbook PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" + "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"> +<boostbook xmlns:xi="http://www.w3.org/2001/XInclude" + last-revision="$Date$"> + <title>The Boost C++ Libraries BoostBook Documentation Subset</title> + + <preface id="about"> + <title>What's Included in This Document</title> + + <para>This document represents only a subset of the full Boost + documentation: that part which is generated from BoostBook or + QuickBook sources. Eventually all Boost libraries may use these + formats, but in the meantime, much of Boost's documentation is not + available here. Please + see <ulink + url="http://www.boost.org/libs">http://www.boost.org/libs</ulink> + for complete documentation. + </para> + + <para> + Documentation for some of the libraries described in this document is + available in alternative formats: + <itemizedlist> + <listitem> + <simpara><ulink url="http://www.boost.org/doc/boost-doc-html.tar.gz">HTML (tarred, gzipped)</ulink></simpara> + </listitem> + <listitem> + <simpara><ulink url="http://www.boost.org/doc/boost.pdf">PDF</ulink></simpara> + </listitem> + <listitem> + <simpara> + <ulink url="http://www.boost.org/doc/boost-doc-man.tar.gz">Unix man pages</ulink> + </simpara> + </listitem> + <listitem> + <simpara><ulink url="../boost.docbook">DocBook</ulink></simpara> + </listitem> + <listitem> + <simpara> + <ulink url="../boost.fo">XSL Formatting Objects</ulink> + </simpara> + </listitem> + </itemizedlist> + </para> + + </preface> + + <part id="libraries"> + <title>The Boost C++ Libraries (BoostBook Subset)</title> + + <xi:include href="accumulators.xml"/> + + <xi:include href="../../libs/any/doc/any.xml"/> + <xi:include href="../../libs/array/doc/array.xml"/> + + <library name="Asio" dirname="asio" html-only="1"> + <libraryinfo> + <author> + <firstname>Christopher</firstname> + <surname>Kohlhoff</surname> + </author> + + <librarypurpose>Portable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs</librarypurpose> + <librarycategory name="category:io"/> + </libraryinfo> + </library> + + <library name="Bind" dirname="bind" html-only="1"> + <libraryinfo> + <author> + <firstname>Peter</firstname> + <surname>Dimov</surname> + </author> + <librarypurpose>Generalized binders for function/object/pointers and member functions</librarypurpose> + <librarycategory name="category:higher-order"/> + </libraryinfo> + </library> + + <library name="Mem_fn" dirname="bind" html-only="1" + url="../../libs/bind/mem_fn.html"> + <libraryinfo> + <author> + <firstname>Peter</firstname> + <surname>Dimov</surname> + </author> + <librarypurpose>Generalized binders for member functions</librarypurpose> + <librarycategory name="category:higher-order"/> + </libraryinfo> + </library> + + <library name="Call Traits" dirname="call_traits" html-only="1" + url="../../libs/utility/call_traits.htm"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Maddock</surname> + </author> + <author> + <firstname>Howard</firstname> + <surname>Hinnant</surname> + </author> + <librarypurpose>Defines types for passing parameters</librarypurpose> + <librarycategory name="category:generic"/> + </libraryinfo> + </library> + + <library name="Circular Buffer" dirname="circular_buffer" html-only="1" + url="../../libs/circular_buffer/index.html"> + <libraryinfo> + <author> + <firstname>Jan</firstname> + <surname>Gaspar</surname> + </author> + <librarypurpose>A STL compliant container also known as ring or cyclic buffer</librarypurpose> + <librarycategory name="category:containers"/> + </libraryinfo> + </library> + + <library name="Compatibility" dirname="compatibility" html-only="1"> + <libraryinfo> + <author> + <firstname>Ralf</firstname> + <surname>Grosse-Kunstleve</surname> + </author> + <author> + <firstname>Jens</firstname> + <surname>Maurer</surname> + </author> + <librarypurpose>Help for non-conforming standard libraries</librarypurpose> + <librarycategory name="category:broken"/> + </libraryinfo> + </library> + + <library name="Compose" dirname="compose" html-only="1" + url="../../libs/compose/index.htm"> + <libraryinfo> + <author> + <firstname>Nicolai</firstname> + <surname>Josuttis</surname> + </author> + + <librarypurpose>Functional composition adapters for the STL</librarypurpose> + <librarycategory name="category:higher-order"/> + </libraryinfo> + </library> + + <library name="Compressed Pair" dirname="compressed_pair" html-only="1" + url="../../libs/utility/compressed_pair.htm"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Maddock</surname> + </author> + <author> + <firstname>Howard</firstname> + <surname>Hinnant</surname> + </author> + <librarypurpose>Empty member optimization</librarypurpose> + <librarycategory name="category:data-structures"/> + <librarycategory name="category:misc"/> + </libraryinfo> + </library> + + <library name="Concept Check" dirname="concept_check"> + <libraryinfo> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + <librarypurpose>Tools for generic programming</librarypurpose> + <librarycategory name="category:generic"/> + <librarycategory name="category:testing"/> + </libraryinfo> + <title>Boost.Concept_Check</title> + <xi:include href="../../libs/concept_check/doc/reference/concepts.xml"/> + </library> + + <library name="Config" dirname="config" html-only="1"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Maddock</surname> + </author> + <author> + <firstname>Beman</firstname> + <surname>Dawes</surname> + </author> + <author> + <firstname>Vesa</firstname> + <surname>Karvonen</surname> + </author> + + <librarypurpose>Helps boost library developers adapt to compiler idiosyncrasies; not intended for library users</librarypurpose> + <librarycategory name="category:broken"/> + </libraryinfo> + </library> + + <library name="Conversion" dirname="conversion" html-only="1" + url="../../libs/conversion/index.html"> + <libraryinfo> + <author> + <firstname>Dave</firstname> + <surname>Abrahams</surname> + </author> + <author> + <firstname>Kevlin</firstname> + <surname>Henney</surname> + </author> + + <librarypurpose>Numeric, polymorphic, and lexical casts</librarypurpose> + <librarycategory name="category:misc"/> + </libraryinfo> + </library> + + <library name="CRC" dirname="crc" html-only="1"> + <libraryinfo> + <author> + <firstname>Daryle</firstname> + <surname>Walker</surname> + </author> + + <librarypurpose>Cyclic Redundancy Code</librarypurpose> + <librarycategory name="category:misc"/> + </libraryinfo> + </library> + + <xi:include href="../../libs/date_time/xmldoc/date_time.xml"/> + + <library name="Dynamic Bitset" dirname="dynamic_bitset" html-only="1"> + <libraryinfo> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + <author> + <firstname>Chuck</firstname> + <surname>Allison</surname> + </author> + <librarypurpose>A runtime sized version of <code>std::bitset</code></librarypurpose> + <librarycategory name="category:containers"/> + </libraryinfo> + </library> + + <library name="Format" dirname="format" html-only="1" + url="../../libs/format/index.html"> + <libraryinfo> + <author> + <firstname>Samuel</firstname> + <surname>Krempp</surname> + </author> + + <librarypurpose>Type-safe 'printf-like' format operations</librarypurpose> + <librarycategory name="category:string-text"/> + <librarycategory name="category:io"/> + </libraryinfo> + </library> + + <library name="Filesystem" dirname="filesystem" html-only="1"> + <libraryinfo> + <author> + <firstname>Beman</firstname> + <surname>Dawes</surname> + </author> + + <librarypurpose>Portable paths, iteration over directories, and other useful filesystem operations</librarypurpose> + <librarycategory name="category:misc"/> + </libraryinfo> + </library> + + <xi:include href="foreach.xml"/> + + <xi:include href="../../libs/function/doc/function.xml"/> + + <library name="Functional" dirname="functional" html-only="1"> + <libraryinfo> + <author> + <firstname>Mark</firstname> + <surname>Rodgers</surname> + </author> + <librarypurpose>Enhanced function object adaptors</librarypurpose> + <librarycategory name="category:higher-order"/> + </libraryinfo> + </library> + + <xi:include href="hash.xml"/> + + <library name="Graph" dirname="graph" html-only="1"> + <libraryinfo> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + <author> + <firstname>University of Notre Dame</firstname> + <surname>Team</surname> + </author> + <librarypurpose>Generic graph components and algorithms</librarypurpose> + <librarycategory name="category:containers"/> + <librarycategory name="category:iterators"/> + <librarycategory name="category:algorithms"/> + </libraryinfo> + </library> + + <library name="Integer" dirname="integer" html-only="1" + url="../../libs/integer/index.html"> + <libraryinfo> + <author> + <firstname>various</firstname> + <surname>authors</surname> + </author> + + <librarypurpose>Headers to ease dealing with integral types</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <xi:include href="interprocess.xml"/> + + <library name="Interval" dirname="numeric/interval" html-only="1" + url="../../libs/numeric/interval/doc/index.html"> + <libraryinfo> + <author> + <firstname>Guillaume</firstname> + <surname>Melquiond</surname> + </author> + <author> + <firstname>Hervé</firstname> + <surname>Brönnimann</surname> + </author> + <author> + <firstname>Sylvain</firstname> + <surname>Pion</surname> + </author> + + <librarypurpose>Extends the usual arithmetic functions to mathematical intervals</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <xi:include href="intrusive.xml"/> + + <library name="I/O State Savers" dirname="io" html-only="1"> + <libraryinfo> + <author> + <firstname>Daryle</firstname> + <surname>Walker</surname> + </author> + + <librarypurpose>Save I/O state to prevent jumbled data</librarypurpose> + <librarycategory name="category:io"/> + </libraryinfo> + </library> + + <library name="Iterator Adaptors" dirname="utility" html-only="1" + url="../../libs/utility/iterator_adaptors.htm"> + <libraryinfo> + <author> + <firstname>Dave</firstname> + <surname>Abrahams</surname> + </author> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + <author> + <firstname>John</firstname> + <surname>Potter</surname> + </author> + + <librarypurpose>Adapt a base type into a standard conforming iterator</librarypurpose> + <librarycategory name="category:iterators"/> + </libraryinfo> + </library> + + <xi:include href="../../libs/lambda/doc/lambda.xml"/> + + <library name="Math" dirname="math" html-only="1"> + <libraryinfo> + <author> + <firstname>various</firstname> + <surname>authors</surname> + </author> + + <librarypurpose>Several contributions in the domain of mathematics</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Math/Common Factor" dirname="math/common_factor" html-only="1" + url="../../libs/math/doc/common_factor.html"> + <libraryinfo> + <author> + <firstname>Daryle</firstname> + <surname>Walker</surname> + </author> + + <librarypurpose>Greatest common divisor and least common multiple</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Math/Octonion" dirname="math/octonion" html-only="1"> + <libraryinfo> + <author> + <firstname>Hubert</firstname> + <surname>Holin</surname> + </author> + + <librarypurpose>Octonions</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Math/Quaternion" dirname="math/quaternion" html-only="1"> + <libraryinfo> + <author> + <firstname>Hubert</firstname> + <surname>Holin</surname> + </author> + + <librarypurpose>Quaternions</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Math/Special Functions" dirname="math/special_functions" html-only="1"> + <libraryinfo> + <author> + <firstname>Hubert</firstname> + <surname>Holin</surname> + </author> + + <librarypurpose>Mathematical special functions such as atanh, sinc, and sinhc</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="MPL" dirname="mpl" html-only="1"> + <libraryinfo> + <author> + <firstname>Aleksey</firstname> + <surname>Gurtovoy</surname> + </author> + + <librarypurpose>Template metaprogramming framework of compile-time algorithms, sequences and metafunction classes</librarypurpose> + <librarycategory name="category:template"/> + </libraryinfo> + </library> + + <library name="Multi Array" dirname="multi_array" html-only="1"> + <libraryinfo> + <author> + <firstname>Ron</firstname> + <surname>Garcia</surname> + </author> + + <librarypurpose>Multidimensional containers and adaptors for arrays of contiguous data</librarypurpose> + <librarycategory name="category:math"/> + <librarycategory name="category:containers"/> + </libraryinfo> + </library> + + <library name="Operators" dirname="utility" html-only="1"> + <libraryinfo> + <author> + <firstname>Dave</firstname> + <surname>Abrahams</surname> + </author> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + + <librarypurpose>Templates ease arithmetic classes and iterators</librarypurpose> + <librarycategory name="category:generic"/> + <librarycategory name="category:iterators"/> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Optional" dirname="optional" html-only="1"> + <libraryinfo> + <author> + <firstname>Fernando</firstname> + <surname>Cacciola</surname> + </author> + + <librarypurpose>Discriminated-union wrapper for optional values</librarypurpose> + <librarycategory name="category:misc"/> + <librarycategory name="category:data-structures"/> + </libraryinfo> + </library> + + <xi:include href="mpi.xml"/> + + <library name="Pool" dirname="pool" html-only="1"> + <libraryinfo> + <author> + <firstname>Steve</firstname> + <surname>Cleary</surname> + </author> + + <librarypurpose>Memory pool management</librarypurpose> + <librarycategory name="category:memory"/> + </libraryinfo> + </library> + + <library name="Preprocessor" dirname="preprocessor" html-only="1"> + <libraryinfo> + <author> + <firstname>Vesa</firstname> + <surname>Karvonen</surname> + </author> + <author> + <firstname>Paul</firstname> + <surname>Mensonides</surname> + </author> + + <librarypurpose>Preprocessor metaprogramming tools including repetition and recursion</librarypurpose> + <librarycategory name="category:preprocessor"/> + </libraryinfo> + </library> + + <xi:include href="../../libs/program_options/doc/program_options.xml"/> + + <library name="Property Map" dirname="property_map" html-only="1"> + <libraryinfo> + <author> + <firstname>Jeremy</firstname> + <surname>Siek</surname> + </author> + <librarypurpose>Concepts defining interfaces which map key objects to value objects</librarypurpose> + <librarycategory name="category:containers"/> + <librarycategory name="category:generic"/> + </libraryinfo> + </library> + + <library name="Python" dirname="python" html-only="1"> + <libraryinfo> + <author> + <firstname>Dave</firstname> + <surname>Abrahams</surname> + </author> + <librarypurpose>Reflects C++ classes and functions into <ulink url="http://www.python.org">Python</ulink></librarypurpose> + <librarycategory name="category:lang"/> + </libraryinfo> + </library> + + <library name="Random" dirname="random" html-only="1"> + <libraryinfo> + <author> + <firstname>Jens</firstname> + <surname>Maurer</surname> + </author> + <librarypurpose>A complete system for random number generation</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <library name="Rational" dirname="rational" html-only="1"> + <libraryinfo> + <author> + <firstname>Paul</firstname> + <surname>Moore</surname> + </author> + <librarypurpose>A rational number class</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <xi:include href="../../libs/bind/doc/ref.xml"/> + + <library name="Regex" dirname="regex" html-only="1" + url="../../libs/regex/index.html"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Maddock</surname> + </author> + <librarypurpose>Regular expression library</librarypurpose> + <librarycategory name="category:string-text"/> + </libraryinfo> + </library> + + <library name="Serialization" dirname="serialization" html-only="1" + url="../../libs/serialization/index.html"> + <libraryinfo> + <author> + <firstname>Robert</firstname> + <surname>Ramey</surname> + </author> + <librarypurpose>Serialization of C++ objects for persistence and marshalling</librarypurpose> + <librarycategory name="category:io"/> + </libraryinfo> + </library> + + <xi:include href="../../libs/signals/doc/signals.xml"/> + + <library name="Smart Pointer" dirname="smart_ptr" html-only="1" + url="../../libs/smart_ptr/index.html"> + <libraryinfo> + <author> + <firstname>Greg</firstname> + <surname>Colvin</surname> + </author> + <author> + <firstname>Beman</firstname> + <surname>Dawes</surname> + </author> + <author> + <firstname>Peter</firstname> + <surname>Dimov</surname> + </author> + <author> + <firstname>Darin</firstname> + <surname>Adler</surname> + </author> + <librarypurpose>Five smart pointer class templates</librarypurpose> + <librarycategory name="category:memory"/> + </libraryinfo> + </library> + + <library name="Spirit" dirname="spirit" html-only="1"> + <libraryinfo> + <author> + <firstname>Joel</firstname> + <surname>de Guzman</surname> + </author> + <author> + <firstname>team</firstname> + </author> + + <librarypurpose>LL parser framework represents parsers directly as EBNF grammars in inlined C++</librarypurpose> + <librarycategory name="category:text"/> + <librarycategory name="category:parsing"/> + </libraryinfo> + </library> + + <xi:include href="static_assert.xml"/> + + <xi:include href="../../libs/algorithm/string/doc/string_algo.xml"/> + + <library name="Test" dirname="test" html-only="1"> + <libraryinfo> + <author> + <firstname>Gennadiy</firstname> + <surname>Rozental</surname> + </author> + <librarypurpose>Support for simple program testing, full unit testing, and for program execution monitoring</librarypurpose> + <librarycategory name="category:testing"/> + </libraryinfo> + </library> + + <xi:include href="thread.xml"/> + + <library name="Timer" dirname="timer" html-only="1" + url="../../libs/timer/index.html"> + <libraryinfo> + <author> + <firstname>Beman</firstname> + <surname>Dawes</surname> + </author> + <librarypurpose>Event timer, progress timer, and progress display classes</librarypurpose> + <librarycategory name="category:misc"/> + </libraryinfo> + </library> + + <library name="Tokenizer" dirname="tokenizer" html-only="1" + url="../../libs/tokenizer/index.html"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Bandela</surname> + </author> + <librarypurpose>Break of a string or other character sequence into a series of tokens</librarypurpose> + <librarycategory name="category:string-text"/> + <librarycategory name="category:iterators"/> + </libraryinfo> + </library> + + <xi:include href="tr1.xml"/> + <xi:include href="../../libs/logic/doc/tribool.boostbook"/> + + <library name="Tuple" dirname="tuple" html-only="1"> + <libraryinfo> + <author> + <firstname>Jaakko</firstname> + <surname>Järvi</surname> + </author> + <librarypurpose>Ease definition of functions returning multiple values, and more</librarypurpose> + <librarycategory name="category:data-structures"/> + </libraryinfo> + </library> + + <library name="Type Traits" dirname="type_traits" html-only="1"> + <libraryinfo> + <author> + <firstname>John</firstname> + <surname>Maddock</surname> + </author> + <librarypurpose>Meta-programming support library.</librarypurpose> + <librarycategory name="category:generic"/> + </libraryinfo> + </library> + + <xi:include href="typeof.xml"/> + + <library name="uBLAS" dirname="numeric/ublas" html-only="1"> + <libraryinfo> + <author> + <firstname>Joerg</firstname> + <surname>Walter</surname> + </author> + <author> + <firstname>Mathias</firstname> + <surname>Koch</surname> + </author> + <librarypurpose>Basic linear algebra for dense, packed and sparse matrices</librarypurpose> + <librarycategory name="category:math"/> + </libraryinfo> + </library> + + <xi:include href="units.xml"/> + + <xi:include href="unordered.xml"/> + + <library name="Utility" dirname="utility" html-only="1"> + <libraryinfo> + <author> + <firstname>Dave</firstname> + <surname>Abrahams</surname> + </author> + <author> + <firstname>others</firstname> + </author> + + <librarypurpose>Class noncopyable plus <functionname>checked_delete</functionname>, <functionname>checked_array_delete</functionname>, <functionname>next</functionname>, <functionname>prior</functionname> function templates, plus base-from-member idiom</librarypurpose> + <librarycategory name="category:misc"/> + <librarycategory name="category:memory"/> + <librarycategory name="category:algorithms"/> + </libraryinfo> + </library> + <xi:include href="../../libs/variant/doc/variant.xml"/> + + <xi:include href="xpressive.xml"/> + + </part> + + <part id="tools"> + <title>Boost Tools</title> + <partintro> + <para> + Boost developers, testers, and maintainers have developed various programs to + help with the administration of the Boost Libraries. Like everything else about + Boost, these tools are available in source form, and are part of the regular + Boost distribution. + </para> + <para> + Users may find these tools useful when porting Boost libraries to a new platform, + or for use with their own applications. + </para> + </partintro> + <xi:include href="../../tools/boostbook/doc/boostbook.xml"/> + <xi:include href="bjam.xml"/> + <xi:include href="../../tools/build/v2/doc/src/userman.xml"/> + </part> +</boostbook> + + diff --git a/doc/src/boostbook.css b/doc/src/boostbook.css new file mode 100644 index 0000000000..252fa9ecfd --- /dev/null +++ b/doc/src/boostbook.css @@ -0,0 +1,588 @@ +/*============================================================================= + Copyright (c) 2004 Joel de Guzman + http://spirit.sourceforge.net/ + + Distributed under the Boost Software License, Version 1.0. (See accompany- + ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +/*============================================================================= + Body defaults +=============================================================================*/ + + body + { + margin: 1em; + font-family: sans-serif; + } + +/*============================================================================= + Paragraphs +=============================================================================*/ + + p + { + text-align: left; + font-size: 10pt; + line-height: 1.15; + } + +/*============================================================================= + Program listings +=============================================================================*/ + + /* Code on paragraphs */ + p tt.computeroutput + { + font-size: 9pt; + } + + pre.synopsis + { + font-size: 90%; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + .programlisting, + .screen + { + font-size: 9pt; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + /* Program listings in tables don't get borders */ + td .programlisting, + td .screen + { + margin: 0pc 0pc 0pc 0pc; + padding: 0pc 0pc 0pc 0pc; + } + +/*============================================================================= + Headings +=============================================================================*/ + + h1, h2, h3, h4, h5, h6 + { + text-align: left; + margin: 1em 0em 0.5em 0em; + font-weight: bold; + } + + h1 { font: 140% } + h2 { font: bold 140% } + h3 { font: bold 130% } + h4 { font: bold 120% } + h5 { font: italic 110% } + h6 { font: italic 100% } + + /* Top page titles */ + title, + h1.title, + h2.title + h3.title, + h4.title, + h5.title, + h6.title, + .refentrytitle + { + font-weight: bold; + margin-bottom: 1pc; + } + + h1.title { font-size: 140% } + h2.title { font-size: 140% } + h3.title { font-size: 130% } + h4.title { font-size: 120% } + h5.title { font-size: 110% } + h6.title { font-size: 100% } + + .section h1 + { + margin: 0em 0em 0.5em 0em; + font-size: 140%; + } + + .section h2 { font-size: 140% } + .section h3 { font-size: 130% } + .section h4 { font-size: 120% } + .section h5 { font-size: 110% } + .section h6 { font-size: 100% } + + /* Code on titles */ + h1 tt.computeroutput { font-size: 140% } + h2 tt.computeroutput { font-size: 140% } + h3 tt.computeroutput { font-size: 130% } + h4 tt.computeroutput { font-size: 120% } + h5 tt.computeroutput { font-size: 110% } + h6 tt.computeroutput { font-size: 100% } + +/*============================================================================= + Author +=============================================================================*/ + + h3.author + { + font-size: 100% + } + +/*============================================================================= + Lists +=============================================================================*/ + + li + { + font-size: 10pt; + line-height: 1.3; + } + + /* Unordered lists */ + ul + { + text-align: left; + } + + /* Ordered lists */ + ol + { + text-align: left; + } + +/*============================================================================= + Links +=============================================================================*/ + + a + { + text-decoration: none; /* no underline */ + } + + a:hover + { + text-decoration: underline; + } + +/*============================================================================= + Spirit style navigation +=============================================================================*/ + + .spirit-nav + { + text-align: right; + } + + .spirit-nav a + { + color: white; + padding-left: 0.5em; + } + + .spirit-nav img + { + border-width: 0px; + } + +/*============================================================================= + Copyright footer +=============================================================================*/ + .copyright-footer + { + text-align: right; + font-size: 70%; + } + + .copyright-footer p + { + text-align: right; + font-size: 80%; + } + +/*============================================================================= + Table of contents +=============================================================================*/ + + .toc + { + margin: 1pc 4% 0pc 4%; + padding: 0.1pc 1pc 0.1pc 1pc; + font-size: 80%; + line-height: 1.15; + } + + .boost-toc + { + float: right; + padding: 0.5pc; + } + +/*============================================================================= + Tables +=============================================================================*/ + + .table-title, + div.table p.title + { + margin-left: 4%; + padding-right: 0.5em; + padding-left: 0.5em; + } + + .informaltable table, + .table table + { + width: 92%; + margin-left: 4%; + margin-right: 4%; + } + + div.informaltable table, + div.table table + { + padding: 4px; + } + + /* Table Cells */ + div.informaltable table tr td, + div.table table tr td + { + padding: 0.5em; + text-align: left; + font-size: 9pt; + } + + div.informaltable table tr th, + div.table table tr th + { + padding: 0.5em 0.5em 0.5em 0.5em; + border: 1pt solid white; + font-size: 80%; + } + + table.simplelist + { + width: auto !important; + margin: 0em !important; + padding: 0em !important; + border: none !important; + } + table.simplelist td + { + margin: 0em !important; + padding: 0em !important; + text-align: left !important; + font-size: 9pt !important; + border: none !important; + } + +/*============================================================================= + Blurbs +=============================================================================*/ + + div.note, + div.tip, + div.important, + div.caution, + div.warning, + p.blurb + { + font-size: 9pt; /* A little bit smaller than the main text */ + line-height: 1.2; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + p.blurb img + { + padding: 1pt; + } + +/*============================================================================= + Variable Lists +=============================================================================*/ + + /* Make the terms in definition lists bold */ + div.variablelist dl dt, + span.term + { + font-weight: bold; + font-size: 10pt; + } + + div.variablelist table tbody tr td + { + text-align: left; + vertical-align: top; + padding: 0em 2em 0em 0em; + font-size: 10pt; + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + + div.variablelist dl dt + { + margin-bottom: 0.2em; + } + + div.variablelist dl dd + { + margin: 0em 0em 0.5em 2em; + font-size: 10pt; + } + + div.variablelist table tbody tr td p, + div.variablelist dl dd p + { + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + +/*============================================================================= + Misc +=============================================================================*/ + + /* Title of books and articles in bibliographies */ + span.title + { + font-style: italic; + } + + span.underline + { + text-decoration: underline; + } + + span.strikethrough + { + text-decoration: line-through; + } + + /* Copyright, Legal Notice */ + div div.legalnotice p + { + text-align: left + } + +/*============================================================================= + Colors +=============================================================================*/ + + @media screen + { + body { + background-color: #FFFFFF; + } + + /* Links */ + a + { + color: #005a9c; + } + + a:visited + { + color: #9c5a9c; + } + + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, + h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, + h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited + { + text-decoration: none; /* no underline */ + color: #000000; + } + + /* Syntax Highlighting */ + .keyword { color: #0000AA; } + .identifier { color: #000000; } + .special { color: #707070; } + .preprocessor { color: #402080; } + .char { color: teal; } + .comment { color: #800000; } + .string { color: teal; } + .number { color: teal; } + .white_bkd { background-color: #FFFFFF; } + .dk_grey_bkd { background-color: #999999; } + + /* Copyright, Legal Notice */ + .copyright + { + color: #666666; + font-size: small; + } + + div div.legalnotice p + { + color: #666666; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid #DCDCDC; + } + + .programlisting, + .screen + { + border: 1px solid #DCDCDC; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Blurbs */ + div.note, + div.tip, + div.important, + div.caution, + div.warning, + p.blurb + { + border: 1px solid #DCDCDC; + } + + /* Table of contents */ + .toc + { + border: 1px solid #DCDCDC; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid #DCDCDC; + } + + div.informaltable table tr th, + div.table table tr th + { + background-color: #F0F0F0; + border: 1px solid #DCDCDC; + } + + .copyright-footer + { + color: #8F8F8F; + } + + /* Misc */ + span.highlight + { + color: #00A000; + } + } + + @media print + { + /* Links */ + a + { + color: black; + } + + a:visited + { + color: black; + } + + .spirit-nav + { + display: none; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid gray; + } + + .programlisting, + .screen + { + border: 1px solid gray; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Table of contents */ + .toc + { + border: 1px solid gray; + } + + .informaltable table, + .table table + { + border: 1px solid gray; + border-collapse: collapse; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid gray; + } + + div.informaltable table tr th, + div.table table tr th + { + border: 1px solid gray; + } + + table.simplelist tr td + { + border: none !important; + } + + /* Misc */ + span.highlight + { + font-weight: bold; + } + } + +/*============================================================================= + Images +=============================================================================*/ + + span.inlinemediaobject img + { + vertical-align: middle; + } + +/*============================================================================== + Super and Subscript: style so that line spacing isn't effected, see + http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341 +==============================================================================*/ + +sup, +sub { + height: 0; + line-height: 1; + vertical-align: baseline; + _vertical-align: bottom; + position: relative; + +} + +sup { + bottom: 1ex; +} + +sub { + top: .5ex; +} + diff --git a/doc/src/docutils.css b/doc/src/docutils.css new file mode 100644 index 0000000000..620cf86102 --- /dev/null +++ b/doc/src/docutils.css @@ -0,0 +1,275 @@ +/* +:Author: David Goodger +:Contact: goodger@python.org +:Date: $Date$ +:Revision: $Revision$ +:Copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. +*/ + +/* used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0 } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 ! important } + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 ! important } + +.last, .with-subtitle { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dl.docutils dd { + margin-bottom: 0.5em } + +/* Uncomment (and remove this text!) to get bold-faced definition list terms +dl.docutils dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.admonition, div.attention, div.caution, div.danger, div.error, +div.hint, div.important, div.note, div.tip, div.warning { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.admonition p.admonition-title, div.hint p.admonition-title, +div.important p.admonition-title, div.note p.admonition-title, +div.tip p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +/* Uncomment (and remove this text!) to get reduced vertical space in + compound paragraphs. +div.compound .compound-first, div.compound .compound-middle { + margin-bottom: 0.5em } + +div.compound .compound-last, div.compound .compound-middle { + margin-top: 0.5em } +*/ + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em ; + margin-right: 2em } + +div.footer, div.header { + clear: both; + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin-left: 1em ; + border: medium outset ; + padding: 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, +h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { + margin-top: 0.4em } + +h1.title { + text-align: center } + +h2.subtitle { + text-align: center } + +hr.docutils { + width: 75% } + +img.align-left { + clear: left } + +img.align-right { + clear: right } + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font-family: serif ; + font-size: 100% } + +pre.literal-block, pre.doctest-block { + margin-left: 2em ; + margin-right: 2em } + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80% } + +table.citation { + border-left: solid 1px gray; + margin-left: 1px } + +table.docinfo { + margin: 2em 4em } + +table.docutils { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.footnote { + border-left: solid 1px black; + margin-left: 1px } + +table.docutils td, table.docutils th, +table.docinfo td, table.docinfo th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +table.docutils th.field-name, table.docinfo th.docinfo-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap ; + padding-left: 0 } + +h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, +h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { + font-size: 100% } + +ul.auto-toc { + list-style-type: none } diff --git a/doc/src/images/blank.png b/doc/src/images/blank.png Binary files differnew file mode 100644 index 0000000000..764bf4f0c3 --- /dev/null +++ b/doc/src/images/blank.png diff --git a/doc/src/images/caution.png b/doc/src/images/caution.png Binary files differnew file mode 100644 index 0000000000..5b7809ca4a --- /dev/null +++ b/doc/src/images/caution.png diff --git a/doc/src/images/draft.png b/doc/src/images/draft.png Binary files differnew file mode 100644 index 0000000000..0084708c9b --- /dev/null +++ b/doc/src/images/draft.png diff --git a/doc/src/images/home.png b/doc/src/images/home.png Binary files differnew file mode 100644 index 0000000000..5584aacb09 --- /dev/null +++ b/doc/src/images/home.png diff --git a/doc/src/images/important.png b/doc/src/images/important.png Binary files differnew file mode 100644 index 0000000000..12c90f607a --- /dev/null +++ b/doc/src/images/important.png diff --git a/doc/src/images/next.png b/doc/src/images/next.png Binary files differnew file mode 100644 index 0000000000..59800b4e87 --- /dev/null +++ b/doc/src/images/next.png diff --git a/doc/src/images/next_disabled.png b/doc/src/images/next_disabled.png Binary files differnew file mode 100644 index 0000000000..10a8c59d7b --- /dev/null +++ b/doc/src/images/next_disabled.png diff --git a/doc/src/images/note.png b/doc/src/images/note.png Binary files differnew file mode 100644 index 0000000000..d0c3c645ab --- /dev/null +++ b/doc/src/images/note.png diff --git a/doc/src/images/prev.png b/doc/src/images/prev.png Binary files differnew file mode 100644 index 0000000000..d88a40f923 --- /dev/null +++ b/doc/src/images/prev.png diff --git a/doc/src/images/prev_disabled.png b/doc/src/images/prev_disabled.png Binary files differnew file mode 100644 index 0000000000..ab3c17e02d --- /dev/null +++ b/doc/src/images/prev_disabled.png diff --git a/doc/src/images/tip.png b/doc/src/images/tip.png Binary files differnew file mode 100644 index 0000000000..5c4aab3bb3 --- /dev/null +++ b/doc/src/images/tip.png diff --git a/doc/src/images/toc-blank.png b/doc/src/images/toc-blank.png Binary files differnew file mode 100644 index 0000000000..6ffad17a0c --- /dev/null +++ b/doc/src/images/toc-blank.png diff --git a/doc/src/images/toc-minus.png b/doc/src/images/toc-minus.png Binary files differnew file mode 100644 index 0000000000..abbb020c8e --- /dev/null +++ b/doc/src/images/toc-minus.png diff --git a/doc/src/images/toc-plus.png b/doc/src/images/toc-plus.png Binary files differnew file mode 100644 index 0000000000..941312ce0d --- /dev/null +++ b/doc/src/images/toc-plus.png diff --git a/doc/src/images/up.png b/doc/src/images/up.png Binary files differnew file mode 100644 index 0000000000..17d9c3ec49 --- /dev/null +++ b/doc/src/images/up.png diff --git a/doc/src/images/up_disabled.png b/doc/src/images/up_disabled.png Binary files differnew file mode 100644 index 0000000000..e22bc87121 --- /dev/null +++ b/doc/src/images/up_disabled.png diff --git a/doc/src/images/warning.png b/doc/src/images/warning.png Binary files differnew file mode 100644 index 0000000000..1c33db8f34 --- /dev/null +++ b/doc/src/images/warning.png diff --git a/doc/src/reference.css b/doc/src/reference.css new file mode 100644 index 0000000000..6826962afc --- /dev/null +++ b/doc/src/reference.css @@ -0,0 +1,11 @@ +/*============================================================================ + Copyright 2003-2004 Douglas Gregor + Distributed under the Boost Software License, Version 1.0. (See accompany- + ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +============================================================================*/ + +PRE.synopsis { + background-color: #e0ffff; + border: thin solid blue; + padding: 1em +}
\ No newline at end of file diff --git a/index.htm b/index.htm new file mode 100644 index 0000000000..0a3ac3191d --- /dev/null +++ b/index.htm @@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="refresh" content="0; URL=index.html" /> + + <title></title> + <link rel="stylesheet" href="doc/html/boostbook.css" type="text/css" /> +</head> + +<body> + Automatic redirection failed, please go to <a href= + "index.html">index.html</a>. + + <div class="copyright-footer"> + <p>Copyright 2008 Rene Rivera</p> + + <p>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy + at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</p> + </div> +</body> +</html> diff --git a/index.html b/index.html new file mode 100644 index 0000000000..f652e28642 --- /dev/null +++ b/index.html @@ -0,0 +1,120 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>Boost C++ Libraries</title> + <link rel="stylesheet" href="doc/html/boostbook.css" type="text/css" /> +</head> + +<body> + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> + <tr> + <td width="277"> + <a href="index.html"> + <img src="boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="337" align="middle"> + <h2 style="text-align: center">Release 1.36.0</h2> + </td> + </tr> + </table> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" height="26" width="671"> + <tr> + <td height="16" width="661"><a href="more/getting_started/index.html">Getting Started</a> <font color="#FFFFFF"> + </font> <a href="libs/libraries.htm">Libraries</a> <font color="#FFFFFF"> + </font> <a href="tools/index.html">Tools </a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org">Web Site</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/users/news/">News</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/community/">Community</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/users/faq.html">FAQ</a> <font color="#FFFFFF"> + </font> <a href="more/index.htm">More Info</a></td> + </tr> + </table> + + + <h2 class="title">Welcome to the Boost C++ Libraries</h2> + + <p>Boost provides free peer-reviewed portable C++ source libraries.</p> + + <p>We emphasize libraries that work well with the C++ Standard Library. + Boost libraries are intended to be widely useful, and usable across a broad + spectrum of applications. The <a href= + "http://www.boost.org/users/license.html">Boost license</a> encourages both + commercial and non-commercial use.</p> + + <p>We aim to establish "existing practice" and provide reference + implementations so that Boost libraries are suitable for eventual + standardization. Ten Boost libraries are already included in the <a href= + "http://www.open-std.org/jtc1/sc22/wg21/">C++ Standards Committee's</a> + Library Technical Report (<a href= + "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf">TR1</a>) + and will be included in the upcoming revision of the C++ Standard. More + Boost libraries are proposed for the upcoming <a href= + "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1810.html">TR2</a>.</p> + + <h3>Changes in this release</h3> + + <p>This release includes <i><b>4 new libraries</b></i> and + updates for many existing libraries. See + <a href="http://www.boost.org/users/history/version_1_36_0">Release + History</a> for more information.</p> + + <h3>Getting Started</h3> + + <p>If Boost hasn't already been installed on your system, follow the + <a href="more/getting_started/index.html">Getting Started Guide</a> to + complete the installation. But if you've reached to this point by + installing Boost from a Windows pre-build executable or a pre-built Linux + and Unix distribution package, that's already been completed. Likewise, if + you're reading this on your organization's internal web server, the + installation is probably already complete.</p> + + <h3>Contents</h3> + + <p>The release directory tree contains almost all of Boost; documentation, + sources, headers, scripts, tools, and everything else a Boost user might + need!</p> + + <h3>Library Documentation</h3> + + <p>The starting point for the documentation of individual libraries is the + <a href="libs/libraries.htm">Libraries page</a>, which gives a brief + description of each library and links to its documentation.</p> + + <h3>Web Site</h3> + + <p>Some general interest or often changing Boost information lives only on + the <a href="http://www.boost.org">Boost web site</a>. The release contains + links to the site, so while browsing it you'll see occasional broken links + if you aren't connected to the Internet. But everything needed to use the + Boost libraries is contained within the release.</p> + + <h3>Background</h3> + + <p>Read the <a href="http://www.boost.org/users/">introductory material</a> + to help you understand what Boost is about and to help in educating your + organization about Boost.</p> + + <h3>Community</h3> + + <p>Boost welcomes and thrives on participation from a variety of + individuals and organizations. Many avenues for participation are available + in the <a href="http://www.boost.org/community/">Boost Community</a>.</p> + + <div class="copyright-footer"> + <p>Copyright © 2008 Beman Dawes, Rene Rivera</p> + + <p>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy + at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</p> + + <p>This software is <a href="http://www.opensource.org/">Open Source + Initiative</a> approved Open Source Software.</p> + + <p>Open Source Initiative Approved is a trademark of the Open Source + Initiative.</p> + </div> +</body> +</html>
\ No newline at end of file diff --git a/libs/accumulators b/libs/accumulators new file mode 160000 +Subproject 359ae4f761e1d38aaf18b3d918970d59d2216dd diff --git a/libs/algorithm b/libs/algorithm new file mode 160000 +Subproject 5db1f665b04b9e5af1ddcc519738fe01339e384 diff --git a/libs/any b/libs/any new file mode 160000 +Subproject 682e5cec677029166d75acf232a005879e9ab38 diff --git a/libs/array b/libs/array new file mode 160000 +Subproject 87778d19c196be836d79f699e124c647f41bf3d diff --git a/libs/asio b/libs/asio new file mode 160000 +Subproject ec867144d1e4ec71e10eeb612ae61cf873e8e65 diff --git a/libs/assign b/libs/assign new file mode 160000 +Subproject 95e788a036660026168406a9e6121064729fd92 diff --git a/libs/bimap b/libs/bimap new file mode 160000 +Subproject 9a321baa2ca9032376ce478717c55fcdae6b8b9 diff --git a/libs/bind b/libs/bind new file mode 160000 +Subproject 95171f4463f87de982b6631497e65e21c1dbc22 diff --git a/libs/circular_buffer b/libs/circular_buffer new file mode 160000 +Subproject 3136815a884908d492fc7b44c0f8cd613d7e76a diff --git a/libs/compatibility b/libs/compatibility new file mode 160000 +Subproject 6a3c6d12b00045db9e1f1530d380b8937e78c03 diff --git a/libs/compose b/libs/compose new file mode 160000 +Subproject 8cd0b78fa4ec60efaaaa86af98e647f055e4102 diff --git a/libs/concept_check b/libs/concept_check new file mode 160000 +Subproject 849dc94de5841dafd1b612b26bcdb11eda2e692 diff --git a/libs/config b/libs/config new file mode 160000 +Subproject a5a21a0caf750e5e533f8c123292e12ba0871f3 diff --git a/libs/conversion b/libs/conversion new file mode 160000 +Subproject c2b4875ef060ea7de75feceb1f2028476612832 diff --git a/libs/crc b/libs/crc new file mode 160000 +Subproject f2159571451a15479d7fa1b2e0bf0f5e64aec3f diff --git a/libs/date_time b/libs/date_time new file mode 160000 +Subproject eedcf91f0f9863d120709e9af4e7d0a19c268a5 diff --git a/libs/detail b/libs/detail new file mode 160000 +Subproject 77ec4c45ec048e1deacf2b1bf8ae6e8dedcc1e3 diff --git a/libs/disjoint_sets b/libs/disjoint_sets new file mode 160000 +Subproject 3a2a4e7dc660e3bb14d2e1e1cf714c3171e948f diff --git a/libs/dynamic_bitset b/libs/dynamic_bitset new file mode 160000 +Subproject aaea06c8056ef044dd2889f7c4a35fb5c6ff760 diff --git a/libs/exception b/libs/exception new file mode 160000 +Subproject 86bbe740fbff2aa6730a8f22fd722f95bd5cd05 diff --git a/libs/filesystem b/libs/filesystem new file mode 160000 +Subproject 06085f908126914ff0accde2cfcb9375090f0f3 diff --git a/libs/foreach b/libs/foreach new file mode 160000 +Subproject 44996e00fce53321f0c84dc1db81264723a551d diff --git a/libs/format b/libs/format new file mode 160000 +Subproject 731bdb8208cdce9951c69fe36c24c1f25747d6d diff --git a/libs/function b/libs/function new file mode 160000 +Subproject fa3960323dd659b4e4bbee9eebdfb85cc5fafde diff --git a/libs/function_types b/libs/function_types new file mode 160000 +Subproject f66562676a8ab5a7678f2e3861464ae299d2103 diff --git a/libs/functional b/libs/functional new file mode 160000 +Subproject 9fc83aa081645b4a1b7e4d99d6c021578dd1e35 diff --git a/libs/fusion b/libs/fusion new file mode 160000 +Subproject c9a280357cc27afcaaa85a802beff59f6a0b1ef diff --git a/libs/gil b/libs/gil new file mode 160000 +Subproject e4364b4def66a0b69291a6af57c71a6503d47d3 diff --git a/libs/graph b/libs/graph new file mode 160000 +Subproject 23c2ffcd9cb87aa490a56274cddc70c2bdbf494 diff --git a/libs/graph_parallel b/libs/graph_parallel new file mode 160000 +Subproject 95955718a0b4b45d248a8e5fa428fdb68bc1f58 diff --git a/libs/index.html b/libs/index.html new file mode 100644 index 0000000000..4720ada4f4 --- /dev/null +++ b/libs/index.html @@ -0,0 +1,14 @@ +<html> +<head> +<meta http-equiv="refresh" content="0; URL=libraries.htm"> +</head> +<body> +Automatic redirection failed, please go to +<a href="libraries.htm">libraries.htm</a>. +<hr> +<p>© Copyright Beman Dawes, 2001</p> +<p> Distributed under the Boost Software +License, Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"> +www.boost.org/LICENSE_1_0.txt</a>)</p> +</body> +</html>
\ No newline at end of file diff --git a/libs/integer b/libs/integer new file mode 160000 +Subproject cfd671852441a25f5f554a3ff02d7dd1143fdfa diff --git a/libs/interprocess b/libs/interprocess new file mode 160000 +Subproject c1c1c6e848d0a2d09776cb2eb6400d3ec89f332 diff --git a/libs/intrusive b/libs/intrusive new file mode 160000 +Subproject c0ffd8902507bacff0096649e90105fa3801323 diff --git a/libs/io b/libs/io new file mode 160000 +Subproject 702c0af919b25232b364bd796fa6a0ab0d8b9e6 diff --git a/libs/iostreams b/libs/iostreams new file mode 160000 +Subproject c2617c61b5c17a5d1900b5e796b0ebe6a2ad3b1 diff --git a/libs/iterator b/libs/iterator new file mode 160000 +Subproject 5ddd3fe157de09c56de676ef65b69ae625fdda1 diff --git a/libs/lambda b/libs/lambda new file mode 160000 +Subproject 53e6d91b7fcfb6533c4ecab766f70c3562ec5ed diff --git a/libs/libraries.htm b/libs/libraries.htm new file mode 100644 index 0000000000..f4180dd273 --- /dev/null +++ b/libs/libraries.htm @@ -0,0 +1,726 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<title>Boost Libraries</title> +<link rel="stylesheet" href="../doc/html/boostbook.css" type="text/css" /> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> + <tr> + <td width="277"> + <a href="../index.html"> + <img src="../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="337" align="middle"> + <font size="7">Libraries</font> + </td> + </tr> + </table> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" height="26" width="673"> + <tr> + <td height="16" width="663"><a href="../more/getting_started/index.html">Getting Started</a> <font color="#FFFFFF"> + </font> <a href="../tools/index.html">Tools </a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org">Web Site</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/users/news/">News</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/community/">Community</a> <font color="#FFFFFF"> + </font> + <a href="http://www.boost.org/users/faq.html">FAQ</a> <font color="#FFFFFF"> + </font> <a href="../more/index.htm">More Info</a></td> + </tr> + </table> + +<dl> + <dt><a href="#Alphabetically">Libraries Listed Alphabetically</a></dt> + <dt><a href="#Category">Libraries Listed by Category</a></dt> + <dl> + <dt><a href="#String">String and text processing</a></dt> + <dt><a href="#Containers">Containers</a></dt> + <dt><a href="#Iterators">Iterators</a></dt> + <dt><a href="#Algorithms">Algorithms</a></dt> + <dt><a href="#Function-objects">Function Objects and higher-order programming</a></dt> + <dt><a href="#Generic">Generic Programming</a></dt> + <dt><a href="#Metaprogramming">Template Metaprogramming</a></dt> + <dt><a href="#Preprocessor">Preprocessor Metaprogramming</a></dt> + <dt><a href="#Concurrent">Concurrent Programming</a> + <dt><a href="#Math">Math and numerics</a></dt> + <dt><a href="#Correctness">Correctness and testing</a></dt> + <dt><a href="#Data">Data structures</a></dt> + <dt><a href="#Image-processing">Image processing</a></dt> + <dt><a href="#IO">Input/Output</a><a href="#Memory"></a></dt> + <dt><a href="#Inter-language">Inter-language support</a></dt> + <dt><a href="#Memory">Memory</a></dt> + <dt><a href="#Parsing">Parsing</a></dt> + <dt><a href="#Programming">Programming Interfaces</a></dt> + <dt><a href="#Miscellaneous">Miscellaneous</a></dt> + <dt><a href="#workarounds">Broken compiler workarounds</a></dt> + </dl> + <dt><a href="#Removed">Libraries Retired from Boost</a></dt> +</dl> + +<p>See <a href="../more/getting_started.html">Getting Started</a> page to find out +how to download, build, and install the libraries.</p> + +<p>Documentation for some Boost libraries is available in other forms, + including DocBook, XSL Formatting Objects, and Unix man pages. This + documentation is <a + href="https://sourceforge.net/project/showfiles.php?group_id=7586&package_id=159715">available + on Sourceforge.</a></p> + +<hr> + +<h2>Libraries Listed <a name="Alphabetically">Alphabetically</a></h2> + +<ul> + <li><a href="accumulators/index.html">accumulators</a> - Framework for incremental + calculation, and collection of statistical accumulators, from Eric Niebler.</li> + <li><a href="any/index.html">any</a> - Safe, generic container for single + values of different value types, from Kevlin Henney. </li> + <li><a href="array/index.html">array</a> - STL compliant + container wrapper for arrays of constant size, from + Nicolai Josuttis.</li> + <li><a href="asio/index.html">asio</a> - Portable networking and other low-level + I/O, including sockets, timers, hostname resolution, socket iostreams, serial + ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff.</li> + <li><a href="assign/index.html">assign</a> - Filling containers + with constant or generated data has never been + easier, from Thorsten Ottosen. + </li> + <li><a href="bimap/index.html">bimap</a> - Bidirectional maps, from Matias Capeletto. + </li> + <li><a href="bind/bind.html">bind</a> and <a href="bind/mem_fn.html"> mem_fn</a> - Generalized binders for function/object/pointers and member functions, from Peter + Dimov.</li> + <li><a href="utility/call_traits.htm">call_traits</a> - + Defines types for passing parameters, from John Maddock, + Howard Hinnant, et al.</li> + <li><a href="circular_buffer/index.html">circular_buffer</a> - STL compliant + container also known as ring or cyclic buffer, from Jan Gaspar.</li> + <li><a href="compatibility/index.html">compatibility</a> - Help for + non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens + Maurer.</li> + <li><a href="utility/compressed_pair.htm">compressed_pair</a> + - Empty member optimization, from John Maddock, Howard + Hinnant, et al.</li> + <li><a href="concept_check/concept_check.htm">concept check</a> + - Tools for generic programming, from Jeremy Siek.</li> + <li><a href="config/config.htm">config</a> - Helps boost + library developers adapt to compiler idiosyncrasies; not + intended for library users.</li> + <li><a href="conversion/index.html">conversion</a> - Polymorphic and lexical casts, from Dave Abrahams and + Kevlin Henney.</li> + <li><a href="crc/index.html">crc</a> - Cyclic Redundancy Code, from Daryle + Walker.</li> + <li><a href="date_time/doc/index.html">date_time</a> - Date-Time library from Jeff Garland.</li> + <li><a href="dynamic_bitset/dynamic_bitset.html">dynamic_bitset</a> - A runtime sized version of <tt>std::bitset</tt> from Jeremy Siek and Chuck Allison.</li> + <li><a href="exception/doc/boost-exception.html">exception</a> - A library for transporting of arbitrary data in exception objects, and transporting of exceptions between threads (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a>), from Emil Dotchevski.</li> + <li><a href="utility/enable_if.html">enable_if</a> - Selective inclusion of function template overloads, from Jaakko Järvi, Jeremiah Willcock, and Andrew Lumsdaine.</li> + <li><a href="filesystem/doc/index.htm">filesystem</a> - Portable paths, + iteration over directories, and other useful filesystem operations, from + Beman Dawes.</li> + <li><a href="foreach/index.html">foreach</a> - BOOST_FOREACH macro for easily + iterating over the elements of a sequence, from Eric Niebler.</li> + <li><a href="format/index.html">format</a> - Type-safe 'printf-like' format + operations, from Samuel Krempp.</li> + <li><a href="function/index.html">function</a> - Function object wrappers + for deferred calls or callbacks, from Doug Gregor.</li> + <li><a href="function_types/index.html">function_types</a> - Type traits + for callable, built-in types, from Tobias Schwinger</li> + <li><a href="functional/index.html">functional</a> - Enhanced + function object adaptors, from Mark Rodgers.</li> + <li><a href="functional/hash/index.html">functional/hash</a> - + A TR1 hash function object that can be extended to hash user defined + types, from Daniel James.</li> + <li><a href="fusion/index.html">fusion</a> - + Library for working with tuples, including various containers, algorithms, etc. + From Joel de Guzman, Dan Marsden and Tobias Schwinger.</li> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> + <li><a href="graph/doc/table_of_contents.html">graph</a> - + Generic graph components and algorithms, from Jeremy Siek + and a University of Notre Dame team.</li> + <li><a href="integer/index.html">integer</a> - Headers to ease + dealing with integral types.</li> + <li><a href="interprocess/index.html">interprocess </a>- Shared memory, memory mapped files, + process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga</li> + <li><a href="numeric/interval/doc/interval.htm">interval </a>- Extends the + usual arithmetic functions to mathematical intervals, from Guillaume + Melquiond, Hervé Brönnimann and Sylvain Pion.</li> + <li><a href="intrusive/index.html">intrusive </a>- Intrusive containers and algorithms, from Ion Gaztañaga</li> + <li><a href="utility/in_place_factories.html">in_place_factory, typed_in_place_factory</a>- Generic in-place construction of contained objects with a variadic argument-list, from Fernando Cacciola.</li> + <li><a href="io/doc/ios_state.html">io state savers</a> - Save I/O state to + prevent jumbled data, from Daryle Walker.</li> + <li><a href="iostreams/doc/index.html">iostreams</a> - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.</li> + <li><a href="iterator/doc/index.html">iterators</a> - Iterator + construction framework, adaptors, concepts, and more, from Dave + Abrahams, Jeremy Siek, and Thomas Witt.</li> + <li><a href="lambda/index.html">lambda</a> - Define small unnamed + function objects at the actual call site, and more, from Jaakko J?rvi and + Gary Powell.</li> + <li><a href="math/doc/index.html">math</a> - Several contributions in the + domain of mathematics, from various authors.</li> + <li><a href="math/doc/complex/html/index.html">math/complex number algorithms</a> - + These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.</li> + <li><a href="math/doc/common_factor.html">math/common_factor</a> - Greatest + common divisor and least common multiple, from Daryle Walker.</li> + <li><a href="math/doc/octonion/html/index.html">math/octonion</a> - + Octonions, from Hubert Holin.</li> + <li><a href="math/doc/quaternion/html/index.html">math/quaternion</a> - + Quaternions, from Hubert Holin.</li> + <li><a href="math/doc/sf_and_dist/html/index.html">math/special_functions</a> - + A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.</li> + <li><a href="math/doc/sf_and_dist/html/index.html">math/statistical distributions</a> - + A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow</li> + <li><a href="algorithm/minmax/index.html">minmax</a> - standard library + extensions for simultaneous min/max and min/max element computations, + from Hervé Brönnimann.</li> + <li><a href="../doc/html/mpi.html">MPI</a> - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer.</li> + <li><a href="mpl/doc/index.html">mpl</a> - Template metaprogramming + framework of compile-time algorithms, sequences and metafunction classes, + from Aleksey Gurtovoy.</li> + <li><a href="multi_array/doc/index.html">multi_array</a> - Multidimensional + containers and adaptors for arrays of contiguous data, from Ron Garcia.</li> + <li><a href="multi_index/doc/index.html">multi_index</a> - Containers with + multiple STL-compatible access interfaces, from Joaquín M López + Muñoz.</li> + <li><a href="numeric/conversion/doc/html/index.html">numeric/conversion</a> - Optimized Policy-based Numeric Conversions, + from Fernando Cacciola.</li> + <li><a href="utility/operators.htm">operators</a> - Templates + ease arithmetic classes and iterators, from Dave Abrahams + and Jeremy Siek.</li> + <li><a href="optional/doc/html/index.html">optional</a> - Discriminated-union + wrapper for optional values, from Fernando Cacciola.</li> + + <li><span class="library"><a href= + "parameter/doc/html/index.html">parameter</a></span> - + Write functions that accept arguments by name, by David Abrahams + and Daniel Wallin.</li> + + <li><a href="ptr_container/index.html">pointer container</a> + - Containers for storing heap-allocated polymorphic objects to ease + OO-programming, from Thorsten Ottosen. </li> + <li><a href="pool/doc/index.html">pool</a> - Memory pool management, from + Steve Cleary.</li> + <li><a href="preprocessor/doc/index.html">preprocessor</a> - Preprocessor + metaprogramming tools including repetition and recursion, from Vesa Karvonen + and Paul Mensonides.</li> + <li><a href="../doc/html/program_options.html">program_options</a> - Access to configuration + data given on command line, in config files and other sources, from Vladimir Prus.</li> + <li><a href="property_map/property_map.html">property map</a> + - Concepts defining interfaces which map key objects to + value objects, from Jeremy Siek.</li> + <li><a href="python/doc/index.html">python</a> - Reflects C++ + classes and functions into <a + href="http://www.python.org">Python</a>, from Dave + Abrahams.</li> + <li><a href="random/index.html">random</a> - A complete + system for random number generation, from Jens Maurer.</li> + <li><a href="range/index.html">range</a> - A new infrastructure + for generic algorithms that builds on top + of the new iterator concepts, from Thorsten Ottosen.</li> + <li><a href="rational/index.html">rational</a> - A rational + number class, from Paul Moore.</li> + + <li><a href="bind/ref.html">ref</a> - A utility library for + passing references to generic functions, from Jaako Järvi, + Peter Dimov, Doug Gregor, and Dave Abrahams.</li> + + <li><a href="regex/index.html">regex</a> - Regular expression + library, from John Maddock.</li> + <li><a href="serialization/doc/index.html">serialization</a> + - Serialization for persistence and marshalling, from Robert Ramey</li> + <li><a href="signals/index.html">signals</a> - managed signals & + slots callback implementation, from Doug Gregor.</li> + <li><a href="smart_ptr/index.html">smart_ptr</a> - Five smart + pointer class templates, from Greg Colvin, Beman Dawes, + Peter Dimov, and Darin Adler.</li> + <li><a href="statechart/doc/index.html">statechart</a> - Arbitrarily + complex finite state machines can be implemented in easily readable and + maintainable C++ code, from Andreas Huber.</li> + <li><a href="static_assert/static_assert.htm">static_assert</a> + - Static assertions (compile time assertions), from John + Maddock.</li> + <li><a href="spirit/index.html">spirit</a> - LL parser framework + represents parsers directly as EBNF grammars in inlined C++, from Joel de + Guzman, Hartmut Kaiser, Dan Nuffer and team.</li> + <li><a href="algorithm/string/index.html">string_algo</a> - + String algorithms library, from Pavol Droba.</li> + <li><a href="system/doc/index.html">system</a> - Operating system support, + including the diagnostics support that will be part of the C++0x standard + library, from Beman Dawes.</li> + <li><a href="test/index.html">test</a> - Support for simple program testing, + full unit testing, and for program + execution monitoring, from Gennadiy Rozental.</li> + <li><a href="thread/doc/index.html">thread</a> - Portable C++ + multi-threading, from William Kempf and Anthony Williams.</li> + <li><a href="timer/index.html">timer</a> - Event timer, + progress timer, and progress display classes, from Beman + Dawes.</li> + <li><a href="tokenizer/index.html">tokenizer</a> - Break of a string or other + character sequence into a series of tokens, from John Bandela.</li> + <li><a href="tr1/index.html">TR1</a> - An implementation of the Technical + Report on C++ Library Extensions, using other Boost libraries as a basis, from John Maddock.</li> + <li><a href="../doc/html/tribool.html">tribool</a> - 3-state boolean type library, from Doug Gregor.</li> + <li><a href="tuple/doc/tuple_users_guide.html">tuple</a> - Ease definition of functions returning multiple values, and more, + from Jaakko J?rvi.</li> + <li><a href="type_traits/index.html">type_traits</a> - + Templates for fundamental properties of types, from John + Maddock, Steve Cleary, et al.</li> + <li><a href="typeof/index.html">typeof</a> - + Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt.</li> + <li><a href="numeric/ublas/doc/index.htm">uBLAS</a> - Basic linear algebra + for dense, packed and sparse matrices, from Joerg Walter and Mathias Koch.</li> + <li><a href="units/index.html">units</a> - + Zero-overhead dimensional analysis and unit/quantity + manipulation and conversion, from Matthias Schabel and Steven Watanabe.</li> + <li><a href="../doc/html/unordered.html">unordered</a> - unordered associative containers, from Daniel James.</li> + <li><a href="utility/utility.htm">utility</a> - Class <b>noncopyable</b> + plus <b>checked_delete()</b>, <b>checked_array_delete()</b>, <b>next(),</b> + <b>prior()</b> + function templates, plus <b>base-from-member idiom</b>, from Dave Abrahams and others.</li> + <li><a href="utility/value_init.htm">value_initialized</a> - Wrapper for uniform-syntax value initialization, + from Fernando Cacciola, based on the original idea of David Abrahams.</li> + <li><a href="variant/index.html">variant</a> - Safe, generic, stack-based discriminated union + container, from Eric Friedman and Itay Maman.</li> + <li><a href="wave/index.html">wave</a> - Standards conformant + implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser </li> + <li><a href="xpressive/index.html">xpressive</a> - Regular expressions that can be written as strings or as expression templates, + and that can refer to each other and themselves recursively with the power of context-free grammars, from Eric Niebler.</li> +</ul> + +<hr> + +<h2>Libraries Listed by <a name="Category">Category</a></h2> + +<h3><a name="String">String</a> and text processing</h3> + +<ul> + <li><a href="conversion/lexical_cast.htm">conversion/lexical_cast</a> - <tt>lexical_cast</tt> + class template, from Kevlin Henney.</li> + <li><a href="format/index.html">format</a> - Type-safe 'printf-like' format + operations, from Samuel Krempp.</li> + <li><a href="iostreams/doc/index.html">iostreams</a> - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.</li> + <li><a href="regex/index.html">regex</a> - Regular expression + library, from John Maddock</li> + <li><a href="spirit/index.html">spirit</a> - LL parser framework + represents parsers directly as EBNF grammars in inlined C++, from Joel de + Guzman, Hartmut Kaiser, Dan Nuffer and team.</li> + <li><a href="algorithm/string/index.html">string_algo</a> - + String algorithms library, from Pavol Droba</li> + <li><a href="tokenizer/index.html">tokenizer</a> - Break of a string or other + character sequence into a series of tokens, from John Bandela</li> + <li><a href="wave/index.html">wave</a> - Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser.</li> + <li><a href="xpressive/index.html">xpressive</a> - Regular expressions that can be written as strings or as expression templates, + and that can refer to each other and themselves recursively with the power of context-free grammars, from Eric Niebler.</li> +</ul> + +<h3><a name="Containers">Containers</a></h3> + +<ul> + <li><a href="array/index.html">array</a> - STL compliant + container wrapper for arrays of constant size, from + Nicolai Josuttis.</li> + <li><a href="bimap/index.html">bimap</a> - Bidirectional maps, from Matias Capeletto. + </li> + <li><a href="circular_buffer/index.html">circular_buffer</a> - STL compliant + container also known as ring or cyclic buffer, from Jan Gaspar.</li> + <li><a href="dynamic_bitset/dynamic_bitset.html">dynamic_bitset</a> - A runtime sized version of <tt>std::bitset</tt> from Jeremy Siek and Chuck Allison.</li> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> + <li><a href="graph/doc/table_of_contents.html">graph</a> - + Generic graph components and algorithms, from Jeremy Siek + and a University of Notre Dame team.</li> + <li><a href="intrusive/index.html">intrusive </a>- Intrusive containers and algorithms, from Ion Gaztañaga</li> + <li><a href="multi_array/doc/index.html">multi_array</a> - Multidimensional + containers and adaptors for arrays of contiguous data, from Ron Garcia.</li> + <li><a href="multi_index/doc/index.html">multi_index</a> - Containers with + multiple STL-compatible access interfaces, from Joaquín M López + Muñoz.</li> + <li><a href="ptr_container/index.html">pointer container</a> + - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen. </li> + <li><a href="property_map/property_map.html">property map</a> + - Concepts defining interfaces which map key objects to + value objects, from Jeremy Siek.</li> + <li><a href="../doc/html/unordered.html">unordered</a> - unordered associative containers, from Daniel James.</li> + <li><a href="variant/index.html">variant</a> - Safe, generic, stack-based + discriminated union container, from Eric Friedman and Itay Maman.</li> +</ul> + +<h3><a name="Iterators">Iterators</a></h3> + +<ul> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> + <li><a href="graph/doc/table_of_contents.html">graph</a> - + Generic graph components and algorithms, from Jeremy Siek + and a University of Notre Dame team.</li> + <li><a href="iterator/doc/index.html">iterators</a> - Iterator + construction framework, adaptors, concepts, and more, from Dave + Abrahams, Jeremy Siek, and Thomas Witt.</li> + <li><a href="utility/operators.htm">operators</a> - Templates + ease arithmetic classes and iterators, from Dave Abrahams + and Jeremy Siek.</li> + <li><a href="tokenizer/index.html">tokenizer</a> - Break of a string or other + character sequence into a series of tokens, from John Bandela.</li> +</ul> + +<h3><a name="Algorithms">Algorithms</a></h3> + +<ul> + <li><a href="foreach/index.html">foreach</a> - BOOST_FOREACH macro for easily + iterating over the elements of a sequence, from Eric Niebler.</li> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> + <li><a href="graph/doc/table_of_contents.html">graph</a> - + Generic graph components and algorithms, from Jeremy Siek + and a University of Notre Dame team.</li> + <li><a href="algorithm/minmax/index.html">minmax</a> - standard library + extensions for simultaneous min/max and min/max element computations, + from Hervé Brönnimann.</li> + <li><a href="range/index.html">range</a> - A new infrastructure + for generic algorithms that builds on top + of the new iterator concepts, from Thorsten Ottosen.</li> + <li><a href="algorithm/string/index.html">string_algo</a> - + String algorithms library, from Pavol Droba</li> + <li><a href="utility/utility.htm">utility</a> - Class <b>next(),</b> <b>prior()</b> + function templates, from Dave Abrahams and others. </li> +</ul> + +<h3><a name="Function-objects">Function objects</a> and higher-order programming</h3> + +<ul> + <li><a href="bind/bind.html">bind</a> and <a href="bind/mem_fn.html"> mem_fn</a> - Generalized binders for function/object/pointers and member functions, from Peter Dimov.</li> + + <li><a href="function/index.html">function</a> - Function object wrappers + for deferred calls or callbacks, from Doug Gregor.</li> + <li><a href="functional/index.html">functional</a> - Enhanced + function object adaptors, from Mark Rodgers.</li> + <li><a href="functional/hash/index.html">functional/hash</a> - + A TR1 hash function object that can be extended to hash user defined + types, from Daniel James.</li> + <li><a href="lambda/index.html">lambda</a> - Define small unnamed + function objects at the actual call site, and more, from Jaakko J?rvi and + Gary Powell.</li> + + <li><a href="bind/ref.html">ref</a> - A utility library for + passing references to generic functions, from Jaako Järvi, + Peter Dimov, Doug Gregor, and Dave Abrahams.</li> + + <li><a href="signals/index.html">signals</a> - managed signals & + slots callback implementation, from Doug Gregor.</li> + + <li><a href="utility/utility.htm#result_of">result_of</a> - determines the type of a function call expression.</li> +</ul> + +<h3><a name="Generic">Generic</a> Programming</h3> + +<ul> + <li><a href="utility/call_traits.htm">call_traits</a> - + Defines types for passing parameters, from John Maddock, + Howard Hinnant, et al.</li> + <li><a href="concept_check/concept_check.htm">concept check</a> + - Tools for generic programming, from Jeremy Siek.</li> + <li><a href="utility/enable_if.html">enable_if</a> - + Selective inclusion of function template overloads, from Jaakko + Järvi, Jeremiah Willcock, and Andrew Lumsdaine.</li> + <li><a href="function_types/index.html">function_types</a> - Type traits + for callable, built-in types, from Tobias Schwinger</li> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> + <li><a href="utility/in_place_factories.html">in_place_factory, typed_in_place_factory</a>- Generic in-place construction + of contained objects with a variadic argument-list, from Fernando Cacciola.</li> + <li><a href="utility/operators.htm">operators</a> - Templates + ease arithmetic classes and iterators, from Dave Abrahams + and Jeremy Siek.</li> + + <li><a href="property_map/property_map.html">property map</a> + - Concepts defining interfaces which map key objects to + value objects, from Jeremy Siek.</li> + <li><a href="static_assert/static_assert.htm">static_assert</a> + - Static assertions (compile time assertions), from John + Maddock.</li> + <li><a href="type_traits/index.html">type_traits</a> - + Templates for fundamental properties of types, from John + Maddock, Steve Cleary, et al.</li> +</ul> + +<h3>Template <a name="Metaprogramming"> Metaprogramming</a></h3> + +<ul> + <li><a href="function_types/index.html">function_types</a> - Type traits + for callable, built-in types, from Tobias Schwinger</li> + <li><a href="fusion/index.html">fusion</a> - + Library for working with tuples, including various containers, + algorithms, etc. From Joel de Guzman, Dan Marsden and Tobias Schwinger.</li> + <li><a href="mpl/doc/index.html">mpl</a> - Template metaprogramming + framework of compile-time algorithms, sequences and metafunction classes, + from Aleksey Gurtovoy.</li> + <li><a href="static_assert/static_assert.htm">static_assert</a> + - Static assertions (compile time assertions), from John + Maddock.</li> + <li><a href="type_traits/index.html">type_traits</a> - + Templates for fundamental properties of types, from John + Maddock, Steve Cleary, et al.</li> +</ul> + +<h3><a name="Preprocessor">Preprocessor</a> Metaprogramming</h3> + +<ul> + <li><a href="preprocessor/doc/index.html">preprocessor</a> - Preprocessor + metaprogramming tools including repetition and recursion, from Vesa Karvonen + and Paul Mensonides.</li> +</ul> + +<h3><a name="Concurrent">Concurrent</a> Programming</h3> + +<ul> + <li><a href="asio/index.html">asio</a> - Portable networking and other low-level + I/O, including sockets, timers, hostname resolution, socket iostreams, serial + ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff.</li> + <li><a href="interprocess/index.html">interprocess </a>- Shared memory, memory mapped files, + process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga</li> + <li><a href="../doc/html/mpi.html">MPI</a> - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer.</li> + <li><a href="thread/doc/index.html">thread</a> - Portable C++ + multi-threading, from William Kempf.</li> +</ul> + +<h3><a name="Math">Math</a> and numerics</h3> + +<ul> + <li><a href="accumulators/index.html">accumulators</a> - Framework for incremental + calculation, and collection of statistical accumulators, from Eric Niebler.</li> + <li>Cacciola.</li> + <li><a href="integer/index.html">integer</a> - Headers to ease + dealing with integral types.</li> + <li><a href="numeric/interval/doc/interval.htm">interval </a>- Extends the + usual arithmetic functions to mathematical intervals, from Guillaume + Melquiond, Hervé Brönnimann and Sylvain Pion.</li> + <li><a href="math/doc/index.html">math</a> - Several contributions in the + domain of mathematics, from various authors.</li> + <li><a href="math/doc/complex/html/index.html">math/complex number algorithms</a> - + These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.</li> + <li><a href="math/doc/common_factor.html">math/common_factor</a> - Greatest + common divisor and least common multiple, from Daryle Walker.</li> + <li><a href="math/doc/octonion/html/index.html">math/octonion</a> - + Octonions, from Hubert Holin.</li> + <li><a href="math/doc/quaternion/html/index.html">math/quaternion</a> - + Quaternions, from Hubert Holin.</li> + <li><a href="math/doc/sf_and_dist/html/index.html">math/special_functions</a> - + A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.</li> + <li><a href="math/doc/sf_and_dist/html/index.html">math/statistical distributions</a> - + A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow</li> + <li><a href="multi_array/doc/index.html">multi_array</a> - Multidimensional + containers and adaptors for arrays of contiguous data, from Ron Garcia.</li> + <li><a href="numeric/conversion/doc/html/index.html">numeric/conversion</a> - Optimized Policy-based Numeric Conversions, + from Fernando </li> + <li><a href="utility/operators.htm">operators</a> - Templates + ease arithmetic classes and iterators, from Dave Abrahams + and Jeremy Siek.</li> + <li><a href="random/index.html">random</a> - A complete + system for random number generation, from Jens Maurer.</li> + <li><a href="rational/index.html">rational</a> - A rational + number class, from Paul Moore.</li> + <li><a href="numeric/ublas/doc/index.htm">uBLAS</a> - Basic linear algebra + for dense, packed and sparse matrices, from Joerg Walter and Mathias Koch.</li> +</ul> + +<h3><a name="Correctness">Correctness</a> and testing</h3> + +<ul> + <li><a href="concept_check/concept_check.htm">concept check</a> + - Tools for generic programming, from Jeremy Siek.</li> + <li><a href="static_assert/static_assert.htm">static_assert</a> + - Static assertions (compile time assertions), from John + Maddock.</li> + <li><a href="test/index.html">test</a> - Support for simple program testing, + full unit testing, and for program + execution monitoring, from Gennadiy Rozental.</li> +</ul> + +<h3><a name="Data">Data</a> structures</h3> + +<ul> + <li><a href="any/index.html">any</a> - Safe, generic container for single + values of different value types, from Kevlin Henney.</li> + <li><a href="bimap/index.html">bimap</a> - Bidirectional maps, from Matias Capeletto. + </li> + <li><a href="utility/compressed_pair.htm">compressed_pair</a> + - Empty member optimization, from John Maddock, Howard + Hinnant, et al.</li> + <li><a href="fusion/index.html">fusion</a> - + Library for working with tuples, including various containers, algorithms, etc. + From Joel de Guzman and Dan Marsden and Tobias Schwinger.</li> + <li><a href="multi_index/doc/index.html">multi_index</a> - Containers with + multiple STL-compatible access interfaces, from Joaquín M López + Muñoz.</li> + <li><a href="ptr_container/index.html">pointer container</a> + - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen. </li> + <li><a href="tuple/doc/tuple_users_guide.html">tuple</a> - Ease definition of functions returning multiple values, and more, + from Jaakko Järvi.</li> + <li><a href="variant/index.html">variant</a> - Safe, generic, stack-based + discriminated union container, from Eric Friedman and Itay Maman.</li> +</ul> + +<h3><a name="Image-processing">Image processing</a></h3> +<ul> + <li><a href="gil/doc/index.html">gil</a> - Generic Image Library, from + Lubomir Bourdev and Hailin Jin.</li> +</ul> + +<h3><a name="IO">Input/Output</a></h3> +<ul> + <li><a href="asio/index.html">asio</a> - Portable networking and other low-level + I/O, including sockets, timers, hostname resolution, socket iostreams, serial + ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff.</li> + <li><a href="assign/index.html">assign</a> - Filling containers + with constant or generated data has never been + easier, from Thorsten Ottosen. + </li> + + <li><a href="format/index.html">format</a> - Type-safe 'printf-like' format + operations, from Samuel Krempp.</li> + <li><a href="io/doc/ios_state.html">io state savers</a> - Save I/O state to + prevent jumbled data, from Daryle Walker.</li> + <li><a href="iostreams/doc/index.html">iostreams</a> - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.</li> + <li><a href="../doc/html/program_options.html">program_options</a> - Access to configuration + data given on command line, in config files and other sources, from Vladimir Prus.</li> + <li><a href="serialization/doc/index.html">serialization</a> - Serialization +of arbitrary data for persistence and marshalling, from Robert Ramey</li> + +</ul> + +<h3><a name="Inter-language">Inter-language</a> support</h3> + +<ul> + <li><a href="python/doc/index.html">python</a> - Reflects C++ + classes and functions into <a + href="http://www.python.org">Python</a>, from Dave + Abrahams.</li> +</ul> + +<h3><a name="Memory">Memory</a></h3> + +<ul> + <li><a href="pool/doc/index.html">pool</a> - Memory pool management, from + Steve Cleary.</li> + <li><a href="smart_ptr/index.html">smart_ptr</a> - Five smart + pointer class templates, from Greg Colvin, Beman Dawes, + Peter Dimov, and Darin Adler.</li> + <li><a href="utility/utility.htm">utility</a> - Class <b>noncopyable</b> + plus <b>checked_delete()</b>, <b>checked_array_delete()</b>, <b>next(),</b> + <b>prior()</b> + function templates, plus <b>base-from-member idiom</b>, from Dave Abrahams and others. </li> +</ul> + +<h3><a name="Parsing">Parsing</a></h3> + +<ul> + <li><a href="spirit/index.html">spirit</a> - LL parser framework + represents parsers directly as EBNF grammars in inlined C++, from Joel de + Guzman, Hartmut Kaiser, Dan Nuffer and team.</li> +</ul> + +<h3><a name="Programming">Programming Interfaces</a></h3> + +<ul> + <li><a href="function/index.html">function</a> - Function object wrappers + for deferred calls or callbacks, from Doug Gregor.</li> + + <li><span class="library"><a href= + "parameter/doc/html/index.html">parameter</a></span> - + Write functions that accept arguments by name, by David Abrahams + and Daniel Wallin.</li> +</ul> + +<h3><a name="Miscellaneous">Miscellaneous</a></h3> + +<ul> + <li><a href="utility/base_from_member.html">base-from-member</a> - Idiom to + initialize a base class with a member, from Daryle Walker.</li> + <li><a href="utility/compressed_pair.htm">compressed_pair</a> + - Empty member optimization, from John Maddock, Howard + Hinnant, et al.</li> + <li><a href="conversion/index.html">conversion</a> - Polymorphic and lexical casts, from Dave Abrahams and + Kevlin Henney.</li> + <li><a href="crc/index.html">crc</a> - Cyclic Redundancy Code, from Daryle + Walker.</li> + <li><a href="date_time/doc/index.html">date_time</a> - Date-Time library from Jeff Garland.</li> + <li><a href="exception/doc/boost-exception.html">exception</a> - A library for transporting of arbitrary data in exception objects, and transporting of exceptions between threads (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a>), from Emil Dotchevski.</li> + <li><a href="filesystem/doc/index.htm">filesystem</a> - Portable paths, + iteration over directories, and other useful filesystem operations, from + Beman Dawes.</li> + <li><a href="numeric/conversion/doc/html/index.html">numeric/conversion</a> - Optimized Policy-based Numeric Conversions, + from Fernando Cacciola.</li> + <li><a href="optional/doc/html/index.html">optional</a> - Discriminated-union + wrapper for optional values, from Fernando Cacciola.</li> + <li><a href="../doc/html/program_options.html">program_options</a> - Access to configuration + data given on command line, in config files and other sources, from Vladimir Prus.</li> + <li><a href="statechart/doc/index.html">statechart</a> - Arbitrarily + complex finite state machines can be implemented in easily readable and + maintainable C++ code, from Andreas Huber.</li> + <li><a href="system/doc/index.html">system</a> - Operating + system support, including the diagnostics support that will be part of the + C++0x standard library, from Beman Dawes.</li> + <li><a href="timer/index.html">timer</a> - Event timer, + progress timer, and progress display classes, from Beman + Dawes.</li> + <li><a href="tr1/index.html">TR1</a> - An implementation of the Technical + Report on C++ Library Extensions, using other Boost libraries as a basis, from John Maddock.</li> + <li><a href="../doc/html/tribool.html">tribool</a> - 3-state boolean type library, from Doug Gregor.</li> + <li><a href="typeof/index.html">typeof</a> - + Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt.</li> + <li><a href="units/index.html">units</a> - + Zero-overhead dimensional analysis and unit/quantity + manipulation and conversion, from Matthias Schabel and Steven Watanabe.</li> + <li><a href="utility/utility.htm">utility</a> - Class <b>noncopyable</b> + plus <b>checked_delete()</b>, <b>checked_array_delete()</b>, <b>next(),</b> + <b>prior()</b> + function templates, plus <b>base-from-member idiom</b>, from Dave Abrahams and others. </li> + <li><a href="utility/value_init.htm">value_initialized</a> - Wrapper for uniform-syntax value initialization, + from Fernando Cacciola, based on the original idea of David Abrahams.</li> +</ul> + +<h3>Broken compiler <a name="workarounds">workarounds</a></h3> + +<ul> + <li><a href="compatibility/index.html">compatibility</a> - Help for + non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens + Maurer.</li> + <li><a href="config/config.htm">config</a> - Helps boost + library developers adapt to compiler idiosyncrasies; not + intended for library users.</li> +</ul> + +<p>[Category suggestions from Aleksey Gurtovoy and Beman Dawes]</p> + +<hr> + +<h2>Libraries <a name="Removed">Retired</a> from Boost</h2> + +<ul> + <li>compose - Functional composition adapters for the STL, + from Nicolai Josuttis. Removed in Boost version 1.32. + Please use <a href="bind/bind.html">Bind</a> or <a + href="lambda/index.html">Lambda</a> instead.</li> +</ul> + +<hr> + +<p>Revised +<!--webbot bot="Timestamp" s-type="EDITED" +s-format="%d %b %Y" startspan -->19 Mar 2008<!--webbot bot="Timestamp" endspan i-checksum="14923" --></p> + +<p>© Copyright Beman Dawes 2000-2004</p> +<p>Distributed under the Boost Software License, Version 1.0. +(See file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> +or <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>) +</p> + +</body> +</html> diff --git a/libs/logic b/libs/logic new file mode 160000 +Subproject 20e98774aec74061e61ad21d274cf33d6473e85 diff --git a/libs/maintainers.txt b/libs/maintainers.txt new file mode 100644 index 0000000000..e4f84a9211 --- /dev/null +++ b/libs/maintainers.txt @@ -0,0 +1,90 @@ +# Copyright (C) 2005, 2007 Douglas Gregor <doug.gregor -at- gmail.com> +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt +# +# This file lists the names and e-mail addresses of the maintainers +# of each Boost library, and is used by the regression-reporting +# scripts to direct e-mail related to those libraries to the +# maintainers. When making changes to this file, please be careful +# to closely follow the format of the library. + +accumulators Eric Niebler <eric -at- boost-consulting.com> +algorithm/minmax Herve Bronnimann <hbr -at- poly.edu> +algorithm/string Pavol Droba <droba -at- topmail.sk> +any Alexander Nasonov <alexander.nasonov -at- gmail.com> +array +asio Chris Kohlhoff <chris -at- kohlhoff.com> +assign Thorsten Ottosen <nesotto -at- cs.auc.dk> +bimap Matias Capeletto <matias.capeletto -at- gmail.com> +bind Peter Dimov <pdimov -at- mmltd.net> +circular_buffer Jan Gaspar <jano_gaspar -at- yahoo.com> +concept_check Jeremy Siek <jeremy.siek -at- gmail.com> +config John Maddock <john -at- johnmaddock.co.uk> +conversion Alexander Nasonov <alexander.nasonov -at- gmail.com> +crc Daryle Walker <darylew -at- hotmail.com> +date_time Jeff Garland <jeff -at- crystalclearsoftware.com> +disjoint_sets Jeremy Siek <jeremy.siek -at- gmail.com> +dynamic_bitset Jeremy Siek <jeremy.siek -at- gmail.com> +exception Emil Dotchevski <emil -at- revergestudios.com> +filesystem Beman Dawes <bdawes -at- acm.org> +foreach Eric Niebler <eric -at- boost-consulting.com> +format Samuel Krempp <krempp -at- crans.ens-cachan.fr> +function Douglas Gregor <dgregor -at- cs.indiana.edu> +function_types Tobias Schwinger <tschwinger -at- isonews2.com> +functional +functional/hash Daniel James <daniel_james -at- fmail.co.uk> +fusion Joel de Guzman <joel -at- boost-consulting.com>, Dan Marsden <danmarsden -at- yahoo.co.uk>, Tobias Schwinger <tschwinger -at- isonews2.com> +function_types Tobias Schwinger <tschwinger -at- isonews2.com> +gil Lubomir Bourdev <lbourdev -at- adobe.com>, Hailin Jin <hljin -at- adobe.com> +graph Douglas Gregor <dgregor -at- cs.indiana.edu> +integer Daryle Walker <darylew -at- hotmail.com> +interprocess Ion Gaztanaga <igaztanaga -at- gmail.com> +intrusive Ion Gaztanaga <igaztanaga -at- gmail.com> +io Daryle Walker <darylew -at- hotmail.com> +iostreams Jonathan Turkanis <turkanis -at- coderage.com> +iterator David Abrahams <dave -at- boost-consulting.com>, Thomas Witt <witt - at - acm.org> +lambda Jaakko Jarvi <jarvi -at- cs.tamu.edu> +logic Douglas Gregor <dgregor -at- cs.indiana.edu> +math Hubert Holin <Hubert.Holin -at- meteo.fr>, John Maddock <john -at- johnmaddock.co.uk> +mpl Aleksey Gurtovoy <agurtovoy -at- meta-comm.com> +multi_array Ronald Garcia <garcia -at- osl.iu.edu> +multi_index Joaquin M Lopez Munoz <joaquin -at- tid.es> +numeric/conversion Fernando Cacciola <fernando_cacciola -at- ciudad.com.ar> +numeric/interval Sylvain Pion <Sylvain.Pion -at- sophia.inria.fr>, Herve Bronnimann <hbr -at- poly.edu>, Guillaume Melquiond <guillaume.melquiond -at- ens-lyon.fr> +numeric/ublas Michael Stevens <michael -at- michael-stevens.de> +optional Fernando Cacciola <fernando_cacciola -at- ciudad.com.ar> +parameter David Abrahams <dave -at- boost-consulting.com>, Daniel Wallin <dalwan01 -at- student.umu.se> +pool Stephen Cleary <scleary -at- jerviswebb.com> +preprocessor Paul Mensonides <pmenso57 -at- comcast.net> +program_options Vladimir Prus <ghost -at- cs.msu.su> +property_map Douglas Gregor <dgregor -at- cs.indiana.edu> +ptr_container Thorsten Ottosen <nesotto -at- cs.auc.dk> +python David Abrahams <dave -at- boost-consulting.com> +random Jens Maurer <Jens.Maurer -at- gmx.net> +range Thorsten Ottosen <nesotto -at- cs.auc.dk> +rational Jonathan Turkanis <turkanis -at- coderage.com> +regex John Maddock <john -at- johnmaddock.co.uk> +serialization Robert Ramey <ramey -at- rrsd.com> +signals Douglas Gregor <dgregor -at- cs.indiana.edu> +smart_ptr Beman Dawes <bdawes -at- acm.org>, Peter Dimov <pdimov -at- mmltd.net> +spirit Joel de Guzman <joel -at- boost-consulting.com>, Hartmut Kaiser <hartmut.kaiser -at- gmail.com> +statechart Andreas Huber <ahd6974-boostorg -at- yahoo.com> +static_assert John Maddock <john -at- johnmaddock.co.uk> +test Gennadiy Rozental <gennadiy.rozental -at- thomson.com> +thread Anthony Williams <anthony -at- justsoftwaresolutions.co.uk>, Roland Schwarz <roland.schwarz -at- chello.at> +timer Beman Dawes <bdawes -at- acm.org> +tokenizer John R. Bandela <jbandela -at- ufl.edu> +tr1 John Maddock <john -at- johnmaddock.co.uk> +tuple Jaakko Jarvi <jarvi -at- cs.tamu.edu> +type_traits John Maddock <john -at- johnmaddock.co.uk> +typeof Arkadiy Vertleyb <vertleyb -at- hotmail.com>, Peder Holt <peder.holt -at- gmail.com> +units Matthias Schabel <boost -at- schabel-family.org>, Steven Watanabe <steven -at- providere-consulting.com> +unordered Daniel James <daniel_james -at- fmail.co.uk> +utility +utility/enable_if Jaakko Jarvi <jarvi -at- cs.tamu.edu>, Jeremiah Willcock <jewillco -at- osl.iu.edu> +utility/swap Joseph Gauterin <joseph.gauterin -at- googlemail.com> +variant Eric Friedman <ericbrandon -at- gmail.com> +wave Hartmut Kaiser <hartmut.kaiser -at- gmail.com> +xpressive Eric Niebler <eric -at- boost-consulting.com> + + diff --git a/libs/math b/libs/math new file mode 160000 +Subproject b3b0f8f62260877ef8601533ae6007bbdf29b30 diff --git a/libs/mpi b/libs/mpi new file mode 160000 +Subproject 077c59f472fb0e9f74d850cd79b72fc30a3d734 diff --git a/libs/mpl b/libs/mpl new file mode 160000 +Subproject ffd9a065679e0d86dcc643d62d8994f6bb06aec diff --git a/libs/multi_array b/libs/multi_array new file mode 160000 +Subproject 5d8946a9dde7206eda9e9a92a11c081931fbcd1 diff --git a/libs/multi_index b/libs/multi_index new file mode 160000 +Subproject 3ed5f02c489753ce1e34a9e6b20d34c48a544d1 diff --git a/libs/numeric/conversion b/libs/numeric/conversion new file mode 160000 +Subproject 7897a0fe3a945968daf9f43def98caa6908039d diff --git a/libs/numeric/index.html b/libs/numeric/index.html new file mode 100644 index 0000000000..6c74e6c741 --- /dev/null +++ b/libs/numeric/index.html @@ -0,0 +1,14 @@ +<html> +<head> +<meta http-equiv="refresh" content="0; URL=ublas/doc/index.htm"> +</head> +<body> +Automatic redirection failed, please go to +<a href="ublas/doc/index.htm">ublas/doc/index.htm</a>. <hr> +<p>© Copyright Beman Dawes, 2001</p> +<p>Distributed under the Boost Software License, Version 1.0. (See accompanying +file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy +at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>) +</p> +</body> +</html>
\ No newline at end of file diff --git a/libs/numeric/interval b/libs/numeric/interval new file mode 160000 +Subproject 872e41f88b91884de57168ec53f4df67b3323c8 diff --git a/libs/numeric/sublibs b/libs/numeric/sublibs new file mode 100644 index 0000000000..721d7c4a92 --- /dev/null +++ b/libs/numeric/sublibs @@ -0,0 +1 @@ +The existance of this file tells the regression reporting programs that the directory contains sub-directories which are libraries.
\ No newline at end of file diff --git a/libs/numeric/ublas b/libs/numeric/ublas new file mode 160000 +Subproject df577696d09c0314b7b2a8e4e7f2796d361d606 diff --git a/libs/optional b/libs/optional new file mode 160000 +Subproject 7aa1f1279d47c949926607f7652682bf86d3ad7 diff --git a/libs/parameter b/libs/parameter new file mode 160000 +Subproject 7a43afd755cc7f652b3d18044a6bfec57407faf diff --git a/libs/platform_maintainers.txt b/libs/platform_maintainers.txt new file mode 100644 index 0000000000..756d77b069 --- /dev/null +++ b/libs/platform_maintainers.txt @@ -0,0 +1,38 @@ +# Copyright (C) 2005, 2007 Douglas Gregor <doug.gregor -at- gmail.com> +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt +# +# This file lists the names and e-mail addresses of the maintainers +# of each Boost testing platform , and is used by the regression- +# reporting scripts to direct e-mail related to those platforms to the +# maintainers. When making changes to this file, please be careful +# to closely follow the format of the library. +# +# The format of each line is: +# +# Runner Platform Email addresses + +Sandia-darwin-intel darwin-4.0.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-darwin-ppc darwin-4.0.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-intel intel-linux-8.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-intel intel-linux-9.0 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-intel intel-linux-9.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-gcc gcc-4.2.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-gcc gcc-3.4.3 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-gcc gcc-4.0.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-gcc-64 gcc-4.2.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-gcc-64 gcc-4.1.1 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-sun gcc-3.4.6 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-sun sun-5.7 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-sun sun-5.8 Noel Belcourt <kbelco -at- sandia.gov> +Sandia-sun sun-5.9 Noel Belcourt <kbelco -at- sandia.gov> +"Martin Wille x86_64" gcc-4.2.1_linux_x86_64 Martin Wille <mw8329 -at- yahoo.com.au> +"Martin Wille x86_64" gcc-3.4.6_linux_x86_64 Martin Wille <mw8329 -at- yahoo.com.au> +Huang-WinXP-x86_32 intel-vc8-win-10.0 Sean Huang <huangsean -at- hotmail.com> +Huang-WinXP-x86_32 msvc-8.0 Sean Huang <huangsean -at- hotmail.com> +Huang-Vista-x64 msvc-8.0_64 Sean Huang <huangsean -at- hotmail.com> +Huang-Vista-x64 intel-vc8-win-10.0_x86_64 Sean Huang <huangsean -at- hotmail.com> +Huang-Vista-x64 msvc-8.0_x86_64 Sean Huang <huangsean -at- hotmail.com> +IBM_Canada_Ltd vacpp Chris Cambly <ccambly -at- ca.ibm.com> +RW_WinXP_VC msvc-7.1 Richard Webb <richard.webb -at- boldonjames.com> +RW_WinXP_VC msvc-9.0 Richard Webb <richard.webb -at- boldonjames.com> diff --git a/libs/pool b/libs/pool new file mode 160000 +Subproject d281d3f9ea6e1166aaf7f382eddcf9283ce69a9 diff --git a/libs/preprocessor b/libs/preprocessor new file mode 160000 +Subproject d0e5a6eae6540c8f11c367da5f7d4c4db1c5649 diff --git a/libs/program_options b/libs/program_options new file mode 160000 +Subproject e0a1de7595e0476cfacfef6288922a1f8d89821 diff --git a/libs/property_map b/libs/property_map new file mode 160000 +Subproject 71cd915455a3878a4e968acce1c6f9a5787f8d2 diff --git a/libs/ptr_container b/libs/ptr_container new file mode 160000 +Subproject d25fc6d848d1cbbfd62b10c995ddace945e7842 diff --git a/libs/python b/libs/python new file mode 160000 +Subproject 74c6aadbf41c4a7be64ea829733c8c711e23cdb diff --git a/libs/random b/libs/random new file mode 160000 +Subproject 5878e8acd0dee3407f9fb60ddb5dac8b5c7367a diff --git a/libs/range b/libs/range new file mode 160000 +Subproject aec68d3337ac18861cbeb262e75cda04b11a37a diff --git a/libs/rational b/libs/rational new file mode 160000 +Subproject b2bcf926f4962b89b81cb43c4c5d5963cd8a422 diff --git a/libs/regex b/libs/regex new file mode 160000 +Subproject 64f46149f3562a7317403b3dd6ff4f91bf720d3 diff --git a/libs/serialization b/libs/serialization new file mode 160000 +Subproject 298272182f464a9db10184b5fdc266cf2550ed3 diff --git a/libs/signals b/libs/signals new file mode 160000 +Subproject b7eec5ab6149855a8519297225fa0200123f241 diff --git a/libs/smart_ptr b/libs/smart_ptr -Subproject c47f309991b83794f0f037a320dc223939d65b0 +Subproject 40f6214c421b87b12d361c250495d220bee1454 diff --git a/libs/spirit b/libs/spirit new file mode 160000 +Subproject d27fc739bc8d2558d3120877c44aa0d101a78e3 diff --git a/libs/statechart b/libs/statechart new file mode 160000 +Subproject 59a0c2f736f3a13251e7071b22a673303c65f29 diff --git a/libs/static_assert b/libs/static_assert new file mode 160000 +Subproject d227a6142cafdb7915ca33c3617ca2af001dfc7 diff --git a/libs/system b/libs/system new file mode 160000 +Subproject f01d4d0f8654eb4fbb1d1626c386bf486d8af87 diff --git a/libs/test b/libs/test new file mode 160000 +Subproject c4e6a18a85ec68a661215b3d5857310b9824794 diff --git a/libs/thread b/libs/thread new file mode 160000 +Subproject cc6fe0a2e46876a9e2de3a3727d2e7be8086bc3 diff --git a/libs/timer b/libs/timer new file mode 160000 +Subproject a21f4a4d99be52ba40f55c7e01efc83a7215e60 diff --git a/libs/tokenizer b/libs/tokenizer new file mode 160000 +Subproject b12b55945db9c431d6038f473534c6aa4bd45c8 diff --git a/libs/tr1 b/libs/tr1 new file mode 160000 +Subproject 2b4bea5ae1507e78f6b73972c19aa7b62b583be diff --git a/libs/tuple b/libs/tuple new file mode 160000 +Subproject b2825197537153119b938699aee74f25e25a812 diff --git a/libs/type_traits b/libs/type_traits new file mode 160000 +Subproject 6d019d65e80495feb284244e8f419128ac0f3e4 diff --git a/libs/typeof b/libs/typeof new file mode 160000 +Subproject bad4e25aad0cfafa1979934f330f2de4e1e54c9 diff --git a/libs/units b/libs/units new file mode 160000 +Subproject 3ad21ea0d7e86a3ea3b05c0e4e0d76ddb9832e6 diff --git a/libs/unordered b/libs/unordered new file mode 160000 +Subproject 81d2bd284cbd21f5770f30d6c783a8266bfb383 diff --git a/libs/utility b/libs/utility new file mode 160000 +Subproject 0da0187b57c39b0624a22c1ef7f5022b07b28e5 diff --git a/libs/variant b/libs/variant new file mode 160000 +Subproject bed1e24529f388ded6412bf9e8cb969bb7f9e11 diff --git a/libs/wave b/libs/wave new file mode 160000 +Subproject 50bf11bb9b960ca8c66d18fbe7d8c362296607d diff --git a/libs/xpressive b/libs/xpressive new file mode 160000 +Subproject 932db914627ff32ce207ee490a923b8416cab4f diff --git a/more/BoostSponsorshipAgreement.pdf b/more/BoostSponsorshipAgreement.pdf Binary files differnew file mode 100644 index 0000000000..ea8b838b2f --- /dev/null +++ b/more/BoostSponsorshipAgreement.pdf diff --git a/more/blanket-permission.txt b/more/blanket-permission.txt new file mode 100644 index 0000000000..6096aeac1c --- /dev/null +++ b/more/blanket-permission.txt @@ -0,0 +1,104 @@ +The following people hereby grant permission to replace all existing +licenses on their contributions to Boost with the Boost Software +License, Version 1.0. (boostinspect:nolicense boostinspect:nocopyright) + +Aleksey Gurtovoy (agurtovoy@meta-comm.com) +Andrei Alexandrescu (andrewalex - at - hotmail.com) (See Boost list message of August 12, 2004 11:06:58 AM EST) +Andrew Lumsdaine () +Anthony Williams (anthony -at- justsoftwaresolutions.co.uk) +Beman Dawes (bdawes@acm.org) +Brad King (brad.king -at- kitware.com) (See Boost list message of Wed, 21 Jul 2004 11:15:46 -0400) +Brian Osman (osman -at- vvisions.com) (See CVS log) +Bruce Barr (schmoost -at- yahoo.com) (See Boost list of Mon, 16 Aug 2004 15:06:43 -0500) +Bruno da Silva de Oliveira (bruno - at - esss.com.br) +Christain Engstrom (christian.engstrom -at- glindra.org) (See Boost list message of Mon, 30 Aug 2004 14:31:49 +0200) +Cromwell D Enage (sponage -at- yahoo.com) (See Boost list message of August 12, 2004 11:49:13 AM EST) +Dan Gohman (djg -at- cray.com) (See Boost list messsage of Sat, 21 Aug 2004 10:54:59 +0100) +Dan Nuffer (dan -at- nuffer.name) +Daniel Frey (d.frey -at- gmx.de, daniel.frey -at- aixigo.de) +Daniel Nuffer (dan -at- nuffer.name) +Darin Adler (darin -at- bentspoon.com) (Email to Andreas Huber, see change log) +Daryle Walker (darylew - at - hotmail.com) +Dave Abrahams (dave@boost-consulting.com) +Dave Moore (dmoore -at- viefinancial.com) (See Boost list message of 18 Dec 2003 15:35:50 -0500) +David Abrahams (dave@boost-consulting.com) +Dietmar Kuehl (dietmar_kuehl -at- yahoo.com) (Email to Andreas Huber, see change log) +Douglas Gregor (gregod -at- cs.rpi.edu, dgregor -at- cs.indiana.edu, doug.gregor -at- gmail.com) +Dr John Maddock (john - at - johnmaddock.co.uk) +Edward D. Brey (brey -at- ductape.net) (Email to Andreas Huber, see change log) +Eric Ford (un5o6n902 -at- sneakemail.com) (See Boost list message of Sun, 15 Aug 2004 10:29:13 +0100) +Eric Friedman (ebf@users.sourceforge.net) +Eric Niebler (eric@boost-consulting.com) +Fernando Cacciola (fernando_cacciola@ciudad.com.ar) +Fernando Luis Cacciola Carballal (fernando_cacciola@ciudad.com.ar) +Francois Faure (Francois.Faure -at- imag.fr) (See CVS log) +Gary Powell (powellg - at - amazon.com) (See Boost list message of 10 Feb 2004 14:22:46 -0800) +Gennadiy Rozental (rogeeff -at- mail.com) (Email to Andreas Huber, see change log) +Gottfried Ganssauge (Gottfried.Ganssauge -at- HAUFE.DE) (See Boost List message of Mon, 16 Aug 2004 10:09:19 +0200) +Gottfried Ganßauge (Gottfried.Ganssauge -at- HAUFE.DE) (Alternative spelling of Gottfried Ganssauge) +Greg Colvin (gregory.colvin -at- oracle.com) (See Boost list message of Sat, 14 Aug 2004 10:57:00 +0100) +Gregory Colvin (gregory.colvin -at- oracle.com) (See Boost list message of Sat, 14 Aug 2004 10:57:00 +0100) +Gunter Winkler (gunter.winkler -at- unibw-muenchen.de) (See Boost List message of Mon, 16 Aug 2004 10:24:17 +0200) +Hartmut Kaiser (hartmut.kaiser -at- gmail.com) +Herve Bronnimann (hbr -at- poly.edu) +Hervé Brönnimann (hbr -at- poly.edu) +Housemarque Oy (Ilari Kuittinen ilari.kuittinen -at- housemarque.fi) +Howard Hinnant (hinnant -at- twcny.rr.com) (See Boost list message of July 25, 2004 3:44:49 PM EST) +Hubert Holin (hubert_holin -at- users.sourceforge.net) +Indiana University () +Itay Maman (imaman -at- users.sourceforge.net) +Jaakko Järvi (jajarvi -at- osl.iu.edu) +Jaap Suter (j.suter -at- student.utwente.nl) (See Boost list message of Thu, 16 Sep 2004 09:32:43 -0700) +Jeff Garland (jeff - at - crystalclearsoftware.com) (see Boost list post of July 25, 2004 19:31:09 -0700) +Jens Maurer (Jens.Maurer@gmx.net) +Jeremy G Siek (jsiek@osl.iu.edu) +Jeremy Siek (jsiek@osl.iu.edu) +Joel de Guzman (joel -at- boost-consulting.com) (See Boost list message of July 25, 2004 8:32:00 PM EST) +John Bandela (jbandela-at-ufl.edu) +John Maddock (john - at - johnmaddock.co.uk) +John R Bandela (jbandela-at-ufl.edu) +Jonathan Turkanis (turkanis -at- coderage dot com) +Juergen Hunold (hunold -at- ive.uni-hannover.de) (See Boost List Message of Fri, 13 Aug 2004 19:39:55 +0200) +Kevlin Henney (kevlin -at- curbralan.com) (See Boost list message of Wed, 15 Sep 2004 18:15:17 +0200) +Kresimir Fresl (fresl -at- master.grad.hr) (See Boost List message of August 16, 2004 8:23:35 AM EST) +Lars Gullik Bjønnes (larsbj -at- lyx.org) (See Boost list message of Tue, 17 Aug 2004 15:49:02 +0100) +Lie-Quan Lee (liequan - at - slac.stanford.edu, llee - at - cs.indiana.edu) +Maarten Keijzer (mkeijzer -at- cs.vu.nl) (See Boost list message of Wed, 18 Aug 2004 21:43:18 +0100) +Mac Murrett (mmurrett -at- mac.com) +Marc Wintermantel (wintermantel -at- imes.mavt.ethz.ch, wintermantel -at- even-ag.ch) (See CVS log) +Michael Glassford (glassfordm - at - hotmail.com) +Michael Stevens (Michael.Stevens - at - epost.de) +Multi Media Ltd. (pdimov@mmltd.net) +Nicolai M Josuttis (solutions -at- josuttis.com) (See Boost list message of Mon, 30 Aug 2004 10:52:00 +0100) +Nikolay Mladenov (nickm -at- sitius.com) (See Boost list message of Tue, 17 Aug 2004 15:45:33 +0100) +Paul Mensonides (pmenso57 -at- comcast.net) (See Boost list message of July 21, 2004 1:12:21 AM EST) +Pavol Droba (droba -at- topmail.sk) +Peter Dimov (pdimov@mmltd.net) +R W Grosse-Kunstleve (RWGrosse-Kunstleve@lbl.gov) +Ralf W. Grosse-Kunstleve (RWGrosse-Kunstleve@lbl.gov) +Rational Discovery LLC (Greg Landrum Landrum -at- RationalDiscovery.com) (See Boost list post of Tue, 17 Aug 2004 10:35:36 +0100) +Rene Rivera (grafik/redshift-software.com, rrivera/acm.org) +Robert Ramey (ramey@www.rrsd.com) +Roland Richter (roland -at- flll.jku.at) (See Boost list post of Mon, 16 Aug 2004 22:16:55 +0200) +Roland Schwarz (roland.schwarz -at- chello.at) +Ronald Garcia (garcia -at- cs.indiana.edu) (Email to Andreas Huber, see change log) +Samuel Krempp (krempp -at- crans.ens-cachan.fr) (See Boost list message of Mon, 27 Sep 2004 13:18:36 +0200) +Stefan Seefeld (seefeld -at- sympatico.ca) +Stephen Cleary (scleary -at- jerviswebb.com) (See Boost list message of Tue, 28 Sep 2004 13:11:46 +0100) +Steve Cleary (Variant of Stephen Cleary) +Sylvain Pion (Sylvain.Pion - at - sophia.inria.fr) +The Trustees of Indiana University () +Thomas Witt (witt - at - ive.uni-hannover.de, witt - at - acm.org, witt - at - styleadvisor.com) +Thorsten Jørgen Ottosen (nesotto - at - cs.auc.dk) +Thorsten Ottosen (nesotto - at - cs.auc.dk) +Toon Knapen (toon dot knapen - at - fft.be) +Trustees of Indiana University () +University of Notre Dame () +Vladimir Prus (ghost@cs.msu.su) +William E. Kempf () (email to Beman Dawes, 9/14/2006 4:18 PM) +Joerg Walter (jhr.walter - at - t-online.de : email to ublas mailing list Mon, 17 Sep 2007 10:17:08 +0200) +Mathias Koch (mkoch - at - idesis.de 7 : email to boost-owner@lists.boost.org Sep 2007 13:20:09 +0200) + +--- end --- + + diff --git a/more/faq.htm b/more/faq.htm new file mode 100644 index 0000000000..302bf82257 --- /dev/null +++ b/more/faq.htm @@ -0,0 +1,15 @@ +<html> +<head> +<meta http-equiv="refresh" content="0; URL=http://www.boost.org/users/faq.html"> +</head> +<body> +Automatic redirection failed, please go to +<a href="http://www.boost.org/users/faq.html"> +http://www.boost.org/users/faq.html</a>. +<hr> +<p>© Copyright Beman Dawes, 2008</p> +<p> Distributed under the Boost Software License, Version 1.0. (See +<a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or <a href="http://www.boost.org/LICENSE_1_0.txt"> +www.boost.org/LICENSE_1_0.txt</a>)</p> +</body> +</html>
\ No newline at end of file diff --git a/more/getting_started.html b/more/getting_started.html new file mode 100644 index 0000000000..62d669e763 --- /dev/null +++ b/more/getting_started.html @@ -0,0 +1,12 @@ +<html> +<head> +<meta http-equiv="refresh" content="0; URL=getting_started/index.html"> +</head> +<body> +Automatically loading index page... if nothing happens, please go to +<a href="getting_started/index.html">getting_started/index.html</a>. +</body> +</html> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> diff --git a/more/getting_started/Jamfile.v2 b/more/getting_started/Jamfile.v2 new file mode 100644 index 0000000000..770aae934d --- /dev/null +++ b/more/getting_started/Jamfile.v2 @@ -0,0 +1,23 @@ +# Copyright David Abrahams 2006. Distributed under the Boost +# Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +import docutils ; + +import path ; +sources = [ path.glob . : *.rst ] ; +bases = $(sources:S=) ; + +# This is a path relative to the html/ subdirectory where the +# generated output will eventually be moved. +stylesheet = "--stylesheet=../../rst.css" ; + +for local b in $(bases) +{ + html $(b) : $(b).rst : + + <docutils-html>"--link-stylesheet --traceback --trim-footnote-reference-space --footnote-references=superscript "$(stylesheet) + ; +} + +alias htmls : $(bases) ; +stage . : $(bases) ; diff --git a/more/getting_started/detail/binary-head.rst b/more/getting_started/detail/binary-head.rst new file mode 100644 index 0000000000..21f32aba72 --- /dev/null +++ b/more/getting_started/detail/binary-head.rst @@ -0,0 +1,10 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Prepare to Use a Boost Library Binary +===================================== + +If you want to use any of the separately-compiled Boost libraries, +you'll need to acquire library binaries. + diff --git a/more/getting_started/detail/build-from-source-head.rst b/more/getting_started/detail/build-from-source-head.rst new file mode 100644 index 0000000000..276f6f5e23 --- /dev/null +++ b/more/getting_started/detail/build-from-source-head.rst @@ -0,0 +1,126 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Boost.Build_ is a text-based system for developing, testing, and +installing software. To use it, you'll need an executable called +``bjam``. + +.. |precompiled-bjam| replace:: pre-compiled ``bjam`` executables + + +.. _precompiled-bjam: http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941 +.. .. _Boost.Jam documentation: Boost.Jam_ +.. _Boost.Build: ../../tools/build/index.html +.. _Boost.Jam: ../../tools/jam/index.html +.. _Boost.Build documentation: Boost.Build_ + +Get ``bjam`` +............ + +``bjam`` is the |command-line tool| that drives the Boost Build +system. To build Boost binaries, you'll invoke ``bjam`` from the +Boost root. + +Boost provides |precompiled-bjam|_ for a variety of platforms. +Alternatively, you can build ``bjam`` yourself using `these +instructions`__. + +__ `building bjam`_ + + +.. _toolset: +.. _toolset-name: + +Identify Your Toolset +..................... + +First, find the toolset corresponding to your compiler in the +following table. + +.. Note:: If you previously chose a toolset for the purposes of + `building bjam`_, you should assume it won't work and instead + choose newly from the table below. + +.. _building bjam: ../../doc/html/jam/building.html + ++-----------+--------------------+-----------------------------+ +|Toolset |Vendor |Notes | +|Name | | | ++===========+====================+=============================+ +|``acc`` |Hewlett Packard |Only very recent versions are| +| | |known to work well with Boost| ++-----------+--------------------+-----------------------------+ +|``borland``|Borland | | ++-----------+--------------------+-----------------------------+ +|``como`` |Comeau Computing |Using this toolset may | +| | |require configuring__ another| +| | |toolset to act as its backend| ++-----------+--------------------+-----------------------------+ +|``cw`` |Metrowerks/FreeScale|The CodeWarrior compiler. We| +| | |have not tested versions of | +| | |this compiler produced since | +| | |it was sold to FreeScale. | ++-----------+--------------------+-----------------------------+ +|``dmc`` |Digital Mars |As of this Boost release, no | +| | |version of dmc is known to | +| | |handle Boost well. | ++-----------+--------------------+-----------------------------+ +|``darwin`` |Apple Computer |Apple's version of the GCC | +| | |toolchain with support for | +| | |Darwin and MacOS X features | +| | |such as frameworks. | ++-----------+--------------------+-----------------------------+ +|``gcc`` |The Gnu Project |Includes support for Cygwin | +| | |and MinGW compilers. | ++-----------+--------------------+-----------------------------+ +|``hp_cxx`` |Hewlett Packard |Targeted at the Tru64 | +| | |operating system. | ++-----------+--------------------+-----------------------------+ +|``intel`` |Intel | | ++-----------+--------------------+-----------------------------+ +|``kylix`` |Borland | | ++-----------+--------------------+-----------------------------+ +|``msvc`` |Microsoft | | ++-----------+--------------------+-----------------------------+ +|``qcc`` |QNX Software Systems| | ++-----------+--------------------+-----------------------------+ +|``sun`` |Sun |Only very recent versions are| +| | |known to work well with | +| | |Boost. | ++-----------+--------------------+-----------------------------+ +|``vacpp`` |IBM |The VisualAge C++ compiler. | ++-----------+--------------------+-----------------------------+ + +__ Boost.Build_ + +If you have multiple versions of a particular compiler installed, +you can append the version number to the toolset name, preceded by +a hyphen, e.g. ``intel-9.0`` or +``borland-5.4.3``. |windows-version-name-caveat| + + +.. _build directory: +.. _build-directory: + +Select a Build Directory +........................ + +Boost.Build_ will place all intermediate files it generates while +building into the **build directory**. If your Boost root +directory is writable, this step isn't strictly necessary: by +default Boost.Build will create a ``bin.v2/`` subdirectory for that +purpose in your current working directory. + +Invoke ``bjam`` +............... + +.. |build-directory| replace:: *build-directory* +.. |toolset-name| replace:: *toolset-name* + +Change your current directory to the Boost root directory and +invoke ``bjam`` as follows: + +.. parsed-literal:: + + bjam **--build-dir=**\ |build-directory|_ **--toolset=**\ |toolset-name|_ *[*\ **--build-type=complete**\ *]* stage diff --git a/more/getting_started/detail/build-from-source-tail.rst b/more/getting_started/detail/build-from-source-tail.rst new file mode 100644 index 0000000000..5a07b715cb --- /dev/null +++ b/more/getting_started/detail/build-from-source-tail.rst @@ -0,0 +1,67 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Building the special ``stage`` target places Boost +library binaries in the ``stage``\ |/| subdirectory of your `build +directory`_. + +.. Note:: ``bjam`` is case-sensitive; it is important that all the + parts shown in **bold** type above be entirely lower-case. + +For a description of other options you can pass when invoking +``bjam``, type:: + + bjam --help + +In particular, to limit the amount of time spent building, you may +be interested in: + +* reviewing the list of library names with ``--show-libraries`` +* limiting which libraries get built with the ``--with-``\ + *library-name* or ``--without-``\ *library-name* options +* choosing a specific build variant by adding ``release`` or + ``debug`` to the command line. + +Expected Build Output +--------------------- + +During the process of building Boost libraries, you can expect to +see some messages printed on the console. These may include + +* Notices about Boost library configuration—for example, the Regex + library outputs a message about ICU when built without Unicode + support, and the Python library may be skipped without error (but + with a notice) if you don't have Python installed. + +* Messages from the build tool that report the number of targets + that were built or skipped. Don't be surprised if those numbers + don't make any sense to you; there are many targets per library. + +* Build action messages describing what the tool is doing, which + look something like: + + .. parsed-literal:: + + *toolset-name*.c++ *long*\ /\ *path*\ /\ *to*\ /\ *file*\ /\ *being*\ /\ *built* + +* Compiler warnings. + +In Case of Build Errors +----------------------- + +The only error messages you see when building Boost—if any—should +be related to the IOStreams library's support of zip and bzip2 +formats as described here__. Install the relevant development +packages for libz and libbz2 if you need those features. Other +errors when building Boost libraries are cause for concern. + +__ ../../libs/iostreams/doc/installation.html + +If it seems like the build system can't find your compiler and/or +linker, consider setting up a ``user-config.jam`` file as described +in the `Boost.Build documentation`_. If that isn't your problem or +the ``user-config.jam`` file doesn't work for you, please address +questions about configuring Boost for your compiler to the +`Boost.Build mailing list`_. + diff --git a/more/getting_started/detail/build-simple-head.rst b/more/getting_started/detail/build-simple-head.rst new file mode 100644 index 0000000000..487610e344 --- /dev/null +++ b/more/getting_started/detail/build-simple-head.rst @@ -0,0 +1,28 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Build a Simple Program Using Boost +================================== + +To keep things simple, let's start by using a header-only library. +The following program reads a sequence of integers from standard +input, uses Boost.Lambda to multiply each number by three, and +writes them to standard output:: + + #include <boost/lambda/lambda.hpp> + #include <iostream> + #include <iterator> + #include <algorithm> + + int main() + { + using namespace boost::lambda; + typedef std::istream_iterator<int> in; + + std::for_each( + in(std::cin), in(), std::cout << (_1 * 3) << " " ); + } + +Copy the text of this program into a file called ``example.cpp``. + diff --git a/more/getting_started/detail/common-footnotes.rst b/more/getting_started/detail/common-footnotes.rst new file mode 100644 index 0000000000..980600b719 --- /dev/null +++ b/more/getting_started/detail/common-footnotes.rst @@ -0,0 +1,26 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. [#warnings] Remember that warnings are specific to each compiler + implementation. The developer of a given Boost library might + not have access to your compiler. Also, some warnings are + extremely difficult to eliminate in generic code, to the point + where it's not worth the trouble. Finally, some compilers don't + have any source code mechanism for suppressing warnings. + +.. [#distinct] This convention distinguishes the static version of + a Boost library from the import library for an + identically-configured Boost DLL, which would otherwise have the + same name. + +.. [#debug-abi] These libraries were compiled without optimization + or inlining, with full debug symbols enabled, and without + ``NDEBUG`` ``#define``\ d. Although it's true that sometimes + these choices don't affect binary compatibility with other + compiled code, you can't count on that with Boost libraries. + +.. [#native] This feature of STLPort is deprecated because it's + impossible to make it work transparently to the user; we don't + recommend it. + diff --git a/more/getting_started/detail/common-unix.rst b/more/getting_started/detail/common-unix.rst new file mode 100644 index 0000000000..c1cdf491c5 --- /dev/null +++ b/more/getting_started/detail/common-unix.rst @@ -0,0 +1,24 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. |//| replace:: **/** +.. |/| replace:: ``/`` + +.. |default-root| replace:: ``/usr/local/``\ |boost_ver| +.. |default-root-bold| replace:: **/usr/local/**\ |boost_ver-bold| + +.. |root| replace:: *path/to/*\ |boost_ver| + +.. |forward-slashes| replace:: `` `` + +.. |precompiled-dir| replace:: `` `` + +.. |include-paths| replace:: `` `` + +.. |windows-version-name-caveat| replace:: `` `` + +.. |command-line tool| replace:: command-line tool + + +.. include:: common.rst diff --git a/more/getting_started/detail/common-windows.rst b/more/getting_started/detail/common-windows.rst new file mode 100644 index 0000000000..fa0102c4e3 --- /dev/null +++ b/more/getting_started/detail/common-windows.rst @@ -0,0 +1,34 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. |//| replace:: **\\** +.. |/| replace:: ``\`` + +.. |default-root| replace:: ``C:\Program Files\boost\``\ |boost_ver| +.. |default-root-bold| replace:: **C:\\Program Files\\boost\\**\ |boost_ver-bold| + +.. |root| replace:: *path\\to\\*\ |boost_ver| + +.. |include-paths| replace:: Specific steps for setting up ``#include`` + paths in Microsoft Visual Studio follow later in this document; + if you use another IDE, please consult your product's + documentation for instructions. + +.. |forward-slashes| replace:: Even Windows users can (and, for + portability reasons, probably should) use forward slashes in + ``#include`` directives; your compiler doesn't care. + +.. |precompiled-dir| replace:: + + **lib**\ |//| .....................\ *precompiled library binaries* + + +.. |windows-version-name-caveat| replace:: **On Windows, append a version + number even if you only have one version installed** (unless you + are using the msvc or gcc toolsets, which have special version + detection code) or `auto-linking`_ will fail. + +.. |command-line tool| replace:: `command-line tool`_ + +.. include:: common.rst diff --git a/more/getting_started/detail/common.rst b/more/getting_started/detail/common.rst new file mode 100644 index 0000000000..591c05b175 --- /dev/null +++ b/more/getting_started/detail/common.rst @@ -0,0 +1,5 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. |next| replace:: *skip to the next step* diff --git a/more/getting_started/detail/conclusion.rst b/more/getting_started/detail/conclusion.rst new file mode 100644 index 0000000000..402dc6ffc5 --- /dev/null +++ b/more/getting_started/detail/conclusion.rst @@ -0,0 +1,39 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Conclusion and Further Resources +================================ + +This concludes your introduction to Boost and to integrating it +with your programs. As you start using Boost in earnest, there are +surely a few additional points you'll wish we had covered. One day +we may have a “Book 2 in the Getting Started series†that addresses +them. Until then, we suggest you pursue the following resources. +If you can't find what you need, or there's anything we can do to +make this document clearer, please post it to the `Boost Users' +mailing list`_. + +* `Boost.Build reference manual`_ +* `Boost.Jam reference manual`_ +* `Boost Users' mailing list`_ +* `Boost.Build mailing list`_ +* `Boost.Build Wiki`_ +* `Index of all Boost library documentation`_ + +.. _Index of all Boost library documentation: ../../libs/index.html + +.. Admonition:: Onward + + .. epigraph:: + + Good luck, and have fun! + + -- the Boost Developers + +.. _Boost.Build reference manual: ../../tools/build/v2/index.html +.. _Boost.Jam reference manual: `Boost.Jam`_ +.. _Boost Users' mailing list: http://www.boost.org/more/mailing_lists.htm#users +.. _Boost.Build Wiki: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost.Build_V2 +.. _Boost.Build mailing list: http://www.boost.org/more/mailing_lists.htm#jamboost + diff --git a/more/getting_started/detail/distro.rst b/more/getting_started/detail/distro.rst new file mode 100644 index 0000000000..708dfd1ab6 --- /dev/null +++ b/more/getting_started/detail/distro.rst @@ -0,0 +1,88 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +The Boost Distribution +====================== + +This is a sketch of the resulting directory structure: + +.. parsed-literal:: + + |boost_ver-bold|\ |//| .................\ *The “boost root directoryâ€* + **index.htm** .........\ *A copy of www.boost.org starts here* + **boost**\ |//| .........................\ *All Boost Header files* + |precompiled-dir| + **libs**\ |//| ............\ *Tests, .cpp*\ s\ *, docs, etc., by library* + **index.html** ........\ *Library documentation starts here* + **algorithm**\ |//| + **any**\ |//| + **array**\ |//| + *…more libraries…* + **status**\ |//| .........................\ *Boost-wide test suite* + **tools**\ |//| ...........\ *Utilities, e.g. bjam, quickbook, bcp* + **more**\ |//| ..........................\ *Policy documents, etc.* + **doc**\ |//| ...............\ *A subset of all Boost library docs* + +.. sidebar:: Header Organization + + .. class:: pre-wrap + + The organization of Boost library headers isn't entirely uniform, + but most libraries follow a few patterns: + + * Some older libraries and most very small libraries place all + public headers directly into ``boost``\ |/|. + + * Most libraries' public headers live in a subdirectory of + ``boost``\ |/|, named after the library. For example, you'll find + the Python library's ``def.hpp`` header in + + .. parsed-literal:: + + ``boost``\ |/|\ ``python``\ |/|\ ``def.hpp``. + + * Some libraries have an “aggregate header†in ``boost``\ |/| that + ``#include``\ s all of the library's other headers. For + example, Boost.Python_'s aggregate header is + + .. parsed-literal:: + + ``boost``\ |/|\ ``python.hpp``. + + * Most libraries place private headers in a subdirectory called + ``detail``\ |/|, or ``aux_``\ |/|. Don't expect to find + anything you can use in these directories. + +It's important to note the following: + +.. _Boost root directory: + +1. The path to the **boost root directory** (often |default-root|) is + sometimes referred to as ``$BOOST_ROOT`` in documentation and + mailing lists . + +2. To compile anything in Boost, you need a directory containing + the ``boost``\ |/| subdirectory in your ``#include`` path. |include-paths| + +3. Since all of Boost's header files have the ``.hpp`` extension, + and live in the ``boost``\ |/| subdirectory of the boost root, your + Boost ``#include`` directives will look like: + + .. parsed-literal:: + + #include <boost/\ *whatever*\ .hpp> + + or + + .. parsed-literal:: + + #include "boost/\ *whatever*\ .hpp" + + depending on your preference regarding the use of angle bracket + includes. |forward-slashes| + +4. Don't be distracted by the ``doc``\ |/| subdirectory; it only + contains a subset of the Boost documentation. Start with + ``libs``\ |/|\ ``index.html`` if you're looking for the whole enchilada. + diff --git a/more/getting_started/detail/errors-and-warnings.rst b/more/getting_started/detail/errors-and-warnings.rst new file mode 100644 index 0000000000..770d46eae3 --- /dev/null +++ b/more/getting_started/detail/errors-and-warnings.rst @@ -0,0 +1,16 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Errors and Warnings +------------------- + +Don't be alarmed if you see compiler warnings originating in Boost +headers. We try to eliminate them, but doing so isn't always +practical. [#warnings]_ **Errors are another matter**. If you're +seeing compilation errors at this point in the tutorial, check to +be sure you've copied the `example program`__ correctly and that you've +correctly identified the `Boost root directory`_. + +__ `Build a Simple Program Using Boost`_ + diff --git a/more/getting_started/detail/header-only.rst b/more/getting_started/detail/header-only.rst new file mode 100644 index 0000000000..c1f1dd3b3e --- /dev/null +++ b/more/getting_started/detail/header-only.rst @@ -0,0 +1,48 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Header-Only Libraries +===================== + +The first thing many people want to know is, “how do I build +Boost?†The good news is that often, there's nothing to build. + +.. admonition:: Nothing to Build? + + Most Boost libraries are **header-only**: they consist *entirely + of header files* containing templates and inline functions, and + require no separately-compiled library binaries or special + treatment when linking. + +.. .. _separate: + +The only Boost libraries that *must* be built separately are: + +* Boost.Filesystem_ +* Boost.IOStreams_ +* Boost.ProgramOptions_ +* Boost.Python_ (see the `Boost.Python build documentation`__ + before building and installing it) +* Boost.Regex_ +* Boost.Serialization_ +* Boost.Signals_ +* Boost.Thread_ +* Boost.Wave_ + +__ ../../libs/python/doc/building.html + +A few libraries have optional separately-compiled binaries: + +* Boost.DateTime_ has a binary component that is only needed if + you're using its ``to_string``\ /\ ``from_string`` or serialization + features, or if you're targeting Visual C++ 6.x or Borland. + +* Boost.Graph_ also has a binary component that is only needed if + you intend to `parse GraphViz files`__. + +* Boost.Test_ can be used in “header-only†or “separately compiled†+ mode, although **separate compilation is recommended for serious + use**. + +__ ../../libs/graph/doc/read_graphviz.html diff --git a/more/getting_started/detail/library-naming.rst b/more/getting_started/detail/library-naming.rst new file mode 100644 index 0000000000..76d99ed5c2 --- /dev/null +++ b/more/getting_started/detail/library-naming.rst @@ -0,0 +1,80 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +In order to choose the right binary for your build configuration +you need to know how Boost binaries are named. Each library +filename is composed of a common sequence of elements that describe +how it was built. For example, +``libboost_regex-vc71-mt-d-1_34.lib`` can be broken down into the +following elements: + +``lib`` + *Prefix*: except on Microsoft Windows, every Boost library + name begins with this string. On Windows, only ordinary static + libraries use the ``lib`` prefix; import libraries and DLLs do + not. [#distinct]_ + +``boost_regex`` + *Library name*: all boost library filenames begin with ``boost_``. + +``-vc71`` + *Toolset tag*: identifies the toolset_ and version used to build + the binary. + +``-mt`` + *Threading tag*: indicates that the library was + built with multithreading support enabled. Libraries built + without multithreading support can be identified by the absence + of ``-mt``. + +``-d`` + *ABI tag*: encodes details that affect the library's + interoperability with other compiled code. For each such + feature, a single letter is added to the tag: + + +-----+------------------------------------------------------------------------------+ + |Key |Use this library when: | + +=====+==============================================================================+ + |``s``|linking statically to the C++ standard library and compiler runtime support | + | |libraries. | + +-----+------------------------------------------------------------------------------+ + |``g``|using debug versions of the standard and runtime support libraries. | + +-----+------------------------------------------------------------------------------+ + |``y``|using a special `debug build of Python`__. | + +-----+------------------------------------------------------------------------------+ + |``d``|building a debug version of your code. [#debug-abi]_ | + +-----+------------------------------------------------------------------------------+ + |``p``|using the STLPort standard library rather than the default one supplied with | + | |your compiler. | + +-----+------------------------------------------------------------------------------+ + |``n``|using STLPort's deprecated “native iostreams†feature. [#native]_ | + +-----+------------------------------------------------------------------------------+ + + For example, if you build a debug version of your code for use + with debug versions of the static runtime library and the + STLPort standard library in “native iostreams†mode, + the tag would be: ``-sgdpn``. If none of the above apply, the + ABI tag is ommitted. + +``-1_34`` + *Version tag*: the full Boost release number, with periods + replaced by underscores. For example, version 1.31.1 would be + tagged as "-1_31_1". + +``.lib`` + *Extension*: determined according to the operating system's usual + convention. On most unix-style platforms the extensions are + ``.a`` and ``.so`` for static libraries (archives) and shared + libraries, respectively. On Windows, ``.dll`` indicates a shared + library and (except for static libraries built by the ``gcc`` + toolset_, whose names always end in ``.a``) ``.lib`` indicates a + static or import library. Where supported by toolsets on unix + variants, a full version extension is added (e.g. ".so.1.34") and + a symbolic link to the library file, named without the trailing + version number, will also be created. + +.. .. _Boost.Build toolset names: toolset-name_ + +__ ../../libs/python/doc/building.html#variants + diff --git a/more/getting_started/detail/link-head.rst b/more/getting_started/detail/link-head.rst new file mode 100644 index 0000000000..c4a59958be --- /dev/null +++ b/more/getting_started/detail/link-head.rst @@ -0,0 +1,39 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Link Your Program to a Boost Library +==================================== + +To demonstrate linking with a Boost binary library, we'll use the +following simple program that extracts the subject lines from +emails. It uses the Boost.Regex_ library, which has a +separately-compiled binary component. :: + + #include <boost/regex.hpp> + #include <iostream> + #include <string> + + int main() + { + std::string line; + boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" ); + + while (std::cin) + { + std::getline(std::cin, line); + boost::smatch matches; + if (boost::regex_match(line, matches, pat)) + std::cout << matches[2] << std::endl; + } + } + +There are two main challenges associated with linking: + +1. Tool configuration, e.g. choosing command-line options or IDE + build settings. + +2. Identifying the library binary, among all the build variants, + whose compile configuration is compatible with the rest of your + project. + diff --git a/more/getting_started/detail/links.rst b/more/getting_started/detail/links.rst new file mode 100644 index 0000000000..f4a18194d2 --- /dev/null +++ b/more/getting_started/detail/links.rst @@ -0,0 +1,16 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. _Boost.DateTime: ../../libs/date_time/index.html +.. _Boost.Filesystem: ../../libs/filesystem/index.html +.. _Boost.Graph: ../../libs/graph/index.html +.. _Boost.IOStreams: ../../libs/iostreams/index.html +.. _Boost.ProgramOptions: ../../libs/program_options/index.html +.. _Boost.Python: ../../libs/python/doc/building.html +.. _Boost.Regex: ../../libs/regex/index.html +.. _Boost.Serialization: ../../libs/serialization/index.html +.. _Boost.Signals: ../../libs/signals/index.html +.. _Boost.Test: ../../libs/test/index.html +.. _Boost.Thread: ../../doc/html/thread.html +.. _Boost.Wave: ../../libs/wave/index.html diff --git a/more/getting_started/detail/release-variables.rst b/more/getting_started/detail/release-variables.rst new file mode 100644 index 0000000000..7c32fb2d66 --- /dev/null +++ b/more/getting_started/detail/release-variables.rst @@ -0,0 +1,12 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +.. This file contains all the definitions that need to be updated +.. for each new release of Boost. + +.. |boost-version-number| replace:: 1.36.0 +.. |boost_ver| replace:: ``boost_1_36_0`` +.. |boost_ver-bold| replace:: **boost_1_36_0** + +.. _sf-download: http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041 diff --git a/more/getting_started/detail/test-head.rst b/more/getting_started/detail/test-head.rst new file mode 100644 index 0000000000..90e1ce7557 --- /dev/null +++ b/more/getting_started/detail/test-head.rst @@ -0,0 +1,16 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +Test Your Program +----------------- + +To test our subject extraction, we'll filter the following text +file. Copy it out of your browser and save it as ``jayne.txt``:: + + To: George Shmidlap + From: Rita Marlowe + Subject: Will Success Spoil Rock Hunter? + --- + See subject. + diff --git a/more/getting_started/index.html b/more/getting_started/index.html new file mode 100644 index 0000000000..07428bdf08 --- /dev/null +++ b/more/getting_started/index.html @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> +<title>Boost Getting Started</title> +<link rel="stylesheet" href="../../rst.css" type="text/css" /> +</head> +<body> +<div class="document" id="logo-getting-started"> +<h1 class="title"><a class="reference external" href="../../index.htm"><img alt="Boost" class="boost-logo" src="../../boost.png" /></a> Getting Started</h1> + +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<div class="admonition-use-the-latest-version-of-this-getting-started-guide admonition"> +<p class="first admonition-title">Use the latest version of this Getting Started guide</p> +<p class="last">The <a class="reference external" href="http://www.boost.org/doc/libs/1_36_0/more/getting_started/index.html">Boost website version of this Getting Started guide</a> may +have undated information, such as the location of additional installers +or improved installation procedures, so you might want use that version +if you've got an Internet connection available.</p> +</div> +<div class="section" id="welcome"> +<h1>Welcome</h1> +<p>Welcome to the Boost libraries! By the time you've completed this +tutorial, you'll be at least somewhat comfortable with the contents +of a Boost distribution and how to go about using it.</p> +</div> +<div class="section" id="what-s-here"> +<h1>What's Here</h1> +<p>This document is designed to be an <em>extremely</em> gentle introduction, +so we included a fair amount of material that may already be very +familiar to you. To keep things simple, we also left out some +information intermediate and advanced users will probably want. At +the end of this document, we'll refer you on to resources that can +help you pursue these topics further.</p> +</div> +<div class="section" id="preliminaries"> +<h1>Preliminaries</h1> +<p>We use one typographic convention that might not be immediately +obvious: <em>italic</em> text in examples is meant as a descriptive +placeholder for something else, usually information that you'll +provide. For example:</p> +<pre class="literal-block"> +<strong>$</strong> echo "My name is <em>your name</em>" +</pre> +<p>Here you're expected to imagine replacing the text “your name†with +your actual name.</p> +</div> +<div class="section" id="ready"> +<h1>Ready?</h1> +<p>Let's go!</p> +</div> +</div> +<div class="footer"> +<hr class="footer" /> +<div class="nextpage line-block"> +<div class="line"><strong>Next:</strong> <a class="reference external" href="windows.html">Getting Started on Microsoft Windows</a></div> +<div class="line"><strong>or:</strong> <a class="reference external" href="unix-variants.html">Getting Started on Unix variants (e.g. Linux, MacOS)</a></div> +</div> + +</div> +</body> +</html> diff --git a/more/getting_started/index.rst b/more/getting_started/index.rst new file mode 100644 index 0000000000..d12b400670 --- /dev/null +++ b/more/getting_started/index.rst @@ -0,0 +1,70 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +============================ + |(logo)|__ Getting Started +============================ + +.. |(logo)| image:: ../../boost.png + :alt: Boost + :class: boost-logo + +__ ../../index.htm + +.. Admonition:: Use the latest version of this Getting Started guide + + The `Boost website version of this Getting Started guide`_ may + have undated information, such as the location of additional installers + or improved installation procedures, so you might want use that version + if you've got an Internet connection available. + + .. _`Boost website version of this Getting Started guide`: + http://www.boost.org/doc/libs/1_36_0/more/getting_started/index.html + +Welcome +------- + +Welcome to the Boost libraries! By the time you've completed this +tutorial, you'll be at least somewhat comfortable with the contents +of a Boost distribution and how to go about using it. + +What's Here +----------- + +This document is designed to be an *extremely* gentle introduction, +so we included a fair amount of material that may already be very +familiar to you. To keep things simple, we also left out some +information intermediate and advanced users will probably want. At +the end of this document, we'll refer you on to resources that can +help you pursue these topics further. + +Preliminaries +------------- + +We use one typographic convention that might not be immediately +obvious: *italic* text in examples is meant as a descriptive +placeholder for something else, usually information that you'll +provide. For example: + +.. parsed-literal:: + + **$** echo "My name is *your name*\ " + +Here you're expected to imagine replacing the text “your name†with +your actual name. + +Ready? +------ + +Let's go! + +.. footer:: + .. class:: nextpage + + | **Next:** `Getting Started on Microsoft Windows`__ + | **or:** `Getting Started on Unix variants (e.g. Linux, MacOS)`__ + +__ windows.html +__ unix-variants.html + diff --git a/more/getting_started/unix-variants.html b/more/getting_started/unix-variants.html new file mode 100644 index 0000000000..050b01ad9d --- /dev/null +++ b/more/getting_started/unix-variants.html @@ -0,0 +1,795 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> +<title>Boost Getting Started on Unix Variants</title> +<meta content="Getting Started with Boost on Unix Variants (including Linux and MacOS)" name="description" /> +<link rel="stylesheet" href="../../rst.css" type="text/css" /> +</head> +<body> +<div class="document" id="logo-getting-started-on-unix-variants"> +<h1 class="title"><a class="reference external" href="../../index.htm"><img alt="Boost" class="boost-logo" src="../../boost.png" /></a> Getting Started on Unix Variants</h1> + +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- maybe we don't need this +.. Admonition:: A note to Cygwin_ and MinGW_ users + + If you plan to build from the Cygwin_ bash shell, you're in the + right place. If you plan to use your tools from the Windows + command prompt, you should follow the instructions for `getting + started on Windows`_. Other command shells, such as MinGW_\ 's + MSYS, are not supported—they may or may not work. + + .. _`Getting Started on Windows`: windows.html + .. _Cygwin: http://www.cygwin.com + .. _MinGW: http://mingw.org --> +<div class="contents topic" id="index"> +<p class="topic-title first">Index</p> +<ul class="auto-toc simple"> +<li><a class="reference internal" href="#get-boost" id="id18">1 Get Boost</a></li> +<li><a class="reference internal" href="#the-boost-distribution" id="id19">2 The Boost Distribution</a></li> +<li><a class="reference internal" href="#header-only-libraries" id="id20">3 Header-Only Libraries</a></li> +<li><a class="reference internal" href="#build-a-simple-program-using-boost" id="id21">4 Build a Simple Program Using Boost</a><ul class="auto-toc"> +<li><a class="reference internal" href="#errors-and-warnings" id="id22">4.1 Errors and Warnings</a></li> +</ul> +</li> +<li><a class="reference internal" href="#prepare-to-use-a-boost-library-binary" id="id23">5 Prepare to Use a Boost Library Binary</a><ul class="auto-toc"> +<li><a class="reference internal" href="#easy-build-and-install" id="id24">5.1 Easy Build and Install</a></li> +<li><a class="reference internal" href="#or-build-custom-binaries" id="id25">5.2 Or, Build Custom Binaries</a><ul class="auto-toc"> +<li><a class="reference internal" href="#get-bjam" id="id26">5.2.1 Get <tt class="docutils literal"><span class="pre">bjam</span></tt></a></li> +<li><a class="reference internal" href="#identify-your-toolset" id="id27">5.2.2 Identify Your Toolset</a></li> +<li><a class="reference internal" href="#select-a-build-directory" id="id28">5.2.3 Select a Build Directory</a></li> +<li><a class="reference internal" href="#invoke-bjam" id="id29">5.2.4 Invoke <tt class="docutils literal"><span class="pre">bjam</span></tt></a></li> +</ul> +</li> +<li><a class="reference internal" href="#expected-build-output" id="id30">5.3 Expected Build Output</a></li> +<li><a class="reference internal" href="#in-case-of-build-errors" id="id31">5.4 In Case of Build Errors</a></li> +</ul> +</li> +<li><a class="reference internal" href="#link-your-program-to-a-boost-library" id="id32">6 Link Your Program to a Boost Library</a><ul class="auto-toc"> +<li><a class="reference internal" href="#library-naming" id="id33">6.1 Library Naming</a></li> +<li><a class="reference internal" href="#test-your-program" id="id34">6.2 Test Your Program</a></li> +</ul> +</li> +<li><a class="reference internal" href="#conclusion-and-further-resources" id="id35">7 Conclusion and Further Resources</a></li> +</ul> +</div> +<div class="section" id="get-boost"> +<h1><a class="toc-backref" href="#id18">1 Get Boost</a></h1> +<p>The most reliable way to get a copy of Boost is to download a +distribution from <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041">SourceForge</a>:</p> +<ol class="arabic"> +<li><p class="first">Download <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041"><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">.tar.bz2</span></tt></a>.</p> +</li> +<li><p class="first">In the directory where you want to put the Boost installation, +execute</p> +<pre class="literal-block"> +tar --bzip2 -xf <em>/path/to/</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt>.tar.bz2 +</pre> +</li> +</ol> +<div class="admonition-other-packages admonition"> +<p class="first admonition-title">Other Packages</p> +<p class="last">RedHat, Debian, and other distribution packagers supply Boost +library packages, however you may need to adapt these +instructions if you use third-party packages, because their +creators usually choose to break Boost up into several packages, +reorganize the directory structure of the Boost distribution, +and/or rename the library binaries.<a class="footnote-reference" href="#packagers" id="id2"><sup>1</sup></a> If you have +any trouble, we suggest using an official Boost distribution +from <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041">SourceForge</a>.</p> +</div> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="the-boost-distribution"> +<h1><a class="toc-backref" href="#id19">2 The Boost Distribution</a></h1> +<p>This is a sketch of the resulting directory structure:</p> +<pre class="literal-block"> +<strong>boost_1_36_0</strong><strong>/</strong> .................<em>The “boost root directoryâ€</em> + <strong>index.htm</strong> .........<em>A copy of www.boost.org starts here</em> + <strong>boost</strong><strong>/</strong> .........................<em>All Boost Header files</em> + <tt class="docutils literal"> </tt> + <strong>libs</strong><strong>/</strong> ............<em>Tests, .cpp</em>s<em>, docs, etc., by library</em> + <strong>index.html</strong> ........<em>Library documentation starts here</em> + <strong>algorithm</strong><strong>/</strong> + <strong>any</strong><strong>/</strong> + <strong>array</strong><strong>/</strong> + <em>…more libraries…</em> + <strong>status</strong><strong>/</strong> .........................<em>Boost-wide test suite</em> + <strong>tools</strong><strong>/</strong> ...........<em>Utilities, e.g. bjam, quickbook, bcp</em> + <strong>more</strong><strong>/</strong> ..........................<em>Policy documents, etc.</em> + <strong>doc</strong><strong>/</strong> ...............<em>A subset of all Boost library docs</em> +</pre> +<div class="sidebar"> +<p class="first sidebar-title">Header Organization</p> +<p class="pre-wrap">The organization of Boost library headers isn't entirely uniform, +but most libraries follow a few patterns:</p> +<ul class="pre-wrap last"> +<li><p class="first">Some older libraries and most very small libraries place all +public headers directly into <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt>.</p> +</li> +<li><p class="first">Most libraries' public headers live in a subdirectory of +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt>, named after the library. For example, you'll find +the Python library's <tt class="docutils literal"><span class="pre">def.hpp</span></tt> header in</p> +<pre class="literal-block"> +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt><tt class="docutils literal"><span class="pre">python</span></tt><tt class="docutils literal"><span class="pre">/</span></tt><tt class="docutils literal"><span class="pre">def.hpp</span></tt>. +</pre> +</li> +<li><p class="first">Some libraries have an “aggregate header†in <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt> that +<tt class="docutils literal"><span class="pre">#include</span></tt>s all of the library's other headers. For +example, <a class="reference external" href="../../libs/python/doc/building.html">Boost.Python</a>'s aggregate header is</p> +<pre class="literal-block"> +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt><tt class="docutils literal"><span class="pre">python.hpp</span></tt>. +</pre> +</li> +<li><p class="first">Most libraries place private headers in a subdirectory called +<tt class="docutils literal"><span class="pre">detail</span></tt><tt class="docutils literal"><span class="pre">/</span></tt>, or <tt class="docutils literal"><span class="pre">aux_</span></tt><tt class="docutils literal"><span class="pre">/</span></tt>. Don't expect to find +anything you can use in these directories.</p> +</li> +</ul> +</div> +<p>It's important to note the following:</p> +<ol class="arabic" id="boost-root-directory"> +<li><p class="first">The path to the <strong>boost root directory</strong> (often <tt class="docutils literal"><span class="pre">/usr/local/</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt>) is +sometimes referred to as <tt class="docutils literal"><span class="pre">$BOOST_ROOT</span></tt> in documentation and +mailing lists .</p> +</li> +<li><p class="first">To compile anything in Boost, you need a directory containing +the <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt> subdirectory in your <tt class="docutils literal"><span class="pre">#include</span></tt> path. <tt class="docutils literal"> </tt></p> +</li> +<li><p class="first">Since all of Boost's header files have the <tt class="docutils literal"><span class="pre">.hpp</span></tt> extension, +and live in the <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">/</span></tt> subdirectory of the boost root, your +Boost <tt class="docutils literal"><span class="pre">#include</span></tt> directives will look like:</p> +<pre class="literal-block"> +#include <boost/<em>whatever</em>.hpp> +</pre> +<p>or</p> +<pre class="literal-block"> +#include "boost/<em>whatever</em>.hpp" +</pre> +<p>depending on your preference regarding the use of angle bracket +includes. <tt class="docutils literal"> </tt></p> +</li> +<li><p class="first">Don't be distracted by the <tt class="docutils literal"><span class="pre">doc</span></tt><tt class="docutils literal"><span class="pre">/</span></tt> subdirectory; it only +contains a subset of the Boost documentation. Start with +<tt class="docutils literal"><span class="pre">libs</span></tt><tt class="docutils literal"><span class="pre">/</span></tt><tt class="docutils literal"><span class="pre">index.html</span></tt> if you're looking for the whole enchilada.</p> +</li> +</ol> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="header-only-libraries"> +<h1><a class="toc-backref" href="#id20">3 Header-Only Libraries</a></h1> +<p>The first thing many people want to know is, “how do I build +Boost?†The good news is that often, there's nothing to build.</p> +<div class="admonition-nothing-to-build admonition"> +<p class="first admonition-title">Nothing to Build?</p> +<p class="last">Most Boost libraries are <strong>header-only</strong>: they consist <em>entirely +of header files</em> containing templates and inline functions, and +require no separately-compiled library binaries or special +treatment when linking.</p> +</div> +<!-- .. _separate: --> +<p>The only Boost libraries that <em>must</em> be built separately are:</p> +<ul class="simple"> +<li><a class="reference external" href="../../libs/filesystem/index.html">Boost.Filesystem</a></li> +<li><a class="reference external" href="../../libs/iostreams/index.html">Boost.IOStreams</a></li> +<li><a class="reference external" href="../../libs/program_options/index.html">Boost.ProgramOptions</a></li> +<li><a class="reference external" href="../../libs/python/doc/building.html">Boost.Python</a> (see the <a class="reference external" href="../../libs/python/doc/building.html">Boost.Python build documentation</a> +before building and installing it)</li> +<li><a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a></li> +<li><a class="reference external" href="../../libs/serialization/index.html">Boost.Serialization</a></li> +<li><a class="reference external" href="../../libs/signals/index.html">Boost.Signals</a></li> +<li><a class="reference external" href="../../doc/html/thread.html">Boost.Thread</a></li> +<li><a class="reference external" href="../../libs/wave/index.html">Boost.Wave</a></li> +</ul> +<p>A few libraries have optional separately-compiled binaries:</p> +<ul class="simple"> +<li><a class="reference external" href="../../libs/date_time/index.html">Boost.DateTime</a> has a binary component that is only needed if +you're using its <tt class="docutils literal"><span class="pre">to_string</span></tt>/<tt class="docutils literal"><span class="pre">from_string</span></tt> or serialization +features, or if you're targeting Visual C++ 6.x or Borland.</li> +<li><a class="reference external" href="../../libs/graph/index.html">Boost.Graph</a> also has a binary component that is only needed if +you intend to <a class="reference external" href="../../libs/graph/doc/read_graphviz.html">parse GraphViz files</a>.</li> +<li><a class="reference external" href="../../libs/test/index.html">Boost.Test</a> can be used in “header-only†or “separately compiled†+mode, although <strong>separate compilation is recommended for serious +use</strong>.</li> +</ul> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="build-a-simple-program-using-boost"> +<h1><a class="toc-backref" href="#id21">4 Build a Simple Program Using Boost</a></h1> +<p>To keep things simple, let's start by using a header-only library. +The following program reads a sequence of integers from standard +input, uses Boost.Lambda to multiply each number by three, and +writes them to standard output:</p> +<pre class="literal-block"> +#include <boost/lambda/lambda.hpp> +#include <iostream> +#include <iterator> +#include <algorithm> + +int main() +{ + using namespace boost::lambda; + typedef std::istream_iterator<int> in; + + std::for_each( + in(std::cin), in(), std::cout << (_1 * 3) << " " ); +} +</pre> +<p>Copy the text of this program into a file called <tt class="docutils literal"><span class="pre">example.cpp</span></tt>.</p> +<p>Now, in the directory where you saved <tt class="docutils literal"><span class="pre">example.cpp</span></tt>, issue the +following command:</p> +<pre class="literal-block"> +c++ -I <em>path/to/</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> example.cpp -o example +</pre> +<p>To test the result, type:</p> +<pre class="literal-block"> +echo 1 2 3 | ./example +</pre> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<div class="section" id="errors-and-warnings"> +<h2><a class="toc-backref" href="#id22">4.1 Errors and Warnings</a></h2> +<p>Don't be alarmed if you see compiler warnings originating in Boost +headers. We try to eliminate them, but doing so isn't always +practical.<a class="footnote-reference" href="#warnings" id="id5"><sup>3</sup></a> <strong>Errors are another matter</strong>. If you're +seeing compilation errors at this point in the tutorial, check to +be sure you've copied the <a class="reference internal" href="#build-a-simple-program-using-boost">example program</a> correctly and that you've +correctly identified the <a class="reference internal" href="#boost-root-directory">Boost root directory</a>.</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="prepare-to-use-a-boost-library-binary"> +<h1><a class="toc-backref" href="#id23">5 Prepare to Use a Boost Library Binary</a></h1> +<p>If you want to use any of the separately-compiled Boost libraries, +you'll need to acquire library binaries.</p> +<div class="section" id="easy-build-and-install"> +<h2><a class="toc-backref" href="#id24">5.1 Easy Build and Install</a></h2> +<p>Issue the following commands in the shell (don't type <tt class="docutils literal"><span class="pre">$</span></tt>; that +represents the shell's prompt):</p> +<pre class="literal-block"> +<strong>$</strong> cd <em>path/to/</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +<strong>$</strong> ./configure --help +</pre> +<p>Select your configuration options and invoke <tt class="docutils literal"><span class="pre">./configure</span></tt> again +without the <tt class="docutils literal"><span class="pre">--help</span></tt> option. Unless you have write permission in +your system's <tt class="docutils literal"><span class="pre">/usr/local/</span></tt> directory, you'll probably want to at +least use</p> +<pre class="literal-block"> +<strong>$</strong> ./configure <strong>--prefix=</strong><em>path</em>/<em>to</em>/<em>installation</em>/<em>prefix</em> +</pre> +<p>to install somewhere else. Also, consider using the +<tt class="docutils literal"><span class="pre">--show-libraries</span></tt> and <tt class="docutils literal"><span class="pre">--with-libraries=</span></tt> options to limit the +long wait you'll experience if you build everything. Finally,</p> +<pre class="literal-block"> +<strong>$</strong> make install +</pre> +<p>will leave Boost binaries in the <tt class="docutils literal"><span class="pre">lib/</span></tt> subdirectory of your +installation prefix. You will also find a copy of the Boost +headers in the <tt class="docutils literal"><span class="pre">include/</span></tt> subdirectory of the installation +prefix, so you can henceforth use that directory as an <tt class="docutils literal"><span class="pre">#include</span></tt> +path in place of the Boost root directory.</p> +<p><a class="reference internal" href="#link-your-program-to-a-boost-library"><em>skip to the next step</em></a></p> +</div> +<div class="section" id="or-build-custom-binaries"> +<h2><a class="toc-backref" href="#id25">5.2 Or, Build Custom Binaries</a></h2> +<p>If you're using a compiler other than your system's default, you'll +need to use <a class="reference external" href="../../tools/build/index.html">Boost.Build</a> to create binaries. You'll also +use this method if you need a nonstandard build variant (see the +<a class="reference external" href="../../tools/build/index.html">Boost.Build documentation</a> for more details).</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p><a class="reference external" href="../../tools/build/index.html">Boost.Build</a> is a text-based system for developing, testing, and +installing software. To use it, you'll need an executable called +<tt class="docutils literal"><span class="pre">bjam</span></tt>.</p> +<!-- .. _Boost.Jam documentation: Boost.Jam_ --> +<div class="section" id="get-bjam"> +<h3><a class="toc-backref" href="#id26">5.2.1 Get <tt class="docutils literal"><span class="pre">bjam</span></tt></a></h3> +<p><tt class="docutils literal"><span class="pre">bjam</span></tt> is the command-line tool that drives the Boost Build +system. To build Boost binaries, you'll invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> from the +Boost root.</p> +<p>Boost provides <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941">pre-compiled <tt class="docutils literal"><span class="pre">bjam</span></tt> executables</a> for a variety of platforms. +Alternatively, you can build <tt class="docutils literal"><span class="pre">bjam</span></tt> yourself using <a class="reference external" href="../../doc/html/jam/building.html">these +instructions</a>.</p> +</div> +<div class="section" id="identify-your-toolset"> +<span id="toolset-name"></span><span id="toolset"></span><h3><a class="toc-backref" href="#id27">5.2.2 Identify Your Toolset</a></h3> +<p>First, find the toolset corresponding to your compiler in the +following table.</p> +<div class="note"> +<p class="first admonition-title">Note</p> +<p class="last">If you previously chose a toolset for the purposes of +<a class="reference external" href="../../doc/html/jam/building.html">building bjam</a>, you should assume it won't work and instead +choose newly from the table below.</p> +</div> +<table border="1" class="docutils"> +<colgroup> +<col width="18%" /> +<col width="33%" /> +<col width="48%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">Toolset +Name</th> +<th class="head">Vendor</th> +<th class="head">Notes</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><tt class="docutils literal"><span class="pre">acc</span></tt></td> +<td>Hewlett Packard</td> +<td>Only very recent versions are +known to work well with Boost</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">borland</span></tt></td> +<td>Borland</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">como</span></tt></td> +<td>Comeau Computing</td> +<td>Using this toolset may +require <a class="reference external" href="../../tools/build/index.html">configuring</a> another +toolset to act as its backend</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">cw</span></tt></td> +<td>Metrowerks/FreeScale</td> +<td>The CodeWarrior compiler. We +have not tested versions of +this compiler produced since +it was sold to FreeScale.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">dmc</span></tt></td> +<td>Digital Mars</td> +<td>As of this Boost release, no +version of dmc is known to +handle Boost well.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">darwin</span></tt></td> +<td>Apple Computer</td> +<td>Apple's version of the GCC +toolchain with support for +Darwin and MacOS X features +such as frameworks.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">gcc</span></tt></td> +<td>The Gnu Project</td> +<td>Includes support for Cygwin +and MinGW compilers.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">hp_cxx</span></tt></td> +<td>Hewlett Packard</td> +<td>Targeted at the Tru64 +operating system.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">intel</span></tt></td> +<td>Intel</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">kylix</span></tt></td> +<td>Borland</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">msvc</span></tt></td> +<td>Microsoft</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">qcc</span></tt></td> +<td>QNX Software Systems</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">sun</span></tt></td> +<td>Sun</td> +<td>Only very recent versions are +known to work well with +Boost.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">vacpp</span></tt></td> +<td>IBM</td> +<td>The VisualAge C++ compiler.</td> +</tr> +</tbody> +</table> +<p>If you have multiple versions of a particular compiler installed, +you can append the version number to the toolset name, preceded by +a hyphen, e.g. <tt class="docutils literal"><span class="pre">intel-9.0</span></tt> or +<tt class="docutils literal"><span class="pre">borland-5.4.3</span></tt>. <tt class="docutils literal"> </tt></p> +</div> +<div class="section" id="select-a-build-directory"> +<span id="id10"></span><span id="build-directory"></span><h3><a class="toc-backref" href="#id28">5.2.3 Select a Build Directory</a></h3> +<p><a class="reference external" href="../../tools/build/index.html">Boost.Build</a> will place all intermediate files it generates while +building into the <strong>build directory</strong>. If your Boost root +directory is writable, this step isn't strictly necessary: by +default Boost.Build will create a <tt class="docutils literal"><span class="pre">bin.v2/</span></tt> subdirectory for that +purpose in your current working directory.</p> +</div> +<div class="section" id="invoke-bjam"> +<h3><a class="toc-backref" href="#id29">5.2.4 Invoke <tt class="docutils literal"><span class="pre">bjam</span></tt></a></h3> +<p>Change your current directory to the Boost root directory and +invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> as follows:</p> +<pre class="literal-block"> +bjam <strong>--build-dir=</strong><a class="reference internal" href="#id10"><em>build-directory</em></a> <strong>--toolset=</strong><a class="reference internal" href="#toolset-name"><em>toolset-name</em></a> <em>[</em><strong>--build-type=complete</strong><em>]</em> stage +</pre> +<p>For example, your session might look like this:</p> +<pre class="literal-block"> +$ cd ~/<tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +$ bjam <strong>--build-dir=</strong>/tmp/build-boost <strong>--toolset=</strong>gcc stage +</pre> +<p>That will build static and shared non-debug multi-threaded variations of the libraries. To build all variations:</p> +<pre class="literal-block"> +$ cd ~/<tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +$ bjam <strong>--build-dir=</strong>/tmp/build-boost <strong>--toolset=</strong>gcc <strong>--build-type=complete</strong> stage +</pre> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p>Building the special <tt class="docutils literal"><span class="pre">stage</span></tt> target places Boost +library binaries in the <tt class="docutils literal"><span class="pre">stage</span></tt><tt class="docutils literal"><span class="pre">/</span></tt> subdirectory of your <a class="reference internal" href="#build-directory">build +directory</a>.</p> +<div class="note"> +<p class="first admonition-title">Note</p> +<p class="last"><tt class="docutils literal"><span class="pre">bjam</span></tt> is case-sensitive; it is important that all the +parts shown in <strong>bold</strong> type above be entirely lower-case.</p> +</div> +<p>For a description of other options you can pass when invoking +<tt class="docutils literal"><span class="pre">bjam</span></tt>, type:</p> +<pre class="literal-block"> +bjam --help +</pre> +<p>In particular, to limit the amount of time spent building, you may +be interested in:</p> +<ul class="simple"> +<li>reviewing the list of library names with <tt class="docutils literal"><span class="pre">--show-libraries</span></tt></li> +<li>limiting which libraries get built with the <tt class="docutils literal"><span class="pre">--with-</span></tt><em>library-name</em> or <tt class="docutils literal"><span class="pre">--without-</span></tt><em>library-name</em> options</li> +<li>choosing a specific build variant by adding <tt class="docutils literal"><span class="pre">release</span></tt> or +<tt class="docutils literal"><span class="pre">debug</span></tt> to the command line.</li> +</ul> +</div> +</div> +<div class="section" id="expected-build-output"> +<h2><a class="toc-backref" href="#id30">5.3 Expected Build Output</a></h2> +<p>During the process of building Boost libraries, you can expect to +see some messages printed on the console. These may include</p> +<ul> +<li><p class="first">Notices about Boost library configuration—for example, the Regex +library outputs a message about ICU when built without Unicode +support, and the Python library may be skipped without error (but +with a notice) if you don't have Python installed.</p> +</li> +<li><p class="first">Messages from the build tool that report the number of targets +that were built or skipped. Don't be surprised if those numbers +don't make any sense to you; there are many targets per library.</p> +</li> +<li><p class="first">Build action messages describing what the tool is doing, which +look something like:</p> +<pre class="literal-block"> +<em>toolset-name</em>.c++ <em>long</em>/<em>path</em>/<em>to</em>/<em>file</em>/<em>being</em>/<em>built</em> +</pre> +</li> +<li><p class="first">Compiler warnings.</p> +</li> +</ul> +</div> +<div class="section" id="in-case-of-build-errors"> +<h2><a class="toc-backref" href="#id31">5.4 In Case of Build Errors</a></h2> +<p>The only error messages you see when building Boost—if any—should +be related to the IOStreams library's support of zip and bzip2 +formats as described <a class="reference external" href="../../libs/iostreams/doc/installation.html">here</a>. Install the relevant development +packages for libz and libbz2 if you need those features. Other +errors when building Boost libraries are cause for concern.</p> +<p>If it seems like the build system can't find your compiler and/or +linker, consider setting up a <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file as described +in the <a class="reference external" href="../../tools/build/index.html">Boost.Build documentation</a>. If that isn't your problem or +the <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file doesn't work for you, please address +questions about configuring Boost for your compiler to the +<a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#jamboost">Boost.Build mailing list</a>.</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="link-your-program-to-a-boost-library"> +<h1><a class="toc-backref" href="#id32">6 Link Your Program to a Boost Library</a></h1> +<p>To demonstrate linking with a Boost binary library, we'll use the +following simple program that extracts the subject lines from +emails. It uses the <a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a> library, which has a +separately-compiled binary component.</p> +<pre class="literal-block"> +#include <boost/regex.hpp> +#include <iostream> +#include <string> + +int main() +{ + std::string line; + boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" ); + + while (std::cin) + { + std::getline(std::cin, line); + boost::smatch matches; + if (boost::regex_match(line, matches, pat)) + std::cout << matches[2] << std::endl; + } +} +</pre> +<p>There are two main challenges associated with linking:</p> +<ol class="arabic simple"> +<li>Tool configuration, e.g. choosing command-line options or IDE +build settings.</li> +<li>Identifying the library binary, among all the build variants, +whose compile configuration is compatible with the rest of your +project.</li> +</ol> +<p>There are two main ways to link to libraries:</p> +<ol class="upperalpha"> +<li><p class="first">You can specify the full path to each library:</p> +<pre class="literal-block"> +$ c++ -I <em>path/to/</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> example.cpp -o example <strong>\</strong> + <strong>~/boost/lib/libboost_regex-gcc34-mt-d-1_36.a</strong> +</pre> +</li> +<li><p class="first">You can separately specify a directory to search (with <tt class="docutils literal"><span class="pre">-L</span></tt><em>directory</em>) and a library name to search for (with <tt class="docutils literal"><span class="pre">-l</span></tt><em>library</em>,<a class="footnote-reference" href="#lowercase-l" id="id12"><sup>2</sup></a> dropping the filename's leading <tt class="docutils literal"><span class="pre">lib</span></tt> and trailing +suffix (<tt class="docutils literal"><span class="pre">.a</span></tt> in this case):</p> +<pre class="literal-block"> +$ c++ -I <em>path/to/</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> example.cpp -o example <strong>\</strong> + <strong>-L~/boost/lib/ -lboost_regex-gcc34-mt-d-1_36</strong> +</pre> +<p>As you can see, this method is just as terse as method A for one +library; it <em>really</em> pays off when you're using multiple +libraries from the same directory. Note, however, that if you +use this method with a library that has both static (<tt class="docutils literal"><span class="pre">.a</span></tt>) and +dynamic (<tt class="docutils literal"><span class="pre">.so</span></tt>) builds, the system may choose one +automatically for you unless you pass a special option such as +<tt class="docutils literal"><span class="pre">-static</span></tt> on the command line.</p> +</li> +</ol> +<p>In both cases above, the bold text is what you'd add to <a class="reference internal" href="#build-a-simple-program-using-boost">the +command lines we explored earlier</a>.</p> +<div class="section" id="library-naming"> +<h2><a class="toc-backref" href="#id33">6.1 Library Naming</a></h2> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p>In order to choose the right binary for your build configuration +you need to know how Boost binaries are named. Each library +filename is composed of a common sequence of elements that describe +how it was built. For example, +<tt class="docutils literal"><span class="pre">libboost_regex-vc71-mt-d-1_34.lib</span></tt> can be broken down into the +following elements:</p> +<dl class="docutils"> +<dt><tt class="docutils literal"><span class="pre">lib</span></tt></dt> +<dd><em>Prefix</em>: except on Microsoft Windows, every Boost library +name begins with this string. On Windows, only ordinary static +libraries use the <tt class="docutils literal"><span class="pre">lib</span></tt> prefix; import libraries and DLLs do +not.<a class="footnote-reference" href="#distinct" id="id14"><sup>4</sup></a></dd> +<dt><tt class="docutils literal"><span class="pre">boost_regex</span></tt></dt> +<dd><em>Library name</em>: all boost library filenames begin with <tt class="docutils literal"><span class="pre">boost_</span></tt>.</dd> +<dt><tt class="docutils literal"><span class="pre">-vc71</span></tt></dt> +<dd><em>Toolset tag</em>: identifies the <a class="reference internal" href="#toolset">toolset</a> and version used to build +the binary.</dd> +<dt><tt class="docutils literal"><span class="pre">-mt</span></tt></dt> +<dd><em>Threading tag</em>: indicates that the library was +built with multithreading support enabled. Libraries built +without multithreading support can be identified by the absence +of <tt class="docutils literal"><span class="pre">-mt</span></tt>.</dd> +<dt><tt class="docutils literal"><span class="pre">-d</span></tt></dt> +<dd><p class="first"><em>ABI tag</em>: encodes details that affect the library's +interoperability with other compiled code. For each such +feature, a single letter is added to the tag:</p> +<blockquote> +<table border="1" class="docutils"> +<colgroup> +<col width="6%" /> +<col width="94%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">Key</th> +<th class="head">Use this library when:</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><tt class="docutils literal"><span class="pre">s</span></tt></td> +<td>linking statically to the C++ standard library and compiler runtime support +libraries.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">g</span></tt></td> +<td>using debug versions of the standard and runtime support libraries.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">y</span></tt></td> +<td>using a special <a class="reference external" href="../../libs/python/doc/building.html#variants">debug build of Python</a>.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">d</span></tt></td> +<td>building a debug version of your code.<a class="footnote-reference" href="#debug-abi" id="id15"><sup>5</sup></a></td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">p</span></tt></td> +<td>using the STLPort standard library rather than the default one supplied with +your compiler.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">n</span></tt></td> +<td>using STLPort's deprecated “native iostreams†feature.<a class="footnote-reference" href="#native" id="id16"><sup>6</sup></a></td> +</tr> +</tbody> +</table> +</blockquote> +<p class="last">For example, if you build a debug version of your code for use +with debug versions of the static runtime library and the +STLPort standard library in “native iostreams†mode, +the tag would be: <tt class="docutils literal"><span class="pre">-sgdpn</span></tt>. If none of the above apply, the +ABI tag is ommitted.</p> +</dd> +<dt><tt class="docutils literal"><span class="pre">-1_34</span></tt></dt> +<dd><em>Version tag</em>: the full Boost release number, with periods +replaced by underscores. For example, version 1.31.1 would be +tagged as "-1_31_1".</dd> +<dt><tt class="docutils literal"><span class="pre">.lib</span></tt></dt> +<dd><em>Extension</em>: determined according to the operating system's usual +convention. On most unix-style platforms the extensions are +<tt class="docutils literal"><span class="pre">.a</span></tt> and <tt class="docutils literal"><span class="pre">.so</span></tt> for static libraries (archives) and shared +libraries, respectively. On Windows, <tt class="docutils literal"><span class="pre">.dll</span></tt> indicates a shared +library and (except for static libraries built by the <tt class="docutils literal"><span class="pre">gcc</span></tt> +<a class="reference internal" href="#toolset">toolset</a>, whose names always end in <tt class="docutils literal"><span class="pre">.a</span></tt>) <tt class="docutils literal"><span class="pre">.lib</span></tt> indicates a +static or import library. Where supported by toolsets on unix +variants, a full version extension is added (e.g. ".so.1.34") and +a symbolic link to the library file, named without the trailing +version number, will also be created.</dd> +</dl> +<!-- .. _Boost.Build toolset names: toolset-name_ --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="test-your-program"> +<h2><a class="toc-backref" href="#id34">6.2 Test Your Program</a></h2> +<p>To test our subject extraction, we'll filter the following text +file. Copy it out of your browser and save it as <tt class="docutils literal"><span class="pre">jayne.txt</span></tt>:</p> +<pre class="literal-block"> +To: George Shmidlap +From: Rita Marlowe +Subject: Will Success Spoil Rock Hunter? +--- +See subject. +</pre> +<p>If you linked to a shared library, you may need to prepare some +platform-specific settings so that the system will be able to find +and load it when your program is run. Most platforms have an +environment variable to which you can add the directory containing +the library. On many platforms (Linux, FreeBSD) that variable is +<tt class="docutils literal"><span class="pre">LD_LIBRARY_PATH</span></tt>, but on MacOS it's <tt class="docutils literal"><span class="pre">DYLD_LIBRARY_PATH</span></tt>, and +on Cygwin it's simply <tt class="docutils literal"><span class="pre">PATH</span></tt>. In most shells other than <tt class="docutils literal"><span class="pre">csh</span></tt> +and <tt class="docutils literal"><span class="pre">tcsh</span></tt>, you can adjust the variable as follows (again, don't +type the <tt class="docutils literal"><span class="pre">$</span></tt>—that represents the shell prompt):</p> +<pre class="literal-block"> +<strong>$</strong> <em>VARIABLE_NAME</em>=<em>path/to/lib/directory</em>:${<em>VARIABLE_NAME</em>} +<strong>$</strong> export <em>VARIABLE_NAME</em> +</pre> +<p>On <tt class="docutils literal"><span class="pre">csh</span></tt> and <tt class="docutils literal"><span class="pre">tcsh</span></tt>, it's</p> +<pre class="literal-block"> +<strong>$</strong> setenv <em>VARIABLE_NAME</em> <em>path/to/lib/directory</em>:${<em>VARIABLE_NAME</em>} +</pre> +<p>Once the necessary variable (if any) is set, you can run your +program as follows:</p> +<pre class="literal-block"> +<strong>$</strong> <em>path</em>/<em>to</em>/<em>compiled</em>/example < <em>path</em>/<em>to</em>/jayne.txt +</pre> +<p>The program should respond with the email subject, “Will Success +Spoil Rock Hunter?â€</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="conclusion-and-further-resources"> +<h1><a class="toc-backref" href="#id35">7 Conclusion and Further Resources</a></h1> +<p>This concludes your introduction to Boost and to integrating it +with your programs. As you start using Boost in earnest, there are +surely a few additional points you'll wish we had covered. One day +we may have a “Book 2 in the Getting Started series†that addresses +them. Until then, we suggest you pursue the following resources. +If you can't find what you need, or there's anything we can do to +make this document clearer, please post it to the <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost Users' +mailing list</a>.</p> +<ul class="simple"> +<li><a class="reference external" href="../../tools/build/v2/index.html">Boost.Build reference manual</a></li> +<li><a class="reference external" href="../../tools/jam/index.html">Boost.Jam reference manual</a></li> +<li><a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost Users' mailing list</a></li> +<li><a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#jamboost">Boost.Build mailing list</a></li> +<li><a class="reference external" href="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost.Build_V2">Boost.Build Wiki</a></li> +<li><a class="reference external" href="../../libs/index.html">Index of all Boost library documentation</a></li> +</ul> +<div class="admonition-onward admonition"> +<p class="first admonition-title">Onward</p> +<blockquote class="epigraph last"> +<p>Good luck, and have fun!</p> +<p class="attribution">—the Boost Developers</p> +</blockquote> +</div> +<hr class="docutils" /> +<table class="docutils footnote" frame="void" id="packagers" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>If developers of Boost packages would like to work +with us to make sure these instructions can be used with their +packages, we'd be glad to help. Please make your interest known +to the <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#main">Boost developers' list</a>.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="lowercase-l" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id12">[2]</a></td><td>That option is a dash followed by a lowercase “L†+character, which looks very much like a numeral 1 in some fonts.</td></tr> +</tbody> +</table> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<table class="docutils footnote" frame="void" id="warnings" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Remember that warnings are specific to each compiler +implementation. The developer of a given Boost library might +not have access to your compiler. Also, some warnings are +extremely difficult to eliminate in generic code, to the point +where it's not worth the trouble. Finally, some compilers don't +have any source code mechanism for suppressing warnings.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="distinct" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id14">[4]</a></td><td>This convention distinguishes the static version of +a Boost library from the import library for an +identically-configured Boost DLL, which would otherwise have the +same name.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="debug-abi" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id15">[5]</a></td><td>These libraries were compiled without optimization +or inlining, with full debug symbols enabled, and without +<tt class="docutils literal"><span class="pre">NDEBUG</span></tt> <tt class="docutils literal"><span class="pre">#define</span></tt>d. Although it's true that sometimes +these choices don't affect binary compatibility with other +compiled code, you can't count on that with Boost libraries.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="native" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id16">[6]</a></td><td>This feature of STLPort is deprecated because it's +impossible to make it work transparently to the user; we don't +recommend it.</td></tr> +</tbody> +</table> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- This file contains all the definitions that need to be updated --> +<!-- for each new release of Boost. --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +</body> +</html> diff --git a/more/getting_started/unix-variants.rst b/more/getting_started/unix-variants.rst new file mode 100644 index 0000000000..f87eacbe5b --- /dev/null +++ b/more/getting_started/unix-variants.rst @@ -0,0 +1,243 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +============================================= + |(logo)|__ Getting Started on Unix Variants +============================================= + +.. meta:: + :description: Getting Started with Boost on Unix Variants (including Linux and MacOS) + +.. |(logo)| image:: ../../boost.png + :alt: Boost + :class: boost-logo + +__ ../../index.htm + +.. section-numbering:: + +.. maybe we don't need this + .. Admonition:: A note to Cygwin_ and MinGW_ users + + If you plan to build from the Cygwin_ bash shell, you're in the + right place. If you plan to use your tools from the Windows + command prompt, you should follow the instructions for `getting + started on Windows`_. Other command shells, such as MinGW_\ 's + MSYS, are not supported—they may or may not work. + + .. _`Getting Started on Windows`: windows.html + .. _Cygwin: http://www.cygwin.com + .. _MinGW: http://mingw.org + +.. Contents:: Index + +Get Boost +========= + +The most reliable way to get a copy of Boost is to download a +distribution from SourceForge_: + +.. _SourceForge: `sf-download`_ + +1. Download |boost.tar.bz2|_. + +2. In the directory where you want to put the Boost installation, + execute + + .. parsed-literal:: + + tar --bzip2 -xf */path/to/*\ |boost_ver|\ .tar.bz2 + +.. |boost.tar.bz2| replace:: |boost_ver|\ ``.tar.bz2`` + +.. _`boost.tar.bz2`: `sf-download`_ + +.. Admonition:: Other Packages + + RedHat, Debian, and other distribution packagers supply Boost + library packages, however you may need to adapt these + instructions if you use third-party packages, because their + creators usually choose to break Boost up into several packages, + reorganize the directory structure of the Boost distribution, + and/or rename the library binaries. [#packagers]_ If you have + any trouble, we suggest using an official Boost distribution + from SourceForge_. + +.. include:: detail/distro.rst + +.. include:: detail/header-only.rst + +.. include:: detail/build-simple-head.rst + +Now, in the directory where you saved ``example.cpp``, issue the +following command: + +.. parsed-literal:: + + c++ -I |root| example.cpp -o example + +To test the result, type: + +.. parsed-literal:: + + echo 1 2 3 | ./example + +.. include:: detail/errors-and-warnings.rst + +.. include:: detail/binary-head.rst + +Easy Build and Install +---------------------- + +Issue the following commands in the shell (don't type ``$``; that +represents the shell's prompt): + +.. parsed-literal:: + + **$** cd |root| + **$** ./configure --help + +Select your configuration options and invoke ``./configure`` again +without the ``--help`` option. Unless you have write permission in +your system's ``/usr/local/`` directory, you'll probably want to at +least use + +.. parsed-literal:: + + **$** ./configure **--prefix=**\ *path*\ /\ *to*\ /\ *installation*\ /\ *prefix* + +to install somewhere else. Also, consider using the +``--show-libraries`` and ``--with-libraries=`` options to limit the +long wait you'll experience if you build everything. Finally, + +.. parsed-literal:: + + **$** make install + +will leave Boost binaries in the ``lib/`` subdirectory of your +installation prefix. You will also find a copy of the Boost +headers in the ``include/`` subdirectory of the installation +prefix, so you can henceforth use that directory as an ``#include`` +path in place of the Boost root directory. + +|next|__ + +__ `Link Your Program to a Boost Library`_ + +Or, Build Custom Binaries +------------------------- + +If you're using a compiler other than your system's default, you'll +need to use Boost.Build_ to create binaries. You'll also +use this method if you need a nonstandard build variant (see the +`Boost.Build documentation`_ for more details). + +.. include:: detail/build-from-source-head.rst + +For example, your session might look like this: + +.. parsed-literal:: + + $ cd ~/|boost_ver| + $ bjam **--build-dir=**\ /tmp/build-boost **--toolset=**\ gcc stage + +That will build static and shared non-debug multi-threaded variations of the libraries. To build all variations: + +.. parsed-literal:: + + $ cd ~/|boost_ver| + $ bjam **--build-dir=**\ /tmp/build-boost **--toolset=**\ gcc **--build-type=complete** stage + +.. include:: detail/build-from-source-tail.rst + +.. include:: detail/link-head.rst + +There are two main ways to link to libraries: + +A. You can specify the full path to each library: + + .. parsed-literal:: + + $ c++ -I |root| example.cpp -o example **\\** + **~/boost/lib/libboost_regex-gcc34-mt-d-1_36.a** + +B. You can separately specify a directory to search (with ``-L``\ + *directory*) and a library name to search for (with ``-l``\ + *library*, [#lowercase-l]_ dropping the filename's leading ``lib`` and trailing + suffix (``.a`` in this case): + + .. parsed-literal:: + + $ c++ -I |root| example.cpp -o example **\\** + **-L~/boost/lib/ -lboost_regex-gcc34-mt-d-1_36** + + As you can see, this method is just as terse as method A for one + library; it *really* pays off when you're using multiple + libraries from the same directory. Note, however, that if you + use this method with a library that has both static (``.a``) and + dynamic (``.so``) builds, the system may choose one + automatically for you unless you pass a special option such as + ``-static`` on the command line. + +In both cases above, the bold text is what you'd add to `the +command lines we explored earlier`__. + +__ `build a simple program using boost`_ + +Library Naming +-------------- + +.. include:: detail/library-naming.rst + +.. include:: detail/test-head.rst + +If you linked to a shared library, you may need to prepare some +platform-specific settings so that the system will be able to find +and load it when your program is run. Most platforms have an +environment variable to which you can add the directory containing +the library. On many platforms (Linux, FreeBSD) that variable is +``LD_LIBRARY_PATH``, but on MacOS it's ``DYLD_LIBRARY_PATH``, and +on Cygwin it's simply ``PATH``. In most shells other than ``csh`` +and ``tcsh``, you can adjust the variable as follows (again, don't +type the ``$``\ —that represents the shell prompt): + +.. parsed-literal:: + + **$** *VARIABLE_NAME*\ =\ *path/to/lib/directory*\ :${\ *VARIABLE_NAME*\ } + **$** export *VARIABLE_NAME* + +On ``csh`` and ``tcsh``, it's + +.. parsed-literal:: + + **$** setenv *VARIABLE_NAME* *path/to/lib/directory*\ :${\ *VARIABLE_NAME*\ } + +Once the necessary variable (if any) is set, you can run your +program as follows: + +.. parsed-literal:: + + **$** *path*\ /\ *to*\ /\ *compiled*\ /\ example < *path*\ /\ *to*\ /\ jayne.txt + +The program should respond with the email subject, “Will Success +Spoil Rock Hunter?†+ +.. include:: detail/conclusion.rst + +------------------------------ + +.. [#packagers] If developers of Boost packages would like to work + with us to make sure these instructions can be used with their + packages, we'd be glad to help. Please make your interest known + to the `Boost developers' list`_. + + .. _Boost developers' list: http://www.boost.org/more/mailing_lists.htm#main + +.. [#lowercase-l] That option is a dash followed by a lowercase “L†+ character, which looks very much like a numeral 1 in some fonts. + +.. include:: detail/common-footnotes.rst +.. include:: detail/release-variables.rst +.. include:: detail/common-unix.rst +.. include:: detail/links.rst diff --git a/more/getting_started/windows.html b/more/getting_started/windows.html new file mode 100644 index 0000000000..fe3fcf5db6 --- /dev/null +++ b/more/getting_started/windows.html @@ -0,0 +1,907 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> +<title>Boost Getting Started on Windows</title> +<link rel="stylesheet" href="../../rst.css" type="text/css" /> +</head> +<body> +<div class="document" id="logo-getting-started-on-windows"> +<h1 class="title"><a class="reference external" href="../../index.htm"><img alt="Boost" class="boost-logo" src="../../boost.png" /></a> Getting Started on Windows</h1> + +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<div class="admonition-a-note-to-cygwin-and-mingw-users admonition"> +<p class="first admonition-title">A note to <a class="reference external" href="http://www.cygwin.com">Cygwin</a> and <a class="reference external" href="http://mingw.org">MinGW</a> users</p> +<p class="last">If you plan to use your tools from the Windows command prompt, +you're in the right place. If you plan to build from the <a class="reference external" href="http://www.cygwin.com">Cygwin</a> +bash shell, you're actually running on a POSIX platform and +should follow the instructions for <a class="reference external" href="unix-variants.html">getting started on Unix +variants</a>. Other command shells, such as <a class="reference external" href="http://mingw.org">MinGW</a>'s MSYS, are +not supported—they may or may not work.</p> +</div> +<div class="contents topic" id="index"> +<p class="topic-title first">Index</p> +<ul class="auto-toc simple"> +<li><a class="reference internal" href="#get-boost" id="id26">1 Get Boost</a></li> +<li><a class="reference internal" href="#the-boost-distribution" id="id27">2 The Boost Distribution</a></li> +<li><a class="reference internal" href="#header-only-libraries" id="id28">3 Header-Only Libraries</a></li> +<li><a class="reference internal" href="#build-a-simple-program-using-boost" id="id29">4 Build a Simple Program Using Boost</a><ul class="auto-toc"> +<li><a class="reference internal" href="#build-from-the-visual-studio-ide" id="id30">4.1 Build From the Visual Studio IDE</a></li> +<li><a class="reference internal" href="#or-build-from-the-command-prompt" id="id31">4.2 Or, Build From the Command Prompt</a></li> +<li><a class="reference internal" href="#errors-and-warnings" id="id32">4.3 Errors and Warnings</a></li> +</ul> +</li> +<li><a class="reference internal" href="#prepare-to-use-a-boost-library-binary" id="id33">5 Prepare to Use a Boost Library Binary</a><ul class="auto-toc"> +<li><a class="reference internal" href="#install-visual-studio-binaries" id="id34">5.1 Install Visual Studio Binaries</a></li> +<li><a class="reference internal" href="#or-build-binaries-from-source" id="id35">5.2 Or, Build Binaries From Source</a><ul class="auto-toc"> +<li><a class="reference internal" href="#get-bjam" id="id36">5.2.1 Get <tt class="docutils literal"><span class="pre">bjam</span></tt></a></li> +<li><a class="reference internal" href="#identify-your-toolset" id="id37">5.2.2 Identify Your Toolset</a></li> +<li><a class="reference internal" href="#select-a-build-directory" id="id38">5.2.3 Select a Build Directory</a></li> +<li><a class="reference internal" href="#invoke-bjam" id="id39">5.2.4 Invoke <tt class="docutils literal"><span class="pre">bjam</span></tt></a></li> +</ul> +</li> +<li><a class="reference internal" href="#expected-build-output" id="id40">5.3 Expected Build Output</a></li> +<li><a class="reference internal" href="#in-case-of-build-errors" id="id41">5.4 In Case of Build Errors</a></li> +</ul> +</li> +<li><a class="reference internal" href="#link-your-program-to-a-boost-library" id="id42">6 Link Your Program to a Boost Library</a><ul class="auto-toc"> +<li><a class="reference internal" href="#link-from-within-the-visual-studio-ide" id="id43">6.1 Link From Within the Visual Studio IDE</a></li> +<li><a class="reference internal" href="#or-link-from-the-command-prompt" id="id44">6.2 Or, Link From the Command Prompt</a></li> +<li><a class="reference internal" href="#library-naming" id="id45">6.3 Library Naming</a></li> +<li><a class="reference internal" href="#test-your-program" id="id46">6.4 Test Your Program</a></li> +</ul> +</li> +<li><a class="reference internal" href="#conclusion-and-further-resources" id="id47">7 Conclusion and Further Resources</a></li> +</ul> +</div> +<div class="section" id="get-boost"> +<h1><a class="toc-backref" href="#id26">1 Get Boost</a></h1> +<p>The easiest way to get a copy of Boost is to use an installer. +The <a class="reference external" href="http://www.boost.org/doc/libs/1_36_0/more/getting_started/index.html">Boost website version of this Getting Started guide</a> will +have undated information on installers as they become available, +or see <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041">Boost downloads</a> or the <a class="reference external" href="http://www.boostpro.com/products/free">installer</a> provided by <a class="reference external" href="http://www.boostpro.com">BoostPro Computing</a>. We especially recommend using +an installer if you use Microsoft Visual Studio, because the installer can download and install +precompiled library binaries, saving you the trouble of building +them yourself. To complete this tutorial, you'll need to at least +install the <a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a> binaries when given the option.</p> +<p>If you're using an earlier version of Visual Studio or some other +compiler, or if you prefer to build everything yourself, you can +download <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041"><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">.7z</span></tt></a> or <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041"><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">.zip</span></tt></a> and unpack it to install a complete Boost +distribution.<a class="footnote-reference" href="#zip" id="id2"><sup>1</sup></a></p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="the-boost-distribution"> +<h1><a class="toc-backref" href="#id27">2 The Boost Distribution</a></h1> +<p>This is a sketch of the resulting directory structure:</p> +<pre class="literal-block"> +<strong>boost_1_36_0</strong><strong>\</strong> .................<em>The “boost root directoryâ€</em> + <strong>index.htm</strong> .........<em>A copy of www.boost.org starts here</em> + <strong>boost</strong><strong>\</strong> .........................<em>All Boost Header files</em> + <strong>lib</strong><strong>\</strong> .....................<em>precompiled library binaries</em> + <strong>libs</strong><strong>\</strong> ............<em>Tests, .cpp</em>s<em>, docs, etc., by library</em> + <strong>index.html</strong> ........<em>Library documentation starts here</em> + <strong>algorithm</strong><strong>\</strong> + <strong>any</strong><strong>\</strong> + <strong>array</strong><strong>\</strong> + <em>…more libraries…</em> + <strong>status</strong><strong>\</strong> .........................<em>Boost-wide test suite</em> + <strong>tools</strong><strong>\</strong> ...........<em>Utilities, e.g. bjam, quickbook, bcp</em> + <strong>more</strong><strong>\</strong> ..........................<em>Policy documents, etc.</em> + <strong>doc</strong><strong>\</strong> ...............<em>A subset of all Boost library docs</em> +</pre> +<div class="sidebar"> +<p class="first sidebar-title">Header Organization</p> +<p class="pre-wrap">The organization of Boost library headers isn't entirely uniform, +but most libraries follow a few patterns:</p> +<ul class="pre-wrap last"> +<li><p class="first">Some older libraries and most very small libraries place all +public headers directly into <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt>.</p> +</li> +<li><p class="first">Most libraries' public headers live in a subdirectory of +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt>, named after the library. For example, you'll find +the Python library's <tt class="docutils literal"><span class="pre">def.hpp</span></tt> header in</p> +<pre class="literal-block"> +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt><tt class="docutils literal"><span class="pre">python</span></tt><tt class="docutils literal"><span class="pre">\</span></tt><tt class="docutils literal"><span class="pre">def.hpp</span></tt>. +</pre> +</li> +<li><p class="first">Some libraries have an “aggregate header†in <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt> that +<tt class="docutils literal"><span class="pre">#include</span></tt>s all of the library's other headers. For +example, <a class="reference external" href="../../libs/python/doc/building.html">Boost.Python</a>'s aggregate header is</p> +<pre class="literal-block"> +<tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt><tt class="docutils literal"><span class="pre">python.hpp</span></tt>. +</pre> +</li> +<li><p class="first">Most libraries place private headers in a subdirectory called +<tt class="docutils literal"><span class="pre">detail</span></tt><tt class="docutils literal"><span class="pre">\</span></tt>, or <tt class="docutils literal"><span class="pre">aux_</span></tt><tt class="docutils literal"><span class="pre">\</span></tt>. Don't expect to find +anything you can use in these directories.</p> +</li> +</ul> +</div> +<p>It's important to note the following:</p> +<ol class="arabic" id="boost-root-directory"> +<li><p class="first">The path to the <strong>boost root directory</strong> (often <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt>) is +sometimes referred to as <tt class="docutils literal"><span class="pre">$BOOST_ROOT</span></tt> in documentation and +mailing lists .</p> +</li> +<li><p class="first">To compile anything in Boost, you need a directory containing +the <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt> subdirectory in your <tt class="docutils literal"><span class="pre">#include</span></tt> path. Specific steps for setting up <tt class="docutils literal"><span class="pre">#include</span></tt> +paths in Microsoft Visual Studio follow later in this document; +if you use another IDE, please consult your product's +documentation for instructions.</p> +</li> +<li><p class="first">Since all of Boost's header files have the <tt class="docutils literal"><span class="pre">.hpp</span></tt> extension, +and live in the <tt class="docutils literal"><span class="pre">boost</span></tt><tt class="docutils literal"><span class="pre">\</span></tt> subdirectory of the boost root, your +Boost <tt class="docutils literal"><span class="pre">#include</span></tt> directives will look like:</p> +<pre class="literal-block"> +#include <boost/<em>whatever</em>.hpp> +</pre> +<p>or</p> +<pre class="literal-block"> +#include "boost/<em>whatever</em>.hpp" +</pre> +<p>depending on your preference regarding the use of angle bracket +includes. Even Windows users can (and, for +portability reasons, probably should) use forward slashes in +<tt class="docutils literal"><span class="pre">#include</span></tt> directives; your compiler doesn't care.</p> +</li> +<li><p class="first">Don't be distracted by the <tt class="docutils literal"><span class="pre">doc</span></tt><tt class="docutils literal"><span class="pre">\</span></tt> subdirectory; it only +contains a subset of the Boost documentation. Start with +<tt class="docutils literal"><span class="pre">libs</span></tt><tt class="docutils literal"><span class="pre">\</span></tt><tt class="docutils literal"><span class="pre">index.html</span></tt> if you're looking for the whole enchilada.</p> +</li> +</ol> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="header-only-libraries"> +<h1><a class="toc-backref" href="#id28">3 Header-Only Libraries</a></h1> +<p>The first thing many people want to know is, “how do I build +Boost?†The good news is that often, there's nothing to build.</p> +<div class="admonition-nothing-to-build admonition"> +<p class="first admonition-title">Nothing to Build?</p> +<p class="last">Most Boost libraries are <strong>header-only</strong>: they consist <em>entirely +of header files</em> containing templates and inline functions, and +require no separately-compiled library binaries or special +treatment when linking.</p> +</div> +<!-- .. _separate: --> +<p>The only Boost libraries that <em>must</em> be built separately are:</p> +<ul class="simple"> +<li><a class="reference external" href="../../libs/filesystem/index.html">Boost.Filesystem</a></li> +<li><a class="reference external" href="../../libs/iostreams/index.html">Boost.IOStreams</a></li> +<li><a class="reference external" href="../../libs/program_options/index.html">Boost.ProgramOptions</a></li> +<li><a class="reference external" href="../../libs/python/doc/building.html">Boost.Python</a> (see the <a class="reference external" href="../../libs/python/doc/building.html">Boost.Python build documentation</a> +before building and installing it)</li> +<li><a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a></li> +<li><a class="reference external" href="../../libs/serialization/index.html">Boost.Serialization</a></li> +<li><a class="reference external" href="../../libs/signals/index.html">Boost.Signals</a></li> +<li><a class="reference external" href="../../doc/html/thread.html">Boost.Thread</a></li> +<li><a class="reference external" href="../../libs/wave/index.html">Boost.Wave</a></li> +</ul> +<p>A few libraries have optional separately-compiled binaries:</p> +<ul class="simple"> +<li><a class="reference external" href="../../libs/date_time/index.html">Boost.DateTime</a> has a binary component that is only needed if +you're using its <tt class="docutils literal"><span class="pre">to_string</span></tt>/<tt class="docutils literal"><span class="pre">from_string</span></tt> or serialization +features, or if you're targeting Visual C++ 6.x or Borland.</li> +<li><a class="reference external" href="../../libs/graph/index.html">Boost.Graph</a> also has a binary component that is only needed if +you intend to <a class="reference external" href="../../libs/graph/doc/read_graphviz.html">parse GraphViz files</a>.</li> +<li><a class="reference external" href="../../libs/test/index.html">Boost.Test</a> can be used in “header-only†or “separately compiled†+mode, although <strong>separate compilation is recommended for serious +use</strong>.</li> +</ul> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="build-a-simple-program-using-boost"> +<h1><a class="toc-backref" href="#id29">4 Build a Simple Program Using Boost</a></h1> +<p>To keep things simple, let's start by using a header-only library. +The following program reads a sequence of integers from standard +input, uses Boost.Lambda to multiply each number by three, and +writes them to standard output:</p> +<pre class="literal-block"> +#include <boost/lambda/lambda.hpp> +#include <iostream> +#include <iterator> +#include <algorithm> + +int main() +{ + using namespace boost::lambda; + typedef std::istream_iterator<int> in; + + std::for_each( + in(std::cin), in(), std::cout << (_1 * 3) << " " ); +} +</pre> +<p>Copy the text of this program into a file called <tt class="docutils literal"><span class="pre">example.cpp</span></tt>.</p> +<div class="note" id="command-line-tool"> +<span id="command-prompt"></span><p class="first admonition-title">Note</p> +<p class="last">To build the examples in this guide, you can use an +Integrated Development Environment (IDE) like Visual Studio, or +you can issue commands from the <a class="reference internal" href="#command-prompt">command prompt</a>. Since every +IDE and compiler has different options and Microsoft's are by +far the dominant compilers on Windows, we only give specific +directions here for Visual Studio 2005 and .NET 2003 IDEs and +their respective command prompt compilers (using the command +prompt is a bit simpler). If you are using another compiler or +IDE, it should be relatively easy to adapt these instructions to +your environment.</p> +</div> +<div class="small sidebar"> +<p class="first sidebar-title">Command Prompt Basics</p> +<p>In Windows, a command-line tool is invoked by typing its name, +optionally followed by arguments, into a <em>Command Prompt</em> window +and pressing the Return (or Enter) key.</p> +<p>To open a generic <em>Command Prompt</em>, click the <em>Start</em> menu +button, click <em>Run</em>, type “cmdâ€, and then click <em>OK</em>.</p> +<p id="current-directory">All commands are executed within the context of a <strong>current +directory</strong> in the filesystem. To set the current directory, +type:</p> +<pre class="literal-block"> +cd <em>path</em>\<em>to</em>\<em>some</em>\<em>directory</em> +</pre> +<p>followed by Return. For example,</p> +<pre class="literal-block"> +cd <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +</pre> +<p class="last">Long commands can be continued across several lines by typing a +caret (<tt class="docutils literal"><span class="pre">^</span></tt>) at the end of all but the last line. Some examples +on this page use that technique to save horizontal space.</p> +</div> +<div class="section" id="build-from-the-visual-studio-ide"> +<span id="vs-header-only"></span><h2><a class="toc-backref" href="#id30">4.1 Build From the Visual Studio IDE</a></h2> +<ul> +<li><p class="first">From Visual Studio's <em>File</em> menu, select <em>New</em> > <em>Project…</em></p> +</li> +<li><p class="first">In the left-hand pane of the resulting <em>New Project</em> dialog, +select <em>Visual C++</em> > <em>Win32</em>.</p> +</li> +<li><p class="first">In the right-hand pane, select <em>Win32 Console Application</em> +(VS8.0) or <em>Win32 Console Project</em> (VS7.1).</p> +</li> +<li><p class="first">In the <em>name</em> field, enter “exampleâ€</p> +</li> +<li><p class="first">Right-click <strong>example</strong> in the <em>Solution Explorer</em> pane and +select <em>Properties</em> from the resulting pop-up menu</p> +</li> +<li><p class="first">In <em>Configuration Properties</em> > <em>C/C++</em> > <em>General</em> > <em>Additional Include +Directories</em>, enter the path to the Boost root directory, for example</p> +<blockquote> +<p><tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt></p> +</blockquote> +</li> +<li><p class="first">In <em>Configuration Properties</em> > <em>C/C++</em> > <em>Precompiled Headers</em>, change +<em>Use Precompiled Header (/Yu)</em> to <em>Not Using Precompiled +Headers</em>.<a class="footnote-reference" href="#pch" id="id5"><sup>3</sup></a></p> +</li> +<li><p class="first">Replace the contents of the <tt class="docutils literal"><span class="pre">example.cpp</span></tt> generated by the IDE +with the example code above.</p> +</li> +<li><p class="first">From the <em>Build</em> menu, select <em>Build Solution</em>.</p> +</li> +</ul> +<p>To test your application, hit the F5 key and type the following +into the resulting window, followed by the Return key:</p> +<pre class="literal-block"> +1 2 3 +</pre> +<p>Then hold down the control key and press "Z", followed by the +Return key.</p> +<p><a class="reference internal" href="#errors-and-warnings"><em>skip to the next step</em></a></p> +</div> +<div class="section" id="or-build-from-the-command-prompt"> +<h2><a class="toc-backref" href="#id31">4.2 Or, Build From the Command Prompt</a></h2> +<p>From your computer's <em>Start</em> menu, if you are a Visual +Studio 2005 user, select</p> +<blockquote> +<em>All Programs</em> > <em>Microsoft Visual Studio 2005</em> +> <em>Visual Studio Tools</em> > <em>Visual Studio 2005 Command Prompt</em></blockquote> +<p>or, if you're a Visual Studio .NET 2003 user, select</p> +<blockquote> +<em>All Programs</em> > <em>Microsoft Visual Studio .NET 2003</em> +> <em>Visual Studio .NET Tools</em> > <em>Visual Studio .NET 2003 Command Prompt</em></blockquote> +<p>to bring up a special <a class="reference internal" href="#command-prompt">command prompt</a> window set up for the +Visual Studio compiler. In that window, set the <a class="reference internal" href="#current-directory">current +directory</a> to a suitable location for creating some temporary +files and type the following command followed by the Return key:</p> +<pre class="literal-block"> +cl /EHsc /I <em>path\to\</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> <em>path</em>\<em>to</em>\example.cpp +</pre> +<p>To test the result, type:</p> +<pre class="literal-block"> +echo 1 2 3 | example +</pre> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="errors-and-warnings"> +<h2><a class="toc-backref" href="#id32">4.3 Errors and Warnings</a></h2> +<p>Don't be alarmed if you see compiler warnings originating in Boost +headers. We try to eliminate them, but doing so isn't always +practical.<a class="footnote-reference" href="#warnings" id="id7"><sup>5</sup></a> <strong>Errors are another matter</strong>. If you're +seeing compilation errors at this point in the tutorial, check to +be sure you've copied the <a class="reference internal" href="#build-a-simple-program-using-boost">example program</a> correctly and that you've +correctly identified the <a class="reference internal" href="#boost-root-directory">Boost root directory</a>.</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="prepare-to-use-a-boost-library-binary"> +<h1><a class="toc-backref" href="#id33">5 Prepare to Use a Boost Library Binary</a></h1> +<p>If you want to use any of the separately-compiled Boost libraries, +you'll need to acquire library binaries.</p> +<div class="section" id="install-visual-studio-binaries"> +<h2><a class="toc-backref" href="#id34">5.1 Install Visual Studio Binaries</a></h2> +<p>The installers will download and +install pre-compiled binaries into the <tt class="docutils literal"><span class="pre">lib\</span></tt> subdirectory of the +boost root, typically <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">\lib\</span></tt>. If you installed +all variants of the <a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a> binary, you're done with this +step. Otherwise, please run the installer again and install them +now.</p> +<p><a class="reference internal" href="#link-your-program-to-a-boost-library"><em>skip to the next step</em></a></p> +</div> +<div class="section" id="or-build-binaries-from-source"> +<h2><a class="toc-backref" href="#id35">5.2 Or, Build Binaries From Source</a></h2> +<p>If you're using an earlier version of Visual C++, or a compiler +from another vendor, you'll need to use <a class="reference external" href="../../tools/build/index.html">Boost.Build</a> to create your +own binaries.</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p><a class="reference external" href="../../tools/build/index.html">Boost.Build</a> is a text-based system for developing, testing, and +installing software. To use it, you'll need an executable called +<tt class="docutils literal"><span class="pre">bjam</span></tt>.</p> +<!-- .. _Boost.Jam documentation: Boost.Jam_ --> +<div class="section" id="get-bjam"> +<h3><a class="toc-backref" href="#id36">5.2.1 Get <tt class="docutils literal"><span class="pre">bjam</span></tt></a></h3> +<p><tt class="docutils literal"><span class="pre">bjam</span></tt> is the <a class="reference internal" href="#command-line-tool">command-line tool</a> that drives the Boost Build +system. To build Boost binaries, you'll invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> from the +Boost root.</p> +<p>Boost provides <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941">pre-compiled <tt class="docutils literal"><span class="pre">bjam</span></tt> executables</a> for a variety of platforms. +Alternatively, you can build <tt class="docutils literal"><span class="pre">bjam</span></tt> yourself using <a class="reference external" href="../../doc/html/jam/building.html">these +instructions</a>.</p> +</div> +<div class="section" id="identify-your-toolset"> +<span id="toolset-name"></span><span id="toolset"></span><h3><a class="toc-backref" href="#id37">5.2.2 Identify Your Toolset</a></h3> +<p>First, find the toolset corresponding to your compiler in the +following table.</p> +<div class="note"> +<p class="first admonition-title">Note</p> +<p class="last">If you previously chose a toolset for the purposes of +<a class="reference external" href="../../doc/html/jam/building.html">building bjam</a>, you should assume it won't work and instead +choose newly from the table below.</p> +</div> +<table border="1" class="docutils"> +<colgroup> +<col width="18%" /> +<col width="33%" /> +<col width="48%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">Toolset +Name</th> +<th class="head">Vendor</th> +<th class="head">Notes</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><tt class="docutils literal"><span class="pre">acc</span></tt></td> +<td>Hewlett Packard</td> +<td>Only very recent versions are +known to work well with Boost</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">borland</span></tt></td> +<td>Borland</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">como</span></tt></td> +<td>Comeau Computing</td> +<td>Using this toolset may +require <a class="reference external" href="../../tools/build/index.html">configuring</a> another +toolset to act as its backend</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">cw</span></tt></td> +<td>Metrowerks/FreeScale</td> +<td>The CodeWarrior compiler. We +have not tested versions of +this compiler produced since +it was sold to FreeScale.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">dmc</span></tt></td> +<td>Digital Mars</td> +<td>As of this Boost release, no +version of dmc is known to +handle Boost well.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">darwin</span></tt></td> +<td>Apple Computer</td> +<td>Apple's version of the GCC +toolchain with support for +Darwin and MacOS X features +such as frameworks.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">gcc</span></tt></td> +<td>The Gnu Project</td> +<td>Includes support for Cygwin +and MinGW compilers.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">hp_cxx</span></tt></td> +<td>Hewlett Packard</td> +<td>Targeted at the Tru64 +operating system.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">intel</span></tt></td> +<td>Intel</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">kylix</span></tt></td> +<td>Borland</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">msvc</span></tt></td> +<td>Microsoft</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">qcc</span></tt></td> +<td>QNX Software Systems</td> +<td> </td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">sun</span></tt></td> +<td>Sun</td> +<td>Only very recent versions are +known to work well with +Boost.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">vacpp</span></tt></td> +<td>IBM</td> +<td>The VisualAge C++ compiler.</td> +</tr> +</tbody> +</table> +<p>If you have multiple versions of a particular compiler installed, +you can append the version number to the toolset name, preceded by +a hyphen, e.g. <tt class="docutils literal"><span class="pre">intel-9.0</span></tt> or +<tt class="docutils literal"><span class="pre">borland-5.4.3</span></tt>. <strong>On Windows, append a version +number even if you only have one version installed</strong> (unless you +are using the msvc or gcc toolsets, which have special version +detection code) or <a class="reference internal" href="#auto-linking">auto-linking</a> will fail.</p> +</div> +<div class="section" id="select-a-build-directory"> +<span id="id12"></span><span id="build-directory"></span><h3><a class="toc-backref" href="#id38">5.2.3 Select a Build Directory</a></h3> +<p><a class="reference external" href="../../tools/build/index.html">Boost.Build</a> will place all intermediate files it generates while +building into the <strong>build directory</strong>. If your Boost root +directory is writable, this step isn't strictly necessary: by +default Boost.Build will create a <tt class="docutils literal"><span class="pre">bin.v2/</span></tt> subdirectory for that +purpose in your current working directory.</p> +</div> +<div class="section" id="invoke-bjam"> +<h3><a class="toc-backref" href="#id39">5.2.4 Invoke <tt class="docutils literal"><span class="pre">bjam</span></tt></a></h3> +<p>Change your current directory to the Boost root directory and +invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> as follows:</p> +<pre class="literal-block"> +bjam <strong>--build-dir=</strong><a class="reference internal" href="#id12"><em>build-directory</em></a> <strong>--toolset=</strong><a class="reference internal" href="#toolset-name"><em>toolset-name</em></a> <em>[</em><strong>--build-type=complete</strong><em>]</em> stage +</pre> +<p>For example, your session might look like this:<a class="footnote-reference" href="#continuation" id="id13"><sup>4</sup></a></p> +<pre class="literal-block"> +C:\WINDOWS> cd <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +<tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt>> bjam <strong>^</strong> +More? <strong>--build-dir=</strong>"C:\Documents and Settings\dave\build-boost" <strong>^</strong> +More? <strong>--toolset=</strong>msvc stage +</pre> +<p>Be sure to read <a class="reference internal" href="#continuation">this note</a> about the appearance of <tt class="docutils literal"><span class="pre">^</span></tt>, +<tt class="docutils literal"><span class="pre">More?</span></tt> and quotation marks (<tt class="docutils literal"><span class="pre">"</span></tt>) in that line.</p> +<p>The above example session will build static and shared non-debug multi-threaded +variations of the libraries. To build all variations:</p> +<pre class="literal-block"> +C:\WINDOWS> cd <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> +<tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt>> bjam <strong>^</strong> +More? <strong>--build-dir=</strong>"C:\Documents and Settings\dave\build-boost" <strong>^</strong> +More? <strong>--toolset=</strong>msvc <strong>--build-type=complete</strong> stage +</pre> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p>Building the special <tt class="docutils literal"><span class="pre">stage</span></tt> target places Boost +library binaries in the <tt class="docutils literal"><span class="pre">stage</span></tt><tt class="docutils literal"><span class="pre">\</span></tt> subdirectory of your <a class="reference internal" href="#build-directory">build +directory</a>.</p> +<div class="note"> +<p class="first admonition-title">Note</p> +<p class="last"><tt class="docutils literal"><span class="pre">bjam</span></tt> is case-sensitive; it is important that all the +parts shown in <strong>bold</strong> type above be entirely lower-case.</p> +</div> +<p>For a description of other options you can pass when invoking +<tt class="docutils literal"><span class="pre">bjam</span></tt>, type:</p> +<pre class="literal-block"> +bjam --help +</pre> +<p>In particular, to limit the amount of time spent building, you may +be interested in:</p> +<ul class="simple"> +<li>reviewing the list of library names with <tt class="docutils literal"><span class="pre">--show-libraries</span></tt></li> +<li>limiting which libraries get built with the <tt class="docutils literal"><span class="pre">--with-</span></tt><em>library-name</em> or <tt class="docutils literal"><span class="pre">--without-</span></tt><em>library-name</em> options</li> +<li>choosing a specific build variant by adding <tt class="docutils literal"><span class="pre">release</span></tt> or +<tt class="docutils literal"><span class="pre">debug</span></tt> to the command line.</li> +</ul> +</div> +</div> +<div class="section" id="expected-build-output"> +<h2><a class="toc-backref" href="#id40">5.3 Expected Build Output</a></h2> +<p>During the process of building Boost libraries, you can expect to +see some messages printed on the console. These may include</p> +<ul> +<li><p class="first">Notices about Boost library configuration—for example, the Regex +library outputs a message about ICU when built without Unicode +support, and the Python library may be skipped without error (but +with a notice) if you don't have Python installed.</p> +</li> +<li><p class="first">Messages from the build tool that report the number of targets +that were built or skipped. Don't be surprised if those numbers +don't make any sense to you; there are many targets per library.</p> +</li> +<li><p class="first">Build action messages describing what the tool is doing, which +look something like:</p> +<pre class="literal-block"> +<em>toolset-name</em>.c++ <em>long</em>/<em>path</em>/<em>to</em>/<em>file</em>/<em>being</em>/<em>built</em> +</pre> +</li> +<li><p class="first">Compiler warnings.</p> +</li> +</ul> +</div> +<div class="section" id="in-case-of-build-errors"> +<h2><a class="toc-backref" href="#id41">5.4 In Case of Build Errors</a></h2> +<p>The only error messages you see when building Boost—if any—should +be related to the IOStreams library's support of zip and bzip2 +formats as described <a class="reference external" href="../../libs/iostreams/doc/installation.html">here</a>. Install the relevant development +packages for libz and libbz2 if you need those features. Other +errors when building Boost libraries are cause for concern.</p> +<p>If it seems like the build system can't find your compiler and/or +linker, consider setting up a <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file as described +in the <a class="reference external" href="../../tools/build/index.html">Boost.Build documentation</a>. If that isn't your problem or +the <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file doesn't work for you, please address +questions about configuring Boost for your compiler to the +<a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#jamboost">Boost.Build mailing list</a>.</p> +<span class="target" id="auto-linking"></span><!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="link-your-program-to-a-boost-library"> +<h1><a class="toc-backref" href="#id42">6 Link Your Program to a Boost Library</a></h1> +<p>To demonstrate linking with a Boost binary library, we'll use the +following simple program that extracts the subject lines from +emails. It uses the <a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a> library, which has a +separately-compiled binary component.</p> +<pre class="literal-block"> +#include <boost/regex.hpp> +#include <iostream> +#include <string> + +int main() +{ + std::string line; + boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" ); + + while (std::cin) + { + std::getline(std::cin, line); + boost::smatch matches; + if (boost::regex_match(line, matches, pat)) + std::cout << matches[2] << std::endl; + } +} +</pre> +<p>There are two main challenges associated with linking:</p> +<ol class="arabic simple"> +<li>Tool configuration, e.g. choosing command-line options or IDE +build settings.</li> +<li>Identifying the library binary, among all the build variants, +whose compile configuration is compatible with the rest of your +project.</li> +</ol> +<div class="admonition-auto-linking admonition"> +<p class="first admonition-title">Auto-Linking</p> +<p>Most Windows compilers and linkers have so-called “auto-linking +support,†which eliminates the second challenge. Special code in +Boost header files detects your compiler options and uses that +information to encode the name of the correct library into your +object files; the linker selects the library with that name from +the directories you've told it to search.</p> +<p class="last">The GCC toolchains (Cygwin and MinGW) are notable exceptions; +GCC users should refer to the <a class="reference external" href="unix-variants.html#link-your-program-to-a-boost-library">linking instructions for Unix +variant OSes</a> for the appropriate command-line options to use.</p> +</div> +<div class="section" id="link-from-within-the-visual-studio-ide"> +<h2><a class="toc-backref" href="#id43">6.1 Link From Within the Visual Studio IDE</a></h2> +<p>Starting with the <a class="reference internal" href="#vs-header-only">header-only example project</a> we created +earlier:</p> +<ol class="arabic simple"> +<li>Right-click <strong>example</strong> in the <em>Solution Explorer</em> pane and +select <em>Properties</em> from the resulting pop-up menu</li> +<li>In <em>Configuration Properties</em> > <em>Linker</em> > <em>Additional Library +Directories</em>, enter the path to the Boost binaries, +e.g. <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">\lib\</span></tt>.</li> +<li>From the <em>Build</em> menu, select <em>Build Solution</em>.</li> +</ol> +<p><a class="reference internal" href="#test-your-program"><em>skip to the next step</em></a></p> +</div> +<div class="section" id="or-link-from-the-command-prompt"> +<h2><a class="toc-backref" href="#id44">6.2 Or, Link From the Command Prompt</a></h2> +<p>For example, we can compile and link the above program from the +Visual C++ command-line by simply adding the <strong>bold</strong> text below to +the command line we used earlier, assuming your Boost binaries are +in <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\boost\</span></tt><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">\lib</span></tt>:</p> +<pre class="literal-block"> +cl /EHsc /I <em>path\to\</em><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt> example.cpp <strong>^</strong> + <strong>/link /LIBPATH:</strong> <strong>C:\Program Files\boost\</strong><strong>boost_1_36_0</strong><strong>\lib</strong> +</pre> +</div> +<div class="section" id="library-naming"> +<h2><a class="toc-backref" href="#id45">6.3 Library Naming</a></h2> +<div class="note"> +<p class="first admonition-title">Note</p> +<p>If, like Visual C++, your compiler supports auto-linking, +you can probably <a class="reference internal" href="#test-your-program"><em>skip to the next step</em></a>.</p> +<blockquote class="last"> +</blockquote> +</div> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<p>In order to choose the right binary for your build configuration +you need to know how Boost binaries are named. Each library +filename is composed of a common sequence of elements that describe +how it was built. For example, +<tt class="docutils literal"><span class="pre">libboost_regex-vc71-mt-d-1_34.lib</span></tt> can be broken down into the +following elements:</p> +<dl class="docutils"> +<dt><tt class="docutils literal"><span class="pre">lib</span></tt></dt> +<dd><em>Prefix</em>: except on Microsoft Windows, every Boost library +name begins with this string. On Windows, only ordinary static +libraries use the <tt class="docutils literal"><span class="pre">lib</span></tt> prefix; import libraries and DLLs do +not.<a class="footnote-reference" href="#distinct" id="id20"><sup>6</sup></a></dd> +<dt><tt class="docutils literal"><span class="pre">boost_regex</span></tt></dt> +<dd><em>Library name</em>: all boost library filenames begin with <tt class="docutils literal"><span class="pre">boost_</span></tt>.</dd> +<dt><tt class="docutils literal"><span class="pre">-vc71</span></tt></dt> +<dd><em>Toolset tag</em>: identifies the <a class="reference internal" href="#toolset">toolset</a> and version used to build +the binary.</dd> +<dt><tt class="docutils literal"><span class="pre">-mt</span></tt></dt> +<dd><em>Threading tag</em>: indicates that the library was +built with multithreading support enabled. Libraries built +without multithreading support can be identified by the absence +of <tt class="docutils literal"><span class="pre">-mt</span></tt>.</dd> +<dt><tt class="docutils literal"><span class="pre">-d</span></tt></dt> +<dd><p class="first"><em>ABI tag</em>: encodes details that affect the library's +interoperability with other compiled code. For each such +feature, a single letter is added to the tag:</p> +<blockquote> +<table border="1" class="docutils"> +<colgroup> +<col width="6%" /> +<col width="94%" /> +</colgroup> +<thead valign="bottom"> +<tr><th class="head">Key</th> +<th class="head">Use this library when:</th> +</tr> +</thead> +<tbody valign="top"> +<tr><td><tt class="docutils literal"><span class="pre">s</span></tt></td> +<td>linking statically to the C++ standard library and compiler runtime support +libraries.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">g</span></tt></td> +<td>using debug versions of the standard and runtime support libraries.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">y</span></tt></td> +<td>using a special <a class="reference external" href="../../libs/python/doc/building.html#variants">debug build of Python</a>.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">d</span></tt></td> +<td>building a debug version of your code.<a class="footnote-reference" href="#debug-abi" id="id21"><sup>7</sup></a></td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">p</span></tt></td> +<td>using the STLPort standard library rather than the default one supplied with +your compiler.</td> +</tr> +<tr><td><tt class="docutils literal"><span class="pre">n</span></tt></td> +<td>using STLPort's deprecated “native iostreams†feature.<a class="footnote-reference" href="#native" id="id22"><sup>8</sup></a></td> +</tr> +</tbody> +</table> +</blockquote> +<p class="last">For example, if you build a debug version of your code for use +with debug versions of the static runtime library and the +STLPort standard library in “native iostreams†mode, +the tag would be: <tt class="docutils literal"><span class="pre">-sgdpn</span></tt>. If none of the above apply, the +ABI tag is ommitted.</p> +</dd> +<dt><tt class="docutils literal"><span class="pre">-1_34</span></tt></dt> +<dd><em>Version tag</em>: the full Boost release number, with periods +replaced by underscores. For example, version 1.31.1 would be +tagged as "-1_31_1".</dd> +<dt><tt class="docutils literal"><span class="pre">.lib</span></tt></dt> +<dd><em>Extension</em>: determined according to the operating system's usual +convention. On most unix-style platforms the extensions are +<tt class="docutils literal"><span class="pre">.a</span></tt> and <tt class="docutils literal"><span class="pre">.so</span></tt> for static libraries (archives) and shared +libraries, respectively. On Windows, <tt class="docutils literal"><span class="pre">.dll</span></tt> indicates a shared +library and (except for static libraries built by the <tt class="docutils literal"><span class="pre">gcc</span></tt> +<a class="reference internal" href="#toolset">toolset</a>, whose names always end in <tt class="docutils literal"><span class="pre">.a</span></tt>) <tt class="docutils literal"><span class="pre">.lib</span></tt> indicates a +static or import library. Where supported by toolsets on unix +variants, a full version extension is added (e.g. ".so.1.34") and +a symbolic link to the library file, named without the trailing +version number, will also be created.</dd> +</dl> +<!-- .. _Boost.Build toolset names: toolset-name_ --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +<div class="section" id="test-your-program"> +<h2><a class="toc-backref" href="#id46">6.4 Test Your Program</a></h2> +<p>To test our subject extraction, we'll filter the following text +file. Copy it out of your browser and save it as <tt class="docutils literal"><span class="pre">jayne.txt</span></tt>:</p> +<pre class="literal-block"> +To: George Shmidlap +From: Rita Marlowe +Subject: Will Success Spoil Rock Hunter? +--- +See subject. +</pre> +<p>Now, in a <a class="reference internal" href="#command-prompt">command prompt</a> window, type:</p> +<pre class="literal-block"> +<em>path</em>\<em>to</em>\<em>compiled</em>\example < <em>path</em>\<em>to</em>\jayne.txt +</pre> +<p>The program should respond with the email subject, “Will Success +Spoil Rock Hunter?â€</p> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +<div class="section" id="conclusion-and-further-resources"> +<h1><a class="toc-backref" href="#id47">7 Conclusion and Further Resources</a></h1> +<p>This concludes your introduction to Boost and to integrating it +with your programs. As you start using Boost in earnest, there are +surely a few additional points you'll wish we had covered. One day +we may have a “Book 2 in the Getting Started series†that addresses +them. Until then, we suggest you pursue the following resources. +If you can't find what you need, or there's anything we can do to +make this document clearer, please post it to the <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost Users' +mailing list</a>.</p> +<ul class="simple"> +<li><a class="reference external" href="../../tools/build/v2/index.html">Boost.Build reference manual</a></li> +<li><a class="reference external" href="../../tools/jam/index.html">Boost.Jam reference manual</a></li> +<li><a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost Users' mailing list</a></li> +<li><a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#jamboost">Boost.Build mailing list</a></li> +<li><a class="reference external" href="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost.Build_V2">Boost.Build Wiki</a></li> +<li><a class="reference external" href="../../libs/index.html">Index of all Boost library documentation</a></li> +</ul> +<div class="admonition-onward admonition"> +<p class="first admonition-title">Onward</p> +<blockquote class="epigraph last"> +<p>Good luck, and have fun!</p> +<p class="attribution">—the Boost Developers</p> +</blockquote> +</div> +<hr class="docutils" /> +<table class="docutils footnote" frame="void" id="zip" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>We recommend +downloading <a class="reference external" href="http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041"><tt class="docutils literal"><span class="pre">boost_1_36_0</span></tt><tt class="docutils literal"><span class="pre">.7z</span></tt></a> and using <a class="reference external" href="http://www.7-zip.org">7-Zip</a> to decompress +it. We no longer recommend .zip files for Boost because they are twice +as large as the equivalent .7z files. We don't recommend using Windows' +built-in decompression as it can be painfully slow for large archives.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="installer-src" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label">[2]</td><td>If you used the <a class="reference external" href="http://www.boostpro.com/products/free">installer</a> from Boost +Consulting and deselected “Source and Documentation†(it's +selected by default), you won't see the <tt class="docutils literal"><span class="pre">libs/</span></tt> subdirectory. +That won't affect your ability to use precompiled binaries, but +you won't be able to rebuild libraries from scratch.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="pch" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>There's no problem using Boost with precompiled headers; +these instructions merely avoid precompiled headers because it +would require Visual Studio-specific changes to the source code +used in the examples.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="continuation" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id13">[4]</a></td><td><p class="first">In this example, the caret character <tt class="docutils literal"><span class="pre">^</span></tt> is a +way of continuing the command on multiple lines, and must be the +<strong>final character</strong> used on the line to be continued (i.e. do +not follow it with spaces). The command prompt responds with +<tt class="docutils literal"><span class="pre">More?</span></tt> to prompt for more input. Feel free to omit the +carets and subsequent newlines; we used them so the example +would fit on a page of reasonable width.</p> +<p>The command prompt treats each bit of whitespace in the command +as an argument separator. That means quotation marks (<tt class="docutils literal"><span class="pre">"</span></tt>) +are required to keep text together whenever a single +command-line argument contains spaces, as in</p> +<pre class="literal-block"> +--build-dir=<span class="raw-html"><strong style="background-color:#B4FFB4">"</strong></span>C:\Documents<span class="raw-html"><strong style="color:#B4B4B4; background-color:#B4FFB4">_</strong></span>and<span class="raw-html"><strong style="color:#B4B4B4; background-color:#B4FFB4">_</strong></span>Settings\dave\build-boost<span class="raw-html"><strong style="background-color:#B4FFB4">"</strong></span> +</pre> +<p>Also, for example, you can't add spaces around the <tt class="docutils literal"><span class="pre">=</span></tt> sign as in</p> +<pre class="last literal-block"> +--build-dir<span class="raw-html"><strong style="color:#B4B4B4; background-color:#FFB4B4">_</strong></span>=<span class="raw-html"><strong style="color:#B4B4B4; background-color:#FFB4B4">_</strong></span>"C:\Documents and Settings\dave\build-boost" +</pre> +</td></tr> +</tbody> +</table> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<table class="docutils footnote" frame="void" id="warnings" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id7">[5]</a></td><td>Remember that warnings are specific to each compiler +implementation. The developer of a given Boost library might +not have access to your compiler. Also, some warnings are +extremely difficult to eliminate in generic code, to the point +where it's not worth the trouble. Finally, some compilers don't +have any source code mechanism for suppressing warnings.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="distinct" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id20">[6]</a></td><td>This convention distinguishes the static version of +a Boost library from the import library for an +identically-configured Boost DLL, which would otherwise have the +same name.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="debug-abi" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id21">[7]</a></td><td>These libraries were compiled without optimization +or inlining, with full debug symbols enabled, and without +<tt class="docutils literal"><span class="pre">NDEBUG</span></tt> <tt class="docutils literal"><span class="pre">#define</span></tt>d. Although it's true that sometimes +these choices don't affect binary compatibility with other +compiled code, you can't count on that with Boost libraries.</td></tr> +</tbody> +</table> +<table class="docutils footnote" frame="void" id="native" rules="none"> +<colgroup><col class="label" /><col /></colgroup> +<tbody valign="top"> +<tr><td class="label"><a class="fn-backref" href="#id22">[8]</a></td><td>This feature of STLPort is deprecated because it's +impossible to make it work transparently to the user; we don't +recommend it.</td></tr> +</tbody> +</table> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- This file contains all the definitions that need to be updated --> +<!-- for each new release of Boost. --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +<!-- Copyright David Abrahams 2006. Distributed under the Boost --> +<!-- Software License, Version 1.0. (See accompanying --> +<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> +</div> +</div> +</body> +</html> diff --git a/more/getting_started/windows.rst b/more/getting_started/windows.rst new file mode 100644 index 0000000000..dab2cb228d --- /dev/null +++ b/more/getting_started/windows.rst @@ -0,0 +1,362 @@ +.. Copyright David Abrahams 2006. Distributed under the Boost +.. Software License, Version 1.0. (See accompanying +.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +======================================= + |(logo)|__ Getting Started on Windows +======================================= + +.. |(logo)| image:: ../../boost.png + :alt: Boost + :class: boost-logo + +.. role:: raw-html(raw) + :format: html + +__ ../../index.htm + +.. section-numbering:: + +.. Admonition:: A note to Cygwin_ and MinGW_ users + + If you plan to use your tools from the Windows command prompt, + you're in the right place. If you plan to build from the Cygwin_ + bash shell, you're actually running on a POSIX platform and + should follow the instructions for `getting started on Unix + variants`_. Other command shells, such as MinGW_\ 's MSYS, are + not supported—they may or may not work. + + .. _`Getting Started on Unix Variants`: unix-variants.html + .. _Cygwin: http://www.cygwin.com + .. _MinGW: http://mingw.org + +.. Contents:: Index + +Get Boost +========= + +The easiest way to get a copy of Boost is to use an installer. +The `Boost website version of this Getting Started guide`_ will +have undated information on installers as they become available, +or see `Boost downloads`_ or the installer_ provided by `BoostPro Computing`_. We especially recommend using +an installer if you use Microsoft Visual Studio, because the installer can download and install +precompiled library binaries, saving you the trouble of building +them yourself. To complete this tutorial, you'll need to at least +install the Boost.Regex_ binaries when given the option. + +.. _`Boost website version of this Getting Started guide`: + http://www.boost.org/doc/libs/1_36_0/more/getting_started/index.html +.. _`Boost downloads`: `sf-download`_ +.. _installer: http://www.boostpro.com/products/free +.. _BoostPro Computing: http://www.boostpro.com + +If you're using an earlier version of Visual Studio or some other +compiler, or if you prefer to build everything yourself, you can +download |boost.7z|_ or |boost_zip|_ and unpack it to install a complete Boost +distribution. [#zip]_ + +.. |boost.7z| replace:: |boost_ver|\ ``.7z`` + +.. _`boost.7z`: `sf-download`_ + +.. |boost_zip| replace:: |boost_ver|\ ``.zip`` + +.. _`boost_zip`: `sf-download`_ + +.. include:: detail/distro.rst + +.. include:: detail/header-only.rst + +.. include:: detail/build-simple-head.rst + +.. _`command prompt`: +.. _`command-line tool`: + +.. Note:: To build the examples in this guide, you can use an + Integrated Development Environment (IDE) like Visual Studio, or + you can issue commands from the `command prompt`_. Since every + IDE and compiler has different options and Microsoft's are by + far the dominant compilers on Windows, we only give specific + directions here for Visual Studio 2005 and .NET 2003 IDEs and + their respective command prompt compilers (using the command + prompt is a bit simpler). If you are using another compiler or + IDE, it should be relatively easy to adapt these instructions to + your environment. + +.. sidebar:: Command Prompt Basics + :class: small + + In Windows, a command-line tool is invoked by typing its name, + optionally followed by arguments, into a *Command Prompt* window + and pressing the Return (or Enter) key. + + To open a generic *Command Prompt*, click the *Start* menu + button, click *Run*, type “cmdâ€, and then click *OK*. + + .. _current directory: + + All commands are executed within the context of a **current + directory** in the filesystem. To set the current directory, + type: + + .. parsed-literal:: + + cd *path*\ \\\ *to*\ \\\ *some*\ \\\ *directory* + + followed by Return. For example, + + .. parsed-literal:: + + cd |default-root| + + Long commands can be continued across several lines by typing a + caret (``^``) at the end of all but the last line. Some examples + on this page use that technique to save horizontal space. + +.. _vs-header-only: + +Build From the Visual Studio IDE +-------------------------------- + +* From Visual Studio's *File* menu, select *New* > *Project…* +* In the left-hand pane of the resulting *New Project* dialog, + select *Visual C++* > *Win32*. +* In the right-hand pane, select *Win32 Console Application* + (VS8.0) or *Win32 Console Project* (VS7.1). +* In the *name* field, enter “example†+* Right-click **example** in the *Solution Explorer* pane and + select *Properties* from the resulting pop-up menu +* In *Configuration Properties* > *C/C++* > *General* > *Additional Include + Directories*, enter the path to the Boost root directory, for example + + |default-root| + +* In *Configuration Properties* > *C/C++* > *Precompiled Headers*, change + *Use Precompiled Header (/Yu)* to *Not Using Precompiled + Headers*. [#pch]_ +* Replace the contents of the ``example.cpp`` generated by the IDE + with the example code above. +* From the *Build* menu, select *Build Solution*. + +To test your application, hit the F5 key and type the following +into the resulting window, followed by the Return key:: + + 1 2 3 + +Then hold down the control key and press "Z", followed by the +Return key. + +|next|__ + +__ `Errors and Warnings`_ + +Or, Build From the Command Prompt +--------------------------------- + +From your computer's *Start* menu, if you are a Visual +Studio 2005 user, select + + *All Programs* > *Microsoft Visual Studio 2005* + > *Visual Studio Tools* > *Visual Studio 2005 Command Prompt* + +or, if you're a Visual Studio .NET 2003 user, select + + *All Programs* > *Microsoft Visual Studio .NET 2003* + > *Visual Studio .NET Tools* > *Visual Studio .NET 2003 Command Prompt* + +to bring up a special `command prompt`_ window set up for the +Visual Studio compiler. In that window, set the `current +directory`_ to a suitable location for creating some temporary +files and type the following command followed by the Return key: + +.. parsed-literal:: + + cl /EHsc /I |root| *path*\ \\\ *to*\ \\example.cpp + +To test the result, type: + +.. parsed-literal:: + + echo 1 2 3 | example + +.. include:: detail/errors-and-warnings.rst + +.. include:: detail/binary-head.rst + +Install Visual Studio Binaries +------------------------------ + +The installers will download and +install pre-compiled binaries into the ``lib\`` subdirectory of the +boost root, typically |default-root|\ ``\lib\``. If you installed +all variants of the Boost.Regex_ binary, you're done with this +step. Otherwise, please run the installer again and install them +now. + +|next|__ + +__ `Link Your Program to a Boost Library`_ + +Or, Build Binaries From Source +------------------------------ + +If you're using an earlier version of Visual C++, or a compiler +from another vendor, you'll need to use Boost.Build_ to create your +own binaries. + +.. include:: detail/build-from-source-head.rst + +For example, your session might look like this: [#continuation]_ + +.. parsed-literal:: + + C:\\WINDOWS> cd |default-root| + |default-root|> bjam **^** + More? **--build-dir=**\ "C:\\Documents and Settings\\dave\\build-boost" **^** + More? **--toolset=**\ msvc stage + +Be sure to read `this note`__ about the appearance of ``^``, +``More?`` and quotation marks (``"``) in that line. + +The above example session will build static and shared non-debug multi-threaded +variations of the libraries. To build all variations: + +.. parsed-literal:: + + C:\\WINDOWS> cd |default-root| + |default-root|> bjam **^** + More? **--build-dir=**\ "C:\\Documents and Settings\\dave\\build-boost" **^** + More? **--toolset=**\ msvc **--build-type=complete** stage + +__ continuation_ + +.. include:: detail/build-from-source-tail.rst + +.. _auto-linking: + +.. include:: detail/link-head.rst + +.. Admonition:: Auto-Linking + + Most Windows compilers and linkers have so-called “auto-linking + support,†which eliminates the second challenge. Special code in + Boost header files detects your compiler options and uses that + information to encode the name of the correct library into your + object files; the linker selects the library with that name from + the directories you've told it to search. + + The GCC toolchains (Cygwin and MinGW) are notable exceptions; + GCC users should refer to the `linking instructions for Unix + variant OSes`__ for the appropriate command-line options to use. + +__ unix-variants.html#link-your-program-to-a-boost-library + + +Link From Within the Visual Studio IDE +-------------------------------------- + +Starting with the `header-only example project`__ we created +earlier: + +__ vs-header-only_ + +1. Right-click **example** in the *Solution Explorer* pane and + select *Properties* from the resulting pop-up menu +2. In *Configuration Properties* > *Linker* > *Additional Library + Directories*, enter the path to the Boost binaries, + e.g. |default-root|\ ``\lib\``. +3. From the *Build* menu, select *Build Solution*. + +|next|__ + +__ `Test Your Program`_ + +Or, Link From the Command Prompt +-------------------------------- + +For example, we can compile and link the above program from the +Visual C++ command-line by simply adding the **bold** text below to +the command line we used earlier, assuming your Boost binaries are +in |default-root|\ ``\lib``: + +.. parsed-literal:: + + cl /EHsc /I |root| example.cpp **^** + **/link /LIBPATH:** |default-root-bold|\ **\\lib** + +Library Naming +-------------- + +.. Note:: If, like Visual C++, your compiler supports auto-linking, + you can probably |next|__. + + __ `Test Your Program`_ + +.. include:: detail/library-naming.rst + +.. include:: detail/test-head.rst + +Now, in a `command prompt`_ window, type: + +.. parsed-literal:: + + *path*\ \\\ *to*\ \\\ *compiled*\ \\example < *path*\ \\\ *to*\ \\\ jayne.txt + +The program should respond with the email subject, “Will Success +Spoil Rock Hunter?†+ +.. include:: detail/conclusion.rst + +------------------------------ + +.. [#zip] We recommend + downloading |boost.7z|_ and using 7-Zip_ to decompress + it. We no longer recommend .zip files for Boost because they are twice + as large as the equivalent .7z files. We don't recommend using Windows' + built-in decompression as it can be painfully slow for large archives. + +.. _7-Zip: http://www.7-zip.org + +.. [#installer-src] If you used the installer_ from Boost + Consulting and deselected “Source and Documentation†(it's + selected by default), you won't see the ``libs/`` subdirectory. + That won't affect your ability to use precompiled binaries, but + you won't be able to rebuild libraries from scratch. + +.. [#pch] There's no problem using Boost with precompiled headers; + these instructions merely avoid precompiled headers because it + would require Visual Studio-specific changes to the source code + used in the examples. + +.. [#continuation] In this example, the caret character ``^`` is a + way of continuing the command on multiple lines, and must be the + **final character** used on the line to be continued (i.e. do + not follow it with spaces). The command prompt responds with + ``More?`` to prompt for more input. Feel free to omit the + carets and subsequent newlines; we used them so the example + would fit on a page of reasonable width. + + The command prompt treats each bit of whitespace in the command + as an argument separator. That means quotation marks (``"``) + are required to keep text together whenever a single + command-line argument contains spaces, as in + + .. parsed-literal:: + + --build-dir=\ :raw-html:`<strong style="background-color:#B4FFB4">"</strong>`\ C:\\Documents\ :raw-html:`<strong style="color:#B4B4B4; background-color:#B4FFB4">_</strong>`\ and\ :raw-html:`<strong style="color:#B4B4B4; background-color:#B4FFB4">_</strong>`\ Settings\\dave\\build-boost\ \ :raw-html:`<strong style="background-color:#B4FFB4">"</strong>` + + Also, for example, you can't add spaces around the ``=`` sign as in + + .. parsed-literal:: + + --build-dir\ :raw-html:`<strong style="color:#B4B4B4; background-color:#FFB4B4">_</strong>`\ =\ :raw-html:`<strong style="color:#B4B4B4; background-color:#FFB4B4">_</strong>`\ "C:\\Documents and Settings\\dave\\build-boost" + +.. |boost.zip| replace:: |boost_ver|\ ``.zip`` + +.. _`boost.zip`: `sf-download`_ + + +.. include:: detail/common-footnotes.rst +.. include:: detail/release-variables.rst +.. include:: detail/common-windows.rst +.. include:: detail/links.rst diff --git a/more/index.htm b/more/index.htm new file mode 100644 index 0000000000..467c3c9d73 --- /dev/null +++ b/more/index.htm @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Boost More Information</title> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="ProgId" content="FrontPage.Editor.Document"> + <meta name="GENERATOR" content="Microsoft FrontPage 5.0"> + <link rel="stylesheet" href="../doc/html/boostbook.css" type="text/css" /> + </head> + <body bgcolor="#ffffff" text="#000000"> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> + <tr> + <td width="277"> + <a href="../index.html"> + <img src="../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="337" align="middle"> + <font size="7">More Info</font> + </td> + </tr> + </table> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" height="26" width="681"> + <tr> + <td height="16" width="671"><a href="../more/getting_started/index.html">Getting Started</a> <font color="#FFFFFF"> + </font> <a href="../libs/libraries.htm"> + Libraries</a> <font color="#FFFFFF"> + </font> <a href="../tools/index.html">Tools </a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org">Web Site</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/users/news/">News</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/community/">Community</a> <font color="#FFFFFF"> + </font> + <a href="http://www.boost.org/users/faq.html">FAQ</a> </td> + </tr> + </table> + + <h2>Boost Policies</h2> + <blockquote> + <p><b><a href="http://www.boost.org/community/policy.html">Mailing List Discussion Policy.</a></b> + What's acceptable and what isn't.</p> + <p><b><a href="http://www.boost.org/development/requirements.html">Library Requirements and Guidelines</a></b>. + Basic standards for those preparing a submission.</p> + <P><STRONG> + <a href="http://www.boost.org/development/separate_compilation.html">Guidelines for Libraries with Separate + Source</a></STRONG>. Basic tutorial for libraries that require the + building of a separate link library.</P> + <p><strong><a href="writingdoc/index.html">Writing Documentation for Boost</a>. </strong> Basic guidelines for writing documentation and templates for quickly generating + documentation that follows the guidelines.</p> + <p><b><a href="http://www.boost.org/development/test.html">Test Policies and Protocols</a></b>. + What tests must be in place for a Boost library.</p> + <p><b><a href="http://www.boost.org/development/submissions.html">Library Submission Process</a></b>. + How to submit a library to Boost.</p> + <p><b><a href="http://www.boost.org/community/reviews.html">Library Formal Review Process</a></b>. + Including how to submit a review comment.</p> + <p><b><a href="http://www.boost.org/development/header.html">Header Policy</a></b>. Headers are where a + library contacts its users, so programming practices are particularly + important.</p> + <p><b><a href="http://www.boost.org/development/reuse.html">Library Reuse</a></b>. Should Boost + libraries use other boost libraries? What about the C++ Standard + Library? It's another trade-off.</p> + <p><b><a href="http://www.boost.org/community/moderators.html">Moderators</a></b>. Who they are and what + they do.</p> + </blockquote> + <h2>Boost Whatever</h2> + <blockquote> + <p><b><a href="http://www.boost.org/users/license.html">License Information</a> </b> Information + about the Boost Software License.</p> + <p><b><a href="http://www.boost.org/users/bibliography.html">Bibliography</a> </b> Print and online + publications relating to Boost and Boost libraries.</p> + <p><b><a href="http://www.boost.org/users/uses.html">Who's Using Boost?</a> </b> + Products and organizations that are using Boost.</p> + <p><b><a href="http://www.boost.org/community/review_schedule.html">Formal Review Schedule</a></b> + Future, current, and recently past Formal Reviews.</p> + <p><b><a href="http://www.boost.org/users/proposal.pdf">Proposal for a C++ Library Repository Web Site</a></b> + The original 1998 proposal that launched Boost.</p> + <p><b><a href="http://www.boost.org/support/bugs.html">How to report bugs</a></b> Ways to report Boost + bugs.</p> + <p><b><a href="http://www.boost.org/community/requests.html">How to request features</a></b> Ways + to request new library features.</p> + </blockquote> + <h2>Articles and Papers</h2> + <blockquote> + <p><strong> + <a href="http://www.boost.org/development/int_const_guidelines.html">Coding Guidelines for Integral Constant + Expressions</a></strong> describes how to work through the maze of + compiler related bugs surrounding this tricky topic.</p> + </blockquote> + <hr> + <p> + Revised + <!--webbot bot="Timestamp" s-type="EDITED" +s-format="%d %B, %Y" startspan -->13 March, 2008<!--webbot bot="Timestamp" endspan i-checksum="28995" --></p> + <p> + © Copyright Beman Dawes 2003.</p> + <p> + Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy + at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> + </body> +</html>
\ No newline at end of file diff --git a/more/writingdoc/design.html b/more/writingdoc/design.html new file mode 100644 index 0000000000..7e95a63ff0 --- /dev/null +++ b/more/writingdoc/design.html @@ -0,0 +1,576 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../boost.css"> + + <title>Writing Documentation for Boost - HTML Design</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="index.html"><img height="86" width="277" alt="C++ Boost" + src="../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">Writing Documentation for Boost</h1> + + <h2 align="center">HTML Design</h2> + </td> + </tr> + </table> + <hr> + + <dl class="page-index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#common-pages">Common Pages Included in HTML + Documentation</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#index-page">Index</a></dt> + + <dt><a href="#overview-page">Overview</a></dt> + + <dt><a href="#definitions-page">Definitions</a></dt> + + <dt><a href="#rationale-page">Rationale</a></dt> + + <dt><a href="#configuration-page">Configuration Information</a></dt> + + <dt><a href="#faq-page">Frequently Asked Questions</a></dt> + + <dt><a href="#bibliography-page">Bibliography</a></dt> + + <dt><a href="#acknowledgements-page">Acknowledgment</a></dt> + + <dt><a href="#header-page">Header Reference</a></dt> + </dl> + </dd> + + <dt><a href="#layout">Layout</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#page-banner">Page Banner</a></dt> + + <dt><a href="#page-index">Page Index</a></dt> + + <dt><a href="#content">Documentation Content</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#doc-footnotes">Footnotes</a></dt> + </dl> + </dd> + + <dt><a href="#revision-info">Revision Information</a></dt> + + <dt><a href="#copyright">Copyright Information</a></dt> + </dl> + </dd> + + <dt><a href="#format">Format</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#style-sheets">Cascading Style Sheets</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#boost-style-sheet">Boost Style Sheet</a></dt> + </dl> + </dd> + </dl> + </dd> + + <dt><a href="#templates">Templates</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#index-template">Index Page Template</a></dt> + + <dt><a href="#overview-template">Overview Page Template</a></dt> + + <dt><a href="#definitions-template">Definitions Page + Template</a></dt> + + <dt><a href="#rationale-template">Rationale Page Template</a></dt> + + <dt><a href="#configuration-template">Configuration Page + Template</a></dt> + + <dt><a href="#faq-template">FAQ (Frequently Asked Questions) Page + Template</a></dt> + + <dt><a href="#bibliography-template">Bibliography Page + Template</a></dt> + + <dt><a href="#acknowledgements-template">Acknowledgments Page + Template</a></dt> + + <dt><a href="#header-template">Header Page Template</a></dt> + </dl> + </dd> + </dl> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>Boost places no requirements on the design of HTML documentation for + library submitters. If you are submitting a library for which documentation + already exists in either HTML or in a form easily converted to HTML then + there is no need for you to read this document. However, if you have not + yet written the documentation, or if you expect to have to translate + documentation written in a format not easily convertible to HTML then this + document can give you a lot of information on how to go about writing + documentation in HTML.</p> + + <p>In several places this document assumes you're writing the documentation + to conform to the structure described in the <a href= + "structure.html">Documentation Structure</a> document. There is no + requirement that your documentation content follow these guidelines, but + they provide an effective way to communicate technical specifications for a + library in a terse yet precise manner that's familiar to many Boost + users.</p> + + <p>This document also contains links to <a href="#templates">HTML template + files</a> that can be used to rapidly develop documentation for a library + submission. These templates follow the guidelines presented here and in the + <a href="structure.html">Documentation Structure</a> document.</p> + + <h2><a name="common-pages" id="common-pages"></a>Common Pages Included in + HTML Documentation</h2> + + <p>Most HTML documentation projects will contain some common pages. General + guidelines for these common pages are provided below.</p> + + <h3><a name="index-page" id="index-page"></a>Index</h3> + + <p>The index page is the first page presented to a user when he browses the + documentation. Generally this page should not contain any actual content, + but instead contains a list of links to specific content. At a minimum this + list should contain a link to every HTML page contained in the + documentation. Optionally, sub-lists may be provided for individual pages + linking to specific subjects within the page. These sub-lists should form a + "tree" hierarchy based on the level of heading tag used for the specific + subject. Inclusion of such sub-lists for every page can make the index + rather lengthy, and since each page should include its own <a href= + "#page-index">Page Index</a>, it may make the navigation of the + documentation easier if such sub-lists are avoided. However, there is one + exception to this guideline: reference documentation should contain a link + to every header file in the library and a sub-list with a link to every + macro, value, type, class, function and object (see <a href= + "structure.html">Documentation Structure</a>) found in the header. Users + aren't always sure what header file any of these may be contained in, so + this structure in the index allows for easy navigation of the reference + documentation.</p> + + <p>The index list should generally be constructed using an HTML "definition + list" (<dl> and <dt> tags). A definition list has no bullets or + ordered specifications and produces a cleaner layout then an unordered list + (<ul> and <li> tags) or an ordered list (<ol> and + <li> tags). If you choose to use the common <a href= + "#boost-style-sheet">Boost Style Sheet</a> you should add a + <code>class="index"</code> attribute/value pair to the <dl> tag.</p> + + <p>An Index page <a href="#index-template">template</a> is provided for + use.</p> + + <h3><a name="overview-page" id="overview-page"></a>Overview</h3> + + <p>The Overview page is used to introduce the reader to the library. It + should give a high-level overview of the purpose of the library and + introduce the reader to any concepts they may be unfamiliar with. This may + also be an appropriate place for some "light" rationale, though more + thorough presentation of any rationale would be better placed in the + <a href="#rationale-page">Rational Page</a>.</p> + + <p>Like most content pages, the Overview page should include a <a href= + "#page-index">Page Index</a>.</p> + + <p>An Overview page <a href="#overview-template">template</a> is provided + for use.</p> + + <h3><a name="definitions-page" id="definitions-page"></a>Definitions</h3> + + <p>The Definitions page is used to provide a list of definitions for terms + that a user may be unfamiliar with.</p> + + <p>The definition list should generally be constructed using an HTML + "definition list" (<dl> and <DT> tags). A definition list has + no bullets or ordered specifications and produces a cleaner layout then an + unordered list (<UL> and <li> tags) or an ordered list + (<ol> and <li> tags). If you choose to use the common <a href= + "#boost-style-sheet">Boost Style Sheet</a> you should add a + <code>class="definition"</code> attribute/value pair to the <dl> + tag.</p> + + <p>Because this page's content should only contain a list of definitions, + it should not have a <a href="#page-index">Page Index</a>.</p> + + <p>A Definitions page <a href="#definitions-template">template</a> is + provided for use.</p> + + <h3><a name="rationale-page" id="rationale-page"></a>Rationale</h3> + + <p>The Rationale page is used to provide lengthy descriptions of the + rationale behind the library's design. This information helps users to + understand why a library was designed the way it was and may reduce the + frequency of a number of frequently asked questions. For a better + description of why rationale is important see the <a href= + "http://www.boost.org/more/lib_guide.htm#Rationale">Rationale rationale</a> + in the general submission guidelines.</p> + + <p>Like most content pages, the Rationale page should include a <a href= + "#page-index">Page Index</a>.</p> + + <p>A Rationale page <a href="#rationale-template">template</a> is provided + for use.</p> + + <h3><a name="configuration-page" id="configuration-page"></a>Configuration + Information</h3> + + <p>The Configuration Information page is used to document configuration + macros used by the library. Such macros belong in one of three groups: + macros used by library implenters defined in + <code><boost/config.hpp></code>, macros used by library users to + detect platform configuration information and macros defined by library + users to configure library behavior.</p> + + <p>Like most content pages, the Overview page should include a <a href= + "#page-index">Page Index</a>.</p> + + <p>A Configuration page <a href="#configuration-template">template</a> is + provided for use.</p> + + <h3><a name="faq-page" id="faq-page"></a>Frequently Asked Questions</h3> + + <p>As a library matures the users will have questions about the usage of + the library. Often users will ask the same questions over and over again. + Rather than having to deal with answering the question every time it's + asked, a Frequently Asked Questions (commonly known as FAQs) page can be + used to document the questions and answers. This is such a valuable piece + of documentation not only for the users but for the maintainers as well, + that a FAQ page should be provided from the outset. If there are no + questions that will obviously become a FAQ, the initial page may just + indicate that there are no FAQs yet. This empty place holder helps to + indicate to the users that you plan to address any FAQs as they occur.</p> + + <p>The <a href="#page-index">Page Index</a> for the FAQ page should contain + a list of all the questions contained in the document. The actual question + entries should be formatted with the question in a heading tag and the + answers in standard paragraph format. This provides a clean presentation + that's easy to read.</p> + + <p>A Frequently Asked Questions page <a href="#faq-template">template</a> + is provided for use.</p> + + <h3><a name="bibliography-page" id= + "bibliography-page"></a>Bibliography</h3> + + <p>The Bibliography page is used to document any bibliographical + information associated with references made within the documentation to + external resources. Parenthetical references are used within the + documentation which link to entries in the Bibliography page. + Bibliographical entries provide detailed information about the external + resource and may contain hyper links to the resource if it's available + online. There are several formal styles used for writing bibliographies. + You may use what ever style you want, but one of the better styles to + consider using can be referenced <a href= + "http://www.columbia.edu/cu/cup/cgos/idx_basic.html">here</a>.</p> + + <p>Since the Bibliography page should contain only bibliographical + information there is no need for a <a href="#page-index">Page + Index</a>.</p> + + <p>A Bibliography page <a href="#bibliography-template">template</a> is + provided for use.</p> + + <h3><a name="acknowledgements-page" id= + "acknowledgements-page"></a>Acknowledgment</h3> + + <p>The Acknowledgment page is used to give credit where credit is due. When + individuals provide input on the design or implementation, or when you make + use of someone else's work, you should acknowledge them. This is a courtesy + that you'd expect others to extend to you, so you should strive to + acknowledge the efforts of everyone else in your own documentation.</p> + + <p>Since the Acknowledgment page should contain only a list of + acknowledgment there is no need for a <a href="#page-index">Page + Index</a>.</p> + + <p>An Acknowledgments page <a href= + "#acknowledgements-template">template</a> is provided for use.</p> + + <h3><a name="header-page" id="header-page"></a>Header Reference</h3> + + <p>The Header Reference pages are the most important pages in your + documentation. They document all library headers, including all the macros, + values, types, classes, functions and objects defined in them. In general + it may prove useful to follow the guidelines in <a href= + "structure.html">Documentation Structure</a> when writing the content for + these pages.</p> + + <p>Like most content pages, the Header Reference pages should include a + <a href="#page-index">Page Index</a>.</p> + + <p>A Header Reference page <a href="#header-template">template</a> is + provided for use.</p> + + <h2><a name="layout" id="layout"></a>Layout</h2> + + <p>There are certain page layout concepts that will be used frequently in + many of your pages. This section outlines some general guidelines that you + can follow when designing each of these layout concepts for your + documentation.</p> + + <h3><a name="page-banner" id="page-banner"></a>Page Banner</h3> + + <p>The Page Banner is located at the very top of a page and provides quick + information about the page contents. This includes the Boost logo, which + indicates to the reader that this page is part of the Boost web site, a + title for the documentation (generally the library name) and the page + title. The Boost logo should hyper link to the Boost home page on the index + page and to the index page on all other pages. This allows the user to + easily navigate through the Boost web site and through the documentation. + The <title> tag for the HTML page should consist of the documentation + title and the page title separated by a hyphen.</p> + + <p>The Page Banner should be separated from the rest of the page by the use + of an <hr> tag. This helps to clearly separate the actual content + from the title information and produces cleaner text.</p> + + <h3><a name="page-index" id="page-index"></a>Page Index</h3> + + <p>The page index is used to quickly navigate to the various sections of + the documentation on the page, and when present should be located just + below the Page Banner.</p> + + <p>The index list should generally be constructed using an HTML "definition + list" (<dl> and <DT> tags). A definition list has no bullets or + ordered specifications and produces a cleaner layout then an unordered list + (<UL> and <li> tags) or an ordered list (<ol> and + <li> tags). If you choose to use the Boost Style Sheet you should add + a <code>class="page-index"</code> attribute/value pair to the <dl> + tag.</p> + + <p>Most pages should include a Page Index.</p> + + <h3><a name="content" id="content"></a>Documentation Content</h3> + + <p>The page's actual documentation content will be formatted according to + the specific needs of individual pages, and should be placed right after + the Page Index if present, or after the Page Banner if not. In general the + documentation content will take the form of paragraph text contained + underneath section headings.</p> + + <h3><a name="doc-footnotes" id="doc-footnotes"></a>Footnotes</h3> + + <p>Footnotes may be used within a page's documentation. Within the + documentation content a footnote reference should take the form of a + footnote number in parentheses (the parentheses make it easier for the + reader to click on the hyper link) hyper linking to the actual footnote at + the bottom of the page's documentation content. You may either use the + <sup> tag to format such footnote numbers, or, preferably, you can + use a CSS style class in order to distinguish the number as a footnote + instead of as part of the actual text. If you choose to use the common + <a href="#boost-style-sheet">Boost Style Sheet</a>, a <code>footnote</code> + class is defined for this purpose.</p> + + <h3><a name="revision-info" id="revision-info"></a>Revision + Information</h3> + + <p>At the bottom of every page should be some revision information + indicating when the page was last revised. This information should be + separated from the rest of the page above by an <hr> tag. The + following HTML code snippet can be used to track this revision information + (this code uses some server components that exist on the Boost web site to + automatically track revision dates with out the need for hand editing the + date text):</p> + <pre> +<hr> +<p>Revised + <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan --> + 01 January, 2001 + <!--webbot bot="Timestamp" endspan i-checksum="39359" --> +</p> +</pre> + + <h3><a name="copyright" id="copyright"></a>Copyright Information</h3> + + <p>The very bottom of the page should contain any copyright information + that applies to the document.</p> + + <h2><a name="format" id="format"></a>Format</h2> + + <p>This section provides general guidelines for formatting documentation + using HTML. The description of the various "common pages" gave specific + details for formatting specific sections of the documentation, which should + override these guidelines.</p> + + <h3><a name="code-format" id="code-format"></a>Code</h3> + + <p>Code within the documentation should be placed within either + <code></code> or <pre></pre> tags. For code that's + placed inline with other text you use <code></code> tags, while + <pre></pre> tags are used for code "blocks". If a cascading + style sheet is used to specify formatting for these tags, a fixed width + sans serif font should be used. This insures that the code is easily + distinguishable from the rest of the text. It may also be beneficial to set + the style for <pre></pre> tags to indent the text, to help + separate code blocks from other structural HTML blocks. The <a href= + "#boost-style-sheet">Boost Style Sheet</a> specifies formatting for these + tags.</p> + + <p><b>Note:</b> "Code" includes variable names, function names, etc.</p> + + <h3><a name="lists" id="lists"></a>Lists</h3> + + <p>Lists should be constructed as unordered (<UL> and <li> + tags), ordered (<ol> and <li> tags) or definition (<dl> + and <DT> tags) lists in HTML. You use an unordered list when you need + a collection of items that don't have any kind of logical ordering, such as + a list of data types that are defined by the library and can be used for a + template argument. You use an ordered list when the collection of items + must be grouped in a logical ordering, such as when enumerating the steps + that an action logically performs. You use a definition list when the list + consists of not only items that have no logical ordering, but also contains + definitions/descriptions/etc. of the items. A good example of this is the + function specifications as described in <a href= + "structure.html">Documentation Structure</a>.</p> + + <h3><a name="graphics" id="graphics"></a>Graphics</h3> + + <p>Graphics should be used very sparingly, if at all. Graphic images + greatly effect the download time for many people, which can discourage + users from reading the documentation. If you need graphic images to help + illustrate something in your documentation consider supplying only a link + to the image within the documentation, instead of embedding it directly in + the text. If an image is going to be included in the text of the document + you should specify the image's size in the <img> tag, in order to + allow the user's browser to optimize the formatting of the text before the + image is loaded.</p> + + <h3><a name="non-breaking-spaces" id="non-breaking-spaces"></a>Non-breaking + Spaces</h3> + + <p>Non-breaking spaces (&nbsp;) should be avoided in HTML text. + Generally there are more appropriate ways to format the document, such as + using list constructs or specifying indentation as a style attribute or in + cascading style sheets.</p> + + <h3><a name="style-sheets" id="style-sheets"></a>Cascading Style + Sheets</h3> + + <p>Cascading style sheets allow you to apply some advanced formatting + styles to an HTML document. More importantly, they allow you to change the + formatting in a single file and effect all pages using the style sheet. + Instead of struggling to produce a specific format in HTML it's often + easier and more flexible to specify the formatting in a style sheet.</p> + + <h4><a name="boost-style-sheet" id="boost-style-sheet"></a>Boost Style + Sheet</h4> + + <p>The concept of using cascading style sheets to format HTML is such a + good idea that it can be beneficial to apply this across the entire Boost + site. Of course we can't require this (if Boost were to require such trivia + for submissions it's likely that many programmers would be discouraged from + contributing). However, a "standard" Boost style sheet + (http://www.boost.org/boost.css) is supplied anyway, so that a contributer + can quickly and easily produce clear and consistent documentation that + reflects a Boost "brand" if they so choose. If, at a later date, it's + decided to update the Boost "brand", it may be done in this single file and + all documents using the style sheet will automatically be updated.</p> + + <p>The Boost supplied style sheet not only specifies styles for many + standard tags, it also specifies several style "classes". A class is + specified for a given tag instead of being applied to all instances of a + given tag type. Below is a list of the classes specified in the Boost style + sheet and a description of when to use them:</p> + + <dl> + <dt><b>index</b> Used for <dl> tags when writing index lists.</dt> + + <dt><b>page-index</b> Used for <dl> tags when writing page index + lists.</dt> + + <dt><b>Footnote</b> Used when writing Footnote numbers.</dt> + + <dt><b>function-semantics</b> Used for <dl> tags when writing + function semantic lists.</dt> + </dl> + + <h2><a name="templates" id="templates"></a>Templates</h2> + + <p>Instead of hand coding every HTML page, HTML "templates" can be used + instead. The list below provides links to templates that may be used when + writing documentation for a contribution to Boost. Links provided in these + templates assume the files will reside in the "traditional" directory + hierarchy of <i>boost/libs/library/doc</i>. They may need correcting if the + file will reside in some other location.</p> + + <p><b>Note:</b> Since these "templates" are just HTML pages simply clicking + on the links below will load the template in your browser. You will need to + use a browser specific method to download the files instead of loading them + into the browser (for instance, on most Windows browsers you can right + click on the link and select the appropriate command from the context + sensitive menu).</p> + + <ul> + <li><a name="index-template" id="index-template"></a><a href= + "template/index.html">Index Page Template</a></li> + + <li><a name="overview-template" id="overview-template"></a><a href= + "template/overview.html">Overview Page Template</a></li> + + <li><a name="definitions-template" id="definitions-template"></a><a href= + "template/definitions.html">Definitions Page Template</a></li> + + <li><a name="rationale-template" id="rationale-template"></a><a href= + "template/rationale.html">Rationale Page Template</a></li> + + <li><a name="configuration-template" id= + "configuration-template"></a><a href= + "template/configuration.html">Configuration Page Template</a></li> + + <li><a name="faq-template" id="faq-template"></a><a href= + "template/faq.html">FAQ (Frequently Asked Questions) Page + Template</a></li> + + <li><a name="bibliography-template" id= + "bibliography-template"></a><a href= + "template/bibliography.html">Bibliography Page Template</a></li> + + <li><a name="acknowledgements-template" id= + "acknowledgements-template"></a><a href= + "template/acknowledgments.html">Acknowledgments Page Template</a></li> + + <li><a name="header-template" id="header-template"></a><a href= + "template/header.html">Header Page Template</a></li> + </ul> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2001 <a href= + "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/index.html b/more/writingdoc/index.html new file mode 100644 index 0000000000..869c590411 --- /dev/null +++ b/more/writingdoc/index.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../boost.css"> + + <title>Writing Documentation for Boost</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">Writing Documentation for Boost</h1> + + <h2 align="center">Index</h2> + </td> + </tr> + </table> + <hr> + + <h2>Contents</h2> + + <dl class="index"> + <dt><a href="introduction.html">Introduction</a></dt> + + <dt><a href="structure.html">Documentation Structure</a></dt> + + <dt><a href="design.html">HTML Design</a></dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2001 <a href= + "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/introduction.html b/more/writingdoc/introduction.html new file mode 100644 index 0000000000..29f737bcb6 --- /dev/null +++ b/more/writingdoc/introduction.html @@ -0,0 +1,68 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../boost.css"> + + <title>Writing Documentation for Boost - Introduction</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="index.html"><img height="86" width="277" alt="C++ Boost" + src="../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">Writing Documentation for Boost</h1> + + <h2 align="center">Introduction</h2> + </td> + </tr> + </table> + <hr> + + <p>Boost does not have any requirements on how you write your + documentation. If you are submitting a library that already has written + documentation in HTML format, there is no reason to change it to follow any + of the guidelines presented here. However, if you have documentation that's + not in HTML format and can't be easily converted to HTML, or if you're + starting on a library from scratch or have a library with no documentation + then these guidelines can make writing the documentation much easier.</p> + + <p>The section on <a href="structure.html">Documentation Structure</a> + describes how to go about structuring the documentation's content. This + section may be helpful even for libraries that already have documentation. + If there's a desire to present the library for possible inclusion by the + C++ Standards Committee then there may be a need to restructure the + documentation's content in order to insure the content meets explicit + requirements for library components (Section 17.3).</p> + + <p>The section on <a href="design.html">HTML Design</a> gives general rules + to follow when writing HTML documentation in order to give a professional + and consistent look. This section also contains some template files that + can be used to rapidly create documentation pages.</p> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2001 <a href= + "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/structure.html b/more/writingdoc/structure.html new file mode 100644 index 0000000000..d3783fcc9d --- /dev/null +++ b/more/writingdoc/structure.html @@ -0,0 +1,433 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../boost.css"> + + <title>Writing Documentation for Boost - Documentation Structure</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="index.html"><img height="86" width="277" alt="C++ Boost" + src="../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">Writing Documentation for Boost</h1> + + <h2 align="center">Documentation Structure</h2> + </td> + </tr> + </table> + <hr> + + <dl class="page-index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#standards-conforming">Standards Conforming + Documentation</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#elements">Document elements</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#summary">Summary</a></dt> + + <dt><a href="#requirements">Requirements</a></dt> + + <dt><a href="#detailed-specs">Detailed specifications</a></dt> + + <dt><a href="#ref-cpp">References to the Standard C++ + library</a></dt> + + <dt><a href="#ref-c">References to the Standard C + library</a></dt> + </dl> + </dd> + + <dt><a href="#other">Other conventions</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#type-descs">Type descriptions</a></dt> + </dl> + </dd> + </dl> + </dd> + + <dt><a href="#more">More Information</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#function-semantic-explanations">Function semantic + element explanations</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#requires">Requires</a></dt> + + <dt><a href="#effects">Effects</a></dt> + + <dt><a href="#postconditions">Postconditions</a></dt> + + <dt><a href="#returns">Returns</a></dt> + + <dt><a href="#throws">Throws</a></dt> + + <dt><a href="#complexity">Complexity</a></dt> + + <dt><a href="#rationale">Rationale</a></dt> + </dl> + </dd> + </dl> + </dd> + + <dt><a href="#footnotes">Footnotes</a></dt> + </dl> + + <h2><a name="introduction" id="introduction">Introduction</a></h2> + + <p>Boost itself does not require any specific documentation structure. The + C++ Standard, however, has very explicit requirements for the description + of library components (Section 17.3). So for Boost libraries likely to be + proposed for inclusion in the standard, it is highly desirable to structure + documentation in a way that meets the requirements of the the standard. + Doing so eliminates the need to rewrite the documentation for + standardization.</p> + + <p>Library developers should remember that for a library to be accepted as + part of the C++ Standard Library, the proposal must include full wording. + The committee will not do that work for you.</p> + + <p>Beyond that, the documentation structure required for the standard is an + effective way to communicate the technical specifications for a library. + Although terse, it is already familiar to many Boost users, and is far more + precise than most ad hoc documentation structures.</p> + + <p>The following description is for the structure of documentation required + by the standard. Boost libraries should also provided additional + documentation, such as introductory, tutorial, example, and rationale + material.</p> + + <h2><a name="standards-conforming" id="standards-conforming">Standards + Conforming</a> Documentation</h2> + + <h3><a name="elements" id="elements">Document elements</a></h3> + + <p>Each document contains the following elements, as applicable<a class= + "footnote" href="#footnote1">(1)</a>:</p> + + <ul> + <li><a href="#summary">Summary</a></li> + + <li><a href="#requirements">Requirements</a></li> + + <li><a href="#detailed-specs">Detailed specifications</a></li> + + <li><a href="#ref-cpp">References to the Standard C++ library</a></li> + + <li><a href="#ref-c">References to the Standard C library</a></li> + </ul> + + <h4><a name="summary" id="summary">Summary</a></h4> + + <p>The Summary provides a synopsis of the category, and introduces the + first-level subclauses. Each subclause also provides a summary, listing the + headers specified in the subclause and the library entities provided in + each header.</p> + + <p>Paragraphs labeled "Note(s):" or "Example(s):" are informative, other + paragraphs are normative.</p> + + <p>The summary and the detailed specifications are presented in the + order:</p> + + <ul> + <li>Macros</li> + + <li>Values</li> + + <li>Types</li> + + <li>Classes</li> + + <li>Functions</li> + + <li>Objects</li> + </ul> + + <h4><a name="requirements" id="requirements">Requirements</a></h4> + + <p>The library can be extended by a C++ program. Each clause, as + applicable, describes the requirements that such extensions must meet. Such + extensions are generally one of the following:</p> + + <ul> + <li>Template arguments</li> + + <li>Derived classes</li> + + <li>Containers, iterators, and/or algorithms that meet an interface + convention</li> + </ul> + + <p>Interface convention requirements are stated as generally as possible. + Instead of stating "<code>class X</code> has to define a member function + <code>operator++()</code>," the interface requires "for any object + <code>x</code> of <code>class X</code>, <code>++x</code> is defined." That + is, whether the operator is a member is unspecified.</p> + + <p>Requirements are stated in terms of well-defined expressions, which + define valid terms of the types that satisfy the requirements. For every + set of requirements there is a table that specifies an initial set of the + valid expressions and their semantics. Any generic algorithm that uses the + requirements is described in terms of the valid expressions for its formal + type parameters.</p> + + <p>Template argument requirements are sometimes referenced by name.</p> + + <p>In some cases the semantic requirements are presented as C++ code. Such + code is intended as a specification of equivalance of a construct to + another construct, not necessarily as the way the construct must be + implemented.<a class="footnote" href="#footnote2">(2)</a></p> + + <h4><a name="detailed-specs" id="detailed-specs">Detailed + specification</a></h4> + + <p>The detailed specifications each contain the following elements:</p> + + <ul> + <li>Name and brief description</li> + + <li>Synopsis (class definition or function prototype, as + appropriate)</li> + + <li>Restrictions on template arguments, if any</li> + + <li>Description of class invariants</li> + + <li>Description of function semantics</li> + </ul> + + <p>Descriptions of class member functions follow the order (as + appropriate)<a class="footnote" href="#footnote3">(3)</a>:</p> + + <ul> + <li>Constructor(s) and destructor</li> + + <li>Copying and assignment functions</li> + + <li>Comparison functions</li> + + <li>Modifier functions</li> + + <li>Observer functions</li> + + <li>Operators and other non-member functions</li> + </ul> + + <p>Descriptions of function semantics contain the following <a name= + "function-elements" id="function-elements">elements</a> (as + appropriate)<a class="footnote" href="#footnote4">(4):</a></p> + + <dl class="function-semantics"> + <dt><b><a href="#requires">Requires:</a></b> the preconditions for + calling the function</dt> + + <dt><b><a href="#effects">Effects:</a></b> the actions performed by the + function</dt> + + <dt><b><a href="#postconditions">Postconditions:</a></b> the observable + results established by the function</dt> + + <dt><b><a href="#returns">Returns:</a></b> a description of the value(s) + returned by the function</dt> + + <dt><b><a href="#throws">Throws:</a></b> any exceptions thrown by the + function, and the conditions that would cause the exception</dt> + + <dt><b><a href="#complexity">Complexity:</a></b> the time and/or space + complexity of the function</dt> + + <dt><b><a href="#rationale">Rationale:</a></b> the rationale for the + function's design or existence</dt> + </dl> + + <p>Complexity requirements specified in the library clauses are upper + bounds, and implementations that provide better complexity guarantees + satisfy the requirements.</p> + + <h4><a name="ref-cpp" id="ref-cpp">References to the C++ Standard + library</a></h4> + + <h4><a name="ref-c" id="ref-c">References to the C Standard + library</a></h4> + + <h3><a name="other" id="other">Other conventions</a></h3> + + <p>These conventions are for describing implementation-defined types, and + member functions.</p> + + <h4><a name="type-descs" id="type-descs">Type descriptions</a></h4> + + <p>The Requirements subclauses may describe names that are used to specify + constraints on template arguments.</p> + + <h2><a name="more" id="more">More Information</a></h2> + + <h3><a name="function-semantic-explanations" id= + "function-semantic-explanations">Function semantic element + explanations</a></h3> + + <p>The function semantic element description <a href= + "#function-elements">above</a> is taken directly from the C++ standard, and + is quite terse. Here is a more detailed explanation of each of the + elements.</p> + + <p>Note the use of the <code><code> ... </code></code> font tag + to distinguish actual C++ usage from English prose.</p> + + <h4><a name="requires" id="requires">Requires</a></h4> + + <p>Preconditions for calling the function, typically expressed as + predicates. The most common preconditions are requirements on the value of + arguments, often in the form of C++ expressions. For example,</p> + <pre> + +<code>void limit( int * p, int min, int max );</code> +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> <code>p != 0 && min <= max</code></dt> + </dl> + + <p>Requirements already enforced by the C++ language rules (such as the + type of arguments) are not repeated in Requires paragraphs.</p> + + <h4><a name="effects" id="effects">Effects</a></h4> + + <p>The actions performed by the function, described either in prose or in + C++. A description in prose is often less limiting on implementors, but is + often less precise than C++ code.</p> + + <p>If an effect is specified in one of the other elements, particularly + <i>postconditions</i>, <i>returns</i>, or <i>throws</i>, it is not also + described in the <i>effects</i> paragraph. Having only a single description + ensures that there is one and only one specification, and thus eliminates + the risk of divergence.</p> + + <h4><a name="postconditions" id="postconditions">Postconditions</a></h4> + + <p>The observable results of the function, such as the value of variables. + Postconditions are often expressed as predicates that are true after the + function completes, in the form of C++ expressions. For example:</p> + <pre> + +void make_zero_if_negative( int & x ); +</pre> + + <dl class="function-semantics"> + <dt><b>Postcondition:</b> <code>x >= 0</code></dt> + </dl> + + <h4><a name="returns" id="returns">Returns</a></h4> + + <p>The value returned by the function, usually in the form of a C++ + expression. For example:</p> + <pre> +int sum( int x, int y ); +</pre> + + <dl class="function-semantics"> + <dt><b>Returns:</b> <code>x + y</code></dt> + </dl> + + <p>Only specify the return value; the type is already dictated by C++ + language rules.</p> + + <h4><a name="throws" id="throws">Throws</a></h4> + + <p>Specify both the type of exception thrown, and the condition that causes + the exception to be thrown. For example, the <code>std::basic_string</code> + class specifies:</p> + <pre> + +void resize(size_type n, charT c); +</pre> + + <dl class="function-semantics"> + <dt><b>Throws:</b> <code>length_error</code> if <code>n > + max_size()</code>.</dt> + </dl> + + <h4><a name="complexity" id="complexity">Complexity</a></h4> + + <p>Specifying the time and/or space complexity of a function is often not + desirable because it over-constrains implementors and is hard to specify + correctly. Complexity is thus often best left as a quality of + implementation issue.</p> + + <p>A library component, however, can become effectively non-portable if + there is wide variation in performance between conforming implementations. + Containers are a prime example. In these cases it becomes worthwhile to + specify complexity.</p> + + <p>Complexity is often specified in generalized <a href= + "http://hissa.nist.gov/dads/HTML/bigOnotation.html">"Big-O" + notation</a>.</p> + + <h4><a name="rationale" id="rationale">Rationale</a></h4> + + <p>Specifying the rationale for a function's design or existence can often + give users a lot of insight into why a library is designed the way it is. + More importantly, it can help prevent "fixing" something that wasn't really + broken as the library matures.</p> + + <h2><a name="footnotes" id="footnotes">Footnotes</a></h2> + + <dl> + <dt><a class="footnote" name="footnote1" id="footnote1">(1)</a> To save + space, items that do not apply to a clause are omitted. For example, if a + clause does not specify any requirements, there will be no "Requirements" + subclause.</dt> + + <dt><a class="footnote" name="footnote2" id="footnote2">(2)</a> Although + in some cases the code is unambiguously the optimum implementation.</dt> + + <dt><a class="footnote" name="footnote3" id="footnote3">(3)</a> To save + space, items that do not apply to a class are omitted. For example, if a + class does not specify any comparison functions, there will be no + "Comparison functions" subclause.</dt> + + <dt><a class="footnote" name="footnote4" id="footnote4">(4)</a> To save + space, items that do not apply to a function are omitted. For example, if + a function does not specify any precondition, there will be no "Requires" + paragraph.</dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2001 <a href= + "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/acknowledgments.html b/more/writingdoc/template/acknowledgments.html new file mode 100644 index 0000000000..bfb9e5d28d --- /dev/null +++ b/more/writingdoc/template/acknowledgments.html @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Acknowledgments</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Acknowledgments</h2> + </td> + </tr> + </table> + <hr> + {{text}} + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/bibliography.html b/more/writingdoc/template/bibliography.html new file mode 100644 index 0000000000..c824b07bbf --- /dev/null +++ b/more/writingdoc/template/bibliography.html @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Bibliography</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Bibliography</h2> + </td> + </tr> + </table> + <hr> + {{bibliographical information}} + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/configuration.html b/more/writingdoc/template/configuration.html new file mode 100644 index 0000000000..6eaebf015e --- /dev/null +++ b/more/writingdoc/template/configuration.html @@ -0,0 +1,145 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Configuration</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Configuration</h2> + </td> + </tr> + </table> + <hr> + + <dl class="page-index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#app-defined">Application Defined Macros</a></dt> + + <dt><a href="#lib-defined-public">Public Library Defined Macros</a></dt> + + <dt><a href="#lib-defined-impl">Library Defined Implementation + Macros</a></dt> + </dl> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>{{library}} uses several configuration macros in <a href= + "http://www.boost.org/libs/config/config.htm"><boost/config.hpp></a>, + as well as configuration macros meant to be supplied by the application. + These macros are documented here.</p> + + <h2><a name="app-defined" id="app-defined"></a>Application Defined + Macros</h2> + + <p>These are the macros that may be defined by an application using + {{library}}.</p> + + <table summary="application defined macros" cellspacing="10" width="100%"> + <tr> + <td><b>Macro</b></td> + + <td><b>Meaning</b></td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + </table> + + <h2><a name="lib-defined-public" id="lib-defined-public"></a>Public Library + Defined Macros</h2> + + <p>These macros are defined by {{library}} but are expected to be used by + application code.</p> + + <table summary="public library defined macros" cellspacing="10" width= + "100%"> + <tr> + <td><b>Macro</b></td> + + <td><b>Meaning</b></td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + </table> + + <h2><a name="lib-defined-impl" id="lib-defined-impl"></a>Library Defined + Implementation Macros</h2> + + <p>These macros are defined by {{library}} and are implementation details + of interest only to implementers.</p> + + <table summary="library defined implementation macros" cellspacing="10" + width="100%"> + <tr> + <td><b>Macro</b></td> + + <td><b>Meaning</b></td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + + <tr> + <td>{{macro}}</td> + + <td>{{meaning}}</td> + </tr> + </table> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/definitions.html b/more/writingdoc/template/definitions.html new file mode 100644 index 0000000000..25b22d580f --- /dev/null +++ b/more/writingdoc/template/definitions.html @@ -0,0 +1,78 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Definitions</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Definitions</h2> + </td> + </tr> + </table> + <hr> + + <h2>Contents</h2> + + <dl class="page-index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#definitions">Definitions</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#definition-term1">Term 1</a></dt> + + <dt><a href="#definition-term2">Term 2</a></dt> + </dl> + </dd> + </dl> + <hr> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>{{Introductory text}}</p> + + <h2><a name="definitions" id="definitions"></a>Definitions</h2> + + <dl class="definitions"> + <dt><a name="definition-term1" id="definition-term1"></a><b>{{term}}:</b> + {{definition}}</dt> + + <dt><a name="definition-term2" id="definition-term2"></a><b>{{term}}:</b> + {{definition}}</dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/faq.html b/more/writingdoc/template/faq.html new file mode 100644 index 0000000000..3133faea01 --- /dev/null +++ b/more/writingdoc/template/faq.html @@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - FAQ</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Frequently Asked Questions (FAQs)</h2> + </td> + </tr> + </table> + <hr> + + <dl class="page-index"> + <dt><a href="#question1">{{question}}</a></dt> + + <dt><a href="#question2">{{question}}</a></dt> + </dl> + + <h2><a name="question1" id="question1"></a>{{question}}</h2> + + <p>{{answer}}</p> + + <h2><a name="question2" id="question2"></a>{{question}}</h2> + + <p>{{answer}}</p> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/header.html b/more/writingdoc/template/header.html new file mode 100644 index 0000000000..e16500de65 --- /dev/null +++ b/more/writingdoc/template/header.html @@ -0,0 +1,346 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{library}} - Header <{{header}}></title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{library}}</h1> + + <h2 align="center">Header <{{header}}></h2> + </td> + </tr> + </table> + <hr> + + <h2>Contents</h2> + + <dl class="page-index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#macros">Macros</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#macro-spec">{{macro name}}</a></dt> + </dl> + </dd> + + <dt><a href="#values">Values</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#value-spec">{{value name}}</a></dt> + </dl> + </dd> + + <dt><a href="#types">Types</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#type-spec">{{type name}}</a></dt> + </dl> + </dd> + + <dt><a href="#classes">Classes</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#class-spec">Class <code>{{class name}}</code></a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#class-spec-synopsis">Class <code>{{class + name}}</code> synopsis</a></dt> + + <dt><a href="#class-spec-ctors">Class <code>{{class name}}</code> + constructors and destructor</a></dt> + + <dt><a href="#class-spec-comparisons">Class <code>{{class + name}}</code> comparison functions</a></dt> + + <dt><a href="#class-spec-modifiers">Class <code>{{class + name}}</code> modifier functions</a></dt> + + <dt><a href="#class-spec-observers">Class <code>{{class + name}}</code> observer functions</a></dt> + + <dt><a href="#class-spec-statics">Class <code>{{class + name}}</code> static functions</a></dt> + </dl> + </dd> + </dl> + </dd> + + <dt><a href="#functions">Functions</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#function-spec">{{function name}}</a></dt> + </dl> + </dd> + + <dt><a href="#objects">Objects</a></dt> + + <dd> + <dl class="page-index"> + <dt><a href="#object-spec">{{object name}}</a></dt> + </dl> + </dd> + + <dt><a href="#examples">Example(s)</a></dt> + </dl> + <hr> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>{{Introductory text}}</p> + + <h2><a name="macros" id="macros"></a>Macros</h2> + + <p><a name="macro-spec" id="macro-spec"></a>{{Macro specifications}}</p> + + <h2><a name="values" id="values"></a>Values</h2> + + <p><a name="value-spec" id="value-spec"></a>{{Value specifications}}</p> + + <h2><a name="types" id="types"></a>Types</h2> + + <p><a name="type-spec" id="type-spec"></a>{{Type specifications}}</p> + + <h2><a name="classes" id="classes"></a>Classes</h2> + + <h3><a name="class-spec" id="class-spec"></a>Class <code>{{class + name}}</code></h3> + + <p>{{class overview text}}</p> + + <h4><a name="class-spec-synopsis" id="class-spec-synopsis"></a>Class + <code>{{class name}}</code> synopsis</h4> + <pre> +namespace boost +{ + class {{class name}} + { + }; +}; +</pre> + + <h4><a name="class-spec-ctors" id="class-spec-ctors"></a>Class + <code>{{class name}}</code> constructors and destructor</h4> + <pre> +{{constructor}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + <pre> +{{destructor}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h4><a name="class-spec-comparisons" id="class-spec-comparisons"></a>Class + <code>{{class name}}</code> comparison functions</h4> + <pre> +{{function}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h4><a name="class-spec-modifiers" id="class-spec-modifiers"></a>Class + <code>{{class name}}</code> modifier functions</h4> + <pre> +{{function}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h4><a name="class-spec-observers" id="class-spec-observers"></a>Class + <code>{{class name}}</code> observer functions</h4> + <pre> +{{function}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h4><a name="class-spec-statics" id="class-spec-statics"></a>Class + <code>{{class name}}</code> static functions</h4> + <pre> +{{function}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h2><a name="functions" id="functions"></a>Functions</h2> + <pre> +<a name="function-spec" id="function-spec"></a>{{function}} +</pre> + + <dl class="function-semantics"> + <dt><b>Requires:</b> {{text}}</dt> + + <dt><b>Effects:</b> {{text}}</dt> + + <dt><b>Postconditions:</b> {{text}}</dt> + + <dt><b>Returns:</b> {{text}}</dt> + + <dt><b>Throws:</b> {{text}}</dt> + + <dt><b>Complexity:</b> {{text}}</dt> + + <dt><b>Note:</b> {{text}}</dt> + + <dt><b>Danger:</b> {{text}}</dt> + + <dt><b>Rationale:</b> {{text}}</dt> + </dl> + + <h2><a name="objects" id="objects"></a>Objects</h2> + + <p><a name="object-spec" id="object-spec"></a>{{Object specifications}}</p> + + <h2><a name="examples" id="examples"></a>Example(s)</h2> + + <p>{{Example(s)}}</p> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/index.html b/more/writingdoc/template/index.html new file mode 100644 index 0000000000..e360ab3195 --- /dev/null +++ b/more/writingdoc/template/index.html @@ -0,0 +1,126 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}}</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Index</h2> + </td> + </tr> + </table> + <hr> + + <h2>Contents</h2> + + <dl class="index"> + <dt><a href="overview.html">Overview</a></dt> + + <dt>Reference</dt> + + <dd> + <dl class="index"> + <dt><a href="header.html">{{header}}</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#macros">Macros</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#macro-spec">{{macro name}}</a></dt> + </dl> + </dd> + + <dt><a href="header.html#values">Values</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#value-spec">{{value name}}</a></dt> + </dl> + </dd> + + <dt><a href="header.html#types">Types</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#value-spec">{{type name}}</a></dt> + </dl> + </dd> + + <dt><a href="header.html#classes">Classes</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#value-spec">{{class name}}</a></dt> + </dl> + </dd> + + <dt><a href="header.html#functions">Functions</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#value-spec">{{function + name}}</a></dt> + </dl> + </dd> + + <dt><a href="header.html#objects">Objects</a></dt> + + <dd> + <dl class="index"> + <dt><a href="header.html#value-spec">{{object name}}</a></dt> + </dl> + </dd> + </dl> + </dd> + </dl> + </dd> + + <dt><a href="configuration.html">Configuration Information</a></dt> + + <dt><a href="rationale.html">Rationale</a></dt> + + <dt><a href="definitions.html">Definitions</a></dt> + + <dt><a href="faq.html">Frequently Asked Questions (FAQs)</a></dt> + + <dt><a href="bibliography.html">Bibliography</a></dt> + + <dt><a href="acknowledgments.html">Acknowledgments</a></dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/overview.html b/more/writingdoc/template/overview.html new file mode 100644 index 0000000000..c931bc5838 --- /dev/null +++ b/more/writingdoc/template/overview.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Overview</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Overview</h2> + </td> + </tr> + </table> + <hr> + + <dl class="index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#topic1">First topic</a></dt> + + <dt><a href="#topic2">Second topic</a></dt> + + <dt><a href="#footnotes">Footnotes</a></dt> + </dl> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>{{text}}</p> + + <h2><a name="topic1" id="topic1"></a>First Topic</h2> + + <p>{{text}}</p> + + <h2><a name="topic2" id="topic2"></a>Second Topic</h2> + + <p>{{text}}</p> + + <h2><a name="footnotes" id="footnotes"></a>Footnotes</h2> + + <dl> + <dt><a name="footnote1" class="footnote" id="footnote1">(1)</a> + {{text}}</dt> + + <dt><a name="footnote2" class="footnote" id="footnote2">(2)</a> + {{text}}</dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/more/writingdoc/template/rationale.html b/more/writingdoc/template/rationale.html new file mode 100644 index 0000000000..bb450a092d --- /dev/null +++ b/more/writingdoc/template/rationale.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html> +<head> + <meta http-equiv="Content-Language" content="en-us"> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> + <link rel="stylesheet" type="text/css" href="../../../boost.css"> + + <title>{{Library}} - Rationale</title> +</head> + +<body link="#0000FF" vlink="#800080"> + <table border="0" cellpadding="7" cellspacing="0" width="100%" summary= + "header"> + <tr> + <td valign="top" width="300"> + <h3><a href="../../../index.htm"><img height="86" width="277" alt= + "C++ Boost" src="../../../boost.png" border="0"></a></h3> + </td> + + <td valign="top"> + <h1 align="center">{{Library}}</h1> + + <h2 align="center">Rationale</h2> + </td> + </tr> + </table> + <hr> + + <dl class="index"> + <dt><a href="#introduction">Introduction</a></dt> + + <dt><a href="#topic1">First topic</a></dt> + + <dt><a href="#topic2">Second topic</a></dt> + + <dt><a href="#footnotes">Footnotes</a></dt> + </dl> + + <h2><a name="introduction" id="introduction"></a>Introduction</h2> + + <p>{{text}}</p> + + <h2><a name="topic1" id="topic1"></a>First Topic</h2> + + <p>{{text}}</p> + + <h2><a name="topic2" id="topic2"></a>Second Topic</h2> + + <p>{{text}}</p> + + <h2><a name="footnotes" id="footnotes"></a>Footnotes</h2> + + <dl> + <dt><a name="footnote1" class="footnote" id="footnote1">(1)</a> + {{text}}</dt> + + <dt><a name="footnote2" class="footnote" id="footnote2">(2)</a> + {{text}}</dt> + </dl> + <hr> + + <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= + "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" + height="31" width="88"></a></p> + + <p>Revised + <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04 + December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + + <p><i>Copyright © 2006 <a href= + "mailto:{{address}}">{{author}}</a></i></p> + + <p><i>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> +</body> +</html> diff --git a/people/people.htm b/people/people.htm new file mode 100644 index 0000000000..dba531d717 --- /dev/null +++ b/people/people.htm @@ -0,0 +1,15 @@ +<html> +<head> +<meta http-equiv="refresh" content="0; URL=http://www.boost.org/users/people.html"> +</head> +<body> +Automatic redirection failed, please go to +<a href="http://www.boost.org/users/people.html"> +http://www.boost.org/users/people.html</a>. +<hr> +<p>© Copyright Beman Dawes, 2008</p> +<p> Distributed under the Boost Software License, Version 1.0. (See +<a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or <a href="http://www.boost.org/LICENSE_1_0.txt"> +www.boost.org/LICENSE_1_0.txt</a>)</p> +</body> +</html>
\ No newline at end of file diff --git a/rst.css b/rst.css new file mode 100644 index 0000000000..657224b7b1 --- /dev/null +++ b/rst.css @@ -0,0 +1,149 @@ +@import url("doc/html/boostbook.css"); +@import url("doc/html/docutils.css"); +/* Copyright David Abrahams 2006. Distributed under the Boost + Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +dl.docutils dt { + font-weight: bold } + +img.boost-logo { + border: none; + vertical-align: middle +} + +pre.literal-block span.concept { + font-style: italic; +} + +.nav { +display: inline; +list-style-type: none; +} + +.prevpage { +padding-top: -5px; +text-align: left; +float: left; +} + +.nextpage { +padding-top: -20px; +text-align: right; +float: right; +} + +div.small { + font-size: smaller } + +h2 a { + font-size: 90%; +} +h3 a { + font-size: 80%; +} +h4 a { + font-size: 70%; +} +h5 a { + font-size: 60%; +} + +dl,table +{ + text-align: left; + font-size: 10pt; + line-height: 1.15; +} + + +/*============================================================================= + Tables +=============================================================================*/ + +/* The only clue docutils gives us that tables are logically tables, + and not, e.g., footnotes, is that they have border="1". Therefore + we're keying off of that. We used to manually patch docutils to + add a "table" class to all logical tables, but that proved much too + fragile. +*/ + + table[border="1"] + { + width: 92%; + margin-left: 4%; + margin-right: 4%; + } + + table[border="1"] + { + padding: 4px; + } + + /* Table Cells */ + table[border="1"] tr td + { + padding: 0.5em; + text-align: left; + font-size: 9pt; + } + + table[border="1"] tr th + { + padding: 0.5em 0.5em 0.5em 0.5em; + border: 1pt solid white; + font-size: 80%; + } + + @media screen + { + + /* Tables */ + table[border="1"] tr td + { + border: 1px solid #DCDCDC; + } + + table[border="1"] tr th + { + background-color: #F0F0F0; + border: 1px solid #DCDCDC; + } + + pre, + .screen + { + border: 1px solid #DCDCDC; + } + + td pre + td .screen + { + border: 0px + } + + .sidebar pre + { + border: 0px + } + + } + + pre, + .screen + { + font-size: 9pt; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + /* Program listings in tables don't get borders */ + td pre, + td .screen + { + margin: 0pc 0pc 0pc 0pc; + padding: 0pc 0pc 0pc 0pc; + } + diff --git a/status/Jamfile.v2 b/status/Jamfile.v2 new file mode 100644 index 0000000000..f324d6376d --- /dev/null +++ b/status/Jamfile.v2 @@ -0,0 +1,194 @@ +# Boost regression-testing Jamfile +# (C) Copyright David Abrahams 2002. Permission to copy, use, modify, sell and +# distribute this software is granted provided this copyright notice appears in +# all copies. This software is provided "as is" without express or implied +# warranty, and with no claim as to its suitability for any purpose. + +# Status: +# - std::locale-support usage is commented out. +# Two test suite have different names. +# <no-warn> in config test is commented out. +# One of the smart_ptr test is run only from invocation dir in V1, and not +# run in V2 at all. + + +project status + : source-location $(BOOST_ROOT) + : requirements <hardcode-dll-paths>true + ; + +import testing ; + +alias test_exec_monitor : ../libs/test/build//boost_test_exec_monitor/<link>static ; +alias unit_test_framework : ../libs/test/build//boost_unit_test_framework/<link>static ; + +# Tests from Jamfiles in individual library test subdirectories +# Please keep these in alphabetic order by test-suite name +build-project ../libs/accumulators/test ; # test-suite accumulators +build-project ../libs/algorithm/minmax/test ; # test-suite algorith/minmax +build-project ../libs/algorithm/string/test ; # test-suite algorithm/string +build-project ../libs/asio/test ; # test-suite asio +build-project ../libs/assign/test ; # test-suite assign +build-project ../libs/any/test ; # test-suite any +build-project ../libs/bimap/test ; # test-suite bimap +build-project ../libs/bind/test ; # test-suite bind +build-project ../libs/circular_buffer/test ; # test-suite circular_buffer +build-project ../libs/concept_check ; # test-suite concept_check +build-project ../libs/conversion/test ; # test-suite conversion +build-project ../libs/date_time/test ; # test-suite date_time +build-project ../libs/disjoint_sets ; # test-suite disjoint_sets +build-project ../libs/dynamic_bitset ; # test-suite dynamic_bitset +build-project ../libs/exception/test ; +build-project ../libs/filesystem/test ; # test-suite filesystem +build-project ../libs/foreach/test ; # test-suite foreach +build-project ../libs/format/test ; # test-suite format +build-project ../libs/function/test ; # test-suite function +build-project ../libs/functional/hash/test ; # test-suite functional/hash +build-project ../libs/function_types/test ; # test-suite function_types +build-project ../libs/fusion/test ; # test-suite fusion +build-project ../libs/gil/test ; # test-suite gil +build-project ../libs/graph/test ; # test-suite graph +build-project ../libs/io/test ; # test-suite io +build-project ../libs/interprocess/example ; # test-suite interprocess_example +build-project ../libs/interprocess/test ; # test-suite interprocess_test +build-project ../libs/intrusive/example ; # test-suite intrusive_example +build-project ../libs/intrusive/test ; # test-suite intrusive_test +build-project ../libs/iostreams/test ; # test-suite iostreams +build-project ../libs/iterator/test ; # test-suite iterator +build-project ../libs/lambda/test ; # test-suite lambda +build-project ../libs/logic/test ; # test-suite logic +build-project ../libs/math/test ; # test-suite math +build-project ../libs/mpi/test ; # test-suite mpi +build-project ../libs/mpl/test ; # test-suite mpl +build-project ../libs/numeric/conversion/test ; # test-suite numeric/conversion +build-project ../libs/numeric/interval/test ; # test-suite numeric/interval +build-project ../libs/numeric/ublas/test ; # test-suite numeirc/uBLAS +build-project ../libs/multi_array/test ; # test-suite multi_array +build-project ../libs/multi_index/test ; # test-suite multi_index +build-project ../libs/optional/test ; # test-suite optional +build-project ../libs/parameter/test ; # test-suite parameter +build-project ../libs/program_options/test ; # test-suite program_options +build-project ../libs/property_map/test ; # test-suite property_map +build-project ../libs/ptr_container/test ; # test-suite ptr_container +build-project ../libs/python/test ; # test-suite python +build-project ../libs/random/test ; # test-suite random +build-project ../libs/range/test ; # test-suite range +build-project ../libs/regex/test ; # test-suite regex +build-project ../libs/regex/example ; # test-suite regex-examples +build-project ../libs/serialization/test ; # test-suite serialization +build-project ../libs/signals/test ; # test-suite signals +build-project ../libs/smart_ptr/test ; # test-suite smart_ptr +build-project ../libs/spirit/classic/test ; # test-suite spirit classic +build-project ../libs/spirit/test ; # test-suite spirit v2 +build-project ../libs/statechart/test ; # test-suite statechart +build-project ../libs/static_assert ; # test-suite static_assert +build-project ../libs/system/test ; # test-suite system +build-project ../libs/test/test ; # test-suite test +build-project ../libs/thread/test ; # test-suite thread +build-project ../libs/tr1/test ; # test-suite tr1 +build-project ../libs/tuple/test ; # test-suite tuple +build-project ../libs/type_traits/test ; # test-suite type_traits +build-project ../libs/typeof/test ; # test-suite typeof +build-project ../libs/units/test ; # test-suite units +build-project ../libs/unordered/test/unordered ; # test-suite unordered +build-project ../libs/unordered/test/exception ; # test-suite unordered-exception +build-project ../libs/utility/enable_if/test ; # test-suite utility/enable_if +build-project ../libs/utility/test ; # test-suite utility +build-project ../libs/variant/test ; # test-suite variant +build-project ../libs/wave/test/build ; # test-suite wave +build-project ../libs/xpressive/test ; # test-suite xpressive + +# Tests specified in this Jamfile + + test-suite config + : + # FIXME: Ideally, this should be just an alias to 'main' test suite + # defined in libs/config/test/Jamfile.v2 + # That way, we'll avoid code duplication and won't run additional + # tests in 'auxilliary' test suites, that need to be run and + # interpreted by humans. + # But such change will require tweaking libs/config/tools/generate.cpp + # so postponing to later. + [ run libs/config/test/config_test.cpp test_exec_monitor + : #args + : #input-files + : #requirements + <threading>multi #!!!<no-warn>config_test.cpp + ] + [ run libs/config/test/config_info.cpp : : : <test-info>always_show_run_output ] + [ run libs/config/test/math_info.cpp : : : <test-info>always_show_run_output <toolset>borland:<runtime-link>static <toolset>borland:<link>static ] + [ run libs/config/test/abi/abi_test.cpp libs/config/test/abi/main.cpp ] + [ run libs/config/test/limits_test.cpp test_exec_monitor ] + [ run libs/config/test/link/main.cpp ../libs/config/test/link//link_test + : #args + : #input-files + : #requirements + <runtime-link>shared + <define>BOOST_DYN_LINK=1 + <define>BOOST_CONFIG_NO_LIB=1 + : + config_link_test + ] + [ compile-fail libs/config/test/threads/test_thread_fail1.cpp ] + [ compile-fail libs/config/test/threads/test_thread_fail2.cpp ] + ; + + test-suite array_suite # !!! + : [ run libs/array/array0.cpp ] + [ run libs/array/array1.cpp ] + [ run libs/array/array2.cpp ] + [ run libs/array/array3.cpp ] + [ run libs/array/array4.cpp ] + [ run libs/array/array5.cpp ] + ; + + run libs/crc/crc_test.cpp test_exec_monitor ; + + run libs/functional/function_test.cpp ; + + + test-suite integer + : [ run libs/integer/cstdint_test.cpp ] + [ run libs/integer/integer_test.cpp ] + [ run libs/integer/integer_traits_test.cpp test_exec_monitor ] + ; + + run libs/pool/test/test_pool_alloc.cpp test_exec_monitor ; + + test-suite preprocessor + : [ compile libs/preprocessor/test/arithmetic.cpp ] + [ compile libs/preprocessor/test/array.cpp ] + [ compile libs/preprocessor/test/comparison.cpp ] + [ compile libs/preprocessor/test/control.cpp ] + [ compile libs/preprocessor/test/debug.cpp ] + [ compile libs/preprocessor/test/facilities.cpp ] + [ compile libs/preprocessor/test/iteration.cpp ] + [ compile libs/preprocessor/test/list.cpp ] + [ compile libs/preprocessor/test/logical.cpp ] + [ compile libs/preprocessor/test/repetition.cpp ] + [ compile libs/preprocessor/test/selection.cpp ] + [ compile libs/preprocessor/test/seq.cpp ] + [ compile libs/preprocessor/test/slot.cpp ] + [ compile libs/preprocessor/test/tuple.cpp ] + ; + + test-suite rational + : [ run libs/rational/rational_example.cpp ] + [ run libs/rational/rational_test.cpp unit_test_framework ] + ; + + compile libs/timer/timer_test.cpp ; + + test-suite tokenizer + : [ run libs/tokenizer/examples.cpp test_exec_monitor ] + [ run libs/tokenizer/simple_example_1.cpp ] + [ run libs/tokenizer/simple_example_2.cpp ] + [ run libs/tokenizer/simple_example_3.cpp ] + [ run libs/tokenizer/simple_example_4.cpp ] + [ run libs/tokenizer/simple_example_5.cpp ] + ; + + + + + diff --git a/status/explicit-failures-markup.xml b/status/explicit-failures-markup.xml new file mode 100644 index 0000000000..c63abd73c2 --- /dev/null +++ b/status/explicit-failures-markup.xml @@ -0,0 +1,6123 @@ +<?xml version="1.0" encoding="utf-8"?> +<explicit-failures-markup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="explicit-failures.xsd"> + + <!-- + PLEASE VALIDATE THE XML BEFORE COMMITTING YOUR CHANGES! + + Locally, the xmlint tool can be used: + + xmllint <two-dashes>valid explicit-failures-markup.xml <two-dashes>schema explicit-failures.xsd + + The following online services can be used to validate your changes to this + file: + + - http://syseng.nist.gov/b2bTestbed/projects/xmlvalidation/instance_validation.html + - http://xmlvalidation.com/ + + With both tools you need to provide both the explicit-failures-markup.xml + file as the XML document and the explicit-failures.xsd as the schema + document. Use the browse buttons to select them from your local hard + drive. + --> + + <!-- /////////////// Toolsets /////////////// --> + <mark-toolset name="acc" status="required"/> + <mark-toolset name="darwin-4.0.1" status="required"/> + <mark-toolset name="gcc-4.1.2_sunos_i86pc" status="required"/> + <mark-toolset name="gcc-4.1.3_linux" status="required"/> + <mark-toolset name="gcc-4.2.1" status="required"/> + <mark-toolset name="gcc-4.2.1_linux_x86_64" status="required"/> + <mark-toolset name="intel-linux-9.0" status="required"/> + <mark-toolset name="intel-vc8-win-10.0" status="required"/> + <mark-toolset name="intel-win-10.0" status="required"/> + <mark-toolset name="msvc-7.1" status="required"/> + <mark-toolset name="msvc-8.0" status="required"/> + <mark-toolset name="msvc-8.0_64" status="required"/> + + <!-- /////////////// Libraries /////////////// --> + + <!-- accumulators --> + <library name="accumulators"> + <mark-unusable> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <toolset name="borland-*"/> + </mark-unusable> + <mark-expected-failures> + <test name="tail_variate_means"/> + <test name="weighted_tail_variate_means"/> + <toolset name="gcc-4.2.1*"/> + <note author="Boris Gubenko" refid="42"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="weighted_kurtosis"/> + <toolset name="acc"/> + <note author="Boris Gubenko" refid="38"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="weighted_tail_variate_means"/> + <toolset name="hp_cxx-71*"/> + <note author="Markus Schoepflin"> + This failure is caused by a timeout when compiling the test. It + passes when the timeout value is increased. + </note> + </mark-expected-failures> + </library> + + <!-- minmax --> + <library name="algorithm/minmax"> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + </library> + + <!-- string_algo --> + <library name="algorithm/string"> + <mark-unusable> + <toolset name="borland-5.5*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.1_stlport4"/> + <toolset name="iw-7_1-vc6"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="mipspro"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="P.Droba"> + The compiler does not support features that are essential for the library. + </note> + </mark-unusable> + <test name="regex"> + <mark-failure> + <toolset name="borland-5.9*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.6*"/> + <note author="P.Droba"> + The toolset is not supported by Boost.Regex. + </note> + </mark-failure> + </test> + </library> + + <!-- any --> + <library name="any"> + <test name="any_to_ref_test"> + <mark-failure> + <toolset name="msvc-6.5*"/> + <note author="Vladimir Prus"> + The test fail with ICE, but the exact reason for ICE is not + known. A minimal example of casting any to reference type + seem to work. Anyone interested in using this functionality + with msvc is suggested to do additional testing. + </note> + </mark-failure> + </test> + </library> + + + <!-- array --> + <library name="array"> + <test name="array0"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <note author="A.Meredith"> + Compilers need to support partial template specialization + to work with zero length arrays. + </note> + </mark-failure> + </test> + <test name="array3"> + <mark-failure> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <note refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note refid="4"/> + </mark-failure> + </test> + <test name="array4"> + <mark-failure> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <note refid="3"/> + </mark-failure> + </test> + </library> + + <!-- asio --> + <library name="asio"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <note author="Chris Kohlhoff"> + This compiler does not support enable_if, which is needed by the + Boost.System library on which Boost.Asio depends. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="read_until"/> + <test name="read_until_select"/> + <toolset name="gcc-4.2.1_hpux_ia64"/> + <note author="Boris Gubenko"> + On HP-UX 11.23 platform, these tests must be compiled with + _XOPEN_SOURCE_EXTENDED macro defined. It is likely related + to CR JAGag28813. + </note> + </mark-expected-failures> + </library> + + <!-- assign --> + <library name="assign"> + <mark-unusable> + <toolset name="dmc-8_43-stlport-4_5_3"/> + </mark-unusable> + <mark-expected-failures> + <test name="array"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <note author="Thorsten Ottosen" > + The test would (most likely) compile and run properly if the workaround + syntax .to_container( c ) was applied to all list_of() expressions. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="email_example"/> + <toolset name="gcc-2.95.3*"/> + <note refid="27" author="Thorsten Ottosen"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="list_inserter"/> + <toolset name="msvc-7.0"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <note refid="6" author="Thorsten Ottosen"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="list_inserter"/> + <toolset name="gcc-2.95.3*"/> + <note author="Thorsten Ottosen"> + This test could probably be made to work if somebody with knowledge + about the compilers would submit a patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="list_of"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Thorsten Ottosen" > + The test would (most likely) compile and run properly if the workaround + syntax .to_container( c ) was applied to all list_of() expressions. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="list_of_workaround"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="Thorsten Ottosen" > + The test could probably be made to work if somebody submitted a patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="multi_index_container"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sun-5.8"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5*"/> + <toolset name="gcc-2.95.3*"/> + <note refid="27" author="Thorsten Ottosen"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="multi_index_container"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="mipspro"/> + <toolset name="hp_cxx-65*"/> + <note author="Thorsten Ottosen" > + The test would (most likely) compile and run properly if the workaround + syntax .to_container( c ) was applied to all list_of() expressions. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="my_vector_example"/> + <toolset name="gcc-2.95.3*"/> + <note refid="27" author="Thorsten Ottosen"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_list_inserter"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5*"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="mipspro"/> + <note author="Thorsten Ottosen" > + The test depends on Boost.Pointer Container which probably does not work for + this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_list_of"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5*"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="mipspro"/> + <note author="Thorsten Ottosen" > + The test depends on Boost.Pointer Container which probably does not work for + this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_map_inserter"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5*"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="mipspro"/> + <note author="Thorsten Ottosen" > + The test depends on Boost.Pointer Container which probably does not work for + this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="std"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="Thorsten Ottosen" > + The test does not work for + this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tuple_list_of"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="borland-5*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Thorsten Ottosen" > + The test depends on Boost.Tuple which probably does not work for + this compiler. + </note> + </mark-expected-failures> + </library> + + <!-- bimap --> + <library name="bimap"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <note author="J. López" date="05 Jul 2004" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5.8*"/> + <note author="Alisdair Meredith" date="26 May 2006"/> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith" date="27 Feb 2007"/> + </mark-unusable> + <mark-unusable> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="J. López" date="09 Jul 2004" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="*como-4_3_3-msvc"/> + <note author="J. López" date="30 Jul 2004"> + The VC++ 6.0 backend runs out of internal resources while + trying to process the Comeau output for this library; + Comeau Computing has been asked about a solution. + On the other hand, Comeau 4.3.3 with VC++ 7.0 backend works + fine. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sunpro-5_8u1-sunos"/> + <note author="J. López" date="22 Apr 2005" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="dmc-8_43-stlport-4_5_3"/> + <toolset name="dmc-8_44b-stlport-4_5_3"/> + <toolset name="dmc-8_47-stlport-4_5_3"/> + <note author="J. López" date="03 Jun 2005" refid="17"/> + </mark-unusable> + <mark-expected-failures> + <test name="test_bimap_assign"/> + <test name="test_bimap_ordered"/> + <test name="test_bimap_unconstrained"/> + <test name="test_bimap_unordered"/> + <toolset name="acc"/> + <note refid="38" author="Boris Gubenko"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="typeof"/> + <toolset name="acc*"/> + <toolset name="intel-vc71-win*"/> + <toolset name="intel-vc8-win*"/> + <toolset name="intel-win-9.1"/> + <toolset name="hp_cxx*"/> + <note refid="39" author="Boris Gubenko"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_bimap_serialization"/> + <toolset name="gcc-mingw-3.4.5"/> + <note author="Matias Capeletto">Compiler bug.</note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_bimap_property_map"/> + <toolset name="gcc-3.4.6_linux_x86_64"/> + <note author="Matias Capeletto">Time out.</note> + </mark-expected-failures> + </library> + + <!-- bind--> + <library name="bind"> + <mark-expected-failures> + <test name="bind_cv_test"/> + <test name="bind_stateful_test"/> + <toolset name="intel-7.1-linux"/> + <toolset name="intel-7.1-stdlib-default-linux"/> + <note refid="2" author="Aleksey Gurtovoy"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_dm2_test"/> + <test name="mem_fn_dm_test"/> + <toolset name="msvc-6.*"/> + <toolset name="msvc-7.0"/> + <toolset name="cw-8.3"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_dm_test"/> + <toolset name="sunpro-5_3-sunos"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_function_test"/> + <toolset name="sunpro-5_8u1-sunos"/> + <note author="Peter Dimov"> + This failure is caused by Boost.Function. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="mem_fn_derived_test"/> + <toolset name="sunpro-5_3-sunos"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_rv_sp_test"/> + <toolset name="hp_cxx-65*"/> + <toolset name="hp_cxx-71*"/> + <note author="Markus Schoepflin"> + This failure is caused by a bug in the compiler triggered by the + use of the debug flag '-gall'. It has been reported to the + compiler vendor. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_dm3_test"/> + <toolset name="borland-5*"/> + <toolset name="msvc-6.*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="mem_fn_eq_test"/> + <toolset name="msvc-7.1"/> + <note author="Peter Dimov"> + This failure is only present in release mode and is caused by /OPT:ICF. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="bind_placeholder_test"/> + <toolset name="borland-*"/> + <toolset name="msvc-6.*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + </library> + + + <!-- circular_buffer --> + <library name="circular_buffer"> + <mark-expected-failures> + <test name="base_test"/> + <test name="space_optimized_test"/> + <toolset name="acc"/> + <note author="Boris Gubenko" refid="41"/> + </mark-expected-failures> + </library> + + + <!-- concept_check --> + <library name="concept_check"> + <test name="class_concept_fail_expected"> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + <test name="class_concept_fail_expected"> + <mark-failure> + <toolset name="borland-5*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Jeremy Siek"/> + </mark-failure> + </test> + <test name="stl_concept_covering"> + <mark-failure> + <toolset name="*"/> + <note author="Jeremy Siek" refid="1"/> + </mark-failure> + </test> + <test name="stl_concept_check"> + <mark-failure> + <toolset name="hp_cxx*"/> + <note author="Markus Schoepflin" date="09 Dec 2007"> + This version of the Rogue Wave library fails to provide all + needed addition operators for the iterator type and the + difference type of std::deque. + </note> + </mark-failure> + </test> + </library> + + <!-- config --> + <library name="config"> + <test name="config_link_test"> + <mark-failure> + <toolset name="*como-4_3_3-vc7*"/> + <note author="J. Maddock" refid="3"/> + </mark-failure> + </test> + <test name="limits_test"> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + <test name="limits_test"> + <mark-failure> + <toolset name="gcc-3_4_4_tru64"/> + <note author="John Maddock"> + Long double NaN's are apparently handled incorrectly on this platform. + </note> + </mark-failure> + </test> + + <test name="limits_test"> + <mark-failure> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <note author="Aleksey Gurtovoy" refid="4"/> + </mark-failure> + </test> + <test name="limits_test"> + <mark-failure> + <toolset name="borland-5.8*"/> + <note author="A.Meredith"> + This failure is due to NaNs trapping. + </note> + </mark-failure> + </test> + <test name="limits_test"> + <mark-failure> + <toolset name="borland-5.9*"/> + <note author="A.Meredith"> + This failure is due to the compiler not recognising the long double special values for infinity and quiet NaN + </note> + </mark-failure> + </test> + + <test name="test_thread_fail1"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="J. Maddock" refid="3"/> + </mark-failure> + </test> + <test name="test_thread_fail2"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="J. Maddock" refid="3"/> + </mark-failure> + </test> + </library> + + + <!-- conversion --> + <library name="conversion"> + <test name="lexical_cast_test"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="Douglas Gregor" refid="3"/> + </mark-failure> + </test> + <test name="lexical_cast_abstract_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith"> + This compiler does not support the is_abstract type trait + </note> + </mark-failure> + </test> + <test name="lexical_cast_loopback_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-3.4*"/> + <toolset name="gcc-4.1*"/> + <toolset name="gcc-4.2*"/> + <toolset name="gcc-mingw-3.4*"/> + <toolset name="sun-5.7*"/> + <toolset name="sun-5.8*"/> + <toolset name="sun-5.9*"/> + <toolset name="msvc-8.0*"/> + <toolset name="msvc-9.0*"/> + <toolset name="msvc-7.1*"/> + <toolset name="acc"/> + <note author="Alexander Nasonov"> + Conversion double-string-double may give a different value (or even throw) on many compilers + </note> + </mark-failure> + </test> + </library> + + <!-- crc --> + <library name="crc"> + <test name="crc_test"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="Douglas Gregor" refid="3"/> + </mark-failure> + </test> + </library> + + <!-- date_time --> + <library name="date_time"> + <mark-unusable> + <toolset name="como-4_3_3-vc7_1"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-6.5_stlport5"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-7.0_stlport5"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <toolset name="iw-7_1-vc6"/> + <toolset name="dmc-*"/> + </mark-unusable> + + <test name="testgreg_serialize*"> + <mark-failure> + <toolset name="gcc-2.*"/> + <toolset name="msvc-6.5*"/> + <note author="B. Garst">The serialization library does not support this compiler. + </note> + </mark-failure> + </test> + + <test name="testgreg_serialize_xml"> + <mark-failure> + <toolset name="msvc-7.0"/> + <note author="J. Garland">XML serialization is not supported on this compiler. + </note> + </mark-failure> + </test> + + <test name="testtime_serialize*"> + <mark-failure> + <toolset name="gcc-2.*"/> + <toolset name="msvc-6.5*"/> + <note author="B. Garst">The serialization library does not support this compiler. + </note> + </mark-failure> + </test> + + <test name="testtime_serialize_xml*"> + <mark-failure> + <toolset name="msvc-7.0"/> + <note author="J. Garland">XML serialization is not supported on this compiler. + </note> + </mark-failure> + </test> + + <test name="testdate_iterator"> + <mark-failure> + <toolset name="intel-7.1-stdlib-default-linux"/> + <toolset name="intel-7.1-linux"/> + <note author="J. Garland" refid="19,21"/> + </mark-failure> + </test> + <test name="testdate_iterator_dll"> + <mark-failure> + <toolset name="intel-7.1-stdlib-default-linux"/> + <toolset name="intel-7.1-linux"/> + <note author="J. Garland" refid="19,21"/> + </mark-failure> + </test> + + + <test name="testgeneric_period"> + <mark-failure> + <toolset name="intel-7.1-stdlib-default-linux"/> + <toolset name="intel-7.1-linux"/> + <note author="J. Garland">These are strange runtime failures for + which there is no obvious explanation. Later versions of the + Intel compiler (eg:8.0) seem to have resolved the issue. + </note> + </mark-failure> + </test> + + <test name="testgreg_wstream"> + <mark-failure> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <toolset name="cw-8.3*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="mingw*"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="*como-4_3_3*"/> + <note author="B. Garst" refid="19,21"/> + </mark-failure> + </test> + + <test name="testdate_input_facet*"> + <mark-failure> + <toolset name="cw-9.4"/> + <toolset name="cw-9.5*"/> + <note author="J. Garland"> + For some reason Code Warrior has difficulty compiling some of the + input code. This may be related to limitations of locale handling, + but it's unclear at this time (2005-May-21). + </note> + </mark-failure> + </test> + + + <test name="testlocal_time_facet"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="*como-4_3_3*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testlocal_time"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="*como-4_3_3*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testlocal_time_iterator"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="*como-4_3_3*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testlocal_time_period"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="*como-4_3_3*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testclocks"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-6.5"/> + <note author="J. Garland"> + Some compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testlocal_time_input_facet"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="*como-4_3_3*"/> + <toolset name="cw-8.3*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + + <test name="testtime_input_facet"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="*como-4_3_3*"/> + <toolset name="cw-8.3*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testcustom_time_zone"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8.1"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="*como-4_3_3*"/> + <toolset name="msvc-6.5"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testposix_time_zone"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8.1"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="msvc-6.5"/> + <note author="J. Garland"> + Some older compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testtz_database"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8.1"/> + <toolset name="*como-4_3_3*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="msvc-6.5"/> + <note author="J. Garland"> + Some compilers are confused by the template code here. + These are new features to date-time in 1.33 and there is no + plan to backport to these non-compliant compilers. + </note> + </mark-failure> + </test> + + <test name="testtime_wstream"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="mingw*"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="*como-4_3_3*"/> + <toolset name="hp_cxx-65*"/> + <note author="B. Garst" refid="19,21,22"/> + </mark-failure> + </test> + + <test name="testtime_wstream_std_config"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="mingw*"/> + <toolset name="*como-4_3_3*"/> + <toolset name="hp_cxx-65*"/> + <note author="B. Garst" refid="19,21,22"/> + </mark-failure> + </test> + <test name="testdate_facet_new"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + These compilers are unfortunately able to correctly compile the + new format-based input-output code for date time. Suitable, but + less flexible, alternatives are available on these compilers. + </note> + </mark-failure> + </test> + <test name="testdate_facet_new_dll"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + These compilers are unfortunately able to correctly compile the + new format-based input-output code for date time. Suitable, but + less flexible, alternatives are available on these compilers. + </note> + </mark-failure> + </test> + <test name="testtime_facet"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="J. Garland"> + These compilers are unfortunately able to correctly compile the + new format-based input-output code for date time. Suitable, but + less flexible, alternatives are available on these compilers. + </note> + </mark-failure> + </test> + + <test name="testwcustom_time_zone"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <note author="J. Garland"> + These compilers are unfortunately able to correctly compile the + new format-based input-output code for date time. Suitable, but + less flexible, alternatives are available on these compilers. + </note> + </mark-failure> + </test> + + <test name="testwposix_time_zone"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <note author="J. Garland"> + These compilers are unfortunately able to correctly compile the + new format-based input-output code for date time. Suitable, but + less flexible, alternatives are available on these compilers. + </note> + </mark-failure> + </test> + + <test name="testfacet"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="msvc-6.5"/> + <toolset name="mingw*"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="B. Garst" refid="18,19"/> + </mark-failure> + </test> + <test name="testfacet_dll"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="msvc-6.5"/> + <toolset name="mingw*"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="*como-4_3_3*"/> + <note author="B. Garst" refid="18,19"/> + </mark-failure> + </test> + <test name="testgreg_year_dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + </mark-failure> + </test> + <test name="testparse_date"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="B. Garst" refid="18,20"/> + </mark-failure> + </test> + <test name="testmicrosec_time_clock"> + <mark-failure> + <toolset name="intel-7.1-stdlib-default-linux"/> + <toolset name="*como-4_3_3*"/> + <toolset name="intel-7.1-linux"/> + <note author="B. Garst" refid="22"/> + </mark-failure> + </test> + <test name="testmicrosec_time_clock"> + <mark-failure> + <toolset name="borland-5.6.4"/> + <toolset name="borland-5.8.2"/> + <note author="J. Garland"> + There is apparently a bug in Borland library + such that std::local_time and std::gmtime are + returning a time that's 1 hour ahead GetSystemTimeAsFileTime + during DST. This is a rather serious problem in that + some of the date-time clock interfaces will give the wrong + current time. + </note> + </mark-failure> + </test> + <test name="teststreams"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-3.1-darwin"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="mingw-3*"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="mingw"/> + <toolset name="*como-4_3_3*"/> + <note author="B. Garst" refid="18,19,20"/> + </mark-failure> + </test> + <test name="testdate_dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <note author="J. Garland" date="30 Jan 2004" id="24"/> + </mark-failure> + </test> + <test name="testgreg_day_dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <note author="J. Garland" date="30 Jan 2004" id="24"/> + </mark-failure> + </test> + <test name="*_dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <note author="J. Garland" date="30 Jan 2004" id="24"/> + </mark-failure> + </test> + + <mark-expected-failures> + <test name="testdate_dll"/> + <test name="testdate_duration_dll"/> + <test name="testdate_input_facet_dll"/> + <test name="testdate_iterator_dll"/> + <test name="testfacet_dll"/> + <test name="testformatters_dll"/> + <test name="testgenerators_dll"/> + <test name="testgreg_durations_dll"/> + <test name="testperiod_dll"/> + <toolset name="cw-8.3*"/> + <note author="R. Rivera" refid="25"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testdate_facet_new"/> + <test name="testdate_facet_new_dll"/> + <test name="testdate_input_facet"/> + <test name="testdate_input_facet_dll"/> + <test name="testdate_facet"/> + <test name="testdate_facet_dll"/> + <test name="testtime_facet"/> + <test name="testtime_input_facet"/> + <toolset name="sun-5.8"/> + <note author="J. Garland"> + The sun 5.8 compiler and standard library have a problem with + the classic facet which causes some of the io tests for date-time + to fail. Overall this should not affect most uses of the library. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testdate_input_facet"/> + <test name="testdate_input_facet_dll"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="J. Garland"> + The STLPort standard library has issues with some custom + facet settings causing an unexplained failure in these + facet tests. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testdate_facet_new"/> + <test name="testdate_facet_new_dll"/> + <test name="testtime_facet"/> + <toolset name="msvc-7.1_stlport4"/> + <toolset name="msvc-8.0_stlport5"/> + <note author="J. Garland"> + The STLPort standard library has issues with the handling + of the classic facet which causes some fo the i/o tests + for date-time to fail. Overall this should not affect + most uses of the library. + </note> + </mark-expected-failures> + + + <mark-expected-failures> + <test name="testgreg_wstream"/> + <test name="testtime_facet"/> + <test name="testtime_input_facet"/> + <test name="testtime_wstream"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="J. Garland"> + MSVC 7.1 with its standard library passes all date-time tests. + For some reason when paired with stlport a few widestream + io tests do not format output correctly. Overall this should + not affect most uses of the library. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testlocal_time_input_facet"/> + <test name="testtime_input_facet"/> + <toolset name="cw-9.4"/> + <toolset name="cw-9.5*"/> + <note author="J. Garland"> + Although these tests compile, the execution aborts for + an unknown reason. Note that sometimes the excution is + ok on cw-9_4. This may be fixable if someone + can track down the source of the problem. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testlocal_time"/> + <test name="testlocal_time_input_facet"/> + <test name="testtime_input_facet"/> + <toolset name="msvc-8.0*"/> + <note author="J. Garland"> + These tests are failing with the beta2 version of VC_8. At least + one of them is directly a result of the new VC_8 standard library + restricting the year value in a tm struct to be positive (that is + greater than year 1900). This is a change from VC7_1 and Microsoft + is considering removing this restriction. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testtime_serialize*"/> + <test name="testgreg_serialize*"/> + <toolset name="vacpp"/> + <note author="J. Garland"> + These tests are for serialization which has been marked as unusable. + The issue was specifically noted on + AIX version : 5.2.0.41 using IBM XL Version 8.0.0.0. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testfacet"/> + <test name="testfacet_dll"/> + <toolset name="hp_cxx*"/> + <toolset name="acc*"/> + <note author="Markus Schoepflin"> + The failure is caused by a standard library bug. It doesn't + support user defined facets which are not default + constructible. This has been reported to the compiler vendor. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testdate_input_facet_dll"/> + <test name="testdate_input_facet"/> + <test name="testtime_input_facet"/> + <test name="testlocal_time_input_facet"/> + <toolset name="acc*"/> + <note author="Jeff Garland"> + These tests rely on the ability of an std::map to be + instantiated on an incomplete type. The Rogue Wave + version 2.2 and higher does not allow this. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testtime_wstream"/> + <toolset name="hp_cxx-65*"/> + <note author="Jeff Garland"> + The failure is caused by a standard library bug. It doesn't + support user defined facets which are not default + constructible. This has been reported to the compiler vendor. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testgreg_wstream"/> + <test name="testparse_date"/> + <test name="teststreams"/> + <toolset name="hp_cxx*"/> + <note author="Markus Schoepflin"> + The failure is caused by a standard library bug. The end-of-stream + istream iterator can only be constructed when the istream iterator + has been instantiated with char as the character type. This has + been reported to the compiler vendor. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testfacet"/> + <test name="testfacet_dll"/> + <test name="testgreg_wstream"/> + <test name="teststreams"/> + <test name="testtime_wstream"/> + <test name="testwcustom_time_zone"/> + <test name="testwposix_time_zone"/> + <toolset name="qcc-3.3.5_gpp"/> + <note author="Jim Douglas" date="12 Feb 06" refid="36"/> + </mark-expected-failures> + + </library> + + + <!-- dynamic_bitset --> + <library name="dynamic_bitset"> + <test name="dyn_bitset_unit_tests1"> + <mark-failure> + <toolset name="msvc-6.5_stlport4"/> + <note author="Gennaro Prota" refid="37" /> + </mark-failure> + </test> + <test name="dyn_bitset_unit_tests2"> + <mark-failure> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Roland Schwarz"> + The exact reason of this (linker related) bug is unresearched. The test passes + on some environments. The test was found to fail on a platform whit a german + version of the compiler. + </note> + </mark-failure> + </test> + <test name="dyn_bitset_unit_tests4"> + <mark-failure> + <toolset name="cw-9.3"/> + <note author="Aleksey Gurtovoy" refid="2"/> + </mark-failure> + <mark-failure> + <toolset name="cw-9.3-darwin"/> + <note author="Douglas Gregor" refid="2"/> + </mark-failure> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="Douglas Gregor" refid="2"/> + </mark-failure> + </test> + </library> + + + <!-- filesystem --> + <library name="filesystem"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <note author="Beman Dawes"> + This compiler does not support enable_if, which is needed by the + Boost.System library on which Boost.Filesystem depends. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="intel-7.1-linux"/> + <toolset name="intel-7.1-stdlib-default-linux"/> + <note author="Aleksey Gurtovoy"> + Due to standard library bugs this configuration is not supported by + the most recent version of the library. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="cw-8.3"/> + <note author="Beman Dawes"> + Due to standard library bugs, this version is not supported. + More recent version of the library should work OK. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="msvc-8.0~wm5~stlport5.1"/> + <note author="Beman Dawes"> + Due to lack of C library featues, this toolset is not supported. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="*"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <note author="Beman Dawes"> + The library works well with versions of this compiler 5.9 and later + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="fstream_test"/> + <toolset name="msvc-6.5*"/> + <note author="Beman Dawes"> + fstream for this compiler has serious problems and is not supported + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="operations_test_dll"/> + <test name="path_test_dll"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.2_mingw"/> + <note author="Beman Dawes" refid="35"/> <!-- dll's don't work - use static --> + </mark-expected-failures> + <mark-expected-failures> + <test name="operations_test"/> + <test name="operations_test_dll"/> + <toolset name="msvc-6.5*"/> + <note author="Beman Dawes" refid="31"/> <!-- esoteric features don't work --> + </mark-expected-failures> + <mark-expected-failures> + <test name="mbcopy"/> + <test name="mbpath"/> + <test name="wide_test"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="gcc-mingw-3.4.5"/> + <toolset name="gcc-mingw-3.4.2"/> + <toolset name="gcc-cygwin-3.4.4"/> + <note author="Beman Dawes" refid="19"/> <!-- no wchar_t, wstring support --> + </mark-expected-failures> + <mark-expected-failures> + <test name="mbcopy"/> + <test name="mbpath"/> + <test name="wide_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3"/> + <toolset name="dmc-8_4_7*"/> + <note author="Beman Dawes"> + The library does not support wide paths on this compiler because + it does not support SFINAE. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="mbcopy"/> + <test name="mbpath"/> + <test name="wide_test"/> + <toolset name="qcc-3.3.5_gpp"/> + <note author="Jim Douglas" refid="36"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="mbcopy"/> + <test name="wide_test"/> + <toolset name="sun-5.8"/> + <note author="John Maddock"> + These failures are reported to be fixed in Sun's + next compiler release. + </note> + </mark-expected-failures> + </library> + + <!-- foreach --> + <library name="foreach"> + <mark-unusable> + <toolset name="dmc*"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="Eric Niebler"> + This compiler does not support the Boost.Range + library, on which Boost.Foreach depends. + </note> + </mark-unusable> + + <mark-expected-failures> + <test name="rvalue_const"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3_3-darwin"/> + <toolset name="intel-linux"/> + <toolset name="vacpp"/> + <toolset name="cw-8.3"/> + <toolset name="cw-9.4"/> + <toolset name="cw-9.5-darwin"/> + <toolset name="sunpro*"/> + <toolset name="mingw"/> + <toolset name="hp_cxx*"/> + <toolset name="intel-win32-8_1"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <toolset name="pathscale*"/> + <note author="Eric Niebler"> + This compiler does not support detection of + const rvalues. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="rvalue_const_r"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3_3-darwin"/> + <toolset name="intel-linux"/> + <toolset name="vacpp"/> + <toolset name="cw-8.3"/> + <toolset name="cw-9.4"/> + <toolset name="cw-9.5-darwin"/> + <toolset name="sunpro*"/> + <toolset name="mingw"/> + <toolset name="hp_cxx*"/> + <toolset name="intel-win32-8_1"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <toolset name="pathscale*"/> + <note author="Eric Niebler"> + This compiler does not support detection of + const rvalues. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="rvalue_nonconst"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="hp_cxx*"/> + <toolset name="sunpro*"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="Eric Niebler"> + This compiler does not support detection of + rvalues. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="rvalue_nonconst_r"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="hp_cxx*"/> + <toolset name="sunpro*"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="Eric Niebler"> + This compiler does not support detection of + rvalues. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="dependent_type"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="hp_cxx-65*"/> + <note author="Eric Niebler"> + These compilers cannot handle BOOST_FOREACH + in a template, where the collection type + depends on a template parameter. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="user_defined"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <note author="Eric Niebler"> + This failure is because the Boost.Range extension + mechanism is broken on these compilers. It requires + ADL which these compilers do not support. + </note> + </mark-expected-failures> + </library> + + <!-- format --> + <library name="format"> + <mark-unusable> + <toolset name="iw-7_1*"/> + <note author="Aleksey Gurtovoy"> + The failure is caused by a standard library bug: the + iostream components fail to handle <code>ios::internal</code> + flag. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + <mark-expected-failures> + <test name="format_test2"/> + <test name="format_test3"/> + <toolset name="hp_cxx-65*"/> + <toolset name="acc*"/> + <note author="Markus Schoepflin" refid="33"/> + </mark-expected-failures> + </library> + + <!-- function_types --> + <library name="function_types"> + <mark-expected-failures> + <test name="member_ccs"/> + <test name="member_ccs_exact"/> + <toolset name="*"/> + <note author="Tobias Schwinger"> + Not all compilers/platforms implement nonstandard calling conventions. + <hr/> + With GCC/x86 this failure reflects + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 . + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="nonmember_ccs"/> + <test name="nonmember_ccs_exact"/> + <toolset name="*"/> + <note author="Tobias Schwinger"> + Not all compilers/platforms implement nonstandard calling conventions. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="interface_example"/> + <toolset name="msvc-7.1*"/> + <note author="Tobias Schwinger"> + Overload selection does not work in some assignment contexts with this compiler. + </note> + </mark-expected-failures> + </library> + + <!-- functional/hash --> + <library name="functional/hash"> + <mark-expected-failures> + <test name="hash_value_array_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <note author="Daniel James"> + hash_value is not overloaded for arrays for older versions + of Visual C++. There is a work around so that + boost::hash<T[N]>, boost::hash_combine and boost::hash_range + work. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="hash_function_pointer_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <note refid="2" author="Daniel James"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="hash_function_pointer_test"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="Daniel James"> + On these compilers the wrong overload of hash_value is called + when the argument is a hash function pointer. So calling + hash_value doesn't work but boost::hash does work (and it's + recommended that user never call hash_value directly so this + shouldn't be a problem). + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="hash_long_double_test"/> + <toolset name="gcc-3.4.3_sunos"/> + <toolset name="*pa_risc"/> + <note author="Daniel James"> + This platform has poor support for <code>long double</code> so + the hash function perform poorly for values out of the range + of <code>double</code> or if they differ at a greater precision + that <code>double</code> is capable of representing. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="point" /> + <test name="books" /> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <note author="Daniel James"> + These examples only work on compilers with support for ADL. + It is possible to work around this, but I wanted to keep the + example code as clean as possible. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="point" /> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Daniel James"> + It appears that Borland doesn't find friend functions defined + in a class by ADL. This is easily fixed but this example is + meant to show the typical way of customising boost::hash, not + the portable way. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="hash_global_namespace_test" /> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Daniel James"> + The test demonstrates a Borland bug - functions that aren't + in a namespace don't appear to be found by ADL. + </note> + </mark-expected-failures> + </library> + + + + <!-- fusion --> + <library name="fusion"> + <mark-unusable> + <toolset name="gcc-2.95.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5*"/> + <toolset name="cw-8.3"/> + <toolset name="dmc*"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="Joel de Guzman"> + The compiler does not support features that are + essential for the library. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="fused"/> + <test name="fused_function_object"/> + <test name="fused_procedure"/> + <test name="make_fused"/> + <test name="make_fused_function_object"/> + <test name="make_fused_procedure"/> + <toolset name="acc"/> + <note author="Tobias Schwinger"> + Those failures are due to not quite const-correct overload + resolution. The complaints from the test suite should rarely + matter in practice - the corresponding components are basically + usable. With aCC6, when compiled in strict ansi mode, the test + succeeds. + </note> + </mark-expected-failures> + </library> + + <!-- gil --> + <library name="gil"> + <mark-expected-failures> + <test name="pixel"/> + <toolset name="acc"/> + <note author="Boris Gubenko" refid="46"/> + </mark-expected-failures> + </library> + + + <!-- graph --> + <library name="graph"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="msvc-6.5*"/> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + <mark-expected-failures> + <test name="adj_matrix_cc"/> + <test name="biconnected_components_test"/> + <test name="bidir_remove_edge"/> + <test name="bfs_cc"/> + <test name="bundled_properties"/> + <test name="csr_graph_test"/> + <test name="dfs_cc"/> + <test name="dijkstra_cc"/> + <test name="dominator_tree_test"/> + <test name="floyd_warshall_test"/> + <test name="gursoy_atun_layout_test"/> + <test name="graphviz_test"/> + <test name="matching_test"/> + <test name="serialize"/> + <test name="subgraph"/> + <test name="transitive_closure_test"/> + <test name="vector_graph_cc"/> + <toolset name="msvc-7.0"/> + <note refid="3" author="Doug Gregor"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="graphviz_test"/> + <toolset name="vc-8_0"/> + <toolset name="msvc-8_0"/> + <toolset name="intel-vc71-win-9.1"/> + <note refid="1" author="Doug Gregor"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="serialize"/> + <toolset name="sun-5.8"/> + <note refid="2" author="Doug Gregor"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="betweenness_centrality_test"/> + <toolset name="iw-7_1-vc6*"/> + <toolset name="msvc-7.0"/> + <note refid="3" author="Aleksey Gurtovoy"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="graphviz_test"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="como-4_3_3-vc7_1"/> + <toolset name="cw-8.3"/> + <toolset name="cw-9.3-darwin"/> + <toolset name="cw-9.4-darwin"/> + <toolset name="cw-9.5-darwin"/> + <toolset name="iw-7_1-vc6"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <note refid="3" author="Doug Gregor"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="csr_graph_test"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note refid="28" author="Vladimir Prus"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bundled_properties"/> + <toolset name="qcc-3.3*"/> + <note author="Jim Douglas" date="18 Feb 06" refid="27"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="csr_graph_test"/> + <toolset name="msvc-8.0"/> + <toolset name="msvc-8.0_64"/> + <toolset name="msvc-8.0_x86_64"/> + <toolset name="msvc-9.0"/> + <note author="Doug Gregor"> + This failure is due to a problem with partial ordering + of class template partial specializations. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="dijkstra_heap_performance"/> + <test name="layout_test"/> + <test name="relaxed_heap_test"/> + <toolset name="msvc-7.0"/> + <note author="Vladimir Prus"> + The test fails due to compile error in relaxed_heap.hpp. + The compile error is likely caused by a compiler bug. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="graphviz_test"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="Vladimir Prus"> + The test fails from completely unknown reason -- it might + be compiler bug, or compiler misconfiguration or testing + system bug. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="kolmogorov_max_flow_test"/> + <test name="max_flow_test"/> + <toolset name="hp_cxx-*"/> + <toolset name="acc*"/> + <note author="Markus Schoepflin" refid="45"/> + </mark-expected-failures> + </library> + + <!-- interprocess--> + <library name="interprocess"> + <mark-unusable> + <toolset name="borland-5.*"/> + <toolset name="sun-5.*"/> + <toolset name="msvc-6.5*"/> + <toolset name="cw-9.*"/> + <toolset name="gcc-2.95*"/> + <toolset name="gcc-3.0*"/> + <toolset name="gcc-3.1*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3.3*"/> + <toolset name="mipspro"/> + <toolset name="acc*"/> + <toolset name="msvc-8.0~wm5*"/> + <toolset name="vacpp*"/> + <toolset name="pathscale*"/> + <toolset name="intel-linux-8.*"/> + <toolset name="gcc-3.4.2_hpux_pa_risc"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Ion Gaztañaga"> + The compiler does not support features that are essential for the library. + </note> + </mark-unusable> + </library> + + <!-- intrusive--> + <library name="intrusive"> + <mark-unusable> + <toolset name="borland-5.*"/> + <toolset name="sun-5.*"/> + <toolset name="msvc-6.5*"/> + <toolset name="cw-9.*"/> + <toolset name="gcc-2.95*"/> + <toolset name="gcc-3.0*"/> + <toolset name="gcc-3.1*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3.3*"/> + <toolset name="mipspro"/> + <toolset name="vacpp*"/> + <toolset name="pathscale*"/> + <toolset name="intel-linux-8.*"/> + <note author="Ion Gaztañaga"> + The compiler does not support features that are essential for the library. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="doc_offset_ptr" /> + <toolset name="acc"/> + <toolset name="gcc-3.4.2_hpux_pa_risc"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Ion Gaztañaga"> + The compiler is not supported by Interprocess. + </note> + </mark-expected-failures> + </library> + + <!-- io--> + <library name="io"> + <mark-expected-failures> + <test name="ios_state_unit_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="iw-7_1-vc6*"/> + <toolset name="msvc-6.5*"/> + <note refid="4" author="Aleksey Gurtovoy"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="ios_state_test"/> + <test name="ios_state_unit_test"/> + <toolset name="hp_cxx-65*"/> + <note refid="34" author="Markus Schoepflin"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="ios_state_unit_test"/> + <toolset name="gcc-2.95.3-*"/> + <note refid="3" author="Doug Gregor"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="ios_state_unit_test"/> + <toolset name="gcc-4.1.0*"/> + <note author="John Maddock"> + This is gcc bug 26526, and is fixed in later releases. + </note> + </mark-expected-failures> + </library> + + <!-- iostreams --> + <library name="iostreams"> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="dmc-8_43-stlport-4_5_3"/> + <note author="Jonathan Turkanis" refid="17"/> + </mark-unusable> + <mark-expected-failures> + <!-- STLPort bug --> + <test name="seekable_file_test"/> + <toolset name="borland-5.6*"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <toolset name="*como-4_3_3*"/> + <toolset name="*stlport"/> + <note author="Jonathan Turkanis" refid="4"/> + </mark-expected-failures> + <mark-expected-failures> + <!-- Insufficient wide character support --> + <test name="code_converter_test"/> + <test name="wide_stream_test"/> + <toolset name="gcc-2.95.3-linux"/> + <!-- Must enumerate MinGW's since some use STLPort --> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="mingw-3_4_4"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="*cygwin*"/> + <toolset name="gcc-3.3.6-osf1"/> + <note author="Jonathan Turkanis" refid="19"/> + </mark-expected-failures> + <mark-expected-failures> + <!-- Insufficient wide character support --> + <test name="code_converter_test"/> + <test name="wide_stream_test"/> + <toolset name="qcc-3.3.5*gpp"/> + <note author="Jim Douglas" date="12 Feb 06" refid="36"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="bzip2_test"/> + <test name="file_descriptor_test"/> + <test name="mapped_file_test"/> + <toolset name="*como-4_3_3*"/> + <note author="Jonathan Turkanis"> + compiler can't compile "windows.h" in strict mode + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="gzip_test"/> + <test name="zlib_test"/> + <toolset name="como-4_3_3-vc7_1"/> + <note author="Jonathan Turkanis"> + The failure reflects a problem with the build system: the zlib + object files are generated in the wrong directory. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="stdio_filter_test"/> + <toolset name="*como-4_3_3*"/> + <note author="Jonathan Turkanis" refid="0"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="direct_adapter_test"/> + <test name="gzip_test"/> + <toolset name="gcc-2.95.3-linux"/> + <note author="Jonathan Turkanis" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="file_descriptor_test"/> + <toolset name="gcc-3_4_4-cygwin"/> + <note author="Jonathan Turkanis" refid="29"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="finite_state_filter_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="gcc-2.95.3*"/> + <note author="Jonathan Turkanis" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="finite_state_filter_test"/> + <toolset name="cw-9.4"/> + <note author="Jonathan Turkanis" date="20 Dec 06"> + I'm not sure whether CodeWarrior is correct to report that the member + in question is inaccessible; however, when the member is made public + an internal error occur that I have not been able to fix, so for + now the question is moot. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="mapped_file_test"/> + <toolset name="qcc-3.3*"/> + <note author="Jim Douglas" date="19 Feb 06"> + Memory mapped files are not supported in QNX Neutrino version 6.3.0. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="compose_test"/> + <toolset name="borland-5.6*"/> + <note author="Jonathan Turkanis"> + Fails to compile on some installations but not others; may + depend on which compiler updates have been installed + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="compose_test"/> + <toolset name="msvc-6.5_stlport4"/> + <note author="Jonathan Turkanis"> + These six tests pass individually but cause a compiler stack overflow + when compiled as a group + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="compose_test"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Boris Gubenko"> + On this platform, linking this test takes longer than 10 minutes + which is a time limit specified for bjam. When linked manually, + the test succeeds. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="bzip2_test"/> + <toolset name="gcc-3.4.3_sunos"/> + <note author="Caleb Epstein"> + No bzip2 support on the testing machine and no way to + disable this test with BBv2 at present. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="file_descriptor_test"/> + <toolset name="gcc-cygwin-3.4.4"/> + <note author="Vladimir Prus"> + The test fails at runtime for unknown reasons. + </note> + </mark-expected-failures> + + </library> + + <!-- lambda --> + <library name="lambda"> + <mark-unusable> + <toolset name="msvc-6.5*"/> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-7.0"/> + <toolset name="sunpro-5_3-sunos"/> + <note refid="17"> + </note> + </mark-unusable> + <mark-expected-failures> + <test name="bll_and_function"/> + <toolset name="msvc-8.0"/> + <note author="Aleksey Gurtovoy" refid="6"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="member_pointer_test"/> + <toolset name="gcc-2.95.3-*"/> + <note author="Doug Gregor" refid="3"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="control_structures"/> + <toolset name="gcc-4.2.1*"/> + <note author="Boris Gubenko" refid="42"/> + </mark-expected-failures> + </library> + + <!-- logic --> + <library name="logic"> + <test name="tribool_io_test"> + <mark-failure> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <note author="Douglas Gregor" refid="4"/> + </mark-failure> + </test> + </library> + + + <!-- MPL --> + <library name="mpl"> + + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <note author="Aleksey Gurtovoy" date="10 Jul 2005"> + The compiler is not supported by the library due to an + utterly broken templates support. + </note> + </mark-unusable> + + <mark-expected-failures> + <test name="as_sequence"/> + <test name="is_sequence"/> + <test name="has_xxx"/> + <test name="no_has_xxx"/> + <test name="single_view"/> + <toolset name="cw-8.3*"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004"> + This failure is caused by a deficient SFINAE implementation; the bug + was fixed in the next major compiler version (CodeWarrior 9.x). + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="is_sequence"/> + <test name="as_sequence"/> + <test name="has_xxx"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3*"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004"> + This failure is caused by a deficient SFINAE implementation. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="arithmetic"/> + <test name="at"/> + <test name="back"/> + <test name="bitwise"/> + <test name="contains"/> + <test name="copy"/> + <test name="count"/> + <test name="count_if"/> + <test name="deque"/> + <test name="distance"/> + <test name="find_if"/> + <test name="for_each"/> + <test name="front"/> + <test name="insert"/> + <test name="insert_range"/> + <test name="joint_view"/> + <test name="numeric_ops"/> + <test name="pair_view"/> + <test name="partition"/> + <test name="range_c"/> + <test name="remove"/> + <test name="reverse"/> + <test name="sort"/> + <test name="stable_partition"/> + <test name="transform"/> + <test name="unpack_args"/> + <test name="vector"/> + <test name="vector_c"/> + + <toolset name="borland-5.8.1"/> + + <note author="A. Meredith" date="17 May 2006"> + This failure is caused by a problem with recursive templates and default template parameters, fixed in Update 2. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="apply"/> + <test name="multiset"/> + <test name="zip_view"/> + + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004" refid="26"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="assert"/> + <test name="at"/> + <test name="back"/> + <test name="front"/> + <test name="has_xxx"/> + <test name="multiset"/> + <test name="no_has_xxx"/> + <test name="zip_view"/> + + <toolset name="mipspro"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004" refid="26"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="quote"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <toolset name="mipspro"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004"> + This failure is caused by a lack of compiler support for template template + parameters. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="map"/> + <test name="set"/> + <test name="set_c"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="mipspro"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004"> + This is an advanced functionality that hasn't been ported to the deficient + compilers (yet). Patches are welcome! + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="map"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy" date="17 Sep 2004"> + This is an advanced functionality that hasn't been ported to the deficient + compilers (yet). Patches are welcome! + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="apply"/> + <toolset name="gcc-4.1.*"/> + <note author="Caleb Epstein"> + This is a regression in the gcc 4.1 series that has been + fixed in gcc 4.2.0. See <a + href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28088">bug + #28088</a> for details. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="vector_c"/> + <toolset name="sun-5.8"/> + <note author="John Maddock"> + This is reported to be fixed in the next Sun + compiler release. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="copy"/> + <toolset name="acc"/> + <note refid="38" author="Boris Gubenko"/> + </mark-expected-failures> + + </library> + + <!-- multi_array --> + <library name="multi_array"> + <mark-unusable> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith" date="30 Jan 2004"> + <p> + This library has never worked [on Borland 5.5.1 and 5.6.4], and the only tests + that 'pass' are compile-fail tests failing for the wrong reasons! + </p> + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <note author="Douglas Gregor" refid="3"/> + </mark-unusable> + <!-- RG: testing usability <mark-unusable> + <toolset name="gcc-2.95.3*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="Ronald Garcia" date="08 Jan 2006"> + <p> + These compiler/standard library combinations don't + support enable_if. + </p> + </note> + </mark-unusable> --> + <test name="constructors"> + <mark-failure> + <toolset name="msvc-6.5"/> + <note author="Ronald Garcia" date="13 Jul 2004"> + Known error in MSVC. see +<a href="http://boost-consulting.com/boost/libs/multi_index/doc/compiler_specifics.html#msvc_60"> +http://boost-consulting.com/boost/libs/multi_index/doc/compiler_specifics.html#msvc_60</a> +for more information. + </note> + </mark-failure> + </test> + <mark-expected-failures> + <test name="assign_to_array"/> + <toolset name="gcc-2.95.3*"/> + <note author="Aleksey Gurtovoy" date="21 Sep 2004" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="assign"/> + <test name="compare"/> + <test name="concept_checks"/> + <test name="constructors"/> + <test name="iterators"/> + <test name="resize"/> + <test name="stl_interaction"/> + <toolset name="gcc-2.95.3*"/> + <note author="Doug Gregor" date="23 Jun 2005" refid="3"/> + </mark-expected-failures> + </library> + + + <!-- multi_index --> + <library name="multi_index"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <note author="J. López" date="05 Jul 2004" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5.8*"/> + <note author="Alisdair Meredith" date="26 May 2006"/> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith" date="27 Feb 2007"/> + </mark-unusable> + <mark-unusable> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="J. López" date="09 Jul 2004" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="*como-4_3_3-msvc"/> + <note author="J. López" date="30 Jul 2004"> + The VC++ 6.0 backend runs out of internal resources while + trying to process the Comeau output for this library; + Comeau Computing has been asked about a solution. + On the other hand, Comeau 4.3.3 with VC++ 7.0 backend works + fine. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sunpro-5_8u1-sunos"/> + <note author="J. López" date="22 Apr 2005" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="dmc-8_43-stlport-4_5_3"/> + <toolset name="dmc-8_44b-stlport-4_5_3"/> + <toolset name="dmc-8_47-stlport-4_5_3"/> + <note author="J. López" date="03 Jun 2005" refid="17"/> + </mark-unusable> + <mark-expected-failures> + <test name="test_serialization"/> + <toolset name="msvc-stlport"/> + <toolset name="msvc-6.5_stlport4"/> + <note author="J. López" date="10 Jan 2005"> + This error shows when using the dynamic version of the STLport + library. The problem is reportedly fixed in STLport 5.0 (in beta + stage as of this writing.) + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_serialization"/> + <toolset name="hp_cxx-65*"/> + <toolset name="hp_cxx-71*"/> + <note author="J. López" date="16 Mar 2006"> + This test fails due to limitations of the template + instantiation model used in the testing environment + (-timplicit_local) resulting in erroneous duplication of some + function-static variables. The test passes with other template + instantiation models. + </note> + </mark-expected-failures> + </library> + + + <!-- optional --> + <library name="optional"> + <mark-expected-failures> + <test name="optional_test_ref"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy" refid="3"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="optional_test_ref"/> + <toolset name="darwin-4.0.1"/> + <toolset name="gcc-mingw-3.4.5"/> + <toolset name="gcc-3.4.2_hpux_pa_risc"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <toolset name="gcc-4.2.*"/> + <toolset name="gcc-4.1.2_sunos_i86pc"/> + <note author="Fernando Cacciola" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="optional_test_ref_fail1"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Fernando Cacciola" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="optional_test_fail3a"/> + <toolset name="gcc-3_3-darwin"/> + <note author="Fernando Cacciola" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="optional_test_inplace_fail2"/> + <toolset name="gcc-3_3-darwin"/> + <note author="Fernando Cacciola" refid="2"/> + </mark-expected-failures> + </library> + + <library name="pool"> + <mark-unusable> + <toolset name="gcc-2.95.3-*"/> + <note author="Doug Gregor" refid="2"/> + </mark-unusable> + </library> + + <!-- preprocessor --> + <library name="preprocessor"> + <mark-expected-failures> + <test name="seq"/> + <toolset name="cw-8.3"/> + <note author="Paul Mensonides" refid="2"/> + </mark-expected-failures> + </library> + + <!-- rational --> + <library name="rational"> + <mark-expected-failures> + <test name="rational_test"/> + <toolset name="sun-5.8"/> + <note author="J. López" date="19 Oct 2006"> + The test is exposing the following known error of Sun Studio 11: + overload resolution fails if + a) some class has a conversion operator to a reference to + a built-in type, and + b) overload resolution involves a user-defined operator as well + as a built-in operator, and + c) the built-in operator takes the result of the conversion + mentioned in a) as an operand. + A fix will be reportedly included in patch no 6 of Sun Studio 11. + </note> + </mark-expected-failures> + </library> + + <!-- serialization --> + <library name="serialization"> + <mark-unusable> + <toolset name="vacpp*" /> + <toolset name="mipspro*" /> + <toolset name="dmc*" /> + <toolset name="sunpro*" /> + <note author="Robert Ramey" date="13 Jul 2004" refid="9,17,18"/> + </mark-unusable> + <mark-unusable> + <toolset name="gcc-2.95.3-linux"/> + <note author="Robert Ramey" date="12 Feb 05" refid="18,19"/> + </mark-unusable> + + <mark-expected-failures> + <test name="*_warchive"/> + <test name="*_warchive_dll"/> + <test name="test_codecvt_null"/> + <test name="test_utf8_codecvt"/> + <toolset name="mingw*"/> + <toolset name="*mingw*"/> + <toolset name="*cygwin*"/> + <toolset name="gcc-2.95.3-linux"/> + <note author="Robert Ramey,Roland Schwarz" date="16 Feb 07" refid="19"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_void_cast*"/> + <toolset name="msvc-6.5*"/> + <note author="Robert Ramey" date="20 Sep 2004" refid="16,29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="*_warchive"/> + <test name="test_codecvt_null"/> + <test name="test_utf8_codecvt"/> + <toolset name="*como-4_3_3*"/> + <note author="Robert Ramey" date="12 Feb 05" refid="5"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_reset_object_address*"/> + <toolset name="msvc-6.5*"/> + <note author="Robert Ramey" date="12 Feb 05" refid="6,29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_reset_object_address*"/> + <toolset name="msvc-7.0"/> + <note author="J. López" date="20 Dec 2006"> + This error shows when the code has become too complex for the + compiler to handle. The problem has no relationship with the + functionality being tested, which in fact does work for + MSVC++ 7.0. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo"/> + <test name="test_demo_dll"/> + <test name="test_demo_exception"/> + <test name="test_demo_exception_dll"/> + <test name="test_demo_shared_ptr"/> + <test name="test_demo_shared_ptr_dll"/> + <test name="test_demo_xml_save"/> + <test name="test_demo_xml_load"/> + <test name="test_demo_xml_save_dll"/> + <test name="test_demo_xml_load_dll"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Robert Ramey" refid="6"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo_fast_archive"/> + <test name="test_demo_fast_archive_dll"/> + <toolset name="msvc-6.5*"/> + <note author="Robert Ramey" refid="6"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_const"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo_pimpl"/> + <test name="test_demo_pimpl_dll"/> + <test name="test_diamond*"/> + <test name="test_mult_archive_types"/> + <test name="test_mult_archive_types_dll"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Robert Ramey" refid="6"> + msvc 6 compiler failure. The facility being tested conflicts the the + compiler in a fundamental way and cannnot be worked around. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_mi*"/> + <toolset name="msvc-6.5*"/> + <note author="Robert Ramey" refid="6"> + msvc 6 compiler failure. The facility being tested conflicts the the + compiler in a fundamental way and cannnot be worked around. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="*_dll"/> + <toolset name="msvc-stlport"/> + <toolset name="msvc-6.5_stlport4"/> + <note author="Robert Ramey"> + This failure appears when STLPort is built and used as a DLL with msvc 6. + STLPort suggests that the next version of STLPort(5.0) will include a workaround + for this problem. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="*"/> + <toolset name="gcc-2.95.3-stlport*"/> + <note author="Aleksey Gurtovoy"> + The library is believed to work in this configuration <i>if compiled against + Spirit 1.6</i>. The latter is not provided by the particular testing + environment these tests have been run in. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo"/> + <test name="test_demo_dll"/> + <test name="test_demo_exception*"/> + <test name="test_demo_shared_ptr*"/> + <test name="test_demo_xml*"/> + <test name="test_exported*"/> + <test name="test_mi*"/> + <test name="test_mult_archive_types*"/> + <test name="test_no_rtti*"/> + <test name="test_non_default_ctor2*"/> + <test name="test_registered*"/> + <test name="test_shared_ptr*"/> + <test name="test_unregistered*"/> + <toolset name="cw*"/> + <note author="Robert Ramey" refid="29"> + All tests that serialize derived pointers currently fail with Metrowerks compilers. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_no_rtti_*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Aleksey Gurtovoy" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_smart_cast"/> + <toolset name="intel-7.1-linux"/> + <note author="Aleksey Gurtovoy" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="*_dll"/> + <toolset name="cw*"/> + <note author="Doug Gregor" refid="35"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo_fast_archive"/> + <toolset name="cw-8*"/> + <note author="Rene Rivera"> + This is caused by a compiler bug in this particular version, but not present + in version thereafter. The compiler has some difficulties resolving operators + to methods in the archive classes. This can be worked around by calling the + operator directly, and such a work around is already present in library code. + This test demonstrates that this can happen in user code. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_diamond*"/> + <toolset name="cw-8*"/> + <toolset name="cw-9.5-darwin"/> + <note author="Rene Rivera"> + The CW compilers have problems with the static construction idiom used to + implement the type registration in the Boost.Serialization library. In many + cases CW specific work arounds are implemented in the library but this one + is not immediately solvable. There is a user work around possible, please + contact the library developers on the Boost list for information on the + work around if needed. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_class_info_load_text*"/> + <test name="test_class_info_load_xml_warchive*"/> + <toolset name="cw-9.5-darwin"/> + <note author="Rene Rivera" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_class_info_load_text_warchive_dll"/> + <toolset name="msvc-6.5"/> + <note author="Doug Gregor" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_const_load_fail1"/> + <test name="test_const_load_fail1_nvp"/> + <test name="test_const_load_fail2"/> + <test name="test_const_load_fail2_nvp"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Doug Gregor" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_const_save_fail1"/> + <test name="test_const_save_fail2"/> + <test name="test_const_save_fail3"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <note author="Doug Gregor" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_map_binary_archive_dll"/> + <test name="test_map_text_archive_dll"/> + <test name="test_map_text_warchive_dll"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="Doug Gregor" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_variant_*"/> + <toolset name="hp_cxx-65*"/> + <note author="Markus Schoepflin"> + The variant library is not supported for this compiler version. + Therefore serialization of variants doesn't work. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="*_warchive"/> + <test name="*_warchive_dll"/> + <toolset name="qcc-3.3.5*gpp"/> + <note author="Jim Douglas" date="12 Feb 06" refid="36"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_variant_*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Vladimir Prus"> + The compiler fails with an error supposedly related to std::fpos<>::_Stz from the + <iosfwd> header. It is not known what causes the compiler to instantiate this + field and what causes the instantiation to fail. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo_shared_ptr_dll"/> + <toolset name="qcc-3.3.5_gpp"/> + <note author="J. López" date="21 Dec 2006"> + This failure is caused by an unresearched compiler bug; the + conditions under which the bug manifests itself seem to be + uncommon, however, and the static version of this same test + builds and runs correctly. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_demo_portable_archive"/> + <test name="test_demo_portable_archive_dll"/> + <toolset name="acc*"/> + <toolset name="gcc-3.4.2_hpux_pa_risc"/> + <toolset name="gcc-4.2.1_hpux_ia64"/> + <note author="Boris Gubenko"> + This failure is caused by serialization library bug in the + code visible only on big endian platforms. + </note> + </mark-expected-failures> + + </library> + + + <!-- smart_ptr --> + <library name="smart_ptr"> + <mark-expected-failures> + <test name="shared_ptr_assign_fail"/> + <toolset name="gcc-2.9*"/> + <toolset name="sunpro-5_3-sunos"/> + <note refid="32" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="weak_ptr_test"/> + <toolset name="hp_cxx-71_006_*"/> + <note author="Markus Schoepflin" refid="3"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="auto_ptr_rv_test"/> + <toolset name="gcc-2.9*"/> + <toolset name="borland-5*"/> + <toolset name="cw-8*"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="pointer_to_other_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="shared_ptr_alloc2_test"/> + <toolset name="msvc-6.5*"/> + <note refid="31" author="Peter Dimov"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="shared_ptr_move_test"/> + <toolset name="*"/> + <note refid="40" author="Boris Gubenko"/> + </mark-expected-failures> + </library> + + <!-- spirit --> + <library name="spirit"> + <mark-unusable> + <toolset name="msvc-6.5*"/> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="msvc-7.0"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="sunpro-5_3-sunos"/> + + <note> + <p> + Historically, Spirit supported a lot of compilers, including (to some + extent) poorly conforming compilers such as VC6. Spirit v1.6.x will be + the last release that will support older poorly conforming compilers. + Starting from Spirit v1.8.0, ill conforming compilers will not be + supported. If you are still using one of these older compilers, you can + still use Spirit v1.6.x. + </p> + <p> + The reason why Spirit v1.6.x worked on old non-conforming compilers is + that the authors laboriously took the trouble of searching for + workarounds to make these compilers happy. The process takes a lot of + time and energy, especially when one encounters the dreaded ICE or + "Internal Compiler Error". Sometimes searching for a single workaround + takes days or even weeks. Sometimes, there are no known workarounds. This + stifles progress a lot. And, as the library gets more progressive and + takes on more advanced C++ techniques, the difficulty is escalated to + even new heights. + </p> + <p> + Spirit v1.6.x will still be supported. Maintenance and bug fixes will + still be applied. There will still be active development for the back- + porting of new features introduced in Spirit v1.8.0 (and Spirit 1.9.0) + to lesser able compilers; hopefully, fueled by contributions from the + community. For instance, there is already a working AST tree back-port + for VC6 and VC7 by Peder Holt. + </p> + </note> + </mark-unusable> + <mark-expected-failures> + <test name="action_tests*"/> + <toolset name="iw-7_1-vc6"/> + <note author="Aleksey Gurtovoy" refid="4"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="ast_calc_tests*"/> + <test name="closure_tests*"/> + <test name="multi_pass_compile_tests"/> + <test name="repeat_ast_tests*"/> + <toolset name="intel-8.0-linux"/> + <toolset name="intel-8.1-linux"/> + <note author="Aleksey Gurtovoy"> + This failure is caused by a compiler bug that manifests itself in the + particular environment/hardware configuration the test has been run in. + You may or may not experience this issue in your local setup. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="escape_char_parser_tests*"/> + <toolset name="intel-7.1-linux"/> + <toolset name="intel-7.1-stdlib-default-linux"/> + <note author="Aleksey Gurtovoy" refid="19"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="escape_char_parser_tests*"/> + <toolset name="iw-7_1-vc6*"/> + <note author="Aleksey Gurtovoy" refid="28"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="chset_tests*"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <note author="Aleksey Gurtovoy" refid="28"/> + </mark-expected-failures> + </library> + + <!-- typeof --> + <library name="typeof"> + <mark-unusable> + <toolset name="gcc-2.95.*"/> + <toolset name="sunpro*"/> + <toolset name="borland-5.6.*"/> + <note author="Arkadiy Vertleyb"> + This compiler is not supported. + </note> + </mark-unusable> + <test name="*_native" category="Native compiler support"> + <mark-failure> + <toolset name="acc*"/> + <toolset name="intel-vc71-win*"/> + <toolset name="intel-vc8-win*"/> + <toolset name="como-4_3_3-vc7_1"/> + <toolset name="hp_cxx*"/> + <toolset name="sun-5.*"/> + <toolset name="borland-5*"/> + <toolset name="mipspro*"/> + <note author="Arkadiy Vertleyb"> + Native mode is not supported for this compiler. + </note> + </mark-failure> + </test> + <mark-expected-failures> + <test name="*_emulation"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="cw-8_*"/> + <note author="Arkadiy Vertleyb"> + Emulation mode is not supported for this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="function_native"/> + <test name="template_tpl_native"/> + <test name="function_binding_native"/> + <test name="odr_no_uns"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Arkadiy Vertleyb"> + The feature is not supported by this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="function_native"/> + <toolset name="cw-8_*"/> + <note author="Arkadiy Vertleyb"> + The feature is not supported by this compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="function_binding_emulation"/> + <test name="function_emulation"/> + <test name="function_ptr_from_tpl_emulation"/> + <test name="modifiers_emulation"/> + <test name="nested_typedef_emulation"/> + <toolset name="borland-5.8*"/> + <note author="Peder Holt"> + The feature is not supported by this compiler. + </note> + </mark-expected-failures> + </library> + + <!-- function --> + <library name="function"> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <note author="Douglas Gregor" refid="3"/> + </mark-unusable> + <test name="allocator_test"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="5"/> + </mark-failure> + </test> + <test name="contains_test"> + <mark-failure> + <toolset name="msvc-6.5*"/> + <note refid="3" author="D. Gregor"/> + </mark-failure> + </test> + <test name="function_30"> + <mark-failure> + <toolset name="vacpp"/> + <note refid="16" author="D. Gregor"/> + </mark-failure> + </test> + <test name="function_arith_cxx98"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + <test name="function_ref_cxx98"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + <test name="lambda_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="2"/> + </mark-failure> + </test> + <test name="lib_function_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="2"/> + </mark-failure> + </test> + <test name="mem_fun_cxx98"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="2"/> + </mark-failure> + </test> + <test name="std_bind_cxx98"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + <test name="std_bind_portable"> + <mark-failure> + <toolset name="msvc-6.5"/> + <note author="B. Dawes" refid="5"/> + </mark-failure> + </test> + <test name="sum_avg_cxx98"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + </library> + + + <!-- iterator --> + <library name="iterator"> + <test name="interoperable_fail" category="Corner-case tests"> + <mark-failure> + <toolset name="gcc-3.3*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-2*"/> + <toolset name="gcc"/> + <toolset name="mingw"/> + <toolset name="borland*"/> + <toolset name="cw-8*"/> + <toolset name="qcc-3.3*"/> + <note author="D. Abrahams"> + This failure is caused by a compiler bug. Templated operators + that combine different iterators built with iterator_facade or + iterator_adaptor may be present in an overload set even when those + iterators are not interoperable. The usual result is that error + messages generated by illegal use of these operators will be of + lower quality. + </note> + </mark-failure> + </test> + + <test name="is_convertible_fail" category="Corner-case tests"> + <mark-failure> + <toolset name="gcc-2*"/> + <toolset name="gcc"/> + <toolset name="mingw"/> + <toolset name="borland*"/> + <toolset name="cw-8*"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0*"/> + <note author="D. Abrahams"> + This failure is caused by a compiler bug. + <code>is_convertible<T,U>::value</code> may be true for unrelated + iterators <code>T</code> and <code>U</code> + (including many of the Boost specialized adaptors) which use + <code>enable_if_convertible</code> to restrict the applicability + of converting constructors, even when <code>T</code> is not + convertible to <code>U</code> because instantiating the + conversion will cause a compilation failure. + </note> + </mark-failure> + </test> + + <test name="indirect_iter_member_types" category="Corner-case tests"/> + + <mark-expected-failures> + <test name="indirect_iter_member_types"/> + <test name="pointee"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="D. Abrahams"> + This failure is caused by a compiler bug. The + compiler tends to drop const-ness and as a result + some indirect_iterators will have pointer and + reference members of <code>T*</code> and <code>T&</code> that should + have been <code>T const*</code> and <code>T const&</code>. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="zip_iterator_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Aleksey Gurtovoy" date="19 Sep 2004" refid="26"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="is_lvalue_iterator"/> + <toolset name="acc*"/> + <note author="Boris Gubenko"> + For some currently unknown reason, with aCC, this test can be compiled + only in strict ansi mode. Since on HP-UX/aCC boost testing is done in the + default compilation mode, this test fails to compile on this platform. + </note> + </mark-expected-failures> + + </library> + + + <!-- math --> + <library name="math"> + <mark-unusable> + <toolset name="gcc-2.95.3-*"/> + <note author="Doug Gregor" refid="3"/> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5.9.2"/> + <note author="John Maddock"> + Sadly Borland-5.9.2 has an even harder time compiling this + library than earlier versions did. There are currently too + many issues to stand a chance of porting to this compiler. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="test_traits"/> + <toolset name="gcc-3.3.6"/> + <note author="John Maddock"> + This compiler is not sufficiently conforming to correctly handle these tests. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_tr1_long_double"/> + <toolset name="darwin*"/> + <note author="John Maddock"> + Some versions of the Darwin platform have insufficient long double support + for us to be able to run this test. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_policy_2"/> + <toolset name="gcc-mingw-3.4.5"/> + <note author="John Maddock"> + This test takes too long to build for this compiler and times out. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_traits"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="John Maddock"> + This is a compiler bug: it is unable to use + SFINAE to detect the presence of specific + member functions. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="std_real_concept_check"/> + <test name="test_instantiate1"/> + <test name="test_policy_sf"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note author="John Maddock"> + This is a compiler bug: it is unable to resolve the + overloaded functions. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_binomial_real_concept"/> + <test name="test_ibeta_inv_ab_real_concept"/> + <test name="test_igamma_inva_real_concept"/> + <toolset name="sun-5.9"/> + <toolset name="sun-5.8"/> + <note author="John Maddock"> + This test takes too long to execute and times out. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="dist_binomial_incl_test"/> + <test name="dist_neg_binom_incl_test"/> + <test name="dist_poisson_incl_test"/> + <test name="test_binomial_double"/> + <test name="test_binomial_float"/> + <test name="test_binomial_long_double"/> + <test name="test_binomial_real_concept"/> + <test name="test_negative_binomial_double"/> + <test name="test_negative_binomial_float"/> + <test name="test_negative_binomial_long_double"/> + <test name="test_negative_binomial_real_concept"/> + <test name="test_poisson_double"/> + <test name="test_poisson_float"/> + <test name="test_poisson_long_double"/> + <test name="test_poisson_real_concept"/> + <test name="tools_roots_inc_test"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.7"/> + <note author="John Maddock"> + These tests fail with an internal compiler error: there is no + known workaround at present, except to use Sun-5.9 which does + build this code correctly. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="log1p_expm1_test"/> + <test name="test_bernoulli"/> + <test name="test_beta_dist"/> + <test name="test_binomial_float"/> + <test name="test_binomial_double"/> + <test name="test_binomial_coeff"/> + <test name="test_carlson"/> + <test name="test_cauchy"/> + <test name="test_cbrt"/> + <test name="test_chi_squared"/> + <test name="test_classify"/> + <test name="test_dist_overloads"/> + <test name="test_ellint_3"/> + <test name="test_exponential_dist"/> + <test name="test_factorials"/> + <test name="test_find_location"/> + <test name="test_find_scale"/> + <test name="test_fisher_f"/> + <test name="test_gamma_dist"/> + <test name="test_hermite"/> + <test name="test_ibeta_inv_float"/> + <test name="test_ibeta_inv_double"/> + <test name="test_ibeta_inv_ab_float"/> + <test name="test_igamma_inv_float"/> + <test name="test_igamma_inv_double"/> + <test name="test_igamma_inva_float"/> + <test name="test_igamma_inva_double"/> + <test name="test_instantiate1"/> + <test name="test_instantiate1"/> + <test name="test_laguerre"/> + <test name="test_legendre"/> + <test name="test_lognormal"/> + <test name="test_negative_binomial_float"/> + <test name="test_negative_binomial_double"/> + <test name="test_normal"/> + <test name="test_rayleigh"/> + <test name="test_remez"/> + <test name="test_roots"/> + <test name="test_students_t"/> + <test name="test_toms748_solve"/> + <test name="test_triangular"/> + <test name="test_uniform"/> + <test name="test_policy"/> + <test name="test_policy_sf"/> + <test name="test_bessel_j"/> + <test name="test_bessel_y"/> + <test name="dist_beta_incl_test"/> + <test name="dist_cauchy_incl_test"/> + <test name="dist_chi_squared_incl_test"/> + <test name="dist_exponential_incl_test"/> + <test name="dist_fisher_f_incl_test"/> + <test name="dist_gamma_incl_test"/> + <test name="dist_lognormal_incl_test"/> + <test name="dist_normal_incl_test"/> + <test name="dist_students_t_incl_test"/> + <test name="sf_beta_incl_test"/> + <test name="sf_bessel_incl_test"/> + <test name="sf_cbrt_incl_test"/> + <test name="sf_gamma_incl_test"/> + <test name="sf_legendre_incl_test"/> + <test name="std_real_concept_check"/> + <test name="test_traits"/> + <test name="tools_remez_inc_test"/> + <test name="tools_roots_inc_test"/> + <test name="tools_series_inc_test"/> + <test name="tools_solve_inc_test"/> + <test name="tools_test_data_inc_test"/> + <test name="common_factor_test"/> + <test name="octonion_test"/> + <test name="quaternion_test"/> + <test name="complex_test"/> + <toolset name="borland-5.6.*"/> + <note author="John Maddock"> + This compiler is not sufficiently conforming to correctly handle these tests. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_bernoulli"/> + <test name="test_beta_dist"/> + <test name="test_binomial_float"/> + <test name="test_binomial_double"/> + <test name="test_binomial_coeff"/> + <test name="test_cauchy"/> + <test name="test_dist_overloads"/> + <test name="test_ellint_3"/> + <test name="test_exponential_dist"/> + <test name="test_factorials"/> + <test name="test_find_location"/> + <test name="test_find_scale"/> + <test name="test_hermite"/> + <test name="test_ibeta_inv_float"/> + <test name="test_ibeta_inv_double"/> + <test name="test_ibeta_inv_ab_float"/> + <test name="test_igamma_inva_float"/> + <test name="test_igamma_inva_double"/> + <test name="test_instantiate1"/> + <test name="test_instantiate1"/> + <test name="test_laguerre"/> + <test name="test_legendre"/> + <test name="test_lognormal"/> + <test name="test_negative_binomial_double"/> + <test name="test_normal"/> + <test name="test_rayleigh"/> + <test name="test_remez"/> + <test name="test_roots"/> + <test name="test_toms748_solve"/> + <test name="test_policy"/> + <test name="test_policy_sf"/> + <test name="dist_cauchy_incl_test"/> + <test name="dist_exponential_incl_test"/> + <test name="dist_lognormal_incl_test"/> + <test name="dist_normal_incl_test"/> + <test name="sf_gamma_incl_test"/> + <test name="sf_legendre_incl_test"/> + <test name="std_real_concept_check"/> + <test name="test_traits"/> + <test name="tools_remez_inc_test"/> + <test name="tools_roots_inc_test"/> + <test name="tools_series_inc_test"/> + <test name="tools_solve_inc_test"/> + <test name="tools_test_data_inc_test"/> + <test name="complex_test"/> + <toolset name="borland-5.8.2"/> + <note author="John Maddock"> + This compiler is not sufficiently conforming to correctly handle these tests. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="octonion_test"/> + <test name="quaternion_test"/> + <toolset name="gcc-3.4.3_sunos"/> + <note author="Caleb Epstein"> + There appears to be a bug in gcc's <code>std::exp (long + double)</code> on this platform. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_binomial_real_concept"/> + <toolset name="gcc-3.4.6_linux_x86_64"/> + <toolset name="gcc-4.2.1_linux_x86_64"/> + <note author="John Maddock"> + This test takes too long to execute and times out on this platform. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_remez"/> + <toolset name="hp_cxx-71_006_tru64"/> + <note author="John Maddock"> + For some reason taking the address of std library math functions fails + on this platform: this is a problem for our test code, not the library. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="special_functions_test"/> + <test name="octonion_test"/> + <test name="quaternion_test"/> + <test name="quaternion_mult_incl_test"/> + <toolset name="msvc-6*"/> + <note author="John Maddock"> + This compiler is not sufficiently conforming to compile these tests. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="complex_test"/> + <test name="log1p_expm1_test"/> + <toolset name="sunpro*"/> + <note author="John Maddock"> + std::numeric_limits<long double>::infinity() is apparently + broken in this compiler: it's filed as bug 6347520 with Sun. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="complex_test"/> + <toolset name="msvc-6*"/> + <note author="John Maddock"> + Incomplete std::complex support make these tests pointless + (the complex trig functions are absent). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="special_functions_test"/> + <test name="octonion_test"/> + <test name="quaternion_test"/> + <test name="quaternion_mult_incl_test"/> + <toolset name="sun-5.8"/> + <note author="John Maddock"> + These have yet to fully investigated, but the code is known + to compile with more conforming compilers, probably workarounds + are possible if someone is prepared to invest the time. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="quaternion_test"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="John Maddock"> + Appears to be a bug in STLport's complex abs function, but needs more investigation. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="special_functions_test"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="John Maddock"> + This appears to be a problem with STLPort's abs function: the issue only effects the + test code. A workaround should be possible but users should be encouraged to use + STLport 5 instead. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="quaternion_test"/> + <test name="octonion_test"/> + <toolset name="gcc-cygwin*"/> + <note author="John Maddock"> + No true long double standard lib support causes these tests to fail. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="quaternion_test"/> + <test name="complex_test"/> + <test name="special_functions_test"/> + <toolset name="intel-linux*"/> + <note author="John Maddock"> + This is Intel issue 409291, it should be fixed from + compiler package l_cc_c_9.1.046 onwards. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="complex_test"/> + <toolset name="qcc-3.3.5*cpp"/> + <note author="Jim Douglas" date="14 Feb 06" refid="27"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="common_factor_test"/> + <toolset name="msvc-6.5_stlport*"/> + <toolset name="msvc-7.1_stlport*"/> + <note author="John Maddock"> + This failure appears to be caused by a compiler bug: please note + that the issue only effects the test suite, not the library itself. + A workaround is available but breaks other compilers. + </note> + </mark-expected-failures> + </library> + + <!-- numeric/conversion --> + <library name="numeric/conversion"> + <test name="bounds_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Fernando Cacciola" refid="3"/> + </mark-failure> + </test> + <test name="converter_test"> + <mark-failure> + <toolset name="gcc-3.4.5_linux_x86_64"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Fernando Cacciola" refid="3"/> + </mark-failure> + </test> + <test name="traits_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Fernando Cacciola" refid="3"/> + </mark-failure> + </test> + <test name="udt_example_0"> + <mark-failure> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <note author="Fernando Cacciola" refid="30"/> + </mark-failure> + </test> + <test name="udt_support_test"> + <mark-failure> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Fernando Cacciola" refid="3"/> + </mark-failure> + </test> + </library> + + <!-- numeric/interval --> + <library name="numeric/interval"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + </mark-unusable> + <mark-expected-failures> + <test name="det"/> + <test name="mul"/> + <test name="overflow"/> + <toolset name="hp_cxx*"/> + <note author="G. Melquiond"> + This test ensures the inclusion property of interval + arithmetic is available for built-in floating-point types + <code>float</code> and <code>double</code>. If the test + fails, <code>interval<float></code> and + <code>interval<double></code> should not be used + on this compiler/platform since there will be no + numerical guarantee. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="det"/> + <test name="integer"/> + <test name="overflow"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="A.Meredith"> + This compiler has some problems with name looup / overload resolution. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="cmp_exn"/> + <test name="cmp_set"/> + <test name="cmp_tribool"/> + <toolset name="gcc-2.95.3-linux"/> + <note author="Aleksey Gurtovoy" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="det"/> + <toolset name="cw-8.3*"/> + <note author="Aleksey Gurtovoy" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_float"/> + <toolset name="msvc-7.1_stlport4"/> + <note author="Vladimir Prus"> + This failure is unresearched. Presumably, the problem + is that the abs function is not available in the "right" + namespace with this compiler/stdlib combination. + </note> + </mark-expected-failures> + + </library> + + + <!-- numeric/ublas --> + <library name="numeric/ublas"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="gcc-3_3-darwin"/> + <note author="M.Stevens" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="cw-9.4"/> + <note author="M.Stevens" refid="2"/> + </mark-unusable> + <mark-unusable> + <toolset name="sun-5.8"/> + <note author="M.Stevens" refid="4"/> + </mark-unusable> + <mark-unusable> + <toolset name="cw-8.3"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="iw-7_1-vc6"/> + <toolset name="gcc-2.95*"/> + <note author="M.Stevens" refid="30"/> + </mark-unusable> + <mark-unusable> + <toolset name="msvc-7.1_stlport4"/> + <note author="Roland Schwarz"> + This old version of the stlport library causes the BOOST_NO_STDC_NAMESPACE + macro to be set. But this conflicts with the requirements of the library. + </note> + </mark-unusable> + <mark-expected-failures> + <test name="test3"/> + <toolset name="qcc-3.3.5*cpp"/> + <note author="Jim Douglas" date="14 Feb 06" refid="27"/> + </mark-expected-failures> + </library> + + <!-- program_options --> + <library name="program_options"> + + <!-- Mark unusable toolsets --> + <mark-unusable> + <toolset name="gcc-2.95.3-linux"/> + <note> + The failure is caused by standard library deficiencies + -- it lacks the basic_string class template and + the <locale> header. + </note> + </mark-unusable> + + <mark-unusable> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note refid="2"/> + </mark-unusable> + + <mark-unusable> + <toolset name="msvc-6.5*"/> + <note refid="17"/> + </mark-unusable> + + <mark-unusable> + <toolset name="msvc-7.0"/> + <note refid="29"/> + </mark-unusable> + + <!-- Mark expected failures --> + + <test name="unicode_test*"> + <mark-failure> + <toolset name="iw-7_1-vc6"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <toolset name="msvc-6.5*"/> + <note>The failures are caused by problems + with std::locale implementation</note> + </mark-failure> + </test> + + <test name="options_description_test_dll"> + <mark-failure> + <toolset name="msvc-6.5"/> + <toolset name="iw-7_1-vc6"/> + <note refid="23"/> + </mark-failure> + </test> + + <test name="variable_map_test_dll"> + <mark-failure> + <toolset name="iw-7_1-vc6"/> + <note refid="23"/> + </mark-failure> + </test> + + <test name="*dll"> + <mark-failure> + <toolset name="cw-8.3*"/> + <note refid="18"/> + </mark-failure> + </test> + + <test name="*dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <note refid="24"/> + </mark-failure> + </test> + + <mark-expected-failures> + <test name="variable_map_test"/> + <test name="variable_map_test_dll"/> + <toolset name="msvc-6.5*"/> + <note> + The failures are caused by compiler bug: it's not possible to + explicitly pass template arguments to member template function. The + failure is serious and makes one of the primary interfaces + unusable. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="cmdline_test_dll"/> + <test name="options_description_test_dll"/> + <test name="parsers_test_dll"/> + <test name="variable_map_test_dll"/> + <test name="positional_options_test_dll"/> + <toolset name="mingw-3*"/> + <note author="Aleksey Gurtovoy" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="unicode_test*"/> + <toolset name="mingw-3*"/> + <toolset name="gcc-3.4.2_mingw"/> + <toolset name="gcc-3.4.5_mingw"/> + <toolset name="gcc-mingw-3.4.5"/> + <toolset name="gcc-mingw-3.4.2"/> + <toolset name="gcc-cygwin-3.4.4"/> + <note refid="19"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="unicode_test_dll"/> + <toolset name="*-darwin"/> + <note refid="35" author="Doug Gregor"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="unicode_test*"/> + <toolset name="qcc-3.3.5*gpp"/> + <note author="Jim Douglas" date="12 Feb 06" refid="36"/> + </mark-expected-failures> + + </library> + + <!-- parameter --> + <library name="parameter"> + <mark-expected-failures> + <test name="duplicates"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note refid="32" author="David Abrahams"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="unnamed_fail"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-6*"/> + <note refid="32" author="David Abrahams"/> + </mark-expected-failures> + <test name="preprocessor"> + <toolset name="[Ss]un-5.8"/> + <note> + Several compiler bugs were worked around in order to get + this test to pass, so it could be considered to be only + partially working. However, the library's macro system, + which is really being tested here, does work on this + compiler, which is why we worked around the failures. + Please see the <a + href="http://www.boost.org/libs/parameter/test/preprocessor.cpp">test's + source file</a> for details. + </note> + </test> + + <mark-expected-failures> + <test name="maybe"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="python-parameter-test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="python_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <note refid="31" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="optional_deduced_sfinae"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Daniel Wallin"> + These compilers do not support SFINAE, so are expected to + fail this test. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="preprocessor_deduced"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Daniel Wallin"> + Borland does not support this feature. A compatibility syntax + might be developed later on. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="normalized_argument_types"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <note author="Daniel Wallin"> + This feature generally requires advanced compiler + features not supported by these compilers. It might + be possible to work around the issue on VC6/7, but + at this time no such workaround has been done. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="unnamed"/> + <toolset name="*"/> + <note author="Daniel Wallin"> + This is old and should not be tested any more. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="deduced_dependent_predicate"/> + <toolset name="msvc-6*"/> + <note refid="31" author="Daniel Wallin"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="optional_deduced_sfinae"/> + <test name="preprocessor_deduced"/> + <test name="python_test"/> + <toolset name="sun-5.8"/> + <note author="John Maddock"> + These test failure are reported to be under investigation + at Sun's compiler labs. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="result_of"/> + <toolset name="msvc-6*"/> + <toolset name="msvc-7.0"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note refid="31" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="python_test"/> + <toolset name="qcc-3.3.5_gpp"/> + <note refid="6" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="sfinae"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5_stlport4"/> + <note refid="29" author="Daniel Wallin"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="basics"/> + <test name="macros"/> + <test name="maybe"/> + <test name="sfinae"/> + <toolset name="gcc-4.2.1*"/> + <note author="Boris Gubenko" refid="42"/> + </mark-expected-failures> + + </library> + + <!-- pointer container --> + <library name="ptr_container"> + <mark-unusable> + <toolset name="gcc-2.95.3*"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="dmc-8_47-stlport-4_5_3"/> + <toolset name="hp_cxx-65_042_tru64"/> + </mark-unusable> + <mark-expected-failures> + <test name="ptr_list"/> + <toolset name="gcc-4.0.*"/> + <note author="Thorsten Ottosen"> + The error is due to problems in the standard library implementation. + It should be fixed in newer versions of the compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_list"/> + <toolset name="gcc-4.0.0*"/> + <note author="Thorsten Ottosen"> + The error is due to problems in the standard library implementation. + It should be fixed in newer versions of the compiler. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="incomplete_type_test"/> + <toolset name="cw-9.4"/> + <note author="Thorsten Ottosen"> + This error seems to be a bug the compiler. Please submit a + patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="iterator_test"/> + <toolset name="gcc-3.2.3*"/> + <toolset name="gcc-3.3.6*"/> + <toolset name="gcc"/> + <toolset name="qcc-3.3.5*"/> + <note author="Thorsten Ottosen"> + This error seems to be a bug the standard library. Please submit a + patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="no_exceptions"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + This test fails because the test ptr_vector fails. Please see the note + for that test. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_deque"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For sun the problem is that <code>insert(iterator,range)</code> + is not available due to partial ordering errors (the core library remains usable). + For codewarrior the problem is at least <code>std::auto_ptr</code> overloads (the core library remains usable). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_list"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For sun the problem is that <code>insert(iterator,range)</code> + is not available due to partial ordering errors (the core library remains usable). + For codewarrior the problem is at least <code>std::auto_ptr</code> overloads (the core library remains usable). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_vector"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For sun the problem is that <code>insert(iterator,range)</code> + is not available due to partial ordering errors (the core library remains usable). + For codewarrior the problem is at least <code>std::auto_ptr</code> overloads (the core library remains usable). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_map"/> + <toolset name="hp_cxx-71_006_tru64"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For hp, this compiler bug is insignificant. + For sun the problem is that <code>transfer(range,ptr_map)</code> + is not available due to partial ordering errors (the core library remains usable). + For codewarrior the problem is not known so please submit a patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="ptr_set"/> + <toolset name="cw-9.4"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For sun the problem is that <code>transfer(range,ptr_map)</code> and + <code>insert(range)</code>code> + is not available due to partial ordering errors (the core library remains usable). + For codewarrior the problem is at least <code>std::auto_ptr</code> overloads (the core library remains usable).. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="serialization"/> + <toolset name="cw*"/> + <note author="Thorsten Ottosen"> + This cause of this problem is unknown. Please submit a patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tree_test"/> + <toolset name="sun-5.8"/> + <note author="Thorsten Ottosen"> + For sun the problem is due to Boost.Test. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tut1"/> + <toolset name="cw-9.4"/> + <note author="Thorsten Ottosen"> + Seem like a bug in the compiler. Please submit a patch. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="view_example"/> + <toolset name="cw-9.4"/> + <note author="Thorsten Ottosen"> + Seem like a bug in the compiler. Please submit a patch. + </note> + </mark-expected-failures> + </library> + + <!-- python --> + <library name="python"> + <mark-unusable> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note refid="2"/> + <note refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="hp_cxx-65*"/> + <note author="Markus Schoepflin"> + The library fails to compile because of an error in the C++ + standard library implementation on this platform. It incorrectly + assumes that fpos_t is of an integral type, which is not always + the case. This is fixed in a later release. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sun-5.6*"/> + <note author="David Abrahams"> + The old reasoning given for this markup, which applied + to sun-5.8*, was as follows. However, tuple's tests + seem to use the test library, which is apparently + completely broken on Sun. Therefore, I've backed off + the version number to sun-5.6 so I can see the actual + state of the failures. + + <blockquote>This compiler seems to be having trouble digesting + Boost.Tuple. Until it can handle Boost.Tuple there's + little chance it will handle Boost.Python</blockquote> + </note> + </mark-unusable> + <mark-expected-failures> + <test name="object"/> + <toolset name="intel-10.*"/> + <note author="David Abrahams"> + + This compiler has a bug that causes silent misbehavior at runtime + when each of an assignment expression follows one of the following patterns: + <em>expr</em><code>.attr(</code><em>name</em><code>)</code> + or <em>expr</em><code>[</code><em>item</em><code>]</code>, + where <em>expr</em> + is-a <code>boost::python::object</code>. We've been + unable to find a workaround. + + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="object"/> + <toolset name="acc"/> + <note author="Boris Gubenko" refid="46"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="args"/> + <test name="auto_ptr"/> + <test name="builtin_convertors"/> + <test name="callbacks"/> + <test name="crossmod_exception"/> + <test name="data_members"/> + <test name="enum"/> + <test name="exception_translator"/> + <test name="extract"/> + <test name="implicit"/> + <test name="iterator"/> + <test name="list"/> + <test name="map_indexing_suite"/> + <test name="object"/> + <test name="opaque"/> + <test name="pickle2"/> + <test name="polymorphism"/> + <test name="polymorphism2"/> + <test name="shared_ptr"/> + <test name="slice"/> + <test name="test_pointer_adoption"/> + <test name="try"/> + <test name="vector_indexing_suite"/> + <test name="virtual_functions"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="D. Abrahams"> + The problems with GCC 2.x only occur when C++ exceptions are thrown and + the framework catches them, which happens quite often in the tests. + So technically GCC 2.x is usable if you're careful. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="pointer_vector"/> + <test name="polymorphism"/> + <toolset name="hp_cxx*"/> + <note author="Markus Schoepflin" refid="29"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="data_members"/> + <toolset name="acc"/> + <note author="Boris Gubenko"> + This test assumes standard-compliant dependent template name lookup which + is performed by aCC6 only in strict ansi mode. Since on HP-UX/aCC6 boost + testing is done in the default compilation mode, this test fails to + compile on this platform (in strict ansi mode, it compiles and succeeds). + </note> + </mark-expected-failures> + </library> + + <!-- random --> + <library name="random"> + <mark-unusable> + <toolset name="msvc"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="10"/> + </mark-unusable> + <test name="random_test"> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="B. Dawes" refid="2"/> + </mark-failure> + <mark-failure> + <toolset name="intel-vc71-win*"/> + <toolset name="intel-vc8-win*"/> + <note author="S. Slapeta" refid="1"/> + </mark-failure> + <mark-failure> + <toolset name="intel-linux-9.0"/> + <note author="John Maddock"> + Reported to Intel as issue 409291, and confirmed + as a problem. Probably this relates to a specific + Linux-Kernal or GLibC version. + </note> + </mark-failure> + <mark-failure> + <toolset name="qcc-3.3.5*"/> + <note author="Jim Douglas" date="13 Feb 06"> + Test fails with ranlux*_O1 RNGs when saving and recalling the state due to a bug in the + double to string conversion. The problem has been reported to QNX as PR29252. + </note> + </mark-failure> + <mark-failure> + <toolset name="gcc-*_tru64"/> + <note author="Markus Schoepflin"> + This test fails because of limitations in the system assembler + version used by GCC. It most probably would pass if the test + were split into multiple source files. + </note> + </mark-failure> + <mark-failure> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Boris Gubenko"> + It looks like a compiler issue: the test fails with gcc 3.4.6 + and succeeds with gcc 4.2.1. + </note> + </mark-failure> + </test> + </library> + + <!-- range --> + <library name="range"> + <mark-unusable> + <toolset name="mipspro"/> + <toolset name="dmc-8_43-stlport-4_5_3"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + <mark-expected-failures> + <test name="array"/> + <toolset name="como-4_3_3*"/> + <toolset name="sun-5.8"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note refid="27" author="Thorsten Ottosen"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="iterator_range"/> + <toolset name="msvc-stlport"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="hp_cxx-65*"/> + <note author="Thorsten Ottosen"> + For most compilers this is due to problems + with built-in arrays (notably char arrays) and operator==() + and operator!=() for iterator_range. Thus, not using built-in arrays + fixes the problem. + + For other compilers it is simply a bug in the standard library. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="reversible_range"/> + <toolset name="hp_cxx-65*"/> + <note author="Thorsten Ottosen"> + This test probably fails because it uses built-in arrays. So do expect these + functions to work in normal code. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="string"/> + <toolset name="hp_cxx-65*"/> + <toolset name="sun-5.8"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Thorsten Ottosen"> + The string functionality is expected to work if + the user employs std::string and stays away from built-in + arrays. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="sub_range"/> + <toolset name="msvc-8.0"/> + <toolset name="intel-vc8-*"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <toolset name="msvc-6.5_stlport4"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-7.1_stlport4"/> + <toolset name="hp_cxx-65*"/> + <note refid="6" author="Thorsten Ottosen"> + For most compilers this is due to problems + with built-in arrays (notably char arrays) and operator==() + and operator!=() for iterator_range. Thus, not using built-in arrays + fixes the problem. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="sub_range"/> + <toolset name="cw-9_5-darwin"/> + <note author="Thorsten Ottosen"> + At the time of release I couldn't figure out why this was failing. + Anyway, the failure is not very important; also, the well-definedness of + "singularity" of an iterator range is likely to change. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="extension_mechanism"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Thorsten Ottosen"> + The test requires support for Argument Dependent Lookup (ADL) + which the compiler in question does not provide. + </note> + </mark-expected-failures> + </library> + + <!-- regex --> + <library name="regex"> + <test name="regex_token_iterator_eg_2"> + <mark-failure> + <toolset name="msvc-6.5"/> + <note author="J. Maddock"/> + </mark-failure> + </test> + <test name="posix_api_check"> + <mark-failure> + <toolset name="como-4_3_3-vc7*"/> + <note author="J. Maddock"/> + </mark-failure> + </test> + <test name="wide_posix_api_check"> + <mark-failure> + <toolset name="qcc-3.3.5_gpp"/> + <note author="J. Maddock"> + No Wide character support on this platform. + </note> + </mark-failure> + </test> + <test name="wide_posix_api_check_c"> + <mark-failure> + <toolset name="qcc-3.3.5_gpp"/> + <note author="J. Maddock"> + No Wide character support on this platform. + </note> + </mark-failure> + </test> + <test name="*_dll"> + <mark-failure> + <toolset name="*como-4_3_3*"/> + <note author="J. Maddock"> + This test requires features that are unsupported by Como: + use and building of dll's mainly. + </note> + </mark-failure> + </test> + <mark-expected-failures> + <test name="static_mutex_test"/> + <test name="test_grep"/> + <toolset name="*como-4_3_3*"/> + <note author="J. Maddock"> + This test requires features that are unsupported by Como: + use and building of dll's mainly. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_regress_threaded"/> + <toolset name="darwin*"/> + <note author="J. Maddock"> + This tests fails because a dependency (Boost.Test) + fails to initialise correctly. The issue has been + reported to the library's author. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_regress_threaded"/> + <toolset name="gcc-*_tru64"/> + <note author="J. Maddock"> + GCC on tru64 appears not to cope with C++ exceptions + thrown from within threads. + </note> + </mark-expected-failures> + <test name="concept_check"> + <mark-failure> + <toolset name="msvc-8.0"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sun-5.8"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="qcc-3.3.5_cpp"/> + <note author="John Maddock" refid="2"/> + </mark-failure> + </test> + <test name="test_grep"> + <mark-failure> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sun-5.8"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="John Maddock"> + This test fails because a dependency (Boost.Program Options) doesn't build with this compiler. + </note> + </mark-failure> + </test> + <test name="test_grep"> + <mark-failure> + <toolset name="borland-5.9*"/> + <note author="A.Meredith"> + This test fails because a dependency (Boost.Program Options) which currently doesn't build with this compiler. + </note> + </mark-failure> + </test> + <mark-expected-failures> + <test name="regex_regress"/> + <test name="regex_regress_dll"/> + <toolset name="iw-7_1-vc6-stlp-4_5_3"/> + <note author="John Maddock" refid="29"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_regress"/> + <test name="regex_regress_threaded"/> + <test name="regex_regress_dll"/> + <toolset name="borland*"/> + <note author="John Maddock"> + There appears to be a linker bug that prevents these + projects from building, see http://qc.borland.com/wc/qcmain.aspx?d=32020. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="unicode_iterator_test"/> + <toolset name="borland-5.6*"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="John Maddock" refid="6"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_regress"/> + <test name="regex_regress_threaded"/> + <test name="regex_regress_dll"/> + <toolset name="borland*"/> + <note author="John Maddock"> + There appears to be a linker bug that prevents these + projects from building, see http://qc.borland.com/wc/qcmain.aspx?d=32020. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_timer"/> + <toolset name="msvc-6.5_stlport4"/> + <note author="John Maddock"> + Test fails due to unresilved externals from STLport: appears to be + an STLport bug. </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="regex_regress_threaded"/> + <test name="static_mutex_test"/> + <toolset name="msvc-6.5_stlport*"/> + <toolset name="msvc-7.1_stlport*"/> + <toolset name="msvc-8.0"/> + <toolset name="gcc-cygwin*"/> + <note author="John Maddock"> + These tests pass when run directly from the command line, + but fail when run under the regression test script. + The issue has never been fully pinned down, but appears + to be related to how long the tests take to run.</note> + </mark-expected-failures> + </library> + + <!-- signals --> + <library name="signals"> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + <test name="signal_test"> + <mark-failure> + <toolset name="cw-8.3*"/> + <note author="B. Dawes" refid="2"/> + </mark-failure> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5"/> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="3"/> + </mark-failure> + </test> + </library> + + <!-- statechart --> + <library name="statechart"> + <mark-unusable> + <toolset name="borland-5*"/> + <toolset name="cw-8*"/> + <toolset name="dmc-8*"/> + <toolset name="gcc-2*"/> + <toolset name="hp_cxx-65*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0*"/> + <toolset name="sun-5*"/> + <toolset name="hp_cxx-65*"/> + <note author="Andreas Huber" refid="17"/> + </mark-unusable> + <mark-unusable> + <toolset name="acc-pa_risc"/> + <note author="Andreas Huber"> + Marked unusable because TransitionTest.cpp compiled but did + the wrong thing at runtime! + </note> + </mark-unusable> + <mark-expected-failures> + <test name="DllTestNative"/> + <toolset name="gcc-mingw-4.2*"/> + <note author="Andreas Huber"> + A runtime failure of this test indicates that the RTTI + implementation of this platform is broken in conjunction + with dynamic linking. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="DllTestNormal"/> + <toolset name="*cygwin*"/> + <toolset name="*mingw*"/> + <toolset name="hp_cxx-71*"/> + <toolset name="cw-9*"/> + <note author="Andreas Huber"> + A runtime failure of this test indicates that this platform + <b>dynamically</b> links code in a manner such that under + certain circumstances more than one instance of a + header-defined static class member can exist at runtime. See + <a href="http://www.boost.org/libs/statechart/doc/faq.html#Dll">here</a> + for more information. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="LibTestNormal"/> + <toolset name="hp_cxx-71*"/> + <note author="Andreas Huber"> + A runtime failure of this test indicates that this platform + <b>statically</b> links code in a manner such that under + certain circumstances more than one instance of a + header-defined static class member can exist at runtime. See + <a href="http://www.boost.org/libs/statechart/doc/faq.html#Dll">here</a> + for more information. + </note> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="CameraExample"/> + <test name="CustomReactionTest*"/> + <test name="PerformanceExample"/> + <test name="TransitionTest*"/> + <toolset name="cw-9*"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="CustomReactionTest*"/> + <test name="TransitionTest*"/> + <toolset name="hp_cxx-71*"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="TransitionTest*"/> + <toolset name="intel-linux-9.1"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="TransitionTestBoth"/> + <test name="TransitionTestNative"/> + <toolset name="pathscale-3.1"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="TransitionTest*"/> + <test name="InvalidTransitionTest1Relaxed"/> + <test name="StopWatchExample"/> + <toolset name="vacpp-8.0"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="CustomReactionTest*"/> + <toolset name="acc*"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="StopWatch*"/> + <toolset name="msvc-8.0~wm5~stlport5.1"/> + <note author="Andreas Huber"> + This looks like a std library or configuration bug. Since + difftime is only used in the example, this failure can be + ignored. + </note> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="DllTest*"/> + <toolset name="msvc-8.0~wm5~stlport5.1"/> + <note author="Andreas Huber" refid="29"/> + </mark-expected-failures> + </library> + + <!-- static_assert --> + <library name="static_assert"> + <test name="static_assert_example_2"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="J. Maddock" refid="4"/> + </mark-failure> + </test> + <test name="static_assert_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="A.Meredith" date="26 May 2006"> + This test runs without problem on Borland compilers, + which means the static assertion is not being caught. + </note> + </mark-failure> + </test> + </library> + + <!-- system --> + <library name="system"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <note author="Beman Dawes"> + This compiler does not support enable_if, which is required + by Boost.System. + </note> + </mark-unusable> + </library> + + <!-- test --> + <library name="test"> + <mark-expected-failures> + <test name="ifstream_line_iterator_test"/> + <toolset name="sunpro*"/> + <note author="Gennadiy Rozental" refid="2"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="custom_exception_test"/> + <toolset name="msvc-6.5*"/> + <note author="Gennadiy Rozental" refid="2"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="errors_handling_test"/> + <toolset name="*como-4_3_3*"/> + <note author="B. Dawes" refid="3"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="token_iterator_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="iw-7_1-vc6"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-7.0-stlport"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="hp_cxx-65*"/> + <toolset name="sunpro*"/> + <toolset name="borland*"/> + <note author="Gennadiy Rozental" refid="3"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="token_iterator_test"/> + <toolset name="qcc-3.3.5*gpp"/> + <note author="Jim Douglas" date="14 Feb 06" refid="36"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_fp_comparisons"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="msvc-7.0-stlport"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Gennadiy Rozental" refid="3"/> + </mark-expected-failures> + + <mark-expected-failures reason="?"> + <test name="basic_cstring_test"/> + <toolset name="gcc-2.95.3-linux"/> + <note refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="errors_handling_test"/> + <test name="test_tools_test"/> + <toolset name="cw-9_5-darwin"/> + <note refid="29" author="Doug Gregor"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_tools_test"/> + <toolset name="cw-9.4"/> + <note refid="29" author="Doug Gregor"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="prg_exec_fail2"/> + <toolset name="darwin-4.0.1"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Vladimir Prus"> + The test verifies that Boost.Test detects division by + zero. It fails on PowerPC and Linux ia64. On PowerPC + processors, division has an undefined result. The compiler + has to emit extra code to assert that the divisor isn't zero. + + Compiler options -fno-trapping-math and -fnon-call-exceptions + might affect this. However, in default configuration + no check is done, and division by zero is not detected. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="prg_exec_fail3"/> + <toolset name="cw-9.4"/> + <toolset name="gcc-3.4.6_linux_ia64"/> + <note author="Vladimir Prus"> + The test appears to test that failed assertion result + in non-zero exit status. That seems to be not the + case, for unknown reasons. + </note> + </mark-expected-failures> + + </library> + + + <!-- thread --> + <library name="thread"> + <mark-unusable> + <toolset name="*como-4_3_3*"/> + <note author="B. Dawes" refid="10"/> + </mark-unusable> + <test name="test_mutex"> + <mark-failure> + <toolset name="msvc-7.0"/> + <note author="B. Dawes" refid="0"/> + <note author="B. Dawes" refid="6"/> + </mark-failure> + </test> + <mark-expected-failures> + <test name="*_lib"/> + <toolset name="intel-8.0-linux*"/> + <note author="Aleksey Gurtovoy"> + This failure is caused by a conflict between the compiler + and the testing environment: the tests are run on a platform with + <i>too recent</i> version of glibc, which is not currently + supported by the compiler vendor (Intel). + + If you are having the same problem and <i>really</i> want to make + things work, renaming <code>strol</code> symbol in the + compiler's static runtime library (<code>libcprts.a</code>) to + something else is known to resolve the issue. + </note> + </mark-expected-failures> + <mark-expected-failures reason="?"> + <test name="*_lib"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <note author="Aleksey Gurtovoy" refid="29"/> + </mark-expected-failures> + <!-- + It is unclear why this has been marked as expected failure. The + pthread_timedwait is giving an error code of EINVAL, which needs to + be resolved, since the timed behaviour is affected by this bug. + Marked as a failure again by Roland Schwarz, 2007-01-12 + <mark-expected-failures> + <test name="test_mutex"/> + <test name="test_mutex_lib"/> + <toolset name="qcc-3.3*"/> + <note author="Jim Douglas" date="13 Feb 06" refid="16"/> + </mark-expected-failures> + --> + <mark-expected-failures> + <test name="test_tss_lib"/> + <toolset name="borland-*"/> + <toolset name="cw-9.4"/> + <note author="Roland Schwarz" date="2006-12-14"> + When a thread ends, tss data needs to be cleaned up. This process + is mostly automatic. When threads are launched by the Boost.Thread API + cleanup is handled by the library implementation. For threads, launched + by the native operating system API it is not possible to get this cleanup + on every compiler/platform. A warning (error) will be present in this case, + which cleary states this fact. It is recommended to start threads only + by means of the Boost.Thread API if you need to avoid the leaks that appear + on the end of the thread. If this is not possible the cleanup can be invoked + from user code before the process actually ends. For library implementors + this means to call these functions during library initialization and + finalization. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_thread_move"/> + <test name="test_thread_move_lib"/> + <toolset name="borland-*"/> + <note author="Anthony Williams" date="2007-12-14"> +The Borland compiler fails to bind rvalues to the thread move constructor, +choosing instead to bind them to the private (and unimplemented) copy constructor. + </note> + </mark-expected-failures> + </library> + + <!-- tuple --> + <library name="tuple"> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + </mark-unusable> + </library> + + <!-- type_traits --> + <library name="type_traits"> + <mark-expected-failures> + <test name="function_traits_test"/> + <test name="remove_bounds_test"/> + <test name="remove_const_test"/> + <test name="remove_cv_test"/> + <test name="remove_pointer_test"/> + <test name="remove_reference_test"/> + <test name="remove_volatile_test"/> + <test name="decay_test"/> + <test name="extent_test"/> + <test name="remove_extent_test"/> + <test name="remove_all_extents_test"/> + <test name="rank_test"/> + <test name="is_unsigned_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy"> + This failure is caused by the lack of compiler support for class template + partial specialization. A limited subset of the tested functionality is + available on the compiler through a user-side workaround (see + <a href="http://www.boost.org/libs/type_traits/index.html#transformations"> + http://www.boost.org/libs/type_traits/index.html#transformations</a> for + details). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="decay_test"/> + <test name="extent_test"/> + <test name="is_base_and_derived_test"/> + <test name="is_base_of_test"/> + <test name="is_convertible_test"/> + <test name="rank_test"/> + <test name="remove_all_extents_test"/> + <test name="remove_bounds_test"/> + <test name="remove_const_test"/> + <test name="remove_extent_test"/> + <test name="remove_pointer_test"/> + <test name="remove_volatile_test"/> + <test name="tricky_add_pointer_test"/> + <test name="tricky_function_type_test"/> + <test name="tricky_incomplete_type_test"/> + <test name="make_signed_test"/> + <test name="make_unsigned_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="promote_basic_test"/> + <test name="promote_enum_test"/> + <test name="promote_mpl_test"/> + <test name="tricky_partial_spec_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="AlisdairM" refid="2"/> + </mark-expected-failures> + <test name="tricky_is_enum_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <toolset name="gcc-2.95.3-*"/> + </mark-failure> + </test> + <test name="tricky_incomplete_type_test"> + <mark-failure> + <toolset name="iw-7_1*"/> + <note author="John Maddock" refid="2"/> + </mark-failure> + </test> + <test name="is_abstract_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3*"/> + <toolset name="cw-9.3*"/> + <toolset name="cw-9.4"/> + <toolset name="cw-9.5"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="mingw-3_3*"/> + <toolset name="gcc-2*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3.3*"/> + <toolset name="qcc-3.3*"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <toolset name="darwin"/> + <toolset name="mingw"/> + <note author="Aleksey Gurtovoy"> + This functionality is available only on compilers that implement C++ Core Language + <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337">Defect Report 337</a>. + </note> + </mark-failure> + </test> + + <mark-expected-failures> + <test name="is_polymorphic_test"/> + <toolset name="gcc-2.95.3-stlport-*"/> + <note author="Doug Gregor" refid="3"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="decay_test"/> + <test name="extent_test"/> + <test name="has_nothrow_assign_test"/> + <test name="has_nothrow_constr_test"/> + <test name="has_nothrow_copy_test"/> + <test name="has_trivial_assign_test"/> + <test name="has_trivial_constr_test"/> + <test name="has_trivial_copy_test"/> + <test name="has_trivial_destructor_test"/> + <test name="is_array_test"/> + <test name="is_base_and_derived_test"/> + <test name="is_base_of_test"/> + <test name="is_class_test"/> + <test name="is_convertible_test"/> + <test name="is_object_test"/> + <test name="is_pod_test"/> + <test name="is_polymorphic_test"/> + <test name="rank_test"/> + <test name="remove_all_extents_test"/> + <test name="remove_bounds_test"/> + <test name="remove_extent_test"/> + <toolset name="sunpro-5_3-sunos"/> + + <note author="John Maddock"> + The Type Traits library is broken when used with Sunpro-5.3 and the + argument to the template is an array or function type. Most other argument types + do work as expected: in other words the functionality is limited + with this compiler, but not so much as to render the library unuseable. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="is_empty_test"/> + <test name="is_function_test"/> + <test name="is_member_func_test"/> + <test name="is_member_obj_test"/> + <test name="is_reference_test"/> + <test name="tricky_function_type_test"/> + <test name="tricky_incomplete_type_test"/> + <test name="tricky_is_enum_test"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="decay_test"/> + <test name="extent_test"/> + <test name="is_abstract_test"/> + <test name="is_empty_test"/> + <test name="is_function_test"/> + <test name="is_member_func_test"/> + <test name="is_member_obj_test"/> + <test name="is_object_test"/> + <test name="is_reference_test"/> + <test name="rank_test"/> + <test name="tricky_function_type_test"/> + <toolset name="sun-5.8"/> + + <note author="John Maddock"> + The Type Traits library is broken when used with Sunpro-5.8 and the + argument to the template is a function type. Most other argument types + do work as expected: in other words the functionality is limited + with this compiler, but not so much as to render the library unuseable. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tricky_partial_spec_test"/> + <toolset name="sun-5.9"/> + <note author="John Maddock"> + This fails with an internal compiler error, + there is no workaround as yet. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tricky_function_type_test"/> + <test name="is_const_test"/> + <test name="is_volatile_test"/> + <test name="is_convertible_test"/> + <toolset name="gcc-2*"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="aligned_storage_test"/> + <toolset name="cw-8.3"/> + <note author="John Maddock"> + Older versions of MWCW incorrectly align pointers to member functions + (they use 12-byte boundaries, rather than a power-of-2 boundary), + leading to alignment_of / aligned_storage + to fail with these types on this compiler. + </note> + </mark-expected-failures> + </library> + + <!-- tr1 --> + <library name="tr1"> + <mark-unusable> + <toolset name="msvc-7.0"/> + <toolset name="msvc-6*"/> + <note author="John Maddock"> + VC6/7 has a buggy using declaration syntax which + basically makes it impossible to implement the + namespace forwarding that this library relies upon. + See KB article 263630 here: http://support.microsoft.com/default.aspx?scid=kb;en-us;263630 + </note> + </mark-unusable> + <mark-unusable> + <toolset name="cw-*"/> + <note author="John Maddock"> + Metrowerks Codeworrier has partial TR1 support built in + which conflicts with this implementation. Porting to this + compiler is almost certainly possible, but will require some + work by someone who has this compiler. + </note> + </mark-unusable> + + <mark-expected-failures> + <test name="run_random"/> + <test name="std_run_random"/> + <test name="std_test_bind"/> + <test name="test_bind"/> + <test name="std_test_regex"/> + <test name="test_regex"/> + <test name="std_test_result_of"/> + <test name="test_result_of"/> + <test name="tr1_has_tr1_result_of_pass"/> + <test name="tr1_has_trivial_constr_test"/> + <test name="tr1_is_base_of_test"/> + <test name="tr1_is_convertible_test"/> + <test name="tr1_is_pod_test"/> + <test name="tr1_is_polymorphic_test"/> + <test name="tr1_tky_function_type_test"/> + <toolset name="msvc-9.0"/> + <note author="John Maddock"> + MSVC 9.0 with the optional feature pack installed includes + a version of the TR1 libraries that is not as interface-conforming + as the Boost version. Most of these failures are of the "annoying" + rather than "unusable" kind. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_mem_fn_tricky"/> + <test name="test_bind_tricky"/> + <test name="test_ref_wrapper_tricky"/> + <test name="test_function_tricky"/> + <test name="std_test_mem_fn_tricky"/> + <test name="std_test_bind_tricky"/> + <test name="std_test_ref_wrapper_tricky"/> + <test name="std_test_function_tricky"/> + <test name="std_test_reference_wrapper_tricky"/> + <test name="test_reference_wrapper_tricky"/> + <toolset name="*"/> + <note author="John Maddock"> + These tests test features that are not supported in the + current Boost implementations of TR1 components, they will + currently fail on all compilers, unless that compiler has + native TR1 support. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_regex"/> + <test name="std_test_regex"/> + <test name="test_hash"/> + <test name="std_test_hash"/> + <toolset name="mingw*"/> + <toolset name="qcc*gpp"/> + <toolset name="gcc-2*"/> + <note author="John Maddock"> + These tests fail on this platform due to a lack of + wide character support. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_regex"/> + <test name="std_test_regex"/> + <toolset name="gcc-mingw*"/> + <note author="John Maddock"> + These tests fail on this platform due to incomplete + wide character support. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_hash"/> + <test name="std_test_hash"/> + <toolset name="gcc-cygwin*"/> + <note author="John Maddock"> + These tests fail on this platform due to incomplete + wide character support. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_array"/> + <test name="std_test_array"/> + <test name="test_array_tricky"/> + <test name="std_test_array_tricky"/> + <test name="test_complex"/> + <test name="std_test_complex"/> + <test name="test_function"/> + <test name="std_test_function"/> + <test name="test_mem_fn"/> + <test name="std_test_mem_fn"/> + <test name="test_random"/> + <test name="std_test_random"/> + <test name="test_regex"/> + <test name="std_test_regex"/> + <test name="test_result_of"/> + <test name="std_test_result_of"/> + <test name="test_shared_ptr"/> + <test name="std_test_shared_ptr"/> + <test name="test_tr1_include"/> + <test name="std_test_tr1_include"/> + <test name="test_tuple"/> + <test name="std_test_tuple"/> + <test name="test_tuple_tricky"/> + <test name="std_test_tuple_tricky"/> + <test name="test_type_traits"/> + <test name="std_test_type_traits"/> + <test name="run_complex_overloads"/> + <test name="std_run_complex_overloads"/> + <test name="run_random"/> + <test name="std_run_random"/> + <test name="test_tuple_tricky"/> + <test name="tr1_add_const_test"/> + <test name="tr1_add_cv_test"/> + <test name="tr1_add_pointer_test"/> + <test name="tr1_add_reference_test"/> + <test name="tr1_add_volatile_test"/> + <test name="tr1_aligned_storage_test"/> + <test name="tr1_alignment_of_test"/> + <test name="tr1_has_nothrow_assign_test"/> + <test name="tr1_has_nothrow_constr_test"/> + <test name="tr1_has_nothrow_copy_test"/> + <test name="tr1_has_trivial_assign_test"/> + <test name="tr1_has_trivial_constr_test"/> + <test name="tr1_has_trivial_copy_test"/> + <test name="tr1_has_trivial_destr_test"/> + <test name="tr1_has_virtual_destr_test"/> + <test name="tr1_is_arithmetic_test"/> + <test name="tr1_is_array_test"/> + <test name="tr1_is_class_test"/> + <test name="tr1_is_compound_test"/> + <test name="tr1_is_const_test"/> + <test name="tr1_is_convertible_test"/> + <test name="tr1_is_empty_test"/> + <test name="tr1_is_enum_test"/> + <test name="tr1_is_floating_point_test"/> + <test name="tr1_is_function_test"/> + <test name="tr1_is_fundamental_test"/> + <test name="tr1_is_integral_test"/> + <test name="tr1_is_member_func_test"/> + <test name="tr1_is_member_obj_test"/> + <test name="tr1_is_member_pointer_test"/> + <test name="tr1_is_object_test"/> + <test name="tr1_is_pod_test"/> + <test name="tr1_is_pointer_test"/> + <test name="tr1_is_polymorphic_test"/> + <test name="tr1_is_reference_test"/> + <test name="tr1_is_same_test"/> + <test name="tr1_is_scalar_test"/> + <test name="tr1_is_signed_test"/> + <test name="tr1_is_union_test"/> + <test name="tr1_is_unsigned_test"/> + <test name="tr1_is_void_test"/> + <test name="tr1_is_volatile_test"/> + <test name="tr1_remove_const_test"/> + <test name="tr1_remove_cv_test"/> + <test name="tr1_remove_pointer_test"/> + <test name="tr1_remove_reference_test"/> + <test name="tr1_remove_volatile_test"/> + <test name="tr1_tky_abstract_type_test"/> + <test name="tr1_tricky_add_pointer_test"/> + <test name="tr1_tky_partial_spec_test"/> + <toolset name="borland-5.6*"/> + <note author="John Maddock"> + Support for Borland C++ in the various TR1 libraries is pretty + poor (due to numerous compiler bugs sadly). The TR1 concept + checks are *very* strict, and are expected to fail with this + compiler. In addition most of the type_traits tests fail + whenever debugging support is turned on with an internal + compiler error. More conservative uses are more likely to succeed + with this compiler however. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_complex"/> + <test name="std_test_complex"/> + <test name="test_function"/> + <test name="std_test_function"/> + <test name="test_random"/> + <test name="std_test_random"/> + <test name="test_result_of"/> + <test name="std_test_result_of"/> + <test name="test_tuple_tricky"/> + <test name="std_test_tuple_tricky"/> + <test name="test_type_traits"/> + <test name="std_test_type_traits"/> + <test name="run_complex_overloads"/> + <test name="std_run_complex_overloads"/> + <test name="test_shared_ptr"/> + <test name="std_test_shared_ptr"/> + <test name="std_run_random"/> + <test name="run_random"/> + <test name="test_tuple_tricky"/> + <test name="tr1_is_convertible_test"/> + <test name="tr1_remove_const_test"/> + <test name="tr1_remove_pointer_test"/> + <test name="tr1_remove_volatile_test"/> + <test name="tr1_tricky_add_pointer_test"/> + <test name="tr1_tky_partial_spec_test"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="John Maddock"> + Support for Borland C++ in the various TR1 libraries is pretty + poor (due to numerous compiler bugs sadly). The TR1 concept + checks are *very* strict, and are expected to fail with this + compiler. More conservative uses are more likely to succeed + with this compiler however. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="std_test_bind"/> + <test name="test_bind"/> + <toolset name="gcc-4*darwin"/> + <toolset name="darwin*"/> + <note author="John Maddock"> + These tests fail on this platform due to a recuring GCC bug. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_type_traits"/> + <test name="std_test_type_traits"/> + <test name="tr1_is_abstract_test"/> + <toolset name="gcc-3.3.*"/> + <toolset name="gcc-3.2*"/> + <toolset name="qcc-3.3*"/> + <note author="John Maddock"> + These tests fail due to a known compiler bug + that is fixed in more recent GNU compiler releases. Users are + very unlikely to encounter this as a real problem + in practice. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_regex"/> + <test name="std_test_regex"/> + <test name="test_complex"/> + <test name="std_test_complex"/> + <test name="run_complex_overloads"/> + <test name="std_run_complex_overloads"/> + <toolset name="gcc-2*"/> + <note author="John Maddock"> + These tests fail due to a known compiler bug + that is fixed in more recent releases. Users are + very unlikely to encounter this as a real problem + in practice. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_type_traits"/> + <test name="std_test_type_traits"/> + <test name="test_result_of"/> + <test name="std_test_result_of"/> + <test name="tr1_is_abstract_test"/> + <test name="test_ios"/> + <test name="test_istream"/> + <test name="test_ostream"/> + <test name="test_streambuf"/> + <test name="test_limits"/> + <test name="test_locale"/> + <test name="test_ios_std_header"/> + <test name="test_istream_std_header"/> + <test name="test_limits_std_header"/> + <test name="test_locale_std_header"/> + <test name="test_ostream_std_header"/> + <test name="test_streambuf_std_header"/> + <toolset name="gcc-2*"/> + <note author="John Maddock"> + These tests fail due to a known compiler bug + that is fixed in more recent releases. This + functionality may not be usable with this compiler. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="run_complex_overloads"/> + <test name="std_run_complex_overloads"/> + <test name="std_test_complex"/> + <test name="test_complex"/> + <toolset name="qcc-3.3.5*gpp"/> + <note author="John Maddock"> + These tests fail due to a known stdlib bug + that has been reported to the vendor. + </note> + </mark-expected-failures> + + <mark-expected-failures> + <test name="tr1_function_traits_test"/> + <test name="tr1_remove_bounds_test"/> + <test name="tr1_remove_const_test"/> + <test name="tr1_remove_cv_test"/> + <test name="tr1_remove_pointer_test"/> + <test name="tr1_remove_reference_test"/> + <test name="tr1_remove_volatile_test"/> + <test name="tr1_decay_test"/> + <test name="tr1_extent_test"/> + <test name="tr1_remove_extent_test"/> + <test name="tr1_remove_all_extents_test"/> + <test name="tr1_rank_test"/> + <test name="tr1_is_unsigned_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy"> + This failure is caused by the lack of compiler support for class template + partial specialization. A limited subset of the tested functionality is + available on the compiler through a user-side workaround (see + <a href="http://www.boost.org/libs/type_traits/index.html#transformations"> + http://www.boost.org/libs/type_traits/index.html#transformations</a> for + details). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_tky_incomplete_type_test"/> + <test name="tr1_tky_incomp_type_test"/> + <test name="tr1_decay_test"/> + <test name="tr1_extent_test"/> + <test name="tr1_is_base_of_test"/> + <test name="tr1_rank_test"/> + <test name="tr1_remove_all_extents_test"/> + <test name="tr1_remove_extent_test"/> + <test name="tr1_tky_function_type_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <test name="tr1_tricky_is_enum_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="msvc-6.5*"/> + <toolset name="gcc-2.95.3-*"/> + </mark-failure> + </test> + <test name="tr1_tricky_incomplete_type_test"> + <mark-failure> + <toolset name="iw-7_1*"/> + <note author="John Maddock" refid="2"/> + </mark-failure> + </test> + <test name="tr1_tricky_incomp_type_test"> + <mark-failure> + <toolset name="iw-7_1*"/> + <note author="John Maddock" refid="2"/> + </mark-failure> + </test> + <test name="tr1_tky_incomp_type_test"> + <mark-failure> + <toolset name="iw-7_1*"/> + <note author="John Maddock" refid="2"/> + </mark-failure> + </test> + <test name="tr1_is_abstract_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <toolset name="cw-8.3*"/> + <toolset name="cw-9.3*"/> + <toolset name="cw-9.4*"/> + <toolset name="cw-9.5*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="mingw-3_3*"/> + <toolset name="gcc-2*"/> + <toolset name="gcc-3.2*"/> + <toolset name="gcc-3.3*"/> + <toolset name="gcc-3_3*"/> + <toolset name="qcc-3_3*"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <toolset name="darwin"/> + <toolset name="mingw"/> + <note author="Aleksey Gurtovoy"> + This functionality is available only on compilers that implement C++ Core Language + <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337">Defect Report 337</a>. + </note> + </mark-failure> + </test> + + <mark-expected-failures> + <test name="tr1_is_polymorphic_test"/> + <toolset name="gcc-2.95.3-stlport-*"/> + <note author="Doug Gregor" refid="3"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="tr1_decay_test"/> + <test name="tr1_extent_test"/> + <test name="tr1_has_nothrow_assign_test"/> + <test name="tr1_has_nothrow_constr_test"/> + <test name="tr1_has_nothrow_copy_test"/> + <test name="tr1_has_trivial_assign_test"/> + <test name="tr1_has_trivial_constr_test"/> + <test name="tr1_has_trivial_copy_test"/> + <test name="tr1_has_trivial_destr_test"/> + <test name="tr1_is_array_test"/> + <test name="tr1_is_base_and_derived_test"/> + <test name="tr1_is_base_of_test"/> + <test name="tr1_is_class_test"/> + <test name="tr1_is_convertible_test"/> + <test name="tr1_is_object_test"/> + <test name="tr1_is_pod_test"/> + <test name="tr1_is_polymorphic_test"/> + <test name="tr1_rank_test"/> + <test name="tr1_remove_all_extents_test"/> + <test name="tr1_remove_bounds_test"/> + <test name="tr1_remove_extent_test"/> + <toolset name="sunpro-5_3-sunos"/> + + <note author="John Maddock"> + The Type Traits library is broken when used with Sunpro-5.3 and the + argument to the template is an array or function type. Most other argument types + do work as expected: in other words the functionality is limited + with this compiler, but not so much as to render the library unuseable. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_decay_test"/> + <test name="tr1_extent_test"/> + <test name="tr1_is_abstract_test"/> + <test name="tr1_is_empty_test"/> + <test name="tr1_is_function_test"/> + <test name="tr1_is_member_func_test"/> + <test name="tr1_is_member_obj_test"/> + <test name="tr1_is_object_test"/> + <test name="tr1_is_reference_test"/> + <test name="tr1_rank_test"/> + <test name="tr1_tricky_function_type_test"/> + <test name="tr1_tky_function_type_test"/> + <test name="test_type_traits"/> + <test name="std_test_type_traits"/> + <toolset name="sun-5.8"/> + + <note author="John Maddock"> + The Type Traits library is broken when used with Sunpro-5.8 and the + argument to the template is a function type. Most other argument types + do work as expected: in other words the functionality is limited + with this compiler, but not so much as to render the library unuseable. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_random"/> + <test name="std_test_random"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + + <note author="John Maddock"> + These failures appear to represent a genuine issue with the + Boost.Random library that has yet to be addressed. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_tuple_tricky"/> + <test name="std_test_tuple_tricky"/> + <toolset name="sun-5.8"/> + + <note author="John Maddock"> + These fail with an internal compiler error: there's no + workaround as yet. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_tky_partial_spec_test"/> + <toolset name="sun-5.9"/> + <note author="John Maddock"> + This fails with an internal compiler error: there's no + workaround as yet. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_boost"/> + <test name="test_hash"/> + <test name="test_random"/> + <test name="test_regex"/> + <toolset name="msvc-7.1_stlport4"/> + + <note author="John Maddock"> + These failures are completely spurious: they're caused by the tests + being run with bjam -j2 and the post-processing not coping with the + resulting output. These failures should clear if these tests + are re-run at some point in the future. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_is_empty_test"/> + <test name="tr1_is_function_test"/> + <test name="tr1_is_member_func_test"/> + <test name="tr1_is_member_obj_test"/> + <test name="tr1_is_reference_test"/> + <test name="tr1_tricky_function_type_test"/> + <test name="tr1_tricky_incomplete_type_test"/> + <test name="tr1_tricky_incomp_type_test"/> + <test name="tr1_tricky_is_enum_test"/> + <toolset name="sunpro-5_3-sunos"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_tricky_function_type_test"/> + <test name="tr1_is_const_test"/> + <test name="tr1_is_volatile_test"/> + <test name="tr1_is_convertible_test"/> + <toolset name="gcc-2*"/> + <note author="John Maddock" refid="2"/> + </mark-expected-failures> + <mark-expected-failures> + <test name="test_array"/> + <test name="std_test_array"/> + <test name="test_array_tricky"/> + <test name="std_test_array_tricky"/> + <test name="test_bind"/> + <test name="std_test_bind"/> + <test name="test_complex"/> + <test name="std_test_complex"/> + <test name="test_function"/> + <test name="std_test_function"/> + <test name="test_random"/> + <test name="std_test_random"/> + <test name="test_reference_wrapper"/> + <test name="std_test_reference_wrapper"/> + <test name="test_regex"/> + <test name="std_test_regex"/> + <test name="test_result_of"/> + <test name="std_test_result_of"/> + <test name="test_shared_ptr"/> + <test name="std_test_shared_ptr"/> + <test name="test_tuple"/> + <test name="std_test_tuple"/> + <toolset name="vc-7"/> + <note author="John Maddock"> + This library is almost unusable with VC7 due to name lookup issues. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="tr1_aligned_storage_test"/> + <toolset name="cw-8.3"/> + <note author="John Maddock"> + Older versions of MWCW incorrectly align pointers to member functions + (they use 12-byte boundaries, rather than a power-of-2 boundary), + leading to alignment_of / aligned_storage + to fail with these types on this compiler. + </note> + </mark-expected-failures> + </library> + + <!-- unordered --> + <library name="unordered"> + <mark-expected-failures> + <test name="move_tests"/> + <toolset name="msvc-*"/> + <toolset name="intel-win-10.1"/> + <toolset name="borland-*"/> + <toolset name="sun-*"/> + <toolset name="hp_css-*"/> + <toolset name="intel-linux-8*"/> + <toolset name="intel-linux-9.0*"/> + <toolset name="acc-pa_risc"/> + <note author="Daniel James"> + This tests whether the container is successfully moved under + different circumstances, and fails if it is copied. Typically if + this one fails, it just means that return value optimization was + not applied. It might be possible to change the test to make it for + the compiler to apply ADL (by not having non-const reference + parameters for the function which returns the container). So this + is an acceptable failure. + </note> + </mark-expected-failures> + </library> + + + <!-- utility/enable_if --> + <library name="utility/enable_if"> + <mark-unusable> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="gcc-2.95.3-*"/> + <note refid="3"/> + </mark-unusable> + + <mark-expected-failures> + <test name="no_disambiguation"/> + <toolset name="gcc-3.2.*"/> + <note refid="3"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="partial_specializations"/> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith" refid="29"/> + </mark-expected-failures> + </library> + + + <!-- utility --> + <library name="utility"> + <test name="addressof_test"> + <mark-failure> + <toolset name="sunpro-5_3-sunos"/> + <note author="D. Gregor" refid="3"/> + </mark-failure> + </test> + <test name="fun_out_iter_example"> + <mark-failure> + <toolset name="como-win32"/> + <note author="B. Dawes" refid="4"/> + </mark-failure> + </test> + <test name="numeric_traits_test"> + <mark-failure> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="A.Meredith"> + Compiler has a problem with BOOST_STATIC_CONSTANT in nested templates + inside class template specializations. + </note> + </mark-failure> + </test> + <test name="result_of_test"> + <mark-failure> + <toolset name="borland-5*"/> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <toolset name="gcc-2.95.3*"/> + <toolset name="sunpro-5_3-sunos"/> + <note refid="3" author="D. Gregor"/> + </mark-failure> + </test> + <mark-expected-failures> + <test name="value_init_test"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Aleksey Gurtovoy"> + This failure is caused by a compiler bug (default-constructed scalar + types are not zero-initialized) that has been fixed in the latest + versions of the compiler (VC 7.1 and greater). + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="value_init_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Niels Dekker"> + This test typically fails on Borland C++, because of an issue described by + <a href="http://svn.boost.org/trac/boost/ticket/1459"> + ticket #1459, "value_initialized leaves data uninitialized, + when using Borland"</a>. The issue is caused by a + compiler bug, reported at the website of Codegear/Borland: + <a href="http://qc.codegear.com/wc/qcmain.aspx?d=51854"> + Report #51854, "Value-initialization: POD struct + should be zero-initialized"</a>. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="value_init_test"/> + <toolset name="gcc-3.3*"/> + <toolset name="gcc-3.4*"/> + <toolset name="gcc-4.0*"/> + <toolset name="gcc-4.1*"/> + <toolset name="gcc-4.2*"/> + <toolset name="gcc-mingw-3.4*"/> + <note author="Niels Dekker"> + This test typically fails on GCC, because of an issue described by + <a href="http://svn.boost.org/trac/boost/ticket/1491"> + ticket #1491, "value_initialized leaves data uninitialized, + when using GCC"</a>. The issue is caused by some GCC compiler bugs: + <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111"> + Value-initialization of POD base class doesn't initialize members</a>, + reported by Jonathan Wakely, and + <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916"> + Default constructor fails to initialize array members</a>, + reported by Michael Elizabeth Chastain. + </note> + </mark-expected-failures> + <mark-expected-failures> + <test name="operators_test"/> + <toolset name="gcc-3.4.5_linux_x86_64"/> + <note author="Vladimir Prus"> + The test takes more that 30 minutes to compile and the + compilation is automatically killed. It is likely caused + by the compiler bug, but it unknown how much this + bug affects regular use of the operators library. Is it + also unknown if the test can be refactored so that + not to trigger this bug. + </note> + </mark-expected-failures> + </library> + + + <!-- variant --> + <library name="variant"> + <mark-unusable> + <toolset name="mipspro"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="hp_cxx-65*"/> + <note refid="2"/> + </mark-unusable> + <test name="recursive_variant_test"> + <mark-failure> + <toolset name="como-win32"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note refid="3"/> + </mark-failure> + </test> + <mark-expected-failures> + <test name="recursive_variant_test"/> + <test name="variant_test1"/> + <test name="variant_test5"/> + <test name="variant_visit_test"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="borland-5.9*"/> + <note author="Aleksey Gurtovoy" refid="3"/> + </mark-expected-failures> + <test name="variant_reference_test"> + <mark-failure> + <toolset name="cw-8.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note refid="3"/> + </mark-failure> + <mark-failure> + <toolset name="iw-7_1*"/> + <toolset name="intel-7.1*"/> + <note refid="2"/> + </mark-failure> + </test> + </library> + + <!-- wave --> + <library name="wave"> + <mark-unusable> + <toolset name="msvc-6.5*"/> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="borland-5.5*"/> + <toolset name="borland-5.6*"/> + <toolset name="borland-5.8*"/> + <toolset name="gcc-2.95.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.5.3-linux"/> + <toolset name="gcc-2.95.3-stlport-4.6.2-linux"/> + <toolset name="hp_cxx-65*"/> + <note refid="29"/> + </mark-unusable> + <mark-unusable> + <toolset name="msvc-7.0"/> + <note> + This toolset isn't supported because of the used Spirit V1.8.x, which in turn is + not usable with this toolset. + </note> + </mark-unusable> + + <mark-unusable> + <toolset name="borland-5.9*"/> + <note author="Alisdair Meredith"> + This toolset isn't supported because of the used multi_index library, which in turn is + not usable with this toolset. + </note> + </mark-unusable> + + <mark-expected-failures> + <test name="testwave"/> + <!-- toolset name="cw-9_5-darwin"/ --> + <toolset name="cw-8*"/> + <note author="Rene Rivera" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testwave"/> + <toolset name="gcc-3.2.3-linux"/> + <toolset name="gcc-3.2.3_linux"/> + <toolset name="gcc-3.3.6-linux"/> + <toolset name="gcc-3.3.6"/> + <note author="Hartmut Kaiser" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testwave"/> + <!-- <toolset name="qcc-3.3.5_gpp"/> --> + <toolset name="qcc-3.3.5*gpp"/> + <note author="Hartmut Kaiser" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testwave_dll"/> + <toolset name="mingw-3*"/> + <note author="Hartmut Kaiser" refid="29"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="testwave_dll"/> + <toolset name="cw-9.4"/> + <note author="Hartmut Kaiser" refid="2"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_slex_lexer"/> + <toolset name="hp_cxx-65*"/> + <note author="Hartmut Kaiser" refid="2"/> + </mark-expected-failures> + + </library> + + <!-- xpressive --> + <library name="xpressive"> + + <mark-unusable> + <toolset name="gcc-2.95.3*"/> + <toolset name="msvc-6.5*"/> + <toolset name="msvc-7.0"/> + <note author="Eric Niebler"> + These compilers do not support class template partial + specialization. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="borland-5*"/> + <note author="Eric Niebler"> + Boost.Fusion doesn't work on this compiler. + </note> + </mark-unusable> + <mark-unusable> + <toolset name="cw-8.3"/> + <note author="Eric Niebler"> + This compiler doesn't support SFINAE / enable_if + </note> + </mark-unusable> + <mark-unusable> + <toolset name="dmc*"/> + <note author="Eric Niebler"> + Digital Mars cannot seem to handle dependent default template parameters, + such as "template < class T, bool B = is_foo < T > ::value >" + </note> + </mark-unusable> + <mark-unusable> + <toolset name="sunpro-5_3-sunos"/> + <toolset name="sun-5.7"/> + <toolset name="sun-5.8"/> + <toolset name="sun-5.9"/> + <note refid="17"/> + </mark-unusable> + + <mark-expected-failures> + <test name="test_actions"/> + <toolset name="acc"/> + <note author="Eric Niebler" refid="43"/> + </mark-expected-failures> + + <mark-expected-failures> + <test name="test_symbols"/> + <toolset name="acc"/> + <note author="Eric Niebler" refid="43"/> + </mark-expected-failures> + + </library> + + <!-- /////////////// Standard note definitions /////////////// --> + + <note id="0"> + This test fails only intermittently. + </note> + + <note id="1"> + The failure is caused by a problem in Boost code. The Boost developers are aware of + the problem and plan to fix it. + </note> + + <note id="2"> + The failure is caused by a compiler bug. + </note> + + <note id="3"> + The failure is caused by a compiler bug, which has been reported to the compiler + supplier (or is already known to them). + </note> + + <note id="4"> + The failure is caused by a standard library bug. + </note> + + <note id="5"> + The failure is caused by a standard library bug, which has been reported to the + standard library supplier (or is already known to them). + </note> + + <note id="6"> + The failure is probably caused by the test code, harness, or configuration. Thus, + it may not affect users of the library. + </note> + + <note id="9"> + The failure is serious and likely to prevent all use of this Boost library with this compiler. + </note> + + <note id="10"> + The failure is serious and likely to prevent all use of this Boost library with this + compiler. The failure is caused by a compiler bug, which has been reported to the compiler + supplier (or is already known to them). + </note> + + <note id="14"> + The failure is caused by a platform API bug. + </note> + + <note id="15"> + The failure is caused by a platform API bug, which has been reported to the platform API + supplier (or is already known to them). + </note> + + <note id="16"> + The failure is not serious and will not affect most users. The library degrades gracefully. + </note> + + <note id="17"> + This compiler's bugs are not supported by the library. + </note> + + <note id="18"> + Locales missing or adequately supported by this compiler. + </note> + + <note id="19"> + Missing or inadequate wchar/wstring/wstream support for this compiler. + </note> + + <note id="20"> + No std iterator traits for this compiler. + </note> + + <note id="21"> + Library has limited input/output support due to compiler inadequacies. + </note> + + <note id="22"> + No high precision clock for this platform. + </note> + + <note id="23"> + A bug in standard library prevents passing std::set from DLL to + application. A fixed <tree> header is available from + http://www.dinkumware.com/vc_fixes.html. + </note> + + <note id="24"> + Although the documentation from the Comeau website would make it appear + that windows DLL's are supported using the --windows option, after some + experimentation we have been unsuccessful in making dll configurations + work correctly. + </note> + + <note id="25"> + The failure is caused by a runtime limitation. Locale support is only + available with the static linked variant of the runtime. Generally + the dynamic linked variant is required when building dynamic modules, + DLL, <code>so</code>, etc. + </note> + + <note id="26"> + This failure is caused by a compiler bug with no known workaround. + Patches are welcome! + </note> + + <note id="27" > + This failure is caused by bugs in the standard library implementation and/or + bugs in the compiler. + </note> + + <note id="28"> + Unresearched failure -- please contact library developers for more + information about possible causes. + </note> + + <note id="29"> + The test fails due to unresearched issues. The library + developers are aware of this failure, but need help with + investigating/addressing it for future releases. + </note> + + <note id="30"> + The support for this deficient compiler will be dropped starting + from Boost 1.33.0 release. Please use one of the previous Boost + releases if you need the library to work on this compiler. + </note> + + <note id="31"> + This failure is caused by compiler bugs or limitations. Some advanced + or esoteric library features may be unavailable or only partially available. + This does not impact most common uses of the library. + </note> + + <note id="32"> + This failure is caused by a compiler bug. Certain code constructs that should + fail compilation are accepted by the compiler. This can mask some programming + errors, but does not impact the usability of the library. + </note> + + <note id="33"> + The failures are caused by the wrong handling of the + <code>std::internal</code> flag in the iostreams implementation of the + standard library used on that compiler/platform combo. Apart from that, + the format library works as expected. + </note> + + <note id="34"> + The failures are caused by the fact that the iword and pword arrays seem + to share the same memory area in the iostreams implementation of the + standard library used on that compiler/platform combo. As long as you + stay clear of iword and pword, the library should work ok. + </note> + + <note id="35"> + This failure occurs only when using shared libraries for this + compiler and platform, although the same programs should work + properly when using static libraries. This problem has not + been researched. + </note> + + <note id="36"> + Wide character support is disabled in the GNU Standard C++ library as + supplied on the QNX Neutrino version 6.3.0 distribution. + </note> + + <note id="37"> + This problem is due to the non-conforming STLport + implementation of vector's swap: it can be easily + reproduced with the following code snippet: + + typedef std::vector<int> vector_type; + typedef vector_type::reference reference_type; + + vector_type v1(4u, 1); + vector_type v2(7u, 0); + + reference_type ref = v1[2]; + int x = ref; + + std::swap(v1, v2); + BOOST_CHECK(v2[2] == x); // ok + v2[2] = 1 - v2[2]; + BOOST_CHECK(ref != x); // oops + </note> + + <note id="38"> + When compiling this test, aCC6 runs out of memory. The HP + compiler group is aware of this issue and is working on the fix. + </note> + + <note id="39"> + This test assumes native typeof support. + </note> + + <note id="40"> + This test assumes compiler support for rvalue references. + </note> + + <note id="41"> + These tests rely on the ability of an std::deque container to be + constructed off two input iterators. Unfortunately, the Rogue Wave + library version 2.2 and higher assumes iterator which has + and - + operators which only random access iterator is required to provide. + </note> + + <note id="42"> + Internal compiler error: GCC Bugzilla Bug 33580. + This is a regression in the gcc 4.2 series. + </note> + + <note id="43"> + These test failures are reported to be + under investigation at HP's compiler lab. + </note> + + <note id="44"> + This compiler does not support gcc stdcall function attribute. + </note> + + <note id="45"> + The Rogue Wave standard library version used by this compiler provides + a faulty vector<bool> iterator, which is not symmetric. There is an + associated bug report in the Rogue Wave bug tracking system for this + problem. + </note> + + <note id="46"> + The test does not compile, most likely because of new version of EDG Front End + implementing Core Issue 574. In the HP bug tracking system, it is tracked as + QuIX ID: QXCR1000804484. + </note> + +</explicit-failures-markup> diff --git a/status/explicit-failures.xsd b/status/explicit-failures.xsd new file mode 100644 index 0000000000..6c77750720 --- /dev/null +++ b/status/explicit-failures.xsd @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + <xs:element name="explicit-failures-markup"> + <xs:complexType> + <xs:sequence> + <xs:element ref="mark-toolset" maxOccurs="unbounded"/> + <xs:element ref="library" maxOccurs="unbounded"/> + <xs:element ref="note" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="mark-toolset"> + <xs:complexType> + <xs:sequence> + <xs:element name="title" type="xs:string" minOccurs="0"/> + <xs:element name="description" type="xs:string" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="status" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + + <xs:element name="library"> + <xs:complexType> + <xs:sequence> + <xs:element ref="mark-unusable" minOccurs="0" maxOccurs="unbounded"/> + <xs:sequence> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element ref="test"/> + <xs:element ref="mark-expected-failures"/> + </xs:choice> + </xs:sequence> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + + <xs:element name="mark-unusable"> + <xs:complexType> + <xs:sequence> + <xs:element ref="toolset" maxOccurs="unbounded"/> + <xs:element ref="note" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="test"> + <xs:complexType> + <xs:sequence> + <xs:element ref="mark-failure" minOccurs="0" maxOccurs="unbounded"/> + <xs:element ref="toolset" minOccurs="0"/> + <xs:element ref="note" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="category" type="xs:string"/> + </xs:complexType> + </xs:element> + + <xs:element name="mark-expected-failures"> + <xs:complexType> + <xs:sequence> + <xs:element ref="test" maxOccurs="unbounded"/> + <xs:element ref="toolset" maxOccurs="unbounded"/> + <xs:element ref="note"/> + </xs:sequence> + <xs:attribute name="reason" type="xs:string"/> + </xs:complexType> + </xs:element> + + <xs:element name="mark-failure"> + <xs:complexType> + <xs:sequence> + <xs:element ref="toolset" maxOccurs="unbounded"/> + <xs:element ref="note" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="note"> + <xs:complexType mixed="true"> + <xs:sequence> + <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="refid" type="xs:string"/> + <xs:attribute name="author" type="xs:string"/> + <xs:attribute name="date" type="xs:string"/> + <xs:attribute name="id" type="xs:string"/> + </xs:complexType> + </xs:element> + + <xs:element name="toolset"> + <xs:complexType> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + +</xs:schema> diff --git a/tools/Jamfile.v2 b/tools/Jamfile.v2 new file mode 100644 index 0000000000..d7fab287a8 --- /dev/null +++ b/tools/Jamfile.v2 @@ -0,0 +1,57 @@ +# Copyright 2005 Rene Rivera +# Copyright 2005 Hartmut Kaiser +# Copyright 2005 John Maddock +# Copyright 2003 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) + + +# Jamfile which builds all the tools. + +project + : + requirements + <link>static + ; + +use-project /boost/regression : regression/build ; + +TOOLS = + bcp//bcp + inspect/build//inspect + quickbook//quickbook + /boost/regression//compiler_status + /boost/regression//library_status + /boost/regression//process_jam_log + wave/build//wave + ; + +install dist-bin + : + $(TOOLS) + : + <install-type>EXE + <location>../dist/bin + : + release + ; + +install dist-lib + : + $(TOOLS) + : + <install-type>LIB + <location>../dist/lib + : + release + ; + +local patterns = *.dtd *.xml *.xsl LICENSE ; +local dirs = boostbook/dtd boostbook/xsl ; +install dist-share-boostbook + : + [ glob $(dirs)/$(patterns) $(dirs)/*/$(patterns) $(dirs)/*/*/$(patterns) ] + : + <location>../dist/share + <install-source-root>. + ; diff --git a/tools/bcp b/tools/bcp new file mode 160000 +Subproject 1bb9415f1ffea270ba724c41e629ae4526cdf06 diff --git a/tools/boostbook b/tools/boostbook new file mode 160000 +Subproject 4d71fb4f6a09b8e5d6ac9fc13c17b8a65907a50 diff --git a/tools/build b/tools/build new file mode 160000 +Subproject 38552205516a046d6c90bc489a895a641ded4be diff --git a/tools/common/time_string.hpp b/tools/common/time_string.hpp new file mode 100644 index 0000000000..7f112e6976 --- /dev/null +++ b/tools/common/time_string.hpp @@ -0,0 +1,53 @@ +// ---- time_string: thin wrapper around std::strftime -------- // +// +// Copyright Gennaro Prota 2006 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// ------------------------------------------------------------------ +// +// $Id$ + +#ifndef BOOST_TIME_STRING_HPP_GP_20060731 +#define BOOST_TIME_STRING_HPP_GP_20060731 + +#include <string> +#include <ctime> + +namespace boost { + +// Many of the boost tools just need a quick way to obtain +// a formatted "run date" string or similar. This is one. +// +// In case of failure false is returned and result is +// unchanged. +// +inline +bool time_string(std::string & result + , const std::string & format = "%X UTC, %A %d %B %Y") +{ + // give up qualifying names and using std::size_t, + // to avoid including "config.hpp" + using namespace std; + + const int sz = 256; + char buffer [ sz ] = { 0 }; + const time_t no_cal_time ( -1 ); + time_t tod; + + const bool ok = + time ( &tod ) != no_cal_time + && strftime( buffer, sz, format.c_str(), gmtime( &tod ) ) != 0 + ; + + if (ok) + result = buffer; + + return ok; +} + +} + +#endif // include guard diff --git a/tools/index.html b/tools/index.html new file mode 100644 index 0000000000..0d9b03a37a --- /dev/null +++ b/tools/index.html @@ -0,0 +1,107 @@ +<!-- Copyright 2004 Aleksey Gurtovoy --> +<!-- Copyright 2003 Beman Dawes --> +<!-- Copyright 2003 Douglas Gregor --> +<!-- Copyright 2005 Eric Niebler --> +<!-- Copyright 2005 Hartmut Kaiser --> +<!-- Copyright 2004 John Maddock --> +<!-- 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) --> + +<html> + <head> + <title>Boost Tools</title> + <meta http-equiv="Content-Language" content="en-us"> + <meta name="GENERATOR" content="Microsoft FrontPage 5.0"> + <meta name="ProgId" content="FrontPage.Editor.Document"> + <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> + <link rel="stylesheet" href="../doc/html/boostbook.css" type="text/css" /> + </head> + <body bgcolor="#ffffff"> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> + <tr> + <td width="277"> + <a href="../index.html"> + <img src="../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="337" align="middle"> + <font size="7">Tools</font> + </td> + </tr> + </table> + + <table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" height="26" width="681"> + <tr> + <td height="16" width="671"><a href="../more/getting_started/index.html">Getting Started</a> <font color="#FFFFFF"> + </font> <a href="../libs/libraries.htm"> + Libraries</a><a href="../tools/index.html"> </a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org">Web Site</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/users/news/">News</a> <font color="#FFFFFF"> + </font> <a href="http://www.boost.org/community/">Community</a> <font color="#FFFFFF"> + </font> + <a href="http://www.boost.org/users/faq.html">FAQ</a> <font color="#FFFFFF"> + </font> <a href="../more/index.htm">More Info</a> </td> + </tr> + </table> + + <p>Boost developers, testers, and maintainers have developed various tools to + help with the administration of the Boost Libraries. Like everything else about + Boost, these tools are available in source form, and are part of the regular + Boost distribution.</p> + <p>Users may find these tools useful when porting Boost libraries to a new + platform, or for use with their own applications.</p> + <ul> + <li> + <a href="build/index.html">Boost.Build</a> - The Boost build system, including + the full Boost version of the jam sources.<br> + + <li> + <a href="regression/index.html">Regression</a> - The Boost regression testing + system reporting sources.<br> + <li> + <a href="release/index.html">Release</a> - Scripts used to build the + release tarballs and zips.<br> + + <li> + <a href="inspect/index.html">Inspect </a>- The inspection tool used to detect + errors in the Boost directory hierarchy.<br> + + <li> + <a href="../doc/html/boostbook.html">BoostBook</a> - A Boost documentation + system, based on <a href="http://www.docbook.org/">DocBook</a> and the <a href="http://www.w3.org/Style/XSL/"> + Extensible Stylesheet Language (XSL)</a>, used by some Boost libraries.<br> + + <li> + <a href="bcp/bcp.html">bcp</a> - A utility to extract subsets of Boost; to + determine which parts of Boost your code is using; and to print reports on + Boost usage (including Licence information).<br> + + <li> + <a href="quickbook/index.html">QuickBook</a> - QuickBook is a WikiWiki style + documentation tool geared towards C++ documentation using simple rules and markup + for simple formatting tasks. QuickBook generates <a href="../doc/html/boostbook.html"> + BoostBook</a> XML.<br> + + <li> + <a href="../libs/wave/doc/wave_driver.html">Wave</a> - A Standards conformant C/C++ + preprocessor usable on top of any other compiler. Usable for instance for the debugging + of the expansion of macros in your code or as a replacement for your build in + preprocessor. <br> + </li> + </ul> + <hr> + <p>Revised +<!--webbot bot="Timestamp" s-type="EDITED" +s-format="%d %b %Y" startspan -->13 Mar 2008<!--webbot bot="Timestamp" endspan i-checksum="14911" --></p> + +<p>© Copyright Beman Dawes 2003<br> +© Copyright Douglas Gregor 2003<br> +© Copyright Aleksey Gurtovoy 2004<br> +© Copyright John Maddock 2004<br> +© Copyright Eric Niebler 2005<br> +© Copyright Hartmut Kaiser 2005<br> +<br> +Distributed under the Boost Software License, Version 1.0. +(See file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> +or <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>) </p> + </body> +</html> diff --git a/tools/inspect b/tools/inspect new file mode 160000 +Subproject 7907e236574b2742f7cf06b562b0b82b97df138 diff --git a/tools/litre b/tools/litre new file mode 160000 +Subproject 17e986bfedc183699a85d0582f467d44e063eb7 diff --git a/tools/make-cputime-page.pl b/tools/make-cputime-page.pl new file mode 100644 index 0000000000..e6969be597 --- /dev/null +++ b/tools/make-cputime-page.pl @@ -0,0 +1,54 @@ +#!/usr/bin/perl -w + +# Copyright 2004 Aleksey Gurtovoy +# Copyright 2001 Jens Maurer +# 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) + +use strict; + +my $filename; +my $compiler; +my $time = 0; +my $ct = 0; +my $first = 2; + +print "<html>\n<head>\n<title>\nCompile Times</title>\n</head>\n\n"; +print "<body bgcolor=\"#ffffff\" text=\"#000000\">\n"; +print "<img border=\"0\" src=\"boost.png\" width=\"277\" height=\"86\">"; +print "<p>\n"; +print "Compile time for each successful regression test in seconds.\n"; +print "<p>\n"; + +print "<table border=\"1\">\n"; +print "<tr><td>Test</td>\n"; + +while(<>) { + if(/^\*\*\* (.*) \*\*\*$/) { + $filename = $1; + $first = ($first == 0 ? 0 : $first-1); + if($first == 0) { + print "</tr>\n\n<tr align=right>\n<td align=left><a href=\"http://www.boost.org/$filename\">$filename</a></td>\n"; + } + } elsif(/^\*\* (.*)/) { + $compiler = $1; + if($first) { + print "<td>$compiler</td>\n"; + } else { + $ct = 1; + } + } elsif($ct && /^CPU time: ([.0-9]*) s user, ([.0-9]*) s system/) { + $time = $1 + $2; + } elsif($ct && /^Pass$/) { + printf "<td>%.02f</td>\n", $time; + $ct = 0; + } elsif($ct && /^Fail$/) { + print "<td>-</td>\n"; + $ct = 0; + } +} + +print "</tr>\n"; +print "</table>\n"; +print "</body>\n</html>\n"; + diff --git a/tools/quickbook b/tools/quickbook new file mode 160000 +Subproject 84d46be94f4ef3053cd6a2dbdb6d91974df1870 diff --git a/tools/regression/build/Jamroot.jam b/tools/regression/build/Jamroot.jam new file mode 100644 index 0000000000..c08eab5fee --- /dev/null +++ b/tools/regression/build/Jamroot.jam @@ -0,0 +1,78 @@ +# Regression test status reporting tools build Jamfile + +if [ glob ../../../boost-build.jam ] +{ + use-project /boost : ../../.. ; +} +else +{ + import modules ; + use-project /boost : [ MATCH --boost=(.*) : [ modules.peek : ARGV ] ] ; +} + +if ! [ glob ../src/process_jam_log.cpp ] +{ + project boost/regression + : + source-location .. + ; +} +else +{ + project boost/regression + : + source-location ../src + ; +} + +obj tiny_xml + : + detail/tiny_xml.cpp + : + <define>BOOST_ALL_NO_LIB=1 + <define>_CRT_SECURE_NO_WARNINGS + <use>/boost//headers + : + release + ; +explicit tiny_xml ; + +exe process_jam_log + : + process_jam_log.cpp + tiny_xml + /boost/filesystem//boost_filesystem/<link>static + : + <define>BOOST_ALL_NO_LIB=1 + <define>_CRT_SECURE_NO_WARNINGS + <use>/boost//headers + : + release + ; +#~ explicit process_jam_log ; + +exe compiler_status + : + compiler_status.cpp + tiny_xml + /boost/filesystem//boost_filesystem/<link>static + : + <define>BOOST_ALL_NO_LIB=1 + <use>/boost//headers + : + release + ; +explicit compiler_status ; + +exe library_status + : + library_status.cpp + tiny_xml + /boost/filesystem//boost_filesystem/<link>static + : + <define>BOOST_ALL_NO_LIB=1 + <use>/boost//headers + : + release + ; +explicit library_status ; diff --git a/tools/regression/build/vcide/compiler_status.vcproj b/tools/regression/build/vcide/compiler_status.vcproj new file mode 100644 index 0000000000..600981c9df --- /dev/null +++ b/tools/regression/build/vcide/compiler_status.vcproj @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="compiler_status" + ProjectGUID="{81F22EF9-A1B8-46CB-9C2D-56FD4327B942}" + Keyword="MakeFileProj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="cd ..\..\..\..\tools\regression\build +..\..\jam\src\bin.ntx86\bjam.exe compiler_status.exe variant=debug" + ReBuildCommandLine="cd ..\..\..\..\tools\regression\build +...\..\jam\src\bin.ntx86\bjam.exe -a compiler_status.exe variant=debug" + CleanCommandLine="cd ..\..\..\..\tools\regression\build +call bjam --v2 msvc-7.1 debug clean +" + Output="compiler_status.exe"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam compiler_status variant=release link=static" + ReBuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam -a compiler_status variant=release link=static" + CleanCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam clean" + Output="..\..\..\..\bin.v2\tools\regression\build\msvc-7.1\release\link-static\compiler_status.exe"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath="..\..\compiler_status.cpp"> + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/tools/regression/build/vcide/library_status.vcproj b/tools/regression/build/vcide/library_status.vcproj new file mode 100644 index 0000000000..bd069fdaf6 --- /dev/null +++ b/tools/regression/build/vcide/library_status.vcproj @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="library_status" + ProjectGUID="{465BDB84-92B5-4C60-AF26-8BD1A61A089E}" + Keyword="MakeFileProj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam library_status variant=debug link=static" + ReBuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam -a library_status variant=debug link=static" + CleanCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam clean" + Output="..\..\..\..\bin.v2\tools\regression\build\msvc-7.1\debug\link-static\library_status.exe"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam library_status variant=release link=static" + ReBuildCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam -a library_status variant=release link=static" + CleanCommandLine="cd .. +..\..\jam\src\bin.ntx86\bjam clean" + Output="..\..\..\..\bin.v2\tools\regression\build\msvc-7.1\release\link-static\library_status.exe"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath="..\..\library_status.cpp"> + </File> + <File + RelativePath="..\..\detail\tiny_xml.cpp"> + </File> + <File + RelativePath="..\..\detail\tiny_xml.hpp"> + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/tools/regression/build/vcide/process_jam_log.sln b/tools/regression/build/vcide/process_jam_log.sln new file mode 100644 index 0000000000..29833cc0e1 --- /dev/null +++ b/tools/regression/build/vcide/process_jam_log.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "process_jam_log", "process_jam_log.vcproj", "{9A751791-929F-496A-8DE7-B61020619BFA}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9A751791-929F-496A-8DE7-B61020619BFA}.Debug.ActiveCfg = Debug|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Debug.Build.0 = Debug|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Release.ActiveCfg = Release|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/tools/regression/build/vcide/process_jam_log.vcproj b/tools/regression/build/vcide/process_jam_log.vcproj new file mode 100644 index 0000000000..5b7c12799e --- /dev/null +++ b/tools/regression/build/vcide/process_jam_log.vcproj @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="process_jam_log"
+ ProjectGUID="{9A751791-929F-496A-8DE7-B61020619BFA}"
+ RootNamespace="process_jam_log"
+ Keyword="MakeFileProj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="0">
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="cd ..\..\..\..\tools\regression\build
+..\..\jam\src\bin.ntx86\bjam.exe process_jam_log variant=debug
+"
+ ReBuildCommandLine="cd ..\..\..\..\tools\regression\build
+call bjam --v2 msvc-7.1 debug clean
+call bjam --v2 msvc-7.1 debug"
+ CleanCommandLine="cd ..\..\..\..\tools\regression\build
+call bjam --v2 msvc-7.1 debug clean
+"
+ Output="../../../../bin.v2/tools/regression/build/msvc-7.1/debug/link-static/process_jam_log.exe"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="0">
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="cd ..
+..\..\jam\src\bin.ntx86\bjam process_jam_log variant=release link=static"
+ ReBuildCommandLine="cd ..
+..\..\jam\src\bin.ntx86\bjam -a process_jam_log variant=release link=static"
+ CleanCommandLine="cd ..
+..\..\jam\src\bin.ntx86\bjam clean"
+ Output="..\..\..\..\bin.v2\tools\regression\build\msvc-7.1\release\link-static\process_jam_log.exe"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ <File
+ RelativePath=".\readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/tools/regression/build/vcide/regression.sln b/tools/regression/build/vcide/regression.sln new file mode 100644 index 0000000000..170f08037f --- /dev/null +++ b/tools/regression/build/vcide/regression.sln @@ -0,0 +1,37 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compiler_status", "compiler_status.vcproj", "{81F22EF9-A1B8-46CB-9C2D-56FD4327B942}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "process_jam_log", "process_jam_log.vcproj", "{9A751791-929F-496A-8DE7-B61020619BFA}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library_status", "library_status.vcproj", "{465BDB84-92B5-4C60-AF26-8BD1A61A089E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {81F22EF9-A1B8-46CB-9C2D-56FD4327B942}.Debug.ActiveCfg = Debug|Win32 + {81F22EF9-A1B8-46CB-9C2D-56FD4327B942}.Debug.Build.0 = Debug|Win32 + {81F22EF9-A1B8-46CB-9C2D-56FD4327B942}.Release.ActiveCfg = Release|Win32 + {81F22EF9-A1B8-46CB-9C2D-56FD4327B942}.Release.Build.0 = Release|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Debug.ActiveCfg = Debug|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Debug.Build.0 = Debug|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Release.ActiveCfg = Release|Win32 + {9A751791-929F-496A-8DE7-B61020619BFA}.Release.Build.0 = Release|Win32 + {465BDB84-92B5-4C60-AF26-8BD1A61A089E}.Debug.ActiveCfg = Debug|Win32 + {465BDB84-92B5-4C60-AF26-8BD1A61A089E}.Debug.Build.0 = Debug|Win32 + {465BDB84-92B5-4C60-AF26-8BD1A61A089E}.Release.ActiveCfg = Release|Win32 + {465BDB84-92B5-4C60-AF26-8BD1A61A089E}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/tools/regression/doc/index.html b/tools/regression/doc/index.html new file mode 100644 index 0000000000..58bbd9d0e2 --- /dev/null +++ b/tools/regression/doc/index.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Language" content="en-us" /> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> + <link rel="stylesheet" type="text/css" href= + "../../../doc/html/boostbook.css" /> + + <title>Regression Test Reporting Tools</title> +</head> + +<body> + <h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align= + "center" width="277" height="86" /> Regression Test Reporting Tools</h1> + + <p>Boost regression testing uses <a href= + "../../build/index.html">Boost.Build</a> to run the actual builds and + tests. A separate set of tools is used to generate the actual status + reports.</p> + + <ul> + <li><a href="instructions.html">Instructions</a> for running the regression + tests</li> + <li><a href="../src/process_jam_log.cpp">process_jam_log.cpp</a> - + Processes the bjam outputs, creating a file named test_log.xml for each + test encountered.</li> + + <li><a href="../src/compiler_status.cpp">compiler_status.cpp</a> - + Generates HTML status tables from test_log.xml and other files.</li> + + <li><a href="../build/Jamfile.v2">Jamfile.v2</a> - Builds process_jam_log + and compiler_status executables.</li> + + <li><a href="library_status.html">Library Status</a> - Runs test programs + for one or all boost libraries on your local installation and generates + complete tables to show which combinations of libraries, compilers, + compiler settings pass and fail at your local installation.</li> + </ul> + <hr /> + + <p>Revised $Date$</p> + + <p>Copyright Beman Dawes 2003.</p> + + <p>Copyright Rene Rivera 2007.</p> + + <p>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p> +</body> +</html>
\ No newline at end of file diff --git a/tools/regression/doc/instructions.html b/tools/regression/doc/instructions.html new file mode 100644 index 0000000000..bc74cc6b47 --- /dev/null +++ b/tools/regression/doc/instructions.html @@ -0,0 +1,109 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<title>Running Boost Regression Tests</title> +<link rel="stylesheet" type="text/css" href="../../../doc/html/minimal.css"> +</head> + +<body> + +<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="831"> + <tr> + <td width="277"> +<a href="../../../../index.htm"> +<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="531" align="middle"> + <font size="7">Running Boost Regression Tests</font> + </td> + </tr> +</table> + +<h2>Requirements</h2> +<ul> + <li>Python 2.3 or later.<br> + </li> + <li>Subversion 1.4 or later.<br> + </li> + <li>At least 5 gigabytes of disk space per compiler to be tested.</li> +</ul> +<h2>Step by step instructions</h2> +<ol> + <li>Create a new directory for the branch you want to test.<br> + </li> + <li>Download the + <a href="http://svn.boost.org/svn/boost/trunk/tools/regression/src/run.py"> + run.py</a> script into that directory.<br> + </li> + <li>Run "<code>python run.py [options] [commands]</code>".</li> +</ol> +<dl> + <dd> + <pre>commands: cleanup, collect-logs, get-source, get-tools, patch, +regression, setup, show-revision, test, test-clean, test-process, +test-run, update-source, upload-logs + +options: + -h, --help show this help message and exit + --runner=RUNNER runner ID (e.g. 'Metacomm') + --comment=COMMENT an HTML comment file to be inserted in the + reports + --tag=TAG the tag for the results + --toolsets=TOOLSETS comma-separated list of toolsets to test with + --incremental do incremental run (do not remove previous + binaries) + --timeout=TIMEOUT specifies the timeout, in minutes, for a single + test run/compilation + --bjam-options=BJAM_OPTIONS + options to pass to the regression test + --bjam-toolset=BJAM_TOOLSET + bootstrap toolset for 'bjam' executable + --pjl-toolset=PJL_TOOLSET + bootstrap toolset for 'process_jam_log' + executable + --platform=PLATFORM + --user=USER Boost SVN user ID + --local=LOCAL the name of the boost tarball + --force-update=FORCE_UPDATE + do an SVN update (if applicable) instead of a + clean checkout, even when performing a full run + --have-source=HAVE_SOURCE + do neither a tarball download nor an SVN update; + used primarily for testing script changes + --proxy=PROXY HTTP proxy server address and port + (e.g.'<a rel="nofollow" href="http://www.someproxy.com:3128'" target="_top">http://www.someproxy.com:3128'</a>) + --ftp-proxy=FTP_PROXY + FTP proxy server (e.g. 'ftpproxy') + --dart-server=DART_SERVER + the dart server to send results to + --debug-level=DEBUG_LEVEL + debugging level; controls the amount of + debugging output printed + --send-bjam-log send full bjam log of the regression run + --mail=MAIL email address to send run notification to + --smtp-login=SMTP_LOGIN + STMP server address/login information, in the + following form: + <user>:<password>@<host>[:<port>] + --skip-tests=SKIP_TESTS + do not run bjam; used for testing script changes</pre> + </dd> +</dl> +<p>To test trunk use "<code>--tag=trunk</code>" (the default), and to test the +release use "<code>--tag=branches/release</code>". Or substitute any Boost tree +of your choice.</p> + +<hr> + +<p>© Copyright Rene Rivera, 2007<br> +Distributed under the Boost Software License, Version 1.0. See +<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p> + +<p>Revised +<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->November 23, 2007<!--webbot bot="Timestamp" endspan i-checksum="39587" --> </font> +</p> + +</body>
\ No newline at end of file diff --git a/tools/regression/doc/library_status.html b/tools/regression/doc/library_status.html new file mode 100644 index 0000000000..028e54c6c5 --- /dev/null +++ b/tools/regression/doc/library_status.html @@ -0,0 +1,460 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Language" content="en-us" /> + <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> + <link rel="stylesheet" type="text/css" href= + "../../../doc/html/boostbook.css" /> + + <title>Libary Status</title> + <style type="text/css"> +/*<![CDATA[*/ + span.c3 {color: #FF0000; font-style: italic} + a.c2 {font-style: italic} + td.c1 {font-style: italic} + /*]]>*/ + </style> +</head> + +<body> + <table border="0"> + <tr> + <td><img border="0" src="../../../boost.png" width="277" height="86" + alt="boost.png (6897 bytes)" /></td> + + <td> + <h1>Generating Library Status Tables</h1> + </td> + </tr> + </table> + + <h3>Purpose</h3>Any time one considers using a library as large and complex + as the Boost libraries, he must have a way of validating the the library + functions in his environment. This should be done when the library is + installed and anytime questions are raised regarding its applicabililty + and/or its usage. + + <p>The procedures described here permit a user to run any combination of + tests on any or all libraries and generate a set of convenient tables which + show which libraries pass which tests under what conditions.</p> + + <h3>Preliminaries</h3>Generating these tables requires a couple of utility + programs: <code>process_jam_log</code> and <code>library_status</code>. + These can be built by moving to the directory + <code>tools/regression/build</code> and invoking bjam. If all goes well + these utility programs will be found in the directory + <code>dist/bin</code>. From there they should be moved to a place in the + current path. + + <h3>Running Tests for One Library</h3> + + <ol> + <li>Start from your command line environment.</li> + + <li>set the current directory to:../libs/<library name>/test</li> + + <li>Invoke one of the following: + + <ul> + <li><code>../../../tools/regression/library_test (*nix)</code>.</li> + + <li><code>..\..\..\tools\regression\library_test + (windows)</code>.</li> + </ul> + </li> + + <li>This will display short help message describing the how to set the + command line arguments for the compilers and variants you want to appear + in the final table.</li> + + <li>Setting these arguments requires rudimentary knowledge of bjam usage. + Hopefully, if you've arrived at this page you've gained the required + knowledge during the installation and library build process.</li> + + <li>Rerun the abve command with the argument set accordingly.</li> + + <li>When the command terminates, there should be a file named + "library_status.html" in the current directory.</li> + + <li>Display this file with any web browser.</li> + </ol>There should appear a table similar to the following for the regex + library. + + <table border="1" cellspacing="0" cellpadding="5"> + <tr> + <td rowspan="4">Test Name</td> + + <td align="center" colspan="4">msvc-7.1</td> + </tr> + + <tr> + <td align="center" colspan="2">debug</td> + + <td align="center" colspan="2">release</td> + </tr> + + <tr> + <td align="center">link-static</td> + + <td align="center" rowspan="2">threading-multi</td> + + <td align="center">link-static</td> + + <td align="center" rowspan="2">threading-multi</td> + </tr> + + <tr> + <td align="center">threading-multi</td> + + <td align="center">threading-multi</td> + </tr> + + <tr> + <td>bad_expression_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-bad_expression_test.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-bad_expression_test.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>captures</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-captures-msvc-7.1-debug-threading-multi"> + <span class="c3">Fail</span></a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-captures-msvc-7.1-release-threading-multi"> + <span class="c3">Fail</span></a></td> + </tr> + + <tr> + <td>captures_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-captures_test.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-captures_test.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>concept_check</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + </tr> + + <tr> + <td>icu_concept_check</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + </tr> + + <tr> + <td>object_cache_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-object_cache_test.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-object_cache_test.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>posix_api_check</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-posix_api_check.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-posix_api_check.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>posix_api_check_cpp</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + </tr> + + <tr> + <td>recursion_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-recursion_test.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-recursion_test.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>regex_config_info</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_config_info.test-msvc-7.1-debug-threading-multi"> + Pass</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_config_info.test-msvc-7.1-release-threading-multi"> + Pass</a></td> + </tr> + + <tr> + <td>regex_dll_config_info</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_dll_config_info.test-msvc-7.1-debug-threading-multi"> + Pass</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_dll_config_info.test-msvc-7.1-release-threading-multi"> + Pass</a></td> + </tr> + + <tr> + <td>regex_regress</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_regress.test-msvc-7.1-debug-link-static-threading-multi"> + Pass</a><sup>*</sup></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_regress.test-msvc-7.1-release-link-static-threading-multi"> + Pass</a><sup>*</sup></td> + + <td class="c1" align="right">Missing</td> + </tr> + + <tr> + <td>regex_regress_dll</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_regress_dll.test-msvc-7.1-debug-threading-multi"> + Pass</a><sup>*</sup></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-regex_regress_dll.test-msvc-7.1-release-threading-multi"> + Pass</a><sup>*</sup></td> + </tr> + + <tr> + <td>regex_regress_threaded</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + </tr> + + <tr> + <td>static_mutex_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + + <td class="c1" align="right">Missing</td> + + <td align="right">Pass</td> + </tr> + + <tr> + <td>test_collate_info</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-test_collate_info.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-test_collate_info.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>unicode_iterator_test</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-unicode_iterator_test.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-unicode_iterator_test.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>wide_posix_api_check_c</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-wide_posix_api_check_c.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-wide_posix_api_check_c.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + + <tr> + <td>wide_posix_api_check_cpp</td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-wide_posix_api_check_cpp.test-msvc-7.1-debug-threading-multi"> + Warn</a></td> + + <td class="c1" align="right">Missing</td> + + <td align="right"><a class="c2" href= + "links.html#C:-Boost134-bin.v2-libs-regex-test-wide_posix_api_check_cpp.test-msvc-7.1-release-threading-multi"> + Warn</a></td> + </tr> + </table> + + <p>This table was generated by invoking the following command line:</p> + + <p><code>../../../tools/regression/library_test --toolset=msvc-7.1 + variant=debug,release</code></p> + + <p>from within the .../libs/regex/test directory.</p> + + <p>This table shows the regex test results for both debug and release + versions of the library. Also it displays the fact that one of the tests is + run specifically with the static linking/multi-threading versions of the + runtime libraries. The cells marked "Missing" correspond to tests that were + not run for some reason or another. This is usually because the + corresponding <code>Jamfile.v2</code> excludes this test for the given + combination of compiler and build attributes. In this example, all tests + were run with the same compiler. If additional compilers were used, they + would appear as more columns in the table.</p> + + <p>The table above is just an illustration so the links don't actually + point to anything. In the table you generated, the links will display a + page describing any errors, warnings or other available information about + the tests. If the test passes, usually, there is no additional information + and hence no link.</p> + + <p>The tables are cumulative. That is, if you run one set of tests now and + tests with different attributes later, the table will contain all the + results to date. The test results are stored in + <code>../bin.v2/libs/test/<library%gt;/...</code>. To reinitialize the + test results to empty, delete the corresponding files in this + directory.</p> + + <p>The procedure above assumes that the table are generated within the + directory <code>../libs/<library>/test</code>. This is the most + common case since this directory contains the <code>Jamfile.v2</code> as + well as the source code that is used by official boost testers. However, + this is just a convention. The table can be generated for other directories + within the libary. One possiblity would be to generate the table for all + the examples in <code>../libs/%lt;library%gt;/example</code>. Or one might + have a special directory of performance tests which take a long time to run + and hence are not suitable for running by official boost testers. Just + remember that library status table is generated in the directory from which + the <code>library_test</code> command is invoked.</p> + + <h3>Running Tests for All Libraries</h3>For those with *nix or cygwin + command line shells, there is shell script that can be run from the boost + root directory: + + <p><code>tools/regression/library_test_all</code></p> + + <p>The command line arguments are the same as for running the test for one + library. This script creates all the html files in all the test directories + as well as an html page in the <code>status</code> directory named + <code>library_status_summary.html</code>. This can be used to browse + through all test results for all test in all libraries.</p> + <hr /> + + <p>Copyright 2007 Robert Ramey. 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)</p> + + <p>Revised $Date$</p> +</body> +</html> diff --git a/tools/regression/index.html b/tools/regression/index.html new file mode 100644 index 0000000000..536c846f9d --- /dev/null +++ b/tools/regression/index.html @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="refresh" content="0; URL=doc/index.html" /> + + <title></title> +</head> + +<body> + Automatic redirection failed, please go to <a href= + "doc/index.html">doc/index.html</a> + <hr /> + + <p>Copyright Rene Rivera, 2007</p> + + <p>Distributed under the Boost Software License, Version 1.0. (See + accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or + copy at <a href= + "http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p> +</body> +</html> diff --git a/tools/regression/src/boost_svn_export_archive.sh b/tools/regression/src/boost_svn_export_archive.sh new file mode 100755 index 0000000000..e86d377ab9 --- /dev/null +++ b/tools/regression/src/boost_svn_export_archive.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +#~ Copyright Redshift Software, Inc. 2007 +#~ 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) + +export PATH=/bin:/usr/bin:${PATH} + +timestamp=`date +%F-%H-%M-%S-%Z` +branch=$1 +revision=`svn info file:///home/subversion/boost/${branch} | grep '^Revision:' | cut --byte=11-` +tag=boost-${1/\/*}-${timestamp} +export_dir=boost-$$ + +# Remove files as listed in stdin, the assumption is that processing +# of the file is complete and can be removed. +rm_c() +{ + while read f; do + rm -f ${f} + done +} +# Generate the export file tree, and incrementally output the files +# created. +svn_export() +{ + svn export -r ${revision} file:///home/subversion/boost/${branch} ${tag} + echo "Revision: ${revision}" > ${tag}/svn_info.txt + echo "---- ${tag}/svn_info.txt" +} +# Create the archive incrementally, deleting files as we are done +# adding them to the archive. +make_archive() +{ + svn_export \ + | cut --bytes=6- \ + | star -c -D -to-stdout -d artype=pax list=- 2>/dev/null \ + | bzip2 -6 -c \ + | tee $1 \ + | tar -jtf - \ + | rm_c +} + +run() +{ + cd /tmp + rm -rf ${export_dir} + mkdir ${export_dir} + cd ${export_dir} + mkfifo out.tbz2 + make_archive out.tbz2 & + cat out.tbz2 + cd /tmp + rm -rf ${export_dir} +} + +run_debug() +{ + rm -rf ${export_dir} + mkdir ${export_dir} + cd ${export_dir} + mkfifo out.tbz2 + make_archive out.tbz2 & + cat out.tbz2 > ../${tag}.tar.bz2 + cd .. + rm -rf ${export_dir} +} + +run +#run_debug diff --git a/tools/regression/src/collect_and_upload_logs.py b/tools/regression/src/collect_and_upload_logs.py new file mode 100644 index 0000000000..a9e818bc16 --- /dev/null +++ b/tools/regression/src/collect_and_upload_logs.py @@ -0,0 +1,500 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import xml.sax.saxutils +import zipfile +import ftplib +import time +import stat +import xml.dom.minidom +import xmlrpclib +import httplib + +import os.path +import string +import sys + + +def process_xml_file( input_file, output_file ): + utils.log( 'Processing test log "%s"' % input_file ) + + f = open( input_file, 'r' ) + xml = f.readlines() + f.close() + + for i in range( 0, len(xml)): + xml[i] = string.translate( xml[i], utils.char_translation_table ) + + output_file.writelines( xml ) + + +def process_test_log_files( output_file, dir, names ): + for file in names: + if os.path.basename( file ) == 'test_log.xml': + process_xml_file( os.path.join( dir, file ), output_file ) + + +def collect_test_logs( input_dirs, test_results_writer ): + __log__ = 1 + utils.log( 'Collecting test logs ...' ) + for input_dir in input_dirs: + utils.log( 'Walking directory "%s" ...' % input_dir ) + os.path.walk( input_dir, process_test_log_files, test_results_writer ) + +dart_status_from_result = { + 'succeed': 'passed', + 'fail': 'failed', + 'note': 'passed', + '': 'notrun' + } + +dart_project = { + 'trunk': 'Boost_HEAD', + '': 'Boost_HEAD' + } + +dart_track = { + 'full': 'Nightly', + 'incremental': 'Continuous', + '': 'Experimental' + } + +ascii_only_table = "" +for i in range(0,256): + if chr(i) == '\n' or chr(i) == '\r': + ascii_only_table += chr(i) + elif i < 32 or i >= 0x80: + ascii_only_table += '?' + else: + ascii_only_table += chr(i) + +class xmlrpcProxyTransport(xmlrpclib.Transport): + def __init__(self, proxy): + self.proxy = proxy + def make_connection(self, host): + self.realhost = host + return httplib.HTTP(self.proxy) + def send_request(self, connection, handler, request_body): + connection.putrequest('POST','http://%s%s' % (self.realhost,handler)) + def send_host(self, connection, host): + connection.putheader('Host',self.realhost) + + +def publish_test_logs( + input_dirs, + runner_id, tag, platform, comment_file, timestamp, user, source, run_type, + dart_server = None, + http_proxy = None, + **unused + ): + __log__ = 1 + utils.log( 'Publishing test logs ...' ) + dart_rpc = None + dart_dom = {} + + def _publish_test_log_files_ ( unused, dir, names ): + for file in names: + if os.path.basename( file ) == 'test_log.xml': + utils.log( 'Publishing test log "%s"' % os.path.join(dir,file) ) + if dart_server: + log_xml = open(os.path.join(dir,file)).read().translate(ascii_only_table) + #~ utils.log( '--- XML:\n%s' % log_xml) + #~ It seems possible to get an empty XML result file :-( + if log_xml == "": continue + log_dom = xml.dom.minidom.parseString(log_xml) + test = { + 'library': log_dom.documentElement.getAttribute('library'), + 'test-name': log_dom.documentElement.getAttribute('test-name'), + 'toolset': log_dom.documentElement.getAttribute('toolset') + } + if not test['test-name'] or test['test-name'] == '': + test['test-name'] = 'unknown' + if not test['toolset'] or test['toolset'] == '': + test['toolset'] = 'unknown' + if not dart_dom.has_key(test['toolset']): + dart_dom[test['toolset']] = xml.dom.minidom.parseString( +'''<?xml version="1.0" encoding="UTF-8"?> +<DartSubmission version="2.0" createdby="collect_and_upload_logs.py"> + <Site>%(site)s</Site> + <BuildName>%(buildname)s</BuildName> + <Track>%(track)s</Track> + <DateTimeStamp>%(datetimestamp)s</DateTimeStamp> +</DartSubmission> +''' % { + 'site': runner_id, + 'buildname': "%s -- %s (%s)" % (platform,test['toolset'],run_type), + 'track': dart_track[run_type], + 'datetimestamp' : timestamp + } ) + submission_dom = dart_dom[test['toolset']] + for node in log_dom.documentElement.childNodes: + if node.nodeType == xml.dom.Node.ELEMENT_NODE: + if node.firstChild: + log_data = xml.sax.saxutils.escape(node.firstChild.data) + else: + log_data = '' + test_dom = xml.dom.minidom.parseString('''<?xml version="1.0" encoding="UTF-8"?> +<Test> + <Name>.Test.Boost.%(tag)s.%(library)s.%(test-name)s.%(type)s</Name> + <Status>%(result)s</Status> + <Measurement name="Toolset" type="text/string">%(toolset)s</Measurement> + <Measurement name="Timestamp" type="text/string">%(timestamp)s</Measurement> + <Measurement name="Log" type="text/text">%(log)s</Measurement> +</Test> + ''' % { + 'tag': tag, + 'library': test['library'], + 'test-name': test['test-name'], + 'toolset': test['toolset'], + 'type': node.nodeName, + 'result': dart_status_from_result[node.getAttribute('result')], + 'timestamp': node.getAttribute('timestamp'), + 'log': log_data + }) + submission_dom.documentElement.appendChild( + test_dom.documentElement.cloneNode(1) ) + + for input_dir in input_dirs: + utils.log( 'Walking directory "%s" ...' % input_dir ) + os.path.walk( input_dir, _publish_test_log_files_, None ) + if dart_server: + try: + rpc_transport = None + if http_proxy: + rpc_transport = xmlrpcProxyTransport(http_proxy) + dart_rpc = xmlrpclib.ServerProxy( + 'http://%s/%s/Command/' % (dart_server,dart_project[tag]), + rpc_transport ) + for dom in dart_dom.values(): + #~ utils.log('Dart XML: %s' % dom.toxml('utf-8')) + dart_rpc.Submit.put(xmlrpclib.Binary(dom.toxml('utf-8'))) + except Exception, e: + utils.log('Dart server error: %s' % e) + + +def upload_to_ftp( tag, results_file, ftp_proxy, debug_level ): + ftp_site = 'fx.meta-comm.com' + site_path = '/boost-regression' + utils.log( 'Uploading log archive "%s" to ftp://%s%s/%s' % ( results_file, ftp_site, site_path, tag ) ) + + if not ftp_proxy: + ftp = ftplib.FTP( ftp_site ) + ftp.set_debuglevel( debug_level ) + ftp.login() + else: + utils.log( ' Connecting through FTP proxy server "%s"' % ftp_proxy ) + ftp = ftplib.FTP( ftp_proxy ) + ftp.set_debuglevel( debug_level ) + ftp.set_pasv (0) # turn off PASV mode + ftp.login( 'anonymous@%s' % ftp_site, 'anonymous@' ) + + ftp.cwd( site_path ) + try: + ftp.cwd( tag ) + except ftplib.error_perm: + for dir in tag.split( '/' ): + ftp.mkd( dir ) + ftp.cwd( dir ) + + f = open( results_file, 'rb' ) + ftp.storbinary( 'STOR %s' % os.path.basename( results_file ), f ) + ftp.quit() + + +def copy_comments( results_xml, comment_file ): + results_xml.startElement( 'comment', {} ) + + if os.path.exists( comment_file ): + utils.log( 'Reading comments file "%s"...' % comment_file ) + f = open( comment_file, 'r' ) + try: + results_xml.characters( f.read() ) + finally: + f.close() + else: + utils.log( 'Warning: comment file "%s" is not found.' % comment_file ) + + results_xml.endElement( 'comment' ) + + +def compress_file( file_path, archive_path ): + utils.log( 'Compressing "%s"...' % file_path ) + + try: + z = zipfile.ZipFile( archive_path, 'w', zipfile.ZIP_DEFLATED ) + z.write( file_path, os.path.basename( file_path ) ) + z.close() + utils.log( 'Done writing "%s".'% archive_path ) + except Exception, msg: + utils.log( 'Warning: Compressing falied (%s)' % msg ) + utils.log( ' Trying to compress using a platform-specific tool...' ) + try: import zip_cmd + except ImportError: + script_dir = os.path.dirname( os.path.abspath( sys.argv[0] ) ) + utils.log( 'Could not find \'zip_cmd\' module in the script directory (%s).' % script_dir ) + raise Exception( 'Compressing failed!' ) + else: + if os.path.exists( archive_path ): + os.unlink( archive_path ) + utils.log( 'Removing stale "%s".' % archive_path ) + + zip_cmd.main( file_path, archive_path ) + utils.log( 'Done compressing "%s".' % archive_path ) + + +def read_timestamp( file ): + if not os.path.exists( file ): + result = time.gmtime() + utils.log( 'Warning: timestamp file "%s" does not exist'% file ) + utils.log( 'Using current UTC time (%s)' % result ) + return result + + return time.gmtime( os.stat( file ).st_mtime ) + + +def collect_logs( + results_dir + , runner_id + , tag + , platform + , comment_file + , timestamp_file + , user + , source + , run_type + , dart_server = None + , http_proxy = None + , revision = '' + , **unused + ): + + timestamp = time.strftime( '%Y-%m-%dT%H:%M:%SZ', read_timestamp( timestamp_file ) ) + + if dart_server: + publish_test_logs( [ results_dir ], + runner_id, tag, platform, comment_file, timestamp, user, source, run_type, + dart_server = dart_server, + http_proxy = http_proxy ) + + results_file = os.path.join( results_dir, '%s.xml' % runner_id ) + results_writer = open( results_file, 'w' ) + utils.log( 'Collecting test logs into "%s"...' % results_file ) + + results_xml = xml.sax.saxutils.XMLGenerator( results_writer ) + results_xml.startDocument() + results_xml.startElement( + 'test-run' + , { + 'tag': tag + , 'platform': platform + , 'runner': runner_id + , 'timestamp': timestamp + , 'source': source + , 'run-type': run_type + , 'revision': revision + } + ) + + copy_comments( results_xml, comment_file ) + collect_test_logs( [ results_dir ], results_writer ) + + results_xml.endElement( "test-run" ) + results_xml.endDocument() + results_writer.close() + utils.log( 'Done writing "%s".' % results_file ) + + compress_file( + results_file + , os.path.join( results_dir,'%s.zip' % runner_id ) + ) + + +def upload_logs( + results_dir + , runner_id + , tag + , user + , ftp_proxy + , debug_level + , send_bjam_log = False + , timestamp_file = None + , dart_server = None + , **unused + ): + + logs_archive = os.path.join( results_dir, '%s.zip' % runner_id ) + upload_to_ftp( tag, logs_archive, ftp_proxy, debug_level ) + if send_bjam_log: + bjam_log_path = os.path.join( results_dir, 'bjam.log' ) + if not timestamp_file: + timestamp_file = bjam_log_path + + timestamp = time.strftime( '%Y-%m-%d-%H-%M-%S', read_timestamp( timestamp_file ) ) + logs_archive = os.path.join( results_dir, '%s.%s.log.zip' % ( runner_id, timestamp ) ) + compress_file( bjam_log_path, logs_archive ) + upload_to_ftp( '%s/logs' % tag, logs_archive, ftp_proxy, debug_level ) + + +def collect_and_upload_logs( + results_dir + , runner_id + , tag + , platform + , comment_file + , timestamp_file + , user + , source + , run_type + , revision = None + , ftp_proxy = None + , debug_level = 0 + , send_bjam_log = False + , dart_server = None + , http_proxy = None + , **unused + ): + + collect_logs( + results_dir + , runner_id + , tag + , platform + , comment_file + , timestamp_file + , user + , source + , run_type + , revision = revision + , dart_server = dart_server + , http_proxy = http_proxy + ) + + upload_logs( + results_dir + , runner_id + , tag + , user + , ftp_proxy + , debug_level + , send_bjam_log + , timestamp_file + , dart_server = dart_server + ) + + +def accept_args( args ): + args_spec = [ + 'locate-root=' + , 'runner=' + , 'tag=' + , 'platform=' + , 'comment=' + , 'timestamp=' + , 'source=' + , 'run-type=' + , 'user=' + , 'ftp-proxy=' + , 'proxy=' + , 'debug-level=' + , 'send-bjam-log' + , 'help' + , 'dart-server=' + , 'revision=' + ] + + options = { + '--tag' : 'trunk' + , '--platform' : sys.platform + , '--comment' : 'comment.html' + , '--timestamp' : 'timestamp' + , '--user' : None + , '--source' : 'SVN' + , '--run-type' : 'full' + , '--ftp-proxy' : None + , '--proxy' : None + , '--debug-level' : 0 + , '--dart-server' : 'beta.boost.org:8081' + , '--revision' : None + + } + + utils.accept_args( args_spec, args, options, usage ) + + return { + 'results_dir' : options[ '--locate-root' ] + , 'runner_id' : options[ '--runner' ] + , 'tag' : options[ '--tag' ] + , 'platform' : options[ '--platform'] + , 'comment_file' : options[ '--comment' ] + , 'timestamp_file' : options[ '--timestamp' ] + , 'user' : options[ '--user' ] + , 'source' : options[ '--source' ] + , 'run_type' : options[ '--run-type' ] + , 'ftp_proxy' : options[ '--ftp-proxy' ] + , 'http_proxy' : options[ '--proxy' ] + , 'debug_level' : int(options[ '--debug-level' ]) + , 'send_bjam_log' : options.has_key( '--send-bjam-log' ) + , 'dart_server' : options[ '--dart-server' ] + , 'revision ' : options[ '--revision' ] + } + + +commands = { + 'collect-and-upload' : collect_and_upload_logs + , 'collect-logs' : collect_logs + , 'upload-logs' : upload_logs + } + +def usage(): + print 'Usage: %s [command] [options]' % os.path.basename( sys.argv[0] ) + print ''' +Commands: +\t%s + +Options: +\t--locate-root directory to to scan for "test_log.xml" files +\t--runner runner ID (e.g. "Metacomm") +\t--timestamp path to a file which modification time will be used +\t as a timestamp of the run ("timestamp" by default) +\t--comment an HTML comment file to be inserted in the reports +\t ("comment.html" by default) +\t--tag the tag for the results ("trunk" by default) +\t--user SourceForge user name for a shell account (optional) +\t--source where Boost sources came from ("SVN" or "tarball"; +\t "SVN" by default) +\t--run-type "incremental" or "full" ("full" by default) +\t--send-bjam-log in addition to regular XML results, send in full bjam +\t log of the regression run +\t--proxy HTTP proxy server address and port (e.g. +\t 'http://www.someproxy.com:3128', optional) +\t--ftp-proxy FTP proxy server (e.g. 'ftpproxy', optional) +\t--debug-level debugging level; controls the amount of debugging +\t output printed; 0 by default (no debug output) +\t--dart-server The dart server to send results to. +''' % '\n\t'.join( commands.keys() ) + + +def main(): + if len(sys.argv) > 1 and sys.argv[1] in commands: + command = sys.argv[1] + args = sys.argv[ 2: ] + else: + command = 'collect-and-upload' + args = sys.argv[ 1: ] + + commands[ command ]( **accept_args( args ) ) + + +if __name__ != '__main__': import utils +else: + # in absense of relative import... + xsl_path = os.path.abspath( os.path.dirname( sys.argv[ 0 ] ) ) + while os.path.basename( xsl_path ) != 'xsl_reports': xsl_path = os.path.dirname( xsl_path ) + sys.path.append( xsl_path ) + + import utils + main() diff --git a/tools/regression/src/compiler_status.cpp b/tools/regression/src/compiler_status.cpp new file mode 100644 index 0000000000..d4b374e797 --- /dev/null +++ b/tools/regression/src/compiler_status.cpp @@ -0,0 +1,1037 @@ +// Generate Compiler Status HTML from jam regression test output -----------// + +// Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/tools/regression/ for documentation. + +/******************************************************************************* + + This program was designed to work unchanged on all platforms and + configurations. All output which is platform or configuration dependent + is obtained from external sources such as the .xml file from + process_jam_log execution, the tools/build/xxx-tools.jam files, or the + output of the config_info tests. + + Please avoid adding platform or configuration dependencies during + program maintenance. + +*******************************************************************************/ + +#include "boost/config.hpp" +#include "boost/filesystem/operations.hpp" +#include "boost/filesystem/fstream.hpp" +#include "detail/tiny_xml.hpp" +namespace fs = boost::filesystem; +namespace xml = boost::tiny_xml; + +#include <cstdlib> // for abort, exit +#include <cctype> // for toupper +#include <string> +#include <vector> +#include <set> +#include <map> +#include <algorithm> +#include <iostream> +#include <fstream> +#include <ctime> +#include <stdexcept> +#include <cassert> + +using std::string; + +const string pass_msg( "Pass" ); +const string warn_msg( "<i>Warn</i>" ); +const string fail_msg( "<font color=\"#FF0000\"><i>Fail</i></font>" ); +const string note_msg( "<sup>*</sup>" ); +const string missing_residue_msg( "<i>Missing</i>" ); + +const std::size_t max_compile_msg_size = 10000; + +namespace +{ + fs::path boost_root; // boost-root complete path + fs::path locate_root; // locate-root (AKA ALL_LOCATE_TARGET) complete path + + bool compile_time; + bool run_time; + bool ignore_pass; + bool no_warn; + bool no_links; + bool boost_build_v2 = true; + + fs::path jamfile_path; + + fs::directory_iterator end_itr; + + // It's immportant for reliability that we find the same compilers for each + // test, and that they match the column header. So save the names at the + // time column headings are generated. + std::vector<string> toolsets; + + fs::ifstream jamfile; + fs::ofstream report; + fs::ofstream links_file; + string links_name; + + fs::path notes_path; + string notes_html; + + fs::path notes_map_path; + typedef std::multimap< string, string > notes_map; // key is test_name-toolset, + // value is note bookmark + notes_map notes; + + string specific_compiler; // if running on one toolset only + + const string empty_string; + + std::vector<int> error_count; + + // prefix for library and test hyperlink prefix + string cvs_root ( "http://boost.cvs.sourceforge.net/" ); + string url_prefix_dir_view( cvs_root + "boost/boost" ); + string url_prefix_checkout_view( cvs_root + "*checkout*/boost/boost" ); + string url_suffix_text_view( "?view=markup&rev=HEAD" ); + +// get revision number (as a string) if boost_root is svn working copy -----// + + string revision( const fs::path & boost_root ) + { + string rev; + fs::path entries( boost_root / ".svn" / "entries" ); + fs::ifstream entries_file( entries ); + if ( entries_file ) + { + std::getline( entries_file, rev ); + std::getline( entries_file, rev ); + std::getline( entries_file, rev ); + std::getline( entries_file, rev ); // revision number as a string + } + return rev; + } + + +// build notes_bookmarks from notes HTML -----------------------------------// + + void build_notes_bookmarks() + { + if ( notes_map_path.empty() ) return; + fs::ifstream notes_map_file( notes_map_path ); + if ( !notes_map_file ) + { + std::cerr << "Could not open --notes-map input file: " << notes_map_path.string() << std::endl; + std::exit( 1 ); + } + string line; + while( std::getline( notes_map_file, line ) ) + { + string::size_type pos = 0; + if ( (pos = line.find( ',', pos )) == string::npos ) continue; + string key(line.substr( 0, pos ) ); + string bookmark( line.substr( pos+1 ) ); + +// std::cout << "inserting \"" << key << "\",\"" << bookmark << "\"\n"; + notes.insert( notes_map::value_type( key, bookmark ) ); + } + } + +// load_notes_html ---------------------------------------------------------// + + bool load_notes_html() + { + if ( notes_path.empty() ) return false; + fs::ifstream notes_file( notes_path ); + if ( !notes_file ) + { + std::cerr << "Could not open --notes input file: " << notes_path.string() << std::endl; + std::exit( 1 ); + } + string line; + bool in_body( false ); + while( std::getline( notes_file, line ) ) + { + if ( in_body && line.find( "</body>" ) != string::npos ) in_body = false; + if ( in_body ) notes_html += line; + else if ( line.find( "<body>" ) ) in_body = true; + } + return true; + } + +// relative path between two paths -----------------------------------------// + + void relative_path( const fs::path & from, const fs::path & to, + fs::path & target ) + { + if ( from.string().size() <= to.string().size() ) return; + target /= ".."; + relative_path( from.branch_path(), to, target ); + return; + } + +// extract object library name from target directory string ----------------// + + string extract_object_library_name( const string & s ) + { + string t( s ); + string::size_type pos = t.find( "/build/" ); + if ( pos != string::npos ) pos += 7; + else if ( (pos = t.find( "/test/" )) != string::npos ) pos += 6; + else return ""; + return t.substr( pos, t.find( "/", pos ) - pos ); + } + +// find_file ---------------------------------------------------------------// +// given a directory to recursively search + + bool find_file( const fs::path & dir_path, const string & name, + fs::path & path_found, const string & ignore_dir_named="" ) + { + if ( !fs::exists( dir_path ) ) return false; + for ( fs::directory_iterator itr( dir_path ); itr != end_itr; ++itr ) + if ( fs::is_directory( *itr ) + && itr->leaf() != ignore_dir_named ) + { + if ( find_file( *itr, name, path_found ) ) return true; + } + else if ( itr->leaf() == name ) + { + path_found = *itr; + return true; + } + return false; + } + +// platform_desc -----------------------------------------------------------// + + string platform_desc() + { + string result = BOOST_PLATFORM; + result[0] = std::toupper( result[0] ); + return result; + } + +// version_desc ------------------------------------------------------------// +// from locate-root/status/bin/config_info.test/xxx/.../config_info.output + + string version_desc( const string & compiler_name ) + { + string result; + fs::path dot_output_path; + if ( find_file( locate_root / "bin/boost/status/config_info.test" + / compiler_name, "config_info.output", dot_output_path ) + || find_file( locate_root / "status/bin/config_info.test" + / compiler_name, "config_info.output", dot_output_path ) ) + { + fs::ifstream file( dot_output_path ); + if ( file ) + { + if( std::getline( file, result ) ) + { + string::size_type pos = result.find( "version " ); + if ( pos != string::npos ) + { + result.erase( 0, pos+8 ); + } + else result.clear(); + } + } + } + return result; + } + +// compiler_desc -----------------------------------------------------------// +// from boost-root/tools/build/xxx-tools.jam + + string compiler_desc( const string & compiler_name ) + { + string result; + fs::path tools_path( boost_root / "tools/build/v1" / (compiler_name + + "-tools.jam") ); + if ( !fs::exists( tools_path ) ) + tools_path = boost_root / "tools/build" / (compiler_name + "-tools.jam"); + fs::ifstream file( tools_path ); + if ( file ) + { + while( std::getline( file, result ) ) + { + if ( result.substr( 0, 3 ) == "#//" ) + { + result.erase( 0, 3 ); + return result; + } + } + result.clear(); + } + return result; + } + +// target_directory --------------------------------------------------------// +// this amounts to a request to find a unique leaf directory + + fs::path target_directory( const fs::path & root ) + { + if ( !fs::exists( root ) ) return fs::path("no-such-path"); + fs::path child; + for ( fs::directory_iterator itr( root ); itr != end_itr; ++itr ) + { + if ( fs::is_directory( *itr ) ) + { + // SunCC creates an internal subdirectory everywhere it writes + // object files. This confuses the target_directory() algorithm. + // This patch ignores the SunCC internal directory. Jens Maurer + if ( (*itr).leaf() == "SunWS_cache" ) continue; + // SGI does something similar for template instantiations. Jens Maurer + if( (*itr).leaf() == "ii_files" ) continue; + + if ( child.empty() ) child = *itr; + else + { + std::cout << "Warning: only first of two target possibilities will be reported for: \n " + << root.string() << ": " << child.leaf() + << " and " << (*itr).leaf() << "\n"; + } + } + } + if ( child.empty() ) return root; // this dir has no children + return target_directory( child ); + } + +// element_content ---------------------------------------------------------// + + const string & element_content( + const xml::element & root, const string & name ) + { + static string empty_string; + xml::element_list::const_iterator itr; + for ( itr = root.elements.begin(); + itr != root.elements.end() && (*itr)->name != name; + ++itr ) {} + return itr != root.elements.end() ? (*itr)->content : empty_string; + } + +// find_element ------------------------------------------------------------// + + const xml::element empty_element; + + const xml::element & find_element( + const xml::element & root, const string & name ) + { + xml::element_list::const_iterator itr; + for ( itr = root.elements.begin(); + itr != root.elements.end() && (*itr)->name != name; + ++itr ) {} + return itr != root.elements.end() ? *((*itr).get()) : empty_element; + } + +// attribute_value ----------------------------------------------------------// + +const string & attribute_value( const xml::element & element, + const string & attribute_name ) +{ + static const string empty_string; + xml::attribute_list::const_iterator atr; + for ( atr = element.attributes.begin(); + atr != element.attributes.end() && atr->name != attribute_name; + ++atr ) {} + return atr == element.attributes.end() ? empty_string : atr->value; +} + +// find_bin_path -----------------------------------------------------------// + +// Takes a relative path from boost root to a Jamfile. +// Returns the directory where the build targets from +// that Jamfile are located. If not found, emits a warning +// and returns empty path. +const fs::path find_bin_path(const string& relative) +{ + fs::path bin_path; + if (boost_build_v2) + { + bin_path = locate_root / "bin.v2" / relative; + if (!fs::exists(bin_path)) + { + std::cerr << "warning: could not find build results for '" + << relative << "'.\n"; + std::cerr << "warning: tried directory " + << bin_path.native_directory_string() << "\n"; + bin_path = ""; + } + } + else + { + bin_path = locate_root / "bin/boost" / relative; + if (!fs::exists(bin_path)) + { + bin_path = locate_root / "bin" / relative / "bin"; + if (!fs::exists(bin_path)) + { + bin_path = fs::path( locate_root / relative / "bin" ); + if (!fs::exists(bin_path)) + { + bin_path = fs::path( locate_root / "bin/boost/libs" / + relative.substr( relative.find( '/' )+1 ) ); + } + } + } + if (!fs::exists(bin_path)) + { + std::cerr << "warning: could not find build results for '" + << relative << "'.\n"; + bin_path = ""; + } + } + return bin_path; +} + + +// generate_report ---------------------------------------------------------// + + // return 0 if nothing generated, 1 otherwise, except 2 if compiler msgs + int generate_report( const xml::element & db, + const string & source_library_name, + const string & test_type, + const string & test_name, // possibly object library name + const string & toolset, + bool pass, + bool always_show_run_output = false ) + { + // compile msgs sometimes modified, so make a local copy + string compile( ((pass && no_warn) + ? empty_string : element_content( db, "compile" )) ); + + const string & link( pass ? empty_string : element_content( db, "link" ) ); + const string & run( (pass && !always_show_run_output) + ? empty_string : element_content( db, "run" ) ); + string lib( (pass ? empty_string : element_content( db, "lib" )) ); + + // some compilers output the filename even if there are no errors or + // warnings; detect this if one line of output and it contains no space. + string::size_type pos = compile.find( '\n', 1 ); + if ( pos != string::npos && compile.size()-pos <= 2 + && compile.find( ' ' ) == string::npos ) compile.clear(); + + if ( lib.empty() + && (compile.empty() || test_type == "compile_fail") + && link.empty() && run.empty() ) return 0; + + int result = 1; // some kind of msg for sure + + // limit compile message length + if ( compile.size() > max_compile_msg_size ) + { + compile.erase( max_compile_msg_size ); + compile += "...\n (remainder deleted because of excessive size)\n"; + } + + links_file << "<h2><a name=\"" + << source_library_name << "-" << test_name << "-" << toolset << "\">" + << source_library_name << " - " << test_name << " - " << toolset << "</a></h2>\n"; + + if ( !compile.empty() ) + { + ++result; + links_file << "<h3>Compiler output:</h3><pre>" + << compile << "</pre>\n"; + } + if ( !link.empty() ) + links_file << "<h3>Linker output:</h3><pre>" << link << "</pre>\n"; + if ( !run.empty() ) + links_file << "<h3>Run output:</h3><pre>" << run << "</pre>\n"; + + // for an object library failure, generate a reference to the object + // library failure message, and (once only) generate the object + // library failure message itself + static std::set< string > failed_lib_target_dirs; // only generate once + if ( !lib.empty() ) + { + if ( lib[0] == '\n' ) lib.erase( 0, 1 ); + string object_library_name( extract_object_library_name( lib ) ); + + // changing the target directory naming scheme breaks + // extract_object_library_name() + assert( !object_library_name.empty() ); + if ( object_library_name.empty() ) + std::cerr << "Failed to extract object library name from " << lib << "\n"; + + links_file << "<h3>Library build failure: </h3>\n" + "See <a href=\"#" + << source_library_name << "-" + << object_library_name << "-" << toolset << "\">" + << source_library_name << " - " + << object_library_name << " - " << toolset << "</a>"; + + if ( failed_lib_target_dirs.find( lib ) == failed_lib_target_dirs.end() ) + { + failed_lib_target_dirs.insert( lib ); + fs::path pth( locate_root / lib / "test_log.xml" ); + fs::ifstream file( pth ); + if ( file ) + { + xml::element_ptr db = xml::parse( file, pth.string() ); + generate_report( *db, source_library_name, test_type, object_library_name, toolset, false ); + } + else + { + links_file << "<h2><a name=\"" + << object_library_name << "-" << toolset << "\">" + << object_library_name << " - " << toolset << "</a></h2>\n" + "test_log.xml not found\n"; + } + } + } + return result; + } + + // add_notes --------------------------------------------------------------// + + void add_notes( const string & key, bool fail, string & sep, string & target ) + { + notes_map::const_iterator itr = notes.lower_bound( key ); + if ( itr != notes.end() && itr->first == key ) + { + for ( ; itr != notes.end() && itr->first == key; ++itr ) + { + string note_desc( itr->second[0] == '-' + ? itr->second.substr( 1 ) : itr->second ); + if ( fail || itr->second[0] == '-' ) + { + target += sep; + sep = ","; + target += "<a href=\""; + target += "#"; + target += note_desc; + target += "\">"; + target += note_desc; + target += "</a>"; + } + } + } + } + + // get_notes -------------------------------------------------------------// + + string get_notes( const string & toolset, + const string & library, const string & test, bool fail ) + { + string sep; + string target( "<sup>" ); + add_notes( toolset + "/" + library + "/" + test, fail, sep, target ); + add_notes( "*/" + library + "/" + test, fail, sep, target ); + add_notes( toolset + "/" + library + "/*", fail, sep, target ); + add_notes( "*/" + library + "/*", fail, sep, target ); + if ( target == "<sup>" ) target.clear(); + else target += "</sup>"; + return target; + } + + // do_cell ---------------------------------------------------------------// + + bool do_cell( + int compiler, + const string & lib_name, + const fs::path & test_dir, + const string & test_type, + const string & test_name, + const string & toolset, + string & target, + bool always_show_run_output ) + // return true if any results except simple pass_msg + { + fs::path target_dir( target_directory( test_dir / toolset ) ); + bool pass = false; + + if ( !fs::exists( target_dir / "test_log.xml" ) ) + { + std::cerr << "Missing jam_log.xml in target:\n " + << target_dir.string() << "\n"; + target += "<td>" + missing_residue_msg + "</td>"; + return true; + } + + int anything_generated = 0; + bool note = false; + + fs::path pth( target_dir / "test_log.xml" ); + fs::ifstream file( pth ); + if ( !file ) // could not open jam_log.xml + { + std::cerr << "Can't open jam_log.xml in target:\n " + << target_dir.string() << "\n"; + target += "<td>" + missing_residue_msg + "</td>"; + return false; + } + + xml::element_ptr dbp = xml::parse( file, pth.string() ); + const xml::element & db( *dbp ); + + std::string test_type_base( test_type ); + if ( test_type_base == "run_pyd" ) test_type_base = "run"; + else if ( test_type_base.size() > 5 ) + { + const string::size_type trailer = test_type_base.size() - 5; + if ( test_type_base.substr( trailer ) == "_fail" ) + { + test_type_base.erase( trailer ); + } + } + const xml::element & test_type_element( find_element( db, test_type_base ) ); + + pass = !test_type_element.name.empty() + && attribute_value( test_type_element, "result" ) != "fail"; + + if ( !no_links ) + { + note = attribute_value( test_type_element, "result" ) == "note"; + + // generate bookmarked report of results, and link to it + anything_generated + = generate_report( db, lib_name, test_type, test_name, toolset, pass, + always_show_run_output || note ); + } + + target += "<td>"; + + // generate the status table cell pass/warn/fail HTML + if ( anything_generated != 0 ) + { + target += "<a href=\""; + target += links_name; + target += "#"; + target += lib_name; + target += "-"; + target += test_name; + target += "-"; + target += toolset; + target += "\">"; + target += pass + ? (anything_generated < 2 ? pass_msg : warn_msg) + : fail_msg; + target += "</a>"; + if ( pass && note ) target += note_msg; + } + else target += pass ? pass_msg : fail_msg; + + // if notes, generate the superscript HTML + if ( !notes.empty() ) + target += get_notes( toolset, lib_name, test_name, !pass ); + + // generate compile-time if requested + if ( compile_time ) + { + const xml::element & compile_element( find_element( db, "compile" ) ); + + if ( !compile_element.name.empty() ) + { + string times = attribute_value( compile_element, "timings" ); + if ( !times.empty() ) + { + target += "<br>"; + target += times.substr( 0, times.find( " " ) ); + } + } + } + + // generate run-time if requested + if ( run_time ) + { + const xml::element & run_element( find_element( db, "run" ) ); + + if ( !run_element.name.empty() ) + { + string times = attribute_value( run_element, "timings" ); + if ( !times.empty() ) + { + target += "<br>"; + target += times.substr( 0, times.find( " " ) ); + } + } + } + + if ( !pass ) ++error_count[compiler]; + + target += "</td>"; + return (anything_generated != 0) || !pass; + } + +// do_row ------------------------------------------------------------------// + + void do_row( + const fs::path & test_dir, // locate_root / "status/bin/any_test.test" + const string & test_name, // "any_test" + string & target ) + { + // get library name, test-type, test-program path, etc., from the .xml file + string lib_name; + string test_path( test_name ); // test_name is default if missing .test + string test_type( "unknown" ); + bool always_show_run_output( false ); + fs::path xml_file_path; + if ( find_file( test_dir, "test_log.xml", xml_file_path ) ) + { + fs::ifstream file( xml_file_path ); + if ( file ) + { + xml::element_ptr dbp = xml::parse( file, xml_file_path.string() ); + const xml::element & db( *dbp ); + test_path = attribute_value( db, "test-program" ); + lib_name = attribute_value( db, "library" ); + test_type = attribute_value( db, "test-type" ); + always_show_run_output + = attribute_value( db, "show-run-output" ) == "true"; + } + } + + // generate the library name, test name, and test type table data + string::size_type row_start_pos = target.size(); + target += "<tr><td><a href=\"" + url_prefix_dir_view + "/libs/" + lib_name + + "\">" + lib_name + "</a></td>"; + target += "<td><a href=\"" + url_prefix_checkout_view + "/" + test_path + + url_suffix_text_view + "\">" + test_name + "</a>"; + + if ( compile_time ) target += "<br> Compile time:"; + if ( run_time ) target += "<br> Run time:"; + + target += "</td>"; + target += "<td>" + test_type + "</td>"; + + bool no_warn_save = no_warn; + //if ( test_type.find( "fail" ) != string::npos ) no_warn = true; + + // for each compiler, generate <td>...</td> html + bool anything_to_report = false; + int compiler = 0; + for ( std::vector<string>::const_iterator itr=toolsets.begin(); + itr != toolsets.end(); ++itr, ++compiler ) + { + anything_to_report |= do_cell( compiler, lib_name, test_dir, test_type, test_name, *itr, target, + always_show_run_output ); + } + + target += "</tr>"; + if ( ignore_pass && !anything_to_report ) target.erase( row_start_pos ); + no_warn = no_warn_save; + } + +// do_rows_for_sub_tree ----------------------------------------------------// + + void do_rows_for_sub_tree( + const fs::path & bin_dir, std::vector<string> & results ) + { + for ( fs::directory_iterator itr( bin_dir ); itr != end_itr; ++itr ) + { + if ( fs::is_directory( *itr ) + && itr->string().find( ".test" ) == (itr->string().size()-5) ) + { + results.push_back( std::string() ); + do_row( *itr, + itr->leaf().substr( 0, itr->leaf().size()-5 ), + results[results.size()-1] ); + } + } + } + +// do_table_body -----------------------------------------------------------// + + void do_table_body( const fs::path & bin_dir ) + { + // rows are held in a vector so they can be sorted, if desired. + std::vector<string> results; + + // do primary bin directory + do_rows_for_sub_tree( bin_dir, results ); + + // do subinclude bin directories + jamfile.clear(); + jamfile.seekg(0); + string line; + while( std::getline( jamfile, line ) ) + { + bool v2(false); + string::size_type pos( line.find( "subinclude" ) ); + if ( pos == string::npos ) { + pos = line.find( "build-project" ); + v2 = true; + } + if ( pos != string::npos + && line.find( '#' ) > pos ) + { + if (v2) + pos = line.find_first_not_of( " \t./", pos+13 ); + else + pos = line.find_first_not_of( " \t./", pos+10 ); + + if ( pos == string::npos ) continue; + string subinclude_bin_dir( + line.substr( pos, line.find_first_of( " \t", pos )-pos ) ); + + fs::path bin_path = find_bin_path(subinclude_bin_dir); + if (!bin_path.empty()) + do_rows_for_sub_tree( bin_path, results ); + } + } + + + std::sort( results.begin(), results.end() ); + + for ( std::vector<string>::iterator v(results.begin()); + v != results.end(); ++v ) + { report << *v << "\n"; } + } + +// do_table ----------------------------------------------------------------// + + void do_table() + { + // Find test result locations, trying: + // - Boost.Build V1 location with ALL_LOCATE_TARGET + // - Boost.Build V2 location with top-lelve "build-dir" + // - Boost.Build V1 location without ALL_LOCATE_TARGET + string relative( fs::initial_path().string() ); + relative.erase( 0, boost_root.string().size()+1 ); + fs::path bin_path = find_bin_path(relative); + + report << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"; + + // generate the column headings + + report << "<tr><td>Library</td><td>Test Name</td>\n" + "<td><a href=\"compiler_status.html#test-type\">Test Type</a></td>\n"; + + fs::directory_iterator itr( bin_path ); + while ( itr != end_itr + && ((itr->string().find( ".test" ) != (itr->string().size()-5)) + || !fs::is_directory( *itr ))) + ++itr; // bypass chaff + if ( itr != end_itr ) + { + fs::directory_iterator compiler_itr( *itr ); + if ( specific_compiler.empty() ) + std::clog << "Using " << itr->string() << " to determine compilers\n"; + for (; compiler_itr != end_itr; ++compiler_itr ) + { + if ( fs::is_directory( *compiler_itr ) // check just to be sure + && compiler_itr->leaf() != "test" ) // avoid strange directory (Jamfile bug?) + { + if ( specific_compiler.size() != 0 + && specific_compiler != compiler_itr->leaf() ) continue; + toolsets.push_back( compiler_itr->leaf() ); + string desc( compiler_desc( compiler_itr->leaf() ) ); + string vers( version_desc( compiler_itr->leaf() ) ); + report << "<td>" + << (desc.size() ? desc : compiler_itr->leaf()) + << (vers.size() ? (string( "<br>" ) + vers ) : string( "" )) + << "</td>\n"; + error_count.push_back( 0 ); + } + } + } + + report << "</tr>\n"; + + // now the rest of the table body + + do_table_body( bin_path ); + + // error total row + + report << "<tr> <td> </td><td>Number of Failures</td><td> </td>\n"; + + // for each compiler, generate <td>...</td> html + int compiler = 0; + for ( std::vector<string>::const_iterator itr=toolsets.begin(); + itr != toolsets.end(); ++itr, ++compiler ) + { + report << "<td align=\"center\">" << error_count[compiler] << "</td>\n"; + } + + report << "</tr>\n</table>\n"; + } + +} // unnamed namespace + +// main --------------------------------------------------------------------// + +#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE +#include <boost/test/included/prg_exec_monitor.hpp> + +int cpp_main( int argc, char * argv[] ) // note name! +{ + fs::path comment_path; + while ( argc > 1 && *argv[1] == '-' ) + { + if ( argc > 2 && std::strcmp( argv[1], "--compiler" ) == 0 ) + { specific_compiler = argv[2]; --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--locate-root" ) == 0 ) + { locate_root = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--comment" ) == 0 ) + { comment_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--notes" ) == 0 ) + { notes_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--notes-map" ) == 0 ) + { notes_map_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( std::strcmp( argv[1], "--ignore-pass" ) == 0 ) ignore_pass = true; + else if ( std::strcmp( argv[1], "--no-warn" ) == 0 ) no_warn = true; + else if ( std::strcmp( argv[1], "--v1" ) == 0 ) boost_build_v2 = false; + else if ( std::strcmp( argv[1], "--v2" ) == 0 ) boost_build_v2 = true; + else if ( argc > 2 && std::strcmp( argv[1], "--jamfile" ) == 0) + { jamfile_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( std::strcmp( argv[1], "--compile-time" ) == 0 ) compile_time = true; + else if ( std::strcmp( argv[1], "--run-time" ) == 0 ) run_time = true; + else { std::cerr << "Unknown option: " << argv[1] << "\n"; argc = 1; } + --argc; + ++argv; + } + + if ( argc != 3 && argc != 4 ) + { + std::cerr << + "Usage: compiler_status [options...] boost-root status-file [links-file]\n" + " boost-root is the path to the boost tree root directory.\n" + " status-file and links-file are paths to the output files.\n" + "Must be run from directory containing Jamfile\n" + " options: --compiler name Run for named compiler only\n" + " --ignore-pass Do not report tests which pass all compilers\n" + " --no-warn Warnings not reported if test passes\n" + " --locate-root path Path to ALL_LOCATE_TARGET for bjam;\n" + " default boost-root.\n" + " --comment path Path to file containing HTML\n" + " to be copied into status-file.\n" + " --notes path Path to file containing HTML\n" + " to be copied into status-file.\n" + " --notes-map path Path to file of toolset/test,n lines, where\n" + " n is number of note bookmark in --notes file.\n" + " --jamfile path Path to Jamfile. By default \"Jamfile\".\n" + " --v1 Assume Boost.Build version 1.\n" + " --v2 Assume Boost.Build version 2. (default)\n" + " --ignore-pass Ignore passing tests.\n" + " --no-warn Do not report warnings.\n" + " --compile-time Show compile time.\n" + " --run-time Show run time.\n" + "Example: compiler_status --compiler gcc /boost-root cs.html cs-links.html\n" + "Note: Only the leaf of the links-file path and --notes file string are\n" + "used in status-file HTML links. Thus for browsing, status-file,\n" + "links-file, and --notes file must all be in the same directory.\n" + ; + return 1; + } + + boost_root = fs::path( argv[1], fs::native ); + if ( locate_root.empty() ) locate_root = boost_root; + + if (jamfile_path.empty()) + if (boost_build_v2) + jamfile_path = "Jamfile.v2"; + else + jamfile_path = "Jamfile"; + jamfile_path = fs::complete( jamfile_path, fs::initial_path() ); + jamfile.open( jamfile_path ); + if ( !jamfile ) + { + std::cerr << "Could not open Jamfile: " << jamfile_path.native_file_string() << std::endl; + return 1; + } + + report.open( fs::path( argv[2], fs::native ) ); + if ( !report ) + { + std::cerr << "Could not open report output file: " << argv[2] << std::endl; + return 1; + } + + if ( argc == 4 ) + { + fs::path links_path( argv[3], fs::native ); + links_name = links_path.leaf(); + links_file.open( links_path ); + if ( !links_file ) + { + std::cerr << "Could not open links output file: " << argv[3] << std::endl; + return 1; + } + } + else no_links = true; + + build_notes_bookmarks(); + + char run_date[128]; + std::time_t tod; + std::time( &tod ); + std::strftime( run_date, sizeof(run_date), + "%X UTC, %A %d %B %Y", std::gmtime( &tod ) ); + + std::string rev = revision( boost_root ); + + report << "<html>\n" + "<head>\n" + "<title>Boost Test Results</title>\n" + "</head>\n" + "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + "<table border=\"0\">\n" + "<tr>\n" + "<td><img border=\"0\" src=\"http://www.boost.org/boost.png\" width=\"277\" " + "height=\"86\"></td>\n" + "<td>\n" + "<h1>Boost Test Results - " + platform_desc() + "</h1>\n" + "<b>Run</b> " + << run_date; + if ( !rev.empty() ) report << ", <b>Revision</b> " << rev; + report << "\n"; + + + if ( compile_time ) + report << "<p>Times reported are elapsed wall clock time in seconds.</p>\n"; + + + if ( !comment_path.empty() ) + { + fs::ifstream comment_file( comment_path ); + if ( !comment_file ) + { + std::cerr << "Could not open \"--comment\" input file: " << comment_path.string() << std::endl; + return 1; + } + char c; + while ( comment_file.get( c ) ) { report.put( c ); } + } + + report << "</td>\n</table>\n<br>\n"; + + if ( !no_links ) + { + links_file + << "<html>\n" + "<head>\n" + "<title>Boost Test Details</title>\n" + "</head>\n" + "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + "<table border=\"0\">\n" + "<tr>\n" + "<td><img border=\"0\" src=\"http://www.boost.org/boost.png\" width=\"277\" " + "height=\"86\"></td>\n" + "<td>\n" + "<h1>Boost Test Details - " + platform_desc() + "</h1>\n" + "<b>Run Date:</b> " + << run_date; + if ( !rev.empty() ) links_file << ", <b>Revision</b> " << rev; + links_file << "\n</td>\n</table>\n<br>\n"; + } + + do_table(); + + if ( load_notes_html() ) report << notes_html << "\n"; + + report << "</body>\n" + "</html>\n" + ; + + if ( !no_links ) + { + links_file + << "</body>\n" + "</html>\n" + ; + } + return 0; +} diff --git a/tools/regression/src/detail/tiny_xml.cpp b/tools/regression/src/detail/tiny_xml.cpp new file mode 100644 index 0000000000..682c04ff7b --- /dev/null +++ b/tools/regression/src/detail/tiny_xml.cpp @@ -0,0 +1,167 @@ +// tiny XML sub-set tools implementation -----------------------------------// + +// (C) Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "tiny_xml.hpp" +#include <cassert> +#include <cstring> + +namespace +{ + + void eat_whitespace( char & c, std::istream & in ) + { + while ( c == ' ' || c == '\r' || c == '\n' || c == '\t' ) + in.get( c ); + } + + std::string get_name( char & c, std::istream & in ) + { + std::string result; + eat_whitespace( c, in ); + while ( std::strchr( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.", c ) + != 0 ) + { + result += c; + if(!in.get( c )) + throw std::string("xml: unexpected eof"); + } + return result; + } + + void eat_delim( char & c, std::istream & in, + char delim, const std::string & msg ) + { + eat_whitespace( c, in ); + if ( c != delim ) + throw std::string("xml syntax error, expected ") + delim + + " (" + msg + ")"; + in.get( c ); + } + + std::string get_value( char & c, std::istream & in ) + { + std::string result; + while ( c != '\"' ) + { + result += c; + in.get( c ); + } + in.get( c ); + return result; + } + +} + +namespace boost +{ + namespace tiny_xml + { + + // parse -----------------------------------------------------------------// + + element_ptr parse( std::istream & in, const std::string & msg ) + { + char c = 0; // current character + element_ptr e( new element ); + + if(!in.get( c )) + throw std::string("xml: unexpected eof"); + if ( c == '<' ) + if(!in.get( c )) + throw std::string("xml: unexpected eof"); + + e->name = get_name( c, in ); + eat_whitespace( c, in ); + + // attributes + while ( c != '>' ) + { + attribute a; + a.name = get_name( c, in ); + + eat_delim( c, in, '=', msg ); + eat_delim( c, in, '\"', msg ); + + a.value = get_value( c, in ); + + e->attributes.push_back( a ); + eat_whitespace( c, in ); + } + if(!in.get( c )) // next after '>' + throw std::string("xml: unexpected eof"); + + eat_whitespace( c, in ); + + // sub-elements + while ( c == '<' ) + { + if ( in.peek() == '/' ) break; + e->elements.push_back( parse( in, msg ) ); + in.get( c ); // next after '>' + eat_whitespace( c, in ); + } + + // content + if ( c != '<' ) + { + e->content += '\n'; + while ( c != '<' ) + { + e->content += c; + if(!in.get( c )) + throw std::string("xml: unexpected eof"); + } + } + + assert( c == '<' ); + if(!in.get( c )) // next after '<' + throw std::string("xml: unexpected eof"); + + eat_delim( c, in, '/', msg ); + std::string end_name( get_name( c, in ) ); + if ( e->name != end_name ) + throw std::string("xml syntax error: beginning name ") + + e->name + " did not match end name " + end_name + + " (" + msg + ")"; + + eat_delim( c, in, '>', msg ); + return e; + } + + // write ---------------------------------------------------------------// + + void write( const element & e, std::ostream & out ) + { + out << "<" << e.name; + if ( !e.attributes.empty() ) + { + for( attribute_list::const_iterator itr = e.attributes.begin(); + itr != e.attributes.end(); ++itr ) + { + out << " " << itr->name << "=\"" << itr->value << "\""; + } + } + out << ">"; + if ( !e.elements.empty() ) + { + out << "\n"; + for( element_list::const_iterator itr = e.elements.begin(); + itr != e.elements.end(); ++itr ) + { + write( **itr, out ); + } + } + if ( !e.content.empty() ) + { + out << e.content; + } + out << "</" << e.name << ">\n"; + } + + } // namespace tiny_xml +} // namespace boost + diff --git a/tools/regression/src/detail/tiny_xml.hpp b/tools/regression/src/detail/tiny_xml.hpp new file mode 100644 index 0000000000..f9d91d2652 --- /dev/null +++ b/tools/regression/src/detail/tiny_xml.hpp @@ -0,0 +1,70 @@ +// tiny XML sub-set tools --------------------------------------------------// + +// (C) Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Provides self-contained tools for this XML sub-set: +// +// element ::= { "<" name { name "=" "\"" value "\"" } ">" +// {element} [contents] "</" name ">" } +// +// The point of "self-contained" is to minimize tool-chain dependencies. + +#ifndef BOOST_TINY_XML_H +#define BOOST_TINY_XML_H + +#include "boost/smart_ptr.hpp" // for shared_ptr +#include "boost/utility.hpp" // for noncopyable +#include <list> +#include <iostream> +#include <string> + +namespace boost +{ + namespace tiny_xml + { + class element; + struct attribute + { + std::string name; + std::string value; + + attribute(){} + attribute( const std::string & name, const std::string & value ) + : name(name), value(value) {} + }; + typedef boost::shared_ptr< element > element_ptr; + typedef std::list< element_ptr > element_list; + typedef std::list< attribute > attribute_list; + + class element + : private boost::noncopyable // because deep copy sematics would be required + { + public: + std::string name; + attribute_list attributes; + element_list elements; + std::string content; + + element() {} + explicit element( const std::string & name ) : name(name) {} + }; + + element_ptr parse( std::istream & in, const std::string & msg ); + // Precondition: stream positioned at either the initial "<" + // or the first character after the initial "<". + // Postcondition: stream positioned at the first character after final + // ">" (or eof). + // Returns: an element_ptr to an element representing the parsed stream. + // Throws: std::string on syntax error. msg appended to what() string. + + void write( const element & e, std::ostream & out ); + + } +} + +#endif // BOOST_TINY_XML_H + + + diff --git a/tools/regression/src/detail/tiny_xml_test.cpp b/tools/regression/src/detail/tiny_xml_test.cpp new file mode 100644 index 0000000000..b5c0542ba4 --- /dev/null +++ b/tools/regression/src/detail/tiny_xml_test.cpp @@ -0,0 +1,17 @@ +// tiny XML test program ---------------------------------------------------// + +// Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "tiny_xml.hpp" + +#include <iostream> + +int main() +{ + boost::tiny_xml::element_ptr tree( boost::tiny_xml::parse( std::cin ) ); + boost::tiny_xml::write( *tree, std::cout ); + return 0; +} + diff --git a/tools/regression/src/detail/tiny_xml_test.txt b/tools/regression/src/detail/tiny_xml_test.txt new file mode 100644 index 0000000000..25bc531e0b --- /dev/null +++ b/tools/regression/src/detail/tiny_xml_test.txt @@ -0,0 +1,12 @@ +<root> +<element-1 at-1="abcd" at-2 = "defg" > +<element-1a> +It's Howdy Doody time! +</element-1a> +<element-1b>It's not Howdy Doody time!</element-1b> +</element-1> +<element-2> +It's +Eastern Standard time! +</element-2> +</root> diff --git a/tools/regression/src/library_status.cpp b/tools/regression/src/library_status.cpp new file mode 100644 index 0000000000..051f125500 --- /dev/null +++ b/tools/regression/src/library_status.cpp @@ -0,0 +1,983 @@ +// Generate Compiler Status HTML from jam regression test output -----------// + +// Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/tools/regression/ for documentation. + +//Note: This version of the original program builds a large table +//which includes all build variations such as build/release, static/dynamic, etc. + + +/******************************************************************************* + +This program was designed to work unchanged on all platforms and +configurations. All output which is platform or configuration dependent +is obtained from external sources such as the .xml file from +process_jam_log execution, the tools/build/xxx-tools.jam files, or the +output of the config_info tests. + +Please avoid adding platform or configuration dependencies during +program maintenance. + +*******************************************************************************/ + +#include "boost/filesystem/operations.hpp" +#include "boost/filesystem/fstream.hpp" + +namespace fs = boost::filesystem; + +#include "detail/tiny_xml.hpp" +namespace xml = boost::tiny_xml; + +#include "boost/iterator/transform_iterator.hpp" + +#include <cstdlib> // for abort, exit +#include <string> +#include <vector> +#include <set> +#include <utility> // for make_pair on STLPort +#include <map> +#include <algorithm> +#include <iostream> +#include <fstream> +#include <ctime> +#include <stdexcept> +#include <cassert> +#include <utility> + +using std::string; + +const string pass_msg( "Pass" ); +const string warn_msg( "<i>Warn</i>" ); +const string fail_msg( "<font color=\"#FF0000\"><i>Fail</i></font>" ); +const string note_msg( "<sup>*</sup>" ); +const string missing_residue_msg( "<i>Missing</i>" ); + +const std::size_t max_compile_msg_size = 10000; + +namespace +{ + fs::path boost_root; // boost-root complete path + fs::path locate_root; // locate-root (AKA ALL_LOCATE_TARGET) complete path + bool ignore_pass = false; + bool no_warn = false; + bool no_links = false; + + fs::directory_iterator end_itr; + + // transform pathname to something html can accept + struct char_xlate { + typedef char result_type; + result_type operator()(char c) const{ + if(c == '/') + return '-'; + return c; + } + }; + typedef boost::transform_iterator<char_xlate, std::string::const_iterator> html_from_path; + + template<class I1, class I2> + std::ostream & operator<<( + std::ostream &os, + std::pair<I1, I2> p + ){ + while(p.first != p.second) + os << *p.first++; + return os; + } + + struct col_node { + int rows, cols; + bool has_leaf; + typedef std::map<std::string, col_node> subcolumns_t; + subcolumns_t m_subcolumns; + bool operator<(const col_node &cn) const; + col_node() : + has_leaf(false) + {} + std::pair<int, int> get_spans(); + }; + + std::pair<int, int> col_node::get_spans(){ + rows = 1; + cols = 0; + if(has_leaf){ + cols = 1; + } + if(! m_subcolumns.empty()){ + subcolumns_t::iterator itr; + for(itr = m_subcolumns.begin(); itr != m_subcolumns.end(); ++itr){ + std::pair<int, int> spans; + spans = itr->second.get_spans(); + rows = std::max(rows, spans.first); + cols += spans.second; + } + ++rows; + } + return std::make_pair(rows, cols); + } + + void build_node_tree(const fs::path & dir_root, col_node & node){ + fs::path xml_file_path( dir_root / "test_log.xml" ); + if (fs::exists( xml_file_path ) ) + { + node.has_leaf = true; + } + fs::directory_iterator itr(dir_root); + while(itr != end_itr){ + if(fs::is_directory(*itr)){ + std::pair<col_node::subcolumns_t::iterator, bool> result + = node.m_subcolumns.insert( + std::make_pair(itr->leaf(), col_node()) + ); + build_node_tree(*itr, result.first->second); + } + ++itr; + } + } + + fs::ofstream report; + fs::ofstream links_file; + string links_name; + + fs::path notes_path; + string notes_html; + + fs::path notes_map_path; + typedef std::multimap< string, string > notes_map; // key is test_name-toolset, + // value is note bookmark + notes_map notes; + + string specific_compiler; // if running on one toolset only + + const string empty_string; + + // build notes_bookmarks from notes HTML -----------------------------------// + + void build_notes_bookmarks() + { + if ( notes_map_path.empty() ) return; + fs::ifstream notes_map_file( notes_map_path ); + if ( !notes_map_file ) + { + std::cerr << "Could not open --notes-map input file: " << notes_map_path.string() << std::endl; + std::exit( 1 ); + } + string line; + while( std::getline( notes_map_file, line ) ) + { + string::size_type pos = 0; + if ( (pos = line.find( ',', pos )) == string::npos ) continue; + string key(line.substr( 0, pos ) ); + string bookmark( line.substr( pos+1 ) ); + + // std::cout << "inserting \"" << key << "\",\"" << bookmark << "\"\n"; + notes.insert( notes_map::value_type( key, bookmark ) ); + } + } + + // load_notes_html ---------------------------------------------------------// + + bool load_notes_html() + { + if ( notes_path.empty() ) return false; + fs::ifstream notes_file( notes_path ); + if ( !notes_file ) + { + std::cerr << "Could not open --notes input file: " << notes_path.string() << std::endl; + std::exit( 1 ); + } + string line; + bool in_body( false ); + while( std::getline( notes_file, line ) ) + { + if ( in_body && line.find( "</body>" ) != string::npos ) in_body = false; + if ( in_body ) notes_html += line; + else if ( line.find( "<body>" ) ) in_body = true; + } + return true; + } + + // extract object library name from target directory string ----------------// + + string extract_object_library_name( const string & s ) + { + string t( s ); + string::size_type pos = t.find( "/build/" ); + if ( pos != string::npos ) pos += 7; + else if ( (pos = t.find( "/test/" )) != string::npos ) pos += 6; + else return ""; + return t.substr( pos, t.find( "/", pos ) - pos ); + } + + // element_content ---------------------------------------------------------// + + const string & element_content( + const xml::element & root, const string & name ) + { + const static string empty_string; + xml::element_list::const_iterator itr; + for ( itr = root.elements.begin(); + itr != root.elements.end() && (*itr)->name != name; + ++itr ) {} + return itr != root.elements.end() ? (*itr)->content : empty_string; + } + + // find_element ------------------------------------------------------------// + + const xml::element & find_element( + const xml::element & root, const string & name ) + { + static const xml::element empty_element; + xml::element_list::const_iterator itr; + for ( itr = root.elements.begin(); + itr != root.elements.end() && (*itr)->name != name; + ++itr ) {} + return itr != root.elements.end() ? *((*itr).get()) : empty_element; + } + + // attribute_value ----------------------------------------------------------// + + const string & attribute_value( + const xml::element & element, + const string & attribute_name + ){ + xml::attribute_list::const_iterator atr; + for( + atr = element.attributes.begin(); + atr != element.attributes.end(); + ++atr + ){ + if(atr->name == attribute_name) + return atr->value; + } + static const string empty_string; + return empty_string; + } + + // generate_report ---------------------------------------------------------// + + // return 0 if nothing generated, 1 otherwise, except 2 if compiler msgs + int generate_report( + const xml::element & db, + const std::string source_library_name, + const string & test_type, + const fs::path & target_dir, + bool pass, + bool always_show_run_output + ) + { + // compile msgs sometimes modified, so make a local copy + string compile( ((pass && no_warn) + ? empty_string : element_content( db, "compile" )) ); + + const string & link( pass ? empty_string : element_content( db, "link" ) ); + const string & run( (pass && !always_show_run_output) + ? empty_string : element_content( db, "run" ) ); + string lib( (pass ? empty_string : element_content( db, "lib" )) ); + + // some compilers output the filename even if there are no errors or + // warnings; detect this if one line of output and it contains no space. + string::size_type pos = compile.find( '\n', 1 ); + if ( pos != string::npos && compile.size()-pos <= 2 + && compile.find( ' ' ) == string::npos ) compile.clear(); + + if ( lib.empty() + && ( + compile.empty() || test_type == "compile_fail" + ) + && link.empty() + && run.empty() + ) + return 0; + + int result = 1; // some kind of msg for sure + + // limit compile message length + if ( compile.size() > max_compile_msg_size ) + { + compile.erase( max_compile_msg_size ); + compile += "...\n (remainder deleted because of excessive size)\n"; + } + + links_file << "<h2><a name=\""; + links_file << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + << "\">" + << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + ; + links_file << "</a></h2>\n";; + + if ( !compile.empty() ) + { + ++result; + links_file << "<h3>Compiler output:</h3><pre>" + << compile << "</pre>\n"; + } + if ( !link.empty() ) + links_file << "<h3>Linker output:</h3><pre>" << link << "</pre>\n"; + if ( !run.empty() ) + links_file << "<h3>Run output:</h3><pre>" << run << "</pre>\n"; + + // for an object library failure, generate a reference to the object + // library failure message, and (once only) generate the object + // library failure message itself + static std::set< string > failed_lib_target_dirs; // only generate once + if ( !lib.empty() ) + { + if ( lib[0] == '\n' ) lib.erase( 0, 1 ); + string object_library_name( extract_object_library_name( lib ) ); + + // changing the target directory naming scheme breaks + // extract_object_library_name() + assert( !object_library_name.empty() ); + if ( object_library_name.empty() ) + std::cerr << "Failed to extract object library name from " << lib << "\n"; + + links_file << "<h3>Library build failure: </h3>\n" + "See <a href=\"#" + << source_library_name << "-" + << object_library_name << "-" + << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + << source_library_name << " - " + << object_library_name << " - " + << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + << "</a>"; + if ( failed_lib_target_dirs.find( lib ) == failed_lib_target_dirs.end() ) + { + failed_lib_target_dirs.insert( lib ); + fs::path pth( locate_root / lib / "test_log.xml" ); + fs::ifstream file( pth ); + if ( file ) + { + xml::element_ptr db = xml::parse( file, pth.string() ); + generate_report( + *db, + source_library_name, + test_type, + target_dir, + false, + false + ); + } + else + { + links_file << "<h2><a name=\"" + << object_library_name << "-" + << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + << "\">" + << object_library_name << " - " + << std::make_pair( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()) + ) + << "</a></h2>\n" + << "test_log.xml not found\n"; + } + } + } + return result; + } + + // add_notes --------------------------------------------------------------// + + void add_notes( const string & key, bool fail, string & sep, string & target ) + { + notes_map::const_iterator itr = notes.lower_bound( key ); + if ( itr != notes.end() && itr->first == key ) + { + for ( ; itr != notes.end() && itr->first == key; ++itr ) + { + string note_desc( itr->second[0] == '-' + ? itr->second.substr( 1 ) : itr->second ); + if ( fail || itr->second[0] == '-' ) + { + target += sep; + sep = ","; + target += "<a href=\""; + target += "#"; + target += note_desc; + target += "\">"; + target += note_desc; + target += "</a>"; + } + } + } + } + + // do_cell ---------------------------------------------------------------// + bool do_cell( + const fs::path & target_dir, + const string & lib_name, + string & target, + bool profile + ){ + // return true if any results except pass_msg + bool pass = false; + + fs::path xml_file_path( target_dir / "test_log.xml" ); + if ( !fs::exists( xml_file_path ) ) + { + // suppress message because there are too many of them. + // "missing" is a legitmate result as its not a requirement + // that every test be run in every figuration. + //std::cerr << "Missing jam_log.xml in target:\n " + // << target_dir.string() << "\n"; + target += "<td align=\"right\">" + missing_residue_msg + "</td>"; + return true; + } + + int anything_generated = 0; + bool note = false; + + fs::ifstream file( xml_file_path ); + if ( !file ) // could not open jam_log.xml + { + std::cerr << "Can't open jam_log.xml in target:\n " + << target_dir.string() << "\n"; + target += "<td>" + missing_residue_msg + "</td>"; + return false; + } + + string test_type( "unknown" ); + bool always_show_run_output( false ); + + xml::element_ptr dbp = xml::parse( file, xml_file_path.string() ); + const xml::element & db( *dbp ); + test_type = attribute_value( db, "test-type" ); + always_show_run_output + = attribute_value( db, "show-run-output" ) == "true"; + + std::string test_type_base( test_type ); + if ( test_type_base.size() > 5 ) + { + const string::size_type trailer = test_type_base.size() - 5; + if ( test_type_base.substr( trailer ) == "_fail" ) + { + test_type_base.erase( trailer ); + } + } + if ( test_type_base.size() > 4 ) + { + const string::size_type trailer = test_type_base.size() - 4; + if ( test_type_base.substr( trailer ) == "_pyd" ) + { + test_type_base.erase( trailer ); + } + } + const xml::element & test_type_element( find_element( db, test_type_base ) ); + + pass = !test_type_element.name.empty() + && attribute_value( test_type_element, "result" ) != "fail"; + + if (!no_links){ + if(!test_type_element.name.empty()) + note = attribute_value( test_type_element, "result" ) == "note"; + anything_generated = + generate_report( + db, + lib_name, + test_type, + target_dir, + pass, + always_show_run_output || note + ); + } + + // generate the status table cell pass/warn/fail HTML + target += "<td align=\"right\">"; + if ( anything_generated != 0 ) + { + target += "<a href=\""; + target += links_name; + target += "#"; + std::copy( + html_from_path(target_dir.string().begin()), + html_from_path(target_dir.string().end()), + std::back_inserter(target) + ); + target += "\">"; + target += pass + ? (anything_generated < 2 ? pass_msg : warn_msg) + : fail_msg; + target += "</a>"; + if ( pass && note ) target += note_msg; + } + else target += pass ? pass_msg : fail_msg; + + // if profiling + if(profile && pass){ + // add link to profile + target += " <a href=\""; + target += (target_dir / "profile.txt").string(); + target += "\"><i>Profile</i></a>"; + } + + // if notes, generate the superscript HTML +// if ( !notes.empty() ) +// target += get_notes( toolset, lib_name, test_name, !pass ); + + target += "</td>"; + return (anything_generated != 0) || !pass; + } + + bool visit_node_tree( + const col_node & node, + fs::path dir_root, + const string & lib_name, + string & target, + bool profile + ){ + bool retval = false; + if(node.has_leaf){ + retval = do_cell( + dir_root, + lib_name, + target, + profile + ); + } + + col_node::subcolumns_t::const_iterator col_itr; + for( + col_itr = node.m_subcolumns.begin(); + col_itr != node.m_subcolumns.end(); + ++col_itr + ){ + fs::path subdir = dir_root / col_itr->first; + retval |= visit_node_tree( + col_itr->second, + subdir, + lib_name, + target, + col_itr->first == "profile" + ); + } + return retval; + } + + // emit results for each test + void do_row( + col_node test_node, + const fs::path & test_dir, + const string & lib_name, + const string & test_name, + string & target + ){ + string::size_type row_start_pos = target.size(); + + target += "<tr>"; + + target += "<td>"; + //target += "<a href=\"" + url_prefix_dir_view + "/libs/" + lib_name + "\">"; + target += test_name; + target += "</a>"; + target += "</td>"; + +// target += "<td>" + test_type + "</td>"; + + bool no_warn_save = no_warn; + +// if ( test_type.find( "fail" ) != string::npos ) no_warn = true; + + // emit cells on this row + bool anything_to_report = visit_node_tree( + test_node, + test_dir, + lib_name, + target, + false + ); + + target += "</tr>"; + + if ( ignore_pass + && ! anything_to_report ) + target.erase( row_start_pos ); + + no_warn = no_warn_save; + } + + // do_table_body -----------------------------------------------------------// + + void do_table_body( + col_node root_node, + const string & lib_name, + const fs::path & test_lib_dir + ){ + // rows are held in a vector so they can be sorted, if desired. + std::vector<string> results; + + for ( fs::directory_iterator itr( test_lib_dir ); itr != end_itr; ++itr ) + { + if(! fs::is_directory(*itr)) + continue; + + string test_name = itr->leaf(); + // strip off the ".test" is there is one + string::size_type s = test_name.find( ".test" ); + if(string::npos != s) + test_name.resize(s); + + results.push_back( std::string() ); + do_row( + root_node, //*test_node_itr++, + *itr, // test dir + lib_name, + test_name, + results[results.size()-1] + ); + } + + std::sort( results.begin(), results.end() ); + + for ( + std::vector<string>::iterator v(results.begin()); + v != results.end(); + ++v + ){ + report << *v << "\n"; + } + } + + // column header-----------------------------------------------------------// + int header_depth(const col_node & root){ + col_node::subcolumns_t::const_iterator itr; + int max_depth = 1; + for(itr = root.m_subcolumns.begin(); itr != root.m_subcolumns.end(); ++itr){ + max_depth = std::max(max_depth, itr->second.rows); + } + return max_depth; + } + + void header_cell(int rows, int cols, const std::string & name){ + // add row cells + report << "<td align=\"center\" " ; + if(1 < cols) + report << "colspan=\"" << cols << "\" " ; + if(1 < rows) + // span rows to the end the header + report << "rowspan=\"" << rows << "\" " ; + report << ">" ; + report << name; + report << "</td>\n"; + } + + void emit_column_headers( + const col_node & node, + int display_row, + int current_row, + int row_count + ){ + if(current_row < display_row){ + if(! node.m_subcolumns.empty()){ + col_node::subcolumns_t::const_iterator itr; + for(itr = node.m_subcolumns.begin(); itr != node.m_subcolumns.end(); ++itr){ + emit_column_headers(itr->second, display_row, current_row + 1, row_count); + } + } + return; + } + if(node.has_leaf && ! node.m_subcolumns.empty()){ + header_cell(row_count - current_row, 1, std::string("")); + } + + col_node::subcolumns_t::const_iterator itr; + for(itr = node.m_subcolumns.begin(); itr != node.m_subcolumns.end(); ++itr){ + if(1 == itr->second.rows) + header_cell(row_count - current_row, itr->second.cols, itr->first); + else + header_cell(1, itr->second.cols, itr->first); + } + } + + fs::path find_lib_test_dir(){ + // walk up from the path were we started until we find + // bin or bin.v2 + + fs::path::const_iterator leaf_itr = fs::initial_path().end(); + fs::path test_lib_dir = fs::initial_path(); + for(;;){ + if(fs::is_directory( test_lib_dir / "bin.v2")){ + test_lib_dir /= "bin.v2"; + break; + } + if(fs::is_directory( test_lib_dir / "bin")){ + // v1 includes the word boost + test_lib_dir /= "bin"; + test_lib_dir /= "boost"; + break; + } + if(test_lib_dir.empty()) + throw std::string("binary path not found"); + if(*leaf_itr != "libs") + --leaf_itr; + test_lib_dir.remove_leaf(); + } + + if(leaf_itr == fs::initial_path().end()) + throw std::string("must be run from within a library directory"); + + while(leaf_itr != fs::initial_path().end()){ + test_lib_dir /= *leaf_itr++; // append "libs" + } + return test_lib_dir; + } + + // note : uncomment the #if/#endif and what this compile !!! + string find_lib_name(fs::path lib_test_dir){ + unsigned int count; + fs::path::iterator e_itr = lib_test_dir.end(); + for(count = 0;; ++count){ + if(*--e_itr == "libs") + break; + if(lib_test_dir.empty()) + throw std::string("must be run from within a library directory"); + } + string library_name; + for(;;){ + library_name.append(*++e_itr); + if(1 == --count) + break; + library_name.append("/"); + } + return library_name; + } + + fs::path find_boost_root(){ + fs::path boost_root = fs::initial_path(); + for(;;){ + if(fs::is_directory( boost_root / "boost")){ + break; + } + if(boost_root.empty()) + throw std::string("boost root not found"); + boost_root.remove_leaf(); + } + + return boost_root; + } + + // do_table ----------------------------------------------------------------// + void do_table(const string & lib_name) + { + col_node root_node; + + fs::path lib_test_dir = find_lib_test_dir(); + + for ( fs::directory_iterator itr(lib_test_dir); itr != end_itr; ++itr ) + { + if(! fs::is_directory(*itr)) + continue; + build_node_tree(*itr, root_node); + } + + // visit directory nodes and record nodetree + report << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"; + + // emit + root_node.get_spans(); + int row_count = header_depth(root_node); + report << "<tr>\n"; + report << "<td rowspan=\"" << row_count << "\">Test Name</td>\n"; + + // emit column headers + int row_index = 0; + for(;;){ + emit_column_headers(root_node, row_index, 0, row_count); + report << "</tr>" ; + if(++row_index == row_count) + break; + report << "<tr>\n"; + } + + // now the rest of the table body + do_table_body(root_node, lib_name, lib_test_dir); + + report << "</table>\n"; + } +}// unnamed namespace + +// main --------------------------------------------------------------------// + +#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE +#include <boost/test/included/prg_exec_monitor.hpp> + +int cpp_main( int argc, char * argv[] ) // note name! +{ + fs::path comment_path; + while ( argc > 1 && *argv[1] == '-' ) + { + if ( argc > 2 && std::strcmp( argv[1], "--compiler" ) == 0 ) + { specific_compiler = argv[2]; --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--locate-root" ) == 0 ) + { locate_root = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--boost-root" ) == 0 ) + { boost_root = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--comment" ) == 0 ) + { comment_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--notes" ) == 0 ) + { notes_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( argc > 2 && std::strcmp( argv[1], "--notes-map" ) == 0 ) + { notes_map_path = fs::path( argv[2], fs::native ); --argc; ++argv; } + else if ( std::strcmp( argv[1], "--ignore-pass" ) == 0 ) ignore_pass = true; + else if ( std::strcmp( argv[1], "--no-warn" ) == 0 ) no_warn = true; + else if ( std::strcmp( argv[1], "--v2" ) == 0 ) + {--argc; ++argv ;} // skip + else if ( argc > 2 && std::strcmp( argv[1], "--jamfile" ) == 0) + {--argc; ++argv;} // skip + else { std::cerr << "Unknown option: " << argv[1] << "\n"; argc = 1; } + --argc; + ++argv; + } + + if ( argc != 2 && argc != 3 ) + { + std::cerr << + "Usage: library_status [options...] status-file [links-file]\n" + " boost-root is the path to the boost tree root directory.\n" + " status-file and links-file are paths to the output files.\n" + " options: --compiler name Run for named compiler only\n" + " --ignore-pass Do not report tests which pass all compilers\n" + " --no-warn Warnings not reported if test passes\n" + " --boost-root path default derived from current path.\n" + " --locate-root path Path to ALL_LOCATE_TARGET for bjam;\n" + " default boost-root.\n" + " --comment path Path to file containing HTML\n" + " to be copied into status-file.\n" + " --notes path Path to file containing HTML\n" + " to be copied into status-file.\n" + " --notes-map path Path to file of toolset/test,n lines, where\n" + " n is number of note bookmark in --notes file.\n" + "Example: compiler_status --compiler gcc /boost-root cs.html cs-links.html\n" + "Note: Only the leaf of the links-file path and --notes file string are\n" + "used in status-file HTML links. Thus for browsing, status-file,\n" + "links-file, and --notes file must all be in the same directory.\n" + ; + return 1; + } + + if(boost_root.empty()) + boost_root = find_boost_root(); + if ( locate_root.empty() ) + locate_root = boost_root; + + report.open( fs::path( argv[1], fs::native ) ); + if ( !report ) + { + std::cerr << "Could not open report output file: " << argv[2] << std::endl; + return 1; + } + + if ( argc == 3 ) + { + fs::path links_path( argv[2], fs::native ); + links_name = links_path.leaf(); + links_file.open( links_path ); + if ( !links_file ) + { + std::cerr << "Could not open links output file: " << argv[3] << std::endl; + return 1; + } + } + else no_links = true; + + build_notes_bookmarks(); + + const string library_name = find_lib_name(fs::initial_path()); + + char run_date[128]; + std::time_t tod; + std::time( &tod ); + std::strftime( run_date, sizeof(run_date), + "%X UTC, %A %d %B %Y", std::gmtime( &tod ) ); + + report + << "<html>\n" + << "<head>\n" + << "<title>Boost Library Status Automatic Test</title>\n" + << "</head>\n" + << "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + << "<table border=\"0\">\n" + << "<tr>\n" + << "<td><img border=\"0\" " + << "src=\"" + << boost_root / "boost.png" + << "\" width=\"277\" " + << "height=\"86\"></td>\n" + << "<td>\n" + << "<h1>Library Status: " + library_name + "</h1>\n" + << "<b>Run Date:</b> " + << run_date + << "\n" + ; + + if ( !comment_path.empty() ) + { + fs::ifstream comment_file( comment_path ); + if ( !comment_file ) + { + std::cerr << "Could not open \"--comment\" input file: " << comment_path.string() << std::endl; + return 1; + } + char c; + while ( comment_file.get( c ) ) { report.put( c ); } + } + + report << "</td>\n</table>\n<br>\n"; + + if ( !no_links ) + { + links_file + << "<html>\n" + << "<head>\n" + << "<title>Boost Library Status Error Log</title>\n" + << "</head>\n" + << "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + << "<table border=\"0\">\n" + << "<tr>\n" + << "<td><img border=\"0\" src=\"" + << boost_root / "boost.png" + << "\" width=\"277\" " + << "height=\"86\"></td>\n" + << "<td>\n" + << "<h1>Library Status: " + library_name + "</h1>\n" + << "<b>Run Date:</b> " + << run_date + << "\n</td>\n</table>\n<br>\n" + ; + } + + do_table(library_name); + + if ( load_notes_html() ) report << notes_html << "\n"; + + report << "</body>\n" + "</html>\n" + ; + + if ( !no_links ) + { + links_file + << "</body>\n" + "</html>\n" + ; + } + return 0; +} diff --git a/tools/regression/src/library_test.bat b/tools/regression/src/library_test.bat new file mode 100644 index 0000000000..e46144d00f --- /dev/null +++ b/tools/regression/src/library_test.bat @@ -0,0 +1,15 @@ +@echo off +if not "%1" == "" goto bjam + echo Usage: %0 "<bjam arguments>" + echo where typical bjam arguements are: + echo --toolset=msvc-7.1,gcc + echo variant=debug,release,profile + echo link=static,shared + echo threading=single,multi + echo -sBOOST_ARCHIVE_LIST="<archive name>" + goto end +:bjam + bjam --dump-tests %* >bjam.log 2>&1 + process_jam_log --v2 <bjam.log + library_status library_status.html links.html +:end diff --git a/tools/regression/src/library_test.sh b/tools/regression/src/library_test.sh new file mode 100755 index 0000000000..23e6b6930e --- /dev/null +++ b/tools/regression/src/library_test.sh @@ -0,0 +1,14 @@ +if test $# -eq 0 +then + echo "Usage: $0 <bjam arguments>" + echo "Typical bjam arguements are:" + echo " --toolset=msvc-7.1,gcc" + echo " variant=debug,release,profile" + echo " link=static,shared" + echo " threading=single,multi" + echo " -sBOOST_ARCHIVE_LIST=<archive name>" +else + bjam --dump-tests $@ >bjam.log 2>&1 + process_jam_log --v2 <bjam.log + library_status library_status.html links.html +fi diff --git a/tools/regression/src/library_test_all.sh b/tools/regression/src/library_test_all.sh new file mode 100755 index 0000000000..9e1418bcfd --- /dev/null +++ b/tools/regression/src/library_test_all.sh @@ -0,0 +1,85 @@ +if test $# -eq 0 +then + echo "Usage: $0 <bjam arguments>" + echo "Typical bjam arguments are:" + echo " --toolset=msvc-7.1,gcc" + echo " variant=debug,release,profile" + echo " link=static,shared" + echo " threading=single,multi" + echo + echo "note: make sure this script is run from boost root directory !!!" + exit 1 +fi + +if ! test -e libs +then + echo No libs directory found. Run from boost root directory !!! + exit 1 +fi + +#html header +cat <<end >status/library_status_contents.html +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- +(C) Copyright 2007 Robert Ramey - http://www.rrsd.com . +Use, modification and distribution is subject to the Boost Software +License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +--> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<link rel="stylesheet" type="text/css" href="../boost.css"> +<title>Library Status Contents</title> +<body> +end + +cd >nul libs + +# runtests, create library pages, and body of summary page +for lib_name in * +do + if test -d $lib_name + then + cd >nul $lib_name + + if test -e "test/Jamfile.v2" + then + cd >nul test + echo $lib_name + echo >>../../../status/library_status_contents.html "<a target=\"detail\" href=\"../libs/$lib_name/test/library_status.html\">$lib_name</a><br>" + ../../../tools/regression/library_test $@ + cd >nul .. + fi + + for sublib_name in * + do + if test -d $sublib_name + then + cd >nul $sublib_name + if test -e "test/Jamfile.v2" + then + cd >nul test + echo $lib_name/$sublib_name + echo >>../../../../status/library_status_contents.html "<a target=\"detail\" href=\"../libs/$lib_name/$sublib_name/test/library_status.html\">$lib_name/$sublib_name</a><br>" + ../../../../tools/regression/library_test $@ + cd >nul .. + fi + cd >nul .. + fi + done + + cd >nul .. + fi +done + + +cd >nul .. + +#html trailer +cat <<end >>status/library_status_contents.html +</body> +</html> +end + + diff --git a/tools/regression/src/process_jam_log.cpp b/tools/regression/src/process_jam_log.cpp new file mode 100644 index 0000000000..6a1834cbda --- /dev/null +++ b/tools/regression/src/process_jam_log.cpp @@ -0,0 +1,831 @@ +// process jam regression test output into XML -----------------------------// + +// Copyright Beman Dawes 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/tools/regression for documentation. + +#include "detail/tiny_xml.hpp" +#include "boost/filesystem/operations.hpp" +#include "boost/filesystem/fstream.hpp" +#include "boost/filesystem/exception.hpp" +#include "boost/filesystem/convenience.hpp" + +#include <iostream> +#include <string> +#include <cstring> +#include <map> +#include <utility> // for make_pair +#include <ctime> +#include <cctype> // for tolower +#include <cstdlib> // for exit + +using std::string; +namespace xml = boost::tiny_xml; +namespace fs = boost::filesystem; + +// options + +static bool echo = false; +static bool create_dirs = false; +static bool boost_build_v2 = true; + +namespace +{ + struct test_info + { + string file_path; // relative boost-root + string type; + bool always_show_run_output; + }; + typedef std::map< string, test_info > test2info_map; // key is test-name + test2info_map test2info; + + fs::path boost_root; + fs::path locate_root; // ALL_LOCATE_TARGET (or boost_root if none) + + // set_boost_root --------------------------------------------------------// + + void set_boost_root() + { + + boost_root = fs::initial_path(); + + for(;;) + { + if ( fs::exists( boost_root / "libs" ) ) + { + fs::current_path( fs::initial_path() ); // restore initial path + return; + } + fs::current_path( ".." ); + if ( boost_root == fs::current_path() ) + { + fs::current_path( fs::initial_path() ); // restore initial path + std::cout << + "Abort: process_jam_log must be run from within a boost directory tree\n"; + std::exit(1); + } + boost_root = fs::current_path(); + } + } + + // append_html -------------------------------------------------------------// + + void append_html( const string & src, string & target ) + { + // there are a few lines we want to ignore + if ( src.find( "th target..." ) != string::npos + || src.find( "cc1plus.exe: warning: changing search order for system directory" ) != string::npos + || src.find( "cc1plus.exe: warning: as it has already been specified as a non-system directory" ) != string::npos + ) return; + + // on some platforms (e.g. tru64cxx) the following line is a real performance boost + target.reserve(src.size() * 2 + target.size()); + + for ( string::size_type pos = 0; pos < src.size(); ++pos ) + { + if ( src[pos] == '<' ) target += "<"; + else if ( src[pos] == '>' ) target += ">"; + else if ( src[pos] == '&' ) target += "&"; + else target += src[pos]; + } + } + + // timestamp ---------------------------------------------------------------// + + string timestamp() + { + char run_date[128]; + std::time_t tod; + std::time( &tod ); + std::strftime( run_date, sizeof(run_date), + "%Y-%m-%d %X UTC", std::gmtime( &tod ) ); + return string( run_date ); + } + +// convert path separators to forward slashes ------------------------------// + + void convert_path_separators( string & s ) + { + for ( string::iterator itr = s.begin(); itr != s.end(); ++itr ) + if ( *itr == '\\' || *itr == '!' ) *itr = '/'; + } + +// trim_left ----------------------------------------------------------------// + + std::string trim_left( std::string const& s ) + { + std::string::size_type const pos( s.find_first_not_of(' ') ); + return pos != std::string::npos + ? s.substr( pos, s.size() - pos + 1 ) + : "" + ; + } + + +// split --------------------------------------------------------------------// + + std::vector<std::string> split( std::string const& s ) + { + std::string::size_type const pos( s.find_first_of(' ') ); + std::vector<std::string> result( 1, s.substr( 0, pos ) ); + if ( pos == std::string::npos ) + return result; + + std::vector<std::string> const rest( split( trim_left( s.substr( pos, s.size() - pos + 1 ) ) ) ); + result.insert( result.end(), rest.begin(), rest.end() ); + return result; + } + + +// extract a target directory path from a jam target string ----------------// +// s may be relative to the initial_path: +// ..\..\..\libs\foo\build\bin\libfoo.lib\vc7\debug\runtime-link-dynamic\boo.obj +// s may be absolute: +// d:\myboost\libs\foo\build\bin\libfoo.lib\vc7\debug\runtime-link-dynamic\boo.obj +// return path is always relative to the boost directory tree: +// libs/foo/build/bin/libfs.lib/vc7/debug/runtime-link-dynamic + + string target_directory( const string & s ) + { + string temp( s ); + convert_path_separators( temp ); + temp.erase( temp.find_last_of( "/" ) ); // remove leaf + temp = split( trim_left( temp ) ).back(); + if ( temp[0] == '.' ) temp.erase( 0, temp.find_first_not_of( "./" ) ); + else temp.erase( 0, locate_root.string().size()+1 ); + if ( echo ) + std::cout << "\ttarget_directory( \"" << s << "\") -> \"" << temp << "\"" << std::endl; + return temp; + } + + string::size_type target_name_end( const string & s ) + { + string::size_type pos = s.find( ".test/" ); + if ( pos == string::npos ) pos = s.find( ".dll/" ); + if ( pos == string::npos ) pos = s.find( ".so/" ); + if ( pos == string::npos ) pos = s.find( ".lib/" ); + if ( pos == string::npos ) pos = s.find( ".pyd/" ); + if ( pos == string::npos ) pos = s.find( ".a/" ); + return pos; + } + + string toolset( const string & s ) + { + string::size_type pos = target_name_end( s ); + if ( pos == string::npos ) pos = s.find( "build/" ); + if ( pos == string::npos ) return ""; + pos = s.find( "/", pos ) + 1; + return s.substr( pos, s.find( "/", pos ) - pos ); + } + + string test_name( const string & s ) + { + string::size_type pos = target_name_end( s ); + if ( pos == string::npos ) return ""; + string::size_type pos_start = s.rfind( '/', pos ) + 1; + return s.substr( pos_start, + (s.find( ".test/" ) != string::npos + ? pos : s.find( "/", pos )) - pos_start ); + } + + // Take a path to a target directory of test, and + // returns library name corresponding to that path. + string test_path_to_library_name( string const& path ) + { + std::string result; + string::size_type start_pos( path.find( "libs/" ) ); + if ( start_pos != string::npos ) + { + // The path format is ...libs/functional/hash/test/something.test/.... + // So, the part between "libs" and "test/something.test" can be considered + // as library name. But, for some libraries tests are located too deep, + // say numeric/ublas/test/test1 directory, and some libraries have tests + // in several subdirectories (regex/example and regex/test). So, nested + // directory may belong to several libraries. + + // To disambituate, it's possible to place a 'sublibs' file in + // a directory. It means that child directories are separate libraries. + // It's still possible to have tests in the directory that has 'sublibs' + // file. + + std::string interesting; + start_pos += 5; + string::size_type end_pos( path.find( ".test/", start_pos ) ); + end_pos = path.rfind('/', end_pos); + if (path.substr(end_pos - 5, 5) == "/test") + interesting = path.substr( start_pos, end_pos - 5 - start_pos ); + else + interesting = path.substr( start_pos, end_pos - start_pos ); + + // Take slash separate elements until we have corresponding 'sublibs'. + end_pos = 0; + for(;;) + { + end_pos = interesting.find('/', end_pos); + if (end_pos == string::npos) { + result = interesting; + break; + } + result = interesting.substr(0, end_pos); + + if ( fs::exists( ( boost_root / "libs" ) / result / "sublibs" ) ) + { + end_pos = end_pos + 1; + } + else + break; + } + } + + return result; + } + + // Tries to find target name in the string 'msg', starting from + // position start. + // If found, extract the directory name from the target name and + // stores it in 'dir', and return the position after the target name. + // Otherwise, returns string::npos. + string::size_type parse_skipped_msg_aux(const string& msg, + string::size_type start, + string& dir) + { + dir.clear(); + string::size_type start_pos = msg.find( '<', start ); + if ( start_pos == string::npos ) return string::npos; + ++start_pos; + string::size_type end_pos = msg.find( '>', start_pos ); + dir += msg.substr( start_pos, end_pos - start_pos ); + if ( boost_build_v2 ) + { + // The first letter is a magic value indicating + // the type of grist. + convert_path_separators( dir ); + dir.erase( 0, 1 ); + // We need path from root, not from 'status' dir. + if (dir.find("../") == 0) + dir.erase(0,3); + else // dir is always relative to the boost directory tree + dir.erase( 0, locate_root.string().size()+1 ); + } + else + { + if ( dir[0] == '@' ) + { + // new style build path, rooted build tree + convert_path_separators( dir ); + dir.replace( 0, 1, "bin/" ); + } + else + { + // old style build path, integrated build tree + start_pos = dir.rfind( '!' ); + convert_path_separators( dir ); + string::size_type path_sep_pos = dir.find( '/', start_pos + 1 ); + if ( path_sep_pos != string::npos ) + dir.insert( path_sep_pos, "/bin" ); + else + { + // see http://article.gmane.org/gmane.comp.lib.boost.devel/146688; + // the following code assumes that: a) 'dir' is not empty, + // b) 'end_pos != string::npos' and c) 'msg' always ends with '...' + if ( dir[dir.size() - 1] == '@' ) + dir += "/" + msg.substr( end_pos + 1, msg.size() - end_pos - 1 - 3 ); + } + } + } + return end_pos; + } + + // the format of paths is really kinky, so convert to normal form + // first path is missing the leading "..\". + // first path is missing "\bin" after "status". + // second path is missing the leading "..\". + // second path is missing "\bin" after "build". + // second path uses "!" for some separators. + void parse_skipped_msg( const string & msg, + string & first_dir, string & second_dir ) + { + string::size_type pos = parse_skipped_msg_aux(msg, 0, first_dir); + if (pos == string::npos) + return; + parse_skipped_msg_aux(msg, pos, second_dir); + } + +// test_log hides database details -----------------------------------------// + + class test_log + : boost::noncopyable + { + const string & m_target_directory; + xml::element_ptr m_root; + public: + test_log( const string & target_directory, + const string & test_name, + const string & toolset, + bool force_new_file ) + : m_target_directory( target_directory ) + { + if ( !force_new_file ) + { + fs::path pth( locate_root / target_directory / "test_log.xml" ); + fs::ifstream file( pth ); + if ( file ) // existing file + { + try + { + m_root = xml::parse( file, pth.string() ); + return; + } + catch(...) + { + // unable to parse existing XML file, fall through + } + } + } + + string library_name( test_path_to_library_name( target_directory ) ); + + test_info info; + test2info_map::iterator itr( test2info.find( library_name + "/" + test_name ) ); + if ( itr != test2info.end() ) + info = itr->second; + + if ( !info.file_path.empty() ) + library_name = test_path_to_library_name( info.file_path ); + + if ( info.type.empty() ) + { + if ( target_directory.find( ".lib/" ) != string::npos + || target_directory.find( ".dll/" ) != string::npos + || target_directory.find( ".so/" ) != string::npos + || target_directory.find( ".dylib/" ) != string::npos + || target_directory.find( "/build/" ) != string::npos + ) + { + info.type = "lib"; + } + else if ( target_directory.find( ".pyd/" ) != string::npos ) + info.type = "pyd"; + } + + m_root.reset( new xml::element( "test-log" ) ); + m_root->attributes.push_back( + xml::attribute( "library", library_name ) ); + m_root->attributes.push_back( + xml::attribute( "test-name", test_name ) ); + m_root->attributes.push_back( + xml::attribute( "test-type", info.type ) ); + m_root->attributes.push_back( + xml::attribute( "test-program", info.file_path ) ); + m_root->attributes.push_back( + xml::attribute( "target-directory", target_directory ) ); + m_root->attributes.push_back( + xml::attribute( "toolset", toolset ) ); + m_root->attributes.push_back( + xml::attribute( "show-run-output", + info.always_show_run_output ? "true" : "false" ) ); + } + + ~test_log() + { + fs::path pth( locate_root / m_target_directory / "test_log.xml" ); + if ( create_dirs && !fs::exists( pth.branch_path() ) ) + fs::create_directories( pth.branch_path() ); + fs::ofstream file( pth ); + if ( !file ) + { + std::cout << "*****Warning - can't open output file: " + << pth.string() << "\n"; + } + else xml::write( *m_root, file ); + } + + const string & target_directory() const { return m_target_directory; } + + void remove_action( const string & action_name ) + // no effect if action_name not found + { + xml::element_list::iterator itr; + for ( itr = m_root->elements.begin(); + itr != m_root->elements.end() && (*itr)->name != action_name; + ++itr ) {} + if ( itr != m_root->elements.end() ) m_root->elements.erase( itr ); + } + + void add_action( const string & action_name, + const string & result, + const string & timestamp, + const string & content ) + { + remove_action( action_name ); + xml::element_ptr action( new xml::element(action_name) ); + m_root->elements.push_back( action ); + action->attributes.push_back( xml::attribute( "result", result ) ); + action->attributes.push_back( xml::attribute( "timestamp", timestamp ) ); + action->content = content; + } + }; + +// message_manager maps input messages into test_log actions ---------------// + + class message_manager + : boost::noncopyable + { + string m_action_name; // !empty() implies action pending + // IOW, a start_message awaits stop_message + string m_target_directory; + string m_test_name; + string m_toolset; + + bool m_note; // if true, run result set to "note" + // set false by start_message() + + // data needed to stop further compile action after a compile failure + // detected in the same target directory + string m_previous_target_directory; + bool m_compile_failed; + + public: + message_manager() : m_note(false) {} + ~message_manager() { /*assert( m_action_name.empty() );*/ } + + bool note() const { return m_note; } + void note( bool value ) { m_note = value; } + + void start_message( const string & action_name, + const string & target_directory, + const string & test_name, + const string & toolset, + const string & prior_content ) + { + assert( !target_directory.empty() ); + + if ( !m_action_name.empty() ) stop_message( prior_content ); + m_action_name = action_name; + m_target_directory = target_directory; + m_test_name = test_name; + m_toolset = toolset; + m_note = false; + + if ( m_previous_target_directory != target_directory ) + { + m_previous_target_directory = target_directory; + m_compile_failed = false; + } + } + + void stop_message( const string & content ) + { + if ( m_action_name.empty() ) return; + stop_message( m_action_name, m_target_directory, + "succeed", timestamp(), content ); + } + + void stop_message( const string & action_name, + const string & target_directory, + const string & result, + const string & timestamp, + const string & content ) + // the only valid action_names are "compile", "link", "run", "lib" + { + // My understanding of the jam output is that there should never be + // a stop_message that was not preceeded by a matching start_message. + // That understanding is built into message_manager code. + assert( m_action_name == action_name ); + assert( m_target_directory == target_directory ); + assert( result == "succeed" || result == "fail" ); + + // if test_log.xml entry needed + if ( !m_compile_failed + || action_name != "compile" + || m_previous_target_directory != target_directory ) + { + if ( action_name == "compile" + && result == "fail" ) m_compile_failed = true; + + test_log tl( target_directory, + m_test_name, m_toolset, action_name == "compile" ); + tl.remove_action( "lib" ); // always clear out lib residue + + // dependency removal + if ( action_name == "lib" ) + { + tl.remove_action( "compile" ); + tl.remove_action( "link" ); + tl.remove_action( "run" ); + } + else if ( action_name == "compile" ) + { + tl.remove_action( "link" ); + tl.remove_action( "run" ); + if ( result == "fail" ) m_compile_failed = true; + } + else if ( action_name == "link" ) + { + tl.remove_action( "run" ); + } + + // dependency removal won't work right with random names, so assert + else { assert( action_name == "run" ); } + + // add the "run" stop_message action + tl.add_action( action_name, + result == "succeed" && note() ? std::string("note") : result, + timestamp, content ); + } + + m_action_name = ""; // signal no pending action + m_previous_target_directory = target_directory; + } + }; +} + + +// main --------------------------------------------------------------------// + + +int main( int argc, char ** argv ) +{ + // Turn off synchronization with corresponding C standard library files. This + // gives a significant speed improvement on platforms where the standard C++ + // streams are implemented using standard C files. + std::ios::sync_with_stdio(false); + + fs::initial_path(); + + if ( argc <= 1 ) + std::cout << "Usage: bjam [bjam-args] | process_jam_log [--echo] [--create-directories] [--v1|v2] [locate-root]\n" + "locate-root - the same as the bjam ALL_LOCATE_TARGET\n" + " parameter, if any. Default is boost-root.\n" + "create-directories - if the directory for xml file doesn't exists - creates it.\n" + " usually used for processing logfile on different machine\n" + "v2 - bjam version 2 used (default).\n" + "v1 - bjam version 1 used.\n" + ; + + set_boost_root(); + + boost_root.normalize(); + + if ( argc > 1 && std::strcmp( argv[1], "--echo" ) == 0 ) + { + echo = true; + --argc; ++argv; + } + + + if (argc > 1 && std::strcmp( argv[1], "--create-directories" ) == 0 ) + { + create_dirs = true; + --argc; ++argv; + } + + if ( argc > 1 && std::strcmp( argv[1], "--v2" ) == 0 ) + { + boost_build_v2 = true; + --argc; ++argv; + } + + if ( argc > 1 && std::strcmp( argv[1], "--v1" ) == 0 ) + { + boost_build_v2 = false; + --argc; ++argv; + } + + if (argc > 1) + { + locate_root = fs::path( argv[1], fs::native ); + if ( !locate_root.is_complete() ) + locate_root = ( fs::initial_path() / locate_root ).normalize(); + + --argc; ++argv; + } + else + { + locate_root = boost_root; + } + + std::cout << "boost_root: " << boost_root.string() << '\n' + << "locate_root: " << locate_root.string() << '\n'; + + message_manager mgr; + + string line; + string content; + bool capture_lines = false; + + std::istream* input; + if (argc > 1) + { + input = new std::ifstream(argv[1]); + } + else + { + input = &std::cin; + } + + // This loop looks at lines for certain signatures, and accordingly: + // * Calls start_message() to start capturing lines. (start_message() will + // automatically call stop_message() if needed.) + // * Calls stop_message() to stop capturing lines. + // * Capture lines if line capture on. + + int line_num = 0; + while ( std::getline( *input, line ) ) + { + ++line_num; + + std::vector<std::string> const line_parts( split( line ) ); + std::string const line_start( line_parts[0] != "...failed" + ? line_parts[0] + : line_parts[0] + " " + line_parts[1] + ); + + if ( echo ) + { + std::cout + << "line " << line_num << ": " << line << "\n" + << "\tline_start: " << line_start << "\n"; + } + + // create map of test-name to test-info + if ( line_start.find( "boost-test(" ) == 0 ) + { + string::size_type pos = line.find( '"' ); + string test_name( line.substr( pos+1, line.find( '"', pos+1)-pos-1 ) ); + test_info info; + info.always_show_run_output + = line.find( "\"always_show_run_output\"" ) != string::npos; + info.type = line.substr( 11, line.find( ')' )-11 ); + for (unsigned int i = 0; i!=info.type.size(); ++i ) + { info.type[i] = std::tolower( info.type[i] ); } + pos = line.find( ':' ); + // the rest of line is missing if bjam didn't know how to make target + if ( pos + 1 != line.size() ) + { + info.file_path = line.substr( pos+3, + line.find( "\"", pos+3 )-pos-3 ); + convert_path_separators( info.file_path ); + if ( info.file_path.find( "libs/libs/" ) == 0 ) info.file_path.erase( 0, 5 ); + if ( test_name.find( "/" ) == string::npos ) + test_name = "/" + test_name; + test2info.insert( std::make_pair( test_name, info ) ); + // std::cout << test_name << ", " << info.type << ", " << info.file_path << "\n"; + } + else + { + std::cout << "*****Warning - missing test path: " << line << "\n" + << " (Usually occurs when bjam doesn't know how to make a target)\n"; + } + continue; + } + + // these actions represent both the start of a new action + // and the end of a failed action + else if ( line_start.find( "C++-action" ) != string::npos + || line_start.find( "vc-C++" ) != string::npos + || line_start.find( "C-action" ) != string::npos + || line_start.find( "Cc-action" ) != string::npos + || line_start.find( "vc-Cc" ) != string::npos + || line_start.find( ".compile.") != string::npos + || line_start.find( "compile-") != string::npos + || line_start.find( "-compile") != string::npos + || line_start.find( "Link-action" ) != string::npos + || line_start.find( "vc-Link" ) != string::npos + || line_start.find( "Archive-action" ) != string::npos + || line_start.find( ".archive") != string::npos + || ( line_start.find( ".link") != string::npos && + // .linkonce is present in gcc linker messages about + // unresolved symbols. We don't have to parse those + line_start.find( ".linkonce" ) == string::npos ) + ) + { + if ( !test2info.size() ) + { + std::cout << "*****Error - No \"boost-test\" lines encountered.\n" + " (Usually occurs when bjam was envoked without the --dump-tests option\n" + " or bjam was envoked in the wrong directory)\n"; + return 1; + } + + string action( ( line_start.find( "Link-action" ) != string::npos + || line_start.find( "vc-Link" ) != string::npos + || line_start.find( "Archive-action" ) != string::npos + || line_start.find( ".archive") != string::npos + || line_start.find( ".link") != string::npos + ) + ? "link" : "compile" + ); + + if ( line_start.find( "...failed " ) != string::npos ) + { + mgr.stop_message( action, target_directory( line ), + "fail", timestamp(), content ); + } + else + { + string target_dir( target_directory( line ) ); + mgr.start_message( action, target_dir, + test_name( target_dir ), toolset( target_dir ), content ); + } + content = "\n"; + capture_lines = true; + } + + // these actions are only used to stop the previous action + else if ( line_start.find( "-Archive" ) != string::npos + || line_start.find( "MkDir" ) == 0 ) + { + mgr.stop_message( content ); + content.clear(); + capture_lines = false; + } + + else if ( line_start.find( "execute-test" ) != string::npos + || line_start.find( "capture-output" ) != string::npos ) + { + if ( line_start.find( "...failed " ) != string::npos ) + { + mgr.stop_message( "run", target_directory( line ), + "fail", timestamp(), content ); + content = "\n"; + capture_lines = true; + } + else + { + string target_dir( target_directory( line ) ); + mgr.start_message( "run", target_dir, + test_name( target_dir ), toolset( target_dir ), content ); + + // contents of .output file for content + capture_lines = false; + content = "\n"; + fs::ifstream file( locate_root / target_dir + / (test_name(target_dir) + ".output") ); + if ( file ) + { + string ln; + while ( std::getline( file, ln ) ) + { + if ( ln.find( "<note>" ) != string::npos ) mgr.note( true ); + append_html( ln, content ); + content += "\n"; + } + } + } + } + + // bjam indicates some prior dependency failed by a "...skipped" message + else if ( line_start.find( "...skipped" ) != string::npos + && line.find( "<directory-grist>" ) == string::npos + ) + { + mgr.stop_message( content ); + content.clear(); + capture_lines = false; + + if ( line.find( " for lack of " ) != string::npos ) + { + capture_lines = ( line.find( ".run for lack of " ) == string::npos ); + + string target_dir; + string lib_dir; + + parse_skipped_msg( line, target_dir, lib_dir ); + + if ( target_dir != lib_dir ) // it's a lib problem + { + mgr.start_message( "lib", target_dir, + test_name( target_dir ), toolset( target_dir ), content ); + content = lib_dir; + mgr.stop_message( "lib", target_dir, "fail", timestamp(), content ); + content = "\n"; + } + } + + } + + else if ( line_start.find( "**passed**" ) != string::npos + || line_start.find( "failed-test-file" ) != string::npos + || line_start.find( "command-file-dump" ) != string::npos ) + { + mgr.stop_message( content ); + content = "\n"; + capture_lines = true; + } + + else if ( capture_lines ) // hang onto lines for possible later use + { + append_html( line, content );; + content += "\n"; + } + } + + mgr.stop_message( content ); + if (input != &std::cin) + delete input; + return 0; +} diff --git a/tools/regression/src/regression-logs.pl b/tools/regression/src/regression-logs.pl new file mode 100644 index 0000000000..97cd4e9acd --- /dev/null +++ b/tools/regression/src/regression-logs.pl @@ -0,0 +1,197 @@ +#!/usr/bin/perl + +#~ Copyright 2003, Rene Rivera. +#~ Use, modification and distribution are 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) + +use FileHandle; +use Time::Local; + +# Get the whle percent value +# +sub percent_value +{ + my ($count,$total) = @_; + my $percent = int (($count/$total)*100+0.5); + if ($count > 0 && $percent == 0) { $percent = 1; } + if ($count < $total && $percent == 100) { $percent = 99; } + return $percent; +} + +# Generate item html for the pass column. +# +sub result_info_pass +{ + my ($color,$pass,$warn,$fail,$missing) = @_; + my $percent = 100-percent_value($fail+$missing,$pass+$warn+$fail+$missing); + return "<font color=\"$color\"><font size=\"+1\">$percent%</font><br>($warn warnings)</font>"; +} + +# Generate item html for the fail column. +# +sub result_info_fail +{ + my ($color,$pass,$warn,$fail,$missing) = @_; + my $percent = percent_value($fail+$missing,$pass+$warn+$fail+$missing); + return "<font color=\"$color\"><font size=\"+1\">$percent%</font><br>($fail)</font>"; +} + +# Generate an age highlighted run date string. +# Use as: data_info(run-date-html) +# +sub date_info +{ + my %m = ('January',0,'February',1,'March',2,'April',3,'May',4,'June',5, + 'July',6,'August',7,'September',8,'October',9,'November',10,'December',11); + my @d = split(/ |:/,$_[0]); + my ($hour,$min,$sec,$day,$month,$year) = ($d[0],$d[1],$d[2],$d[4],$m{$d[5]},$d[6]); + #print "<!-- $hour.$min.$sec.$day.$month.$year -->\n"; + my $test_t = timegm($sec,$min,$hour,$day,$month,$year); + my $age = time-$test_t; + my $age_days = $age/(60*60*24); + #print "<!-- $age_days days old -->\n"; + my $age_html = "<font>"; + if ($age_days <= 2) { } + elsif ($age_days <= 14) { $age_html = "<font color=\"#FF9900\">"; } + else { $age_html = "<font color=\"#FF0000\">"; } + return $age_html.$_[0]."</font>"; +} + +# Generate an age string based on the run date. +# Use as: age_info(run-date-html) +# +sub age_info +{ + my %m = ('January',0,'February',1,'March',2,'April',3,'May',4,'June',5, + 'July',6,'August',7,'September',8,'October',9,'November',10,'December',11); + my @d = split(/ |:/,$_[0]); + my ($hour,$min,$sec,$day,$month,$year) = ($d[0],$d[1],$d[2],$d[4],$m{$d[5]},$d[6]); + #print "<!-- $hour.$min.$sec.$day.$month.$year -->\n"; + my $test_t = timegm($sec,$min,$hour,$day,$month,$year); + my $age = time-$test_t; + my $age_days = $age/(60*60*24); + #print "<!-- $age_days days old -->\n"; + my $age_html = "<font>"; + if ($age_days <= 2) { } + elsif ($age_days <= 14) { $age_html = "<font color=\"#FF9900\">"; } + else { $age_html = "<font color=\"#FF0000\">"; } + if ($age_days <= 1) { $age_html = $age_html."today"; } + elsif ($age_days <= 2) { $age_html = $age_html."yesterday"; } + elsif ($age_days < 14) { my $days = int $age_days; $age_html = $age_html.$days." days"; } + elsif ($age_days < 7*8) { my $weeks = int $age_days/7; $age_html = $age_html.$weeks." weeks"; } + else { my $months = int $age_days/28; $age_html = $age_html.$months." months"; } + return $age_html."</font>"; +} + +#~ foreach my $k (sort keys %ENV) +#~ { + #~ print "<!-- $k = $ENV{$k} -->\n"; +#~ } +my $logdir = "$ENV{PWD}"; +#~ my $logdir = "C:\\CVSROOTs\\Boost\\boost\\status"; +opendir LOGS, "$logdir"; +my @logs = grep /.*links[^.]*\.html$/, readdir LOGS; +closedir LOGS; +my @bgcolor = ( "bgcolor=\"#EEEEFF\"", "" ); +my $row = 0; +print "<table>\n"; +print "<tr>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Platform</th>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Run Date</th>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Age</th>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Compilers</th>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Pass</th>\n", + "<th align=\"left\" bgcolor=\"#DDDDDD\">Fail</th>\n", + "</tr>\n"; +foreach $l (sort { lc($a) cmp lc($b) } @logs) +{ + my $log = $l; + $log =~ s/-links//s; + my ($spec) = ($log =~ /cs-([^\.]+)/); + my $fh = new FileHandle; + if ($fh->open("<$logdir/$log")) + { + my $content = join('',$fh->getlines()); + $fh->close; + my ($status) = ($content =~ /(<h1>Compiler(.(?!<\/td>))+.)/si); + my ($platform) = ($status =~ /Status: ([^<]+)/si); + my ($run_date) = ($status =~ /Date:<\/b> ([^<]+)/si); + $run_date =~ s/, /<br>/g; + my ($compilers) = ($content =~ /Test Type<\/a><\/t[dh]>((.(?!<\/tr>))+.)/si); + if ($compilers eq "") { next; } + $compilers =~ s/-<br>//g; + $compilers =~ s/<\/td>//g; + my @compiler = ($compilers =~ /<td>(.*)$/gim); + my $count = @compiler; + my @results = ($content =~ /(>Pass<|>Warn<|>Fail<|>Missing<)/gi); + my $test_count = (scalar @results)/$count; + my @pass = map { 0 } (1..$count); + my @warn = map { 0 } (1..$count); + my @fail = map { 0 } (1..$count); + my @missing = map { 0 } (1..$count); + my @total = map { 0 } (1..$count); + #~ print "<!-- ", + #~ "pass = ",join(',',@pass)," ", + #~ "warn = ",join(',',@warn)," ", + #~ "fail = ",join(',',@fail)," ", + #~ "missing = ",join(',',@missing)," ", + #~ "total = ",join(',',@total)," ", + #~ " -->\n"; + for my $t (1..$test_count) + { + my $r0 = (($t-1)*$count); + my $r1 = (($t-1)*$count+$count-1); + my @r = @results[(($t-1)*$count)..(($t-1)*$count+$count-1)]; + #~ print "<!-- ", + #~ "result = ",join(',',@r)," ", + #~ "range = ",$r0,"..",$r1," (",(scalar @results),")", + #~ " -->\n"; + for my $c (1..$count) + { + if ($r[$c-1] =~ /Pass/i) { ++$pass[$c-1]; } + elsif ($r[$c-1] =~ /Warn/i) { ++$warn[$c-1]; } + elsif ($r[$c-1] =~ /Fail/i) { ++$fail[$c-1]; } + elsif ($r[$c-1] =~ /Missing/i) { ++$missing[$c-1]; } + ++$total[$c-1]; + } + } + #~ print "<!-- ", + #~ "pass = ",join(',',@pass)," ", + #~ "warn = ",join(',',@warn)," ", + #~ "fail = ",join(',',@fail)," ", + #~ "missing = ",join(',',@missing)," ", + #~ "total = ",join(',',@total)," ", + #~ " -->\n"; + for my $comp (1..(scalar @compiler)) + { + my @lines = split(/<br>/,$compiler[$comp-1]); + if (@lines > 2) { $compiler[$comp-1] = join(' ',@lines[0..(scalar @lines)-2])."<br>".$lines[(scalar @lines)-1]; } + } + print + "<tr>\n", + "<td rowspan=\"$count\" valign=\"top\"><font size=\"+1\">$platform</font><br>(<a href=\"./$log\">$spec</a>)</td>\n", + "<td rowspan=\"$count\" valign=\"top\">",$run_date,"</td>\n", + "<td rowspan=\"$count\" valign=\"top\">",age_info($run_date),"</td>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",$compiler[0],"</td>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",result_info_pass("#000000",$pass[0],$warn[0],$fail[0],$missing[0]),"</td>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",result_info_fail("#FF0000",$pass[0],$warn[0],$fail[0],$missing[0]),"</td>\n", + "</tr>\n"; + $row = ($row+1)%2; + foreach my $c (1..($count-1)) + { + print + "<tr>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",$compiler[$c],"</td>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",result_info_pass("#000000",$pass[$c],$warn[$c],$fail[$c],$missing[$c]),"</td>\n", + "<td valign=\"top\" ",$bgcolor[$row],">",result_info_fail("#FF0000",$pass[$c],$warn[$c],$fail[$c],$missing[$c]),"</td>\n", + "</tr>\n"; + $row = ($row+1)%2; + } + print + "<tr>\n", + "<td colspan=\"7\"><hr size=\"1\" noshade></td>\n", + "</tr>\n"; + } +} +print "</table>\n"; diff --git a/tools/regression/src/regression.py b/tools/regression/src/regression.py new file mode 100644 index 0000000000..ec20a44cf7 --- /dev/null +++ b/tools/regression/src/regression.py @@ -0,0 +1,791 @@ +#!/usr/bin/python + +# Copyright MetaCommunications, Inc. 2003-2007 +# Copyright Redshift Software, Inc. 2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import glob +import optparse +import os +import os.path +import platform +import sys +import time + +#~ Place holder for xsl_reports/util module +utils = None + +repo_root = { + 'anon' : 'http://svn.boost.org/svn/boost/', + 'user' : 'https://svn.boost.org/svn/boost/' + } +repo_path = { + 'trunk' : 'trunk', + 'release' : 'branches/release', + 'build' : 'trunk/tools/build/v2', + 'jam' : 'tags/tools/jam/Boost_Jam_3_1_15/src', + 'regression' : 'trunk/tools/regression', + 'boost-build.jam' + : 'trunk/boost-build.jam' + } + +class runner: + + def __init__(self,root): + commands = map( + lambda m: m[8:].replace('_','-'), + filter( + lambda m: m.startswith('command_'), + runner.__dict__.keys()) + ) + commands.sort() + commands = "commands: %s" % ', '.join(commands) + + opt = optparse.OptionParser( + usage="%prog [options] [commands]", + description=commands) + + #~ Base Options: + opt.add_option( '--runner', + help="runner ID (e.g. 'Metacomm')" ) + opt.add_option( '--comment', + help="an HTML comment file to be inserted in the reports" ) + opt.add_option( '--tag', + help="the tag for the results" ) + opt.add_option( '--toolsets', + help="comma-separated list of toolsets to test with" ) + opt.add_option( '--incremental', + help="do incremental run (do not remove previous binaries)", + action='store_true' ) + opt.add_option( '--timeout', + help="specifies the timeout, in minutes, for a single test run/compilation", + type='int' ) + opt.add_option( '--bjam-options', + help="options to pass to the regression test" ) + opt.add_option( '--bjam-toolset', + help="bootstrap toolset for 'bjam' executable" ) + opt.add_option( '--pjl-toolset', + help="bootstrap toolset for 'process_jam_log' executable" ) + opt.add_option( '--platform' ) + + #~ Source Options: + opt.add_option( '--user', + help="Boost SVN user ID" ) + opt.add_option( '--local', + help="the name of the boost tarball" ) + opt.add_option( '--force-update', + help="do an SVN update (if applicable) instead of a clean checkout, even when performing a full run", + action='store_true' ) + opt.add_option( '--have-source', + help="do neither a tarball download nor an SVN update; used primarily for testing script changes", + action='store_true' ) + + #~ Connection Options: + opt.add_option( '--proxy', + help="HTTP proxy server address and port (e.g.'http://www.someproxy.com:3128')" ) + opt.add_option( '--ftp-proxy', + help="FTP proxy server (e.g. 'ftpproxy')" ) + opt.add_option( '--dart-server', + help="the dart server to send results to" ) + + #~ Debug Options: + opt.add_option( '--debug-level', + help="debugging level; controls the amount of debugging output printed", + type='int' ) + opt.add_option( '--send-bjam-log', + help="send full bjam log of the regression run", + action='store_true' ) + opt.add_option( '--mail', + help="email address to send run notification to" ) + opt.add_option( '--smtp-login', + help="STMP server address/login information, in the following form: <user>:<password>@<host>[:<port>]" ) + opt.add_option( '--skip-tests', + help="do not run bjam; used for testing script changes", + action='store_true' ) + + #~ Defaults + self.runner = None + self.comment='comment.html' + self.tag='trunk' + self.toolsets=None + self.incremental=False + self.timeout=5 + self.bjam_options='' + self.bjam_toolset='' + self.pjl_toolset='' + self.platform=self.platform_name() + self.user='anonymous' + self.local=None + self.force_update=False + self.have_source=False + self.proxy=None + self.ftp_proxy=None + self.dart_server=None + self.debug_level=0 + self.send_bjam_log=False + self.mail=None + self.smtp_login=None + self.skip_tests=False + ( _opt_, self.actions ) = opt.parse_args(None,self) + if not self.actions or self.actions == []: + self.actions = [ 'regression' ] + + #~ Initialize option dependent values. + self.regression_root = root + self.boost_root = os.path.join( self.regression_root, 'boost' ) + self.regression_results = os.path.join( self.regression_root, 'results' ) + self.regression_log = os.path.join( self.regression_results, 'bjam.log' ) + self.tools_bb_root = os.path.join( self.regression_root,'tools_bb' ) + self.tools_bjam_root = os.path.join( self.regression_root,'tools_bjam' ) + self.tools_regression_root = os.path.join( self.regression_root,'tools_regression' ) + self.xsl_reports_dir = os.path.join( self.tools_regression_root, 'xsl_reports' ) + self.timestamp_path = os.path.join( self.regression_root, 'timestamp' ) + if sys.platform == 'win32': + self.patch_boost = 'patch_boost.bat' + self.bjam = { 'name' : 'bjam.exe' } + self.process_jam_log = { 'name' : 'process_jam_log.exe' } + else: + self.patch_boost = 'patch_boost' + self.bjam = { 'name' : 'bjam' } + self.process_jam_log = { 'name' : 'process_jam_log' } + self.bjam = { + 'name' : self.bjam['name'], + 'build_cmd' : self.bjam_build_cmd, + 'path' : os.path.join(self.regression_root,self.bjam['name']), + 'source_dir' : self.tools_bjam_root, + 'build_dir' : self.tools_bjam_root, + 'build_args' : '' + } + self.process_jam_log = { + 'name' : self.process_jam_log['name'], + 'build_cmd' : self.bjam_cmd, + 'path' : os.path.join(self.regression_root,self.process_jam_log['name']), + 'source_dir' : os.path.join(self.tools_regression_root,'build'), + 'build_dir' : os.path.join(self.tools_regression_root,'build'), + 'build_args' : 'process_jam_log -d2' + } + + if self.debug_level > 0: + self.log('Regression root = %s'%self.regression_root) + self.log('Boost root = %s'%self.boost_root) + self.log('Regression results = %s'%self.regression_results) + self.log('Regression log = %s'%self.regression_log) + self.log('BB root = %s'%self.tools_bb_root) + self.log('Bjam root = %s'%self.tools_bjam_root) + self.log('Tools root = %s'%self.tools_regression_root) + self.log('XSL reports dir = %s'%self.xsl_reports_dir) + self.log('Timestamp = %s'%self.timestamp_path) + self.log('Patch Boost script = %s'%self.patch_boost) + + self.main() + + #~ The various commands that make up the testing sequence... + + def command_cleanup(self,*args): + if not args or args == None or args == []: args = [ 'source', 'bin' ] + + if 'source' in args: + self.log( 'Cleaning up "%s" directory ...' % self.boost_root ) + self.rmtree( self.boost_root ) + + if 'bin' in args: + boost_bin_dir = os.path.join( self.boost_root, 'bin' ) + self.log( 'Cleaning up "%s" directory ...' % boost_bin_dir ) + self.rmtree( boost_bin_dir ) + + boost_binv2_dir = os.path.join( self.boost_root, 'bin.v2' ) + self.log( 'Cleaning up "%s" directory ...' % boost_binv2_dir ) + self.rmtree( boost_binv2_dir ) + + self.log( 'Cleaning up "%s" directory ...' % self.regression_results ) + self.rmtree( self.regression_results ) + + def command_get_tools(self): + #~ Get Boost.Build v2... + self.log( 'Getting Boost.Build v2...' ) + if self.user and self.user != '': + os.chdir( os.path.dirname(self.tools_bb_root) ) + self.svn_command( 'co %s %s' % ( + self.svn_repository_url(repo_path['build']), + os.path.basename(self.tools_bb_root) ) ) + else: + self.retry( lambda: self.download_tarball( + os.path.basename(self.tools_bb_root)+".tar.bz2", + self.tarball_url(repo_path['build']) ) ) + self.unpack_tarball( + self.tools_bb_root+".tar.bz2", + os.path.basename(self.tools_bb_root) ) + #~ Get Boost.Jam... + self.log( 'Getting Boost.Jam...' ) + if self.user and self.user != '': + os.chdir( os.path.dirname(self.tools_bjam_root) ) + self.svn_command( 'co %s %s' % ( + self.svn_repository_url(repo_path['jam']), + os.path.basename(self.tools_bjam_root) ) ) + else: + self.retry( lambda: self.download_tarball( + os.path.basename(self.tools_bjam_root)+".tar.bz2", + self.tarball_url(repo_path['jam']) ) ) + self.unpack_tarball( + self.tools_bjam_root+".tar.bz2", + os.path.basename(self.tools_bjam_root) ) + #~ Get the regression tools and utilities... + self.log( 'Getting regression tools an utilities...' ) + if self.user and self.user != '': + os.chdir( os.path.dirname(self.tools_regression_root) ) + self.svn_command( 'co %s %s' % ( + self.svn_repository_url(repo_path['regression']), + os.path.basename(self.tools_regression_root) ) ) + else: + self.retry( lambda: self.download_tarball( + os.path.basename(self.tools_regression_root)+".tar.bz2", + self.tarball_url(repo_path['regression']) ) ) + self.unpack_tarball( + self.tools_regression_root+".tar.bz2", + os.path.basename(self.tools_regression_root) ) + + #~ We get a boost-build.jam to make the tool build work even if there's + #~ and existing boost-build.jam above the testing root. + self.log( 'Getting boost-build.jam...' ) + self.http_get( + self.svn_repository_url(repo_path['boost-build.jam']), + os.path.join( self.regression_root, 'boost-build.jam' ) ) + + def command_get_source(self): + self.refresh_timestamp() + self.log( 'Getting sources (%s)...' % self.timestamp() ) + + if self.user and self.user != '': + self.retry( self.svn_checkout ) + else: + self.retry( self.get_tarball ) + pass + + def command_update_source(self): + if self.user and self.user != '' \ + or os.path.exists( os.path.join( self.boost_root, '.svn' ) ): + open( self.timestamp_path, 'w' ).close() + self.log( 'Updating sources from SVN (%s)...' % self.timestamp() ) + self.retry( self.svn_update ) + else: + self.command_get_source( ) + pass + + def command_patch(self): + self.import_utils() + patch_boost_path = os.path.join( self.regression_root, self.patch_boost ) + if os.path.exists( patch_boost_path ): + self.log( 'Found patch file "%s". Executing it.' % patch_boost_path ) + os.chdir( self.regression_root ) + utils.system( [ patch_boost_path ] ) + pass + + def command_setup(self): + self.command_patch() + self.build_if_needed(self.bjam,self.bjam_toolset) + self.build_if_needed(self.process_jam_log,self.pjl_toolset) + + def command_test(self, *args): + if not args or args == None or args == []: args = [ "test", "process" ] + self.import_utils() + + self.log( 'Making "%s" directory...' % self.regression_results ) + utils.makedirs( self.regression_results ) + + results_libs = os.path.join( self.regression_results, 'libs' ) + results_status = os.path.join( self.regression_results, 'status' ) + + if "clean" in args: + self.command_test_clean() + + if "test" in args: + self.command_test_run() + + if "process" in args: + self.command_test_process() + + def command_test_clean(self): + results_libs = os.path.join( self.regression_results, 'libs' ) + results_status = os.path.join( self.regression_results, 'status' ) + self.rmtree( results_libs ) + self.rmtree( results_status ) + + def command_test_run(self): + self.import_utils() + test_cmd = '%s -d2 --dump-tests %s "--build-dir=%s" >>"%s" 2>&1' % ( + self.bjam_cmd( self.toolsets ), + self.bjam_options, + self.regression_results, + self.regression_log ) + self.log( 'Starting tests (%s)...' % test_cmd ) + cd = os.getcwd() + os.chdir( os.path.join( self.boost_root, 'status' ) ) + utils.system( [ test_cmd ] ) + os.chdir( cd ) + + def command_test_process(self): + self.import_utils() + self.log( 'Getting test case results out of "%s"...' % self.regression_log ) + cd = os.getcwd() + os.chdir( os.path.join( self.boost_root, 'status' ) ) + utils.checked_system( [ + '"%s" "%s" <"%s"' % ( + self.tool_path(self.process_jam_log), + self.regression_results, + self.regression_log ) + ] ) + os.chdir( cd ) + + def command_collect_logs(self): + self.import_utils() + comment_path = os.path.join( self.regression_root, self.comment ) + if not os.path.exists( comment_path ): + self.log( 'Comment file "%s" not found; creating default comment.' % comment_path ) + f = open( comment_path, 'w' ) + f.write( '<p>Tests are run on %s platform.</p>' % self.platform_name() ) + f.close() + + if self.incremental: + run_type = 'incremental' + else: + run_type = 'full' + + source = 'tarball' + revision = '' + svn_root_file = os.path.join( self.boost_root, '.svn' ) + svn_info_file = os.path.join( self.boost_root, 'svn_info.txt' ) + if os.path.exists( svn_root_file ): + source = 'SVN' + self.svn_command( 'info --xml "%s" >%s' % (self.boost_root,svn_info_file) ) + + if os.path.exists( svn_info_file ): + f = open( svn_info_file, 'r' ) + svn_info = f.read() + f.close() + i = svn_info.find( 'Revision:' ) + if i < 0: i = svn_info.find( 'revision=' ) # --xml format + if i >= 0: + i += 10 + while svn_info[i] >= '0' and svn_info[i] <= '9': + revision += svn_info[i] + i += 1 + + from collect_and_upload_logs import collect_logs + collect_logs( + self.regression_results, + self.runner, self.tag, self.platform, comment_path, + self.timestamp_path, + self.user, + source, run_type, + self.dart_server, self.proxy, + revision ) + + def command_upload_logs(self): + self.import_utils() + from collect_and_upload_logs import upload_logs + self.retry( + lambda: + upload_logs( + self.regression_results, + self.runner, self.tag, + self.user, + self.ftp_proxy, + self.debug_level, self.send_bjam_log, + self.timestamp_path, + self.dart_server ) + ) + + def command_regression(self): + import socket + import string + try: + mail_subject = 'Boost regression for %s on %s' % ( self.tag, + string.split(socket.gethostname(), '.')[0] ) + start_time = time.localtime() + if self.mail: + self.log( 'Sending start notification to "%s"' % self.mail ) + self.send_mail( + '%s started at %s.' % ( mail_subject, format_time( start_time ) ) + ) + + self.command_get_tools() + + if self.local is not None: + self.log( 'Using local file "%s"' % self.local ) + b = os.path.basename( self.local ) + tag = b[ 0: b.find( '.' ) ] + self.log( 'Tag: "%s"' % tag ) + self.unpack_tarball( local, self.boost_root ) + + elif self.have_source: + if not self.incremental: self.command_cleanup( [ 'bin' ] ) + + else: + if self.incremental or self.force_update: + if not self.incremental: self.command_cleanup( [ 'bin' ] ) + else: + self.command_cleanup() + self.command_get_source() + + self.command_setup() + + # Not specifying --toolset in command line is not enough + # that would mean to use Boost.Build default ones + # We can skip test only we were explictly + # told to have no toolsets in command line "--toolset=" + if self.toolsets != '': # --toolset=, + if not self.skip_tests: + self.command_test() + self.command_collect_logs() + self.command_upload_logs() + + if self.mail: + self.log( 'Sending report to "%s"' % self.mail ) + end_time = time.localtime() + self.send_mail( + '%s completed successfully at %s.' % ( mail_subject, format_time( end_time ) ) + ) + except: + if self.mail: + self.log( 'Sending report to "%s"' % self.mail ) + traceback_ = '\n'.join( apply( traceback.format_exception, sys.exc_info() ) ) + end_time = time.localtime() + self.send_mail( + '%s failed at %s.' % ( mail_subject, format_time( end_time ) ), + traceback_ ) + raise + + def command_show_revision(self): + modified = '$Date$' + revision = '$Revision$' + + import re + re_keyword_value = re.compile( r'^\$\w+:\s+(.*)\s+\$$' ) + print '\n\tRevision: %s' % re_keyword_value.match( revision ).group( 1 ) + print '\tLast modified on: %s\n' % re_keyword_value.match( modified ).group( 1 ) + + #~ Utilities... + + def main(self): + for action in self.actions: + action_m = "command_"+action.replace('-','_') + if hasattr(self,action_m): + getattr(self,action_m)() + + def platform_name(self): + # See http://article.gmane.org/gmane.comp.lib.boost.testing/933 + if sys.platform == 'win32': + return 'Windows' + elif sys.platform == 'cygwin': + return 'Windows/Cygwin' + return platform.system() + + def log(self,message): + sys.stdout.flush() + sys.stderr.flush() + sys.stderr.write( '# %s\n' % message ) + sys.stderr.flush() + + def rmtree(self,path): + if os.path.exists( path ): + import shutil + #~ shutil.rmtree( unicode( path ) ) + if sys.platform == 'win32': + os.system( 'del /f /s /q "%s" >nul 2>&1' % path ) + shutil.rmtree( unicode( path ) ) + else: + os.system( 'rm -f -r "%s"' % path ) + + def refresh_timestamp( self ): + if os.path.exists( self.timestamp_path ): + os.unlink( self.timestamp_path ) + open( self.timestamp_path, 'w' ).close() + + def timestamp( self ): + return time.strftime( + '%Y-%m-%dT%H:%M:%SZ', + time.gmtime( os.stat( self.timestamp_path ).st_mtime ) ) + + def retry( self, f, max_attempts=5, sleep_secs=10 ): + for attempts in range( max_attempts, -1, -1 ): + try: + return f() + except Exception, msg: + self.log( '%s failed with message "%s"' % ( f.__name__, msg ) ) + if attempts == 0: + self.log( 'Giving up.' ) + raise + + self.log( 'Retrying (%d more attempts).' % attempts ) + time.sleep( sleep_secs ) + + def http_get( self, source_url, destination_file ): + import urllib + + proxies = None + if hasattr(self,'proxy') and self.proxy is not None: + proxies = { 'http' : self.proxy } + + src = urllib.urlopen( source_url, proxies = proxies ) + + f = open( destination_file, 'wb' ) + while True: + data = src.read( 16*1024 ) + if len( data ) == 0: break + f.write( data ) + + f.close() + src.close() + + def import_utils(self): + global utils + if utils is None: + sys.path.append( self.xsl_reports_dir ) + import utils as utils_module + utils = utils_module + + def build_if_needed( self, tool, toolset ): + self.import_utils() + if os.path.exists( tool[ 'path' ] ): + self.log( 'Found preinstalled "%s"; will use it.' % tool[ 'path' ] ) + return + + self.log( 'Preinstalled "%s" is not found; building one...' % tool[ 'path' ] ) + + if toolset is None: + if self.toolsets is not None: + toolset = string.split( self.toolsets, ',' )[0] + else: + toolset = tool[ 'default_toolset' ] + self.log( 'Warning: No bootstrap toolset for "%s" was specified.' % tool[ 'name' ] ) + self.log( ' Using default toolset for the platform (%s).' % toolset ) + + if os.path.exists( tool[ 'source_dir' ] ): + self.log( 'Found "%s" source directory "%s"' % ( tool[ 'name' ], tool[ 'source_dir' ] ) ) + build_cmd = tool[ 'build_cmd' ]( toolset, tool['build_args'] ) + self.log( 'Building "%s" (%s)...' % ( tool[ 'name'], build_cmd ) ) + utils.system( [ 'cd "%s"' % tool[ 'source_dir' ], build_cmd ] ) + else: + raise 'Could not find "%s" source directory "%s"' % ( tool[ 'name' ], tool[ 'source_dir' ] ) + + if not tool.has_key( 'build_path' ): + tool[ 'build_path' ] = self.tool_path( tool ) + + if not os.path.exists( tool[ 'build_path' ] ): + raise 'Failed to find "%s" after build.' % tool[ 'build_path' ] + + self.log( '%s succesfully built in "%s" location' % ( tool[ 'name' ], tool[ 'build_path' ] ) ) + + def tool_path( self, name_or_spec ): + if isinstance( name_or_spec, basestring ): + return os.path.join( self.regression_root, name_or_spec ) + + if os.path.exists( name_or_spec[ 'path' ] ): + return name_or_spec[ 'path' ] + + if name_or_spec.has_key( 'build_path' ): + return name_or_spec[ 'build_path' ] + + build_dir = name_or_spec[ 'build_dir' ] + self.log( 'Searching for "%s" in "%s"...' % ( name_or_spec[ 'name' ], build_dir ) ) + for root, dirs, files in os.walk( build_dir ): + if name_or_spec[ 'name' ] in files: + return os.path.join( root, name_or_spec[ 'name' ] ) + + raise Exception( 'Cannot find "%s" in any of the following locations:\n%s' % ( + name_or_spec[ 'name' ] + , '\n'.join( [ name_or_spec[ 'path' ], build_dir ] ) + ) ) + + def bjam_build_cmd( self, *rest ): + if sys.platform == 'win32': + cmd = 'build.bat %s' % self.bjam_toolset + else: + cmd = './build.sh %s' % self.bjam_toolset + env_setup_key = 'BJAM_ENVIRONMENT_SETUP' + if os.environ.has_key( env_setup_key ): + return '%s & %s' % ( os.environ[env_setup_key], cmd ) + return cmd + + def bjam_cmd( self, toolsets, args = '', *rest ): + build_path = self.regression_root + if build_path[-1] == '\\': build_path += '\\' + + if self.timeout > 0: + args += ' -l%s' % (self.timeout*60) + + cmd = '"%(bjam)s"' +\ + ' "-sBOOST_BUILD_PATH=%(bbpath)s"' +\ + ' "-sBOOST_ROOT=%(boost)s"' +\ + ' "--boost=%(boost)s"' +\ + ' "--boost-build=%(bb)s"' +\ + ' "--debug-configuration"' +\ + ' %(arg)s' + cmd %= { + 'bjam' : self.tool_path( self.bjam ), + 'bbpath' : os.pathsep.join([build_path,self.tools_bb_root]), + 'bb' : self.tools_bb_root, + 'boost' : self.boost_root, + 'arg' : args } + + if toolsets: + import string + cmd += ' ' + string.join(string.split( toolsets, ',' ), ' ' ) + + return cmd + + def send_mail( self, subject, msg = '' ): + import smtplib + if not self.smtp_login: + server_name = 'mail.%s' % mail.split( '@' )[-1] + user_name = None + password = None + else: + server_name = self.smtp_login.split( '@' )[-1] + ( user_name, password ) = string.split( self.smtp_login.split( '@' )[0], ':' ) + + log( ' Sending mail through "%s"...' % server_name ) + smtp_server = smtplib.SMTP( server_name ) + smtp_server.set_debuglevel( self.debug_level ) + if user_name: + smtp_server.login( user_name, password ) + + smtp_server.sendmail( self.mail, [ self.mail ], + 'Subject: %s\nTo: %s\n\n%s' % ( subject, self.mail, msg ) ) + + #~ Dowloading source, from SVN... + + def svn_checkout( self ): + os.chdir( self.regression_root ) + self.svn_command( 'co %s %s' % (self.svn_repository_url(self.tag),'boost') ) + + def svn_update( self ): + os.chdir( self.boost_root ) + self.svn_command( 'update' ) + + def svn_command( self, command ): + svn_anonymous_command_line = 'svn --non-interactive %(command)s' + svn_command_line = 'svn --non-interactive --username=%(user)s %(command)s' + + if not hasattr(self,'user') or self.user is None or self.user == 'anonymous': + cmd = svn_anonymous_command_line % { 'command': command } + else: + cmd = svn_command_line % { 'user': self.user, 'command': command } + + self.log( 'Executing SVN command "%s"' % cmd ) + rc = os.system( cmd ) + if rc != 0: + raise Exception( 'SVN command "%s" failed with code %d' % ( cmd, rc ) ) + + def svn_repository_url( self, path ): + if hasattr(self,'user') and self.user is not None and self.user != 'anonymous': + return '%s%s' % (repo_root['user'],path) + else: + return '%s%s' % (repo_root['anon'],path) + + #~ Downloading and extracting source archives, from tarballs or zipballs... + + def get_tarball( self, *args ): + if not args or args == []: + args = [ 'download', 'unpack' ] + + tarball_path = None + + if hasattr(self,'local') and self.local is not None: + tarball_path = self.local + elif 'download' in args: + tarball_path = self.download_tarball(self.boost_tarball_name(),self.boost_tarball_url()) + if not tarball_path: + tarball_path = os.path.join( self.regression_root, self.boost_tarball_url() ) + + if 'unpack' in args: + self.unpack_tarball( tarball_path, self.boost_root ) + pass + + def download_tarball( self, tarball_name, tarball_url ): + tarball_path = os.path.join( self.regression_root, tarball_name ) + + self.log( 'Downloading "%s" to "%s"...' % ( tarball_url, os.path.dirname( tarball_path ) ) ) + + if os.path.exists( tarball_path ): + os.unlink( tarball_path ) + self.http_get( tarball_url, tarball_path ) + + return tarball_path + + def tarball_url( self, path ): + return 'http://beta.boost.org/development/snapshot.php/%s' % path + + def boost_tarball_name( self ): + return 'boost-%s.tar.bz2' % self.tag.split( '/' )[-1] + + def boost_tarball_url( self ): + return self.tarball_url( self.tag ) + + def unpack_tarball( self, tarball_path, target_path ): + self.log( 'Looking for old unpacked archives...' ) + old_boost_dirs = self.find_boost_dirs( ) + + for old_boost_dir in old_boost_dirs: + if old_boost_dir != tarball_path: + self.log( 'Deleting old directory %s.' % old_boost_dir ) + self.rmtree( old_boost_dir ) + + self.log( 'Unpacking boost tarball ("%s")...' % tarball_path ) + + tarball_name = os.path.basename( tarball_path ) + extension = tarball_name[ tarball_name.find( '.' ) : ] + + if extension in ( ".tar.gz", ".tar.bz2" ): + import tarfile + import stat + + mode = os.path.splitext( extension )[1][1:] + tar = tarfile.open( tarball_path, 'r:%s' % mode ) + for tarinfo in tar: + tar.extract( tarinfo, self.regression_root ) + if sys.platform == 'win32' and not tarinfo.isdir(): + # workaround what appears to be a Win32-specific bug in 'tarfile' + # (modification times for extracted files are not set properly) + f = os.path.join( self.regression_root, tarinfo.name ) + os.chmod( f, stat.S_IWRITE ) + os.utime( f, ( tarinfo.mtime, tarinfo.mtime ) ) + tar.close() + elif extension in ( ".zip" ): + import zipfile + + z = zipfile.ZipFile( tarball_path, 'r', zipfile.ZIP_DEFLATED ) + for f in z.infolist(): + destination_file_path = os.path.join( self.regression_root, f.filename ) + if destination_file_path[-1] == "/": # directory + if not os.path.exists( destination_file_path ): + os.makedirs( destination_file_path ) + else: # file + result = open( destination_file_path, 'wb' ) + result.write( z.read( f.filename ) ) + result.close() + z.close() + else: + raise 'Do not know how to unpack archives with extension \"%s\"' % extension + + boost_dir = self.find_boost_dirs()[0] + self.log( ' Unpacked into directory "%s"' % boost_dir ) + + if os.path.exists( target_path ): + self.log( 'Deleting "%s" directory...' % target_path ) + self.rmtree( target_path ) + + self.log( 'Renaming "%s" into "%s"' % ( boost_dir, target_path ) ) + os.rename( boost_dir, target_path ) + + def find_boost_dirs( self ): + return [ + x for x in + glob.glob( os.path.join( self.regression_root, 'boost[-_]*' ) ) + if os.path.isdir( x ) + ] + + diff --git a/tools/regression/src/run.py b/tools/regression/src/run.py new file mode 100644 index 0000000000..05f14d03aa --- /dev/null +++ b/tools/regression/src/run.py @@ -0,0 +1,60 @@ +#!/usr/bin/python + +# Copyright Redshift Software, Inc. 2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import os.path +import shutil +import sys +import urllib + +#~ Using --skip-script-download is useful to avoid repeated downloading of +#~ the regression scripts when doing the regression commands individually. +no_update_argument = "--skip-script-download" +no_update = no_update_argument in sys.argv +if no_update: + del sys.argv[sys.argv.index(no_update_argument)] + +#~ The directory this file is in. +root = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) +print '# Running regressions in %s...' % root + +script_sources = [ 'collect_and_upload_logs.py', 'regression.py' ] +script_local = os.path.join(root,'tools','regression','src') +script_remote = 'http://svn.boost.org/svn/boost/trunk/tools/regression/src' +script_dir = os.path.join(root,'tools_regression_src') + +if not no_update: + #~ Bootstrap. + #~ * Clear out any old versions of the scripts + print '# Creating regression scripts at %s...' % script_dir + if os.path.exists(script_dir): + shutil.rmtree(script_dir) + os.mkdir(script_dir) + #~ * Get new scripts, either from local working copy, or from svn + if os.path.exists(script_local): + print '# Copying regression scripts from %s...' % script_local + for src in script_sources: + shutil.copyfile( os.path.join(script_local,src), os.path.join(script_dir,src) ) + else: + print '# Dowloading regression scripts from %s...' % script_remote + proxy = None + for a in sys.argv[1:]: + if a.startswith('--proxy='): + proxy = {'http' : a.split('=')[1] } + print '--- %s' %(proxy['http']) + break + for src in script_sources: + urllib.FancyURLopener(proxy).retrieve( + '%s/%s' % (script_remote,src), os.path.join(script_dir,src) ) + +#~ * Make the scripts available to Python +sys.path.insert(0,os.path.join(root,'tools_regression_src')) + +#~ Launch runner. +from regression import runner +runner(root) diff --git a/tools/regression/src/run_tests.sh b/tools/regression/src/run_tests.sh new file mode 100644 index 0000000000..04eaf833ba --- /dev/null +++ b/tools/regression/src/run_tests.sh @@ -0,0 +1,191 @@ +#!/bin/sh +# +# shell script for running the boost regression test suite and generating +# a html table of results. + +# Set the following variables to configure the operation. Variables you +# should set, i.e. usually required are listed first. Optional variables +# have reasonable defaults for most situations. + + +### THESE SHOULD BE CHANGED! + +# +# "boost_root" points to the root of you boost installation: +# This can be either a non-exitent directory or an already complete Boost +# source tree. +# +boost_root="$HOME/CVSROOTs/Boost/boost_regression" + +# +# Wether to fetch the most current Boost code from CVS (yes/no): +# There are two contexts to use this script in: on an active Boost CVS +# tree, and on a fresh Boost CVS tree. If "yes" is specified here an attempt +# to fetch the latest CVS Boost files is made. For an active Boost CVS +# the CVS connection information is used. If an empty tree is detected +# the code is fetched with the anonymous read only information. +# +cvs_update=no + +# +# "test_tools" are the Boost.Build toolsets to use for building and running the +# regression tests. Specify a space separated list, of the Boost.Build toolsets. +# Each will be built and tested in sequence. +# +test_tools=gcc + +# +# "toolset" is the Boost.Build toolset to use for building the helper programs. +# This is usually different than the toolsets one is testing. And this is +# normally a toolset that corresponds to the compiler built into your platform. +# +toolset=gcc + +# +# "comment_path" is the path to an html-file describing the test environment. +# The content of this file will be embedded in the status pages being produced. +# +comment_path="$boost_root/../regression_comment.html" +# +# "test_dir" is the relative path to the directory to run the tests in, +# defaults to "status" and runs all the tests, but could be a sub-directory +# for example "libs/regex/test" to run the regex tests alone. +# +test_dir="status" + + +### DEFAULTS ARE OK FOR THESE. + +# +# "exe_suffix" the suffix used by exectable files: +# In case your platform requires use of a special suffix for executables specify +# it here, including the "." if needed. This should not be needed even in Windows +# like platforms as they will execute without the suffix anyway. +# +exe_suffix= + +# +# "bjam" points to your built bjam executable: +# The location of the binary for running bjam. The default should work +# under most circumstances. +# +bjam="$boost_root/tools/jam/src/bin/bjam$exe_suffix" + +# +# "process_jam_log", and "compiler_status" paths to built helper programs: +# The location of the executables of the regression help programs. These +# are built locally so the default should work in most situations. +# +process_jam_log="$boost_root/dist/bin/process_jam_log$exe_suffix" +compiler_status="$boost_root/dist/bin/compiler_status$exe_suffix" + +# +# "boost_build_path" can point to additional locations to find toolset files. +# +boost_build_path="$HOME/.boost-build" + + +### NO MORE CONFIGURABLE PARTS. + +# +# Some setup. +# +boost_dir=`basename "$boost_root"` +if test -n "${BOOST_BUILD_PATH}" ; then + BOOST_BUILD_PATH="$boost_build_path:$BOOST_BUILD_PATH" +else + BOOST_BUILD_PATH="$boost_build_path" +fi +export BOOST_BUILD_PATH + +# +# STEP 0: +# +# Get the source code: +# +if test ! -d "$boost_root" ; then + mkdir -p "$boost_root" + if test $? -ne 0 ; then + echo "creation of $boost_root directory failed." + exit 256 + fi +fi +if test $cvs_update = yes ; then + echo fetching Boost: + echo "/1 :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/boost A" >> "$HOME/.cvspass" + cat "$HOME/.cvspass" | sort | uniq > "$HOME/.cvspass" + cd `dirname "$boost_root"` + if test -f boost/CVS/Root ; then + cvs -z3 -d `cat "$boost_dir/CVS/Root"` co -d "$boost_dir" boost + else + cvs -z3 -d :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/boost co -d "$boost_dir" boost + fi +fi + +# +# STEP 1: +# rebuild bjam if required: +# +echo building bjam: +cd "$boost_root/tools/jam/src" && \ +LOCATE_TARGET=bin sh ./build.sh +if test $? != 0 ; then + echo "bjam build failed." + exit 256 +fi + +# +# STEP 2: +# rebuild the regression test helper programs if required: +# +echo building regression test helper programs: +cd "$boost_root/tools/regression/build" && \ +"$bjam" $toolset release +if test $? != 0 ; then + echo "helper program build failed." + exit 256 +fi + +# +# STEP 5: +# repeat steps 3 and 4 for each additional toolset: +# +for tool in $test_tools ; do + +# +# STEP 3: +# run the regression tests: +# +echo running the $tool regression tests: +cd "$boost_root/$test_dir" +"$bjam" $tool --dump-tests 2>&1 | tee regress.log + +# +# STEP 4: +# post process the results: +# +echo processing the regression test results for $tool: +cat regress.log | "$process_jam_log" --v2 +if test $? != 0 ; then + echo "Failed regression log post processing." + exit 256 +fi + +done + +# +# STEP 6: +# create the html table: +# +uname=`uname` +echo generating html tables: +"$compiler_status" --v2 --comment "$comment_path" "$boost_root" cs-$uname.html cs-$uname-links.html +if test $? != 0 ; then + echo "Failed HTML result table generation." + exit 256 +fi + +echo "done!" + + + diff --git a/tools/regression/src/smoke.py b/tools/regression/src/smoke.py new file mode 100755 index 0000000000..1b17cfaaee --- /dev/null +++ b/tools/regression/src/smoke.py @@ -0,0 +1,197 @@ +# smoke test - every so many minutes, check svn revision, and if changed: +# update working copy, run tests, upload results + +# Copyright Beman Dawes 2007 + +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +# ---------------------------------------------------------------------------- # + +import os +import sys +import platform +import time +import ftplib + +# invoke the system command line processor +def cmd(command): + print "command:", command + os.system(command) + +# update SVN working copy +def update_working_copy(boost_path): + os.chdir(boost_path) + cmd("svn update") + +# get repository url +def repository_url(path, results_path): + url = "" + svn_info_file = results_path + "/svn_info.xml" + command = "svn info --xml " + path + " >" + svn_info_file + cmd(command) + f = open( svn_info_file, 'r' ) + svn_info = f.read() + f.close() + i = svn_info.find('//svn.boost.org') + if i >= 0: + url = svn_info[i:svn_info.find("</url>")] + return url + +# get revision number of a path, which may be a filesystem path or URL +def revision(path, results_path, test_name): + rev = 0 + svn_info_file = results_path + "/" + test_name + "-svn_info.xml" + command = "svn info --xml " + path + " >" + svn_info_file + cmd(command) + f = open( svn_info_file, 'r' ) + svn_info = f.read() + f.close() + i = svn_info.find( 'revision=' ) + if i >= 0: + i += 10 + while svn_info[i] >= '0' and svn_info[i] <= '9': + rev = rev*10 + int(svn_info[i]) + i += 1 + return rev + +# run bjam in current directory +def bjam(boost_path, args, output_path, test_name): + + # bjam seems to need BOOST_BUILD_PATH + #os.environ["BOOST_BUILD_PATH"]=boost_path + "/tools/build/v2" + + print "Begin bjam..." + command = "bjam --v2 --dump-tests -l180" + if args != "": command += " " + args + command += " >" + output_path + "/" + test_name +"-bjam.log 2>&1" + cmd(command) + +# run process_jam_log in current directory +def process_jam_log(boost_path, output_path, test_name): + print "Begin log processing..." + command = "process_jam_log " + boost_path + " <" +\ + output_path + "/" + test_name +"-bjam.log" + cmd(command) + +# run compiler_status in current directory +def compiler_status(boost_path, output_path, test_name): + print "Begin compiler status html creation... " + command = "compiler_status --v2 --ignore-pass --no-warn --locate-root " + boost_path + " " +\ + boost_path + " " + output_path + "/" + test_name + "-results.html " +\ + output_path + "/" + test_name + "-details.html " + cmd(command) + +# upload results via ftp +def upload_to_ftp(results_path, test_name, ftp_url, user, psw, debug_level): + + # to minimize the time web pages are not available, upload with temporary + # names and then rename to the permanent names + + i = 0 # dummy variable + os.chdir(results_path) + + tmp_results = "temp-" + test_name + "-results.html" + results = test_name + "-results.html" + tmp_details = "temp-" + test_name + "-details.html" + details = test_name + "-details.html" + + print "Uploading results via ftp..." + ftp = ftplib.FTP( ftp_url, user, psw ) + ftp.set_debuglevel( debug_level ) + + # ftp.cwd( site_path ) + + try: ftp.delete(tmp_results) + except: ++i + + f = open( results, 'rb' ) + ftp.storbinary( 'STOR %s' % tmp_results, f ) + f.close() + + try: ftp.delete(tmp_details) + except: ++i + + f = open( details, 'rb' ) + ftp.storbinary( 'STOR %s' % tmp_details, f ) + f.close() + + try: ftp.delete(results) + except: ++i + + try: ftp.delete(details) + except: ++i + + ftp.rename(tmp_results, results) + ftp.rename(tmp_details, details) + + ftp.dir() + ftp.quit() + +def commit_results(results_path, test_name, rev): + print "Commit results..." + cwd = os.getcwd() + os.chdir(results_path) + command = "svn commit --non-interactive -m "+'"'+str(rev)+'" '+test_name+"-results.html" + cmd(command) + os.chdir(cwd) + + +# ---------------------------------------------------------------------------- # + +if len(sys.argv) < 7: + print "Invoke with: minutes boost-path test-name results-path ftp-url user psw [bjam-args]" + print " boost-path must be path for a boost svn working directory." + print " results-path must be path for a svn working directory where an" + print " svn commit test-name+'-results.html' is valid." + print "Warning: This program hangs or crashes on network failures." + exit() + +minutes = int(sys.argv[1]) +boost_path = sys.argv[2] +test_name = sys.argv[3] +results_path = sys.argv[4] +ftp_url = sys.argv[5] +user = sys.argv[6] +psw = sys.argv[7] +if len(sys.argv) > 8: bjam_args = sys.argv[8] +else: bjam_args = "" + +os.chdir(boost_path) # convert possible relative path +boost_path = os.getcwd() # to absolute path + +print "minutes is ", minutes +print "boost_path is ", boost_path +print "test_name is ", test_name +print "results_path is ", results_path +print "ftp_url is ", ftp_url +print "user is ", user +print "psw is ", psw +print 'bjam args are "' + bjam_args + '"' + +url = repository_url(boost_path, results_path) +print "respository url is ", url + +first = 1 +while 1: + working_rev = revision(boost_path, results_path, test_name) + repos_rev = revision("http:" + url, results_path, test_name) + print "Working copy revision: ", working_rev, " repository revision: ", repos_rev + if first or working_rev != repos_rev: + first = 0 + start_time = time.time() + print + print "start at", time.strftime("%H:%M:%S", time.localtime()) + update_working_copy(boost_path) + os.chdir(boost_path+"/status") + bjam(boost_path, bjam_args, results_path, test_name) + process_jam_log(boost_path, results_path, test_name) + compiler_status(boost_path, results_path, test_name) + upload_to_ftp(results_path, test_name, ftp_url, user, psw, 0) + commit_results(results_path, test_name,revision(boost_path, results_path, test_name)) + elapsed_time = time.time() - start_time + print elapsed_time/60.0, "minutes elapsed time" + print + + print "sleep ", minutes, "minutes..." + time.sleep(60 * minutes) diff --git a/tools/regression/test/Jamfile.v2 b/tools/regression/test/Jamfile.v2 new file mode 100644 index 0000000000..0c2ba68816 --- /dev/null +++ b/tools/regression/test/Jamfile.v2 @@ -0,0 +1,21 @@ +test-suite testlib : + [ compile-fail compile-fail~fail.cpp ] + [ compile-fail compile-fail~pass.cpp ] + [ compile compile~fail.cpp ] + [ compile compile~pass.cpp ] + [ compile compile~warn.cpp ] + [ link link~fail.cpp ] + [ link link~pass.cpp ] + [ link-fail link-fail~fail.cpp ] + [ link-fail link-fail~pass.cpp ] + [ run-fail run-fail~compile-fail.cpp ] + [ run-fail run-fail~fail-warn.cpp ] + [ run-fail run-fail~fail.cpp ] + [ run-fail run-fail~pass.cpp ] + [ run run~fail.cpp ] + [ run run~note.cpp ] + [ run run~pass.cpp ] + [ run run~warn-note.cpp ] + [ run run~warn.cpp ] + + ;
\ No newline at end of file diff --git a/tools/regression/test/compile-fail~fail.cpp b/tools/regression/test/compile-fail~fail.cpp new file mode 100644 index 0000000000..76fc53b9d7 --- /dev/null +++ b/tools/regression/test/compile-fail~fail.cpp @@ -0,0 +1,10 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +int main() { return 0; } + diff --git a/tools/regression/test/compile-fail~pass.cpp b/tools/regression/test/compile-fail~pass.cpp new file mode 100644 index 0000000000..cacb17d133 --- /dev/null +++ b/tools/regression/test/compile-fail~pass.cpp @@ -0,0 +1,9 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#error example of a compile failure diff --git a/tools/regression/test/compile~fail.cpp b/tools/regression/test/compile~fail.cpp new file mode 100644 index 0000000000..cacb17d133 --- /dev/null +++ b/tools/regression/test/compile~fail.cpp @@ -0,0 +1,9 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#error example of a compile failure diff --git a/tools/regression/test/compile~pass.cpp b/tools/regression/test/compile~pass.cpp new file mode 100644 index 0000000000..384b51fa4a --- /dev/null +++ b/tools/regression/test/compile~pass.cpp @@ -0,0 +1,9 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +int main() { return 0; } diff --git a/tools/regression/test/compile~warn.cpp b/tools/regression/test/compile~warn.cpp new file mode 100644 index 0000000000..7895a229e7 --- /dev/null +++ b/tools/regression/test/compile~warn.cpp @@ -0,0 +1,18 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +// provoke one or more compiler warnings + +int main(int argc, char * argv[] ) +{ + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + return 0; +} diff --git a/tools/regression/test/run-fail~compile-fail.cpp b/tools/regression/test/run-fail~compile-fail.cpp new file mode 100644 index 0000000000..cacb17d133 --- /dev/null +++ b/tools/regression/test/run-fail~compile-fail.cpp @@ -0,0 +1,9 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#error example of a compile failure diff --git a/tools/regression/test/run-fail~fail-warn.cpp b/tools/regression/test/run-fail~fail-warn.cpp new file mode 100644 index 0000000000..577d2bb890 --- /dev/null +++ b/tools/regression/test/run-fail~fail-warn.cpp @@ -0,0 +1,16 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +int main() +{ + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + return 0; +} diff --git a/tools/regression/test/run-fail~fail.cpp b/tools/regression/test/run-fail~fail.cpp new file mode 100644 index 0000000000..865b8eb3dd --- /dev/null +++ b/tools/regression/test/run-fail~fail.cpp @@ -0,0 +1,12 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +int main() +{ + return 0; +} diff --git a/tools/regression/test/run-fail~pass.cpp b/tools/regression/test/run-fail~pass.cpp new file mode 100644 index 0000000000..3e3ab13973 --- /dev/null +++ b/tools/regression/test/run-fail~pass.cpp @@ -0,0 +1,15 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + std::cout << "example of output from a run-time failure\n"; + return 1; +} diff --git a/tools/regression/test/run-fail~warn.cpp b/tools/regression/test/run-fail~warn.cpp new file mode 100644 index 0000000000..8cc21a110a --- /dev/null +++ b/tools/regression/test/run-fail~warn.cpp @@ -0,0 +1,20 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + + std::cout << "example of output from a run-time failure\n"; + return 1; +} diff --git a/tools/regression/test/run~compile-fail.cpp b/tools/regression/test/run~compile-fail.cpp new file mode 100644 index 0000000000..cacb17d133 --- /dev/null +++ b/tools/regression/test/run~compile-fail.cpp @@ -0,0 +1,9 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#error example of a compile failure diff --git a/tools/regression/test/run~fail-note.cpp b/tools/regression/test/run~fail-note.cpp new file mode 100644 index 0000000000..b514da0938 --- /dev/null +++ b/tools/regression/test/run~fail-note.cpp @@ -0,0 +1,17 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + std::cout << "example of output before a <note> line\n"; + std::cout << "<note>\n"; + std::cout << "example of output after a <note> line\n"; + return 1; +} diff --git a/tools/regression/test/run~fail-warn.cpp b/tools/regression/test/run~fail-warn.cpp new file mode 100644 index 0000000000..8cc21a110a --- /dev/null +++ b/tools/regression/test/run~fail-warn.cpp @@ -0,0 +1,20 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + + std::cout << "example of output from a run-time failure\n"; + return 1; +} diff --git a/tools/regression/test/run~fail.cpp b/tools/regression/test/run~fail.cpp new file mode 100644 index 0000000000..d6b8ffacf9 --- /dev/null +++ b/tools/regression/test/run~fail.cpp @@ -0,0 +1,14 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + return 1; +} diff --git a/tools/regression/test/run~note.cpp b/tools/regression/test/run~note.cpp new file mode 100644 index 0000000000..2841618522 --- /dev/null +++ b/tools/regression/test/run~note.cpp @@ -0,0 +1,17 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + std::cout << "example of output before a <note> line\n"; + std::cout << "<note>\n"; + std::cout << "example of output after a <note> line\n"; + return 0; +} diff --git a/tools/regression/test/run~pass.cpp b/tools/regression/test/run~pass.cpp new file mode 100644 index 0000000000..865b8eb3dd --- /dev/null +++ b/tools/regression/test/run~pass.cpp @@ -0,0 +1,12 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +int main() +{ + return 0; +} diff --git a/tools/regression/test/run~warn-note.cpp b/tools/regression/test/run~warn-note.cpp new file mode 100644 index 0000000000..36e1c5faf3 --- /dev/null +++ b/tools/regression/test/run~warn-note.cpp @@ -0,0 +1,24 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +#include <iostream> + +int main() +{ + std::cout << "example of output before a <note> line\n"; + std::cout << "<note>\n"; + std::cout << "example of output after a <note> line\n"; + + // provoke a compiler warning to make sure <note> takes priority over + // a warning, but neither is lost from status reporting links HTML. + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + return 0; +} diff --git a/tools/regression/test/run~warn.cpp b/tools/regression/test/run~warn.cpp new file mode 100644 index 0000000000..7895a229e7 --- /dev/null +++ b/tools/regression/test/run~warn.cpp @@ -0,0 +1,18 @@ +// (C) Copyright Beman Dawes 2003. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Test naming convention: the portion of the name before the tilde ("~") +// identifies the bjam test type. The portion after the tilde +// identifies the correct result to be reported by compiler_status. + +// provoke one or more compiler warnings + +int main(int argc, char * argv[] ) +{ + short s; + unsigned long ul; + s = s & ul; // warning from many compilers + if ( s == ul ) {} // warning from GCC + return 0; +} diff --git a/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam b/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam new file mode 100644 index 0000000000..61b1459292 --- /dev/null +++ b/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam @@ -0,0 +1,11 @@ +rule failure + { + } + +actions failure + { + dir _ + echo a + } + +failure f ; diff --git a/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam b/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam new file mode 100644 index 0000000000..6afbc25ed4 --- /dev/null +++ b/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam @@ -0,0 +1,12 @@ +rule failure + { + } + +actions failure + { + dir _ + if errorlevel 1 exit %errorlevel% + echo a + } + +failure f ; diff --git a/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2 b/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2 new file mode 100644 index 0000000000..d9e5149e8c --- /dev/null +++ b/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2 @@ -0,0 +1,9 @@ +project + : requirements + <library>/boost/filesystem//boost_filesystem + <define>BOOST_ALL_NO_LIB + ; + + test-suite "missing_dependencies" : + [ run test.cpp lib//<link>static ] + ; diff --git a/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2 b/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2 new file mode 100644 index 0000000000..410e7edc9b --- /dev/null +++ b/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2 @@ -0,0 +1,7 @@ +SOURCES = + lib ; + +lib lib + : + $(SOURCES).cpp + ; diff --git a/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp b/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp new file mode 100644 index 0000000000..57c00cff3e --- /dev/null +++ b/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp @@ -0,0 +1 @@ +#error
\ No newline at end of file diff --git a/tools/regression/test/test-boost-build/missing_dependencies/test.cpp b/tools/regression/test/test-boost-build/missing_dependencies/test.cpp new file mode 100644 index 0000000000..c3aeba4bb6 --- /dev/null +++ b/tools/regression/test/test-boost-build/missing_dependencies/test.cpp @@ -0,0 +1 @@ +int main() { return 0; }
\ No newline at end of file diff --git a/tools/regression/test/test-cases/Huber2629/bjam.log b/tools/regression/test/test-cases/Huber2629/bjam.log new file mode 100644 index 0000000000..ca1fe1b9f4 --- /dev/null +++ b/tools/regression/test/test-cases/Huber2629/bjam.log @@ -0,0 +1,36 @@ +boost-test(RUN) "statechart/DllTestNative" : "libs/statechart/test/TuTestMain.cpp" +boost-test(RUN) "statechart/DllTestNormal" : "libs/statechart/test/TuTestMain.cpp" + +compile-c-c++ ..\..\..\bin.v2\libs\statechart\test\DllTestNormal.test\msvc-7.1\debug\threading-multi\TuTestMain.obj +TuTestMain.cpp +c:\Users\Misha\Stuff\boost\HEAD\boost\libs\statechart\test\TuTest.hpp(36) : warning C4275: non dll-interface class 'boost::statechart::event_base' used as base for dll-interface class 'boost::statechart::detail::rtti_policy::rtti_derived_type<MostDerived,Base>' + with + [ + MostDerived=EvX, + Base=boost::statechart::event_base + ] + ..\..\..\boost\statechart\event_base.hpp(49) : see declaration of 'boost::statechart::event_base' +compile-c-c++ ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLibTuTest.obj +TuTest.cpp +c:\Users\Misha\Stuff\boost\HEAD\boost\libs\statechart\test\TuTest.hpp(36) : warning C4275: non dll-interface class 'boost::statechart::event_base' used as base for dll-interface class 'boost::statechart::detail::rtti_policy::rtti_derived_type<MostDerived,Base>' + with + [ + MostDerived=EvX, + Base=boost::statechart::event_base + ] + ..\..\..\boost\statechart\event_base.hpp(49) : see declaration of 'boost::statechart::event_base' +msvc.link.dll ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib + Creating library ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib and object ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.exp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /subsystem:console /out:"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll" /IMPLIB:"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib" @"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.rsp" + if %errorlevel% 1 exit %errorlevel% + if exist "..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.manifest" ( + mt -nologo -manifest "..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.manifest" "-outputresource:..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll;2" + ) + +...failed msvc.link.dll ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib... +...removing ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll +...removing ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib +...skipped <p..\..\..\bin.v2\libs\statechart\test\DllTestNormal.test\msvc-7.1\debug\threading-multi>DllTestNormal.exe for lack of <p..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi>DllTestNormalLib-vc71-mt-gd-1_35.lib... +...skipped <p..\..\..\bin.v2\libs\statechart\test\DllTestNormal.test\msvc-7.1\debug\threading-multi>DllTestNormal.run for lack of <p..\..\..\bin.v2\libs\statechart\test\DllTestNormal.test\msvc-7.1\debug\threading-multi>DllTestNormal.exe... diff --git a/tools/regression/test/test-cases/Huber2629/expected/results.xml b/tools/regression/test/test-cases/Huber2629/expected/results.xml new file mode 100644 index 0000000000..44a32b04f5 --- /dev/null +++ b/tools/regression/test/test-cases/Huber2629/expected/results.xml @@ -0,0 +1,27 @@ +<test-log library="statechart" test-name="DllTestNormal" test-type="run" test-program="libs/statechart/test/TuTestMain.cpp" target-directory="bin.v2/libs/statechart/test/DllTestNormal.test/msvc-7.1/debug/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<lib result="fail" timestamp="">../../bin.v2/libs/statechart/test/msvc-7.1/debug/threading-multi</lib> +</test-log> + +<test-log library="statechart" test-name="" test-type="" test-program="" target-directory="bin.v2/libs/statechart/test/msvc-7.1/debug/threading-multi" toolset="" show-run-output="true"> +<compile result="succeed" timestamp=""> +TuTest.cpp +c:\Users\Misha\Stuff\boost\HEAD\boost\libs\statechart\test\TuTest.hpp(36) : warning C4275: non dll-interface class 'boost::statechart::event_base' used as base for dll-interface class 'boost::statechart::detail::rtti_policy::rtti_derived_type<MostDerived,Base>' + with + [ + MostDerived=EvX, + Base=boost::statechart::event_base + ] + ..\..\..\boost\statechart\event_base.hpp(49) : see declaration of 'boost::statechart::event_base' +</compile> +<link result="fail" timestamp=""> + Creating library ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib and object ..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.exp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /subsystem:console /out:"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll" /IMPLIB:"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.lib" @"..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.rsp" + if %errorlevel% 1 exit %errorlevel% + if exist "..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.manifest" ( + mt -nologo -manifest "..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll.manifest" "-outputresource:..\..\..\bin.v2\libs\statechart\test\msvc-7.1\debug\threading-multi\DllTestNormalLib-vc71-mt-gd-1_35.dll;2" + ) + +</link> +</test-log> diff --git a/tools/regression/test/test-cases/general/bjam.log b/tools/regression/test/test-cases/general/bjam.log new file mode 100644 index 0000000000..71013f7458 --- /dev/null +++ b/tools/regression/test/test-cases/general/bjam.log @@ -0,0 +1,325 @@ +locate-root "..\..\..\bin.v2" +C:\Users\Misha\Stuff\boost\HEAD\boost\tools\regression\test>C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost\tools\jam\src\bin.ntx86\bjam.exe --dump-tests --v2 msvc-7.1 "-sBOOST_BUILD_PATH=C:\Users\Misha\Stuff\boost\HEAD\bin\.." "-sBOOST_ROOT="C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost" +warning: Python location is not configured +warning: the Boost.Python library won't be built +Building Boost.Regex with the optional Unicode/ICU support disabled. +Please refer to the Boost.Regex documentation for more information +(and if you don't know what ICU is then you probably don't need it). +boost-test(RUN) "testlib/run~warn" : "tools/regression/test/run~warn.cpp" +boost-test(RUN) "testlib/run~warn-note" : "tools/regression/test/run~warn-note.cpp" +boost-test(RUN) "testlib/run~pass" : "tools/regression/test/run~pass.cpp" +boost-test(RUN) "testlib/run~note" : "tools/regression/test/run~note.cpp" +boost-test(RUN) "testlib/run~fail" : "tools/regression/test/run~fail.cpp" +boost-test(RUN_FAIL) "testlib/run-fail~pass" : "tools/regression/test/run-fail~pass.cpp" +boost-test(RUN_FAIL) "testlib/run-fail~fail" : "tools/regression/test/run-fail~fail.cpp" +boost-test(RUN_FAIL) "testlib/run-fail~fail-warn" : "tools/regression/test/run-fail~fail-warn.cpp" +boost-test(RUN_FAIL) "testlib/run-fail~compile-fail" : "tools/regression/test/run-fail~compile-fail.cpp" +boost-test(LINK_FAIL) "testlib/link-fail~pass" : "tools/regression/test/link-fail~pass.cpp" +boost-test(LINK_FAIL) "testlib/link-fail~fail" : "tools/regression/test/link-fail~fail.cpp" +boost-test(LINK) "testlib/link~pass" : "tools/regression/test/link~pass.cpp" +boost-test(LINK) "testlib/link~fail" : "tools/regression/test/link~fail.cpp" +boost-test(COMPILE) "testlib/compile~warn" : "tools/regression/test/compile~warn.cpp" +boost-test(COMPILE) "testlib/compile~pass" : "tools/regression/test/compile~pass.cpp" +boost-test(COMPILE) "testlib/compile~fail" : "tools/regression/test/compile~fail.cpp" +boost-test(COMPILE_FAIL) "testlib/compile-fail~pass" : "tools/regression/test/compile-fail~pass.cpp" +boost-test(COMPILE_FAIL) "testlib/compile-fail~fail" : "tools/regression/test/compile-fail~fail.cpp" +...found 210 targets... +...updating 157 targets... +MkDir1 ..\..\..\bin.v2\tools\regression\test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj +compile-fail~fail.cpp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj.rsp" + +...failed compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj... +...removing ..\..\..\bin.v2\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~pass.obj +compile-fail~pass.cpp +compile-fail~pass.cpp(9) : fatal error C1189: #error : example of a compile failure
+(failed-as-expected) ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~pass.obj +**passed** ..\..\..\bin.v2\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi\compile~fail.obj +compile~fail.cpp +compile~fail.cpp(9) : fatal error C1189: #error : example of a compile failure
+ + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi\compile~fail.obj.rsp" + +...failed compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi\compile~fail.obj... +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1\debug\link-static\threading-multi\compile~pass.obj +compile~pass.cpp +**passed** ..\..\..\bin.v2\tools\regression\test\compile~pass.test\msvc-7.1\debug\link-static\threading-multi\compile~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~warn.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1\debug\link-static\threading-multi\compile~warn.obj +compile~warn.cpp +compile~warn.cpp(15) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\compile~warn.cpp(15) : warning C4700: local variable 'ul' used without having been initialized +**passed** ..\..\..\bin.v2\tools\regression\test\compile~warn.test\msvc-7.1\debug\link-static\threading-multi\compile~warn.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.obj +link~fail.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe +link~fail.obj : error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main +..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe : fatal error LNK1120: 1 unresolved externals + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe" @"..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.rsp" + if errorlevel 1 exit %errorlevel% + if exist "..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" ( + mt -nologo -manifest "..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" "-outputresource:..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe;1" + ) + +...failed msvc.link ..\..\..\bin.v2\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe... +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug\link-static\threading-multi\link~pass.obj +link~pass.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug\link-static\threading-multi\link~pass.exe +**passed** ..\..\..\bin.v2\tools\regression\test\link~pass.test\msvc-7.1\debug\link-static\threading-multi\link~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.obj +link-fail~fail.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe" @"..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.rsp" + if errorlevel 1 exit %errorlevel% + if exist "..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" ( + mt -nologo -manifest "..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" "-outputresource:..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe;1" + ) + +...failed msvc.link ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe... +...removing ..\..\..\bin.v2\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.obj +link-fail~pass.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.exe +link-fail~pass.obj : error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main +..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.exe : fatal error LNK1120: 1 unresolved externals +(failed-as-expected) ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.exe +**passed** ..\..\..\bin.v2\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~compile-fail.obj +run-fail~compile-fail.cpp +run-fail~compile-fail.cpp(9) : fatal error C1189: #error : example of a compile failure
+ + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~compile-fail.obj.rsp" + +...failed compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~compile-fail.obj... +...skipped <p..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi>run-fail~compile-fail.exe for lack of <p..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi>run-fail~compile-fail.obj... +...skipped <p..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi>run-fail~compile-fail.run for lack of <p..\..\..\bin.v2\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi>run-fail~compile-fail.exe... +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.obj +run-fail~fail-warn.cpp +run-fail~fail-warn.cpp(13) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run-fail~fail-warn.cpp(13) : warning C4700: local variable 'ul' used without having been initialized +msvc.link ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.run + 1 file(s) copied. + + + ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.exe > ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.output 2>&1 + set status=%ERRORLEVEL% + echo. >> ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.output + echo EXIT STATUS: %status% >> ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.output + if %status% EQU 0 ( + copy ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.output ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.run + ) + set verbose=0 + if %status% NEQ 0 ( + set verbose=1 + ) + if %verbose% EQU 1 ( + echo ====== BEGIN OUTPUT ====== + type ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.output + echo ====== END OUTPUT ====== + ) + exit %status% + +...failed testing.capture-output ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.run... +...removing ..\..\..\bin.v2\tools\regression\test\run-fail~fail-warn.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail-warn.run +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.obj +run-fail~fail.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.run + 1 file(s) copied. + + + ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.exe > ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.output 2>&1 + set status=%ERRORLEVEL% + echo. >> ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.output + echo EXIT STATUS: %status% >> ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.output + if %status% EQU 0 ( + copy ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.output ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.run + ) + set verbose=0 + if %status% NEQ 0 ( + set verbose=1 + ) + if %verbose% EQU 1 ( + echo ====== BEGIN OUTPUT ====== + type ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.output + echo ====== END OUTPUT ====== + ) + exit %status% + +...failed testing.capture-output ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.run... +...removing ..\..\..\bin.v2\tools\regression\test\run-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~fail.run +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\run-fail~pass.obj +run-fail~pass.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\run-fail~pass.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\run-fail~pass.run +====== BEGIN OUTPUT ====== +example of output from a run-time failure + +EXIT STATUS: 1 +====== END OUTPUT ====== + + del /f /q "..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\run-fail~pass.exe" + +...failed RmTemps ..\..\..\bin.v2\tools\regression\test\run-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\run-fail~pass.run... +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~fail.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug +...on 100th target... +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.obj +run~fail.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.run +====== BEGIN OUTPUT ====== + +EXIT STATUS: 1 +====== END OUTPUT ====== + + + ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.exe > ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.output 2>&1 + set status=%ERRORLEVEL% + echo. >> ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.output + echo EXIT STATUS: %status% >> ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.output + if %status% EQU 0 ( + copy ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.output ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.run + ) + set verbose=0 + if %status% NEQ 0 ( + set verbose=1 + ) + if %verbose% EQU 1 ( + echo ====== BEGIN OUTPUT ====== + type ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.output + echo ====== END OUTPUT ====== + ) + exit %status% + +...failed testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~fail.test\msvc-7.1\debug\link-static\threading-multi\run~fail.run... +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~note.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static\threading-multi\run~note.obj +run~note.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static\threading-multi\run~note.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static\threading-multi\run~note.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~note.test\msvc-7.1\debug\link-static\threading-multi\run~note.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj +run~pass.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn-note.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static\threading-multi\run~warn-note.obj +run~warn-note.cpp +run~warn-note.cpp(21) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run~warn-note.cpp(21) : warning C4700: local variable 'ul' used without having been initialized +msvc.link ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static\threading-multi\run~warn-note.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static\threading-multi\run~warn-note.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~warn-note.test\msvc-7.1\debug\link-static\threading-multi\run~warn-note.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static\threading-multi\run~warn.obj +run~warn.cpp +run~warn.cpp(15) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run~warn.cpp(15) : warning C4700: local variable 'ul' used without having been initialized +msvc.link ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static\threading-multi\run~warn.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static\threading-multi\run~warn.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~warn.test\msvc-7.1\debug\link-static\threading-multi\run~warn.test +...failed updating 9 targets... +...skipped 17 targets... +...updated 131 targets... diff --git a/tools/regression/test/test-cases/general/expected/results.xml b/tools/regression/test/test-cases/general/expected/results.xml new file mode 100644 index 0000000000..13224e0113 --- /dev/null +++ b/tools/regression/test/test-cases/general/expected/results.xml @@ -0,0 +1,167 @@ +<test-log library="" test-name="compile-fail~fail" test-type="" test-program="" target-directory="tools/regression/test/compile-fail~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="fail" timestamp="xxx"> +compile-fail~fail.cpp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj.rsp" + +</compile> +</test-log> +<test-log library="" test-name="compile-fail~pass" test-type="" test-program="" target-directory="tools/regression/test/compile-fail~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +compile-fail~pass.cpp +compile-fail~pass.cpp(9) : fatal error C1189: #error : example of a compile failure +(failed-as-expected) C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\compile-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~pass.obj +</compile> +</test-log> +<test-log library="" test-name="compile~fail" test-type="" test-program="" target-directory="tools/regression/test/compile~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="fail" timestamp="xxx"> +compile~fail.cpp +compile~fail.cpp(9) : fatal error C1189: #error : example of a compile failure + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi\compile~fail.obj.rsp" + +</compile> +</test-log> +<test-log library="" test-name="compile~pass" test-type="" test-program="" target-directory="tools/regression/test/compile~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +compile~pass.cpp +</compile> +</test-log> +<test-log library="" test-name="compile~warn" test-type="" test-program="" target-directory="tools/regression/test/compile~warn.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +compile~warn.cpp +compile~warn.cpp(15) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\compile~warn.cpp(15) : warning C4700: local variable 'ul' used without having been initialized +</compile> +</test-log> +<test-log library="" test-name="link-fail~fail" test-type="" test-program="" target-directory="tools/regression/test/link-fail~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +link-fail~fail.cpp +</compile> +<link result="fail" timestamp="xxx"> + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe" @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.rsp" + if errorlevel 1 exit %errorlevel% + if exist "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" ( + mt -nologo -manifest "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" "-outputresource:C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe;1" + ) + +</link> +</test-log> +<test-log library="" test-name="link-fail~pass" test-type="" test-program="" target-directory="tools/regression/test/link-fail~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +link-fail~pass.cpp +</compile> +<link result="succeed" timestamp="xxx"> +link-fail~pass.obj : error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main +C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.exe : fatal error LNK1120: 1 unresolved externals +(failed-as-expected) C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~pass.test\msvc-7.1\debug\link-static\threading-multi\link-fail~pass.exe +</link> +</test-log> +<test-log library="" test-name="link~fail" test-type="" test-program="" target-directory="tools/regression/test/link~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +link~fail.cpp +</compile> +<link result="fail" timestamp="xxx"> +link~fail.obj : error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main +C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe : fatal error LNK1120: 1 unresolved externals + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe" @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.rsp" + if errorlevel 1 exit %errorlevel% + if exist "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" ( + mt -nologo -manifest "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" "-outputresource:C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe;1" + ) + +</link> +</test-log> +<test-log library="" test-name="link~pass" test-type="" test-program="" target-directory="tools/regression/test/link~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +link~pass.cpp +</compile> +<link result="succeed" timestamp="xxx"> +</link> +</test-log> +<test-log library="" test-name="run-fail~compile-fail" test-type="" test-program="" target-directory="tools/regression/test/run-fail~compile-fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="fail" timestamp="xxx"> +run-fail~compile-fail.cpp +run-fail~compile-fail.cpp(9) : fatal error C1189: #error : example of a compile failure + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~compile-fail.obj.rsp" + +</compile> +</test-log> +<test-log library="" test-name="run-fail~fail-warn" test-type="" test-program="" target-directory="tools/regression/test/run-fail~fail-warn.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run-fail~fail-warn.cpp +run-fail~fail-warn.cpp(13) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run-fail~fail-warn.cpp(13) : warning C4700: local variable 'ul' used without having been initialized +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="fail" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run-fail~fail" test-type="" test-program="" target-directory="tools/regression/test/run-fail~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run-fail~fail.cpp +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="fail" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run-fail~pass" test-type="" test-program="" target-directory="tools/regression/test/run-fail~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run-fail~pass.cpp +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="succeed" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run~fail" test-type="" test-program="" target-directory="tools/regression/test/run~fail.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run~fail.cpp +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="fail" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run~note" test-type="" test-program="" target-directory="tools/regression/test/run~note.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run~note.cpp +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="succeed" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run~pass" test-type="" test-program="" target-directory="tools/regression/test/run~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run~pass.cpp +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="succeed" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run~warn-note" test-type="" test-program="" target-directory="tools/regression/test/run~warn-note.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run~warn-note.cpp +run~warn-note.cpp(21) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run~warn-note.cpp(21) : warning C4700: local variable 'ul' used without having been initialized +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="succeed" timestamp="xxx"> +</run> +</test-log> +<test-log library="" test-name="run~warn" test-type="" test-program="" target-directory="tools/regression/test/run~warn.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="succeed" timestamp="xxx"> +run~warn.cpp +run~warn.cpp(15) : warning C4244: '=' : conversion from 'unsigned long' to 'short', possible loss of data +c:\users\misha\stuff\boost\head\boost\tools\regression\test\run~warn.cpp(15) : warning C4700: local variable 'ul' used without having been initialized +</compile> +<link result="succeed" timestamp="xxx"></link> +<run result="succeed" timestamp="xxx"> +</run> +</test-log> diff --git a/tools/regression/test/test-cases/incremental/bjam.log b/tools/regression/test/test-cases/incremental/bjam.log new file mode 100644 index 0000000000..65db0844c2 --- /dev/null +++ b/tools/regression/test/test-cases/incremental/bjam.log @@ -0,0 +1,33 @@ +locate-root "..\..\..\bin.v2" +C:\Users\Misha\Stuff\boost\HEAD\boost\tools\regression\test>C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost\tools\jam\src\bin.ntx86\bjam.exe --dump-tests --v2 msvc-7.1 "-sBOOST_BUILD_PATH=C:\Users\Misha\Stuff\boost\HEAD\bin\.." "-sBOOST_ROOT="C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost" + +boost-test(RUN) "testlib/run~pass" : "tools/regression/test/run~pass.cpp" +boost-test(RUN) "testlib/run~pass" : "tools/regression/test/run~pass2s.cpp" + +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj +run~pass.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.test + +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.obj +run~pass2.cpp +msvc.link ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe +testing.capture-output ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.run + 1 file(s) copied. +**passed** ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.test + +...failed updating 9 targets... +...skipped 17 targets... +...updated 131 targets... diff --git a/tools/regression/test/test-cases/incremental/bjam.log.1 b/tools/regression/test/test-cases/incremental/bjam.log.1 new file mode 100644 index 0000000000..967ed9eb23 --- /dev/null +++ b/tools/regression/test/test-cases/incremental/bjam.log.1 @@ -0,0 +1,38 @@ +locate-root "..\..\..\bin.v2" +C:\Users\Misha\Stuff\boost\HEAD\boost\tools\regression\test>C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost\tools\jam\src\bin.ntx86\bjam.exe --dump-tests --v2 msvc-7.1 "-sBOOST_BUILD_PATH=C:\Users\Misha\Stuff\boost\HEAD\bin\.." "-sBOOST_ROOT="C:\Users\Misha\Stuff\boost\HEAD\bin\..\boost" + +boost-test(RUN) "testlib/run~pass" : "tools/regression/test/run~pass.cpp" + +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj +run~pass.cpp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj.rsp" + +...failed compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj... + +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1 +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static +MkDir1 ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi +compile-c-c++ ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.obj +run~pass2.cpp + +msvc.link ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe" @"..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe.rsp" + if errorlevel 1 exit %errorlevel% + if exist "..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe.manifest" ( + mt -nologo -manifest "..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe.manifest" "-outputresource:..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe;1" + ) + +...failed msvc.link ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe... +...removing ..\..\..\bin.v2\tools\regression\test\run~pass2.test\msvc-7.1\debug\link-static\threading-multi\run~pass2.exe + + +...failed updating 9 targets... +...skipped 17 targets... +...updated 131 targets... diff --git a/tools/regression/test/test-cases/incremental/expected/results.xml b/tools/regression/test/test-cases/incremental/expected/results.xml new file mode 100644 index 0000000000..0580bd588f --- /dev/null +++ b/tools/regression/test/test-cases/incremental/expected/results.xml @@ -0,0 +1,9 @@ +<test-log library="" test-name="run~pass" test-type="" test-program="" target-directory="tools/regression/test/run~pass.test/msvc-7.1/debug/link-static/threading-multi" toolset="msvc-7.1" show-run-output="false"> +<compile result="fail" timestamp="xxx"> +run~pass.cpp + + call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul +cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\incremental\actual\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj.rsp" + +</compile> +</test-log> diff --git a/tools/regression/test/test.bat b/tools/regression/test/test.bat new file mode 100644 index 0000000000..200c716cba --- /dev/null +++ b/tools/regression/test/test.bat @@ -0,0 +1,10 @@ +set TEST_LOCATE_ROOT=d:\temp + +echo Begin test processing... +bjam --dump-tests "-sALL_LOCATE_TARGET=%TEST_LOCATE_ROOT%" %* >bjam.log 2>&1 +echo Begin log processing... +process_jam_log %TEST_LOCATE_ROOT% <bjam.log +start bjam.log +echo Begin compiler status processing... +compiler_status --locate-root %TEST_LOCATE_ROOT% %BOOST_ROOT% test_status.html test_links.html +start test_status.html diff --git a/tools/regression/test/test.py b/tools/regression/test/test.py new file mode 100644 index 0000000000..5a627ea2b5 --- /dev/null +++ b/tools/regression/test/test.py @@ -0,0 +1,181 @@ +# Copyright (c) MetaCommunications, Inc. 2003-2005 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import difflib +import os +import re +import shutil +import string +import sys + + + +def scan_for_test_cases(): + return [ os.path.join( "test-cases", x ) for x in os.listdir( "test-cases" ) if x != "CVS" ] + +def clean_dir( dir ): + if os.path.exists( dir ): + shutil.rmtree( dir ) + os.makedirs( dir ) + +def system( commands ): + if sys.platform == 'win32': + f = open( 'tmp.cmd', 'w' ) + f.write( string.join( commands, '\n' ) ) + f.close() + rc = os.system( 'tmp.cmd' ) + os.unlink( 'tmp.cmd' ) + return rc + else: + rc = os.system( '&&'.join( commands ) ) + return rc + +def checked_system( commands, valid_return_codes = [ 0 ] ): + rc = system( commands ) + if rc not in [ 0 ] + valid_return_codes: + raise Exception( 'Command sequence "%s" failed with return code %d' % ( commands, rc ) ) + return rc + +def list_recursively( dir ): + r = [] + for root, dirs, files in os.walk( dir, topdown=False ): + root = root[ len( dir ) + 1 : ] + r.extend( [ os.path.join( root, x ) for x in dirs ] ) + r.extend( [ os.path.join( root, x ) for x in files ] ) + + return r + +def find_process_jam_log(): + root = "../../../" + + for root, dirs, files in os.walk( os.path.join( root, "bin.v2" ), topdown=False ): + if "process_jam_log.exe" in files: + return os.path.abspath( os.path.normpath( os.path.join( root, "process_jam_log.exe" ) ) ) + if "process_jam_log" in files: + return os.path.abspath( os.path.normpath( os.path.join( root, "process_jam_log" ) ) ) + return None + +def process_jam_log( executable, file, locate_root, results_dir ): + args = [] + args.append( executable ) + # args.append( '--echo' ) + args.append( '--create-directories' ) + args.append( '--v2' ) + args.append( locate_root ) + args.append( '<' ) + args.append( file ) + + cmd = " ".join( args ) + print "Running process_jam_log (%s)" % cmd + checked_system( [ cmd ] ) + + +def read_file( file_path ): + f = open( file_path ) + try: + return f.read() + finally: + f.close() + +def remove_timestamps( log_lines ): + return [ re.sub( "timestamp=\"[^\"]+\"", "timestamp=\"\"", x ) for x in log_lines ] + +def determine_locate_root( bjam_log ): + locate_root = None + f = open( 'bjam.log' ) + try: + locate_root_re = re.compile( r'locate-root\s+"(.*)"' ) + for l in f.readlines(): + m = locate_root_re.match( l ) + if m: + locate_root = m.group(1) + break + finally: + f.close() + return locate_root + +def read_file( path ): + f = open( path ) + try: + return f.read() + finally: + f.close() + +def read_file_lines( path ): + f = open( path ) + try: + return f.readlines() + finally: + f.close() + +def write_file( path, content ): + f = open( path, 'w' ) + try: + return f.write( content ) + finally: + f.close() + +def write_file_lines( path, content ): + f = open( path, 'w' ) + try: + return f.writelines( content ) + finally: + f.close() + + +def run_test_cases( test_cases ): + process_jam_log_executable = find_process_jam_log() + print 'Found process_jam_log: %s' % process_jam_log_executable + initial_dir = os.getcwd() + for test_case in test_cases: + os.chdir( initial_dir ) + print 'Running test case "%s"' % test_case + os.chdir( test_case ) + if os.path.exists( "expected" ): + locate_root = determine_locate_root( 'bjam.log' ) + print 'locate_root: %s' % locate_root + + actual_results_dir = os.path.join( test_case, "actual" ) + clean_dir( "actual" ) + os.chdir( "actual" ) + root = os.getcwd() + i = 0 + while 1: + if i == 0: + bjam_log_file = 'bjam.log' + else: + bjam_log_file = 'bjam.log.%0d' % i + i += 1 + print 'Looking for %s' % bjam_log_file + if not os.path.exists( os.path.join( '..', bjam_log_file ) ): + print ' does not exists' + break + print ' found' + write_file_lines(bjam_log_file.replace( 'bjam', 'bjam_' ), + [ x.replace( locate_root, root ) for x in read_file_lines( os.path.join( '..', bjam_log_file ) ) ] ) + + process_jam_log( executable = process_jam_log_executable + , results_dir = "." + , locate_root = root + , file=bjam_log_file.replace( 'bjam', 'bjam_' ) ) + + actual_content = list_recursively( "." ) + actual_content.sort() + result_xml = [] + for test_log in [ x for x in actual_content if os.path.splitext( x )[1] == '.xml' ]: + print 'reading %s' % test_log + result = [ re.sub( r'timestamp="(.*)"', 'timestamp="xxx"', x ) for x in read_file_lines( test_log ) ] + result_xml.extend( result ) + + write_file_lines( 'results.xml', result_xml ) + os.chdir( '..' ) + assert read_file( 'expected/results.xml' ) == read_file( 'actual/results.xml' ) + os.chdir( '..' ) + else: + raise ' Test case "%s" doesn\'t contain the expected results directory ("expected" )' % ( test_case ) + +run_test_cases( scan_for_test_cases() ) +# print find_process_jam_log() diff --git a/tools/regression/xsl_reports/boost_wide_report.py b/tools/regression/xsl_reports/boost_wide_report.py new file mode 100644 index 0000000000..a5fd0cf5fe --- /dev/null +++ b/tools/regression/xsl_reports/boost_wide_report.py @@ -0,0 +1,836 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import shutil +import codecs +import xml.sax.handler +import glob +import re +import os.path +import os +import string +import time +import sys +import ftplib + +import utils +import runner + + +report_types = [ 'us', 'ds', 'ud', 'dd', 'l', 'p', 'i', 'n', 'ddr', 'dsr', 'udr', 'usr' ] + +if __name__ == '__main__': + run_dir = os.path.abspath( os.path.dirname( sys.argv[ 0 ] ) ) +else: + run_dir = os.path.abspath( os.path.dirname( sys.modules[ __name__ ].__file__ ) ) + + +def map_path( path ): + return os.path.join( run_dir, path ) + + +def xsl_path( xsl_file_name ): + return map_path( os.path.join( 'xsl/v2', xsl_file_name ) ) + +class file_info: + def __init__( self, file_name, file_size, file_date ): + self.name = file_name + self.size = file_size + self.date = file_date + + def __repr__( self ): + return "name: %s, size: %s, date %s" % ( self.name, self.size, self.date ) + +# +# Find the mod time from unix format directory listing line +# + +def get_date( words ): + date = words[ 5: -1 ] + t = time.localtime() + + month_names = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] + + year = time.localtime()[0] # If year is not secified is it the current year + month = month_names.index( date[0] ) + 1 + day = int( date[1] ) + hours = 0 + minutes = 0 + + if date[2].find( ":" ) != -1: + ( hours, minutes ) = [ int(x) for x in date[2].split( ":" ) ] + else: + # there is no way to get seconds for not current year dates + year = int( date[2] ) + + return ( year, month, day, hours, minutes, 0, 0, 0, 0 ) + +def list_ftp( f ): + # f is an ftp object + utils.log( "listing source content" ) + lines = [] + + # 1. get all lines + f.dir( lambda x: lines.append( x ) ) + + # 2. split lines into words + word_lines = [ x.split( None, 8 ) for x in lines ] + + # we don't need directories + result = [ file_info( l[-1], None, get_date( l ) ) for l in word_lines if l[0][0] != "d" ] + for f in result: + utils.log( " %s" % f ) + return result + +def list_dir( dir ): + utils.log( "listing destination content %s" % dir ) + result = [] + for file_path in glob.glob( os.path.join( dir, "*.zip" ) ): + if os.path.isfile( file_path ): + mod_time = time.localtime( os.path.getmtime( file_path ) ) + mod_time = ( mod_time[0], mod_time[1], mod_time[2], mod_time[3], mod_time[4], mod_time[5], 0, 0, mod_time[8] ) + # no size (for now) + result.append( file_info( os.path.basename( file_path ), None, mod_time ) ) + for fi in result: + utils.log( " %s" % fi ) + return result + +def find_by_name( d, name ): + for dd in d: + if dd.name == name: + return dd + return None + +def diff( source_dir_content, destination_dir_content ): + utils.log( "Finding updated files" ) + result = ( [], [] ) # ( changed_files, obsolete_files ) + for source_file in source_dir_content: + found = find_by_name( destination_dir_content, source_file.name ) + if found is None: result[0].append( source_file.name ) + elif time.mktime( found.date ) != time.mktime( source_file.date ): result[0].append( source_file.name ) + else: + pass + for destination_file in destination_dir_content: + found = find_by_name( source_dir_content, destination_file.name ) + if found is None: result[1].append( destination_file.name ) + utils.log( " Updated files:" ) + for f in result[0]: + utils.log( " %s" % f ) + utils.log( " Obsolete files:" ) + for f in result[1]: + utils.log( " %s" % f ) + return result + +def _modtime_timestamp( file ): + return os.stat( file ).st_mtime + + +root_paths = [] + +def shorten( file_path ): + root_paths.sort( lambda x, y: cmp( len(y ), len( x ) ) ) + for root in root_paths: + if file_path.lower().startswith( root.lower() ): + return file_path[ len( root ): ].replace( "\\", "/" ) + return file_path.replace( "\\", "/" ) + +class action: + def __init__( self, file_path ): + self.file_path_ = file_path + self.relevant_paths_ = [ self.file_path_ ] + self.boost_paths_ = [] + self.dependencies_ = [] + self.other_results_ = [] + + def run( self ): + utils.log( "%s: run" % shorten( self.file_path_ ) ) + __log__ = 2 + + for dependency in self.dependencies_: + if not os.path.exists( dependency ): + utils.log( "%s doesn't exists, removing target" % shorten( dependency ) ) + self.clean() + return + + if not os.path.exists( self.file_path_ ): + utils.log( "target doesn't exists, building" ) + self.update() + return + + dst_timestamp = _modtime_timestamp( self.file_path_ ) + utils.log( " target: %s [%s]" % ( shorten( self.file_path_ ), dst_timestamp ) ) + needs_updating = 0 + utils.log( " dependencies:" ) + for dependency in self.dependencies_: + dm = _modtime_timestamp( dependency ) + update_mark = "" + if dm > dst_timestamp: + needs_updating = 1 + utils.log( ' %s [%s] %s' % ( shorten( dependency ), dm, update_mark ) ) + + if needs_updating: + utils.log( "target needs updating, rebuilding" ) + self.update() + return + else: + utils.log( "target is up-to-date" ) + + + def clean( self ): + to_unlink = self.other_results_ + [ self.file_path_ ] + for result in to_unlink: + utils.log( ' Deleting obsolete "%s"' % shorten( result ) ) + if os.path.exists( result ): + os.unlink( result ) + +class merge_xml_action( action ): + def __init__( self, source, destination, expected_results_file, failures_markup_file, tag ): + action.__init__( self, destination ) + self.source_ = source + self.destination_ = destination + self.tag_ = tag + + self.expected_results_file_ = expected_results_file + self.failures_markup_file_ = failures_markup_file + + self.dependencies_.extend( [ + self.source_ + , self.expected_results_file_ + , self.failures_markup_file_ + ] + ) + + self.relevant_paths_.extend( [ self.source_ ] ) + self.boost_paths_.extend( [ self.expected_results_file_, self.failures_markup_file_ ] ) + + + + def update( self ): + def filter_xml( src, dest ): + + class xmlgen( xml.sax.saxutils.XMLGenerator ): + def __init__( self, writer ): + xml.sax.saxutils.XMLGenerator.__init__( self, writer ) + + self.trimmed = 0 + self.character_content = "" + + def startElement( self, name, attrs): + self.flush() + xml.sax.saxutils.XMLGenerator.startElement( self, name, attrs ) + + def endElement( self, name ): + self.flush() + xml.sax.saxutils.XMLGenerator.endElement( self, name ) + + def flush( self ): + content = self.character_content + self.character_content = "" + self.trimmed = 0 + xml.sax.saxutils.XMLGenerator.characters( self, content ) + + def characters( self, content ): + if not self.trimmed: + max_size = pow( 2, 16 ) + self.character_content += content + if len( self.character_content ) > max_size: + self.character_content = self.character_content[ : max_size ] + "...\n\n[The content has been trimmed by the report system because it exceeds %d bytes]" % max_size + self.trimmed = 1 + + o = open( dest, "w" ) + try: + gen = xmlgen( o ) + xml.sax.parse( src, gen ) + finally: + o.close() + + return dest + + + utils.log( 'Merging "%s" with expected results...' % shorten( self.source_ ) ) + try: + trimmed_source = filter_xml( self.source_, '%s-trimmed.xml' % os.path.splitext( self.source_ )[0] ) + utils.libxslt( + utils.log + , trimmed_source + , xsl_path( 'add_expected_results.xsl' ) + , self.file_path_ + , { + "expected_results_file" : self.expected_results_file_ + , "failures_markup_file": self.failures_markup_file_ + , "source" : self.tag_ + } + ) + + os.unlink( trimmed_source ) + + except Exception, msg: + utils.log( ' Skipping "%s" due to errors (%s)' % ( self.source_, msg ) ) + if os.path.exists( self.file_path_ ): + os.unlink( self.file_path_ ) + + + def _xml_timestamp( xml_path ): + + class timestamp_reader( xml.sax.handler.ContentHandler ): + def startElement( self, name, attrs ): + if name == 'test-run': + self.timestamp = attrs.getValue( 'timestamp' ) + raise self + + try: + xml.sax.parse( xml_path, timestamp_reader() ) + raise 'Cannot extract timestamp from "%s". Invalid XML file format?' % xml_path + except timestamp_reader, x: + return x.timestamp + + +class make_links_action( action ): + def __init__( self, source, destination, output_dir, tag, run_date, comment_file, failures_markup_file ): + action.__init__( self, destination ) + self.dependencies_.append( source ) + self.source_ = source + self.output_dir_ = output_dir + self.tag_ = tag + self.run_date_ = run_date + self.comment_file_ = comment_file + self.failures_markup_file_ = failures_markup_file + self.links_file_path_ = os.path.join( output_dir, 'links.html' ) + + def update( self ): + utils.makedirs( os.path.join( os.path.dirname( self.links_file_path_ ), "output" ) ) + utils.makedirs( os.path.join( os.path.dirname( self.links_file_path_ ), "developer", "output" ) ) + utils.makedirs( os.path.join( os.path.dirname( self.links_file_path_ ), "user", "output" ) ) + utils.log( ' Making test output files...' ) + try: + utils.libxslt( + utils.log + , self.source_ + , xsl_path( 'links_page.xsl' ) + , self.links_file_path_ + , { + 'source': self.tag_ + , 'run_date': self.run_date_ + , 'comment_file': self.comment_file_ + , 'explicit_markup_file': self.failures_markup_file_ + } + ) + except Exception, msg: + utils.log( ' Skipping "%s" due to errors (%s)' % ( self.source_, msg ) ) + + open( self.file_path_, "w" ).close() + + +class unzip_action( action ): + def __init__( self, source, destination, unzip_func ): + action.__init__( self, destination ) + self.dependencies_.append( source ) + self.source_ = source + self.unzip_func_ = unzip_func + + def update( self ): + try: + utils.log( ' Unzipping "%s" ... into "%s"' % ( shorten( self.source_ ), os.path.dirname( self.file_path_ ) ) ) + self.unzip_func_( self.source_, os.path.dirname( self.file_path_ ) ) + except Exception, msg: + utils.log( ' Skipping "%s" due to errors (%s)' % ( self.source_, msg ) ) + + +def ftp_task( site, site_path , destination ): + __log__ = 1 + utils.log( '' ) + utils.log( 'ftp_task: "ftp://%s/%s" -> %s' % ( site, site_path, destination ) ) + + utils.log( ' logging on ftp site %s' % site ) + f = ftplib.FTP( site ) + f.login() + utils.log( ' cwd to "%s"' % site_path ) + f.cwd( site_path ) + + source_content = list_ftp( f ) + source_content = [ x for x in source_content if re.match( r'.+[.](?<!log[.])zip', x.name ) and x.name.lower() != 'boostbook.zip' ] + destination_content = list_dir( destination ) + d = diff( source_content, destination_content ) + + def synchronize(): + for source in d[0]: + utils.log( 'Copying "%s"' % source ) + result = open( os.path.join( destination, source ), 'wb' ) + f.retrbinary( 'RETR %s' % source, result.write ) + result.close() + mod_date = find_by_name( source_content, source ).date + m = time.mktime( mod_date ) + os.utime( os.path.join( destination, source ), ( m, m ) ) + + for obsolete in d[1]: + utils.log( 'Deleting "%s"' % obsolete ) + os.unlink( os.path.join( destination, obsolete ) ) + + utils.log( " Synchronizing..." ) + __log__ = 2 + synchronize() + + f.quit() + +def unzip_archives_task( source_dir, processed_dir, unzip_func ): + utils.log( '' ) + utils.log( 'unzip_archives_task: unpacking updated archives in "%s" into "%s"...' % ( source_dir, processed_dir ) ) + __log__ = 1 + + target_files = [ os.path.join( processed_dir, os.path.basename( x.replace( ".zip", ".xml" ) ) ) for x in glob.glob( os.path.join( source_dir, "*.zip" ) ) ] + glob.glob( os.path.join( processed_dir, "*.xml" ) ) + actions = [ unzip_action( os.path.join( source_dir, os.path.basename( x.replace( ".xml", ".zip" ) ) ), x, unzip_func ) for x in target_files ] + for a in actions: + a.run() + +def merge_xmls_task( source_dir, processed_dir, merged_dir, expected_results_file, failures_markup_file, tag ): + utils.log( '' ) + utils.log( 'merge_xmls_task: merging updated XMLs in "%s"...' % source_dir ) + __log__ = 1 + + utils.makedirs( merged_dir ) + target_files = [ os.path.join( merged_dir, os.path.basename( x ) ) for x in glob.glob( os.path.join( processed_dir, "*.xml" ) ) ] + glob.glob( os.path.join( merged_dir, "*.xml" ) ) + actions = [ merge_xml_action( os.path.join( processed_dir, os.path.basename( x ) ) + , x + , expected_results_file + , failures_markup_file + , tag ) for x in target_files ] + + for a in actions: + a.run() + + +def make_links_task( input_dir, output_dir, tag, run_date, comment_file, extended_test_results, failures_markup_file ): + utils.log( '' ) + utils.log( 'make_links_task: make output files for test results in "%s"...' % input_dir ) + __log__ = 1 + + target_files = [ x + ".links" for x in glob.glob( os.path.join( input_dir, "*.xml" ) ) ] + glob.glob( os.path.join( input_dir, "*.links" ) ) + actions = [ make_links_action( x.replace( ".links", "" ) + , x + , output_dir + , tag + , run_date + , comment_file + , failures_markup_file + ) for x in target_files ] + + for a in actions: + a.run() + + +class xmlgen( xml.sax.saxutils.XMLGenerator ): + document_started = 0 + + def startDocument( self ): + if not self.document_started: + xml.sax.saxutils.XMLGenerator.startDocument( self ) + self.document_started = 1 + + +def merge_processed_test_runs( test_runs_dir, tag, writer ): + utils.log( '' ) + utils.log( 'merge_processed_test_runs: merging processed test runs from %s into a single XML...' % test_runs_dir ) + __log__ = 1 + + all_runs_xml = xmlgen( writer, encoding='utf-8' ) + all_runs_xml.startDocument() + all_runs_xml.startElement( 'all-test-runs', {} ) + + files = glob.glob( os.path.join( test_runs_dir, '*.xml' ) ) + for test_run in files: + #file_pos = writer.stream.tell() + file_pos = writer.tell() + try: + utils.log( ' Writing "%s" into the resulting XML...' % test_run ) + xml.sax.parse( test_run, all_runs_xml ) + except Exception, msg: + utils.log( ' Skipping "%s" due to errors (%s)' % ( test_run, msg ) ) + #writer.stream.seek( file_pos ) + #writer.stream.truncate() + writer.seek( file_pos ) + writer.truncate() + + all_runs_xml.endElement( 'all-test-runs' ) + all_runs_xml.endDocument() + + +def execute_tasks( + tag + , user + , run_date + , comment_file + , results_dir + , output_dir + , reports + , warnings + , extended_test_results + , dont_collect_logs + , expected_results_file + , failures_markup_file + ): + + incoming_dir = os.path.join( results_dir, 'incoming', tag ) + processed_dir = os.path.join( incoming_dir, 'processed' ) + merged_dir = os.path.join( processed_dir, 'merged' ) + if not os.path.exists( incoming_dir ): + os.makedirs( incoming_dir ) + if not os.path.exists( processed_dir ): + os.makedirs( processed_dir ) + if not os.path.exists( merged_dir ): + os.makedirs( merged_dir ) + + if not dont_collect_logs: + ftp_site = 'fx.meta-comm.com' + site_path = '/boost-regression/%s' % tag + + ftp_task( ftp_site, site_path, incoming_dir ) + + unzip_archives_task( incoming_dir, processed_dir, utils.unzip ) + merge_xmls_task( incoming_dir, processed_dir, merged_dir, expected_results_file, failures_markup_file, tag ) + make_links_task( merged_dir + , output_dir + , tag + , run_date + , comment_file + , extended_test_results + , failures_markup_file ) + + + results_xml_path = os.path.join( output_dir, 'extended_test_results.xml' ) + #writer = codecs.open( results_xml_path, 'w', 'utf-8' ) + writer = open( results_xml_path, 'w' ) + merge_processed_test_runs( merged_dir, tag, writer ) + writer.close() + + + make_result_pages( + extended_test_results + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , output_dir + , reports + , warnings + ) + + +def make_result_pages( + extended_test_results + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , output_dir + , reports + , warnings + ): + + utils.log( 'Producing the reports...' ) + __log__ = 1 + + warnings_text = '+'.join( warnings ) + + if comment_file != '': + comment_file = os.path.abspath( comment_file ) + + links = os.path.join( output_dir, 'links.html' ) + + utils.makedirs( os.path.join( output_dir, 'output' ) ) + for mode in ( 'developer', 'user' ): + utils.makedirs( os.path.join( output_dir, mode , 'output' ) ) + + issues = os.path.join( output_dir, 'developer', 'issues.html' ) + if 'i' in reports: + utils.log( ' Making issues list...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'issues_page.xsl' ) + , issues + , { + 'source': tag + , 'run_date': run_date + , 'warnings': warnings_text + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file': failures_markup_file + , 'release': "yes" + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 'd' in reports: + utils.log( ' Making detailed %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl' ) + , os.path.join( output_dir, mode, 'index.html' ) + , { + 'links_file': 'links.html' + , 'mode': mode + , 'source': tag + , 'run_date': run_date + , 'warnings': warnings_text + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 's' in reports: + utils.log( ' Making summary %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl' ) + , os.path.join( output_dir, mode, 'summary.html' ) + , { + 'mode' : mode + , 'source': tag + , 'run_date': run_date + , 'warnings': warnings_text + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 'dr' in reports: + utils.log( ' Making detailed %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl' ) + , os.path.join( output_dir, mode, 'index_release.html' ) + , { + 'links_file': 'links.html' + , 'mode': mode + , 'source': tag + , 'run_date': run_date + , 'warnings': warnings_text + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + , 'release': "yes" + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 'sr' in reports: + utils.log( ' Making summary %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl' ) + , os.path.join( output_dir, mode, 'summary_release.html' ) + , { + 'mode' : mode + , 'source': tag + , 'run_date': run_date + , 'warnings': warnings_text + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + , 'release': 'yes' + } + ) + + if 'e' in reports: + utils.log( ' Generating expected_results ...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'produce_expected_results.xsl' ) + , os.path.join( output_dir, 'expected_results.xml' ) + ) + + if 'n' in reports: + utils.log( ' Making runner comment files...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'runners.xsl' ) + , os.path.join( output_dir, 'runners.html' ) + ) + + shutil.copyfile( + xsl_path( 'html/master.css' ) + , os.path.join( output_dir, 'master.css' ) + ) + + fix_file_names( output_dir ) + + +def fix_file_names( dir ): + """ + The current version of xslproc doesn't correctly handle + spaces. We have to manually go through the + result set and decode encoded spaces (%20). + """ + utils.log( 'Fixing encoded file names...' ) + for root, dirs, files in os.walk( dir ): + for file in files: + if file.find( "%20" ) > -1: + new_name = file.replace( "%20", " " ) + utils.rename( + utils.log + , os.path.join( root, file ) + , os.path.join( root, new_name ) + ) + + +def build_xsl_reports( + locate_root_dir + , tag + , expected_results_file + , failures_markup_file + , comment_file + , results_dir + , result_file_prefix + , dont_collect_logs = 0 + , reports = report_types + , warnings = [] + , user = None + , upload = False + ): + + ( run_date ) = time.strftime( '%Y-%m-%dT%H:%M:%SZ', time.gmtime() ) + + root_paths.append( locate_root_dir ) + root_paths.append( results_dir ) + + bin_boost_dir = os.path.join( locate_root_dir, 'bin', 'boost' ) + + output_dir = os.path.join( results_dir, result_file_prefix ) + utils.makedirs( output_dir ) + + if expected_results_file != '': + expected_results_file = os.path.abspath( expected_results_file ) + else: + expected_results_file = os.path.abspath( map_path( 'empty_expected_results.xml' ) ) + + + extended_test_results = os.path.join( output_dir, 'extended_test_results.xml' ) + + execute_tasks( + tag + , user + , run_date + , comment_file + , results_dir + , output_dir + , reports + , warnings + , extended_test_results + , dont_collect_logs + , expected_results_file + , failures_markup_file + ) + + if upload: + upload_dir = 'regression-logs/' + utils.log( 'Uploading results into "%s" [connecting as %s]...' % ( upload_dir, user ) ) + + archive_name = '%s.tar.gz' % result_file_prefix + utils.tar( + os.path.join( results_dir, result_file_prefix ) + , archive_name + ) + + utils.sourceforge.upload( os.path.join( results_dir, archive_name ), upload_dir, user ) + utils.sourceforge.untar( os.path.join( upload_dir, archive_name ), user, background = True ) + + +def accept_args( args ): + args_spec = [ + 'locate-root=' + , 'tag=' + , 'expected-results=' + , 'failures-markup=' + , 'comment=' + , 'results-dir=' + , 'results-prefix=' + , 'dont-collect-logs' + , 'reports=' + , 'user=' + , 'upload' + , 'help' + ] + + options = { + '--comment': '' + , '--expected-results': '' + , '--failures-markup': '' + , '--reports': string.join( report_types, ',' ) + , '--tag': None + , '--user': None + , 'upload': False + } + + utils.accept_args( args_spec, args, options, usage ) + if not options.has_key( '--results-dir' ): + options[ '--results-dir' ] = options[ '--locate-root' ] + + if not options.has_key( '--results-prefix' ): + options[ '--results-prefix' ] = 'all' + + return ( + options[ '--locate-root' ] + , options[ '--tag' ] + , options[ '--expected-results' ] + , options[ '--failures-markup' ] + , options[ '--comment' ] + , options[ '--results-dir' ] + , options[ '--results-prefix' ] + , options.has_key( '--dont-collect-logs' ) + , options[ '--reports' ].split( ',' ) + , options[ '--user' ] + , options.has_key( '--upload' ) + ) + + +def usage(): + print 'Usage: %s [options]' % os.path.basename( sys.argv[0] ) + print ''' +\t--locate-root the same as --locate-root in compiler_status +\t--tag the tag for the results (i.e. 'trunk') +\t--expected-results the file with the results to be compared with +\t the current run +\t--failures-markup the file with the failures markup +\t--comment an html comment file (will be inserted in the reports) +\t--results-dir the directory containing -links.html, -fail.html +\t files produced by compiler_status (by default the +\t same as specified in --locate-root) +\t--results-prefix the prefix of -links.html, -fail.html +\t files produced by compiler_status +\t--user SourceForge user name for a shell account +\t--upload upload reports to SourceForge + +The following options are useful in debugging: + +\t--dont-collect-logs dont collect the test logs +\t--reports produce only the specified reports +\t us - user summary +\t ds - developer summary +\t ud - user detailed +\t dd - developer detailed +\t l - links +\t p - patches +\t x - extended results file +\t i - issues +\t n - runner comment files +''' + +def main(): + build_xsl_reports( *accept_args( sys.argv[ 1 : ] ) ) + +if __name__ == '__main__': + main() diff --git a/tools/regression/xsl_reports/boostbook_report.py b/tools/regression/xsl_reports/boostbook_report.py new file mode 100644 index 0000000000..6c91a939dd --- /dev/null +++ b/tools/regression/xsl_reports/boostbook_report.py @@ -0,0 +1,179 @@ +import ftplib +import optparse +import os +import time +import urlparse +import utils +import shutil +import sys +import zipfile +import xml.sax.saxutils + + +import utils.libxslt + +def get_date( words ): + date = words[ 5: -1 ] + t = time.localtime() + + month_names = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] + + year = time.localtime()[0] # If year is not secified is it the current year + month = month_names.index( date[0] ) + 1 + day = int( date[1] ) + hours = 0 + minutes = 0 + + if date[2].find( ":" ) != -1: + ( hours, minutes ) = [ int(x) for x in date[2].split( ":" ) ] + else: + # there is no way to get seconds for not current year dates + year = int( date[2] ) + + return ( year, month, day, hours, minutes, 0, 0, 0, 0 ) + +#def check_for_new_upload( target_dir, boostbook_info ): + +def accept_args( args ): + parser = optparse.OptionParser() + parser.add_option( '-t', '--tag', dest='tag', help="the tag for the results (i.e. 'RC_1_34_0')" ) + parser.add_option( '-d', '--destination', dest='destination', help='destination directory' ) + + if len(args) == 0: + parser.print_help() + sys.exit( 1 ) + + (options, args) = parser.parse_args() + if not options.destination: + print '-d is required' + parser.print_help() + sys.exit( 1 ) + return options + +def unzip( archive_path, result_dir ): + utils.log( 'Unpacking %s into %s' % ( archive_path, result_dir ) ) + z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED ) + for f in z.infolist(): + dir = os.path.join( result_dir, os.path.dirname( f.filename ) ) + if not os.path.exists( dir ): + os.makedirs( dir ) + result = open( os.path.join( result_dir, f.filename ), 'wb' ) + result.write( z.read( f.filename ) ) + result.close() + + z.close() + +def boostbook_report( options ): + site = 'fx.meta-comm.com' + site_path = '/boost-regression/%s' % options.tag + + utils.log( 'Opening %s ...' % site ) + f = ftplib.FTP( site ) + f.login() + utils.log( ' cd %s ...' % site_path ) + f.cwd( site_path ) + + utils.log( ' dir' ) + lines = [] + f.dir( lambda x: lines.append( x ) ) + word_lines = [ x.split( None, 8 ) for x in lines ] + boostbook_info = [ ( l[-1], get_date( l ) ) for l in word_lines if l[-1] == "BoostBook.zip" ] + if len( boostbook_info ) > 0: + boostbook_info = boostbook_info[0] + utils.log( 'BoostBook found! (%s)' % ( boostbook_info, ) ) + local_copy = os.path.join( options.destination,'BoostBook-%s.zip' % options.tag ) + + if 1: + if os.path.exists( local_copy ): + utils.log( 'Local copy exists. Checking if it is older than uploaded one...' ) + uploaded_mtime = time.mktime( boostbook_info[1] ) + local_mtime = os.path.getmtime( local_copy ) + utils.log( ' uploaded: %s %s, local: %s %s' % + ( uploaded_mtime + , boostbook_info[1] + , local_mtime + , time.localtime( local_mtime )) ) + modtime = time.localtime( os.path.getmtime( local_copy ) ) + if uploaded_mtime <= local_mtime: + utils.log( 'Local copy is newer: exiting' ) + sys.exit() + + if 1: + temp = os.path.join( options.destination,'BoostBook.zip' ) + result = open( temp, 'wb' ) + f.retrbinary( 'RETR %s' % boostbook_info[0], result.write ) + result.close() + + if os.path.exists( local_copy ): + os.unlink( local_copy ) + os.rename( temp, local_copy ) + m = time.mktime( boostbook_info[1] ) + os.utime( local_copy, ( m, m ) ) + + + docs_name = os.path.splitext( os.path.basename( local_copy ) )[0] + if 1: + unpacked_docs_dir = os.path.join( options.destination, docs_name ) + utils.log( 'Dir %s ' % unpacked_docs_dir ) + if os.path.exists( unpacked_docs_dir ): + utils.log( 'Cleaning up...' ) + shutil.rmtree( unpacked_docs_dir ) + os.makedirs( unpacked_docs_dir ) + + unzip( local_copy, unpacked_docs_dir ) + + utils.system( [ 'cd %s' % unpacked_docs_dir + , 'tar -c -f ../%s.tar.gz -z --exclude=tarball *' % docs_name ] ) + + process_boostbook_build_log( os.path.join( unpacked_docs_dir, 'boostbook.log' ), read_timestamp( unpacked_docs_dir ) ) + utils.libxslt( log + , os.path.abspath( os.path.join( unpacked_docs_dir, 'boostbook.log.xml' ) ) + , os.path.abspath( os.path.join( os.path.dirname( __file__ ), 'xsl', 'v2', 'boostbook_log.xsl' ) ) + , os.path.abspath( os.path.join( unpacked_docs_dir, 'boostbook.log.html' ) ) ) + + +def log( msg ): + print msg + +def process_boostbook_build_log( path, timestamp ): + f = open( path + '.xml', 'w' ) + g = xml.sax.saxutils.XMLGenerator( f ) + lines = open( path ).read().splitlines() + output_lines = [] + result = 'success' + for line in lines: + type = 'output' + if line.startswith( '...failed' ): + type = 'failure' + result='failure' + + if line.startswith( 'runtime error:' ): + type = 'failure' + + if line.startswith( '...skipped' ): + type = 'skipped' + output_lines.append( ( type, line ) ) + + g.startDocument() + g.startElement( 'build', { 'result': result, 'timestamp': timestamp } ) + for line in output_lines: + g.startElement( 'line', { 'type': line[0]} ) + g.characters( line[1] ) + g.endElement( 'line' ) + g.endElement( 'build' ) + g.endDocument() + + +def read_timestamp( docs_directory ): + f = open( os.path.join( docs_directory, 'timestamp' ) ) + try: + return f.readline() + finally: + f.close() + +def main(): + options = accept_args( sys.argv[1:]) + boostbook_report( options ) + +if __name__ == '__main__': + main()
\ No newline at end of file diff --git a/tools/regression/xsl_reports/build_results.sh b/tools/regression/xsl_reports/build_results.sh new file mode 100755 index 0000000000..0682106c5b --- /dev/null +++ b/tools/regression/xsl_reports/build_results.sh @@ -0,0 +1,123 @@ +#!/bin/sh + +#~ Copyright Redshift Software, Inc. 2007 +#~ 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) + +set -e + +build_all() +{ + update_tools ${1} + build_results ${1} + upload_results ${1} +} + +update_tools() +{ + cwd=`pwd` + cd boost + svn up + cd "${cwd}" +} + +report_info() +{ +cat - > comment.html <<HTML +<table style="border-spacing: 0.5em;"> + <tr> + <td style="vertical-align: top;"><tt>uname</tt></td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`uname -a` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;"><tt>uptime</tt></td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`uptime` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;"><tt>vmstat</tt></td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`vmstat` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;"><tt>xsltproc</tt></td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`xsltproc --version` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;"><tt>python</tt></td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`python --version 2>&1` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;">previous run</td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`cat previous.txt` + </pre> + </td> + </tr> + <tr> + <td style="vertical-align: top;">current run</td> + <td> + <pre style="border: 1px solid #666; overflow: auto;"> +`date -u` + </pre> + </td> + </tr> +</table> +HTML + date -u > previous.txt +} + +build_results() +{ + cwd=`pwd` + cd ${1} + root=`pwd` + boost=${cwd}/boost + case ${1} in + trunk) tag=trunk ;; + release) tag=branches/release ;; + esac + report_info + python "${boost}/tools/regression/xsl_reports/boost_wide_report.py" \ + --locate-root="${root}" \ + --tag=${tag} \ + --expected-results="${boost}/status/expected_results.xml" \ + --failures-markup="${boost}/status/explicit-failures-markup.xml" \ + --comment="comment.html" \ + --user="" \ + --reports="i,dd,ds,n" + cd "${cwd}" +} + +upload_results() +{ + cwd=`pwd` + cd ${1}/all + rm -f ../../${1}.zip* + zip -r -9 ../../${1} * -x '*.xml' + cd "${cwd}" + bzip2 -9 ${1}.zip + scp ${1}.zip.bz2 grafik@beta.boost.org:/home/grafik/www.boost.org/testing/incoming/ + ssh grafik@beta.boost.org bunzip2 /home/grafik/www.boost.org/testing/incoming/${1}.zip.bz2 +} + +build_all ${1} diff --git a/tools/regression/xsl_reports/email_maintainers.py b/tools/regression/xsl_reports/email_maintainers.py new file mode 100644 index 0000000000..6787ec4f11 --- /dev/null +++ b/tools/regression/xsl_reports/email_maintainers.py @@ -0,0 +1,631 @@ +# +# Copyright (C) 2005, 2007 The Trustees of Indiana University +# Author: Douglas Gregor +# +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +import re +import smtplib +import os +import time +import string +import datetime +import sys + +report_author = "Douglas Gregor <dgregor@osl.iu.edu>" +boost_dev_list = "Boost Developer List <boost@lists.boost.org>" + +def sorted_keys( dict ): + result = dict.keys() + result.sort() + return result + + +class Platform: + """ + All of the failures for a particular platform. + """ + def __init__(self, name): + self.name = name + self.failures = list() + return + + def addFailure(self, failure): + self.failures.append(failure) + return + + def isBroken(self): + return len(self.failures) > 300 + +class Failure: + """ + A single test case failure in the report. + """ + def __init__(self, test, platform): + self.test = test + self.platform = platform + return + +class Test: + """ + All of the failures for a single test name within a library. + """ + def __init__(self, library, name): + self.library = library + self.name = name + self.failures = list() + return + + def addFailure(self, failure): + self.failures.append(failure) + return + + def numFailures(self): + return len(self.failures) + + def numReportableFailures(self): + """ + Returns the number of failures that we will report to the + maintainers of the library. This doesn't count failures on + broken platforms. + """ + count = 0 + for failure in self.failures: + if not failure.platform.isBroken(): + count += 1 + pass + pass + return count + +class Library: + """ + All of the information about the failures in a single library. + """ + def __init__(self, name): + self.name = name + self.maintainers = list() + self.tests = list() + return + + def addTest(self, test): + """ + Add another test to the library. + """ + self.tests.append(test) + return + + def addMaintainer(self, maintainer): + """ + Add a new maintainer for this library. + """ + self.maintainers.append(maintainer) + return + + def numFailures(self): + count = 0 + for test in self.tests: + count += test.numFailures() + pass + return count + + def numReportableFailures(self): + count = 0 + for test in self.tests: + count += test.numReportableFailures() + pass + return count + +class Maintainer: + """ + Information about the maintainer of a library + """ + def __init__(self, name, email): + self.name = name + self.email = email + self.libraries = list() + return + + def addLibrary(self, library): + self.libraries.append(library) + return + + def composeEmail(self, report): + """ + Composes an e-mail to this maintainer with information about + the failures in his or her libraries, omitting those that come + from "broken" platforms. Returns the e-mail text if a message + needs to be sent, or None otherwise. + """ + + # Determine if we need to send a message to this developer. + requires_message = False + for library in self.libraries: + if library.numReportableFailures() > 0: + requires_message = True + break + + if not requires_message: + return None + + # Build the message header + message = """From: Douglas Gregor <dgregor@osl.iu.edu> +To: """ + message += self.name + ' <' + self.email + '>' + message += """ +Reply-To: boost@lists.boost.org +Subject: Failures in your Boost libraries as of """ + message += str(datetime.date.today()) + " [" + report.branch + "]" + message += """ + +You are receiving this report because one or more of the libraries you +maintain has regression test failures that are not accounted for. +A full version of the report is sent to the Boost developer's mailing +list. + +Detailed report: +""" + message += ' ' + report.url + """ + +There are failures in these libraries you maintain: +""" + + # List the libraries this maintainer is responsible for and + # the number of reportable failures in that library. + for library in self.libraries: + num_failures = library.numReportableFailures() + if num_failures > 0: + message += ' ' + library.name + ' (' + str(num_failures) + ')\n' + pass + pass + + # Provide the details for the failures in each library. + for library in self.libraries: + if library.numReportableFailures() > 0: + message += '\n|' + library.name + '|\n' + for test in library.tests: + if test.numReportableFailures() > 0: + message += ' ' + test.name + ':' + for failure in test.failures: + if not failure.platform.isBroken(): + message += ' ' + failure.platform.name + pass + pass + message += '\n' + pass + pass + pass + pass + + return message + +class Report: + """ + The complete report of all failing test cases. + """ + def __init__(self, branch = 'trunk'): + self.branch = branch + self.date = None + self.url = None + self.libraries = dict() + self.platforms = dict() + self.maintainers = dict() + return + + def getPlatform(self, name): + """ + Retrieve the platform with the given name. + """ + if self.platforms.has_key(name): + return self.platforms[name] + else: + self.platforms[name] = Platform(name) + return self.platforms[name] + + def getMaintainer(self, name, email): + """ + Retrieve the maintainer with the given name and e-mail address. + """ + if self.maintainers.has_key(name): + return self.maintainers[name] + else: + self.maintainers[name] = Maintainer(name, email) + return self.maintainers[name] + + def parseIssuesEmail(self): + """ + Try to parse the issues e-mail file. Returns True if everything was + successful, false otherwise. + """ + # See if we actually got the file + if not os.path.isfile('issues-email.txt'): + return False + + # Determine the set of libraries that have unresolved failures + date_regex = re.compile('Report time: (.*)') + url_regex = re.compile(' (http://.*)') + library_regex = re.compile('\|(.*)\|') + failure_regex = re.compile(' ([^:]*): (.*)') + current_library = None + for line in file('issues-email.txt', 'r'): + # Check for the report time line + m = date_regex.match(line) + if m: + self.date = m.group(1) + continue + + # Check for the detailed report URL + m = url_regex.match(line) + if m: + self.url = m.group(1) + continue + + # Check for a library header + m = library_regex.match(line) + if m: + current_library = Library(m.group(1)) + self.libraries[m.group(1)] = current_library + continue + + # Check for a library test and its failures + m = failure_regex.match(line) + if m: + test = Test(current_library, m.group(1)) + for platform_name in re.split('\s*', m.group(2)): + if platform_name != '': + platform = self.getPlatform(platform_name) + failure = Failure(test, platform) + test.addFailure(failure) + platform.addFailure(failure) + pass + current_library.addTest(test) + continue + pass + + return True + + def getIssuesEmail(self): + """ + Retrieve the issues email from beta.boost.org, trying a few + times in case something wonky is happening. If we can retrieve + the file, calls parseIssuesEmail and return True; otherwise, + return False. + """ + base_url = "http://beta.boost.org/development/tests/" + base_url += self.branch + base_url += "/developer/"; + got_issues = False + + # Ping the server by looking for an HTML file + print "Pinging the server to initiate extraction..." + ping_url = base_url + "issues.html" + os.system('curl -O ' + ping_url) + os.system('rm -f issues.html') + + for x in range(30): + # Update issues-email.txt + url = base_url + "issues-email.txt" + print 'Retrieving issues email from ' + url + os.system('rm -f issues-email.txt') + os.system('curl -O ' + url) + + if self.parseIssuesEmail(): + return True + + print 'Failed to fetch issues email. ' + time.sleep (30) + + return False + + # Parses the file $BOOST_ROOT/libs/maintainers.txt to create a hash + # mapping from the library name to the list of maintainers. + def parseLibraryMaintainersFile(self): + """ + Parse the maintainers file in ../../../libs/maintainers.txt to + collect information about the maintainers of broken libraries. + """ + lib_maintainer_regex = re.compile('(\S+)\s*(.*)') + name_email_regex = re.compile('\s*(\w*(\s*\w+)+)\s*<\s*(\S*(\s*\S+)+)\S*>') + at_regex = re.compile('\s*-\s*at\s*-\s*') + for line in file('../../../libs/maintainers.txt', 'r'): + m = lib_maintainer_regex.match (line) + if m: + libname = m.group(1) + if self.libraries.has_key(m.group(1)): + library = self.libraries[m.group(1)] + for person in re.split('\s*,\s*', m.group(2)): + nmm = name_email_regex.match(person) + if nmm: + name = nmm.group(1) + email = nmm.group(3) + email = at_regex.sub('@', email) + maintainer = self.getMaintainer(name, email) + maintainer.addLibrary(library) + library.addMaintainer(maintainer) + pass + pass + pass + pass + pass + pass + + def numFailures(self): + count = 0 + for library in self.libraries: + count += self.libraries[library].numFailures() + pass + return count + + def numReportableFailures(self): + count = 0 + for library in self.libraries: + count += self.libraries[library].numReportableFailures() + pass + return count + + def composeSummaryEmail(self): + """ + Compose a message to send to the Boost developer's + list. Return the message and return it. + """ + message = """From: Douglas Gregor <dgregor@osl.iu.edu> +To: boost@lists.boost.org +Reply-To: boost@lists.boost.org +Subject: [Report] """ + message += str(self.numFailures()) + " failures on " + branch + message += " (" + str(datetime.date.today()) + ")" + message += """ + +Boost regression test failures +""" + message += "Report time: " + self.date + """ + +This report lists all regression test failures on release platforms. + +Detailed report: +""" + + message += ' ' + self.url + '\n\n' + + if self.numFailures() == 0: + message += "No failures! Yay!\n" + return message + + # List the platforms that are broken + any_broken_platforms = self.numReportableFailures() < self.numFailures() + if any_broken_platforms: + message += """The following platforms have a large number of failures: +""" + for platform in sorted_keys( self.platforms ): + if self.platforms[platform].isBroken(): + message += ' ' + platform + '\n' + + message += '\n' + + # Display the number of failures + message += (str(self.numFailures()) + ' failures in ' + + str(len(self.libraries)) + ' libraries') + if any_broken_platforms: + message += ' (' + str(self.numReportableFailures()) + ' are from non-broken platforms)' + message += '\n' + + # Display the number of failures per library + for k in sorted_keys( self.libraries ): + library = self.libraries[k] + num_failures = library.numFailures() + message += (' ' + library.name + ' (' + + str(library.numReportableFailures())) + if library.numReportableFailures() < num_failures: + message += (' of ' + str(num_failures) + + ' failures are from non-broken platforms') + message += ')\n' + pass + + # If we have any broken platforms, tell the user how we're + # displaying them. + if any_broken_platforms: + message += """ +Test failures marked with a (*) represent tests that failed on +platforms that are considered broken. They are likely caused by +misconfiguration by the regression tester or a failure in a core +library such as Test or Config.""" + message += '\n' + + # Provide the details for the failures in each library. + for k in sorted_keys( self.libraries ): + library = self.libraries[k] + message += '\n|' + library.name + '|\n' + for test in library.tests: + message += ' ' + test.name + ':' + for failure in test.failures: + platform = failure.platform + message += ' ' + platform.name + if platform.isBroken(): + message += '*' + pass + message += '\n' + pass + pass + + return message + +# Send a message to "person" (a maintainer of a library that is +# failing). +# maintainers is the result of get_library_maintainers() +def send_individualized_message (branch, person, maintainers): + # There are several states we could be in: + # 0 Initial state. Eat everything up to the "NNN failures in MMM + # libraries" line + # 1 Suppress output within this library + # 2 Forward output within this library + state = 0 + + failures_in_lib_regex = re.compile('\d+ failur.*\d+ librar') + lib_failures_regex = re.compile(' (\S+) \((\d+)\)') + lib_start_regex = re.compile('\|(\S+)\|') + general_pass_regex = re.compile(' http://') + for line in file('issues-email.txt', 'r'): + if state == 0: + lfm = lib_failures_regex.match(line) + if lfm: + # Pass the line through if the current person is a + # maintainer of this library + if lfm.group(1) in maintainers and person in maintainers[lfm.group(1)]: + message += line + print line, + + elif failures_in_lib_regex.match(line): + message += "\nThere are failures in these libraries you maintain:\n" + elif general_pass_regex.match(line): + message += line + + lib_start = lib_start_regex.match(line) + if lib_start: + if state == 0: + message += '\n' + + if lib_start.group(1) in maintainers and person in maintainers[lib_start.group(1)]: + message += line + state = 2 + else: + state = 1 + else: + if state == 1: + pass + elif state == 2: + message += line + + if '--debug' in sys.argv: + print '-----------------Message text----------------' + print message + else: + print + + if '--send' in sys.argv: + print "Sending..." + smtp = smtplib.SMTP('milliways.osl.iu.edu') + smtp.sendmail(from_addr = 'Douglas Gregor <dgregor@osl.iu.edu>', + to_addrs = person[1], + msg = message) + print "Done." + + +# Send a message to the developer's list +def send_boost_developers_message(branch, maintainers, failing_libraries): + to_line = 'boost@lists.boost.org' + from_line = 'Douglas Gregor <dgregor@osl.iu.edu>' + + message = """From: Douglas Gregor <dgregor@osl.iu.edu> +To: boost@lists.boost.org +Reply-To: boost@lists.boost.org +Subject: Boost regression testing notification (""" + + message += str(datetime.date.today()) + " [" + branch + "]" + message += ")" + + message += """ + +""" + + for line in file('issues-email.txt', 'r'): + # Right before the detailed report, put out a warning message if + # any libraries with failures to not have maintainers listed. + if line.startswith('Detailed report:'): + missing_maintainers = False + for lib in failing_libraries: + if not(lib in maintainers) or maintainers[lib] == list(): + missing_maintainers = True + + if missing_maintainers: + message += """WARNING: The following libraries have failing regression tests but do +not have a maintainer on file. Once a maintainer is found, add an +entry to libs/maintainers.txt to eliminate this message. +""" + + for lib in failing_libraries: + if not(lib in maintainers) or maintainers[lib] == list(): + message += ' ' + lib + '\n' + message += '\n' + + message += line + + if '--send' in sys.argv: + print 'Sending notification email...' + smtp = smtplib.SMTP('milliways.osl.iu.edu') + smtp.sendmail(from_addr = from_line, to_addrs = to_line, msg = message) + print 'Done.' + + if '--debug' in sys.argv: + print "----------Boost developer's message text----------" + print message + +############################################################################### +# Main program # +############################################################################### + +# Parse command-line options +branch = "trunk" +for arg in sys.argv: + if arg.startswith("--branch="): + branch = arg[len("--branch="):] + +report = Report(branch) + +# Try to parse the issues e-mail +if '--no-get' in sys.argv: + okay = report.parseIssuesEmail() +else: + okay = report.getIssuesEmail() + +if not okay: + print 'Aborting.' + if '--send' in sys.argv: + message = """From: Douglas Gregor <dgregor@osl.iu.edu> + To: Douglas Gregor <dgregor@osl.iu.edu> + Reply-To: boost@lists.boost.org + Subject: Regression status script failed on """ + message += str(datetime.date.today()) + " [" + branch + "]" + smtp = smtplib.SMTP('milliways.osl.iu.edu') + smtp.sendmail(from_addr = 'Douglas Gregor <dgregor@osl.iu.edu>', + to_addrs = 'dgregor@osl.iu.edu', + msg = message) + sys.exit(1) + +# Try to parse maintainers information +report.parseLibraryMaintainersFile() + +for maintainer_name in report.maintainers: + maintainer = report.maintainers[maintainer_name] + + email = maintainer.composeEmail(report) + if email: + if '--send' in sys.argv: + print ('Sending notification email to ' + maintainer.name + '...') + smtp = smtplib.SMTP('milliways.osl.iu.edu') + smtp.sendmail(from_addr = report_author, + to_addrs = maintainer.email, + msg = email) + print 'done.\n' + else: + print 'Would send a notification e-mail to',maintainer.name + + if '--debug' in sys.argv: + print ('Message text for ' + maintainer.name + ':\n') + print email + +email = report.composeSummaryEmail() +if '--send' in sys.argv: + print 'Sending summary email to Boost developer list...' + smtp = smtplib.SMTP('milliways.osl.iu.edu') + smtp.sendmail(from_addr = report_author, + to_addrs = boost_dev_list, + msg = email) + print 'done.\n' +if '--debug' in sys.argv: + print 'Message text for summary:\n' + print email + +if not ('--send' in sys.argv): + print 'Chickening out and not sending any e-mail.' + print 'Use --send to actually send e-mail, --debug to see e-mails.' diff --git a/tools/regression/xsl_reports/empty_expected_results.xml b/tools/regression/xsl_reports/empty_expected_results.xml new file mode 100644 index 0000000000..43e72ca406 --- /dev/null +++ b/tools/regression/xsl_reports/empty_expected_results.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> +<expected-failures> +</expected-failures> +</root>
\ No newline at end of file diff --git a/tools/regression/xsl_reports/make_snapshot.py b/tools/regression/xsl_reports/make_snapshot.py new file mode 100644 index 0000000000..b060a10406 --- /dev/null +++ b/tools/regression/xsl_reports/make_snapshot.py @@ -0,0 +1,174 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import tarfile +import shutil +import time +import os.path +import string +import sys +import traceback + + +def retry( f, args, max_attempts=5, sleep_secs=10 ): + for attempts in range( max_attempts, -1, -1 ): + try: + return f( *args ) + except Exception, msg: + utils.log( '%s failed with message "%s"' % ( f.__name__, msg ) ) + if attempts == 0: + utils.log( 'Giving up.' ) + raise + + utils.log( 'Retrying (%d more attempts).' % attempts ) + time.sleep( sleep_secs ) + + +def rmtree( path ): + if os.path.exists( path ): + if sys.platform == 'win32': + os.system( 'del /f /s /q "%s" >nul 2>&1' % path ) + shutil.rmtree( path ) + else: + os.system( 'rm -f -r "%s"' % path ) + + +def svn_command( command ): + utils.log( 'Executing SVN command "%s"' % command ) + rc = os.system( command ) + if rc != 0: + raise Exception( 'SVN command "%s" failed with code %d' % ( command, rc ) ) + + +def svn_export( sources_dir, user, tag ): + if user is None or user == 'anonymous': + command = 'svn export --force http://svn.boost.org/svn/boost/%s %s' % ( tag, sources_dir ) + else: + command = 'svn export --force --non-interactive --username=%s https://svn.boost.org/svn/boost/%s %s' \ + % ( user, tag, sources_dir ) + + os.chdir( os.path.basename( sources_dir ) ) + retry( + svn_command + , ( command, ) + ) + + +def make_tarball( + working_dir + , tag + , user + , site_dir + ): + timestamp = time.time() + timestamp_suffix = time.strftime( '%y-%m-%d-%H%M', time.gmtime( timestamp ) ) + + tag_suffix = tag.split( '/' )[-1] + sources_dir = os.path.join( + working_dir + , 'boost-%s-%s' % ( tag_suffix, timestamp_suffix ) + ) + + if os.path.exists( sources_dir ): + utils.log( 'Directory "%s" already exists, cleaning it up...' % sources_dir ) + rmtree( sources_dir ) + + try: + os.mkdir( sources_dir ) + utils.log( 'Exporting files from SVN...' ) + svn_export( sources_dir, user, tag ) + except: + utils.log( 'Cleaning up...' ) + rmtree( sources_dir ) + raise + + + tarball_name = 'boost-%s.tar.bz2' % tag_suffix + tarball_path = os.path.join( working_dir, tarball_name ) + + utils.log( 'Archiving "%s" to "%s"...' % ( sources_dir, tarball_path ) ) + tar = tarfile.open( tarball_path, 'w|bz2' ) + tar.posix = False # see http://tinyurl.com/4ebd8 + + tar.add( sources_dir, os.path.basename( sources_dir ) ) + tar.close() + + tarball_timestamp_path = os.path.join( working_dir, 'boost-%s.timestamp' % tag_suffix ) + + utils.log( 'Writing timestamp into "%s"...' % tarball_timestamp_path ) + timestamp_file = open( tarball_timestamp_path, 'w' ) + timestamp_file.write( '%f' % timestamp ) + timestamp_file.close() + + md5sum_path = os.path.join( working_dir, 'boost-%s.md5' % tag_suffix ) + utils.log( 'Writing md5 checksum into "%s"...' % md5sum_path ) + old_dir = os.getcwd() + os.chdir( os.path.dirname( tarball_path ) ) + os.system( 'md5sum -b "%s" >"%s"' % ( os.path.basename( tarball_path ), md5sum_path ) ) + os.chdir( old_dir ) + + if site_dir is not None: + utils.log( 'Moving "%s" to the site location "%s"...' % ( tarball_name, site_dir ) ) + temp_site_dir = os.path.join( site_dir, 'temp' ) + if not os.path.exists( temp_site_dir ): + os.mkdir( temp_site_dir ) + + shutil.move( tarball_path, temp_site_dir ) + shutil.move( os.path.join( temp_site_dir, tarball_name ), site_dir ) + shutil.move( tarball_timestamp_path, site_dir ) + shutil.move( md5sum_path, site_dir ) + utils.log( 'Removing "%s"...' % sources_dir ) + rmtree( sources_dir ) + + +def accept_args( args ): + args_spec = [ + 'working-dir=' + , 'tag=' + , 'user=' + , 'site-dir=' + , 'mail=' + , 'help' + ] + + options = { + '--tag': 'trunk' + , '--user': None + , '--site-dir': None + } + + utils.accept_args( args_spec, args, options, usage ) + + return ( + options[ '--working-dir' ] + , options[ '--tag' ] + , options[ '--user' ] + , options[ '--site-dir' ] + ) + + +def usage(): + print 'Usage: %s [options]' % os.path.basename( sys.argv[0] ) + print ''' +\t--working-dir working directory +\t--tag snapshot tag (i.e. 'trunk') +\t--user Boost SVN user ID (optional) +\t--site-dir site directory to copy the snapshot to (optional) +''' + +def main(): + make_tarball( *accept_args( sys.argv[ 1: ] ) ) + +if __name__ != '__main__': import utils +else: + # in absense of relative import... + xsl_path = os.path.abspath( os.path.dirname( sys.argv[ 0 ] ) ) + while os.path.basename( xsl_path ) != 'xsl_reports': xsl_path = os.path.dirname( xsl_path ) + sys.path.append( xsl_path ) + + import utils + main() diff --git a/tools/regression/xsl_reports/report.py b/tools/regression/xsl_reports/report.py new file mode 100644 index 0000000000..75ee1b31bc --- /dev/null +++ b/tools/regression/xsl_reports/report.py @@ -0,0 +1,371 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2004 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import shutil +import os.path +import os +import string +import time +import sys + +import utils +import runner + + +report_types = [ 'us', 'ds', 'ud', 'dd', 'l', 'p', 'x', 'i', 'n', 'ddr', 'dsr' ] + +if __name__ == '__main__': + run_dir = os.path.abspath( os.path.dirname( sys.argv[ 0 ] ) ) +else: + run_dir = os.path.abspath( os.path.dirname( sys.modules[ __name__ ].__file__ ) ) + + +def map_path( path ): + return os.path.join( run_dir, path ) + + +def xsl_path( xsl_file_name, v2 = 0 ): + if v2: + return map_path( os.path.join( 'xsl/v2', xsl_file_name ) ) + else: + return map_path( os.path.join( 'xsl', xsl_file_name ) ) + + +def make_result_pages( + test_results_file + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , results_dir + , result_prefix + , reports + , v2 + ): + + utils.log( 'Producing the reports...' ) + __log__ = 1 + + output_dir = os.path.join( results_dir, result_prefix ) + utils.makedirs( output_dir ) + + if comment_file != '': + comment_file = os.path.abspath( comment_file ) + + if expected_results_file != '': + expected_results_file = os.path.abspath( expected_results_file ) + else: + expected_results_file = os.path.abspath( map_path( 'empty_expected_results.xml' ) ) + + + extended_test_results = os.path.join( output_dir, 'extended_test_results.xml' ) + if 'x' in reports: + utils.log( ' Merging with expected results...' ) + utils.libxslt( + utils.log + , test_results_file + , xsl_path( 'add_expected_results.xsl', v2 ) + , extended_test_results + , { 'expected_results_file': expected_results_file + , 'failures_markup_file' : failures_markup_file + , 'source' : tag } + ) + + links = os.path.join( output_dir, 'links.html' ) + + utils.makedirs( os.path.join( output_dir, 'output' ) ) + for mode in ( 'developer', 'user' ): + utils.makedirs( os.path.join( output_dir, mode , 'output' ) ) + + if 'l' in reports: + utils.log( ' Making test output files...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'links_page.xsl', v2 ) + , links + , { + 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file': failures_markup_file + } + ) + + + issues = os.path.join( output_dir, 'developer', 'issues.html' ) + if 'i' in reports: + utils.log( ' Making issues list...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'issues_page.xsl', v2 ) + , issues + , { + 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file': failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 'd' in reports: + utils.log( ' Making detailed %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl', v2 ) + , os.path.join( output_dir, mode, 'index.html' ) + , { + 'links_file': 'links.html' + , 'mode': mode + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 's' in reports: + utils.log( ' Making summary %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl', v2 ) + , os.path.join( output_dir, mode, 'summary.html' ) + , { + 'mode' : mode + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + if v2 and "ddr" in reports: + utils.log( ' Making detailed %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl', v2 ) + , os.path.join( output_dir, "developer", 'index_release.html' ) + , { + 'links_file': 'links.html' + , 'mode': "developer" + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + , 'release': "yes" + } + ) + + if v2 and "dsr" in reports: + utils.log( ' Making summary %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl', v2 ) + , os.path.join( output_dir, "developer", 'summary_release.html' ) + , { + 'mode' : "developer" + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + , 'release': 'yes' + } + ) + + if 'e' in reports: + utils.log( ' Generating expected_results ...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'produce_expected_results.xsl', v2 ) + , os.path.join( output_dir, 'expected_results.xml' ) + ) + + if v2 and 'n' in reports: + utils.log( ' Making runner comment files...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'runners.xsl', v2 ) + , os.path.join( output_dir, 'runners.html' ) + ) + + shutil.copyfile( + xsl_path( 'html/master.css', v2 ) + , os.path.join( output_dir, 'master.css' ) + ) + + +def build_xsl_reports( + locate_root_dir + , tag + , expected_results_file + , failures_markup_file + , comment_file + , results_dir + , result_file_prefix + , dont_collect_logs = 0 + , reports = report_types + , v2 = 0 + , user = None + , upload = False + ): + + ( run_date ) = time.strftime( '%Y-%m-%dT%H:%M:%SZ', time.gmtime() ) + + test_results_file = os.path.join( results_dir, 'test_results.xml' ) + bin_boost_dir = os.path.join( locate_root_dir, 'bin', 'boost' ) + + if v2: + import merger + merger.merge_logs( + tag + , user + , results_dir + , test_results_file + , dont_collect_logs + ) + else: + utils.log( ' dont_collect_logs: %s' % dont_collect_logs ) + if not dont_collect_logs: + f = open( test_results_file, 'w+' ) + f.write( '<tests>\n' ) + runner.collect_test_logs( [ bin_boost_dir ], f ) + f.write( '</tests>\n' ) + f.close() + + make_result_pages( + test_results_file + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , results_dir + , result_file_prefix + , reports + , v2 + ) + + if v2 and upload: + upload_dir = 'regression-logs/' + utils.log( 'Uploading v2 results into "%s" [connecting as %s]...' % ( upload_dir, user ) ) + + archive_name = '%s.tar.gz' % result_file_prefix + utils.tar( + os.path.join( results_dir, result_file_prefix ) + , archive_name + ) + + utils.sourceforge.upload( os.path.join( results_dir, archive_name ), upload_dir, user ) + utils.sourceforge.untar( os.path.join( upload_dir, archive_name ), user, background = True ) + + +def accept_args( args ): + args_spec = [ + 'locate-root=' + , 'tag=' + , 'expected-results=' + , 'failures-markup=' + , 'comment=' + , 'results-dir=' + , 'results-prefix=' + , 'dont-collect-logs' + , 'reports=' + , 'v2' + , 'user=' + , 'upload' + , 'help' + ] + + options = { + '--comment': '' + , '--expected-results': '' + , '--failures-markup': '' + , '--reports': string.join( report_types, ',' ) + , '--tag': None + , '--user': None + , 'upload': False + } + + utils.accept_args( args_spec, args, options, usage ) + if not options.has_key( '--results-dir' ): + options[ '--results-dir' ] = options[ '--locate-root' ] + + if not options.has_key( '--results-prefix' ): + if options.has_key( '--v2' ): + options[ '--results-prefix' ] = 'all' + else: + options[ '--results-prefix' ] = '' + + return ( + options[ '--locate-root' ] + , options[ '--tag' ] + , options[ '--expected-results' ] + , options[ '--failures-markup' ] + , options[ '--comment' ] + , options[ '--results-dir' ] + , options[ '--results-prefix' ] + , options.has_key( '--dont-collect-logs' ) + , options[ '--reports' ].split( ',' ) + , options.has_key( '--v2' ) + , options[ '--user' ] + , options.has_key( '--upload' ) + ) + + +def usage(): + print 'Usage: %s [options]' % os.path.basename( sys.argv[0] ) + print ''' +\t--locate-root the same as --locate-root in compiler_status +\t--tag the tag for the results (i.e. 'CVS-HEAD') +\t--expected-results the file with the results to be compared with +\t the current run +\t--failures-markup the file with the failures markup +\t--comment an html comment file (will be inserted in the reports) +\t--results-dir the directory containing -links.html, -fail.html +\t files produced by compiler_status (by default the +\t same as specified in --locate-root) +\t--results-prefix the prefix of -links.html, -fail.html +\t files produced by compiler_status +\t--v2 v2 reports (combine multiple runners results into a +\t single set of reports) + +The following options are valid only for v2 reports: + +\t--user SourceForge user name for a shell account +\t--upload upload v2 reports to SourceForge + +The following options are useful in debugging: + +\t--dont-collect-logs dont collect the test logs +\t--reports produce only the specified reports +\t us - user summary +\t ds - developer summary +\t ud - user detailed +\t dd - developer detailed +\t l - links +\t p - patches +\t x - extended results file +\t i - issues +''' + +def main(): + build_xsl_reports( *accept_args( sys.argv[ 1 : ] ) ) + +if __name__ == '__main__': + main() diff --git a/tools/regression/xsl_reports/test/common.py b/tools/regression/xsl_reports/test/common.py new file mode 100644 index 0000000000..cd9e5729a2 --- /dev/null +++ b/tools/regression/xsl_reports/test/common.py @@ -0,0 +1,165 @@ +import xml.sax.saxutils +import time + +def make_test_name( library_idx, test_idx ): + return "test_%02d_%02d" % ( library_idx, test_idx ) + +def make_library_name( library_idx ): + if library_idx % 4 in ( 0, 1 ): + return "library_%02d/%02d" % ( int( library_idx / 4 ) * 4, library_idx % 4 ) + else: + return "library_%02d" % library_idx + +def make_toolset_name( toolset_idx ): + return "toolset_%02d" % toolset_idx + +def make_library_target_directory( library_idx, toolset_idx, variant = None ): + base = "lib/%s/%s" % ( make_library_name( library_idx ) + , make_toolset_name( toolset_idx ) ) + if variant is not None: + return "%s/%s" % ( base, variant ) + else: + return base + +def make_test_target_directory( library_idx, toolset_idx, test_name, variant ): + base = "%s/%s/%s" % ( make_library_name( library_idx ) + , make_toolset_name( toolset_idx ) + , test_name ) + if variant is not None: + return "%s/%s" % ( base, variant ) + else: + return base + +def format_timestamp( timestamp ): + return time.strftime( "%Y-%m-%dT%H:%M:%SZ", timestamp ) + +def make_test_log( xml_generator + , library_idx + , toolset_idx + , test_name + , test_type + , test_result + , show_run_output + , variant ): + library = make_library_name( library_idx ) + toolset_name = make_toolset_name( toolset_idx ) + + target_directory = "" + if test_type != "lib": + target_directory = make_test_target_directory( library_idx, toolset_idx, test_name, variant ) + else: + target_directory = make_library_target_directory( library_idx, toolset_idx, variant ) + + xml_generator.startElement( "test-log", { "library": library + , "test-name": test_name + , "toolset": toolset_name + , "test-type": test_type + , "test-program": "some_program" + , "target-directory": target_directory + , "show-run-output": show_run_output + } ) + + if test_type != "lib": + + if test_result == "success" and ( toolset_idx + 1 ) % 4: + xml_generator.startElement( "compile", { "result": "success" } ); + xml_generator.characters( "Compiling in %s" % target_directory ) + xml_generator.endElement( "compile" ) + + if test_type.find( "link" ) == 0 or test_type.find( "run" ) == 0 and toolset_idx % 4: + xml_generator.startElement( "lib", { "result": test_result } ); + xml_generator.characters( make_library_target_directory( library_idx, toolset_idx ) ) + xml_generator.endElement( "lib" ) + + xml_generator.startElement( "link", { "result": "success" } ); + xml_generator.characters( "Linking in %s" % target_directory ) + xml_generator.endElement( "link" ) + + if test_type.find( "run" ) == 0 and ( toolset_idx + 2 ) % 4: + xml_generator.startElement( "run", { "result": test_result } ); + xml_generator.characters( "Running in %s" % target_directory ) + xml_generator.endElement( "run" ) + + else: + xml_generator.startElement( "compile", { "result": test_result } ); + xml_generator.characters( "Compiling in %s" % make_library_target_directory( library_idx, toolset_idx ) ) + xml_generator.endElement( "compile" ) + + + + xml_generator.endElement( "test-log" ) + + +def make_expicit_failure_markup( num_of_libs, num_of_toolsets, num_of_tests ): + g = xml.sax.saxutils.XMLGenerator( open( "explicit-failures-markup.xml", "w" ), "utf-8" ) + g.startDocument() + g.startElement( "explicit-failures-markup", {} ); + + # required toolsets + for i_toolset in range( 0, num_of_toolsets ): + if i_toolset < 2: + g.startElement( "mark-toolset", { "name": "toolset_%02d" % i_toolset, "status":"required"} ) + g.endElement( "mark-toolset" ) + + for i_library in range( 0, num_of_libs ): + g.startElement( "library", { "name": make_library_name( i_library ) } ) + if i_library % 4 == 0: + g.startElement( "mark-unusable", {} ) + for i_toolset in range( 0, num_of_toolsets ): + if i_toolset % 2 == 1: + g.startElement( "toolset", { "name": make_toolset_name( i_toolset ) } ) + g.endElement( "toolset" ) + g.startElement( "note", { "author": u"T. T\xe8st" } ) + g.characters( "Test note" ) + g.endElement( "note" ) + g.endElement( "mark-unusable" ) + + for i_test in range( 0, num_of_tests ): + + category = 0 + explicitly_marked_failure = 0 + unresearched = 0 + + if i_test % 2 == 0: + category = i_test % 3 + + if i_test % 3 == 0: + explicitly_marked_failure = 1 + if i_test % 2 == 0: + unresearched = 1 + + if category or explicitly_marked_failure: + test_attrs = { "name": make_test_name( i_library, i_test ) } + if category: + test_attrs[ "category" ] = "Category %s" % category + g.startElement( "test", test_attrs ) + if explicitly_marked_failure: + failure_attrs = {} + if unresearched: failure_attrs[ "reason" ] = "not-researched" + + g.startElement( "mark-failure", failure_attrs ) + + g.startElement( "toolset", { "name": make_toolset_name( 1 ) } ) + g.endElement( "toolset" ) + g.startElement( "toolset", { "name": make_toolset_name( 0 ) } ) + g.endElement( "toolset" ) + g.startElement( "toolset", { "name": make_toolset_name( 2 ) } ) + g.endElement( "toolset" ) + + g.startElement( "note", { "author": u"V. Ann\xf3tated" } ) + g.characters( "Some thoughtful note" ) + g.endElement( "note" ) + + g.endElement( "mark-failure" ) + + g.endElement( "test" ); + g.endElement( "library" ) + + + g.endElement( "explicit-failures-markup" ) + g.endDocument() + + +def make_expected_results( num_of_libs, num_of_toolsets, num_of_tests ): + pass + diff --git a/tools/regression/xsl_reports/test/expected_results.xml b/tools/regression/xsl_reports/test/expected_results.xml new file mode 100644 index 0000000000..d9fdd26cc9 --- /dev/null +++ b/tools/regression/xsl_reports/test/expected_results.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?> +<expected-failures> +</expected-failures> diff --git a/tools/regression/xsl_reports/test/generate_test_results.py b/tools/regression/xsl_reports/test/generate_test_results.py new file mode 100644 index 0000000000..ba6a7ee39f --- /dev/null +++ b/tools/regression/xsl_reports/test/generate_test_results.py @@ -0,0 +1,160 @@ +# +# Generates test test results for testing of boost_wide_report.py +# +import common +import xml.sax.saxutils + +import os +import time + +num_of_libs = 5 +num_of_runners = 5 +num_of_toolsets = 3 +num_of_tests = 10 + +results_directory = "results/incoming/CVS-HEAD/processed" + + +# Generated results follow the rules: +# +# * odd runners are testing on Win32, even runners are testin on Unix +# * the third toolset has 2 variants +# + +# Generated expected markup: +# +# * First two toolset are required +# * Every fourth library is unusable on event toolsets +# * Last two tests are corner-ase tests +# * Every 4th test is explicitly marked up as expected-failure + + +def library_build_failed( library_idx ): + return library_idx % 2 + +def test_run_source( runner_idx ): + if runner_idx % 2: return "tarball" + else: return "cvs head" + +def test_run_type( runner_idx ): + if runner_idx % 2: return "incremental" + else: return "full" + + +def test_type( i ): + types = [ "compile", "compile_fail", "link", "link_fail", "run", "run_fail", "run_pyd" ] + return types[ i % len( types) ] + + +def make_test_results(): + if not os.path.exists( results_directory ): + os.makedirs( results_directory ) + + for i_runner in range( 0, num_of_runners ): + runner_id = "runner %02d" % i_runner + g = xml.sax.saxutils.XMLGenerator( open( os.path.join( results_directory, runner_id + ".xml" ), "w" ), "utf-8" ) + g.startDocument() + if i_runner % 2: + platform = "Win32" + else: + platform = "Unix" + + g.startElement( "test-run", { "platform": platform + , "runner": runner_id + , "timestamp": common.format_timestamp( + time.gmtime( time.time() - i_runner * 24*60*60 ) + ) + , "revision": '%d' % ( 7000 + i_runner ) + , "source": test_run_source( i_runner ) + , "run-type": test_run_type( i_runner ) + } ) + + g.startElement( "comment", {} ) + g.characters( "<b>Runner</b> is who <i>running</i> does." ) + g.endElement( "comment" ) + + for i_lib in range( 0, num_of_libs ): + for i_toolset in range( num_of_toolsets ): + if library_build_failed( i_lib ): test_result = "fail" + else: test_result = "success" + + common.make_test_log( xml_generator = g + , library_idx = i_lib + , toolset_idx = i_toolset + , test_name = "" + , test_type = "lib" + , test_result = test_result + , show_run_output = "false" + , variant = None ) + + + for i_lib in range( 0, num_of_libs ): + library_name = "library_%02d" % i_lib + if num_of_runners - 1 == i_runner and i_lib % 2: + continue + + for i_toolset in range( num_of_toolsets ): + toolset_name = "toolset %02d" % ( i_toolset ) + + if num_of_runners - 1 == i_runner and i_toolset % 2: + continue + + for i_test in range( num_of_tests ): + test_name = "test_%02d_%02d" % ( i_lib, i_test ) + test_result = "" + show_run_output = "false" + + if num_of_runners - 1 == i_runner and i_test % 2: + continue + + if i_runner % 2: test_result = "success" + else: test_result = "fail" + + if i_runner == 1 and i_toolset == 2 and i_test % 6 == 0: + test_result = "fail" + + if test_result == "success" and ( 0 == i_test % 5 ): + show_run_output = "true" + + if i_toolset == 2: + variants = [ "static-lib", "shared-lib" ] + else: + variants = [ None ] + + for variant in variants: + common.make_test_log( xml_generator = g + , library_idx = i_lib + , toolset_idx = i_toolset + , test_name = test_name + , test_type = test_type( i_test ) + , test_result = test_result + , show_run_output = show_run_output + , variant = variant ) + g.endElement( "test-run" ) + g.endDocument() + + + +## <test-log library="algorithm" test-name="container" test-type="run" test-program="libs/algorithm/string/test/container_test.cpp" target-directory="bin/boost/libs/algorithm/string/test/container.test/borland-5.6.4/debug" toolset="borland-5.6.4" show-run-output="false"> +## <compile result="fail" timestamp="2004-06-29 17:02:27 UTC"> + +## "C:\Progra~1\Borland\CBuilder6\bin\bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -DBOOST_ALL_NO_LIB=1 -w-8001 -I"C:\Users\Administrator\boost\main\results\bin\boost\libs\algorithm\string\test" -I"C:\Users\Administrator\boost\main\boost" -I"C:\Progra~1\Borland\CBuilder6\include" -o"C:\Users\Administrator\boost\main\results\bin\boost\libs\algorithm\string\test\container.test\borland-5.6.4\debug\container_test.obj" "..\libs\algorithm\string\test\container_test.cpp" + +## ..\libs\algorithm\string\test\container_test.cpp: +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_result.cpp 323: template argument _InputIter passed to 'for_each' is a output iterator: input iterator required in function unit_test_result::~unit_test_result() +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_suite.cpp 63: template argument _InputIter passed to 'find_if' is a output iterator: input iterator required in function test_case::Impl::check_dependencies() +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_suite.cpp 204: template argument _InputIter passed to 'for_each' is a output iterator: input iterator required in function test_suite::~test_suite() +## Error E2401 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 45: Invalid template argument list +## Error E2040 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 46: Declaration terminated incorrectly +## Error E2090 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 277: Qualifier 'algorithm' is not a class or namespace name +## Error E2272 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 277: Identifier expected +## Error E2090 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 278: Qualifier 'algorithm' is not a class or namespace name +## Error E2228 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 278: Too many error or warning messages +## *** 6 errors in Compile *** +## </compile> +## </test-log> + + +make_test_results() +common.make_expicit_failure_markup( num_of_libs, num_of_toolsets, num_of_tests ) + diff --git a/tools/regression/xsl_reports/test/generate_test_results_v1.py b/tools/regression/xsl_reports/test/generate_test_results_v1.py new file mode 100644 index 0000000000..0f7f8f796a --- /dev/null +++ b/tools/regression/xsl_reports/test/generate_test_results_v1.py @@ -0,0 +1,85 @@ +import xml.sax.saxutils + +import common + +import os +import time + +num_of_libs = 2 +num_of_toolsets = 3 +num_of_tests = 10 + +tag = "1_30_0" + +def library_build_failed( library_idx ): + return library_idx % 2 + +def make_test_results(): + if not os.path.exists( tag ): + os.makedirs( tag ) + + g = xml.sax.saxutils.XMLGenerator( open( os.path.join( tag, "test.xml" ), "w" ) ) + platform = "Win32" + g.startElement( "test-results", {} ) + + for i_lib in range( 0, num_of_libs ): + for i_toolset in range( num_of_toolsets ): + if library_build_failed( i_lib ): test_result = "fail" + else: test_result = "success" + + common.make_test_log( xml_generator = g + , library_idx = i_lib + , toolset_idx = i_toolset + , test_name = "" + , test_type = "lib" + , test_result = test_result + , show_run_output = "false" ) + + + for i_lib in range( 0, num_of_libs ): + library_name = "library_%02d" % i_lib + + for i_toolset in range( num_of_toolsets ): + toolset_name = "toolset_%02d" % ( i_toolset ) + + for i_test in range( num_of_tests ): + test_name = "test_%02d_%02d" % ( i_lib, i_test ) + test_result = "" + test_type = "run" + show_run_output = "false" + + if i_lib % 2: test_result = "success" + else: test_result = "fail" + + if test_result == "success" and ( 0 == i_test % 5 ): + show_run_output = "true" + + common.make_test_log( g, i_lib, i_toolset, test_name, test_type, test_result, show_run_output ) + + g.endElement( "test-results" ) + + + + +## <test-log library="algorithm" test-name="container" test-type="run" test-program="libs/algorithm/string/test/container_test.cpp" target-directory="bin/boost/libs/algorithm/string/test/container.test/borland-5.6.4/debug" toolset="borland-5.6.4" show-run-output="false"> +## <compile result="fail" timestamp="2004-06-29 17:02:27 UTC"> + +## "C:\Progra~1\Borland\CBuilder6\bin\bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -DBOOST_ALL_NO_LIB=1 -w-8001 -I"C:\Users\Administrator\boost\main\results\bin\boost\libs\algorithm\string\test" -I"C:\Users\Administrator\boost\main\boost" -I"C:\Progra~1\Borland\CBuilder6\include" -o"C:\Users\Administrator\boost\main\results\bin\boost\libs\algorithm\string\test\container.test\borland-5.6.4\debug\container_test.obj" "..\libs\algorithm\string\test\container_test.cpp" + +## ..\libs\algorithm\string\test\container_test.cpp: +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_result.cpp 323: template argument _InputIter passed to 'for_each' is a output iterator: input iterator required in function unit_test_result::~unit_test_result() +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_suite.cpp 63: template argument _InputIter passed to 'find_if' is a output iterator: input iterator required in function test_case::Impl::check_dependencies() +## Warning W8091 C:\Users\Administrator\boost\main\boost\libs/test/src/unit_test_suite.cpp 204: template argument _InputIter passed to 'for_each' is a output iterator: input iterator required in function test_suite::~test_suite() +## Error E2401 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 45: Invalid template argument list +## Error E2040 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 46: Declaration terminated incorrectly +## Error E2090 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 277: Qualifier 'algorithm' is not a class or namespace name +## Error E2272 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 277: Identifier expected +## Error E2090 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 278: Qualifier 'algorithm' is not a class or namespace name +## Error E2228 C:\Users\Administrator\boost\main\boost\boost/algorithm/string/finder.hpp 278: Too many error or warning messages +## *** 6 errors in Compile *** +## </compile> +## </test-log> + + +make_test_results( ) +common.make_expicit_failure_markup( num_of_libs, num_of_toolsets, num_of_tests ) diff --git a/tools/regression/xsl_reports/test/restrict_to_library.xsl b/tools/regression/xsl_reports/test/restrict_to_library.xsl new file mode 100644 index 0000000000..8de3354d84 --- /dev/null +++ b/tools/regression/xsl_reports/test/restrict_to_library.xsl @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + + <xsl:output method="xml" encoding="ascii"/> + <xsl:param name="library"/> + + + <xsl:template match="/"> + <xsl:message> + <xsl:value-of select="$library"/> + </xsl:message> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="*"> + <xsl:copy> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates /> + </xsl:copy> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:if test="@library=$library"> + <xsl:copy> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates/> + </xsl:copy> + </xsl:if> + </xsl:template> + + <xsl:template match="@*"> + <xsl:copy-of select="."/> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/test/run_notes_regression.py b/tools/regression/xsl_reports/test/run_notes_regression.py new file mode 100644 index 0000000000..884dcfe9db --- /dev/null +++ b/tools/regression/xsl_reports/test/run_notes_regression.py @@ -0,0 +1,32 @@ +import sys + +sys.path.append( '..' ) + +import os + +import report +import merger +import utils + + +tag = "1_32_0" + +# utils.makedirs( "results" ) + +all_xml_file = "a.xml" + +report.make_result_pages( + test_results_file = os.path.abspath( all_xml_file ) + , expected_results_file = "" + , failures_markup_file = os.path.abspath( "../../../../status/explicit-failures-markup.xml" ) + , tag = tag + , run_date = "Today date" + , comment_file = os.path.abspath( "comment.html" ) + , results_dir = "results" + , result_prefix = "" + , reports = [ "dd" ] + , v2 = 1 + ) + + + diff --git a/tools/regression/xsl_reports/test/run_v1.py b/tools/regression/xsl_reports/test/run_v1.py new file mode 100644 index 0000000000..a995ed635d --- /dev/null +++ b/tools/regression/xsl_reports/test/run_v1.py @@ -0,0 +1,35 @@ +import sys + +sys.path.append( '..' ) + +import os + +import report +import merger +import utils + + +tag = "1_30_0" + +utils.makedirs( "results" ) + +all_xml_file = "results/all.xml" +all_xml_writer = open( all_xml_file, "w" ) +merger.merge_test_runs( ".", tag, all_xml_writer ) +all_xml_writer.close() + +report.make_result_pages( + test_results_file = os.path.abspath( all_xml_file ) + , expected_results_file = "" + , failures_markup_file = os.path.abspath( "explicit-failures-markup.xml" ) + , source = tag + , run_date = "Today date" + , comment_file = os.path.abspath( "comment.html" ) + , results_dir = os.path.abspath( "results" ) + , result_prefix = "" + , reports = [ "l", "dd" ] + , v2 = 0 + ) + + + diff --git a/tools/regression/xsl_reports/test/test.py b/tools/regression/xsl_reports/test/test.py new file mode 100644 index 0000000000..1378586c1d --- /dev/null +++ b/tools/regression/xsl_reports/test/test.py @@ -0,0 +1,34 @@ +import sys + +sys.path.append( '..' ) + +import os + +import boost_wide_report +import common +import utils +import shutil +import time + +tag = "CVS-HEAD" + +if os.path.exists( "results/incoming/CVS-HEAD/processed/merged" ): + shutil.rmtree( "results/incoming/CVS-HEAD/processed/merged" ) + +boost_wide_report.ftp_task = lambda ftp_site, site_path, incoming_dir: 1 +boost_wide_report.unzip_archives_task = lambda incoming_dir, processed_dir, unzip: 1 + +boost_wide_report.execute_tasks( + tag = tag + , user = None + , run_date = common.format_timestamp( time.gmtime() ) + , comment_file = os.path.abspath( "comment.html" ) + , results_dir = os.path.abspath( "results" ) + , output_dir = os.path.abspath( "output" ) + , reports = [ "i", "x", "ds", "dd", "dsr", "ddr", "us", "ud", "usr", "udr" ] + , warnings = [ 'Warning text 1', 'Warning text 2' ] + , extended_test_results = os.path.abspath( "output/extended_test_results.xml" ) + , dont_collect_logs = 1 + , expected_results_file = os.path.abspath( "expected_results.xml" ) + , failures_markup_file = os.path.abspath( "explicit-failures-markup.xml" ) + ) diff --git a/tools/regression/xsl_reports/test/test_boost_wide_report.py b/tools/regression/xsl_reports/test/test_boost_wide_report.py new file mode 100644 index 0000000000..f7d52fc2ff --- /dev/null +++ b/tools/regression/xsl_reports/test/test_boost_wide_report.py @@ -0,0 +1,36 @@ +import unittest +import sys +import time + +sys.path.append( ".." ) + +import boost_wide_report + +class test_boost_wide_report(unittest.TestCase): + def test_diff( self ): + test_cases = [ + ( [] + , [] + , ( [], [] ) ) + , ( [ boost_wide_report.file_info( "a", 1, time.localtime( 0 ) ) ] + , [] + , ( [ "a" ], [] ) ) + , ( [] + , [ boost_wide_report.file_info( "a", 1, time.localtime( 0 ) ) ] + , ( [], [ "a" ] ) ) + , ( [ boost_wide_report.file_info( "a", 1, time.localtime( 0 ) ) ] + , [ boost_wide_report.file_info( "a", 1, time.localtime( 1 ) ) ] + , ( [ "a" ], [] ) ) + ] + + for test_case in test_cases: + source_dir_content = test_case[0] + destination_dir_content = test_case[1] + expected_result = test_case[2] + d = boost_wide_report.diff( source_dir_content, destination_dir_content ) + self.failUnlessEqual( d, expected_result ) + +if __name__ == '__main__': + unittest.main() + + diff --git a/tools/regression/xsl_reports/test_results.xsd b/tools/regression/xsl_reports/test_results.xsd new file mode 100644 index 0000000000..bd54208488 --- /dev/null +++ b/tools/regression/xsl_reports/test_results.xsd @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + <!-- + The following online services can be used to validate collected test results: + + - http://apps.gotdotnet.com/xmltools/xsdvalidator/ + - http://tools.decisionsoft.com/schemaValidate.html + --> + + <xs:simpleType name="test_result"> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="fail"/> + <xs:enumeration value="succeed"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="run_test_result"> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="fail"/> + <xs:enumeration value="succeed"/> + <xs:enumeration value="note"/> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="test_type"> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="compile"/> + <xs:enumeration value="compile_fail"/> + <xs:enumeration value="lib"/> + <xs:enumeration value="pyd"/> + <xs:enumeration value="run"/> + <xs:enumeration value="run_fail"/> + <xs:enumeration value="run_pyd"/> + </xs:restriction> + </xs:simpleType> + + <xs:element name="compile"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="result" type="test_result" use="required"/> + <xs:attribute name="timestamp" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="link"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="result" type="test_result" use="required"/> + <xs:attribute name="timestamp" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="lib"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="result" type="test_result" use="required"/> + <xs:attribute name="timestamp" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="run"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="result" type="run_test_result" use="required"/> + <xs:attribute name="timestamp" type="xs:string" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="test-log"> + <xs:complexType> + <xs:sequence> + <xs:element ref="compile" minOccurs="0"/> + <xs:element ref="link" minOccurs="0"/> + <xs:element ref="run" minOccurs="0"/> + <xs:element ref="lib" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="library" type="xs:string" use="required"/> + <xs:attribute name="test-name" type="xs:string" use="required"/> + <xs:attribute name="test-type" type="test_type" use="required"/> + <xs:attribute name="test-program" type="xs:string" use="required"/> + <xs:attribute name="target-directory" type="xs:string" use="required"/> + <xs:attribute name="toolset" type="xs:string" use="required"/> + <xs:attribute name="show-run-output" type="xs:boolean" use="required"/> + </xs:complexType> + </xs:element> + + <xs:element name="tests"> + <xs:complexType> + <xs:sequence> + <xs:element ref="test-log" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + +</xs:schema> diff --git a/tools/regression/xsl_reports/utils/__init__.py b/tools/regression/xsl_reports/utils/__init__.py new file mode 100644 index 0000000000..6d542083d9 --- /dev/null +++ b/tools/regression/xsl_reports/utils/__init__.py @@ -0,0 +1,13 @@ + +from accept_args import * +from char_translation_table import * +from check_existance import * +from checked_system import * +from libxslt import * +from log import * +from makedirs import * +from rename import * +from tar import * +from zip import * + +import sourceforge diff --git a/tools/regression/xsl_reports/utils/accept_args.py b/tools/regression/xsl_reports/utils/accept_args.py new file mode 100644 index 0000000000..b08739f40b --- /dev/null +++ b/tools/regression/xsl_reports/utils/accept_args.py @@ -0,0 +1,30 @@ + +import getopt +import re +import sys + +def accept_args( args_spec, args, options, usage ): + + defaults_num = len(options) + + ( option_pairs, rest_args ) = getopt.getopt( args, '', args_spec ) + map( lambda x: options.__setitem__( x[0], x[1] ), option_pairs ) + + if ( options.has_key( '--help' ) or len( options.keys() ) == defaults_num ): + usage() + sys.exit( 1 ) + + if len( rest_args ) > 0 and rest_args[0][0] == '@': + f = open( rest_args[0][1:], 'r' ) + config_lines = f.read().splitlines() + f.close() + for l in config_lines: + if re.search( r'^\s*#', l ): continue + if re.search( r'^\s*$', l ): continue + m = re.match( r'^(?P<name>.*?)=(?P<value>.*)', l ) + if m: + options[ '--%s' % m.group( 'name' ) ] = m.group( 'value' ) + else: + raise 'Invalid format of config line "%s"' % l + + return rest_args diff --git a/tools/regression/xsl_reports/utils/char_translation_table.py b/tools/regression/xsl_reports/utils/char_translation_table.py new file mode 100644 index 0000000000..c2d8fb6c95 --- /dev/null +++ b/tools/regression/xsl_reports/utils/char_translation_table.py @@ -0,0 +1,13 @@ + +import string + +def chr_or_question_mark( c ): + if chr(c) in string.printable and c < 128 and c not in ( 0x09, 0x0b, 0x0c ): + return chr(c) + else: + return '?' + +char_translation_table = string.maketrans( + ''.join( map( chr, range(0, 256) ) ) + , ''.join( map( chr_or_question_mark, range(0, 256) ) ) + ) diff --git a/tools/regression/xsl_reports/utils/check_existance.py b/tools/regression/xsl_reports/utils/check_existance.py new file mode 100644 index 0000000000..9e3d0e7b21 --- /dev/null +++ b/tools/regression/xsl_reports/utils/check_existance.py @@ -0,0 +1,9 @@ + +import os + +def check_existance( name ): + a = os.popen( '%s --version' % name ) + output = a.read() + rc = a.close() + if rc is not None: + raise Exception( '"%s" is required' % name ) diff --git a/tools/regression/xsl_reports/utils/checked_system.py b/tools/regression/xsl_reports/utils/checked_system.py new file mode 100644 index 0000000000..bdb8e8f8e6 --- /dev/null +++ b/tools/regression/xsl_reports/utils/checked_system.py @@ -0,0 +1,22 @@ + +import os +import string +import sys + +def system( commands ): + if sys.platform == 'win32': + f = open( 'tmp.cmd', 'w' ) + f.write( string.join( commands, '\n' ) ) + f.close() + rc = os.system( 'tmp.cmd' ) + return rc + else: + rc = os.system( '&&'.join( commands ) ) + return rc + + +def checked_system( commands, valid_return_codes = [ 0 ] ): + rc = system( commands ) + if rc not in [ 0 ] + valid_return_codes: + raise Exception( 'Command sequence "%s" failed with return code %d' % ( commands, rc ) ) + return rc diff --git a/tools/regression/xsl_reports/utils/libxslt.py b/tools/regression/xsl_reports/utils/libxslt.py new file mode 100644 index 0000000000..d9184100e2 --- /dev/null +++ b/tools/regression/xsl_reports/utils/libxslt.py @@ -0,0 +1,49 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import utils.makedirs +import utils.rename +import os.path +import os +import sys + + +def xslt_param( path, replace_spaces = 1 ): + path = path.replace( '\\', '/' ) + if sys.platform == 'win32' and replace_spaces: + path = path.replace( ' ', '%20' ) + return path + + +def libxslt( log, xml_file, xsl_file, output_file, parameters = None ): + + utils.makedirs( os.path.dirname( output_file ) ) + + if sys.platform == 'win32': + os.chdir( os.path.dirname( xsl_file ) ) + + transform_command = 'xsltproc' + transform_command = transform_command + ' -o ' + '"%s"' % xslt_param( output_file ) + + if parameters is not None: + for i in parameters: + if parameters[i]: + parameters[i] = xslt_param( parameters[i] ) + transform_command = transform_command + ' --param %s "\'%s\'" ' % ( i, parameters[ i ] ) + + transform_command = transform_command + ' "%s" ' % xslt_param( xsl_file ) + transform_command = transform_command + ' "%s" ' % xslt_param( xml_file ) + log( transform_command ) + rc = os.system( transform_command ) + if rc != 0: + raise Exception( '"%s" failed with return code %d' % ( transform_command, rc ) ) + + output_file = xslt_param( output_file, 0 ) + xlst_output_file = xslt_param( output_file ) + if output_file != xlst_output_file and os.path.exists( xlst_output_file ): + utils.rename( log, xlst_output_file, output_file ) + diff --git a/tools/regression/xsl_reports/utils/log.py b/tools/regression/xsl_reports/utils/log.py new file mode 100644 index 0000000000..28b1366f88 --- /dev/null +++ b/tools/regression/xsl_reports/utils/log.py @@ -0,0 +1,18 @@ + +import inspect +import sys + +def log_level(): + frames = inspect.stack() + level = 0 + for i in frames[ 3: ]: + if i[0].f_locals.has_key( '__log__' ): + level = level + i[0].f_locals[ '__log__' ] + return level + + +def stdlog( message ): + sys.stderr.write( '# ' + ' ' * log_level() + message + '\n' ) + sys.stderr.flush() + +log = stdlog diff --git a/tools/regression/xsl_reports/utils/makedirs.py b/tools/regression/xsl_reports/utils/makedirs.py new file mode 100644 index 0000000000..94b68d32f1 --- /dev/null +++ b/tools/regression/xsl_reports/utils/makedirs.py @@ -0,0 +1,7 @@ + +import os.path +import os + +def makedirs( path ): + if not os.path.exists( path ): + os.makedirs( path ) diff --git a/tools/regression/xsl_reports/utils/rename.py b/tools/regression/xsl_reports/utils/rename.py new file mode 100644 index 0000000000..95fb36ff48 --- /dev/null +++ b/tools/regression/xsl_reports/utils/rename.py @@ -0,0 +1,17 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2007 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os.path +import os + + +def rename( log, src, dst ): + log( 'Renaming %s to %s' % ( src, dst ) ) + if os.path.exists( dst ): + os.unlink( dst ) + + os.rename( src, dst ) diff --git a/tools/regression/xsl_reports/utils/send_mail.py b/tools/regression/xsl_reports/utils/send_mail.py new file mode 100644 index 0000000000..d0ed98fd18 --- /dev/null +++ b/tools/regression/xsl_reports/utils/send_mail.py @@ -0,0 +1,13 @@ + +import smtplib + +def send_mail( mail, subject, msg = '' ): + smtp_server = smtplib.SMTP( 'mail.%s' % mail.split( '@' )[-1] ) + smtp_server.sendmail( + mail + , [ mail ] + , 'Subject: %s\n' % subject + + 'To: %s\n' % mail + + '\n' + + msg + ) diff --git a/tools/regression/xsl_reports/utils/sourceforge.py b/tools/regression/xsl_reports/utils/sourceforge.py new file mode 100644 index 0000000000..0c6b085286 --- /dev/null +++ b/tools/regression/xsl_reports/utils/sourceforge.py @@ -0,0 +1,48 @@ + +import utils.checked_system +import os +import sys + +site_dir = '/home/groups/b/bo/boost/htdocs/' + +def download( source, destination, user ): + if sys.platform == 'win32': + destination = os.popen( 'cygpath "%s"' % destination ).read().splitlines()[0] + + utils.checked_system( [ + 'rsync -v -r -z --progress %(user)s@shell.sourceforge.net:%(site_dir)s%(source)s %(dest)s' + % { 'user': user, 'site_dir': site_dir, 'source': source, 'dest': destination } + ] ) + + +def upload( source, destination, user ): + if sys.platform == 'win32': + source = os.popen( 'cygpath "%s"' % source ).read().splitlines()[0] + + utils.checked_system( [ + 'rsync -v -r -z --progress %(source)s %(user)s@shell.sourceforge.net:%(site_dir)s%(dest)s' + % { 'user': user, 'site_dir': site_dir, 'source': source, 'dest': destination } + ] ) + + +def checked_system( commands, user, background = False ): + if not background: + cmd = 'ssh -l %s shell.sourceforge.net "%s"' + else: + cmd = 'ssh -f -l %s shell.sourceforge.net "%s"' + + utils.checked_system( + [ cmd % ( user, '&&'.join( commands ) ) ] + ) + + +def untar( archive, user, background ): + checked_system( + [ + 'cd %s' % os.path.join( site_dir, os.path.dirname( archive ) ) + , 'tar -x -z --overwrite --mode=+w -f %s' % os.path.basename( archive ) + , 'rm -f %s' % archive + ] + , user = user + , background = background + ) diff --git a/tools/regression/xsl_reports/utils/tar.py b/tools/regression/xsl_reports/utils/tar.py new file mode 100644 index 0000000000..19deb1992b --- /dev/null +++ b/tools/regression/xsl_reports/utils/tar.py @@ -0,0 +1,16 @@ + +import utils.checked_system +import os.path + +def tar( source_dir, archive_name ): + utils.checked_system( [ + 'cd %s' % source_dir + , 'tar -c -f ../%s -z *' % archive_name + ] ) + +def untar( archive_path ): + #utils.checked_system( [ 'tar -xjf "%s"' % archive_path ] ) + utils.checked_system( [ + 'cd %s' % os.path.dirname( archive_path ) + , 'tar -xjf "%s"' % os.path.basename( archive_path ) + ] ) diff --git a/tools/regression/xsl_reports/utils/zip.py b/tools/regression/xsl_reports/utils/zip.py new file mode 100644 index 0000000000..7473aa0051 --- /dev/null +++ b/tools/regression/xsl_reports/utils/zip.py @@ -0,0 +1,12 @@ + +import zipfile +import os.path + +def unzip( archive_path, result_dir ): + z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED ) + for f in z.infolist(): + result = open( os.path.join( result_dir, f.filename ), 'wb' ) + result.write( z.read( f.filename ) ) + result.close() + + z.close() diff --git a/tools/regression/xsl_reports/xsl/add_expected_results.xsl b/tools/regression/xsl_reports/xsl/add_expected_results.xsl new file mode 100644 index 0000000000..6771f0034f --- /dev/null +++ b/tools/regression/xsl_reports/xsl/add_expected_results.xsl @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:meta="http://www.meta-comm.com" + exclude-result-prefixes="meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:param name="expected_results_file"/> + <xsl:param name="failures_markup_file"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + <xsl:variable name="failures_markup" select="document( $failures_markup_file )" /> + + <xsl:template match="/"> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:variable name="library" select="@library"/> + <xsl:variable name="test-name" select="@test-name"/> + <xsl:variable name="toolset" select="@toolset"/> + + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + + <xsl:variable name="actual_result"> + <xsl:choose> + <!-- Hack: needs to be researched (and removed). See M.Wille's incident. --> + <xsl:when test="run/@result='succeed' and lib/@result='fail'"> + <xsl:text>success</xsl:text> + </xsl:when> + <xsl:when test="./*/@result = 'fail'" > + <xsl:text>fail</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>success</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="expected_results_test_case" select="$expected_results//*/test-result[ @library=$library and ( @test-name=$test-name or @test-name='*' ) and @toolset = $toolset]"/> + <xsl:variable name="new_failures_markup" select="$failures_markup//library[@name=$library]/mark-expected-failures[ meta:re_match( test/@name, $test-name ) and meta:re_match( toolset/@name, $toolset ) ]"/> + <xsl:variable name="failures_markup" select="$failures_markup//library[@name=$library]/test[ meta:re_match( @name, $test-name ) ]/mark-failure[ meta:re_match( toolset/@name, $toolset ) ]"/> + <xsl:variable name="is_new"> + <xsl:choose> + <xsl:when test="$expected_results_test_case"> + <xsl:text>no</xsl:text> + </xsl:when> + <xsl:otherwise>yes</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="expected_result"> + <xsl:choose> + <xsl:when test='count( $failures_markup ) > 0 or count( $new_failures_markup ) > 0'> + <xsl:text>fail</xsl:text> + </xsl:when> + + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$expected_results_test_case and $expected_results_test_case/@result = 'fail'"> + <xsl:text>fail</xsl:text> + </xsl:when> + + <xsl:otherwise>success</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="status"> + <xsl:choose> + <xsl:when test="count( $failures_markup ) > 0 or count( $new_failures_markup ) > 0"> + <xsl:choose> + <xsl:when test="$expected_result = $actual_result">expected</xsl:when> + <xsl:otherwise>unexpected</xsl:otherwise> + </xsl:choose> + </xsl:when> + + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$expected_result = $actual_result">expected</xsl:when> + <xsl:otherwise>unexpected</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + + </xsl:choose> + </xsl:variable> + + <xsl:variable name="notes"> + <xsl:choose> + + <xsl:when test='count( $failures_markup ) > 0'> + <xsl:for-each select="$failures_markup/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:when> + + <xsl:when test='count( $new_failures_markup ) > 0'> + <xsl:for-each select="$new_failures_markup/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:when> + + </xsl:choose> + </xsl:variable> + + <xsl:attribute name="result"><xsl:value-of select="$actual_result"/></xsl:attribute> + <xsl:attribute name="expected-result"><xsl:value-of select="$expected_result"/></xsl:attribute> + <xsl:attribute name="status"><xsl:value-of select="$status"/></xsl:attribute> + <xsl:attribute name="is-new"><xsl:value-of select="$is_new"/></xsl:attribute> + <!--<a><xsl:value-of select="count( $failures_markup )"/></a>--> + <xsl:element name="notes"><xsl:copy-of select="$notes"/></xsl:element> + + + <xsl:apply-templates select="node()" /> + </xsl:element> + </xsl:template> + + <xsl:template match="*"> + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates select="node()" /> + </xsl:element> + </xsl:template> + + <xsl:template match="@*"> + <xsl:copy-of select="." /> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/common.xsl b/tools/regression/xsl_reports/xsl/common.xsl new file mode 100644 index 0000000000..0029eeaebb --- /dev/null +++ b/tools/regression/xsl_reports/xsl/common.xsl @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + version="1.0"> + + <xsl:variable name="output_directory" select="'output'"/> + + <xsl:template name="get_toolsets"> + <xsl:param name="toolsets"/> + <xsl:param name="required-toolsets"/> + + <xsl:variable name="toolset_output"> + <xsl:for-each select="$toolsets"> + <xsl:variable name="toolset" select="."/> + <xsl:element name="toolset"> + <xsl:attribute name="toolset"><xsl:value-of select="$toolset"/></xsl:attribute> + <xsl:choose> + <xsl:when test="$required_toolsets[ $toolset = @name ]"> + <xsl:attribute name="required">yes</xsl:attribute> + <xsl:attribute name="sort">a</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="required">no</xsl:attribute> + <xsl:attribute name="sort">z</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:for-each> + </xsl:variable> + + <xsl:for-each select="exsl:node-set( $toolset_output )/toolset"> + <xsl:sort select="concat( @sort, ' ', @toolset)" order="ascending"/> + <xsl:copy-of select="."/> + </xsl:for-each> + + </xsl:template> + + <func:function name="meta:show_output"> + <xsl:param name="explicit_markup"/> + <xsl:param name="test_log"/> + <func:result select="$test_log/@result != 'success' and not( meta:is_unusable( $explicit_markup, $test_log/@library, $test_log/@toolset )) or $test_log/@show-run-output = 'true'"/> + </func:function> + + <func:function name="meta:is_test_log_a_test_case"> + <xsl:param name="test_log"/> + <func:result select="$test_log/@test-type='compile' or $test_log/@test-type='compile_fail' or $test_log/@test-type='run' or $test_log/@test-type='run_pyd'"/> + </func:function> + + <func:function name="meta:is_unusable"> + <xsl:param name="explicit_markup"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + + <func:result select="$explicit_markup//library[ @name = $library ]/mark-unusable[ toolset/@name = $toolset or toolset/@name='*' ]"/> + </func:function> + + <func:function name="meta:re_match"> + <xsl:param name="pattern"/> + <xsl:param name="text"/> + + <xsl:choose> + <xsl:when test="not( contains( $pattern, '*' ) )"> + <func:result select="$text = $pattern"/> + </xsl:when> + <xsl:when test="$pattern = '*'"> + <func:result select="1 = 1"/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*' and substring( $pattern, string-length($pattern), 1 ) = '*' "> + <func:result select="contains( $text, substring( $pattern, 2, string-length($pattern) - 2 ) ) "/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*'"> + <xsl:variable name="pattern_tail" select="substring( $pattern, 2, string-length($pattern) - 1 )"/> + <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' "> + <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 2 )"/> + <func:result select="substring( $text, 1, string-length($pattern_head) ) = $pattern_head "/> + </xsl:when> + </xsl:choose> + </func:function> + + <func:function name="meta:encode_path"> + <xsl:param name="path"/> + <func:result select="translate( translate( $path, '/', '-' ), './', '-' )"/> + </func:function> + + <func:function name="meta:toolset_name"> + <xsl:param name="name"/> + <func:result select="$name"/> + </func:function> + + <func:function name="meta:output_file_path"> + <xsl:param name="path"/> + <func:result select="concat( $output_directory, '/', meta:encode_path( $path ), '.html' )"/> + </func:function> + + <xsl:template name="show_notes"> + <xsl:param name="explicit_markup"/> + <xsl:param name="notes"/> + <div class="notes"> + <xsl:for-each select="$notes"> + <div> + <xsl:variable name="refid" select="@refid"/> + <xsl:call-template name="show_note"> + <xsl:with-param name="note" select="."/> + <xsl:with-param name="reference" select="$explicit_markup//note[ $refid = @id ]"/> + </xsl:call-template> + </div> + </xsl:for-each> + </div> + </xsl:template> + + <xsl:template name="show_note"> + <xsl:param name="note"/> + <xsl:param name="reference"/> + <div class="note"> + <xsl:variable name="author"> + <xsl:choose> + <xsl:when test="$note/@author"> + <xsl:value-of select="$note/@author"/> + </xsl:when> + <xsl:when test="$reference"> + <xsl:value-of select="$reference/@author"/> + </xsl:when> + <xsl:otherwise> + <xsl:text/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="date"> + <xsl:choose> + <xsl:when test="$note/@date"> + <xsl:value-of select="$note/@date"/> + </xsl:when> + <xsl:when test="$reference"> + <xsl:value-of select="$reference/@date"/> + </xsl:when> + <xsl:otherwise> + <xsl:text/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <span class="note-header"> + <xsl:choose> + <xsl:when test="$author != '' and $date != ''"> + [ <xsl:value-of select="$author"/> <xsl:value-of select="$date"/> ] + </xsl:when> + <xsl:when test="$author != ''"> + [ <xsl:value-of select="$author"/> ] + </xsl:when> + <xsl:when test="$date != ''"> + [ <xsl:value-of select="$date"/> ] + </xsl:when> + </xsl:choose> + </span> + + <xsl:if test="$reference"> + <xsl:copy-of select="$reference/node()"/> + </xsl:if> + <xsl:copy-of select="$note/node()"/> + + </div> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/html/issues_legend.html b/tools/regression/xsl_reports/xsl/html/issues_legend.html new file mode 100644 index 0000000000..6274048b55 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/issues_legend.html @@ -0,0 +1,36 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="unexpected new fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected-new"><toolset></td></tr> + </table> + </td> + <td class="legend-item">Failure on a newly added test/compiler.</td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected"><toolset></td></tr> + </table> + </td> + <td class="legend-item">Unexpected failure.</td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/html/library_developer_legend.html b/tools/regression/xsl_reports/xsl/html/library_developer_legend.html new file mode 100644 index 0000000000..405e52ab4b --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/library_developer_legend.html @@ -0,0 +1,72 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="success legend"> + <tr class="library-row-single"><td class="library-success-expected">pass</td></tr> + </table> + </td> + <td class="legend-item">Success.</td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected pass legend"> + <tr class="library-row-single"><td class="library-success-unexpected">pass</td></tr> + </table> + </td> + <td class="legend-item">Unexpected success.</td> + </tr> + <tr> + <td> + <table width="100%" summary="expected fail legend"> + <tr class="library-row-single"><td class="library-fail-expected">fail</td></tr> + </table> + </td> + <td class="legend-item">Expected failure.</td> + </tr> + </table> + </td> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="unexpected new fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected-new">fail</td></tr> + </table> + </td> + <td class="legend-item">Failure on a newly added test/compiler.</td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected">fail</td></tr> + </table> + </td> + <td class="legend-item">Unexpected failure.</td> + </tr> + <tr> + <td> + <table width="100%" summary="unusable legend"> + <tr class="library-row-single"><td class="library-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-item">The library author marked it as unusable on particular platform/toolset.</td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/html/library_user_legend.html b/tools/regression/xsl_reports/xsl/html/library_user_legend.html new file mode 100644 index 0000000000..5175f04271 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/library_user_legend.html @@ -0,0 +1,65 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="success legend"> + <tr class="library-row-single"><td class="library-user-success">pass</td></tr> + </table> + </td> + <td class="legend-item"> + The test passes. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="fail legend"> + <tr class="library-row-single"><td class="library-user-fail-expected">fail</td></tr> + </table> + </td> + <td class="legend-item"> + A known test failure; click on the link to see the log. + </td> + </tr> + </table> + </td> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single"><td class="library-user-fail-unexpected">unexp.</td></tr> + </table> + </td> + <td class="legend-item"> + The test is known to pass, but is currently failing; + click on the link to see the log. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="unusable legend"> + <tr class="library-row-single"><td class="library-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-item"> + The library author marked it as unusable on particular platform/toolset. + </td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/html/make_tinyurl.html b/tools/regression/xsl_reports/xsl/html/make_tinyurl.html new file mode 100644 index 0000000000..2de8830106 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/make_tinyurl.html @@ -0,0 +1,24 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="tinyurl"> + +<script type="text/javascript"> +<!-- +function make_tinyurl() +{ + window.open( 'http://tinyurl.com/create.php?url=' + parent.location.href ); +} +//--> +</script> + +<a href="javascript:make_tinyurl()">TinyUrl</a> + +</div> diff --git a/tools/regression/xsl_reports/xsl/html/master.css b/tools/regression/xsl_reports/xsl/html/master.css new file mode 100644 index 0000000000..8e643efebf --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/master.css @@ -0,0 +1,525 @@ +/* + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +*/ + +/* All reports */ + +body +{ + background-color: white; +} + +body.user-toc +{ + background-color: #f0f0f0; +} + +body.developer-toc +{ + background-color: #f0f5ff; +} + +span.super +{ + vertical-align: super; + font-size: 80%; + margin-left: 3pt; +} + +h1.page-title +{ + text-align: left; + text-transform: capitalize; + margin-top: 10pt; + margin-bottom: 10pt; +} + +img +{ + display: inline; +} + + a.hover-link:link +,a.hover-link:visited +,a.hover-link:active +{ + color: black; + text-decoration: none; +} + +a.hover-link:hover +{ + color: black; + text-decoration: underline; +} + +div.legend +{ + width: 80%; + background-color: #f5f5f5; + margin-top: 10pt; +} + +div.comment +{ + width: 80%; + background-color: #f5f5f5; + padding-left: 10pt; + padding-right: 10pt; + padding-bottom: 10pt; +} + +div.tinyurl +{ + margin-top: 10pt; +} + +table.header-table +{ + margin-left: 10pt; + margin-top: 20pt; + margin-bottom: 10pt; + width: 80%; +} + +td.header-item +{ + text-align: left; + vertical-align: top; + font-weight: bold; +} + +td.header-item-content +{ + padding-left: 20pt; + padding-bottom: 10pt; +} + +td.legend-item +{ + padding-left: 5pt; +/* padding-top: 2pt;*/ +} + +div.acknowledgement +{ + text-align: left; + margin-top: 10pt; + margin-left: 5pt; + margin-bottom: 10pt; +} + +div.report-info +{ + text-align: left; + margin-bottom: 10pt; + width: 80%; +} + +div.purpose +{ + text-align: left; + margin-left: 5pt; + margin-top: 10pt; +} + + +div.library-name +{ + margin-top: 20pt; + margin-bottom: 10pt; + text-align: left; + font-size: 125%; + font-weight: bold; +} + +table.summary-table +,table.library-table +{ + border-collapse: collapse; + border: 2px solid black; + margin: 5px; +} + + table.summary-table td +,table.library-table td +{ + text-align: center; + border-left: 1px solid black; + border-right: 1px solid black; +} + + a.log-link:link +,a.log-link:visited +{ + color: black; +/* text-decoration: none; */ +} + + a.log-link:active +,a.log-link:hover +,a.legend-link:link +,a.legend-link:visited +,a.legend-link:active +,a.legend-link:hover +{ + color: black; + text-decoration: underline; +} + + td.toolset-name +,td.required-toolset-name +{ + vertical-align: middle; + padding-left: 3pt; + padding-right: 3pt; + word-spacing: -3pt; +} + +td.required-toolset-name +{ + font-weight: bold; +} + +td.library-corner-case-header +{ +} + +tr.summary-row-first td +, tr.library-row-first td +{ + border-top: 1px solid gray; + border-bottom: 0px; +} + +tr.summary-row-last td +, tr.library-row-last td +{ + border-top: 0px; + border-bottom: 1px solid gray; +} + +tr.summary-row-single td +, tr.library-row-single td +{ + border-top: 1px solid gray; + border-bottom: 1px solid gray; +} + +tr.summary-row td +, tr.library-row td +{ + border-bottom: 0px; + border-top: 0px; +} + + td.library-success-expected +,td.library-fail-expected +,td.library-user-fail-expected +,td.library-user-success +,td.summary-expected +,td.summary-user-fail-expected +,td.summary-user-success +,td.summary-unknown-status +{ + width: 60pt; + text-align: center; + background-color: lightgreen; + border-left: 1px solid black; + border-right: 1px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + +td.summary-unknown-status +{ + background-color: white; +} + + td.library-success-unexpected +,td.summary-success-unexpected +{ + width: 60pt; + text-align: center; + background-color: green; + font-weight: bold; + color: white; + border: 0px; + padding-left: 2pt; + padding-right: 2pt; +} + + + tr.summary-row td.summary-fail-unexpected +,tr.summary-row-first td.summary-fail-unexpected +,tr.summary-row-last td.summary-fail-unexpected +,tr.summary-row-single td.summary-fail-unexpected + +,tr.summary-row td.summary-user-fail-unexpected +,tr.summary-row-first td.summary-user-fail-unexpected +,tr.summary-row-last td.summary-user-fail-unexpected +,tr.summary-row-single td.summary-user-fail-unexpected + +,tr.library-row td.library-user-fail-unexpected +,tr.library-row-first td.library-user-fail-unexpected +,tr.library-row-last td.library-user-fail-unexpected +,tr.library-row-single td.library-user-fail-unexpected +{ + width: 60pt; + text-align: center; + background-color: red; + color: black; + border: 2px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + tr.summary-row td.summary-missing +, tr.summary-row-first td.summary-missing +, tr.summary-row-last td.summary-missing +, tr.summary-row-single td.summary-missing + +, tr.library-row td.library-missing +, tr.library-row-first td.library-missing +, tr.library-row-last td.library-missing +, tr.library-row-single td.library-missing +{ + width: 60pt; + text-align: center; + background-color: white; + color: black; + border: 2px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + tr.summary-row td.summary-unusable +, tr.summary-row-first td.summary-unusable +, tr.summary-row-last td.summary-unusable +, tr.summary-row-single td.summary-unusable + +, tr.library-row td.library-unusable +, tr.library-row-first td.library-unusable +, tr.library-row-last td.library-unusable +, tr.library-row-single td.library-unusable +{ + width: 60pt; + text-align: center; + background-color: silver; + color: black; + border-top: 2px solid black; + border-bottom: 2px solid black; + border-left: 2px solid black; + border-right: 2px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + +/* Summary */ + +table.summary-table td.library-name +{ + width: 100pt; + padding: 0pt; + border-top: 1px solid gray; + border-bottom: 1px solid gray; +} + + tr.summary-row td.summary-user-fail-unexpected +, tr.summary-row-first td.summary-user-fail-unexpected +, tr.summary-row-last td.summary-user-fail-unexpected +, tr.summary-row-single td.summary-user-fail-unexpected +{ + width: 60pt; + text-align: center; + background-color: yellow; + color: black; + border: 2px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + tr.summary-row td.summary-fail-unexpected-new +, tr.summary-row-first td.summary-fail-unexpected-new +, tr.summary-row-last td.summary-fail-unexpected-new +, tr.summary-row-single td.summary-fail-unexpected-new + +, tr.library-row td.library-fail-unexpected-new +, tr.library-row-first td.library-fail-unexpected-new +, tr.library-row-last td.library-fail-unexpected-new +, tr.library-row-single td.library-fail-unexpected-new +{ + width: 60pt; + text-align: center; + background-color: yellow; + color: black; + border: 2px solid black; +} + +/* Detailed */ + +.library-conf-problem +{ + font-size: 70%; + font-weight: normal; +} + +div.library-toc +{ + margin: 5pt; +} + + +li.library-toc-entry +{ + margin-left: 5pt; + list-style-type: square; +} + + +div.library-footer +{ + margin: 5px; +} + + +table.library-table td.test-name +{ + width: 150pt; + padding-left: 6pt; + padding-right: 6pt; + border-right: 0; + border-top: 1px solid gray; + border-bottom: 1px solid gray; +} + +table.library-table td.test-type +{ + padding-right: 5px; + border-left: 0; + border-right: 0; + border-top: 1px solid gray; + border-bottom: 1px solid gray; + text-align: right; +} + + tr.library-row td.library-fail-unexpected +, tr.library-row-first td.library-fail-unexpected +, tr.library-row-last td.library-fail-unexpected +, tr.library-row-single td.library-fail-unexpected +{ + width: 60pt; + text-align: center; + background-color: red; + font-weight: bold; + color: black; + border: 2px solid black; +} + +td.library-user-fail-expectected +{ + width: 60pt; + text-align: center; + background-color: yellow; + color: black; + border: 0px solid black; +} + +table.library-library-notes +{ + background-color: LemonChiffon; + width: 640px; + margin-left: 5px; + margin-right: 5px; +} + +tr.library-library-note +{ +} + +div.note +{ + padding: 3pt; +} + + +span.note-header +{ + font-weight: bold; +} + +/* Log */ + +div.log-test-title +{ + font-size: 1.5em; + font-weight: bold; + border-bottom: 1px solid black; +} + +div.notes-title +{ + font-weight: bold; + background-color: #ffffcc; +} + +div.notes +{ + padding: 3pt; + background-color: #ffffcc; +} + +div.notes-title +{ + font-weight: bold; +} + +div.log-compiler-output-title +{ + font-weight: bold; +} + +div.log-linker-output-title +{ + font-weight: bold; +} + +div.log-run-output-title +{ + font-weight: bold; +} + + +/* Issues page */ + +table.library-issues-table +{ + border-collapse: collapse; + border: 2px solid black; +} + +table.library-issues-table td +{ + border: 1px solid #c0c0c0; + text-align: center; + margin-right: 5px; +} + +table.library-issues-table td.failures-row +{ + text-align: left; + padding: 0px; +} + + table.issue-box tr.library-row-single td.library-fail-unexpected-new +,table.issue-box tr.library-row-single td.library-fail-unexpected +{ + border: 0px; + font-weight: normal; +} diff --git a/tools/regression/xsl_reports/xsl/html/summary_developer_legend.html b/tools/regression/xsl_reports/xsl/html/summary_developer_legend.html new file mode 100644 index 0000000000..0f82828228 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/summary_developer_legend.html @@ -0,0 +1,75 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="success legend"> + <tr class="summary-row-single"><td class="summary-expected">OK</td></tr> + </table> + </td> + <td class="legend-item"> + All expected tests pass. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected pass legend"> + <tr class="summary-row-single"><td class="summary-success-unexpected">OK</td></tr> + </table> + </td> + <td class="legend-item"> + All expected tests pass, and some other tests that were expected to fail + unexpectedly pass as well. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected new fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected-new">fail</td></tr> + </table> + </td> + <td class="legend-item"> + There are some failures on the newly added tests/compiler(s). + </td> + </tr> + </table> + </td> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected">broken</td></tr> + </table> + </td> + <td class="legend-item"> + Tests that the library author expects to pass are currently failing. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="unusable legend"> + <tr class="summary-row-single"><td class="summary-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-item"> + The library author marked it as unusable on particular platform/toolset. + </td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/html/summary_user_legend.html b/tools/regression/xsl_reports/xsl/html/summary_user_legend.html new file mode 100644 index 0000000000..4407608120 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/html/summary_user_legend.html @@ -0,0 +1,65 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="success legend"> + <tr class="summary-row-single"><td class="summary-user-success"> </td></tr> + </table> + </td> + <td class="legend-item"> + All library tests are passing. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="expected fail legend"> + <tr class="summary-row-single"><td class="summary-user-fail-expected">details</td></tr> + </table> + </td> + <td class="legend-item"> + There are some known failures in the tests, click on the link to see the details. + </td> + </tr> + </table> + </td> + <td> + <table border="0" summary="legend" ID="Table1"> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="summary-row-single"><td class="summary-user-fail-unexpected">unexp.</td></tr> + </table> + </td> + <td class="legend-item"> + Some tests that the library author expects to pass are currently failing, + click on the link to see the details. + </td> + </tr> + <tr> + <td> + <table width="100%" summary="unusable legend"> + <tr class="summary-row-single"><td class="summary-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-item"> + The library author marked it as unusable on particular platform/toolset. + </td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/issues_page.xsl b/tools/regression/xsl_reports/xsl/issues_page.xsl new file mode 100644 index 0000000000..4faa410d0d --- /dev/null +++ b/tools/regression/xsl_reports/xsl/issues_page.xsl @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="set str meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + + <xsl:param name="links_file"/> + <xsl:param name="mode"/> + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="comment_file"/> + <xsl:param name="expected_results_file"/> + <xsl:param name="explicit_markup_file"/> + + <!-- the author-specified expected test results --> + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <!-- necessary indexes --> + <xsl:key + name="test_name_key" + match="test-log" + use="concat( @library, '@', @test-name )"/> + <xsl:key + name="a" + match="." + use="concat( @library, '@', @test-name )"/> + + <xsl:key + name="library_key" + match="test-log" + use="@library"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + + <!-- toolsets --> + + <xsl:variable name="required_toolsets" select="$explicit_markup//mark-toolset[ @status='required' ]"/> + <xsl:variable name="required_toolset_names" select="$explicit_markup//mark-toolset[ @status='required' ]/@name"/> + <!-- libraries --> + <xsl:variable name="libraries" select="//test-log[ @library != '' and generate-id(.) = generate-id( key('library_key',@library)[1] ) ]/@library"/> + + <xsl:variable name="unexpected_test_cases" select="//test-log[ @status='unexpected' and @result='fail' and @toolset = $required_toolset_names and meta:is_test_log_a_test_case(.)]"/> + + <func:function name="meta:get_library_tests"> + <xsl:param name="tests"/> + <xsl:param name="library"/> + + <xsl:variable name="a"> + <xsl:for-each select="$tests[ @library=$library ]"> + <xsl:sort select="@test-name" order="ascending"/> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:variable> + <func:result select="exsl:node-set( $a )/*"/> + </func:function> + + + <xsl:template match="/"> + + <xsl:variable name="issues_list" select="'issues_.html'"/> + + <!-- Issues page --> + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression unresolved issues: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc.html" scrolling="auto"/> + <frame name="docframe" src="{$issues_list}" scrolling="auto"/> + </frameset> + </html> + + <!-- Issues list --> + <xsl:message>Writing document <xsl:value-of select="$issues_list"/></xsl:message> + + <exsl:document href="{$issues_list}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <h1 class="page-title"> + <xsl:text>Unresolved Issues: </xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <div class="report-info"> + <div> + <b>Report Time: </b> <xsl:value-of select="$run_date"/> + </div> + <div> + <b>Purpose: </b> Provides a list of current unresolved test failures. + </div> + </div> + + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="library" select="."/> + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + + <xsl:variable name="library_tests" select="meta:get_library_tests( $unexpected_test_cases, $library )"/> + <xsl:if test="count( $library_tests ) > 0"> + <xsl:variable name="library_test_names" select="set:distinct( $library_tests/@test-name )"/> + + <h2> + <a class="hover-link" href="{$library_page}.html" target="_top"> + <xsl:value-of select="$library"/> + </a> + </h2> + + <table class="library-issues-table" summary="issues"> + <thead> + <tr valign="middle"> + <td class="head">test</td> + <td class="head">failures</td> + </tr> + </thead> + <tfoot> + <tr valign="middle"> + <td class="head">test</td> + <td class="head">failures</td> + </tr> + </tfoot> + + <tbody> + <xsl:for-each select="$library_test_names"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="test_name" select="."/> + + <xsl:variable name="unexpected_toolsets" select="$library_tests[ @test-name = $test_name and not (meta:is_unusable( $explicit_markup, $library, @toolset )) ]/@toolset"/> + + <xsl:if test="count( $unexpected_toolsets ) > 0"> + <xsl:variable name="test_program" select="$library_tests[@test-name = $test_name]/@test-program"/> + <tr> + <td class="test-name"> + <a href="../../../{$test_program}" class="test-link"> + <xsl:value-of select="$test_name"/> + </a> + </td> + <td class="failures-row"> + <table summary="unexpected fail legend" class="issue-box"> + <tr class="library-row-single"> + + <xsl:for-each select="$unexpected_toolsets"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="toolset" select="."/> + <xsl:variable name="test_result" select="$library_tests[@test-name = $test_name and @toolset = $toolset]"/> + <xsl:variable name="log_link" select="meta:output_file_path( $test_result/@target-directory )"/> + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="$test_result/@is-new = 'yes'"> + <xsl:text>library-fail-unexpected-new</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>library-fail-unexpected</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}"> + <span> + <a href="{$log_link}" class="log-link" target="_top"> + <xsl:value-of select="."/> + </a> + </span> + </td> + </xsl:for-each> + + </tr> + </table> + </td> + </tr> + </xsl:if> + </xsl:for-each> + </tbody> + + </table> + + + </xsl:if> + </xsl:for-each> + + <xsl:copy-of select="document( 'html/issues_legend.html' )"/> + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + + </body> + </html> + </exsl:document> + + </xsl:template> +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/links_page.xsl b/tools/regression/xsl_reports/xsl/links_page.xsl new file mode 100644 index 0000000000..ebc4488f50 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/links_page.xsl @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="set str meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="comment_file"/> + <xsl:param name="explicit_markup_file"/> + + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + + <xsl:template match="test-log[ meta:show_output( $explicit_markup, . ) ]"> + <xsl:variable name="document_path" select="meta:output_file_path( @target-directory )"/> + + <xsl:message>Writing log file document <xsl:value-of select="$document_path"/></xsl:message> + + <exsl:document href="{$document_path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <xsl:variable name="component"> + <xsl:choose> + <xsl:when test="@test-name != ''"> + <div class="log-test-title"> + <xsl:value-of select="concat( @library, ' - ', @test-name, ' / ', @toolset )"/> + </div> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@target-dir"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression - test run output: <xsl:value-of select="$component"/></title> + </head> + + <body> + <div> + <div class="log-test-title"> + Boost regression - test run output: <xsl:value-of select="$component"/> + </div> + + + <xsl:if test="notes/note"> + <p> + <div class="notes-title">Notes</div> + <xsl:call-template name="show_notes"> + <xsl:with-param name="notes" select="notes/note"/> + <xsl:with-param name="explicit_markup" select="$explicit_markup"/> + </xsl:call-template> + </p> + </xsl:if> + + <xsl:if test="compile"> + <p> + <div class="log-compiler-output-title">Compiler output:</div> + <pre> + <xsl:copy-of select="compile/node()"/> + </pre> + </p> + </xsl:if> + + <xsl:if test="link"> + <p> + <div class="log-linker-output-title">Linker output:</div> + <pre> + <xsl:copy-of select="link/node()"/> + </pre> + </p> + </xsl:if> + + <xsl:if test="lib"> + <p> + <div class="log-linker-output-title">Lib output:</div> + <p> + See <a href="{meta:encode_path( lib/node() )}.html"> + <xsl:copy-of select="lib/node()"/> + </a> + </p> + </p> + </xsl:if> + + <xsl:if test="run"> + <p> + <div class="log-run-output-title">Run output:</div> + <pre> + <xsl:copy-of select="run/node()"/> + </pre> + </p> + </xsl:if> + + </div> + + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + + </body> + + </html> + </exsl:document> + + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/produce_expected_results.xsl b/tools/regression/xsl_reports/xsl/produce_expected_results.xsl new file mode 100644 index 0000000000..a47a3acfed --- /dev/null +++ b/tools/regression/xsl_reports/xsl/produce_expected_results.xsl @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:template match="/"> + <root> + <expected-failures> + <xsl:apply-templates select="*/test-log"/> + </expected-failures> + </root> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:if test="meta:is_test_log_a_test_case(.)"> + <test-result library="{@library}" test-name="{@test-name}" toolset="{@toolset}" result="{@result}" /> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/result_page.xsl b/tools/regression/xsl_reports/xsl/result_page.xsl new file mode 100644 index 0000000000..dbd0fbf919 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/result_page.xsl @@ -0,0 +1,702 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="set str meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + <xsl:param name="links_file"/> + <xsl:param name="mode"/> + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="comment_file"/> + <xsl:param name="expected_results_file"/> + <xsl:param name="explicit_markup_file"/> + + <!-- the author-specified expected test results --> + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <xsl:variable name="alternate_mode"> + <xsl:choose> + <xsl:when test="$mode='user'">developer</xsl:when> + <xsl:otherwise>user</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- necessary indexes --> + <xsl:key + name="test_name_key" + match="test-log" + use="concat( @library, '>@<', @test-name )"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + + <!-- toolsets --> + + <xsl:variable name="not_ordered_toolsets" select="//test-log[ generate-id(.) = generate-id( key('toolset_key',@toolset)[1] ) and @toolset != '' ]/@toolset"/> + + <xsl:variable name="required_toolsets" select="$explicit_markup//mark-toolset[ @status='required' ]"/> + + <xsl:variable name="ordered_toolsets_fragment"> + <xsl:call-template name="get_toolsets"> + <xsl:with-param name="toolsets" select="$not_ordered_toolsets"/> + <xsl:with-param name="required_toolsets" select="$required_toolsets"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="ordered_toolsets" select="exsl:node-set( $ordered_toolsets_fragment )"/> + + <!-- libraries --> + <xsl:variable name="test_case_logs" select="//test-log[ meta:is_test_log_a_test_case(.) ]"/> + <xsl:variable name="libraries" select="set:distinct( $test_case_logs/@library )"/> + + <xsl:template name="insert_toolsets_row"> + <xsl:param name="library"/> + <xsl:param name="library_marks"/> + <xsl:param name="toolsets"/> + <tr valign="middle"> + <td class="head" colspan="2">test / toolset</td> + + <!-- + we need to select not all library notes, but only ones + for toolsets present in the report + --> + <xsl:variable name="all_library_notes" select="$library_marks/note"/> + <xsl:message terminate="yes"> + !!!!!!!!!!!!!!!!!!!1 + </xsl:message> + <exsl:document href="debug2.xml" + method="xml" + encoding="utf-8" + indent="yes"> + <debug> + <xsl:copy-of select="$all_library_notes"/> + </debug> + </exsl:document> + <xsl:for-each select="$toolsets/toolset"> + <xsl:variable name="toolset" select="@toolset"/> + + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="@required='yes'"> + <xsl:text>required-toolset-name</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>toolset-name</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="toolset_notes_fragment"> + <xsl:for-each select="$all_library_notes"> + <xsl:if test="../@toolset=$toolset or ( ../toolset/@name=$toolset or ../toolset/@name = '*' )"> + <note index="{position()}"/> + </xsl:if> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="toolset_notes" select="exsl:node-set( $toolset_notes_fragment )/*"/> + + <td class="{$class}"><xsl:value-of select="meta:toolset_name( $toolset )"/> + <xsl:if test="count( $toolset_notes ) > 0"> + <span class="super"> + <xsl:for-each select="$toolset_notes"> + <xsl:variable name="note_index" select="@index"/> + <xsl:if test="generate-id( . ) != generate-id( $toolset_notes[1] )">, </xsl:if> + <a href="#{$library}-note-{$note_index}" title="Note {$note_index}"> + <xsl:value-of select="$note_index"/> + </a> + </xsl:for-each> + </span> + </xsl:if> + </td> + </xsl:for-each> + + <td class="head">toolset / test</td> + </tr> + </xsl:template> + + <xsl:template name="test_type_col"> + <td class="test-type"> + <a href="../../../status/compiler_status.html#Understanding" class="legend-link"> + <xsl:variable name="test_type" select="./@test-type"/> + <xsl:choose> + <xsl:when test="$test_type='run_pyd'"> <xsl:text>r</xsl:text> </xsl:when> + <xsl:when test="$test_type='run'"> <xsl:text>r</xsl:text> </xsl:when> + <xsl:when test="$test_type='run_fail'"> <xsl:text>rf</xsl:text> </xsl:when> + <xsl:when test="$test_type='compile'"> <xsl:text>c</xsl:text> </xsl:when> + <xsl:when test="$test_type='compile_fail'"> <xsl:text>cf</xsl:text> </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes">Incorrect test type "<xsl:value-of select="$test_type"/>"</xsl:message> + </xsl:otherwise> + </xsl:choose> + </a> + </td> + </xsl:template> + + + <xsl:template match="/"> + + <xsl:variable name="index_path" select="'index_.html'"/> + + <!-- Index page --> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc.html" scrolling="auto"/> + <frame name="docframe" src="{$index_path}" scrolling="auto"/> + </frameset> + + <!-- Index content --> + <xsl:message>Writing document <xsl:value-of select="$index_path"/></xsl:message> + + <exsl:document href="{$index_path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <img border="0" src="../../../boost.png" width="277" height="86" align="right" alt="Boost logo"></img> + + <h1 class="page-title"> + <xsl:value-of select="$mode"/> + <xsl:text> report: </xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <div class="report-info"> + <div> + <b>Report Time: </b> <xsl:value-of select="$run_date"/> + </div> + + <div> + <b>Purpose: </b> + <xsl:choose> + <xsl:when test="$mode='user'"> + The purpose of this report is to help a user to find out whether a particular library + works on the particular compiler(s). For CVS "health report", see + <a href="../{$alternate_mode}/index.html" target="_top">developer summary</a>. + </xsl:when> + <xsl:when test="$mode='developer'"> + Provides Boost developers with visual indication of the CVS "health". For user-level + report, see <a href="../{$alternate_mode}/index.html" target="_top">user summary</a>. + </xsl:when> + </xsl:choose> + </div> + </div> + + <div class="comment"> + <xsl:if test="$comment_file != ''"> + <xsl:copy-of select="document( $comment_file )"/> + </xsl:if> + </div> + + </body> + </html> + </exsl:document> + + + <xsl:variable name="multiple.libraries" select="count( $libraries ) > 1"/> + + <!-- TOC --> + <xsl:if test="$multiple.libraries"> + + <xsl:variable name="toc_path" select="'toc.html'"/> + <xsl:message>Writing document <xsl:value-of select="$toc_path"/></xsl:message> + + <exsl:document href="{$toc_path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body class="{$mode}-toc"> + <div class="toc-header-entry"> + <a href="index.html" class="toc-entry" target="_top">Report info</a> + </div> + <div class="toc-header-entry"> + <a href="summary.html" class="toc-entry" target="_top">Summary</a> + </div> + + <xsl:if test="$mode='developer'"> + <div class="toc-header-entry"> + <a href="issues.html" class="toc-entry" target="_top">Unresolved issues</a> + </div> + </xsl:if> + <hr/> + + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending" /> + <xsl:variable name="library_page" select="meta:encode_path(.)" /> + <div class="toc-entry"> + <a href="{$library_page}.html" class="toc-entry" target="_top"> + <xsl:value-of select="."/> + </a> + </div> + </xsl:for-each> + </body> + </html> + + </exsl:document> + </xsl:if> + + <!-- Libraries --> + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending" /> + <xsl:variable name="library" select="." /> + + <xsl:variable name="library_results" select="concat( meta:encode_path( $library ), '_.html' )"/> + <xsl:variable name="library_page" select="concat( meta:encode_path( $library ), '.html' )"/> + + <!-- Library page --> + <xsl:message>Writing document <xsl:value-of select="$library_page"/></xsl:message> + + <exsl:document href="{$library_page}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression: <xsl:value-of select="$library"/>/<xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc.html" scrolling="auto"/> + <frame name="docframe" src="{$library_results}" scrolling="auto"/> + </frameset> + </html> + </exsl:document> + + <!-- Library results frame --> + <xsl:message>Writing document <xsl:value-of select="$library_results"/></xsl:message> + + <exsl:document href="{$library_results}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + + <body> + + <h1 class="page-title"> + <a class="hover-link" name="{$library}" href="../../../libs/{$library}"> + <xsl:value-of select="$library" /> + </a> + <xsl:text>/</xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <div class="report-info"> + <b>Report Time: </b> <xsl:value-of select="$run_date"/> + </div> + + <!-- library markup = all library-unusable markup for toolsets included in the report --> + <xsl:variable name="library_marks" select="$explicit_markup//library[ @name = $library ]/mark-unusable[ toolset/@name = $not_ordered_toolsets ]"/> + + <table border="0" cellspacing="0" cellpadding="0" class="library-table" summary="library results"> + + <thead> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="library_marks" select="$library_marks"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolsets" select="$ordered_toolsets"/> + </xsl:call-template> + </thead> + <tfoot> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="library_marks" select="$library_marks"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolsets" select="$ordered_toolsets"/> + </xsl:call-template> + </tfoot> + + <tbody> + <!-- lib_tests = test_log* --> + <xsl:variable name="lib_tests" select="$test_case_logs[@library = $library]" /> + + <!-- lib_unique_test_names = test_log* --> + <xsl:variable name="lib_unique_test_names" + select="$lib_tests[ generate-id(.) = generate-id( key('test_name_key', concat( @library, '>@<', @test-name ) ) ) ]" /> + + <xsl:variable name="lib_corner_case_tests_markup" select="$explicit_markup//library[ @name = $library ]/test[ @corner-case='yes' ]"/> + <xsl:variable name="lib_general_tests" + select="meta:order_tests_by_name( $lib_unique_test_names[ not( @test-name = $lib_corner_case_tests_markup/@name ) ] )"/> + + + <xsl:variable name="lib_corner_case_tests" select="meta:order_tests_by_name( $lib_unique_test_names[ @test-name = $lib_corner_case_tests_markup/@name ] ) " /> + + <!-- general tests section --> + + <xsl:call-template name="insert_test_section"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="section_tests" select="$lib_general_tests"/> + <xsl:with-param name="lib_tests" select="$lib_tests"/> + <xsl:with-param name="toolsets" select="$ordered_toolsets"/> + </xsl:call-template> + + <!-- corner-case tests section --> + + <xsl:if test="count( $lib_corner_case_tests ) > 0"> + <tr> + <td class="library-corner-case-header" colspan="{count($ordered_toolsets/toolset) + 3 }" align="center">Corner-case tests</td> + </tr> + + <xsl:call-template name="insert_test_section"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="section_tests" select="$lib_corner_case_tests"/> + <xsl:with-param name="lib_tests" select="$lib_tests"/> + <xsl:with-param name="toolsets" select="$ordered_toolsets"/> + </xsl:call-template> + + </xsl:if> + + </tbody> + </table> + <xsl:if test="count( $library_marks/note ) > 0 "> + <table border="0" cellpadding="0" cellspacing="0" class="library-library-notes" summary="library notes"> + <xsl:for-each select="$library_marks/note"> + <tr class="library-library-note"> + <td valign="top" width="3em"> + <a name="{$library}-note-{position()}"> + <span class="super"><xsl:value-of select="position()"/></span> + </a> + </td> + <td> + <xsl:variable name="refid" select="@refid"/> + <xsl:call-template name="show_note"> + <xsl:with-param name="note" select="." /> + <xsl:with-param name="reference" select="$explicit_markup//note[ $refid = @id ]"/> + </xsl:call-template> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:if> + + <xsl:copy-of select="document( concat( 'html/library_', $mode, '_legend.html' ) )"/> + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + + </body> + </html> + + </exsl:document> + + </xsl:for-each> + + </xsl:template> + + + <!-- insert test result with log file link --> + + <xsl:template name="insert_test_result"> + <xsl:param name="result"/> + <xsl:param name="log_link"/> + + <xsl:choose> + <xsl:when test="$log_link != ''"> + <a href="{$log_link}" class="log-link" target="_top"> + <xsl:value-of select="$result"/> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$result"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- report developer status --> + <xsl:template name="insert_cell_developer"> + <xsl:param name="test_log"/> + <xsl:param name="log_link"/> + + <xsl:variable name="is_new"> + <xsl:if test="$test_log/@is-new = 'yes' and $test_log/@status = 'unexpected' and $test_log/@result != 'success'"> + <xsl:value-of select="'-new'"/> + </xsl:if> + </xsl:variable> + + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="not( $test_log )"> + <xsl:text>library-missing</xsl:text> + </xsl:when> + <xsl:when test="meta:is_unusable( $explicit_markup, $test_log/@library, $test_log/@toolset )"> + <xsl:text>library-unusable</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat( 'library-', $test_log/@result, '-', $test_log/@status, $is_new )"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}"> + <xsl:choose> + <xsl:when test="not( $test_log )"> + <xsl:text>missing</xsl:text> + </xsl:when> + + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'expected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'fail'"/> + <xsl:with-param name="log_link" select="$log_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'fail'"/> + <xsl:with-param name="log_link" select="$log_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result = 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$log_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:otherwise> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$log_link"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="count( $test_log ) > 1" > + <div class="library-conf-problem">conf. problem</div> + </xsl:if> + </td> + </xsl:template> + + <!-- report user status --> + <xsl:template name="insert_cell_user"> + <xsl:param name="test_log"/> + <xsl:param name="log_link"/> + + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="not( $test_log )"> + <xsl:text>library-missing</xsl:text> + </xsl:when> + <xsl:when test="meta:is_unusable( $explicit_markup, $test_log/@library, $test_log/@toolset )"> + <xsl:text>library-unusable</xsl:text> + </xsl:when> + <xsl:when test="$test_log[@result='fail' and @status='unexpected']"> + <xsl:text>library-user-fail-unexpected</xsl:text> + </xsl:when> + <xsl:when test="$test_log[ @result='fail' and @status='expected' ]"> + <xsl:text>library-user-fail-expected</xsl:text> + </xsl:when> + <xsl:when test="$test_log[ @result='success']"> + <xsl:text>library-user-success</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes"> + Unknown status + </xsl:message> + </xsl:otherwise> + </xsl:choose> + + </xsl:variable> + + <td class="{$class}"> + <xsl:choose> + <xsl:when test="not( $test_log )"> + missing + </xsl:when> + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'expected'"> + <a href="{$log_link}" class="log-link" target="_top"> + fail + </a> + </xsl:when> + <xsl:when test="$test_log/@result != 'success'"> + <a href="{$log_link}" class="log-link" target="_top"> + unexp. + </a> + </xsl:when> + <xsl:otherwise> + <xsl:text>pass</xsl:text> + </xsl:otherwise> + </xsl:choose> + + <xsl:if test="count( $test_log ) > 1" > + <div class="conf-problem">conf. problem</div> + </xsl:if> + </td> + </xsl:template> + + <xsl:template name="insert_test_line"> + <xsl:param name="library"/> + <xsl:param name="test_name"/> + <xsl:param name="test_results"/> + <xsl:param name="toolsets"/> + <xsl:param name="line_mod"/> + + <xsl:variable name="test_program"> + <xsl:value-of select="$test_results[1]/@test-program"/> + </xsl:variable> + + <xsl:variable name="test_header"> + <td class="test-name"> + <a href="../../../{$test_program}" class="test-link"> + <xsl:value-of select="$test_name"/> + </a> + </td> + </xsl:variable> + + <tr class="library-row{$line_mod}"> + <xsl:copy-of select="$test_header"/> + <xsl:call-template name="test_type_col"/> + + <xsl:for-each select="$toolsets/toolset"> + <xsl:variable name="toolset" select="@toolset" /> + + <!-- Write log file --> + <xsl:variable name="test_result_for_toolset" select="$test_results[ @toolset = $toolset ]"/> + + <xsl:variable name="log_file"> + <xsl:choose> + <xsl:when test="meta:show_output( $explicit_markup, $test_result_for_toolset )"> + <xsl:value-of select="meta:output_file_path( $test_result_for_toolset/@target-directory )"/> + </xsl:when> + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:if test="count( $test_result_for_toolset ) > 0 and $log_file != ''"> + <xsl:message>Writing log file document <xsl:value-of select="$log_file"/></xsl:message> + <exsl:document href="{$log_file}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <!--<title>Boost regression unresolved issues: <xsl:value-of select="$source"/></title>--> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="../toc.html" scrolling="auto"/> + <frame name="docframe" src="../../{$log_file}" scrolling="auto"/> + </frameset> + </html> + </exsl:document> + </xsl:if> + + <!-- Insert cell --> + <xsl:choose> + <xsl:when test="$mode='user'"> + <xsl:call-template name="insert_cell_user"> + <xsl:with-param name="test_log" select="$test_result_for_toolset"/> + <xsl:with-param name="log_link" select="$log_file"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$mode='developer'"> + <xsl:call-template name="insert_cell_developer"> + <xsl:with-param name="test_log" select="$test_result_for_toolset"/> + <xsl:with-param name="log_link" select="$log_file"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + + </xsl:for-each> + <xsl:copy-of select="$test_header"/> + </tr> + </xsl:template> + + <xsl:template name="insert_test_section"> + <xsl:param name="library"/> + <xsl:param name="section_tests"/> + <xsl:param name="lib_tests"/> + <xsl:param name="toolsets"/> + + <xsl:for-each select="$section_tests"> + <xsl:variable name="test_name" select="@test-name"/> + <xsl:variable name="line_mod"> + <xsl:choose> + <xsl:when test="1 = last()"> + <xsl:text>-single</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $section_tests[1] )"> + <xsl:text>-first</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $section_tests[last()] )"> + <xsl:text>-last</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:call-template name="insert_test_line"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="test_results" select="$lib_tests[ @test-name = $test_name ]"/> + <xsl:with-param name="toolsets" select="$toolsets"/> + <xsl:with-param name="test_name" select="$test_name"/> + <xsl:with-param name="line_mod" select="$line_mod"/> + </xsl:call-template> + </xsl:for-each> + + </xsl:template> + + <func:function name="meta:order_tests_by_name"> + <xsl:param name="tests"/> + + <xsl:variable name="a"> + <xsl:for-each select="$tests"> + <xsl:sort select="@test-name" order="ascending"/> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:variable> + <func:result select="exsl:node-set( $a )/*"/> + </func:function> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/summary_page.xsl b/tools/regression/xsl_reports/xsl/summary_page.xsl new file mode 100644 index 0000000000..7bf3818c29 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/summary_page.xsl @@ -0,0 +1,361 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="set str meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + + <xsl:param name="mode"/> + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="comment_file"/> + <xsl:param name="explicit_markup_file"/> + + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + + <!-- necessary indexes --> + <xsl:key + name="library_test_name_key" + match="test-log" + use="concat( @library, '>@<', @test-name )"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + <xsl:key name="test_name_key" match="test-log" use="@test-name "/> + + <!-- toolsets --> + + <xsl:variable name="toolsets" select="//test-log[ generate-id(.) = generate-id( key('toolset_key',@toolset)[1] ) and @toolset != '' ]/@toolset"/> + + <xsl:variable name="required_toolsets" select="$explicit_markup//mark-toolset[ @status='required' ]"/> + + <xsl:variable name="sorted_toolset_fragment"> + <xsl:call-template name="get_toolsets"> + <xsl:with-param name="toolsets" select="$toolsets"/> + <xsl:with-param name="required_toolsets" select="$required_toolsets"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="sorted_toolsets" select="exsl:node-set( $sorted_toolset_fragment )"/> + + <!-- libraries --> + + <xsl:variable name="test_case_logs" select="//test-log[ meta:is_test_log_a_test_case(.) ]"/> + <xsl:variable name="libraries" select="set:distinct( $test_case_logs/@library )"/> + + <xsl:variable name="sorted_libraries_output"> + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending" /> + <library><xsl:copy-of select="."/></library> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="sorted_libraries" select="exsl:node-set( $sorted_libraries_output )/library/@library"/> + + + <xsl:template match="/"> + + <xsl:variable name="summary_results" select="'summary_.html'"/> + + <!-- Summary page --> + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression summary: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc.html" scrolling="auto"/> + <frame name="docframe" src="{$summary_results}" scrolling="auto"/> + </frameset> + </html> + + <!-- Summary results --> + <xsl:message>Writing document <xsl:value-of select="$summary_results"/></xsl:message> + + <exsl:document href="{$summary_results}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <h1 class="page-title"> + <xsl:text>Summary: </xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <div class="report-info"> + <b>Report Time: </b> <xsl:value-of select="$run_date"/> + </div> + + <!-- summary table --> + + <table border="0" cellspacing="0" cellpadding="0" class="summary-table"> + + <thead> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="toolsets" select="$sorted_toolsets"/> + </xsl:call-template> + </thead> + + <tfoot> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="toolsets" select="$sorted_toolsets"/> + </xsl:call-template> + </tfoot> + + <tbody> + <xsl:variable name="test_logs" select="$test_case_logs"/> + + <!-- for each library --> + <xsl:for-each select="$sorted_libraries"> + <xsl:variable name="library" select="."/> + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + <xsl:variable name="current_row" select="$test_logs[ @library=$library]"/> + + <xsl:variable name="expected_test_count" select="count( $current_row[ generate-id(.) = generate-id( key('test_name_key',@test-name)[1] ) ] )"/> + <xsl:variable name="library_header"> + <td class="library-name"> + <a href="{$library_page}.html" class="library-link" target="_top"> + <xsl:value-of select="$library"/> + </a> + </td> + </xsl:variable> + + <xsl:variable name="line_mod"> + <xsl:choose> + <xsl:when test="1 = last()"> + <xsl:text>-single</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $sorted_libraries[1] )"> + <xsl:text>-first</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $sorted_libraries[ last() ] )"> + <xsl:text>-last</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <tr class="summary-row{$line_mod}"> + <xsl:copy-of select="$library_header"/> + + <xsl:for-each select="$sorted_toolsets/toolset"> + <xsl:variable name="toolset" select="@toolset"/> + <xsl:variable name="current_cell" select="$current_row[ @toolset=$toolset ]"/> + <xsl:choose> + <xsl:when test="$mode='user'"> + <xsl:call-template name="insert_cell_user"> + <xsl:with-param name="current_cell" select="$current_cell"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="expected_test_count" select="$expected_test_count"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$mode='developer'"> + <xsl:call-template name="insert_cell_developer"> + <xsl:with-param name="current_cell" select="$current_cell"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="expected_test_count" select="$expected_test_count"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:for-each> + + <xsl:copy-of select="$library_header"/> + </tr> + </xsl:for-each> + </tbody> + </table> + + <xsl:copy-of select="document( concat( 'html/summary_', $mode, '_legend.html' ) )"/> + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + + </body> + </html> + </exsl:document> + + </xsl:template> + + <!-- report developer status --> + <xsl:template name="insert_cell_developer"> + <xsl:param name="current_cell"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="expected_test_count"/> + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $library, $toolset )"> + <xsl:text>summary-unusable</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell ) < $expected_test_count"> + <xsl:text>summary-missing</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[@result='fail' and @status='unexpected' and @is-new='no'] )"> + <xsl:text>summary-fail-unexpected</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[@result='fail' and @status='unexpected' and @is-new='yes'] )"> + <xsl:text>summary-fail-unexpected-new</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[@result='success' and @status='unexpected'] )"> + <xsl:text>summary-success-unexpected</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[@status='expected'] )"> + <xsl:text>summary-expected</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>summary-unknown-status</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + + <td class="{$class}"> + <xsl:choose> + <xsl:when test="$class='summary-unusable'"> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>n/a</xsl:text> + </a> + </xsl:when> + <xsl:when test="$class='summary-missing'"> + <xsl:text>missing</xsl:text> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected'"> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>broken</xsl:text> + </a> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected-new' "> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>fail</xsl:text> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:text>OK</xsl:text> + </xsl:otherwise> + </xsl:choose> + </td> + + </xsl:template> + + + <!-- report user status --> + <xsl:template name="insert_cell_user"> + <xsl:param name="current_cell"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="expected_test_count"/> + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $library, $toolset )"> + <xsl:text>summary-unusable</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell ) < $expected_test_count"> + <xsl:text>summary-missing</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[@result='fail' and @status='unexpected' ] )"> + <xsl:text>summary-user-fail-unexpected</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[ @result='fail'] )"> + <xsl:text>summary-user-fail-expected</xsl:text> + </xsl:when> + <xsl:when test="count( $current_cell[ @result='success'] )"> + <xsl:text>summary-user-success</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>summary-unknown-status</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + + <td class="{$class}"> + <xsl:choose> + <xsl:when test="$class='summary-unusable'"> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>unusable</xsl:text> + </a> + </xsl:when> + + <xsl:when test="$class='summary-missing'"> + <xsl:text>missing</xsl:text> + </xsl:when> + + <xsl:when test="$class='summary-user-fail-unexpected'"> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>unexp.</xsl:text> + </a> + </xsl:when> + + <xsl:when test="$class='summary-user-fail-expected'"> + <a href="{$library_page}.html" class="log-link" target="_top"> + <xsl:text>details</xsl:text> + </a> + </xsl:when> + + <xsl:otherwise> + <xsl:text> </xsl:text> + </xsl:otherwise> + </xsl:choose> + </td> + + </xsl:template> + + <xsl:template name="insert_toolsets_row"> + <xsl:param name="toolsets"/> + <tr> + <td class="head">library / toolset</td> + + <xsl:for-each select="$toolsets/toolset"> + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="@required='yes'"> + <xsl:text>required-toolset-name</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>toolset-name</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}"><xsl:value-of select="meta:toolset_name( @toolset )"/></td> + </xsl:for-each> + + <td class="head">toolset / library</td> + </tr> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/test/test_re_match.xml b/tools/regression/xsl_reports/xsl/test/test_re_match.xml new file mode 100644 index 0000000000..3841f782d7 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/test/test_re_match.xml @@ -0,0 +1,57 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<root> + +<test pattern="" text="" result="true"/> +<test pattern="pattern" text="pattern" result="true"/> +<test pattern="" text="pattern" result="false"/> +<test pattern="pattern" text="" result="false"/> + +<test pattern="*" text="" result="true"/> +<test pattern="*" text="pattern" result="true"/> + +<test pattern="*pattern*" text="" result="false"/> +<test pattern="*pattern*" text="__pattern__" result="true"/> +<test pattern="*pattern*" text="pattern" result="true"/> +<test pattern="*pattern*" text="patter" result="false"/> +<test pattern="*pattern*" text="patte__" result="false"/> +<test pattern="*pattern*" text="attern" result="false"/> +<test pattern="*pattern*" text="__ttern" result="false"/> + +<test pattern="*pattern" text="" result="false"/> +<test pattern="*pattern" text="__pattern" result="true"/> +<test pattern="*pattern" text="pattern" result="true"/> +<test pattern="*pattern" text="pattern__" result="false"/> +<test pattern="*pattern" text="patter" result="false"/> +<test pattern="*pattern" text="patte__" result="false"/> +<test pattern="*pattern" text="attern" result="false"/> +<test pattern="*pattern" text="__ttern" result="false"/> + +<test pattern="pattern*" text="" result="false"/> +<test pattern="pattern*" text="pattern__" result="true"/> +<test pattern="pattern*" text="pattern" result="true"/> +<test pattern="pattern*" text="patter" result="false"/> +<test pattern="pattern*" text="__pattern" result="false"/> +<test pattern="pattern*" text="attern" result="false"/> +<test pattern="pattern*" text="patter_" result="false"/> +<test pattern="pattern*" text="patte__" result="false"/> + +<test pattern="patt*ern" text="" result="false"/> +<test pattern="patt*ern" text="patt__ern" result="true"/> +<test pattern="patt*ern" text="pattern" result="true"/> +<test pattern="patter*n" text="patter__n" result="true"/> +<test pattern="p*attern" text="pttern" result="false"/> +<test pattern="p*attern" text="pattern" result="true"/> +<test pattern="patter*n" text="patter" result="false"/> +<test pattern="p*attern" text="attern" result="false"/> +<test pattern="p*attern" text="p_ttern" result="false"/> + +</root> diff --git a/tools/regression/xsl_reports/xsl/test/test_re_match.xsl b/tools/regression/xsl_reports/xsl/test/test_re_match.xsl new file mode 100644 index 0000000000..eefd313166 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/test/test_re_match.xsl @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="str meta exsl" + version="1.0"> + + <func:function name="meta:re_match"> + <xsl:param name="pattern"/> + <xsl:param name="text"/> + + <xsl:choose> + <xsl:when test="not( contains( $pattern, '*' ) )"> + <func:result select="$text = $pattern"/> + </xsl:when> + <xsl:when test="$pattern = '*'"> + <func:result select="1 = 1"/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*' and substring( $pattern, string-length($pattern), 1 ) = '*' "> + <func:result select="contains( $text, substring( $pattern, 2, string-length($pattern) - 2 ) ) "/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*'"> + <xsl:variable name="pattern_tail" select="substring( $pattern, 2, string-length($pattern) - 1 )"/> + <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' "> + <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 1 )"/> + <func:result select="starts-with( $text, $pattern_head )"/> + </xsl:when> + <xsl:when test="contains( $pattern, '*' ) "> + <xsl:variable name="pattern_head" select="substring-before( $pattern, '*' )"/> + <xsl:variable name="pattern_tail" select="substring-after( $pattern, '*' )"/> + <func:result select="starts-with( $text, $pattern_head ) and substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + </xsl:choose> + </func:function> + + <xsl:template match='test'> + <xsl:variable name="result" select="meta:re_match( @pattern, @text )"/> + <xsl:variable name="expected-result" select="@result = 'true'"/> + <xsl:if test="$result != $expected-result"> + <failed regex="{@pattern}" text="{@text}" result="{$result}" expected-result="{$expected-result}"/> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl b/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl new file mode 100644 index 0000000000..11862a19d0 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2007. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:func="http://exslt.org/functions" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="func meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:param name="expected_results_file"/> + <xsl:param name="failures_markup_file"/> + <xsl:param name="source"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <func:function name="meta:is_test_log_complete"> + <xsl:param name="test_log"/> + <xsl:variable name="type" select="$test_log/@test-type"/> + <func:result> + <xsl:choose> + <xsl:when test="$type='compile' or $type='compile_fail' or $test_log/compile/@result='fail' "> + <xsl:value-of select="count( $test_log/compile ) = 1 and count( $test_log/link) = 0 and count( $test_log/run) = 0"/> + </xsl:when> + <xsl:when test="$type='link' or $type='link_fail' or $type='' or $type='lib' or $test_log/link/@result='fail'"> + <xsl:value-of select="count( $test_log/compile) = 1 and count( $test_log/link) = 1 and count( $test_log/run) = 0"/></xsl:when> + <xsl:when test="$type='run' or $type='run_fail' or $type='run_pyd'"> + <xsl:value-of select="count( $test_log/compile) = 1 and count( $test_log/link) = 1 and count($test_log/run) = 1 "/> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes"> + Unknown test type "<xsl:value-of select="$type"/>" + </xsl:message> + </xsl:otherwise> + </xsl:choose> + </func:result> + </func:function> + + + <xsl:key name = "trk" match = "test-result" use = "concat( ../../@name, '-', ../@name, '-', @test-name )" /> + <xsl:key name = "tak" match = "toolset-alias" use = "@name" /> + + <xsl:variable name="failures_markup" select="document( $failures_markup_file )" /> + <xsl:template match="/"> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:variable name="test_log" select="."/> + <xsl:variable name="library" select="@library"/> + <xsl:variable name="test-name" select="@test-name"/> + <xsl:variable name="toolset" select="@toolset"/> + + <xsl:variable name="is_complete" select="meta:is_test_log_complete( $test_log )"/> + + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + + <xsl:variable name="has_failures" select="./*/@result = 'fail'"/> + <xsl:variable name="actual_result"> + <xsl:choose> + <xsl:when test="$has_failures or not( $is_complete )" > + <xsl:text>fail</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>success</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- + Select expected_results context + See http://clover.slavic.pitt.edu/~repertorium/plectogram/keys/keys.html for a good explanation. + + Briefly, for-each doesn't iterate through expected_results, it just selects expected result + as current context to make "key" function work. + --> + + <xsl:for-each select="$expected_results"> + + <xsl:variable name="main_toolset" select="key( 'tak', $toolset )/../@name" /> + <xsl:variable name="toolset_name"> + <xsl:choose> + <xsl:when test="$main_toolset"><xsl:value-of select="$main_toolset"/></xsl:when> + <xsl:otherwise><xsl:value-of select="$toolset"/></xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="expected_results_test_case" select="key( 'trk', concat( $toolset_name, '-', $library, '-', $test-name ) )"/> + <xsl:variable name="test_case_markup" select="$failures_markup//library[@name=$library]/test[ meta:re_match( @name, $test-name ) ]"/> + <xsl:variable name="test_failures_markup" select="$test_case_markup/mark-failure/toolset[ meta:re_match( @name, $toolset ) ]/.."/> + <xsl:variable name="test_failures_markup2" select="$failures_markup//library[@name=$library]/mark-expected-failures/test[ meta:re_match( @name, $test-name ) ]/../toolset[ meta:re_match( @name, $toolset ) ]/.."/> + + <xsl:variable name="category"> + <xsl:choose> + <xsl:when test="$test_case_markup/@category"> + <xsl:value-of select="$test_case_markup/@category"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="is_new"> + <xsl:choose> + <xsl:when test="$expected_results_test_case"> + <xsl:text>no</xsl:text> + </xsl:when> + <xsl:otherwise>yes</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="has_explicit_markup" select="count( $test_failures_markup ) > 0 or count( $test_failures_markup2 ) > 0"/> + + <xsl:variable name="expected_result"> + <xsl:choose> + <xsl:when test="$has_explicit_markup"> + <xsl:text>fail</xsl:text> + </xsl:when> + + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$expected_results_test_case and $expected_results_test_case/@result = 'fail'"> + <xsl:text>fail</xsl:text> + </xsl:when> + <xsl:otherwise>success</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="status"> + <xsl:choose> + <xsl:when test="$expected_result = $actual_result">expected</xsl:when> + <xsl:otherwise>unexpected</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="unexpected_success" select="$status = 'unexpected' and $actual_result = 'success'"/> + + <xsl:variable name="expected_reason"> + <xsl:choose> + <xsl:when test="$test_failures_markup/@reason"> + <xsl:value-of select="$test_failures_markup/@reason"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$test_failures_markup2/@reason"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:variable name="notes"> + + <xsl:if test="$unexpected_success and $has_explicit_markup"> + <note> + <span class="auto-note"> + This test case was explicitly marked up in + <a href="http://svn.boost.org/svn/boost/{$source}/status/explicit-failures-markup.xml"> + status/explicit-failures-markup.xml</a> file in the Boost SVN as "expected to fail", + but is passing. Please consult the notes/output below for more details. + </span> + </note> + </xsl:if> + + <xsl:if test="$has_explicit_markup and count( $test_failures_markup2/note ) = 0 and count( $test_failures_markup/note ) = 0"> + <xsl:choose> + <xsl:when test="$unexpected_success"> + <note> + <span class="auto-note"> + No explanation was provided for this markup. Please contact the library + author(s)/maintainer(s) for more details. + </span> + </note> + </xsl:when> + <xsl:otherwise> + <note> + <span class="auto-note"> + This failure was explicitly marked as expected in + <a href="http://svn.boost.org/svn/boost/{$source}/status/explicit-failures-markup.xml"> + status/explicit-failures-markup.xml</a> file in the Boost SVN. + Please contact the library author(s)/maintainer(s) for the explanation of this markup. + </span> + </note> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="count( $test_failures_markup ) > 0"> + <xsl:for-each select="$test_failures_markup/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:if> + + <xsl:if test="count( $test_failures_markup2 ) > 0"> + <xsl:for-each select="$test_failures_markup2/note"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:if> + + + <xsl:if test="$expected_results_test_case and $expected_results_test_case/@result = 'fail'"> + <xsl:choose> + <xsl:when test="$unexpected_success"> + <note> + <span class="auto-note"> + This test case used to fail in the reference ("last-known-good") release. + </span> + </note> + </xsl:when> + <xsl:otherwise> + <note> + <span class="auto-note"> + This failure was present in the reference ("last-known-good") release. + </span> + </note> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="not( $is_complete ) and not( $has_failures )"> + <note> + <span class="internal-error-note"> + <b>[Reporting Tools Internal Error]</b> This test case's XML is missing one or more log entries + of the regression run's steps associated with the test case's type ("<xsl:value-of select="$test_log/@test-type"/>"). + Please <a href="mailto:mailto:boost-testing@lists.boost.org">contact reporting tools + maintainers</a> about this problem. + </span> + </note> + </xsl:if> + </xsl:variable> + + <xsl:attribute name="result"><xsl:value-of select="$actual_result"/></xsl:attribute> + <xsl:attribute name="expected-result"><xsl:value-of select="$expected_result"/></xsl:attribute> + <xsl:attribute name="expected-reason"><xsl:value-of select="$expected_reason"/></xsl:attribute> + <xsl:attribute name="status"><xsl:value-of select="$status"/></xsl:attribute> + <xsl:attribute name="is-new"><xsl:value-of select="$is_new"/></xsl:attribute> + <xsl:attribute name="category"><xsl:value-of select="$category"/></xsl:attribute> + <xsl:element name="notes"><xsl:copy-of select="$notes"/></xsl:element> + + <xsl:apply-templates select="$test_log/node()" /> + </xsl:for-each> + </xsl:element> + </xsl:template> + + <xsl:template match="*"> + <xsl:element name="{local-name()}"> + <xsl:apply-templates select="@*"/> + <xsl:apply-templates select="node()" /> + </xsl:element> + </xsl:template> + + <xsl:template match="@*"> + <xsl:copy-of select="." /> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl b/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl new file mode 100644 index 0000000000..009f0eb27c --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2007. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:func="http://exslt.org/functions" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="func meta" + version="1.0"> + +<xsl:output method="html" encoding="UTF-8"/> +<xsl:template match="/"> + <html> + <head> + <title>BoostBook build log for <xsl:value-of select="build/@timestamp"/></title> + <style> + span.failure { background-color: red; } + </style> + </head> + <body> + <xsl:apply-templates/> + </body> + </html> +</xsl:template> + <xsl:template match="build"> + <pre> + <xsl:apply-templates/> + </pre> + </xsl:template> + + <xsl:template match="line"> + <span class="{@type}"><xsl:value-of select="text()"/></span><br/> + </xsl:template> +</xsl:stylesheet>
\ No newline at end of file diff --git a/tools/regression/xsl_reports/xsl/v2/common.xsl b/tools/regression/xsl_reports/xsl/v2/common.xsl new file mode 100644 index 0000000000..2124f39980 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/common.xsl @@ -0,0 +1,668 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:date="http://exslt.org/dates-and-times" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="exsl func date str set meta" + version="1.0"> + + <xsl:variable name="output_directory" select="'output'"/> + + <!-- general --> + + <func:function name="meta:iif"> + <xsl:param name="condition"/> + <xsl:param name="if_true"/> + <xsl:param name="if_false"/> + + <xsl:choose> + <xsl:when test="$condition"> + <func:result select="$if_true"/> + </xsl:when> + <xsl:otherwise> + <func:result select="$if_false"/> + </xsl:otherwise> + </xsl:choose> + </func:function> + + <!-- structural --> + + <func:function name="meta:test_structure"> + <xsl:param name="document"/> + <xsl:param name="release"/> + <xsl:variable name="required_toolsets" select="$explicit_markup//mark-toolset[ @status='required' ]"/> + + <xsl:variable name="runs" select="$document//test-run"/> + <xsl:variable name="platforms" select="set:distinct( $document//test-run/@platform )"/> + + + <xsl:variable name="run_toolsets_f"> + <platforms> + <xsl:for-each select="$platforms"> + <xsl:sort select="."/> + <xsl:variable name="platform" select="."/> + <platform name="{$platform}"> + <runs> + <xsl:for-each select="$runs[ @platform = $platform ]"> + <xsl:sort select="@platform"/> + <run + runner="{@runner}" + timestamp="{@timestamp}" + platform="{@platform}" + run-type="{@run-type}" + source="{@source}" + revision="{@revision}"> + + <comment><xsl:value-of select="comment"/></comment> + <xsl:variable name="not_ordered_toolsets" select="set:distinct( .//test-log[ meta:is_test_log_a_test_case(.) and meta:show_toolset( @toolset, $release ) ]/@toolset ) "/> + + <xsl:variable name="not_ordered_toolsets_with_info_f"> + <xsl:for-each select="$not_ordered_toolsets"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="toolset" select="."/> + <xsl:variable name="required"> + <xsl:choose> + <xsl:when test="count( $required_toolsets[ @name = $toolset ] ) > 0">yes</xsl:when> + <xsl:otherwise>no</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="required_sort_hint"> + <xsl:choose> + <xsl:when test="$required = 'yes'">sort hint A</xsl:when> + <xsl:otherwise>sort hint B</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <toolset name="{$toolset}" required="{$required}" required_sort_hint="{$required_sort_hint}"/> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="not_ordered_toolsets_with_info" select="exsl:node-set( $not_ordered_toolsets_with_info_f )"/> + + <xsl:for-each select="$not_ordered_toolsets_with_info/toolset"> + <xsl:sort select="concat( @required_sort_hint, '-', @name )" order="ascending"/> + <xsl:copy-of select="."/> + </xsl:for-each> + </run> + </xsl:for-each> + </runs> + </platform> + </xsl:for-each> + </platforms> + </xsl:variable> + <func:result select="exsl:node-set( $run_toolsets_f )"/> + </func:function> + + + <func:function name="meta:test_case_status"> + <xsl:param name="explicit_markup"/> + <xsl:param name="test_log"/> + + <xsl:variable name="status"> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $test_log/@library, $test_log/@toolset )"> + <xsl:text>unusable</xsl:text> + </xsl:when> + <xsl:when test="$test_log/@result='fail' and $test_log/@status='unexpected' and $test_log/@is-new='no'"> + <xsl:text>fail-unexpected</xsl:text> + </xsl:when> + <xsl:when test="$test_log/@result='fail' and $test_log/@status='unexpected' and $test_log/@is-new='yes'"> + <xsl:text>fail-unexpected-new</xsl:text> + </xsl:when> + <xsl:when test="$test_log/@result='success' and $test_log/@status='unexpected'"> + <xsl:text>success-unexpected</xsl:text> + </xsl:when> + <xsl:when test="$test_log/@status='expected'"> + <xsl:text>expected</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>other</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <func:result select="$status"/> + </func:function> + + <func:function name="meta:is_toolset_required"> + <xsl:param name="toolset"/> + <func:result select="count( $explicit_markup/explicit-failures-markup/mark-toolset[ @name = $toolset and @status='required' ] ) > 0"/> + </func:function> + + <func:function name="meta:is_library_beta"> + <xsl:param name="library"/> + <func:result select="count( $explicit_markup/explicit-failures-markup/library[ @name = $library and @status='beta' ] ) > 0"/> + </func:function> + + <func:function name="meta:is_test_log_a_test_case"> + <xsl:param name="test_log"/> + <xsl:variable name="type" select="$test_log/@test-type"/> + <func:result select="$type='compile' or $type='compile_fail' or $type='link' or $type='link_fail' + or $type='run' or $type='run_fail' or $type='run_pyd'"/> + </func:function> + + + <func:function name="meta:is_unusable_"> + <xsl:param name="explicit_markup"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + + <func:result select="count( $explicit_markup//library[ @name = $library ]/mark-unusable/toolset[ meta:re_match( @name, $toolset ) ] ) > 0"/> + </func:function> + + <func:function name="meta:is_unusable"> + <xsl:param name="explicit_markup"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + + <func:result select="count( $explicit_markup//library[ @name = $library ]/mark-unusable/toolset[ meta:re_match( @name, $toolset ) ] ) > 0"/> + </func:function> + + <func:function name="meta:re_match"> + <xsl:param name="pattern"/> + <xsl:param name="text"/> + + <xsl:choose> + <xsl:when test="not( contains( $pattern, '*' ) )"> + <func:result select="$text = $pattern"/> + </xsl:when> + <xsl:when test="$pattern = '*'"> + <func:result select="1 = 1"/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*' and substring( $pattern, string-length($pattern), 1 ) = '*' "> + <func:result select="contains( $text, substring( $pattern, 2, string-length($pattern) - 2 ) ) "/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*'"> + <xsl:variable name="pattern_tail" select="substring( $pattern, 2, string-length($pattern) - 1 )"/> + <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' "> + <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 1 )"/> + <func:result select="starts-with( $text, $pattern_head )"/> + </xsl:when> + <xsl:when test="contains( $pattern, '*' ) "> + <xsl:variable name="pattern_head" select="substring-before( $pattern, '*' )"/> + <xsl:variable name="pattern_tail" select="substring-after( $pattern, '*' )"/> + <func:result select="starts-with( $text, $pattern_head ) and substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + </xsl:choose> + </func:function> + + <!-- date-time --> + + <func:function name="meta:timestamp_difference"> + <xsl:param name="x"/> + <xsl:param name="y"/> + + <xsl:variable name="duration" select="date:difference( $x, $y )"/> + <xsl:choose> + <xsl:when test="contains( $duration, 'D' )"> + <xsl:variable name="days" select="substring-before( $duration, 'D' )"/> + <func:result select="substring-after( $days, 'P' )"/> + </xsl:when> + <xsl:otherwise> + <func:result select="0"/> + </xsl:otherwise> + </xsl:choose> + + </func:function> + + <func:function name="meta:format_timestamp"> + <xsl:param name="timestamp"/> + <xsl:choose> + <xsl:when test="date:date( $timestamp ) = ''"> + <func:result select="$timestamp"/> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="time" select="substring-before( date:time( $timestamp ), 'Z' )"/> + <xsl:variable name="day" select="date:day-in-month( $timestamp )"/> + <xsl:variable name="day_abbrev" select="date:day-abbreviation( $timestamp )"/> + <xsl:variable name="month_abbrev" select="date:month-abbreviation( $timestamp )"/> + <xsl:variable name="year" select="date:year( $timestamp )"/> + <func:result select="concat( $day_abbrev, ', ', $day, ' ', $month_abbrev, ' ', $year, ' ', $time, ' +0000' )"/> + </xsl:otherwise> + </xsl:choose> + + </func:function> + + <!-- path --> + + <func:function name="meta:encode_path"> + <xsl:param name="path"/> + <func:result select="translate( translate( $path, '/', '-' ), './', '-' )"/> + </func:function> + + <func:function name="meta:output_file_path"> + <xsl:param name="path"/> + <func:result select="concat( $output_directory, '/', meta:encode_path( $path ), '.html' )"/> + </func:function> + + <func:function name="meta:log_file_path"> + <xsl:param name="test_log"/> + <xsl:param name="runner"/> + <xsl:param name="release_postfix" select="''"/> + <func:result> + <xsl:choose> + <xsl:when test="meta:show_output( $explicit_markup, $test_log )"> + <xsl:value-of select="meta:output_file_path( concat( $runner, '-', $test_log/@target-directory, $release_postfix ) )"/> + </xsl:when> + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + </func:result> + </func:function> + + <!-- presentation --> + + <func:function name="meta:show_library"> + <xsl:param name="library"/> + <xsl:param name="release" select="'no'"/> + <func:result select="$release != 'yes' or not( meta:is_library_beta( $library ) )"/> + </func:function> + + <func:function name="meta:show_output"> + <xsl:param name="explicit_markup"/> + <xsl:param name="test_log"/> + <func:result select="( $test_log/@result != 'success' or $test_log/@show-run-output = 'true' or + $test_log/@result = 'success' and $test_log/@status = 'unexpected' ) + and not( meta:is_unusable( $explicit_markup, $test_log/@library, $test_log/@toolset ) ) + "/> + </func:function> + + <func:function name="meta:show_toolset"> + <xsl:param name="toolset"/> + <xsl:param name="release" select="'no'"/> + <func:result select="$release != 'yes' or meta:is_toolset_required( $toolset )"/> + </func:function> + + <func:function name="meta:result_cell_class"> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="test_logs"/> + + <func:result> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $library, $toolset )"> + <xsl:text>unusable</xsl:text> + </xsl:when> + + <xsl:when test="count( $test_logs ) < 1"> + <xsl:text>missing</xsl:text> + </xsl:when> + + <xsl:when test="count( $test_logs[@result='fail' and @status='unexpected' and @is-new='no'] )"> + <xsl:text>fail-unexpected</xsl:text> + </xsl:when> + + <xsl:when test="count( $test_logs[@result='fail' and @status='unexpected' and @is-new='yes'] )"> + <xsl:text>fail-unexpected-new</xsl:text> + </xsl:when> + + + <xsl:when test="count( $test_logs[@result='fail' and @expected-reason != '' ] )"> + <xsl:text>fail-expected-unresearched</xsl:text> + </xsl:when> + + <xsl:when test="count( $test_logs[@result='fail'] )"> + <xsl:text>fail-expected</xsl:text> + </xsl:when> + + + <xsl:when test="count( $test_logs[@result='success' and @status='unexpected'] )"> + <xsl:text>success-unexpected</xsl:text> + </xsl:when> + + <xsl:when test="count( $test_logs[@status='expected'] )"> + <xsl:text>success-expected</xsl:text> + </xsl:when> + + <xsl:otherwise> + <xsl:text>unknown</xsl:text> + </xsl:otherwise> + </xsl:choose> + </func:result> + </func:function> + + <xsl:template name="insert_report_header"> + <xsl:param name="run_date"/> + <xsl:param name="warnings"/> + <xsl:param name="purpose"/> + + <div class="report-info"> + <div> + <b>Report Time: </b> <xsl:value-of select="meta:format_timestamp( $run_date )"/> + </div> + + <xsl:if test="$purpose"> + <div> + <b>Purpose: </b> <xsl:value-of select="$purpose"/> + </div> + </xsl:if> + + <xsl:if test="$warnings"> + <xsl:for-each select="str:split( $warnings, '+' )"> + <div class="report-warning"> + <b>Warning: </b> + <a href="mailto:boost-testing@lists.boost.org?subject=[Report Pages] {.} ({meta:format_timestamp( $run_date )})" class="warning-link"> + <xsl:value-of select="."/> + </a> + </div> + </xsl:for-each> + </xsl:if> + + </div> + + </xsl:template> + + + <xsl:template name="insert_view_link"> + <xsl:param name="page"/> + <xsl:param name="release"/> + <xsl:param name="class"/> + + <xsl:choose> + <xsl:when test="$release='yes'"> + <a href="{$page}.html" class="{$class}" target="_top"> + <xsl:text>Full View</xsl:text> + </a> + </xsl:when> + <xsl:otherwise> + <a href="{$page}_release.html" class="{$class}" target="_top"> + <xsl:text>Release View</xsl:text> + </a> + </xsl:otherwise> + </xsl:choose> + + </xsl:template> + + + <xsl:template name="insert_page_links"> + <xsl:param name="page"/> + <xsl:param name="release"/> + <xsl:param name="mode"/> + + <div class="links"> + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + <xsl:text> | </xsl:text> + <xsl:call-template name="insert_view_link"> + <xsl:with-param name="page" select="$page"/> + <xsl:with-param name="class" select="''"/> + <xsl:with-param name="release" select="$release"/> + </xsl:call-template> + + <xsl:variable name="release_postfix"> + <xsl:if test="$release='yes'">_release</xsl:if> + </xsl:variable> + + <xsl:text> | </xsl:text> + <a href="../{$mode}/{$page}{$release_postfix}.html" class="view-link" target="_top"> + <xsl:value-of select="$mode"/><xsl:text> View</xsl:text> + </a> + + <xsl:text> | </xsl:text> + <a href="{$page}{$release_postfix}_.html#legend"> + <xsl:text>Legend</xsl:text> + </a> + + </div> + + </xsl:template> + + + <xsl:template name="insert_runners_rows"> + <xsl:param name="mode"/> + <xsl:param name="top_or_bottom"/> + <xsl:param name="run_toolsets"/> + <xsl:param name="run_date"/> + + <xsl:variable name="colspan"> + <xsl:choose> + <xsl:when test="$mode = 'summary'">1</xsl:when> + <xsl:when test="$mode = 'details'">2</xsl:when> + </xsl:choose> + </xsl:variable> + + + <xsl:if test="$top_or_bottom = 'top'"> + <tr> + <td colspan="{$colspan}"> </td> + <xsl:for-each select="$run_toolsets/platforms/platform"> + <xsl:if test="count(./runs/run/toolset) > 0"> + <td colspan="{count(./runs/run/toolset)}" class="runner"> + <xsl:value-of select="@name"/> + </td> + </xsl:if> + </xsl:for-each> + <td colspan="{$colspan}"> </td> + </tr> + </xsl:if> + + <tr> + <td colspan="{$colspan}"> </td> + <xsl:for-each select="$run_toolsets//runs/run[ count(toolset) > 0 ]"> + <td colspan="{count(toolset)}" class="runner"> + <a href="../{@runner}.html"> + <xsl:value-of select="@runner"/> + </a> + </td> + </xsl:for-each> + <td colspan="{$colspan}"> </td> + </tr> + + <tr> + <td colspan="{$colspan}"> </td> + <xsl:for-each select="$run_toolsets//runs/run[ count(toolset) > 0 ]"> + <td colspan="{count(toolset)}" class="revision"> + rev <xsl:value-of select="@revision"/> + </td> + </xsl:for-each> + <td colspan="{$colspan}"> </td> + </tr> + + <tr> + <td colspan="{$colspan}"> </td> + <xsl:for-each select="$run_toolsets//runs/run[ count(toolset) > 0 ]"> + <xsl:variable name="timestamp_diff" select="meta:timestamp_difference( @timestamp, $run_date )"/> + <xsl:variable name="age" select="meta:iif( $timestamp_diff < 30, $timestamp_diff, 30 )"/> + <td colspan="{count(toolset)}" class="timestamp"> + <span class="timestamp-{$age}"><xsl:value-of select="meta:format_timestamp( @timestamp )"/></span> + <xsl:if test="@run-type != 'full'"> + <span class="run-type-{@run-type}"><xsl:value-of select="substring( @run-type, 1, 1 )"/></span> + </xsl:if> + </td> + </xsl:for-each> + <td colspan="{$colspan}"> </td> + </tr> + + <xsl:if test="$top_or_bottom = 'bottom'"> + <tr> + <td colspan="{$colspan}"> </td> + <xsl:for-each select="$run_toolsets/platforms/platform"> + <xsl:if test="count(./runs/run/toolset) > 0"> + <td colspan="{count(./runs/run/toolset)}" class="runner"> + <xsl:value-of select="@name"/> + </td> + </xsl:if> + </xsl:for-each> + <td colspan="{$colspan}"> </td> + </tr> + </xsl:if> + + </xsl:template> + + <xsl:template name="insert_toolsets_row"> + <xsl:param name="mode"/> + <xsl:param name="library"/> + <xsl:param name="library_marks"/> + <xsl:param name="run_date"/> + + <tr valign="middle"> + <xsl:variable name="colspan"> + <xsl:choose> + <xsl:when test="$mode = 'summary'">1</xsl:when> + <xsl:when test="$mode = 'details'">2</xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="title"> + <xsl:choose> + <xsl:when test="$mode = 'summary'"> library / toolset </xsl:when> + <xsl:when test="$mode = 'details'"> test / toolset </xsl:when> + </xsl:choose> + </xsl:variable> + + <td class="head" colspan="{$colspan}" width="1%"><xsl:value-of select="$title"/></td> + + + <xsl:for-each select="$run_toolsets//runs/run/toolset"> + <xsl:variable name="toolset" select="@name"/> + + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="@required='yes'"> + <xsl:text>required-toolset-name</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>toolset-name</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}"> + <xsl:variable name="age" select="meta:timestamp_difference( ../@timestamp, $run_date )"/> + <span class="timestamp-{$age}"> + + <!-- break toolset names into words --> + <xsl:for-each select="str:tokenize($toolset, '-')"> + <xsl:value-of select="." /> + <xsl:if test="position()!=last()"> + <xsl:text>- </xsl:text> + </xsl:if> + </xsl:for-each> + + <xsl:if test="$mode = 'details'"> + <!-- prepare toolset notes --> + <xsl:variable name="toolset_notes_fragment"> + <xsl:for-each select="$library_marks/note"> + <xsl:if test="count( ../toolset[meta:re_match( @name, $toolset )] ) > 0"> + <note index="{position()}"/> + </xsl:if> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="toolset_notes" select="exsl:node-set( $toolset_notes_fragment )/*"/> + <xsl:if test="count( $toolset_notes ) > 0"> + <span class="super"> + <xsl:for-each select="$toolset_notes"> + <xsl:variable name="note_index" select="@index"/> + <xsl:if test="generate-id( . ) != generate-id( $toolset_notes[1] )">, </xsl:if> + <a href="#{$library}-note-{$note_index}" title="Note {$note_index}"> + <xsl:value-of select="$note_index"/> + </a> + </xsl:for-each> + </span> + </xsl:if> + </xsl:if> + + </span> + </td> + </xsl:for-each> + + <td class="head" width="1%"><xsl:value-of select="$title"/></td> + </tr> + </xsl:template> + + <xsl:template name="show_notes"> + <xsl:param name="explicit_markup"/> + <xsl:param name="notes"/> + <div class="notes"> + <xsl:for-each select="$notes"> + <div> + <xsl:variable name="ref_id" select="@refid"/> + <xsl:call-template name="show_note"> + <xsl:with-param name="note" select="."/> + <xsl:with-param name="references" select="$ref_id"/> + </xsl:call-template> + </div> + </xsl:for-each> + </div> + </xsl:template> + + <xsl:template name="show_note"> + <xsl:param name="note"/> + <xsl:param name="references"/> + + <div class="note"> + <xsl:variable name="author"> + <xsl:choose> + <xsl:when test="$note/@author"> + <xsl:value-of select="$note/@author"/> + </xsl:when> + <xsl:otherwise> + <xsl:text/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="date"> + <xsl:choose> + <xsl:when test="$note/@date"> + <xsl:value-of select="$note/@date"/> + </xsl:when> + <xsl:otherwise> + <xsl:text/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <span class="note-header"> + <xsl:choose> + <xsl:when test="$author != '' and $date != ''"> + [ <xsl:value-of select="$author"/> <xsl:value-of select="$date"/> ] + </xsl:when> + <xsl:when test="$author != ''"> + [ <xsl:value-of select="$author"/> ] + </xsl:when> + <xsl:when test="$date != ''"> + [ <xsl:value-of select="$date"/> ] + </xsl:when> + </xsl:choose> + </span> + + <xsl:if test="$references"> + <!-- lookup references (refid="17,18") --> + <xsl:for-each select="str:tokenize($references, ',')"> + <xsl:variable name="ref_id" select="."/> + <xsl:variable name="referenced_note" select="$explicit_markup//note[ $ref_id = @id ]"/> + + <xsl:choose> + <xsl:when test="$referenced_note"> + <xsl:copy-of select="$referenced_note/node()"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$ref_id"/> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </xsl:if> + + <xsl:copy-of select="$note/node()"/> + + </div> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl b/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl new file mode 100644 index 0000000000..b9058e35d0 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2006. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:meta="http://www.meta-comm.com" + exclude-result-prefixes="meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:template match="/"> + <xsl:for-each select="expected-failures/toolset"> + <xsl:sort select="@name"/> + <xsl:value-of select="@name"/> + <xsl:if test="count(./toolset-alias)"> + <xsl:text> aka </xsl:text> + <xsl:for-each select="toolset-alias"> + <xsl:sort select="@name"/> + <xsl:value-of select="@name"/> + <xsl:text> </xsl:text> + </xsl:for-each> + </xsl:if> +<xsl:text> +</xsl:text> + </xsl:for-each> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/expected_to_1_33_format.xsl b/tools/regression/xsl_reports/xsl/v2/expected_to_1_33_format.xsl new file mode 100644 index 0000000000..71f33d2c1c --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/expected_to_1_33_format.xsl @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:set="http://exslt.org/sets" + extension-element-prefixes="set" + version="1.0"> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:template match="/"> + <expected-failures> + <xsl:variable name="toolsets" select="set:distinct(//test-result/@toolset)"/> + <xsl:for-each select="$toolsets"> + <xsl:variable name="toolset" select="."/> + <toolset name="{$toolset}"> + <xsl:variable name="toolset_test_cases" select="//test-result[@toolset = $toolset]"/> + <xsl:variable name="libraries" select="set:distinct($toolset_test_cases/@library)"/> + <xsl:for-each select="$libraries"> + <xsl:variable name="library" select="."/> + <library name="{$library}"> + <xsl:variable name="test_results" select="$toolset_test_cases[@library = $library]"/> + <xsl:for-each select="$test_results"> + <xsl:variable name="test_result" select="."/> + <test-result test-name="{$test_result/@test-name}" result="{$test_result/@result}"/> + </xsl:for-each> + </library> + </xsl:for-each> + </toolset> + </xsl:for-each> + </expected-failures> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html b/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html new file mode 100644 index 0000000000..6274048b55 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html @@ -0,0 +1,36 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> +<tr> + <td> + <table border="0" summary="legend"> + <tr> + <td> + <table width="100%" summary="unexpected new fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected-new"><toolset></td></tr> + </table> + </td> + <td class="legend-item">Failure on a newly added test/compiler.</td> + </tr> + <tr> + <td> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected"><toolset></td></tr> + </table> + </td> + <td class="legend-item">Unexpected failure.</td> + </tr> + </table> + </td> +</tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html b/tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html new file mode 100644 index 0000000000..009211ac19 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html @@ -0,0 +1,82 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="success legend"> + <tr class="library-row-single"><td class="library-success-expected">pass</td></tr> + </table> + </td> + <td class="legend-explanation">Success.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected pass legend"> + <tr class="library-row-single"><td class="library-success-unexpected">pass</td></tr> + </table> + </td> + <td class="legend-explanation">Unexpected success; follow the link for more details.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="expected fail legend"> + <tr class="library-row-single"><td class="library-fail-expected">fail*</td></tr> + </table> + </td> + <td class="legend-explanation">Expected failure; follow the link for more details.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unusable legend"> + <tr class="library-row-single"><td class="library-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-explanation">The library author marked it as unusable on this particular platform/toolset.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unresearched legend"> + <tr class="library-row-single"><td class="library-fail-expected-unresearched">fail?</td></tr> + </table> + </td> + <td class="legend-explanation">Unsearched failure; follow the link for more details.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected new fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected-new">fail</td></tr> + </table> + </td> + <td class="legend-explanation">Failure on a newly added test/compiler.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected">fail</td></tr> + </table> + </td> + <td class="legend-explanation">Unexpected failure/regression.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + </td> + <td class="legend-explanation"></td> + </tr> +</table> +<hr/> +<table border="0" summary="report description"> + <tr> + <td><span class="run-type-incremental">i</span></td> + <td class="legend-explanation">An incremental run.</td> + </tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html b/tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html new file mode 100644 index 0000000000..bae1742e94 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html @@ -0,0 +1,89 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="success legend"> + <tr class="library-row-single"><td class="library-success-expected user-library-success-expected">pass</td></tr> + </table> + </td> + <td class="legend-explanation">The test successfully passes.</td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="expected fail legend"> + <tr class="library-row-single"><td class="library-fail-expected user-library-fail-expected"><u>fail*</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + A <b>known failure</b> that the library maintainers are aware about. Please follow the link to + find out how it affects the library's functionality. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unusable legend"> + <tr class="library-row-single"><td class="library-unusable user-library-unusable">unusable</td></tr> + </table> + </td> + <td class="legend-explanation"> + The library author marked it as <b>unusable</b> on this particular platform/toolset. Please + see the corresponding footnote. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unresearched legend"> + <tr class="library-row-single"><td class="library-fail-expected-unresearched user-library-fail-expected-unresearched"><u>fail?</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + An <b>unsearched failure</b>: the library maintainers are aware of it, but need help with + investigating/addressing it for future releases. Please follow the link to + access the details and find out how it affects library functionality. </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected new fail legend"> + <tr class="library-row-single"><td class="library-fail-unexpected-new user-library-fail-unexpected-new"><u>fail</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + A <b>new failure</b> on the test/compiler added in this release that hasn't been accounted for yet. + Please follow the link to access the details. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected fail legend"> + <tr class="library-row-single user-library-row-single"><td class="library-fail-unexpected"><u>fail</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + A <b>regression</b> comparing to the previous release. Please follow the link to + access the details. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + </td> + <td class="legend-explanation"></td> + </tr> +</table> +<hr/> +<table border="0" summary="report description"> + <tr> + <td><span class="run-type-incremental">i</span></td> + <td class="legend-explanation">An incremental run.</td> + </tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html b/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html new file mode 100644 index 0000000000..e57fb06a4f --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html @@ -0,0 +1,22 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<span> +<script type="text/javascript"> +<!-- +function make_tinyurl() +{ + window.open( 'http://tinyurl.com/create.php?url=' + parent.location.href ); +} +//--> +</script> + +<a href="javascript:make_tinyurl()">TinyUrl</a> +</span> diff --git a/tools/regression/xsl_reports/xsl/v2/html/master.css b/tools/regression/xsl_reports/xsl/v2/html/master.css new file mode 100644 index 0000000000..a6dc486b68 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/master.css @@ -0,0 +1,654 @@ +/* + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +*/ + +/* All reports */ + +body +{ + background-color: white; +} + +body.user-toc +{ + background-color: #f0f0f0; +} + +body.developer-toc +{ + background-color: #f0f5ff; +} + +span.super +{ + vertical-align: super; + font-size: 80%; + margin-left: 3pt; +} + +h1.page-title +{ + text-align: left; + text-transform: capitalize; + margin-top: 5pt; + margin-bottom: 10pt; +} + +img +{ + display: inline; +} + + a.hover-link:link +,a.hover-link:visited +,a.hover-link:active +{ + color: black; + text-decoration: none; +} + +a.hover-link:hover +{ + color: black; + text-decoration: underline; +} + + a.warning-link:link +,a.warning-link:visited +,a.warning-link:active +{ + color: red; + text-decoration: none; +} + +a.warning-link:hover +{ + color: red; + text-decoration: underline; +} + +a.view-link +{ + text-transform: capitalize; +} + +div.statistics +{ + width: 80%; + padding-bottom: 5pt; +} + +div.legend +{ + width: 80%; + background-color: #f5f5f5; + margin-top: 10pt; + margin-bottom: 10pt; +} + +div.comment +{ + width: 80%; + background-color: #f5f5f5; + padding-left: 10pt; + padding-right: 10pt; + padding-bottom: 10pt; +} + +div.links +{ + margin-top: 0pt; + margin-bottom: 0pt; +} + +table.header-table +{ + margin-left: 10pt; + margin-top: 20pt; + margin-bottom: 10pt; + width: 80%; +} + +td.header-item +{ + text-align: left; + vertical-align: top; + font-weight: bold; +} + +td.header-item-content +{ + padding-left: 20pt; + padding-bottom: 10pt; +} + +td.legend-item +{ + padding: 0pt; + width: 50pt; +} + +td.legend-explanation +{ + padding-left: 5pt; +} + +div.acknowledgement +{ + text-align: left; + margin-top: 10pt; + margin-left: 5pt; + margin-bottom: 10pt; +} + +div.report-info +{ + text-align: left; + margin-bottom: 10pt; + width: 80%; +} + +div.report-warning +{ + color: red; +} + +div.library-name +{ + margin-top: 20pt; + margin-bottom: 10pt; + text-align: left; + font-size: 125%; + font-weight: bold; +} + +span.run-type-incremental +{ + margin-left: 3pt; + padding-left: 1pt; + padding-right: 1pt; + background-color: yellow; +} + + span.timestamp-1 +,span.timestamp-2 +{ + color: #555555; +} + + span.timestamp-3 +,span.timestamp-4 +,span.timestamp-5 +,span.timestamp-6 +,span.timestamp-7 +{ + color: #999999; +} + + span.timestamp-8 +,span.timestamp-9 +,span.timestamp-10 +,span.timestamp-11 +,span.timestamp-12 +,span.timestamp-13 +,span.timestamp-14 +,span.timestamp-15 +,span.timestamp-16 +,span.timestamp-17 +,span.timestamp-18 +,span.timestamp-19 +,span.timestamp-20 +,span.timestamp-21 +,span.timestamp-22 +,span.timestamp-23 +,span.timestamp-24 +,span.timestamp-25 +,span.timestamp-26 +,span.timestamp-27 +,span.timestamp-28 +,span.timestamp-29 +,span.timestamp-30 +{ + color: #dddddd; +} + + +table.summary-table +,table.library-table +{ + border-collapse: collapse; + border: 2px solid black; + margin: 5px; +} + + table.summary-table td +,table.library-table td +{ + text-align: center; + border-left: 1px solid black; + border-right: 1px solid black; +} + + a.log-link:link +,a.log-link:visited +{ + color: black; +} + + a.log-link:active +,a.log-link:hover +,a.legend-link:link +,a.legend-link:visited +,a.legend-link:active +,a.legend-link:hover +{ + color: black; + text-decoration: underline; +} + +td.runner +{ + color: black; + font-weight: bold; + border-top: 1px solid black; + padding-left: 3pt; + padding-right: 3pt; + +} + +td.timestamp +{ + color: black; + border-bottom: 1px solid black; + padding-left: 3pt; + padding-right: 3pt; +} + + td.toolset-name +,td.required-toolset-name +{ + vertical-align: middle; + padding-left: 3pt; + padding-right: 3pt; + word-spacing: -3pt; +} + +td.required-toolset-name +{ + font-weight: bold; +} + +td.library-test-category-header +{ + border-top: 1px solid gray; +} + +tr.summary-row-first td +, tr.library-row-first td +{ + border-top: 1px solid gray; + border-bottom: 0px; +} + +tr.summary-row-last td +, tr.library-row-last td +{ + border-top: 0px; + border-bottom: 1px solid gray; +} + +tr.summary-row-single td +, tr.library-row-single td +{ + border-top: 1px solid gray; + border-bottom: 1px solid gray; +} + +tr.summary-row td +, tr.library-row td +{ + border-bottom: 0px; + border-top: 0px; +} + + td.library-success-expected +, td.summary-success-expected +, td.summary-fail-expected +, td.summary-unknown-status +, td.summary-fail-expected-unresearched +{ + width: 60pt; + text-align: center; + background-color: lightgreen; + border-left: 1px solid black; + border-right: 1px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + td.summary-unknown-status +{ + background-color: white; +} + + td.library-success-unexpected +,td.summary-success-unexpected +{ + width: 60pt; + text-align: center; + background-color: green; + color: white; + border: 0px; + padding-left: 2pt; + padding-right: 2pt; +} + + td.user-library-success-unexpected +, td.user-summary-success-unexpected +{ + background-color: lightgreen; + color: black; +} + + td.library-success-unexpected a.log-link:link +,td.library-success-unexpected a.log-link:visited +,td.library-success-unexpected a.log-link:active +,td.library-success-unexpected a.log-link:hover +{ + color: white; +} + + td.user-library-success-unexpected a.log-link:link +, td.user-library-success-unexpected a.log-link:visited +, td.user-library-success-unexpected a.log-link:active +, td.user-library-success-unexpected a.log-link:hover +{ + color: black; +} + + td.summary-unusable +, td.library-unusable +, td.library-fail-expected +{ + width: 60pt; + text-align: center; + background-color: silver; + color: black; + border: 0px; + padding-left: 2pt; + padding-right: 2pt; +} + + + tr.summary-row td.summary-fail-unexpected +,tr.summary-row-first td.summary-fail-unexpected +,tr.summary-row-last td.summary-fail-unexpected +,tr.summary-row-single td.summary-fail-unexpected +{ + width: 60pt; + text-align: center; + background-color: red; + color: black; + border: 2px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + td.summary-missing +, td.library-missing +{ + width: 60pt; + text-align: center; + background-color: white; + color: black; + border: 0px; + padding-left: 2pt; + padding-right: 2pt; +} + +td.library-fail-expected-unresearched +{ + width: 60pt; + text-align: center; + background-color: white; + color: black; + border: 1px solid black; + padding-left: 2pt; + padding-right: 2pt; +} + + + tr.summary-row-first td.summary-missing +, tr.summary-row-single td.summary-missing +, tr.library-row-first td.library-missing +, tr.library-row-single td.library-missing +{ + border-top: 1px solid black; +} + + tr.summary-row-last td.summary-missing +, tr.summary-row-single td.summary-missing +, tr.library-row-last td.library-missing +, tr.library-row-single td.library-missing +{ + border-bottom: 1px solid black; +} + + +/* Summary */ + +table.summary-table td.library-name +{ + width: 100pt; + padding-left: 6pt; + padding-right: 6pt; + border-top: 1px solid gray; + border-bottom: 1px solid gray; + text-align: left; +} + + tr.summary-row td.summary-fail-unexpected-new +, tr.summary-row-first td.summary-fail-unexpected-new +, tr.summary-row-last td.summary-fail-unexpected-new +, tr.summary-row-single td.summary-fail-unexpected-new + +, tr.library-row td.library-fail-unexpected-new +, tr.library-row-first td.library-fail-unexpected-new +, tr.library-row-last td.library-fail-unexpected-new +, tr.library-row-single td.library-fail-unexpected-new + +, tr.summary-row td.user-summary-fail-expected-unresearched +, tr.summary-row-first td.user-summary-fail-expected-unresearched +, tr.summary-row-last td.user-summary-fail-expected-unresearched +, tr.summary-row-single td.user-summary-fail-expected-unresearched + +, tr.library-row td.user-library-fail-expected-unresearched +, tr.library-row-first td.user-library-fail-expected-unresearched +, tr.library-row-last td.user-library-fail-expected-unresearched +, tr.library-row-single td.user-library-fail-expected-unresearched +{ + width: 60pt; + text-align: center; + background-color: yellow; + color: black; + border: 2px solid black; +} + +/* Detailed */ + +.library-conf-problem +{ + font-size: 70%; + font-weight: normal; +} + +div.library-toc +{ + margin: 5pt; +} + + +li.library-toc-entry +{ + margin-left: 5pt; + list-style-type: square; +} + + +div.library-footer +{ + margin: 5px; +} + + +table.library-table td.test-name +{ + width: 150pt; + padding-left: 6pt; + padding-right: 6pt; + border-right: 0; + border-top: 1px solid gray; + border-bottom: 1px solid gray; + text-align: left; +} + +table.library-table td.test-type +{ + padding-right: 5px; + border-left: 0; + border-right: 0; + border-top: 1px solid gray; + border-bottom: 1px solid gray; + text-align: right; +} + + tr.library-row td.library-fail-unexpected +, tr.library-row-first td.library-fail-unexpected +, tr.library-row-last td.library-fail-unexpected +, tr.library-row-single td.library-fail-unexpected +{ + width: 60pt; + text-align: center; + background-color: red; + font-weight: bold; + color: black; + border: 2px solid black; +} + +table.library-library-notes +{ + background-color: LemonChiffon; + width: 80%; + margin-left: 5px; + margin-right: 5px; +} + +tr.library-library-note +{ +} + +div.note +{ + padding: 3pt; +} + +span.note-header +{ + font-weight: bold; +} + +span.auto-note +{ + font-style: italic; +} + +span.internal-error-note +{ + color: red; +} + +/* Log */ + +div.log-test-title +{ + font-size: 1.5em; + font-weight: bold; +} + +div.log-test-header +{ + border-bottom: 1px solid black; + margin-bottom: 5pt; +} + +div.notes-title +{ + font-weight: bold; + background-color: #ffffcc; +} + +div.notes +{ + padding: 3pt; + background-color: #ffffcc; +} + +div.notes-title +{ + font-weight: bold; +} + +div.log-compiler-output-title +{ + font-weight: bold; +} + +div.log-linker-output-title +{ + font-weight: bold; +} + +div.log-run-output-title +{ + font-weight: bold; +} + +span.output-fail +{ + color: red; +} + + +/* Issues page */ + +table.library-issues-table +{ + border-collapse: collapse; + border: 2px solid black; +} + +table.library-issues-table td +{ + border: 1px solid #c0c0c0; + text-align: center; + margin-right: 5px; +} + +table.library-issues-table td.failures-row +{ + text-align: left; + padding: 0px; +} + + table.issue-box tr.library-row-single td.library-fail-unexpected-new +,table.issue-box tr.library-row-single td.library-fail-unexpected +{ + border: 0px; + font-weight: normal; +} diff --git a/tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html b/tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html new file mode 100644 index 0000000000..b85a6403fa --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html @@ -0,0 +1,72 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="success legend"> + <tr class="summary-row-single"><td class="summary-success-expected">OK</td></tr> + </table> + </td> + <td class="legend-explanation"> + All expected tests pass. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected pass legend"> + <tr class="summary-row-single"><td class="summary-success-unexpected">OK</td></tr> + </table> + </td> + <td class="legend-explanation"> + All expected tests pass, and some other tests that were expected to fail + unexpectedly pass as well. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected new fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected-new">fail</td></tr> + </table> + </td> + <td class="legend-explanation"> + There are some failures on the newly added tests/compiler(s). + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected">broken</td></tr> + </table> + </td> + <td class="legend-explanation"> + Tests that the library author expects to pass are currently failing. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unusable legend"> + <tr class="summary-row-single"><td class="summary-unusable">n/a</td></tr> + </table> + </td> + <td class="legend-explanation"> + The library author marked it as unusable on particular platform/toolset. + </td> + </tr> +</table> +<hr/> +<table border="0" summary="report description" id="Table1"> + <tr> + <td><span class="run-type-incremental">i</span></td> + <td class="legend-explanation">An incremental run.</td> + </tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html b/tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html new file mode 100644 index 0000000000..1fbf68a4cd --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html @@ -0,0 +1,76 @@ +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<div class="legend"> +<table border="0" summary="report description"> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="success legend"> + <tr class="summary-row-single"><td class="summary-success-expected user-summary-success-expected"> pass </td></tr> + </table> + </td> + <td class="legend-explanation"> + All library's tests pass. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="expected fail legend"> + <tr class="summary-row-single"><td class="summary-fail-expected user-summary-fail-expected"><u>details</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + Most of the library's tests pass, but there are some <b>known failures</b> which might affect the library's + functionality. Please follow the link to see the detailed report. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected new fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected-new user-summary-fail-unexpected-new"><u>details</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + Some of the <b>newly added</b> library's tests fail, or some of the library's tests fail on + the <b>newly added compiler</b>, or some of the tests fail due to <b>unresearched + reasons</b>. Please follow the link to see the detailed report. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unexpected fail legend"> + <tr class="summary-row-single"><td class="summary-fail-unexpected user-summary-fail-unexpected"><u>regress.</u></td></tr> + </table> + </td> + <td class="legend-explanation"> + There are some <b>regressions</b> in the library comparing to the previous release. + Please follow the link to see the detailed report. + </td> + </tr> + <tr> + <td class="legend-item" width="50pt"> + <table width="100%" summary="unusable legend"> + <tr class="summary-row-single"><td class="summary-unusable user-summary-unusable">unusable</td></tr> + </table> + </td> + <td class="legend-explanation"> + The library author marked it as <b>unusable</b> on the particular platform/toolset. + Please follow the link to see the detailed report. + </td> + </tr> +</table> +<hr/> +<table border="0" summary="report description" id="Table1"> + <tr> + <td><span class="run-type-incremental">i</span></td> + <td class="legend-explanation">An incremental run.</td> + </tr> +</table> +</div> diff --git a/tools/regression/xsl_reports/xsl/v2/issues_page.xsl b/tools/regression/xsl_reports/xsl/v2/issues_page.xsl new file mode 100644 index 0000000000..d27dc782d2 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/issues_page.xsl @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:meta="http://www.meta-comm.com" + xmlns:set="http://exslt.org/sets" + extension-element-prefixes="func exsl" + exclude-result-prefixes="exsl set meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="warnings"/> + <xsl:param name="comment_file"/> + <xsl:param name="expected_results_file"/> + <xsl:param name="explicit_markup_file"/> + <xsl:param name="release"/> + + <!-- the author-specified expected test results --> + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <xsl:variable name="release_postfix"> + <xsl:if test="$release='yes'"> + <xsl:text>_release</xsl:text> + </xsl:if> + </xsl:variable> + + <!-- necessary indexes --> + <xsl:key + name="test_name_key" + match="test-log" + use="concat( @library, '@', @test-name )"/> + + <xsl:key + name="library_key" + match="test-log" + use="@library"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + + <!-- toolsets --> + + <xsl:variable name="required_toolsets" select="$explicit_markup//mark-toolset[ @status='required' ]"/> + <xsl:variable name="required_toolset_names" select="$explicit_markup//mark-toolset[ @status='required' ]/@name"/> + + <!-- libraries --> + + <xsl:variable + name="failing_tests" + select="//test-log[@status='unexpected' and @result='fail' + and @toolset = $required_toolset_names + and meta:is_test_log_a_test_case(.) + and meta:show_library( @library, $release ) + and meta:show_toolset( @toolset, $release ) + and not (meta:is_unusable($explicit_markup, @library, + @toolset )) ]"/> + + <xsl:variable name="libraries" select="set:distinct( $failing_tests/@library )"/> + + <xsl:template match="/"> + <xsl:variable name="issues_list" + select="concat('issues', $release_postfix, '_.html')"/> + + <!-- Issues page --> + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression unresolved issues: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc{$release_postfix}.html" scrolling="auto"/> + <frame name="docframe" src="{$issues_list}" scrolling="auto"/> + </frameset> + </html> + + <!-- Issues list --> + <xsl:message>Writing document <xsl:value-of select="$issues_list"/></xsl:message> + + <exsl:document href="{$issues_list}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <h1 class="page-title"> + <xsl:text>Unresolved Issues: </xsl:text> + <a class="hover-link" href="summary{$release_postfix}.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <xsl:call-template name="insert_report_header"> + <xsl:with-param name="run_date" select="$run_date"/> + <xsl:with-param name="warnings" select="$warnings"/> + <xsl:with-param name="purpose" select="'Provides a list of current unresolved test failures.'"/> + </xsl:call-template> + + <!-- Emit the index --> + <h2>Libraries with unresolved failures</h2> + <div align="center"> + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="library" select="."/> + <a href="#{$library}"> + <xsl:value-of select="$library"/> + </a> + <xsl:text> </xsl:text> + </xsl:for-each> + </div> + + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="library" select="."/> + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + <xsl:variable name="library_tests" select="$failing_tests[@library = $library]"/> + <xsl:variable name="library_test_names" select="set:distinct( $library_tests/@test-name )"/> + + <h2> + <a name="{$library}"/> + <a class="hover-link" href="{$library_page}{$release_postfix}.html" target="_top"> + <xsl:value-of select="$library"/> + <xsl:text> (</xsl:text> + <xsl:value-of select="count($library_tests)"/> + <xsl:text> failure</xsl:text> + <xsl:if test="count($library_tests) > 1"> + <xsl:text>s</xsl:text> + </xsl:if> + <xsl:text>)</xsl:text> + </a> + </h2> + + <table class="library-issues-table" summary="issues"> + <thead> + <tr valign="middle"> + <td class="head">test</td> + <td class="head">failures</td> + </tr> + </thead> + <tfoot> + <tr valign="middle"> + <td class="head">test</td> + <td class="head">failures</td> + </tr> + </tfoot> + + <tbody> + <xsl:for-each select="$library_test_names"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="test_name" select="."/> + + <xsl:variable name="unexpected_toolsets" select="$library_tests[@test-name = $test_name]/@toolset"/> + + <xsl:variable name="test_program" select="$library_tests[@test-name = $test_name]/@test-program"/> + <tr> + <td class="test-name"> + <a href="http://svn.boost.org/svn/boost/{$source}/{$test_program}" class="test-link" target="_top"> + <xsl:value-of select="$test_name"/> + </a> + </td> + <td class="failures-row"> + <table summary="unexpected fail legend" class="issue-box"> + <tr class="library-row-single"> + <xsl:for-each select="$unexpected_toolsets"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="toolset" select="."/> + <xsl:variable name="test_logs" + select="$library_tests[@test-name = $test_name + and @toolset = $toolset]"/> + <xsl:for-each select="$test_logs"> + <xsl:call-template name="print_failure_cell"> + <xsl:with-param name="test_log" select="."/> + <xsl:with-param name="toolset" select="$toolset"/> + </xsl:call-template> + </xsl:for-each> + </xsl:for-each> + </tr> + </table> + </td> + </tr> + </xsl:for-each> + </tbody> + + </table> + </xsl:for-each> + <xsl:copy-of select="document( 'html/issues_legend.html' )"/> + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + </body> + </html> + </exsl:document> + + <xsl:message>Writing document issues-email.txt</xsl:message> + <exsl:document href="issues-email.txt" method="text" encoding="utf-8"> + <xsl:text>Boost regression test failures +------------------------------ +Report time: </xsl:text> + + <xsl:value-of select="$run_date"/> + + <xsl:text> + +This report lists all regression test failures on release platforms. + +Detailed report: + http://boost.org/regression/</xsl:text> + <xsl:value-of select="$source"/> + <xsl:text>/developer/issues.html + +</xsl:text> + <xsl:value-of select="count($failing_tests)"/> + <xsl:text> failure</xsl:text> + <xsl:if test="count($failing_tests) > 1"> + <xsl:text>s</xsl:text> + </xsl:if> + <xsl:text> in </xsl:text> + <xsl:value-of select="count($libraries)"/> + <xsl:text> librar</xsl:text> + <xsl:choose> + <xsl:when test="count($libraries) > 1"> + <xsl:text>ies</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>y</xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:text>: +</xsl:text> + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="library" select="."/> + <xsl:text> </xsl:text> + <xsl:value-of select="$library"/> + <xsl:text> (</xsl:text> + <xsl:value-of select="count($failing_tests[@library = $library])"/> + <xsl:text>) +</xsl:text> + </xsl:for-each> + + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="library" select="."/> + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + <xsl:variable name="library_tests" select="$failing_tests[@library = $library]"/> + <xsl:variable name="library_test_names" select="set:distinct( $library_tests/@test-name )"/> + + <xsl:text> +|</xsl:text> + <xsl:value-of select="$library"/> + <xsl:text>| +</xsl:text> + + <xsl:for-each select="$library_test_names"> + <xsl:sort select="." order="ascending"/> + <xsl:variable name="test_name" select="."/> + + <xsl:variable name="unexpected_toolsets" select="$library_tests[@test-name = $test_name]/@toolset"/> + + <xsl:variable name="test_program" select="$library_tests[@test-name = $test_name]/@test-program"/> + <xsl:text> </xsl:text> + <xsl:value-of select="$test_name"/> + <xsl:text>:</xsl:text> + <xsl:for-each select="$unexpected_toolsets"> + <xsl:sort select="." order="ascending"/> + <xsl:text> </xsl:text> + <xsl:value-of select="."/> + </xsl:for-each> + <xsl:text> +</xsl:text> + </xsl:for-each> + </xsl:for-each> + </exsl:document> + </xsl:template> + + <xsl:template name="print_failure_cell"> + <xsl:param name="test_log" select="."/> + <xsl:param name="toolset"/> + + <xsl:variable name="test_run" select="$test_log/.."/> + + <xsl:variable name="log_link"> + <xsl:value-of select="meta:log_file_path($test_log, $test_run/@runner, + $release_postfix )"/> + </xsl:variable> + <xsl:variable name="class"> + <xsl:choose> + <xsl:when test="$test_log/@is-new = 'yes'"> + <xsl:text>library-fail-unexpected-new</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>library-fail-unexpected</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}"> + <span> + <a href="{$log_link}" class="log-link" target="_top"> + <xsl:value-of select="$toolset"/> + </a> + </span> + </td> + </xsl:template> +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/links_page.xsl b/tools/regression/xsl_reports/xsl/v2/links_page.xsl new file mode 100644 index 0000000000..1aacd6c7c8 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/links_page.xsl @@ -0,0 +1,399 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2006. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:str="http://exslt.org/strings" + xmlns:set="http://exslt.org/sets" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl str set" + exclude-result-prefixes="meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="comment_file"/> + <xsl:param name="explicit_markup_file"/> + + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + <xsl:variable name="runner_id" select="test-run/@runner"/> + <xsl:variable name="revision" select="test-run/@revision"/> + <xsl:variable name="timestamp" select="test-run/@timestamp"/> + + <!-- runs / toolsets --> + <xsl:variable name="run_toolsets" select="meta:test_structure( /, 'no' )"/> + + <!-- libraries --> + <xsl:variable name="test_case_logs" select="//test-log[ meta:is_test_log_a_test_case(.) ]"/> + <xsl:variable name="libraries" select="set:distinct( $test_case_logs/@library )"/> + + <xsl:variable name="unusables_f"> + <xsl:for-each select="set:distinct( $run_toolsets//toolset/@name )"> + <xsl:variable name="toolset" select="."/> + <xsl:for-each select="$libraries"> + <xsl:variable name="library" select="."/> + <xsl:if test="meta:is_unusable_( $explicit_markup, $library, $toolset )"> + <unusable library-name="{$library}" toolset-name="{$toolset}"/> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="unusables" select="exsl:node-set( $unusables_f )"/> + + + <xsl:key + name="library-name_toolset-name_key" + match="unusable" + use="concat( @library-name, '>@<', @toolset-name )"/> + + + <!-- + Build a tree with the following structure: + + lib -> test -> toolsets -> test-log + --> + + <xsl:template match="/"> + <xsl:variable name="test_logs_to_show" select="//test-log"/> + <xsl:variable name="libs_test_test_log_tree" select="meta:restructure_logs( $test_logs_to_show )"/> + + <exsl:document href="debug.xml" + method="xml" + encoding="utf-8" + indent="yes"> + <debug> + <xsl:copy-of select="$libs_test_test_log_tree"/> + </debug> + </exsl:document> + + <xsl:for-each select="$libs_test_test_log_tree//toolset"> + <xsl:variable name="toolset" select="."/> + <xsl:variable name="library_name" select="$toolset/../../@name"/> + <xsl:variable name="test_name" select="$toolset/../@name"/> + <xsl:variable name="toolset_name" select="$toolset/@name"/> + <xsl:message>Processing test "<xsl:value-of select="$runner_id"/>/<xsl:value-of select="$library_name"/>/<xsl:value-of select="$test_name"/>/<xsl:value-of select="$toolset_name"/>"</xsl:message> + + <xsl:if test="count( $toolset/* ) > 1"> + <xsl:message> Processing variants</xsl:message> + + <xsl:variable name="variants_file_path" select="meta:output_file_path( concat( $runner_id, '-', $library_name, '-', $toolset_name, '-', $test_name, '-variants' ) )"/> + + <xsl:call-template name="write_variants_file"> + <xsl:with-param name="path" select="$variants_file_path"/> + <xsl:with-param name="test_logs" select="$toolset/*"/> + <xsl:with-param name="runner_id" select="$runner_id"/> + <xsl:with-param name="revision" select="$revision"/> + <xsl:with-param name="timestamp" select="$timestamp"/> + </xsl:call-template> + + <xsl:for-each select="str:tokenize( string( ' |_release' ), '|')"> + <xsl:variable name="release_postfix" select="translate(.,' ','')"/> + <xsl:for-each select="str:tokenize( string( 'developer|user' ), '|')"> + <xsl:variable name="directory" select="."/> + <xsl:variable name="variants__file_path" select="concat( $directory, '/', meta:encode_path( concat( $runner_id, '-', $library_name, '-', $toolset_name, '-', $test_name, '-variants_', $release_postfix ) ), '.html' )"/> + + <xsl:call-template name="write_variants_reference_file"> + <xsl:with-param name="path" select="$variants__file_path"/> + <xsl:with-param name="variants_file_path" select="concat( '../', $variants_file_path )"/> + <xsl:with-param name="release_postfix" select="$release_postfix"/> + </xsl:call-template> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + + <xsl:for-each select="./test-log"> + <xsl:message> Processing test-log</xsl:message> + <xsl:variable name="test_log" select="."/> + + <xsl:if test="meta:show_output( $explicit_markup, $test_log )"> + <xsl:variable name="log_file_path" select="meta:log_file_path( ., $runner_id )"/> + + <xsl:call-template name="write_test_result_file"> + <xsl:with-param name="path" select="$log_file_path"/> + <xsl:with-param name="test_log" select="$test_log"/> + <xsl:with-param name="runner_id" select="$runner_id"/> + <xsl:with-param name="revision" select="$revision"/> + <xsl:with-param name="timestamp" select="$timestamp"/> + </xsl:call-template> + + <xsl:for-each select="str:tokenize( string( ' |_release' ), '|')"> + <xsl:variable name="release_postfix" select="translate(.,' ','')"/> + <xsl:for-each select="str:tokenize( string( 'developer|user' ), '|')"> + <xsl:variable name="directory" select="."/> + + <xsl:variable name="reference_file_path" select="concat( $directory, '/', meta:log_file_path( $test_log, $runner_id, $release_postfix ) )"/> + <xsl:call-template name="write_test_results_reference_file"> + <xsl:with-param name="path" select="$reference_file_path"/> + <xsl:with-param name="log_file_path" select="$log_file_path"/> + </xsl:call-template> + </xsl:for-each> + </xsl:for-each> + </xsl:if> + + </xsl:for-each> + </xsl:for-each> + </xsl:template> + + <func:function name="meta:restructure_logs"> + <xsl:param name="test_logs"/> + <xsl:variable name="libs" select="set:distinct( $test_logs/@library )"/> + <xsl:variable name="fragment"> + <runner runner_id="{$test_logs[1]/../@runner}" revision="{$test_logs[1]/../@revision}" timestamp="{$test_logs[1]/../@timestamp}"> + <xsl:for-each select="$libs"> + <xsl:variable name="library_name" select="."/> + <xsl:variable name="library_test_logs" select="$test_logs[@library=$library_name]"/> + <library name="{$library_name}"> + <xsl:variable name="tests" select="set:distinct( $library_test_logs/@test-name )"/> + <xsl:for-each select="$tests"> + <xsl:variable name="test_name" select="."/> + <xsl:variable name="test_test_logs" select="$library_test_logs[@test-name=$test_name]"/> + <test name="{$test_name}" > + <xsl:variable name="toolsets" select="set:distinct( $test_test_logs/@toolset )"/> + <xsl:for-each select="$toolsets"> + <xsl:variable name="toolset" select="."/> + <xsl:variable name="toolset_test_logs" select="$test_test_logs[@toolset=$toolset]"/> + <toolset name="{$toolset}"> + <xsl:copy-of select="$toolset_test_logs"/> + </toolset> + </xsl:for-each> + </test> + </xsl:for-each> + </library> + </xsl:for-each> + </runner> + </xsl:variable> + <func:result select="exsl:node-set( $fragment )"/> + </func:function> + + <xsl:template name="write_variants_reference_file"> + <xsl:param name="path"/> + <xsl:param name="variants_file_path"/> + <xsl:param name="release_postfix"/> + + <xsl:message> Writing variants reference file <xsl:value-of select="$path"/></xsl:message> + <exsl:document href="{$path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <!-- <title>Boost regression: <xsl:value-of select="$library_name"/>/<xsl:value-of select="$source"/></title>--> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc{$release_postfix}.html" scrolling="auto"/> + <frame name="docframe" src="{$variants_file_path}" scrolling="auto"/> + </frameset> + </html> + </exsl:document> + + </xsl:template> + + <func:function name="meta:output_page_header"> + <xsl:param name="test_log"/> + <xsl:param name="runner_id"/> + <xsl:choose> + <xsl:when test="$test_log/@test-name != ''"> + <func:result select="concat( $runner_id, ' - ', $test_log/@library, ' - ', $test_log/@test-name, ' / ', $test_log/@toolset )"/> + </xsl:when> + <xsl:otherwise> + <func:result select="$test_log/@target-dir"/> + </xsl:otherwise> + </xsl:choose> + </func:function> + + + <xsl:template name="write_variants_file"> + <xsl:param name="path"/> + <xsl:param name="test_logs"/> + <xsl:param name="runner_id"/> + <xsl:param name="revision"/> + <xsl:param name="timestamp"/> + <xsl:message> Writing variants file <xsl:value-of select="$path"/></xsl:message> + <exsl:document href="{$path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <xsl:variable name="component" select="meta:output_page_header( $test_logs[1], $runner_id )"/> + <xsl:variable name="age" select="meta:timestamp_difference( $timestamp, $run_date )"/> + + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Test output: <xsl:value-of select="$component"/></title> + </head> + + <body> + <div class="log-test-header"> + <div class="log-test-title"> + Test output: <xsl:value-of select="$component"/> + </div> + <div><span class="timestamp-{$age}"> + Rev <xsl:value-of select="$revision"/> / + <xsl:value-of select="meta:format_timestamp( $timestamp )"/> + </span></div> + </div> + + <div> + <b>Report Time: </b> <xsl:value-of select="meta:format_timestamp( $run_date )"/> + </div> + + <p>Output by test variants:</p> + <table> + <xsl:for-each select="$test_logs"> + <tr> + <td> + <xsl:choose> + <xsl:when test="meta:log_file_path(.,$runner_id) != ''"> + <a href="../{meta:log_file_path(.,$runner_id)}"> + <xsl:value-of select="@target-directory"/> + </a> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@target-directory"/> + </xsl:otherwise> + </xsl:choose> + </td> + </tr> + </xsl:for-each> + </table> + </body> + </html> + </exsl:document> + </xsl:template> + + <xsl:template name="write_test_result_file"> + <xsl:param name="path"/> + <xsl:param name="test_log"/> + <xsl:param name="runner_id"/> + <xsl:param name="revision"/> + <xsl:param name="timestamp"/> + <xsl:message> Writing log file document <xsl:value-of select="$path"/></xsl:message> + + <exsl:document href="{$path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <xsl:variable name="component" select="meta:output_page_header( $test_log, $runner_id )"/> + <xsl:variable name="age" select="meta:timestamp_difference( $timestamp, $run_date )"/> + + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Test output: <xsl:value-of select="$component"/></title> + </head> + + <body> + <div class="log-test-header"> + <div class="log-test-title"> + Test output: <xsl:value-of select="$component"/> + </div> + <div><span class="timestamp-{$age}"> + Rev <xsl:value-of select="$revision"/> / + <xsl:value-of select="meta:format_timestamp( $timestamp )"/> + </span></div> + </div> + + <div> + <b>Report Time: </b> <xsl:value-of select="meta:format_timestamp( $run_date )"/> + </div> + + <xsl:if test="notes/note"> + <p> + <div class="notes-title">Notes</div> + <xsl:call-template name="show_notes"> + <xsl:with-param name="notes" select="notes/note"/> + <xsl:with-param name="explicit_markup" select="$explicit_markup"/> + </xsl:call-template> + </p> + </xsl:if> + + <xsl:if test="compile"> + <p> + <div class="log-compiler-output-title">Compile [<xsl:value-of select="compile/@timestamp"/>]: <span class="output-{compile/@result}"><xsl:value-of select="compile/@result"/></span></div> + <pre><xsl:copy-of select="compile/node()"/></pre> + </p> + </xsl:if> + + <xsl:if test="link"> + <p> + <div class="log-linker-output-title">Link [<xsl:value-of select="link/@timestamp"/>]: <span class="output-{link/@result}"><xsl:value-of select="link/@result"/></span></div> + <pre><xsl:copy-of select="link/node()"/></pre> + </p> + </xsl:if> + + <xsl:if test="lib"> + <p> + <div class="log-linker-output-title">Lib [<xsl:value-of select="lib/@timestamp"/>]: <span class="output-{lib/@result}"><xsl:value-of select="lib/@result"/></span></div> + <p> + See <a href="{meta:encode_path( concat( $runner_id, '-', lib/node() ) ) }.html"> + <xsl:copy-of select="lib/node()"/> + </a> + </p> + </p> + </xsl:if> + + <xsl:if test="run"> + <p> + <div class="log-run-output-title">Run [<xsl:value-of select="run/@timestamp"/>]: <span class="output-{run/@result}"><xsl:value-of select="run/@result"/></span></div> + <pre> + <xsl:copy-of select="run/node()"/> + </pre> + </p> + </xsl:if> + + <xsl:copy-of select="document( 'html/make_tinyurl.html' )"/> + </body> + + </html> + </exsl:document> + </xsl:template> + + + <xsl:template name="write_test_results_reference_file"> + <xsl:param name="path"/> + <xsl:param name="log_file_path"/> + <xsl:message> Writing log frame document <xsl:value-of select="$path"/></xsl:message> + <exsl:document href="{$path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="../toc.html" scrolling="auto"/> + <frame name="docframe" src="../../{$log_file_path}" scrolling="auto"/> + </frameset> + </html> + </exsl:document> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl b/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl new file mode 100644 index 0000000000..8574c59361 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2005. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:meta="http://www.meta-comm.com" + exclude-result-prefixes="meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="xml" encoding="utf-8"/> + + <xsl:template match="/"> + <root> + <expected-failures> + <xsl:apply-templates select="*//test-log"/> + </expected-failures> + </root> + </xsl:template> + + <xsl:template match="test-log"> + <xsl:if test="meta:is_test_log_a_test_case(.)"> + <test-result library="{@library}" test-name="{@test-name}" toolset="{@toolset}" result="{@result}" /> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/result_page.xsl b/tools/regression/xsl_reports/xsl/v2/result_page.xsl new file mode 100644 index 0000000000..bf46484a80 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/result_page.xsl @@ -0,0 +1,690 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2007. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="exsl set meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + <xsl:param name="links_file"/> + <xsl:param name="mode"/> + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="warnings"/> + <xsl:param name="comment_file"/> + <xsl:param name="expected_results_file"/> + <xsl:param name="explicit_markup_file"/> + <xsl:param name="release"/> + + <!-- the author-specified expected test results --> + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + <xsl:variable name="expected_results" select="document( $expected_results_file )" /> + + <!-- necessary indexes --> + <xsl:key + name="test_name_key" + match="test-log" + use="concat( @library, '>@<', @test-name )"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + + <!-- runs / toolsets --> + <xsl:variable name="run_toolsets" select="meta:test_structure( /, $release )"/> + + <!-- libraries --> + + <xsl:variable name="test_case_logs" select="//test-log[ meta:is_test_log_a_test_case(.) ]"/> + <xsl:variable name="libraries" select="set:distinct( $test_case_logs/@library )"/> + <xsl:variable name="unusables_f"> + <unusables> + <xsl:for-each select="set:distinct( $run_toolsets//toolset/@name )"> + <xsl:variable name="toolset" select="."/> + <xsl:for-each select="$libraries"> + <xsl:variable name="library" select="."/> + <xsl:if test="meta:is_unusable_( $explicit_markup, $library, $toolset )"> + <unusable library-name="{$library}" toolset-name="{$toolset}"/> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + </unusables> + </xsl:variable> + + <xsl:variable name="unusables" select="exsl:node-set( $unusables_f )"/> + + + <xsl:key + name="library-name_toolset-name_key" + match="unusables/unusable" + use="concat( @library-name, '>@<', @toolset-name )"/> + + <!-- modes --> + + <xsl:variable name="alternate_mode"> + <xsl:choose> + <xsl:when test="$mode='user'">developer</xsl:when> + <xsl:otherwise>user</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="release_postfix"> + <xsl:if test="$release='yes'">_release</xsl:if> + </xsl:variable> + + + + <xsl:template name="test_type_col"> + <td class="test-type"> + <a href="http://www.boost.org/status/compiler_status.html#Understanding" class="legend-link" target="_top"> + <xsl:variable name="test_type" select="./@test-type"/> + <xsl:choose> + <xsl:when test="$test_type='run_pyd'"> <xsl:text>r</xsl:text> </xsl:when> + <xsl:when test="$test_type='run'"> <xsl:text>r</xsl:text> </xsl:when> + <xsl:when test="$test_type='run_fail'"> <xsl:text>rf</xsl:text> </xsl:when> + <xsl:when test="$test_type='compile'"> <xsl:text>c</xsl:text> </xsl:when> + <xsl:when test="$test_type='compile_fail'"> <xsl:text>cf</xsl:text> </xsl:when> + <xsl:when test="$test_type='link'"> <xsl:text>l</xsl:text> </xsl:when> + <xsl:when test="$test_type='link_fail'"> <xsl:text>lf</xsl:text> </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes">Incorrect test type "<xsl:value-of select="$test_type"/>"</xsl:message> + </xsl:otherwise> + </xsl:choose> + </a> + </td> + </xsl:template> + + + <xsl:template match="/"> + + <xsl:message><xsl:value-of select="count($unusables)"/><xsl:copy-of select="$unusables"/></xsl:message> + + <exsl:document href="debug.xml" + method="xml" + encoding="utf-8" + indent="yes"> + + <debug> + <runs> + <xsl:for-each select="$run_toolsets"> + <xsl:copy-of select="."/> + </xsl:for-each> + </runs> + <xsl:copy-of select="$unusables_f"/> + <xsl:copy-of select="$unusables"/> + </debug> + + </exsl:document> + <xsl:message>Wrote debug</xsl:message> + <xsl:variable name="index_path" select="concat( 'index', $release_postfix, '_.html' )"/> + + <!-- Index page --> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc{$release_postfix}.html" scrolling="auto"/> + <frame name="docframe" src="{$index_path}" scrolling="auto"/> + </frameset> + + <!-- Index content --> + <xsl:message>Writing document <xsl:value-of select="$index_path"/></xsl:message> + + <exsl:document href="{$index_path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <img border="0" src="http://www.boost.org/boost.png" width="277" height="86" align="right" alt="Boost logo"></img> + + <h1 class="page-title"> + <xsl:value-of select="$mode"/> + <xsl:text> report: </xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <xsl:variable name="purpose"> + <xsl:choose> + <xsl:when test="$mode='user'"> + The purpose of this report is to help a user to find out whether a particular library + works on the particular compiler(s). For SVN "health report", see + <a href="../{$alternate_mode}/index.html" target="_top">developer summary</a>. + </xsl:when> + <xsl:when test="$mode='developer'"> + Provides Boost developers with visual indication of the SVN "health". For user-level + report, see <a href="../{$alternate_mode}/index.html" target="_top">user summary</a>. + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:call-template name="insert_report_header"> + <xsl:with-param name="run_date" select="$run_date"/> + <xsl:with-param name="warnings" select="$warnings"/> + <xsl:with-param name="purpose" select="$purpose"/> + </xsl:call-template> + + <div class="comment"> + <xsl:if test="$comment_file != ''"> + <xsl:copy-of select="document( $comment_file )"/> + </xsl:if> + </div> + + </body> + </html> + </exsl:document> + + + <xsl:variable name="multiple.libraries" select="count( $libraries ) > 1"/> + + <!-- TOC --> + <xsl:if test="$multiple.libraries"> + + <xsl:variable name="toc_path" select="concat( 'toc', $release_postfix, '.html' )"/> + <xsl:message>Writing document <xsl:value-of select="$toc_path"/></xsl:message> + + <exsl:document href="{$toc_path}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body class="{$mode}-toc"> + <div class="toc-header-entry"> + <a href="index{$release_postfix}.html" class="toc-entry" target="_top">Report info</a> + </div> + <div class="toc-header-entry"> + <a href="summary{$release_postfix}.html" class="toc-entry" target="_top">Summary</a> + </div> + + <xsl:if test="$mode='developer'"> + <div class="toc-header-entry"> + <a href="issues.html" class="toc-entry" target="_top">Unresolved issues</a> + </div> + </xsl:if> + + <div class="toc-header-entry"> + <xsl:call-template name="insert_view_link"> + <xsl:with-param name="page" select="'index'"/> + <xsl:with-param name="class" select="'toc-entry'"/> + <xsl:with-param name="release" select="$release"/> + </xsl:call-template> + </div> + + <hr/> + + <xsl:for-each select="$libraries"> + <xsl:sort select="." order="ascending" /> + <xsl:variable name="library_page" select="meta:encode_path(.)" /> + <div class="toc-entry"> + <a href="{$library_page}{$release_postfix}.html" class="toc-entry" target="_top"> + <xsl:value-of select="."/> + </a> + </div> + </xsl:for-each> + </body> + </html> + + </exsl:document> + </xsl:if> + + <!-- Libraries --> + <xsl:for-each select="$libraries[ meta:show_library( ., $release )]"> + <xsl:sort select="." order="ascending" /> + <xsl:variable name="library" select="." /> + + <xsl:variable name="library_results" select="concat( meta:encode_path( $library ), $release_postfix, '_.html' )"/> + <xsl:variable name="library_page" select="concat( meta:encode_path( $library ), $release_postfix, '.html' )"/> + + <!-- Library page --> + <xsl:message>Writing document <xsl:value-of select="$library_page"/></xsl:message> + + <exsl:document href="{$library_page}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression: <xsl:value-of select="$library"/>/<xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc{$release_postfix}.html" scrolling="auto"/> + <frame name="docframe" src="{$library_results}" scrolling="auto"/> + </frameset> + </html> + </exsl:document> + + <!-- Library results frame --> + <xsl:message>Writing document <xsl:value-of select="$library_results"/></xsl:message> + + <exsl:document href="{$library_results}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + + <body> + + <xsl:call-template name="insert_page_links"> + <xsl:with-param name="page" select="meta:encode_path( $library )"/> + <xsl:with-param name="release" select="$release"/> + <xsl:with-param name="mode" select="$alternate_mode"/> + </xsl:call-template> + + <h1 class="page-title"> + <a class="hover-link" name="{$library}" href="http://www.boost.org/libs/{$library}" target="_top"> + <xsl:value-of select="$library" /> + </a> + <xsl:text>/</xsl:text> + <a class="hover-link" href="summary.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <xsl:call-template name="insert_report_header"> + <xsl:with-param name="run_date" select="$run_date"/> + <xsl:with-param name="warnings" select="$warnings"/> + </xsl:call-template> + + <!-- library marks = library-unusable markup for toolsets in the report --> + <xsl:variable name="library_marks" select="$explicit_markup//library[ @name = $library ]/mark-unusable/toolset[ meta:re_match( @name, $run_toolsets//toolset/@name ) ]/.."/> + + <table border="0" cellspacing="0" cellpadding="0" class="library-table" width="1%" summary="Library results"> + + <thead> + <xsl:call-template name="insert_runners_rows"> + <xsl:with-param name="mode" select="'details'"/> + <xsl:with-param name="top_or_bottom" select="'top'"/> + <xsl:with-param name="run_toolsets" select="$run_toolsets"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="mode" select="'details'"/> + <xsl:with-param name="library_marks" select="$library_marks"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + </thead> + <tfoot> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="mode" select="'details'"/> + <xsl:with-param name="library_marks" select="$library_marks"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + + <xsl:call-template name="insert_runners_rows"> + <xsl:with-param name="mode" select="'details'"/> + <xsl:with-param name="top_or_bottom" select="'bottom'"/> + <xsl:with-param name="run_toolsets" select="$run_toolsets"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + </tfoot> + + <tbody> + <xsl:variable name="lib_tests" select="$test_case_logs[@library = $library]" /> + <xsl:variable name="lib_unique_tests_list" + select="$lib_tests[ generate-id(.) = generate-id( key('test_name_key', concat( @library, '>@<', @test-name ) ) ) ]" /> + + <xsl:variable name="lib_tests_by_category" + select="meta:order_tests_by_category( $lib_unique_tests_list )"/> + + <xsl:call-template name="insert_test_section"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="section_test_names" select="$lib_tests_by_category"/> + <xsl:with-param name="lib_tests" select="$lib_tests"/> + <xsl:with-param name="toolsets" select="$run_toolsets"/> + </xsl:call-template> + + </tbody> + </table> + <xsl:if test="count( $library_marks/note ) > 0 "> + <table border="0" cellpadding="0" cellspacing="0" class="library-library-notes" summary="library notes"> + <xsl:for-each select="$library_marks/note"> + <tr class="library-library-note"> + <td valign="top" width="3em"> + <a name="{$library}-note-{position()}"> + <span class="super"><xsl:value-of select="position()"/></span> + </a> + </td> + <td> + <xsl:variable name="refid" select="@refid"/> + <xsl:call-template name="show_note"> + <xsl:with-param name="note" select="." /> + <xsl:with-param name="references" select="$refid"/> + </xsl:call-template> + </td> + </tr> + </xsl:for-each> + </table> + </xsl:if> + + <div id="legend"> + <xsl:copy-of select="document( concat( 'html/library_', $mode, '_legend.html' ) )"/> + </div> + + <xsl:call-template name="insert_page_links"> + <xsl:with-param name="page" select="meta:encode_path( $library )"/> + <xsl:with-param name="release" select="$release"/> + <xsl:with-param name="mode" select="$alternate_mode"/> + </xsl:call-template> + + </body> + </html> + + </exsl:document> + + </xsl:for-each> + + </xsl:template> + + + <!-- insert test result with log file link --> + + <xsl:template name="insert_test_result"> + <xsl:param name="result"/> + <xsl:param name="log_link"/> + + <xsl:choose> + <xsl:when test="$log_link != ''"> + <xsl:text>  </xsl:text> + <a href="{$log_link}" class="log-link" target="_top"> + <xsl:copy-of select="$result"/> + </a> + <xsl:text>  </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>  </xsl:text> + <xsl:copy-of select="$result"/> + <xsl:text>  </xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- report developer status --> + <xsl:template name="insert_cell_developer"> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="test_log"/> + + <xsl:variable name="class" select="concat( 'library-', meta:result_cell_class( $library, $toolset, $test_log ) )"/> + + <xsl:variable name="cell_link"> + <xsl:choose> + <xsl:when test="count( $test_log ) > 1"> + <xsl:variable name="variants__file_path" select="concat( meta:encode_path( concat( $test_log/../@runner, '-', $test_log/@library, '-', $test_log/@toolset, '-', $test_log/@test-name, '-variants_', $release_postfix ) ), '.html' )"/> + <xsl:value-of select="$variants__file_path"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="meta:log_file_path( $test_log, $test_log/../@runner, $release_postfix )"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class}" title="{$test_log/@test-name}/{$toolset}"> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $library, $toolset )"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'n/a'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="count( $test_log ) < 1"> + <xsl:text>    </xsl:text> + </xsl:when> + + <xsl:when test="count( $test_log[ @result != 'success' and @status = 'expected' ] ) > 0"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result"> + <xsl:choose> + <xsl:when test="$test_log/@expected-reason != ''"> + <xsl:text>fail?</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>fail*</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'fail'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result = 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:otherwise> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </td> + </xsl:template> + + <!-- report user status --> + <xsl:template name="insert_cell_user"> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="test_log"/> + + <xsl:variable name="class" select="concat( 'library-', meta:result_cell_class( $library, $toolset, $test_log ) )"/> + + <xsl:variable name="cell_link"> + <xsl:choose> + <xsl:when test="count( $test_log ) > 1"> + <xsl:variable name="variants__file_path" select="concat( meta:encode_path( concat( $test_log/../@runner, '-', $test_log/@library, '-', $test_log/@toolset, '-', $test_log/@test-name, '-variants_', $release_postfix ) ), '.html' )"/> + <xsl:value-of select="$variants__file_path"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="meta:log_file_path( $test_log, $test_log/../@runner, $release_postfix )"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <td class="{$class} user-{$class}" title="{$test_log/@test-name}/{$toolset}"> + <xsl:choose> + <xsl:when test="meta:is_unusable( $explicit_markup, $library, $toolset )"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'unusable'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="count( $test_log ) < 1"> + <xsl:text>    </xsl:text> + </xsl:when> + + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'expected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result"> + <xsl:choose> + <xsl:when test="$test_log/@expected-reason != ''"> + <xsl:text>fail?</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>fail*</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result != 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'fail'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$test_log/@result = 'success' and $test_log/@status = 'unexpected'"> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:when> + + <xsl:otherwise> + <xsl:call-template name="insert_test_result"> + <xsl:with-param name="result" select="'pass'"/> + <xsl:with-param name="log_link" select="$cell_link"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </td> + </xsl:template> + + <xsl:template name="insert_test_line"> + <xsl:param name="library"/> + <xsl:param name="test_name"/> + <xsl:param name="test_results"/> + <xsl:param name="line_mod"/> + + <xsl:variable name="test_program"> + <xsl:value-of select="$test_results[1]/@test-program"/> + </xsl:variable> + + <xsl:variable name="test_header"> + <td class="test-name"> + <a href="http://svn.boost.org/svn/boost/{$source}/{$test_program}" class="test-link" target="_top"> + <xsl:value-of select="$test_name"/> + </a> + </td> + </xsl:variable> + + <tr class="library-row{$line_mod}"> + <xsl:copy-of select="$test_header"/> + <xsl:call-template name="test_type_col"/> + + <xsl:for-each select="$run_toolsets/platforms/platform/runs/run/toolset"> + <xsl:variable name="toolset" select="@name" /> + <xsl:variable name="runner" select="../@runner" /> + + <xsl:variable name="test_result_for_toolset" select="$test_results[ @toolset = $toolset and ../@runner=$runner ]"/> + + <!-- Insert cell --> + <xsl:choose> + <xsl:when test="$mode='user'"> + <xsl:call-template name="insert_cell_user"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="test_log" select="$test_result_for_toolset"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$mode='developer'"> + <xsl:call-template name="insert_cell_developer"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="test_log" select="$test_result_for_toolset"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + + </xsl:for-each> + <xsl:copy-of select="$test_header"/> + </tr> + </xsl:template> + + <xsl:template name="insert_test_section"> + <xsl:param name="library"/> + <xsl:param name="section_test_names"/> + <xsl:param name="lib_tests"/> + <xsl:param name="toolsets"/> + + <xsl:variable name="category_span" select="count($toolsets/platforms/platform/runs/run/toolset) + 3"/> + + <xsl:for-each select="$section_test_names"> + + <xsl:variable name="test_name" select="@test-name"/> + <xsl:variable name="category_start" select="position() = 1 or @category != preceding-sibling::*[1]/@category"/> + <xsl:variable name="category_end" select="position() = last() or @category != following-sibling::*[1]/@category"/> + + <xsl:variable name="line_mod"> + <xsl:choose> + <xsl:when test="$category_start and $category_end"><xsl:text>-single</xsl:text></xsl:when> + <xsl:when test="$category_start"><xsl:text>-first</xsl:text></xsl:when> + <xsl:when test="$category_end"><xsl:text>-last</xsl:text></xsl:when> + <xsl:otherwise><xsl:text></xsl:text></xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:if test="$category_start and @category != '0'"> + <tr> + <td class="library-test-category-header" colspan="{$category_span}" align="center"> + <xsl:value-of select="@category"/> + </td> + </tr> + </xsl:if> + + <xsl:call-template name="insert_test_line"> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="test_results" select="$lib_tests[ @test-name = $test_name ]"/> + <xsl:with-param name="test_name" select="$test_name"/> + <xsl:with-param name="line_mod" select="$line_mod"/> + </xsl:call-template> + </xsl:for-each> + + </xsl:template> + + <func:function name="meta:order_tests_by_category"> + <xsl:param name="tests"/> + + <xsl:variable name="a"> + <xsl:for-each select="$tests"> + <xsl:sort select="concat( @category, '|', @test-name )" order="ascending"/> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:variable> + <func:result select="exsl:node-set( $a )/*"/> + </func:function> + +</xsl:stylesheet> diff --git a/tools/regression/xsl_reports/xsl/v2/runners.xsl b/tools/regression/xsl_reports/xsl/v2/runners.xsl new file mode 100644 index 0000000000..9bda7db8d3 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/runners.xsl @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + extension-element-prefixes="exsl" + version="1.0"> + + <xsl:output method="html"/> + + <xsl:template match="/"> + <html> + <body bgcolor="#FFFFFF"> + <xsl:apply-templates/> + </body> + </html> + </xsl:template> + + <xsl:template match="test-run"> + <table> + <tr> + <td> + <xsl:message>Writing runner document <xsl:value-of select="@runner"/></xsl:message> + <a href="{@runner}.html"><xsl:value-of select="@runner"/></a> + <exsl:document href="{@runner}.html" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + <html> + <head> + <title><xsl:value-of select="@runner"/></title> + </head> + <body> + <h1><xsl:value-of select="@runner"/></h1> + <hr></hr> + <xsl:value-of select="comment/text()" disable-output-escaping="yes"/> + </body> + </html> + </exsl:document> + </td> + </tr> + </table> + </xsl:template> + +</xsl:stylesheet> + diff --git a/tools/regression/xsl_reports/xsl/v2/summary_page.xsl b/tools/regression/xsl_reports/xsl/v2/summary_page.xsl new file mode 100644 index 0000000000..b0e1deb477 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/v2/summary_page.xsl @@ -0,0 +1,367 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:set="http://exslt.org/sets" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func exsl" + exclude-result-prefixes="exsl func set meta" + version="1.0"> + + <xsl:import href="common.xsl"/> + + <xsl:output method="html" + doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + encoding="utf-8" + indent="yes" + /> + + <xsl:param name="mode"/> + <xsl:param name="source"/> + <xsl:param name="run_date"/> + <xsl:param name="warnings"/> + <xsl:param name="comment_file"/> + <xsl:param name="explicit_markup_file"/> + <xsl:param name="release"/> + + <xsl:variable name="explicit_markup" select="document( $explicit_markup_file )"/> + + <!-- necessary indexes --> + <xsl:key + name="library_test_name_key" + match="test-log" + use="concat( @library, '>@<', @test-name )"/> + <xsl:key name="toolset_key" match="test-log" use="@toolset"/> + <xsl:key name="test_name_key" match="test-log" use="@test-name "/> + + <xsl:variable name="unusables_f"> + <xsl:for-each select="set:distinct( $run_toolsets//toolset/@name )"> + <xsl:variable name="toolset" select="."/> + <xsl:for-each select="$libraries"> + <xsl:variable name="library" select="."/> + <xsl:if test="meta:is_unusable_( $explicit_markup, $library, $toolset )"> + <unusable library-name="{$library}" toolset-name="{$toolset}"/> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="unusables" select="exsl:node-set( $unusables_f )"/> + + + <xsl:key + name="library-name_toolset-name_key" + match="unusable" + use="concat( @library-name, '>@<', @toolset-name )"/> + + <!--<xsl:variable name="expected_results" select="document( $expected_results_file )" />--> + + <!-- runs / toolsets --> + <xsl:variable name="run_toolsets" select="meta:test_structure( /, $release )"/> + + <!-- libraries --> + + <xsl:variable name="test_case_logs" select="//test-log[ meta:is_test_log_a_test_case(.) and meta:show_library( @library, $release ) and meta:show_toolset( @toolset, $release )]"/> + <xsl:variable name="libraries" select="set:distinct( $test_case_logs/@library )"/> + + <xsl:variable name="sorted_libraries_output"> + <xsl:for-each select="$libraries[ meta:show_library( ., $release )]"> + <xsl:sort select="." order="ascending" /> + <library><xsl:copy-of select="."/></library> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="sorted_libraries" select="exsl:node-set( $sorted_libraries_output )/library/@library"/> + + <!-- modes --> + + <xsl:variable name="alternate_mode"> + <xsl:choose> + <xsl:when test="$mode='user'">developer</xsl:when> + <xsl:otherwise>user</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="release_postfix"> + <xsl:if test="$release='yes'"> + <xsl:text>_release</xsl:text> + </xsl:if> + </xsl:variable> + + <xsl:template match="/"> + + <xsl:variable name="summary_results" select="concat( 'summary', $release_postfix, '_.html' )"/> + + <!-- Summary page --> + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + <title>Boost regression summary: <xsl:value-of select="$source"/></title> + </head> + <frameset cols="190px,*" frameborder="0" framespacing="0" border="0"> + <frame name="tocframe" src="toc{$release_postfix}.html" scrolling="auto"/> + <frame name="docframe" src="{$summary_results}" scrolling="auto"/> + </frameset> + </html> + + <!-- Summary results --> + <xsl:message>Writing document <xsl:value-of select="$summary_results"/></xsl:message> + + <exsl:document href="{$summary_results}" + method="html" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + encoding="utf-8" + indent="yes"> + + <html> + <head> + <link rel="stylesheet" type="text/css" href="../master.css" title="master" /> + </head> + <body> + + <xsl:call-template name="insert_page_links"> + <xsl:with-param name="page" select="'summary'"/> + <xsl:with-param name="release" select="$release"/> + <xsl:with-param name="mode" select="$alternate_mode"/> + </xsl:call-template> + + <h1 class="page-title"> + <xsl:text>Summary: </xsl:text> + <a class="hover-link" href="summary{$release_postfix}.html" target="_top"><xsl:value-of select="$source"/></a> + </h1> + + <xsl:call-template name="insert_report_header"> + <xsl:with-param name="run_date" select="$run_date"/> + <xsl:with-param name="warnings" select="$warnings"/> + </xsl:call-template> + + <div class="statistics"> + Unusable: <xsl:value-of select="count( $test_case_logs[ meta:test_case_status( $explicit_markup, . ) = 'unusable' ] )"/> +  |  + Regressions: <xsl:value-of select="count( $test_case_logs[ meta:test_case_status( $explicit_markup, . ) = 'fail-unexpected' ] )"/> +  |  + New failures: <xsl:value-of select="count( $test_case_logs[ meta:test_case_status( $explicit_markup, . ) = 'fail-unexpected-new' ] )"/> + </div> + + <!-- summary table --> + + <table border="0" cellspacing="0" cellpadding="0" width="1%" class="summary-table" summary="Overall summary"> + + <thead> + <xsl:call-template name="insert_runners_rows"> + <xsl:with-param name="mode" select="'summary'"/> + <xsl:with-param name="top_or_bottom" select="'top'"/> + <xsl:with-param name="run_toolsets" select="$run_toolsets"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="mode" select="'summary'"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + </thead> + + <tfoot> + <xsl:call-template name="insert_toolsets_row"> + <xsl:with-param name="mode" select="'summary'"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + <xsl:call-template name="insert_runners_rows"> + <xsl:with-param name="mode" select="'summary'"/> + <xsl:with-param name="top_or_bottom" select="'bottom'"/> + <xsl:with-param name="run_toolsets" select="$run_toolsets"/> + <xsl:with-param name="run_date" select="$run_date"/> + </xsl:call-template> + </tfoot> + + <tbody> + <xsl:variable name="test_logs" select="$test_case_logs"/> + + <!-- for each library --> + <xsl:for-each select="$sorted_libraries"> + <xsl:variable name="library" select="."/> + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + <xsl:variable name="current_row" select="$test_logs[ @library=$library ]"/> + + <xsl:variable name="expected_test_count" select="count( $current_row[ generate-id(.) = generate-id( key('test_name_key',@test-name)[1] ) ] )"/> + <xsl:variable name="library_header"> + <td class="library-name"> + <a href="{$library_page}{$release_postfix}.html" class="library-link" target="_top"> + <xsl:value-of select="$library"/> + </a> + </td> + </xsl:variable> + + <xsl:variable name="line_mod"> + <xsl:choose> + <xsl:when test="1 = last()"> + <xsl:text>-single</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $sorted_libraries[1] )"> + <xsl:text>-first</xsl:text> + </xsl:when> + <xsl:when test="generate-id( . ) = generate-id( $sorted_libraries[ last() ] )"> + <xsl:text>-last</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text></xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <tr class="summary-row{$line_mod}"> + <xsl:copy-of select="$library_header"/> + + <xsl:for-each select="$run_toolsets/platforms/platform/runs/run/toolset"> + <xsl:variable name="toolset" select="@name" /> + <xsl:variable name="runner" select="../@runner" /> + + <xsl:variable name="current_cell" select="$current_row[ @toolset=$toolset and ../@runner = $runner ]"/> + + <xsl:choose> + <xsl:when test="$mode='user'"> + <xsl:call-template name="insert_cell_user"> + <xsl:with-param name="current_cell" select="$current_cell"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="expected_test_count" select="$expected_test_count"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$mode='developer'"> + <xsl:call-template name="insert_cell_developer"> + <xsl:with-param name="current_cell" select="$current_cell"/> + <xsl:with-param name="library" select="$library"/> + <xsl:with-param name="toolset" select="$toolset"/> + <xsl:with-param name="expected_test_count" select="$expected_test_count"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:for-each> + + <xsl:copy-of select="$library_header"/> + </tr> + </xsl:for-each> + </tbody> + </table> + + <div id="legend"> + <xsl:copy-of select="document( concat( 'html/summary_', $mode, '_legend.html' ) )"/> + </div> + + <xsl:call-template name="insert_page_links"> + <xsl:with-param name="page" select="'summary'"/> + <xsl:with-param name="release" select="$release"/> + <xsl:with-param name="mode" select="$alternate_mode"/> + </xsl:call-template> + + </body> + </html> + </exsl:document> + + </xsl:template> + + <!-- report developer status --> + <xsl:template name="insert_cell_developer"> + <xsl:param name="current_cell"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="expected_test_count"/> + + <xsl:variable name="class" select="concat( 'summary-', meta:result_cell_class( $library, $toolset, $current_cell ) )"/> + + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + + <td class="{$class}" title="{$library}/{$toolset}"> + <xsl:choose> + <xsl:when test="$class='summary-unusable'"> + <xsl:text>  </xsl:text> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>n/a</xsl:text> + </a> + <xsl:text>  </xsl:text> + </xsl:when> + <xsl:when test="$class='summary-missing'"> + <xsl:text>    </xsl:text> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected'"> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>broken</xsl:text> + </a> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected-new' "> + <xsl:text>  </xsl:text> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>fail</xsl:text> + </a> + <xsl:text>  </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>  OK  </xsl:text> + </xsl:otherwise> + </xsl:choose> + </td> + + </xsl:template> + + + <!-- report user status --> + <xsl:template name="insert_cell_user"> + <xsl:param name="current_cell"/> + <xsl:param name="library"/> + <xsl:param name="toolset"/> + <xsl:param name="expected_test_count"/> + + <xsl:variable name="class" select="concat( 'summary-', meta:result_cell_class( $library, $toolset, $current_cell ) )"/> + + <xsl:variable name="library_page" select="meta:encode_path( $library )" /> + + <td class="{$class} user-{$class}" title="{$library}/{$toolset}"> + <xsl:choose> + <xsl:when test="$class='summary-unusable'"> + <xsl:text> </xsl:text> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>unusable</xsl:text> + </a> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:when test="$class='summary-missing'"> + <xsl:text> no results </xsl:text> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected'"> + <xsl:text> </xsl:text> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>regress.</xsl:text> + </a> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:when test="$class='summary-fail-unexpected-new' + or $class='summary-fail-expected' + or $class='summary-unknown-status' + or $class='summary-fail-expected-unresearched'"> + <xsl:text> </xsl:text> + <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top"> + <xsl:text>details</xsl:text> + </a> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text> pass </xsl:text> + </xsl:otherwise> + </xsl:choose> + </td> + + </xsl:template> + +</xsl:stylesheet> diff --git a/tools/release/index.html b/tools/release/index.html new file mode 100644 index 0000000000..fc387440eb --- /dev/null +++ b/tools/release/index.html @@ -0,0 +1,64 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<title>Release Scripts</title> +<link rel="stylesheet" type="text/css" href="../../doc/html/minimal.css"> +</head> + +<body> +<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="637"> + <tr> + <td width="277"> +<a href="../../index.htm"> +<img src="../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td> + <td width="337" align="middle"> + <font size="7">Release Scripts</font> + </td> + </tr> +</table> + +<h2>Introduction</h2> +<p>The release scripts are used by the release management team to build the +release distribution files, and perform related release management functions.</p> +<p>The files being built include:</p> +<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> + <tr> + <td width="100%" colspan="2"> + <p align="center"><b><i>Files</i></b></td> + </tr> + <tr> + <td width="50%">boost_x_xx_x.7z</td> + <td width="50%"> </td> + </tr> + <tr> + <td width="50%">boost_x_xx_x.tar.bz2</td> + <td width="50%">Unix-style line endings</td> + </tr> + <tr> + <td width="50%">boost_x_xx_x.tar.gz</td> + <td width="50%">Unix-style line endings</td> + </tr> + <tr> + <td width="50%">boost_x_xx_x.zip</td> + <td width="50%">Windows-style line endings</td> + </tr> +</table> +<p>The content of all files is identical except for the line endings.</p> + +<hr> + +<p>© Copyright Beman Dawes, 2008<br> +Distributed under the Boost Software License, Version 1.0. See +<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p> + +<p>Revised +<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->January 18, 2008<!--webbot bot="Timestamp" endspan i-checksum="31853" --> </font> +</p> + +</body> + +</html>
\ No newline at end of file diff --git a/tools/release/inspect.sh b/tools/release/inspect.sh new file mode 100755 index 0000000000..04cc888c44 --- /dev/null +++ b/tools/release/inspect.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# Inspect snapshot + +# © Copyright 2008 Beman Dawes +# Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt + +pushd posix/tools/inspect/build +bjam +popd +echo inspect... +pushd posix +dist/bin/inspect >../inspect.html +popd + +# create the ftp script +echo "dir" >inspect.ftp +echo "binary" >>inspect.ftp +echo "put inspect.html" >>inspect.ftp +echo "delete inspect-snapshot.html" >>inspect.ftp +echo "rename inspect.html inspect-snapshot.html" >>inspect.ftp +echo "dir" >>inspect.ftp +echo "bye" >>inspect.ftp +# use cygwin ftp rather than Windows ftp +/usr/bin/ftp -v -i boost.cowic.de <inspect.ftp diff --git a/tools/release/make_packages.sh b/tools/release/make_packages.sh new file mode 100755 index 0000000000..3aeb17f8f5 --- /dev/null +++ b/tools/release/make_packages.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Build branches/release packages + +# © Copyright 2008 Beman Dawes +# Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt + +if [ $# -lt 1 ] +then + echo "invoke:" $0 "package-name" + echo "example:" $0 "boost_1_35_0_RC3" + exit 1 +fi + +echo "preping posix..." +rm -r posix/bin.v2 2>/dev/null +rm -r posix/dist 2>/dev/null +mv posix $1 +rm -f $1.tar.gz 2>/dev/null +rm -f $1.tar.bz2 2>/dev/null +echo "creating gz..." +tar cfz $1.tar.gz $1 +echo "creating bz2..." +gunzip -c $1.tar.gz | bzip2 >$1.tar.bz2 +echo "cleaning up..." +mv $1 posix + +echo "preping windows..." +rm -r windows/bin.v2 2>/dev/null +rm -r windows/dist 2>/dev/null +mv windows $1 +rm -f $1.zip 2>/dev/null +rm -f $1.7z 2>/dev/null +echo "creating zip..." +zip -r $1.zip $1 +echo "creating 7z..." +7z a -r $1.7z $1 +echo "cleaning up..." +mv $1 windows + +echo "done automatic processing; you must now upload packages manually" +exit 0 + + + diff --git a/tools/release/snapshot_posix.sh b/tools/release/snapshot_posix.sh new file mode 100755 index 0000000000..70546abbb3 --- /dev/null +++ b/tools/release/snapshot_posix.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +# Build a branches/release snapshot for Posix, using LF line termination + +# © Copyright 2008 Beman Dawes +# Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt + +rm -r -f posix +svn export --non-interactive --native-eol LF http://svn.boost.org/svn/boost/branches/release posix +pushd posix/doc +bjam --v2 >../../posix-bjam.log +popd +rm -r posix/bin.v2 +SNAPSHOT_DATE=`eval date +%Y-%m-%d` +echo SNAPSHOT_DATE is $SNAPSHOT_DATE +mv posix boost-posix-$SNAPSHOT_DATE +rm -f posix.tar.gz +rm -f posix.tar.bz2 +tar cfz posix.tar.gz boost-posix-$SNAPSHOT_DATE +gunzip -c posix.tar.gz | bzip2 >posix.tar.bz2 +mv boost-posix-$SNAPSHOT_DATE posix +# create the ftp script +echo "dir" >posix.ftp +echo "binary" >>posix.ftp +echo "put posix.tar.gz" >>posix.ftp +echo "mdelete boost-posix*.gz" >>posix.ftp +echo "rename posix.tar.gz boost-posix-$SNAPSHOT_DATE.tar.gz" >>posix.ftp +echo "put posix.tar.bz2" >>posix.ftp +echo "mdelete boost-posix*.bz2" >>posix.ftp +echo "rename posix.tar.bz2 boost-posix-$SNAPSHOT_DATE.tar.bz2" >>posix.ftp +echo "dir" >>posix.ftp +echo "bye" >>posix.ftp +# use cygwin ftp rather than Windows ftp +/usr/bin/ftp -v -i boost.cowic.de <posix.ftp diff --git a/tools/release/snapshot_windows.sh b/tools/release/snapshot_windows.sh new file mode 100755 index 0000000000..d3b18f1306 --- /dev/null +++ b/tools/release/snapshot_windows.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# Build a branches/release snapshot for Windows, using CRLF line termination + +# © Copyright 2008 Beman Dawes +# Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt + +rm -r -f windows +svn export --non-interactive --native-eol CRLF http://svn.boost.org/svn/boost/branches/release windows +pushd windows/doc +bjam --v2 >../../windows-bjam.log +popd +rm -r windows/bin.v2 +SNAPSHOT_DATE=`eval date +%Y-%m-%d` +echo SNAPSHOT_DATE is $SNAPSHOT_DATE +mv windows boost-windows-$SNAPSHOT_DATE + +rm -f windows.zip +zip -r windows.zip boost-windows-$SNAPSHOT_DATE + +rm -f windows.7z +7z a -r windows.7z boost-windows-$SNAPSHOT_DATE + +mv boost-windows-$SNAPSHOT_DATE windows + +# create the ftp script +echo "dir" >windows.ftp +echo "binary" >>windows.ftp + +echo "put windows.zip" >>windows.ftp +echo "mdelete boost-windows*.zip" >>windows.ftp +echo "rename windows.zip boost-windows-$SNAPSHOT_DATE.zip" >>windows.ftp + +echo "put windows.7z" >>windows.ftp +echo "mdelete boost-windows*.7z" >>windows.ftp +echo "rename windows.7z boost-windows-$SNAPSHOT_DATE.7z" >>windows.ftp + +echo "dir" >>windows.ftp +echo "bye" >>windows.ftp +# use cygwin ftp rather than windows ftp +/usr/bin/ftp -v -i boost.cowic.de <windows.ftp diff --git a/wiki/index.html b/wiki/index.html new file mode 100644 index 0000000000..a4275f9534 --- /dev/null +++ b/wiki/index.html @@ -0,0 +1,13 @@ +<!-- Copyright 2005 Dave Abrahams --> +<!-- 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) --> + +<html> +<head> +<meta http-equiv="refresh" content="0; URL=http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl"> +</head> +<body> +Take me to the +<a href="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl">Boost Wiki</a>. +</body> +</html> |