summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeman Dawes <bdawes@acm.org>2008-08-12 12:44:50 +0000
committerBeman Dawes <bdawes@acm.org>2008-08-12 12:44:50 +0000
commita8af51b87452198b6aab0efc6a13168f6cfa1b94 (patch)
tree12a1352746468e3657a6c15f7d6d6c606a84b7d7
parentce5e16b6ae28e66369cdcfc6c416db64fd0298ba (diff)
parent99c7b5a9d591f0047be4da8de20fa806a4626a25 (diff)
downloadboost-a8af51b87452198b6aab0efc6a13168f6cfa1b94.tar.gz
1.36.0
[SVN r48100]
-rw-r--r--.gitmodules336
-rw-r--r--INSTALL8
-rw-r--r--Jamroot508
-rw-r--r--LICENSE_1_0.txt23
-rw-r--r--boost-build.jam16
-rw-r--r--boost.css65
-rw-r--r--boost.pngbin0 -> 6308 bytes
-rwxr-xr-xconfigure368
-rw-r--r--doc/Jamfile.v276
-rw-r--r--doc/html/CopyConstructible.html16
-rw-r--r--doc/html/any.html16
-rw-r--r--doc/html/array.html16
-rw-r--r--doc/html/bbv2.html16
-rw-r--r--doc/html/bbv2/installation.html18
-rw-r--r--doc/html/boost_asio.html17
-rw-r--r--doc/html/boost_staticassert.html17
-rw-r--r--doc/html/boost_tr1.html17
-rw-r--r--doc/html/boostbook.css588
-rw-r--r--doc/html/boostbook.html16
-rw-r--r--doc/html/date_time.html16
-rw-r--r--doc/html/date_time/date_time_io.html17
-rw-r--r--doc/html/date_time/details.html17
-rw-r--r--doc/html/date_time/local_time.html17
-rw-r--r--doc/html/docutils.css275
-rw-r--r--doc/html/foreach.html17
-rw-r--r--doc/html/function.html16
-rw-r--r--doc/html/hash.html16
-rw-r--r--doc/html/hash/custom.html16
-rw-r--r--doc/html/images/blank.pngbin0 -> 374 bytes
-rw-r--r--doc/html/images/caution.pngbin0 -> 1250 bytes
-rw-r--r--doc/html/images/draft.pngbin0 -> 17454 bytes
-rw-r--r--doc/html/images/home.pngbin0 -> 358 bytes
-rw-r--r--doc/html/images/important.pngbin0 -> 722 bytes
-rw-r--r--doc/html/images/next.pngbin0 -> 336 bytes
-rw-r--r--doc/html/images/next_disabled.pngbin0 -> 1110 bytes
-rw-r--r--doc/html/images/note.pngbin0 -> 490 bytes
-rw-r--r--doc/html/images/prev.pngbin0 -> 334 bytes
-rw-r--r--doc/html/images/prev_disabled.pngbin0 -> 1109 bytes
-rw-r--r--doc/html/images/tip.pngbin0 -> 449 bytes
-rw-r--r--doc/html/images/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--doc/html/images/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--doc/html/images/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--doc/html/images/up.pngbin0 -> 370 bytes
-rw-r--r--doc/html/images/up_disabled.pngbin0 -> 1115 bytes
-rw-r--r--doc/html/images/warning.pngbin0 -> 1241 bytes
-rw-r--r--doc/html/interprocess.html17
-rw-r--r--doc/html/intrusive.html17
-rw-r--r--doc/html/jam.html16
-rw-r--r--doc/html/jam/building.html18
-rw-r--r--doc/html/lambda.html16
-rw-r--r--doc/html/minimal.css29
-rw-r--r--doc/html/mpi.html16
-rw-r--r--doc/html/program_options.html16
-rw-r--r--doc/html/ref.html16
-rw-r--r--doc/html/reference.css11
-rw-r--r--doc/html/signals.html16
-rw-r--r--doc/html/string_algo.html16
-rw-r--r--doc/html/thread.html16
-rw-r--r--doc/html/tribool.html16
-rw-r--r--doc/html/typeof.html16
-rw-r--r--doc/html/unordered.html16
-rw-r--r--doc/html/variant.html16
-rw-r--r--doc/html/xpressive.html17
-rw-r--r--doc/src/boost.xml770
-rw-r--r--doc/src/boostbook.css588
-rw-r--r--doc/src/docutils.css275
-rw-r--r--doc/src/images/blank.pngbin0 -> 374 bytes
-rw-r--r--doc/src/images/caution.pngbin0 -> 1250 bytes
-rw-r--r--doc/src/images/draft.pngbin0 -> 17454 bytes
-rw-r--r--doc/src/images/home.pngbin0 -> 358 bytes
-rw-r--r--doc/src/images/important.pngbin0 -> 722 bytes
-rw-r--r--doc/src/images/next.pngbin0 -> 336 bytes
-rw-r--r--doc/src/images/next_disabled.pngbin0 -> 1110 bytes
-rw-r--r--doc/src/images/note.pngbin0 -> 490 bytes
-rw-r--r--doc/src/images/prev.pngbin0 -> 334 bytes
-rw-r--r--doc/src/images/prev_disabled.pngbin0 -> 1109 bytes
-rw-r--r--doc/src/images/tip.pngbin0 -> 449 bytes
-rw-r--r--doc/src/images/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--doc/src/images/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--doc/src/images/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--doc/src/images/up.pngbin0 -> 370 bytes
-rw-r--r--doc/src/images/up_disabled.pngbin0 -> 1115 bytes
-rw-r--r--doc/src/images/warning.pngbin0 -> 1241 bytes
-rw-r--r--doc/src/reference.css11
-rw-r--r--index.htm25
-rw-r--r--index.html120
m---------libs/accumulators0
m---------libs/algorithm0
m---------libs/any0
m---------libs/array0
m---------libs/asio0
m---------libs/assign0
m---------libs/bimap0
m---------libs/bind0
m---------libs/circular_buffer0
m---------libs/compatibility0
m---------libs/compose0
m---------libs/concept_check0
m---------libs/config0
m---------libs/conversion0
m---------libs/crc0
m---------libs/date_time0
m---------libs/detail0
m---------libs/disjoint_sets0
m---------libs/dynamic_bitset0
m---------libs/exception0
m---------libs/filesystem0
m---------libs/foreach0
m---------libs/format0
m---------libs/function0
m---------libs/function_types0
m---------libs/functional0
m---------libs/fusion0
m---------libs/gil0
m---------libs/graph0
m---------libs/graph_parallel0
-rw-r--r--libs/index.html14
m---------libs/integer0
m---------libs/interprocess0
m---------libs/intrusive0
m---------libs/io0
m---------libs/iostreams0
m---------libs/iterator0
m---------libs/lambda0
-rw-r--r--libs/libraries.htm726
m---------libs/logic0
-rw-r--r--libs/maintainers.txt90
m---------libs/math0
m---------libs/mpi0
m---------libs/mpl0
m---------libs/multi_array0
m---------libs/multi_index0
m---------libs/numeric/conversion0
-rw-r--r--libs/numeric/index.html14
m---------libs/numeric/interval0
-rw-r--r--libs/numeric/sublibs1
m---------libs/numeric/ublas0
m---------libs/optional0
m---------libs/parameter0
-rw-r--r--libs/platform_maintainers.txt38
m---------libs/pool0
m---------libs/preprocessor0
m---------libs/program_options0
m---------libs/property_map0
m---------libs/ptr_container0
m---------libs/python0
m---------libs/random0
m---------libs/range0
m---------libs/rational0
m---------libs/regex0
m---------libs/serialization0
m---------libs/signals0
m---------libs/smart_ptr0
m---------libs/spirit0
m---------libs/statechart0
m---------libs/static_assert0
m---------libs/system0
m---------libs/test0
m---------libs/thread0
m---------libs/timer0
m---------libs/tokenizer0
m---------libs/tr10
m---------libs/tuple0
m---------libs/type_traits0
m---------libs/typeof0
m---------libs/units0
m---------libs/unordered0
m---------libs/utility0
m---------libs/variant0
m---------libs/wave0
m---------libs/xpressive0
-rw-r--r--more/BoostSponsorshipAgreement.pdfbin0 -> 248822 bytes
-rw-r--r--more/blanket-permission.txt104
-rw-r--r--more/faq.htm15
-rw-r--r--more/getting_started.html12
-rw-r--r--more/getting_started/Jamfile.v223
-rw-r--r--more/getting_started/detail/binary-head.rst10
-rw-r--r--more/getting_started/detail/build-from-source-head.rst126
-rw-r--r--more/getting_started/detail/build-from-source-tail.rst67
-rw-r--r--more/getting_started/detail/build-simple-head.rst28
-rw-r--r--more/getting_started/detail/common-footnotes.rst26
-rw-r--r--more/getting_started/detail/common-unix.rst24
-rw-r--r--more/getting_started/detail/common-windows.rst34
-rw-r--r--more/getting_started/detail/common.rst5
-rw-r--r--more/getting_started/detail/conclusion.rst39
-rw-r--r--more/getting_started/detail/distro.rst88
-rw-r--r--more/getting_started/detail/errors-and-warnings.rst16
-rw-r--r--more/getting_started/detail/header-only.rst48
-rw-r--r--more/getting_started/detail/library-naming.rst80
-rw-r--r--more/getting_started/detail/link-head.rst39
-rw-r--r--more/getting_started/detail/links.rst16
-rw-r--r--more/getting_started/detail/release-variables.rst12
-rw-r--r--more/getting_started/detail/test-head.rst16
-rw-r--r--more/getting_started/index.html65
-rw-r--r--more/getting_started/index.rst70
-rw-r--r--more/getting_started/unix-variants.html795
-rw-r--r--more/getting_started/unix-variants.rst243
-rw-r--r--more/getting_started/windows.html907
-rw-r--r--more/getting_started/windows.rst362
-rw-r--r--more/index.htm102
-rw-r--r--more/writingdoc/design.html576
-rw-r--r--more/writingdoc/index.html57
-rw-r--r--more/writingdoc/introduction.html68
-rw-r--r--more/writingdoc/structure.html433
-rw-r--r--more/writingdoc/template/acknowledgments.html48
-rw-r--r--more/writingdoc/template/bibliography.html48
-rw-r--r--more/writingdoc/template/configuration.html145
-rw-r--r--more/writingdoc/template/definitions.html78
-rw-r--r--more/writingdoc/template/faq.html61
-rw-r--r--more/writingdoc/template/header.html346
-rw-r--r--more/writingdoc/template/index.html126
-rw-r--r--more/writingdoc/template/overview.html79
-rw-r--r--more/writingdoc/template/rationale.html79
-rw-r--r--people/people.htm15
-rw-r--r--rst.css149
-rw-r--r--status/Jamfile.v2194
-rw-r--r--status/explicit-failures-markup.xml6123
-rw-r--r--status/explicit-failures.xsd99
-rw-r--r--tools/Jamfile.v257
m---------tools/bcp0
m---------tools/boostbook0
m---------tools/build0
-rw-r--r--tools/common/time_string.hpp53
-rw-r--r--tools/index.html107
m---------tools/inspect0
m---------tools/litre0
-rw-r--r--tools/make-cputime-page.pl54
m---------tools/quickbook0
-rw-r--r--tools/regression/build/Jamroot.jam78
-rw-r--r--tools/regression/build/vcide/compiler_status.vcproj59
-rw-r--r--tools/regression/build/vcide/library_status.vcproj64
-rw-r--r--tools/regression/build/vcide/process_jam_log.sln21
-rw-r--r--tools/regression/build/vcide/process_jam_log.vcproj72
-rw-r--r--tools/regression/build/vcide/regression.sln37
-rw-r--r--tools/regression/doc/index.html54
-rw-r--r--tools/regression/doc/instructions.html109
-rw-r--r--tools/regression/doc/library_status.html460
-rw-r--r--tools/regression/index.html23
-rwxr-xr-xtools/regression/src/boost_svn_export_archive.sh70
-rw-r--r--tools/regression/src/collect_and_upload_logs.py500
-rw-r--r--tools/regression/src/compiler_status.cpp1037
-rw-r--r--tools/regression/src/detail/tiny_xml.cpp167
-rw-r--r--tools/regression/src/detail/tiny_xml.hpp70
-rw-r--r--tools/regression/src/detail/tiny_xml_test.cpp17
-rw-r--r--tools/regression/src/detail/tiny_xml_test.txt12
-rw-r--r--tools/regression/src/library_status.cpp983
-rw-r--r--tools/regression/src/library_test.bat15
-rwxr-xr-xtools/regression/src/library_test.sh14
-rwxr-xr-xtools/regression/src/library_test_all.sh85
-rw-r--r--tools/regression/src/process_jam_log.cpp831
-rw-r--r--tools/regression/src/regression-logs.pl197
-rw-r--r--tools/regression/src/regression.py791
-rw-r--r--tools/regression/src/run.py60
-rw-r--r--tools/regression/src/run_tests.sh191
-rwxr-xr-xtools/regression/src/smoke.py197
-rw-r--r--tools/regression/test/Jamfile.v221
-rw-r--r--tools/regression/test/compile-fail~fail.cpp10
-rw-r--r--tools/regression/test/compile-fail~pass.cpp9
-rw-r--r--tools/regression/test/compile~fail.cpp9
-rw-r--r--tools/regression/test/compile~pass.cpp9
-rw-r--r--tools/regression/test/compile~warn.cpp18
-rw-r--r--tools/regression/test/run-fail~compile-fail.cpp9
-rw-r--r--tools/regression/test/run-fail~fail-warn.cpp16
-rw-r--r--tools/regression/test/run-fail~fail.cpp12
-rw-r--r--tools/regression/test/run-fail~pass.cpp15
-rw-r--r--tools/regression/test/run-fail~warn.cpp20
-rw-r--r--tools/regression/test/run~compile-fail.cpp9
-rw-r--r--tools/regression/test/run~fail-note.cpp17
-rw-r--r--tools/regression/test/run~fail-warn.cpp20
-rw-r--r--tools/regression/test/run~fail.cpp14
-rw-r--r--tools/regression/test/run~note.cpp17
-rw-r--r--tools/regression/test/run~pass.cpp12
-rw-r--r--tools/regression/test/run~warn-note.cpp24
-rw-r--r--tools/regression/test/run~warn.cpp18
-rw-r--r--tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam11
-rw-r--r--tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam12
-rw-r--r--tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v29
-rw-r--r--tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v27
-rw-r--r--tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp1
-rw-r--r--tools/regression/test/test-boost-build/missing_dependencies/test.cpp1
-rw-r--r--tools/regression/test/test-cases/Huber2629/bjam.log36
-rw-r--r--tools/regression/test/test-cases/Huber2629/expected/results.xml27
-rw-r--r--tools/regression/test/test-cases/general/bjam.log325
-rw-r--r--tools/regression/test/test-cases/general/expected/results.xml167
-rw-r--r--tools/regression/test/test-cases/incremental/bjam.log33
-rw-r--r--tools/regression/test/test-cases/incremental/bjam.log.138
-rw-r--r--tools/regression/test/test-cases/incremental/expected/results.xml9
-rw-r--r--tools/regression/test/test.bat10
-rw-r--r--tools/regression/test/test.py181
-rw-r--r--tools/regression/xsl_reports/boost_wide_report.py836
-rw-r--r--tools/regression/xsl_reports/boostbook_report.py179
-rwxr-xr-xtools/regression/xsl_reports/build_results.sh123
-rw-r--r--tools/regression/xsl_reports/email_maintainers.py631
-rw-r--r--tools/regression/xsl_reports/empty_expected_results.xml5
-rw-r--r--tools/regression/xsl_reports/make_snapshot.py174
-rw-r--r--tools/regression/xsl_reports/report.py371
-rw-r--r--tools/regression/xsl_reports/test/common.py165
-rw-r--r--tools/regression/xsl_reports/test/expected_results.xml3
-rw-r--r--tools/regression/xsl_reports/test/generate_test_results.py160
-rw-r--r--tools/regression/xsl_reports/test/generate_test_results_v1.py85
-rw-r--r--tools/regression/xsl_reports/test/restrict_to_library.xsl36
-rw-r--r--tools/regression/xsl_reports/test/run_notes_regression.py32
-rw-r--r--tools/regression/xsl_reports/test/run_v1.py35
-rw-r--r--tools/regression/xsl_reports/test/test.py34
-rw-r--r--tools/regression/xsl_reports/test/test_boost_wide_report.py36
-rw-r--r--tools/regression/xsl_reports/test_results.xsd107
-rw-r--r--tools/regression/xsl_reports/utils/__init__.py13
-rw-r--r--tools/regression/xsl_reports/utils/accept_args.py30
-rw-r--r--tools/regression/xsl_reports/utils/char_translation_table.py13
-rw-r--r--tools/regression/xsl_reports/utils/check_existance.py9
-rw-r--r--tools/regression/xsl_reports/utils/checked_system.py22
-rw-r--r--tools/regression/xsl_reports/utils/libxslt.py49
-rw-r--r--tools/regression/xsl_reports/utils/log.py18
-rw-r--r--tools/regression/xsl_reports/utils/makedirs.py7
-rw-r--r--tools/regression/xsl_reports/utils/rename.py17
-rw-r--r--tools/regression/xsl_reports/utils/send_mail.py13
-rw-r--r--tools/regression/xsl_reports/utils/sourceforge.py48
-rw-r--r--tools/regression/xsl_reports/utils/tar.py16
-rw-r--r--tools/regression/xsl_reports/utils/zip.py12
-rw-r--r--tools/regression/xsl_reports/xsl/add_expected_results.xsl144
-rw-r--r--tools/regression/xsl_reports/xsl/common.xsl182
-rw-r--r--tools/regression/xsl_reports/xsl/html/issues_legend.html36
-rw-r--r--tools/regression/xsl_reports/xsl/html/library_developer_legend.html72
-rw-r--r--tools/regression/xsl_reports/xsl/html/library_user_legend.html65
-rw-r--r--tools/regression/xsl_reports/xsl/html/make_tinyurl.html24
-rw-r--r--tools/regression/xsl_reports/xsl/html/master.css525
-rw-r--r--tools/regression/xsl_reports/xsl/html/summary_developer_legend.html75
-rw-r--r--tools/regression/xsl_reports/xsl/html/summary_user_legend.html65
-rw-r--r--tools/regression/xsl_reports/xsl/issues_page.xsl223
-rw-r--r--tools/regression/xsl_reports/xsl/links_page.xsl134
-rw-r--r--tools/regression/xsl_reports/xsl/produce_expected_results.xsl31
-rw-r--r--tools/regression/xsl_reports/xsl/result_page.xsl702
-rw-r--r--tools/regression/xsl_reports/xsl/summary_page.xsl361
-rw-r--r--tools/regression/xsl_reports/xsl/test/test_re_match.xml57
-rw-r--r--tools/regression/xsl_reports/xsl/test/test_re_match.xsl60
-rw-r--r--tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl270
-rw-r--r--tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl42
-rw-r--r--tools/regression/xsl_reports/xsl/v2/common.xsl668
-rw-r--r--tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl39
-rw-r--r--tools/regression/xsl_reports/xsl/v2/expected_to_1_33_format.xsl32
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/issues_legend.html36
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html82
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html89
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html22
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/master.css654
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html72
-rw-r--r--tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html76
-rw-r--r--tools/regression/xsl_reports/xsl/v2/issues_page.xsl327
-rw-r--r--tools/regression/xsl_reports/xsl/v2/links_page.xsl399
-rw-r--r--tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl36
-rw-r--r--tools/regression/xsl_reports/xsl/v2/result_page.xsl690
-rw-r--r--tools/regression/xsl_reports/xsl/v2/runners.xsl56
-rw-r--r--tools/regression/xsl_reports/xsl/v2/summary_page.xsl367
-rw-r--r--tools/release/index.html64
-rwxr-xr-xtools/release/inspect.sh25
-rwxr-xr-xtools/release/make_packages.sh45
-rwxr-xr-xtools/release/snapshot_posix.sh34
-rwxr-xr-xtools/release/snapshot_windows.sh41
-rw-r--r--wiki/index.html13
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
new file mode 100644
index 0000000000..b4d51fcd5c
--- /dev/null
+++ b/boost.png
Binary files differ
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
new file mode 100644
index 0000000000..764bf4f0c3
--- /dev/null
+++ b/doc/html/images/blank.png
Binary files differ
diff --git a/doc/html/images/caution.png b/doc/html/images/caution.png
new file mode 100644
index 0000000000..5b7809ca4a
--- /dev/null
+++ b/doc/html/images/caution.png
Binary files differ
diff --git a/doc/html/images/draft.png b/doc/html/images/draft.png
new file mode 100644
index 0000000000..0084708c9b
--- /dev/null
+++ b/doc/html/images/draft.png
Binary files differ
diff --git a/doc/html/images/home.png b/doc/html/images/home.png
new file mode 100644
index 0000000000..5584aacb09
--- /dev/null
+++ b/doc/html/images/home.png
Binary files differ
diff --git a/doc/html/images/important.png b/doc/html/images/important.png
new file mode 100644
index 0000000000..12c90f607a
--- /dev/null
+++ b/doc/html/images/important.png
Binary files differ
diff --git a/doc/html/images/next.png b/doc/html/images/next.png
new file mode 100644
index 0000000000..59800b4e87
--- /dev/null
+++ b/doc/html/images/next.png
Binary files differ
diff --git a/doc/html/images/next_disabled.png b/doc/html/images/next_disabled.png
new file mode 100644
index 0000000000..10a8c59d7b
--- /dev/null
+++ b/doc/html/images/next_disabled.png
Binary files differ
diff --git a/doc/html/images/note.png b/doc/html/images/note.png
new file mode 100644
index 0000000000..d0c3c645ab
--- /dev/null
+++ b/doc/html/images/note.png
Binary files differ
diff --git a/doc/html/images/prev.png b/doc/html/images/prev.png
new file mode 100644
index 0000000000..d88a40f923
--- /dev/null
+++ b/doc/html/images/prev.png
Binary files differ
diff --git a/doc/html/images/prev_disabled.png b/doc/html/images/prev_disabled.png
new file mode 100644
index 0000000000..ab3c17e02d
--- /dev/null
+++ b/doc/html/images/prev_disabled.png
Binary files differ
diff --git a/doc/html/images/tip.png b/doc/html/images/tip.png
new file mode 100644
index 0000000000..5c4aab3bb3
--- /dev/null
+++ b/doc/html/images/tip.png
Binary files differ
diff --git a/doc/html/images/toc-blank.png b/doc/html/images/toc-blank.png
new file mode 100644
index 0000000000..6ffad17a0c
--- /dev/null
+++ b/doc/html/images/toc-blank.png
Binary files differ
diff --git a/doc/html/images/toc-minus.png b/doc/html/images/toc-minus.png
new file mode 100644
index 0000000000..abbb020c8e
--- /dev/null
+++ b/doc/html/images/toc-minus.png
Binary files differ
diff --git a/doc/html/images/toc-plus.png b/doc/html/images/toc-plus.png
new file mode 100644
index 0000000000..941312ce0d
--- /dev/null
+++ b/doc/html/images/toc-plus.png
Binary files differ
diff --git a/doc/html/images/up.png b/doc/html/images/up.png
new file mode 100644
index 0000000000..17d9c3ec49
--- /dev/null
+++ b/doc/html/images/up.png
Binary files differ
diff --git a/doc/html/images/up_disabled.png b/doc/html/images/up_disabled.png
new file mode 100644
index 0000000000..e22bc87121
--- /dev/null
+++ b/doc/html/images/up_disabled.png
Binary files differ
diff --git a/doc/html/images/warning.png b/doc/html/images/warning.png
new file mode 100644
index 0000000000..1c33db8f34
--- /dev/null
+++ b/doc/html/images/warning.png
Binary files differ
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&eacute;</firstname>
+ <surname>Br&ouml;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&auml;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
new file mode 100644
index 0000000000..764bf4f0c3
--- /dev/null
+++ b/doc/src/images/blank.png
Binary files differ
diff --git a/doc/src/images/caution.png b/doc/src/images/caution.png
new file mode 100644
index 0000000000..5b7809ca4a
--- /dev/null
+++ b/doc/src/images/caution.png
Binary files differ
diff --git a/doc/src/images/draft.png b/doc/src/images/draft.png
new file mode 100644
index 0000000000..0084708c9b
--- /dev/null
+++ b/doc/src/images/draft.png
Binary files differ
diff --git a/doc/src/images/home.png b/doc/src/images/home.png
new file mode 100644
index 0000000000..5584aacb09
--- /dev/null
+++ b/doc/src/images/home.png
Binary files differ
diff --git a/doc/src/images/important.png b/doc/src/images/important.png
new file mode 100644
index 0000000000..12c90f607a
--- /dev/null
+++ b/doc/src/images/important.png
Binary files differ
diff --git a/doc/src/images/next.png b/doc/src/images/next.png
new file mode 100644
index 0000000000..59800b4e87
--- /dev/null
+++ b/doc/src/images/next.png
Binary files differ
diff --git a/doc/src/images/next_disabled.png b/doc/src/images/next_disabled.png
new file mode 100644
index 0000000000..10a8c59d7b
--- /dev/null
+++ b/doc/src/images/next_disabled.png
Binary files differ
diff --git a/doc/src/images/note.png b/doc/src/images/note.png
new file mode 100644
index 0000000000..d0c3c645ab
--- /dev/null
+++ b/doc/src/images/note.png
Binary files differ
diff --git a/doc/src/images/prev.png b/doc/src/images/prev.png
new file mode 100644
index 0000000000..d88a40f923
--- /dev/null
+++ b/doc/src/images/prev.png
Binary files differ
diff --git a/doc/src/images/prev_disabled.png b/doc/src/images/prev_disabled.png
new file mode 100644
index 0000000000..ab3c17e02d
--- /dev/null
+++ b/doc/src/images/prev_disabled.png
Binary files differ
diff --git a/doc/src/images/tip.png b/doc/src/images/tip.png
new file mode 100644
index 0000000000..5c4aab3bb3
--- /dev/null
+++ b/doc/src/images/tip.png
Binary files differ
diff --git a/doc/src/images/toc-blank.png b/doc/src/images/toc-blank.png
new file mode 100644
index 0000000000..6ffad17a0c
--- /dev/null
+++ b/doc/src/images/toc-blank.png
Binary files differ
diff --git a/doc/src/images/toc-minus.png b/doc/src/images/toc-minus.png
new file mode 100644
index 0000000000..abbb020c8e
--- /dev/null
+++ b/doc/src/images/toc-minus.png
Binary files differ
diff --git a/doc/src/images/toc-plus.png b/doc/src/images/toc-plus.png
new file mode 100644
index 0000000000..941312ce0d
--- /dev/null
+++ b/doc/src/images/toc-plus.png
Binary files differ
diff --git a/doc/src/images/up.png b/doc/src/images/up.png
new file mode 100644
index 0000000000..17d9c3ec49
--- /dev/null
+++ b/doc/src/images/up.png
Binary files differ
diff --git a/doc/src/images/up_disabled.png b/doc/src/images/up_disabled.png
new file mode 100644
index 0000000000..e22bc87121
--- /dev/null
+++ b/doc/src/images/up_disabled.png
Binary files differ
diff --git a/doc/src/images/warning.png b/doc/src/images/warning.png
new file mode 100644
index 0000000000..1c33db8f34
--- /dev/null
+++ b/doc/src/images/warning.png
Binary files differ
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>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="libs/libraries.htm">Libraries</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="tools/index.html">Tools&nbsp;</a>&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="http://www.boost.org">Web Site</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="http://www.boost.org/users/news/">News</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="http://www.boost.org/community/">Community</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <a href="http://www.boost.org/users/faq.html">FAQ</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp; <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 &copy; 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>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="../tools/index.html">Tools&nbsp;</a>&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org">Web Site</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/users/news/">News</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/community/">Community</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;
+ <a href="http://www.boost.org/users/faq.html">FAQ</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <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.&nbsp;</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&auml;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&ntilde;aga</li>
+ <li><a href="numeric/interval/doc/interval.htm">interval </a>- Extends the
+ usual arithmetic functions to mathematical intervals, from Guillaume
+ Melquiond, Herv&eacute; Br&ouml;nnimann and Sylvain Pion.</li>
+ <li><a href="intrusive/index.html">intrusive </a>- Intrusive containers and algorithms, from Ion Gazta&ntilde;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&eacute; Br&ouml;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&iacute;n M L&oacute;pez
+ Mu&ntilde;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&auml;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 &amp;
+ 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&nbsp;
+ 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>&nbsp;
+ <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&nbsp;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&nbsp;
+ 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&nbsp;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&ntilde;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&iacute;n M L&oacute;pez
+ Mu&ntilde;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&eacute; Br&ouml;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>&nbsp; <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&auml;rvi,
+ Peter Dimov, Doug Gregor, and Dave Abrahams.</li>
+
+ <li><a href="signals/index.html">signals</a> - managed signals &amp;
+ 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&auml;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&ntilde;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&eacute; Br&ouml;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&iacute;n M L&oacute;pez
+ Mu&ntilde;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>&nbsp;
+ <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&nbsp;
+ 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>&nbsp;
+ <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>&copy; 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>.&nbsp;<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
new file mode 100644
index 0000000000..ea8b838b2f
--- /dev/null
+++ b/more/BoostSponsorshipAgreement.pdf
Binary files differ
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 &quot;My name is <em>your name</em>&quot;
+</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&nbsp;&nbsp;&nbsp;Get Boost</a></li>
+<li><a class="reference internal" href="#the-boost-distribution" id="id19">2&nbsp;&nbsp;&nbsp;The Boost Distribution</a></li>
+<li><a class="reference internal" href="#header-only-libraries" id="id20">3&nbsp;&nbsp;&nbsp;Header-Only Libraries</a></li>
+<li><a class="reference internal" href="#build-a-simple-program-using-boost" id="id21">4&nbsp;&nbsp;&nbsp;Build a Simple Program Using Boost</a><ul class="auto-toc">
+<li><a class="reference internal" href="#errors-and-warnings" id="id22">4.1&nbsp;&nbsp;&nbsp;Errors and Warnings</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#prepare-to-use-a-boost-library-binary" id="id23">5&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Easy Build and Install</a></li>
+<li><a class="reference internal" href="#or-build-custom-binaries" id="id25">5.2&nbsp;&nbsp;&nbsp;Or, Build Custom Binaries</a><ul class="auto-toc">
+<li><a class="reference internal" href="#get-bjam" id="id26">5.2.1&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Identify Your Toolset</a></li>
+<li><a class="reference internal" href="#select-a-build-directory" id="id28">5.2.3&nbsp;&nbsp;&nbsp;Select a Build Directory</a></li>
+<li><a class="reference internal" href="#invoke-bjam" id="id29">5.2.4&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Expected Build Output</a></li>
+<li><a class="reference internal" href="#in-case-of-build-errors" id="id31">5.4&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Link Your Program to a Boost Library</a><ul class="auto-toc">
+<li><a class="reference internal" href="#library-naming" id="id33">6.1&nbsp;&nbsp;&nbsp;Library Naming</a></li>
+<li><a class="reference internal" href="#test-your-program" id="id34">6.2&nbsp;&nbsp;&nbsp;Test Your Program</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#conclusion-and-further-resources" id="id35">7&nbsp;&nbsp;&nbsp;Conclusion and Further Resources</a></li>
+</ul>
+</div>
+<div class="section" id="get-boost">
+<h1><a class="toc-backref" href="#id18">1&nbsp;&nbsp;&nbsp;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&amp;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&amp;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&amp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/<em>whatever</em>.hpp&gt;
+</pre>
+<p>or</p>
+<pre class="literal-block">
+#include &quot;boost/<em>whatever</em>.hpp&quot;
+</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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/lambda/lambda.hpp&gt;
+#include &lt;iostream&gt;
+#include &lt;iterator&gt;
+#include &lt;algorithm&gt;
+
+int main()
+{
+ using namespace boost::lambda;
+ typedef std::istream_iterator&lt;int&gt; in;
+
+ std::for_each(
+ in(std::cin), in(), std::cout &lt;&lt; (_1 * 3) &lt;&lt; &quot; &quot; );
+}
+</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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&amp;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&nbsp;&nbsp;&nbsp;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>&nbsp;</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>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">kylix</span></tt></td>
+<td>Borland</td>
+<td>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">msvc</span></tt></td>
+<td>Microsoft</td>
+<td>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">qcc</span></tt></td>
+<td>QNX Software Systems</td>
+<td>&nbsp;</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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/regex.hpp&gt;
+#include &lt;iostream&gt;
+#include &lt;string&gt;
+
+int main()
+{
+ std::string line;
+ boost::regex pat( &quot;^Subject: (Re: |Aw: )*(.*)&quot; );
+
+ while (std::cin)
+ {
+ std::getline(std::cin, line);
+ boost::smatch matches;
+ if (boost::regex_match(line, matches, pat))
+ std::cout &lt;&lt; matches[2] &lt;&lt; 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&nbsp;&nbsp;&nbsp;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 &quot;-1_31_1&quot;.</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. &quot;.so.1.34&quot;) 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&nbsp;&nbsp;&nbsp;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 &lt; <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&nbsp;&nbsp;&nbsp;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">&mdash;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&nbsp;&nbsp;&nbsp;Get Boost</a></li>
+<li><a class="reference internal" href="#the-boost-distribution" id="id27">2&nbsp;&nbsp;&nbsp;The Boost Distribution</a></li>
+<li><a class="reference internal" href="#header-only-libraries" id="id28">3&nbsp;&nbsp;&nbsp;Header-Only Libraries</a></li>
+<li><a class="reference internal" href="#build-a-simple-program-using-boost" id="id29">4&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Build From the Visual Studio IDE</a></li>
+<li><a class="reference internal" href="#or-build-from-the-command-prompt" id="id31">4.2&nbsp;&nbsp;&nbsp;Or, Build From the Command Prompt</a></li>
+<li><a class="reference internal" href="#errors-and-warnings" id="id32">4.3&nbsp;&nbsp;&nbsp;Errors and Warnings</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#prepare-to-use-a-boost-library-binary" id="id33">5&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Install Visual Studio Binaries</a></li>
+<li><a class="reference internal" href="#or-build-binaries-from-source" id="id35">5.2&nbsp;&nbsp;&nbsp;Or, Build Binaries From Source</a><ul class="auto-toc">
+<li><a class="reference internal" href="#get-bjam" id="id36">5.2.1&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Identify Your Toolset</a></li>
+<li><a class="reference internal" href="#select-a-build-directory" id="id38">5.2.3&nbsp;&nbsp;&nbsp;Select a Build Directory</a></li>
+<li><a class="reference internal" href="#invoke-bjam" id="id39">5.2.4&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Expected Build Output</a></li>
+<li><a class="reference internal" href="#in-case-of-build-errors" id="id41">5.4&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;Or, Link From the Command Prompt</a></li>
+<li><a class="reference internal" href="#library-naming" id="id45">6.3&nbsp;&nbsp;&nbsp;Library Naming</a></li>
+<li><a class="reference internal" href="#test-your-program" id="id46">6.4&nbsp;&nbsp;&nbsp;Test Your Program</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#conclusion-and-further-resources" id="id47">7&nbsp;&nbsp;&nbsp;Conclusion and Further Resources</a></li>
+</ul>
+</div>
+<div class="section" id="get-boost">
+<h1><a class="toc-backref" href="#id26">1&nbsp;&nbsp;&nbsp;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&amp;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&amp;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&amp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/<em>whatever</em>.hpp&gt;
+</pre>
+<p>or</p>
+<pre class="literal-block">
+#include &quot;boost/<em>whatever</em>.hpp&quot;
+</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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/lambda/lambda.hpp&gt;
+#include &lt;iostream&gt;
+#include &lt;iterator&gt;
+#include &lt;algorithm&gt;
+
+int main()
+{
+ using namespace boost::lambda;
+ typedef std::istream_iterator&lt;int&gt; in;
+
+ std::for_each(
+ in(std::cin), in(), std::cout &lt;&lt; (_1 * 3) &lt;&lt; &quot; &quot; );
+}
+</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&nbsp;&nbsp;&nbsp;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> &gt; <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> &gt; <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> &gt; <em>C/C++</em> &gt; <em>General</em> &gt; <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> &gt; <em>C/C++</em> &gt; <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 &quot;Z&quot;, 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&nbsp;&nbsp;&nbsp;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> &gt; <em>Microsoft Visual Studio 2005</em>
+&gt; <em>Visual Studio Tools</em> &gt; <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> &gt; <em>Microsoft Visual Studio .NET 2003</em>
+&gt; <em>Visual Studio .NET Tools</em> &gt; <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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&amp;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&nbsp;&nbsp;&nbsp;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>&nbsp;</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>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">kylix</span></tt></td>
+<td>Borland</td>
+<td>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">msvc</span></tt></td>
+<td>Microsoft</td>
+<td>&nbsp;</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">qcc</span></tt></td>
+<td>QNX Software Systems</td>
+<td>&nbsp;</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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&gt; 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>&gt; bjam <strong>^</strong>
+More? <strong>--build-dir=</strong>&quot;C:\Documents and Settings\dave\build-boost&quot; <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">&quot;</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&gt; 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>&gt; bjam <strong>^</strong>
+More? <strong>--build-dir=</strong>&quot;C:\Documents and Settings\dave\build-boost&quot; <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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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 &lt;boost/regex.hpp&gt;
+#include &lt;iostream&gt;
+#include &lt;string&gt;
+
+int main()
+{
+ std::string line;
+ boost::regex pat( &quot;^Subject: (Re: |Aw: )*(.*)&quot; );
+
+ while (std::cin)
+ {
+ std::getline(std::cin, line);
+ boost::smatch matches;
+ if (boost::regex_match(line, matches, pat))
+ std::cout &lt;&lt; matches[2] &lt;&lt; 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&nbsp;&nbsp;&nbsp;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> &gt; <em>Linker</em> &gt; <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&nbsp;&nbsp;&nbsp;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&nbsp;&nbsp;&nbsp;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 &quot;-1_31_1&quot;.</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. &quot;.so.1.34&quot;) 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&nbsp;&nbsp;&nbsp;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 &lt; <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&nbsp;&nbsp;&nbsp;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">&mdash;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&amp;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">&quot;</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>&quot;C:\Documents and Settings\dave\build-boost&quot;
+</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>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="../libs/libraries.htm">
+ Libraries</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="../tools/index.html">Tools&nbsp;</a>&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org">Web Site</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/users/news/">News</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/community/">Community</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;
+ <a href="http://www.boost.org/users/faq.html">FAQ</a>&nbsp;</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>&nbsp;
+ 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>.&nbsp;
+ 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>.&nbsp; 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>.&nbsp; </strong>&nbsp;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>.&nbsp;
+ 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>.&nbsp;
+ 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>.&nbsp; 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>.&nbsp; Should Boost
+ libraries use other boost libraries?&nbsp; What about the C++ Standard
+ Library?&nbsp; It's another trade-off.</p>
+ <p><b><a href="http://www.boost.org/community/moderators.html">Moderators</a></b>.&nbsp; 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>&nbsp;Information
+ about the Boost Software License.</p>
+ <p><b><a href="http://www.boost.org/users/bibliography.html">Bibliography</a> </b>&nbsp;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>&nbsp;
+ 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>&nbsp;
+ 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>&nbsp;
+ 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>&nbsp; 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" (&lt;dl&gt; and &lt;dt&gt; tags). A definition list has no bullets or
+ ordered specifications and produces a cleaner layout then an unordered list
+ (&lt;ul&gt; and &lt;li&gt; tags) or an ordered list (&lt;ol&gt; and
+ &lt;li&gt; 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 &lt;dl&gt; 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" (&lt;dl&gt; and &lt;DT&gt; tags). A definition list has
+ no bullets or ordered specifications and produces a cleaner layout then an
+ unordered list (&lt;UL&gt; and &lt;li&gt; tags) or an ordered list
+ (&lt;ol&gt; and &lt;li&gt; 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 &lt;dl&gt;
+ 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>&lt;boost/config.hpp&gt;</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 &lt;title&gt; 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 &lt;hr&gt; 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" (&lt;dl&gt; and &lt;DT&gt; tags). A definition list has no bullets or
+ ordered specifications and produces a cleaner layout then an unordered list
+ (&lt;UL&gt; and &lt;li&gt; tags) or an ordered list (&lt;ol&gt; and
+ &lt;li&gt; tags). If you choose to use the Boost Style Sheet you should add
+ a <code>class="page-index"</code> attribute/value pair to the &lt;dl&gt;
+ 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
+ &lt;sup&gt; 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 &lt;hr&gt; 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>
+&lt;hr&gt;
+&lt;p&gt;Revised
+ &lt;!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan --&gt;
+ 01 January, 2001
+ &lt;!--webbot bot="Timestamp" endspan i-checksum="39359" --&gt;
+&lt;/p&gt;
+</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
+ &lt;code&gt;&lt;/code&gt; or &lt;pre&gt;&lt;/pre&gt; tags. For code that's
+ placed inline with other text you use &lt;code&gt;&lt;/code&gt; tags, while
+ &lt;pre&gt;&lt;/pre&gt; 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 &lt;pre&gt;&lt;/pre&gt; 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 (&lt;UL&gt; and &lt;li&gt;
+ tags), ordered (&lt;ol&gt; and &lt;li&gt; tags) or definition (&lt;dl&gt;
+ and &lt;DT&gt; 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 &lt;img&gt; 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 (&amp;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 &lt;dl&gt; tags when writing index lists.</dt>
+
+ <dt><b>page-index</b> Used for &lt;dl&gt; tags when writing page index
+ lists.</dt>
+
+ <dt><b>Footnote</b> Used when writing Footnote numbers.</dt>
+
+ <dt><b>function-semantics</b> Used for &lt;dl&gt; 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 &copy; 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 &copy; 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 &copy; 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>&lt;code&gt; ... &lt;/code&gt;</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 &amp;&amp; min &lt;= 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 &amp; x );
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Postcondition:</b> <code>x &gt;= 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 &gt;
+ 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 &copy; 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 &copy; 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 &copy; 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">&lt;boost/config.hpp&gt;</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 &copy; 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 &copy; 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 &copy; 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 &lt;{{header}}&gt;</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 &lt;{{header}}&gt;</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 &copy; 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 &copy; 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 &copy; 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 &copy; 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&#195;&#179;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&#195;&#179;pez" date="09 Jul 2004" refid="17"/>
+ </mark-unusable>
+ <mark-unusable>
+ <toolset name="*como-4_3_3-msvc"/>
+ <note author="J. L&#195;&#179;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&#195;&#179;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&#195;&#179;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&lt;T[N]&gt;, 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&#241;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&#241;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&#241;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&#195;&#179;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&#195;&#179;pez" date="09 Jul 2004" refid="17"/>
+ </mark-unusable>
+ <mark-unusable>
+ <toolset name="*como-4_3_3-msvc"/>
+ <note author="J. L&#195;&#179;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&#195;&#179;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&#195;&#179;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&#195;&#179;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&#195;&#179;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&#195;&#179;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&#195;&#179;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&lt;&gt;::_Stz from the
+ &lt;iosfwd&gt; 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&#195;&#179;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&lt;T,U&gt;::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&amp;</code> that should
+ have been <code>T const*</code> and <code>T const&amp;</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&lt;long double&gt;::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&lt;float&gt;</code> and
+ <code>interval&lt;double&gt;</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 &lt;locale&gt; 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 &lt; class T, bool B = is_foo &lt; T &gt; ::value &gt;"
+ </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 &lt;tree&gt; 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&lt;int&gt; 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&lt;bool&gt; 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>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="../libs/libraries.htm">
+ Libraries</a><a href="../tools/index.html">&nbsp;</a>&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org">Web Site</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/users/news/">News</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp; <a href="http://www.boost.org/community/">Community</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp;
+ <a href="http://www.boost.org/users/faq.html">FAQ</a>&nbsp;&nbsp;<font color="#FFFFFF">&nbsp;
+ </font>&nbsp;&nbsp;&nbsp;&nbsp; <a href="../more/index.htm">More Info</a>&nbsp;</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>
+ &nbsp;
+ <li>
+ <a href="regression/index.html">Regression</a> - The Boost regression testing
+ system reporting sources.<br>
+&nbsp;<li>
+ <a href="release/index.html">Release</a> - Scripts used to build the
+ release tarballs and zips.<br>
+ &nbsp;
+ <li>
+ <a href="inspect/index.html">Inspect </a>- The inspection tool used to detect
+ errors in the Boost directory hierarchy.<br>
+ &nbsp;
+ <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>
+ &nbsp;
+ <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>
+ &nbsp;
+ <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>
+ &nbsp;
+ <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>
+&nbsp;</li>
+ <li>Subversion 1.4 or later.<br>
+&nbsp;</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>
+&nbsp;</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>
+&nbsp;</li>
+ <li>Run &quot;<code>python run.py [options] [commands]</code>&quot;.</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:
+ &lt;user&gt;:&lt;password&gt;@&lt;host&gt;[:&lt;port&gt;]
+ --skip-tests=SKIP_TESTS
+ do not run bjam; used for testing script changes</pre>
+ </dd>
+</dl>
+<p>To test trunk use &quot;<code>--tag=trunk</code>&quot; (the default), and to test the
+release use &quot;<code>--tag=branches/release</code>&quot;. 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/&lt;library name&gt;/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/&lt;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/&lt;library&gt;/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> &nbsp;</td><td>Number of Failures</td><td> &nbsp;</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 += "&lt;";
+ else if ( src[pos] == '>' ) target += "&gt;";
+ else if ( src[pos] == '&' ) target += "&amp;";
+ 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&nbsp;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&lt;MostDerived,Base&gt;'
+ 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" &gt;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" &gt;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" &gt;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" &gt;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" &gt;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" &gt;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" &gt;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 ) &gt; 0 or count( $new_failures_markup ) &gt; 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 ) &gt; 0 or count( $new_failures_markup ) &gt; 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 ) &gt; 0'>
+ <xsl:for-each select="$failures_markup/note">
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </xsl:when>
+
+ <xsl:when test='count( $new_failures_markup ) &gt; 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 != ''">
+ [&#160;<xsl:value-of select="$author"/>&#160;<xsl:value-of select="$date"/>&#160;]
+ </xsl:when>
+ <xsl:when test="$author != ''">
+ [&#160;<xsl:value-of select="$author"/>&#160;]
+ </xsl:when>
+ <xsl:when test="$date != ''">
+ [&#160;<xsl:value-of select="$date"/>&#160;]
+ </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">&lt;toolset&gt;</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">&lt;toolset&gt;</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">&#160;</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, '&gt;@&lt;', @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, '&gt;@&lt;', @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.&#160;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.&#160;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, '&gt;@&lt;', @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 ) &lt; $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 ) &lt; $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>&#160;</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 ) &lt; 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>&#160;|&#160;</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>&#160;|&#160;</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>&#160;|&#160;</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}">&#160;</td>
+ <xsl:for-each select="$run_toolsets/platforms/platform">
+ <xsl:if test="count(./runs/run/toolset) &gt; 0">
+ <td colspan="{count(./runs/run/toolset)}" class="runner">
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:if>
+ </xsl:for-each>
+ <td colspan="{$colspan}">&#160;</td>
+ </tr>
+ </xsl:if>
+
+ <tr>
+ <td colspan="{$colspan}">&#160;</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}">&#160;</td>
+ </tr>
+
+ <tr>
+ <td colspan="{$colspan}">&#160;</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}">&#160;</td>
+ </tr>
+
+ <tr>
+ <td colspan="{$colspan}">&#160;</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 &lt; 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}">&#160;</td>
+ </tr>
+
+ <xsl:if test="$top_or_bottom = 'bottom'">
+ <tr>
+ <td colspan="{$colspan}">&#160;</td>
+ <xsl:for-each select="$run_toolsets/platforms/platform">
+ <xsl:if test="count(./runs/run/toolset) &gt; 0">
+ <td colspan="{count(./runs/run/toolset)}" class="runner">
+ <xsl:value-of select="@name"/>
+ </td>
+ </xsl:if>
+ </xsl:for-each>
+ <td colspan="{$colspan}">&#160;</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'">&#160;library&#160;/&#160;toolset&#160;</xsl:when>
+ <xsl:when test="$mode = 'details'">&#160;test&#160;/&#160;toolset&#160;</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 != ''">
+ [&#160;<xsl:value-of select="$author"/>&#160;<xsl:value-of select="$date"/>&#160;]
+ </xsl:when>
+ <xsl:when test="$author != ''">
+ [&#160;<xsl:value-of select="$author"/>&#160;]
+ </xsl:when>
+ <xsl:when test="$date != ''">
+ [&#160;<xsl:value-of select="$date"/>&#160;]
+ </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">&lt;toolset&gt;</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">&lt;toolset&gt;</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">&#160;pass&#160;</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) &gt; 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) &gt; 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) &gt; 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, '&gt;@&lt;', @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/* ) &gt; 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, '&gt;@&lt;', @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, '&gt;@&lt;', @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, '&gt;@&lt;', @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>&#160;&#160;</xsl:text>
+ <a href="{$log_link}" class="log-link" target="_top">
+ <xsl:copy-of select="$result"/>
+ </a>
+ <xsl:text>&#160;&#160;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>&#160;&#160;</xsl:text>
+ <xsl:copy-of select="$result"/>
+ <xsl:text>&#160;&#160;</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 ) &gt; 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 ) &lt; 1">
+ <xsl:text>&#160;&#160;&#160;&#160;</xsl:text>
+ </xsl:when>
+
+ <xsl:when test="count( $test_log[ @result != 'success' and @status = 'expected' ] ) &gt; 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 ) &gt; 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 ) &lt; 1">
+ <xsl:text>&#160;&#160;&#160;&#160;</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, '&gt;@&lt;', @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, '&gt;@&lt;', @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' ] )"/>
+ &#160;|&#160;
+ Regressions: <xsl:value-of select="count( $test_case_logs[ meta:test_case_status( $explicit_markup, . ) = 'fail-unexpected' ] )"/>
+ &#160;|&#160;
+ 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>&#160;&#160;</xsl:text>
+ <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top">
+ <xsl:text>n/a</xsl:text>
+ </a>
+ <xsl:text>&#160;&#160;</xsl:text>
+ </xsl:when>
+ <xsl:when test="$class='summary-missing'">
+ <xsl:text>&#160;&#160;&#160;&#160;</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>&#160;&#160;</xsl:text>
+ <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top">
+ <xsl:text>fail</xsl:text>
+ </a>
+ <xsl:text>&#160;&#160;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>&#160;&#160;OK&#160;&#160;</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>&#160;</xsl:text>
+ <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top">
+ <xsl:text>unusable</xsl:text>
+ </a>
+ <xsl:text>&#160;</xsl:text>
+ </xsl:when>
+ <xsl:when test="$class='summary-missing'">
+ <xsl:text>&#160;no&#160;results&#160;</xsl:text>
+ </xsl:when>
+ <xsl:when test="$class='summary-fail-unexpected'">
+ <xsl:text>&#160;</xsl:text>
+ <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top">
+ <xsl:text>regress.</xsl:text>
+ </a>
+ <xsl:text>&#160;</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>&#160;</xsl:text>
+ <a href="{$library_page}{$release_postfix}.html" class="log-link" target="_top">
+ <xsl:text>details</xsl:text>
+ </a>
+ <xsl:text>&#160;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>&#160;pass&#160;</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%">&nbsp;</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>