diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000000..81877a714fb4 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,16 @@ +version: 2 +jobs: + build: + docker: + - image: cppalliance/boost_superproject_build:20.04-v2 + parallelism: 2 + steps: + - checkout + - run: wget "https://raw.githubusercontent.com/boostorg/release-tools/develop/ci_boost_common.py" -P ${HOME} + - run: wget "https://raw.githubusercontent.com/boostorg/release-tools/develop/ci_boost_release.py" -P ${HOME} + - run: python3 ${HOME}/ci_boost_release.py checkout_post + # - run: python3 ${HOME}/ci_boost_release.py dependencies_override + - run: '[ "$CIRCLE_NODE_INDEX" != "0" ] || EOL=LF python3 ${HOME}/ci_boost_release.py test_pre' + - run: '[ "$CIRCLE_NODE_INDEX" != "1" ] || EOL=CRLF python3 ${HOME}/ci_boost_release.py test_pre' + - run: '[ "$CIRCLE_NODE_INDEX" != "0" ] || EOL=LF python3 ${HOME}/ci_boost_release.py test_override' + - run: '[ "$CIRCLE_NODE_INDEX" != "1" ] || EOL=CRLF python3 ${HOME}/ci_boost_release.py test_override' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000000..b67e2a3915b3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,205 @@ +name: CI + +on: + push: + branches: + - feature/** + tags: + - '**' + +jobs: + b2-posix: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-11 + - os: macos-12 + - os: macos-13 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Setup Boost + run: | + ./bootstrap.sh + ./b2 -d0 headers + + - name: Build Boost + run: | + ./b2 -j3 stage + + - name: Install Boost + run: | + ./b2 -j3 --prefix=$HOME/.local install + + - name: Test Boost + run: | + cd status + ../b2 -j3 quick + + b2-windows: + strategy: + fail-fast: false + matrix: + include: + - os: windows-2019 + - os: windows-2022 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Setup Boost + shell: cmd + run: | + cmd /c bootstrap + b2 -d0 headers + + - name: Build Boost + run: | + ./b2 -j3 stage + + - name: Install Boost + run: | + ./b2 -j3 install + + - name: Test Boost + run: | + cd status + ../b2 -j3 quick + + cmake-install-posix: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-11 + - os: macos-12 + - os: macos-13 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Configure Boost + run: | + mkdir __build__ && cd __build__ + cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=~/.local .. + + - name: Build Boost + run: | + cd __build__ + cmake --build . -j 3 + + - name: Install Boost + run: | + cd __build__ + cmake --build . -j 3 --target install + + cmake-install-windows: + strategy: + fail-fast: false + matrix: + include: + - os: windows-2019 + - os: windows-2022 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Configure Boost + run: | + mkdir __build__ && cd __build__ + cmake -DBUILD_SHARED_LIBS=ON .. + + - name: Build Boost + run: | + cd __build__ + cmake --build . -j 3 + + - name: Install Boost + run: | + cd __build__ + cmake --build . -j 3 --target install + + cmake-test-posix: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-11 + - os: macos-12 + - os: macos-13 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Configure Boost + run: | + mkdir __build__ && cd __build__ + cmake -DBUILD_TESTING=ON .. + + - name: Build tests + run: | + cd __build__ + cmake --build . -j 3 --target tests + + - name: Run tests + run: | + cd __build__ + ctest --output-on-failure --no-tests=error -j 3 -R quick + + cmake-test-windows: + strategy: + fail-fast: false + matrix: + include: + - os: windows-2019 + - os: windows-2022 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Configure Boost + run: | + mkdir __build__ && cd __build__ + cmake -DBUILD_TESTING=ON -DBOOST_EXCLUDE_LIBRARIES="convert;outcome" .. + + - name: Build tests + run: | + cd __build__ + cmake --build . -j 3 --target tests + + - name: Run tests + run: | + cd __build__ + ctest --output-on-failure --no-tests=error -j 3 -R quick -C Debug diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000000..51b494070a92 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,60 @@ +name: Release + +on: + push: + tags: + - boost-* + +jobs: + release-posix: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + path: ${{ github.ref_name }} + submodules: true + + - name: Cleanup + shell: bash + run: | + find ${{ github.ref_name }} -name ".git" -prune -exec rm -rf {} + + + - name: Create archives + run: | + tar -czf ${{ github.ref_name }}.tar.gz ${{ github.ref_name }} + tar -cJf ${{ github.ref_name }}.tar.xz ${{ github.ref_name }} + + - uses: softprops/action-gh-release@v1 + with: + files: | + ${{ github.ref_name }}.tar.gz + ${{ github.ref_name }}.tar.xz + + release-windows: + runs-on: windows-latest + + needs: release-posix + + steps: + - uses: actions/checkout@v3 + with: + path: ${{ github.ref_name }} + submodules: true + + - name: Cleanup + shell: bash + run: | + find ${{ github.ref_name }} -name ".git" -prune -exec rm -rf {} + + + - name: Create archives + shell: cmd + run: | + 7z a ${{ github.ref_name }}.zip ${{ github.ref_name }} + 7z a ${{ github.ref_name }}.7z ${{ github.ref_name }} + + - uses: softprops/action-gh-release@v1 + with: + files: | + ${{ github.ref_name }}.zip + ${{ github.ref_name }}.7z diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..cfeeaed7f7ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/b2 +/b2.exe +/bin.v2 +/bjam +/bjam.exe +/bootstrap.log +/boost +/dist +/project-config.jam* +/stage +/stage_x64/ +/user-config.jam +/.settings/ +/.project +/.pydevproject diff --git a/.gitmodules b/.gitmodules index 2d3054768117..ac000c78c16f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,456 +1,815 @@ -[submodule "format"] - path = libs/format - url = ../format.git +[submodule "system"] + path = libs/system + url = ../system.git fetchRecurseSubmodules = on-demand -[submodule "ublas"] - path = libs/numeric/ublas - url = ../ublas.git + branch = . +[submodule "multi_array"] + path = libs/multi_array + url = ../multi_array.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "math"] + path = libs/math + url = ../math.git fetchRecurseSubmodules = on-demand + branch = . [submodule "smart_ptr"] path = libs/smart_ptr url = ../smart_ptr.git fetchRecurseSubmodules = on-demand -[submodule "wave"] - path = libs/wave - url = ../wave.git - fetchRecurseSubmodules = on-demand -[submodule "integer"] - path = libs/integer - url = ../integer.git + branch = . +[submodule "parameter"] + path = libs/parameter + url = ../parameter.git fetchRecurseSubmodules = on-demand -[submodule "compose"] - path = libs/compose - url = ../compose.git + branch = . +[submodule "algorithm"] + path = libs/algorithm + url = ../algorithm.git fetchRecurseSubmodules = on-demand -[submodule "random"] - path = libs/random - url = ../random.git + branch = . +[submodule "any"] + path = libs/any + url = ../any.git fetchRecurseSubmodules = on-demand -[submodule "utility"] - path = libs/utility - url = ../utility.git + branch = . +[submodule "concept_check"] + path = libs/concept_check + url = ../concept_check.git fetchRecurseSubmodules = on-demand -[submodule "rational"] - path = libs/rational - url = ../rational.git + branch = . +[submodule "python"] + path = libs/python + url = ../python.git fetchRecurseSubmodules = on-demand -[submodule "timer"] - path = libs/timer - url = ../timer.git + branch = . +[submodule "tti"] + path = libs/tti + url = ../tti.git fetchRecurseSubmodules = on-demand + branch = . [submodule "functional"] path = libs/functional url = ../functional.git fetchRecurseSubmodules = on-demand -[submodule "conversion"] - path = libs/conversion - url = ../conversion.git - fetchRecurseSubmodules = on-demand + branch = . [submodule "config"] path = libs/config url = ../config.git fetchRecurseSubmodules = on-demand -[submodule "array"] - path = libs/array - url = ../array.git - fetchRecurseSubmodules = on-demand -[submodule "type_traits"] - path = libs/type_traits - url = ../type_traits.git - fetchRecurseSubmodules = on-demand -[submodule "iterator"] - path = libs/iterator - url = ../iterator.git - fetchRecurseSubmodules = on-demand -[submodule "regex"] - path = libs/regex - url = ../regex.git - fetchRecurseSubmodules = on-demand -[submodule "graph"] - path = libs/graph - url = ../graph.git - fetchRecurseSubmodules = on-demand -[submodule "static_assert"] - path = libs/static_assert - url = ../static_assert.git + branch = . +[submodule "log"] + path = libs/log + url = ../log.git fetchRecurseSubmodules = on-demand -[submodule "function"] - path = libs/function - url = ../function.git + branch = . +[submodule "interprocess"] + path = libs/interprocess + url = ../interprocess.git fetchRecurseSubmodules = on-demand -[submodule "concept_check"] - path = libs/concept_check - url = ../concept_check.git + branch = . +[submodule "exception"] + path = libs/exception + url = ../exception.git fetchRecurseSubmodules = on-demand -[submodule "detail"] - path = libs/detail - url = ../detail.git + branch = . +[submodule "foreach"] + path = libs/foreach + url = ../foreach.git fetchRecurseSubmodules = on-demand -[submodule "disjoint_sets"] - path = libs/disjoint_sets - url = ../disjoint_sets.git + branch = . +[submodule "spirit"] + path = libs/spirit + url = ../spirit.git fetchRecurseSubmodules = on-demand -[submodule "property_map"] - path = libs/property_map - url = ../property_map.git + branch = . +[submodule "io"] + path = libs/io + url = ../io.git fetchRecurseSubmodules = on-demand -[submodule "python"] - path = libs/python - url = ../python.git + branch = . +[submodule "units"] + path = libs/units + url = ../units.git fetchRecurseSubmodules = on-demand -[submodule "test"] - path = libs/test - url = ../test.git + branch = . +[submodule "preprocessor"] + path = libs/preprocessor + url = ../preprocessor.git fetchRecurseSubmodules = on-demand -[submodule "any"] - path = libs/any - url = ../any.git + branch = . +[submodule "format"] + path = libs/format + url = ../format.git fetchRecurseSubmodules = on-demand -[submodule "crc"] - path = libs/crc - url = ../crc.git + branch = . +[submodule "xpressive"] + path = libs/xpressive + url = ../xpressive.git fetchRecurseSubmodules = on-demand -[submodule "pool"] - path = libs/pool - url = ../pool.git + branch = . +[submodule "integer"] + path = libs/integer + url = ../integer.git fetchRecurseSubmodules = on-demand + branch = . [submodule "thread"] path = libs/thread url = ../thread.git fetchRecurseSubmodules = on-demand -[submodule "tuple"] - path = libs/tuple - url = ../tuple.git - fetchRecurseSubmodules = on-demand + branch = . [submodule "tokenizer"] path = libs/tokenizer url = ../tokenizer.git fetchRecurseSubmodules = on-demand -[submodule "math"] - path = libs/math - url = ../math.git + branch = . +[submodule "timer"] + path = libs/timer + url = ../timer.git fetchRecurseSubmodules = on-demand -[submodule "build"] - path = tools/build - url = ../build.git + branch = . +[submodule "inspect"] + path = tools/inspect + url = ../inspect.git fetchRecurseSubmodules = on-demand -[submodule "compatibility"] - path = libs/compatibility - url = ../compatibility.git + branch = . +[submodule "boostbook"] + path = tools/boostbook + url = ../boostbook.git fetchRecurseSubmodules = on-demand -[submodule "bind"] - path = libs/bind - url = ../bind.git + branch = . +[submodule "regex"] + path = libs/regex + url = ../regex.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "crc"] + path = libs/crc + url = ../crc.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "random"] + path = libs/random + url = ../random.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "serialization"] + path = libs/serialization + url = ../serialization.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "test"] + path = libs/test + url = ../test.git fetchRecurseSubmodules = on-demand + branch = . [submodule "date_time"] path = libs/date_time url = ../date_time.git fetchRecurseSubmodules = on-demand -[submodule "multi_array"] - path = libs/multi_array - url = ../multi_array.git + branch = . +[submodule "logic"] + path = libs/logic + url = ../logic.git fetchRecurseSubmodules = on-demand -[submodule "signals"] - path = libs/signals - url = ../signals.git + branch = . +[submodule "graph"] + path = libs/graph + url = ../graph.git fetchRecurseSubmodules = on-demand -[submodule "preprocessor"] - path = libs/preprocessor - url = ../preprocessor.git + branch = . +[submodule "numeric_conversion"] + path = libs/numeric/conversion + url = ../numeric_conversion.git fetchRecurseSubmodules = on-demand + branch = . [submodule "lambda"] path = libs/lambda url = ../lambda.git fetchRecurseSubmodules = on-demand -[submodule "io"] - path = libs/io - url = ../io.git - fetchRecurseSubmodules = on-demand -[submodule "dynamic_bitset"] - path = libs/dynamic_bitset - url = ../dynamic_bitset.git - fetchRecurseSubmodules = on-demand + branch = . [submodule "mpl"] path = libs/mpl url = ../mpl.git fetchRecurseSubmodules = on-demand -[submodule "range"] - path = libs/range - url = ../range.git + branch = . +[submodule "typeof"] + path = libs/typeof + url = ../typeof.git fetchRecurseSubmodules = on-demand -[submodule "serialization"] - path = libs/serialization - url = ../serialization.git + branch = . +[submodule "tuple"] + path = libs/tuple + url = ../tuple.git fetchRecurseSubmodules = on-demand -[submodule "numeric_conversion"] - path = libs/numeric/conversion - url = ../numeric_conversion.git + branch = . +[submodule "utility"] + path = libs/utility + url = ../utility.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "dynamic_bitset"] + path = libs/dynamic_bitset + url = ../dynamic_bitset.git fetchRecurseSubmodules = on-demand + branch = . [submodule "assign"] path = libs/assign url = ../assign.git fetchRecurseSubmodules = on-demand -[submodule "logic"] - path = libs/logic - url = ../logic.git - fetchRecurseSubmodules = on-demand -[submodule "exception"] - path = libs/exception - url = ../exception.git - fetchRecurseSubmodules = on-demand -[submodule "statechart"] - path = libs/statechart - url = ../statechart.git + branch = . +[submodule "filesystem"] + path = libs/filesystem + url = ../filesystem.git fetchRecurseSubmodules = on-demand -[submodule "variant"] - path = libs/variant - url = ../variant.git + branch = . +[submodule "function"] + path = libs/function + url = ../function.git fetchRecurseSubmodules = on-demand -[submodule "interval"] - path = libs/numeric/interval - url = ../interval.git + branch = . +[submodule "conversion"] + path = libs/conversion + url = ../conversion.git fetchRecurseSubmodules = on-demand + branch = . [submodule "optional"] path = libs/optional url = ../optional.git fetchRecurseSubmodules = on-demand -[submodule "graph_parallel"] - path = libs/graph_parallel - url = ../graph_parallel.git - fetchRecurseSubmodules = on-demand -[submodule "bcp"] - path = tools/bcp - url = ../bcp.git + branch = . +[submodule "property_tree"] + path = libs/property_tree + url = ../property_tree.git fetchRecurseSubmodules = on-demand -[submodule "spirit"] - path = libs/spirit - url = ../spirit.git + branch = . +[submodule "bimap"] + path = libs/bimap + url = ../bimap.git fetchRecurseSubmodules = on-demand -[submodule "inspect"] - path = tools/inspect - url = ../inspect.git + branch = . +[submodule "variant"] + path = libs/variant + url = ../variant.git fetchRecurseSubmodules = on-demand -[submodule "boostbook"] - path = tools/boostbook - url = ../boostbook.git + branch = . +[submodule "array"] + path = libs/array + url = ../array.git fetchRecurseSubmodules = on-demand -[submodule "filesystem"] - path = libs/filesystem - url = ../filesystem.git + branch = . +[submodule "iostreams"] + path = libs/iostreams + url = ../iostreams.git fetchRecurseSubmodules = on-demand + branch = . [submodule "multi_index"] path = libs/multi_index url = ../multi_index.git fetchRecurseSubmodules = on-demand -[submodule "program_options"] - path = libs/program_options - url = ../program_options.git - fetchRecurseSubmodules = on-demand -[submodule "algorithm"] - path = libs/algorithm - url = ../algorithm.git - fetchRecurseSubmodules = on-demand -[submodule "local_function"] - path = libs/local_function - url = ../local_function.git - fetchRecurseSubmodules = on-demand -[submodule "property_tree"] - path = libs/property_tree - url = ../property_tree.git + branch = . +[submodule "bcp"] + path = tools/bcp + url = ../bcp.git fetchRecurseSubmodules = on-demand -[submodule "circular_buffer"] - path = libs/circular_buffer - url = ../circular_buffer.git + branch = . +[submodule "ptr_container"] + path = libs/ptr_container + url = ../ptr_container.git fetchRecurseSubmodules = on-demand -[submodule "bimap"] - path = libs/bimap - url = ../bimap.git + branch = . +[submodule "statechart"] + path = libs/statechart + url = ../statechart.git fetchRecurseSubmodules = on-demand -[submodule "xpressive"] - path = libs/xpressive - url = ../xpressive.git + branch = . +[submodule "static_assert"] + path = libs/static_assert + url = ../static_assert.git fetchRecurseSubmodules = on-demand -[submodule "tr1"] - path = libs/tr1 - url = ../tr1.git + branch = . +[submodule "range"] + path = libs/range + url = ../range.git fetchRecurseSubmodules = on-demand -[submodule "foreach"] - path = libs/foreach - url = ../foreach.git + branch = . +[submodule "rational"] + path = libs/rational + url = ../rational.git fetchRecurseSubmodules = on-demand -[submodule "typeof"] - path = libs/typeof - url = ../typeof.git + branch = . +[submodule "iterator"] + path = libs/iterator + url = ../iterator.git fetchRecurseSubmodules = on-demand -[submodule "ptr_container"] - path = libs/ptr_container - url = ../ptr_container.git + branch = . +[submodule "build"] + path = tools/build + url = ../build.git fetchRecurseSubmodules = on-demand + branch = . [submodule "quickbook"] path = tools/quickbook url = ../quickbook.git fetchRecurseSubmodules = on-demand -[submodule "iostreams"] - path = libs/iostreams - url = ../iostreams.git + branch = . +[submodule "graph_parallel"] + path = libs/graph_parallel + url = ../graph_parallel.git fetchRecurseSubmodules = on-demand -[submodule "parameter"] - path = libs/parameter - url = ../parameter.git + branch = . +[submodule "property_map"] + path = libs/property_map + url = ../property_map.git fetchRecurseSubmodules = on-demand -[submodule "function_types"] - path = libs/function_types - url = ../function_types.git + branch = . +[submodule "program_options"] + path = libs/program_options + url = ../program_options.git fetchRecurseSubmodules = on-demand -[submodule "litre"] - path = tools/litre - url = ../litre.git + branch = . +[submodule "detail"] + path = libs/detail + url = ../detail.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "interval"] + path = libs/numeric/interval + url = ../interval.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "ublas"] + path = libs/numeric/ublas + url = ../ublas.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "wave"] + path = libs/wave + url = ../wave.git fetchRecurseSubmodules = on-demand + branch = . +[submodule "type_traits"] + path = libs/type_traits + url = ../type_traits.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "compatibility"] + path = libs/compatibility + url = ../compatibility.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "bind"] + path = libs/bind + url = ../bind.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "pool"] + path = libs/pool + url = ../pool.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "proto"] + path = libs/proto + url = ../proto.git + fetchRecurseSubmodules = on-demand + branch = . [submodule "fusion"] path = libs/fusion url = ../fusion.git fetchRecurseSubmodules = on-demand -[submodule "asio"] - path = libs/asio - url = ../asio.git - fetchRecurseSubmodules = on-demand -[submodule "interprocess"] - path = libs/interprocess - url = ../interprocess.git - fetchRecurseSubmodules = on-demand -[submodule "mpi"] - path = libs/mpi - url = ../mpi.git + branch = . +[submodule "function_types"] + path = libs/function_types + url = ../function_types.git fetchRecurseSubmodules = on-demand + branch = . [submodule "gil"] path = libs/gil url = ../gil.git fetchRecurseSubmodules = on-demand -[submodule "system"] - path = libs/system - url = ../system.git - fetchRecurseSubmodules = on-demand + branch = . [submodule "intrusive"] path = libs/intrusive url = ../intrusive.git fetchRecurseSubmodules = on-demand -[submodule "coroutine"] - path = libs/coroutine - url = ../coroutine.git + branch = . +[submodule "asio"] + path = libs/asio + url = ../asio.git fetchRecurseSubmodules = on-demand -[submodule "flyweight"] - path = libs/flyweight - url = ../flyweight.git + branch = . +[submodule "uuid"] + path = libs/uuid + url = ../uuid.git fetchRecurseSubmodules = on-demand -[submodule "geometry"] - path = libs/geometry - url = ../geometry.git + branch = . +[submodule "litre"] + path = tools/litre + url = ../litre.git fetchRecurseSubmodules = on-demand + branch = . +[submodule "circular_buffer"] + path = libs/circular_buffer + url = ../circular_buffer.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "mpi"] + path = libs/mpi + url = ../mpi.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "unordered"] + path = libs/unordered + url = ../unordered.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "signals2"] + path = libs/signals2 + url = ../signals2.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "accumulators"] + path = libs/accumulators + url = ../accumulators.git + fetchRecurseSubmodules = on-demand + branch = . [submodule "atomic"] path = libs/atomic url = ../atomic.git fetchRecurseSubmodules = on-demand -[submodule "auto_index"] - path = tools/auto_index - url = ../auto_index.git + branch = . +[submodule "scope_exit"] + path = libs/scope_exit + url = ../scope_exit.git fetchRecurseSubmodules = on-demand -[submodule "heap"] - path = libs/heap - url = ../heap.git + branch = . +[submodule "flyweight"] + path = libs/flyweight + url = ../flyweight.git fetchRecurseSubmodules = on-demand + branch = . [submodule "icl"] path = libs/icl url = ../icl.git fetchRecurseSubmodules = on-demand -[submodule "multiprecision"] - path = libs/multiprecision - url = ../multiprecision.git - fetchRecurseSubmodules = on-demand -[submodule "odeint"] - path = libs/numeric/odeint - url = ../odeint.git - fetchRecurseSubmodules = on-demand -[submodule "locale"] - path = libs/locale - url = ../locale.git + branch = . +[submodule "predef"] + path = libs/predef + url = ../predef.git fetchRecurseSubmodules = on-demand -[submodule "lockfree"] - path = libs/lockfree - url = ../lockfree.git + branch = . +[submodule "chrono"] + path = libs/chrono + url = ../chrono.git fetchRecurseSubmodules = on-demand -[submodule "move"] - path = libs/move - url = ../move.git + branch = . +[submodule "polygon"] + path = libs/polygon + url = ../polygon.git fetchRecurseSubmodules = on-demand + branch = . [submodule "msm"] path = libs/msm url = ../msm.git fetchRecurseSubmodules = on-demand -[submodule "tti"] - path = libs/tti - url = ../tti.git - fetchRecurseSubmodules = on-demand -[submodule "type_erasure"] - path = libs/type_erasure - url = ../type_erasure.git - fetchRecurseSubmodules = on-demand -[submodule "phoenix"] - path = libs/phoenix - url = ../phoenix.git - fetchRecurseSubmodules = on-demand -[submodule "polygon"] - path = libs/polygon - url = ../polygon.git + branch = . +[submodule "heap"] + path = libs/heap + url = ../heap.git fetchRecurseSubmodules = on-demand -[submodule "predef"] - path = libs/predef - url = ../predef.git + branch = . +[submodule "coroutine"] + path = libs/coroutine + url = ../coroutine.git fetchRecurseSubmodules = on-demand -[submodule "proto"] - path = libs/proto - url = ../proto.git + branch = . +[submodule "coroutine2"] + path = libs/coroutine2 + url = ../coroutine2.git fetchRecurseSubmodules = on-demand + branch = . [submodule "ratio"] path = libs/ratio url = ../ratio.git fetchRecurseSubmodules = on-demand -[submodule "scope_exit"] - path = libs/scope_exit - url = ../scope_exit.git - fetchRecurseSubmodules = on-demand -[submodule "signals2"] - path = libs/signals2 - url = ../signals2.git + branch = . +[submodule "odeint"] + path = libs/numeric/odeint + url = ../odeint.git fetchRecurseSubmodules = on-demand -[submodule "sync"] - path = libs/sync - url = ../sync.git + branch = . +[submodule "geometry"] + path = libs/geometry + url = ../geometry.git fetchRecurseSubmodules = on-demand -[submodule "units"] - path = libs/units - url = ../units.git + branch = . +[submodule "phoenix"] + path = libs/phoenix + url = ../phoenix.git fetchRecurseSubmodules = on-demand -[submodule "unordered"] - path = libs/unordered - url = ../unordered.git + branch = . +[submodule "move"] + path = libs/move + url = ../move.git fetchRecurseSubmodules = on-demand -[submodule "uuid"] - path = libs/uuid - url = ../uuid.git + branch = . +[submodule "locale"] + path = libs/locale + url = ../locale.git fetchRecurseSubmodules = on-demand -[submodule "chrono"] - path = libs/chrono - url = ../chrono.git + branch = . +[submodule "auto_index"] + path = tools/auto_index + url = ../auto_index.git fetchRecurseSubmodules = on-demand + branch = . [submodule "container"] path = libs/container url = ../container.git fetchRecurseSubmodules = on-demand + branch = . +[submodule "local_function"] + path = libs/local_function + url = ../local_function.git + fetchRecurseSubmodules = on-demand + branch = . [submodule "context"] path = libs/context url = ../context.git fetchRecurseSubmodules = on-demand -[submodule "accumulators"] - path = libs/accumulators - url = ../accumulators.git + branch = . +[submodule "type_erasure"] + path = libs/type_erasure + url = ../type_erasure.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "multiprecision"] + path = libs/multiprecision + url = ../multiprecision.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "lockfree"] + path = libs/lockfree + url = ../lockfree.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "sync"] + path = libs/sync + url = ../sync.git fetchRecurseSubmodules = on-demand + branch = . +[submodule "assert"] + path = libs/assert + url = ../assert.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "align"] + path = libs/align + url = ../align.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "type_index"] + path = libs/type_index + url = ../type_index.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "core"] + path = libs/core + url = ../core.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "throw_exception"] + path = libs/throw_exception + url = ../throw_exception.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "winapi"] + path = libs/winapi + url = ../winapi.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "boostdep"] + path = tools/boostdep + url = ../boostdep.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "lexical_cast"] + path = libs/lexical_cast + url = ../lexical_cast.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "sort"] + path = libs/sort + url = ../sort.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "convert"] + path = libs/convert + url = ../convert.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "endian"] + path = libs/endian + url = ../endian.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "vmd"] + path = libs/vmd + url = ../vmd.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "dll"] + path = libs/dll + url = ../dll.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "compute"] + path = libs/compute + url = ../compute.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "hana"] + path = libs/hana + url = ../hana.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "metaparse"] + path = libs/metaparse + url = ../metaparse.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "qvm"] + path = libs/qvm + url = ../qvm.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "fiber"] + path = libs/fiber + url = ../fiber.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "process"] + path = libs/process + url = ../process.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "stacktrace"] + path = libs/stacktrace + url = ../stacktrace.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "poly_collection"] + path = libs/poly_collection + url = ../poly_collection.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "beast"] + path = libs/beast + url = ../beast.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "mp11"] + path = libs/mp11 + url = ../mp11.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "callable_traits"] + path = libs/callable_traits + url = ../callable_traits.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "contract"] + path = libs/contract + url = ../contract.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "check_build"] + path = tools/check_build + url = ../check_build.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "container_hash"] + path = libs/container_hash + url = ../container_hash.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "hof"] + path = libs/hof + url = ../hof.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "yap"] + path = libs/yap + url = ../yap.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "safe_numerics"] + path = libs/safe_numerics + url = ../safe_numerics.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "parameter_python"] + path = libs/parameter_python + url = ../parameter_python.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "headers"] + path = libs/headers + url = ../headers.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "boost_install"] + path = tools/boost_install + url = ../boost_install.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "outcome"] + path = libs/outcome + url = ../outcome.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "histogram"] + path = libs/histogram + url = ../histogram.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "variant2"] + path = libs/variant2 + url = ../variant2.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "nowide"] + path = libs/nowide + url = ../nowide.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "docca"] + path = tools/docca + url = ../docca.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "cmake"] + path = tools/cmake + url = ../cmake.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "static_string"] + path = libs/static_string + url = ../static_string.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "stl_interfaces"] + path = libs/stl_interfaces + url = ../stl_interfaces.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "more"] + path = more + url = ../more.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "leaf"] + path = libs/leaf + url = ../leaf.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "json"] + path = libs/json + url = ../json.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "pfr"] + path = libs/pfr + url = ../pfr.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "describe"] + path = libs/describe + url = ../describe.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "lambda2"] + path = libs/lambda2 + url = ../lambda2.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "property_map_parallel"] + path = libs/property_map_parallel + url = ../property_map_parallel.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "url"] + path = libs/url + url = ../url.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "mysql"] + path = libs/mysql + url = ../mysql.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "compat"] + path = libs/compat + url = ../compat.git + fetchRecurseSubmodules = on-demand + branch = . diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..be89306622e8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,143 @@ +# 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) +# +# Copyright Rene Rivera 2015-2016. +# Copyright Peter Dimov 2017-2021. + +branches: + only: + - master + - develop + - /feature\/.*/ + +dist: bionic + +language: cpp + +compiler: gcc + +git: + submodules: false + +env: + matrix: + - TRAVIS_EMPTY_JOB_WORKAROUND=true + +matrix: + exclude: + - env: TRAVIS_EMPTY_JOB_WORKAROUND=true + + include: + + - env: SCRIPT=ci_boost_release MODE=check + addons: + apt: + packages: + - xsltproc + + # Simple integrated status tests check. + - env: SCRIPT=ci_boost_status + + # Same, but using release layout + - env: SCRIPT=ci_boost_status RELEASE=1 + + # Run 'quick' tests. + - env: SCRIPT=ci_boost_status TARGET=quick TOOLSET=gcc CXXSTD=03,11,14 + compiler: g++ + + - env: SCRIPT=ci_boost_status TARGET=quick TOOLSET=clang CXXSTD=03,11,14 + compiler: clang++ + + # Build Boost + - env: SCRIPT=ci_boost_build TOOLSET=gcc + compiler: g++ + + # Build Boost with release layout + - env: SCRIPT=ci_boost_build TOOLSET=gcc RELEASE=1 + compiler: g++ + + # Build Boost with CMake + - env: CMAKE_BUILD=1 + dist: xenial + compiler: g++ + + before_script: true + before_install: true + after_success: true + after_failure: true + after_script: true + + addons: + apt: + packages: + - libzstd-dev + + install: + - git submodule update --init --jobs 3 + + script: + - mkdir __build && cd __build + - cmake -DBOOST_INSTALL_LAYOUT=tagged -DBUILD_SHARED_LIBS=ON .. + - cmake --build . + + # Install Boost with CMake + - env: CMAKE_INSTALL=1 + compiler: g++ + + before_script: true + before_install: true + after_success: true + after_failure: true + after_script: true + + install: + - pip install --user cmake + - git submodule update --init --jobs 3 + + script: + - mkdir __build && cd __build + - cmake -DBOOST_INSTALL_LAYOUT=tagged -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . + - cmake --build . --target install + + # Test Boost with CMake + - env: CMAKE_TEST=1 + dist: bionic + compiler: g++ + + before_script: true + before_install: true + after_success: true + after_failure: true + after_script: true + + addons: + apt: + packages: + - liblzma-dev + - libzstd-dev + + install: + - git submodule update --init --jobs 3 + + script: + - mkdir __build && cd __build + - cmake -DBUILD_TESTING=ON .. + - cmake --build . -j 3 + - cmake --build . --target tests -j 3 -- -k + - ctest --output-on-failure -j 3 -R quick + +before_install: + # Fetch the scripts to do the actual building/testing. + - git submodule update --init --jobs 3 + - | + wget "https://raw.githubusercontent.com/boostorg/release-tools/develop/ci_boost_common.py" -P .. + wget "https://raw.githubusercontent.com/boostorg/release-tools/develop/${SCRIPT}.py" -P .. + +install: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" install +before_script: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" before_script +script: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" script +after_success: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" after_success +after_failure: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" after_failure +after_script: python "${TRAVIS_BUILD_DIR}/../${SCRIPT}.py" after_script diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000000..0c0e3516763b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright 2019, 2021 Peter Dimov +# Distributed under the Boost Software License, Version 1.0. +# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt + +cmake_minimum_required(VERSION 3.5...3.16) + +# The default build type must be set before project() +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +project(Boost VERSION 1.84.0 LANGUAGES CXX) + +set(BOOST_SUPERPROJECT_VERSION ${PROJECT_VERSION}) +set(BOOST_SUPERPROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}) + +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/tools/cmake/include) + +include(BoostRoot) diff --git a/Jamroot b/Jamroot index 538d2dae640f..33a31db19bfa 100644 --- a/Jamroot +++ b/Jamroot @@ -4,12 +4,12 @@ # 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) +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) # Usage: # -# bjam [options] [properties] [install|stage] +# b2 [options] [properties] [install|stage] # # Builds and installs Boost. # @@ -19,105 +19,108 @@ # ======= configured locations (below). # # --prefix= Install architecture independent files here. -# Default; C:\Boost on Win32 -# Default; /usr/local on Unix. Linux, etc. +# Default: C:\Boost on Windows +# Default: /usr/local on Unix, Linux, etc. # # --exec-prefix= Install architecture dependent files here. -# Default; +# Default: # -# --libdir= Install library files here. -# Default; /lib +# --libdir= Install library files here. +# Default: /lib # # --includedir= Install header files here. -# Default; /include +# Default: /include # -# stage Build and install only compiled library files -# ===== to the stage directory. +# --cmakedir= Install CMake configuration files here. +# Default: /cmake +# +# --no-cmake-config Do not install CMake configuration files. +# +# stage Build and install only compiled library files to the +# ===== stage directory. # # --stagedir= Install library files here -# Default; ./stage +# Default: ./stage # # Other Options: # -# --build-type= Build the specified pre-defined set of variations -# of the libraries. Note, that which variants get -# built depends on what each library supports. +# --build-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 a minimal set of -# variants. On Windows, these are static +# -- minimal -- (default) Builds a minimal set of +# variants. On Windows, these are static # multithreaded libraries in debug and release -# modes, using shared runtime. On Linux, these -# are static and shared multithreaded libraries -# in release mode. +# modes, using shared runtime. On Linux, these are +# static and shared multithreaded libraries in +# release mode. # -# complete - Build all possible variations. +# -- complete -- Build all possible variations. # -# --build-dir=DIR Build in this location instead of building -# within the distribution tree. Recommended! +# --build-dir=DIR Build in this location instead of building within +# the distribution tree. Recommended! # -# --show-libraries Displays the list of Boost libraries that require -# build and installation steps, then exit. +# --show-libraries Display the list of Boost libraries that require +# build and installation steps, and then exit. # -# --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. +# --layout= Determine 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 - Names of boost binaries -# include the Boost version number, name and -# version of the compiler and encoded build -# properties. Boost headers are installed in a -# subdirectory of whose name contains -# the Boost version number. +# -- versioned -- Names of boost binaries include +# the Boost version number, name and version of +# the compiler and encoded build properties. Boost +# headers are installed in a subdirectory of +# whose name contains the Boost version +# number. # -# tagged -- Names of boost binaries include the +# -- tagged -- Names of boost binaries include the # encoded build properties such as variant and # threading, but do not including compiler name # and version, or Boost version. This option is # useful if you build several variants of Boost, # using the same compiler. # -# system - Binaries names do not include the +# -- 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 . This option -# is intended for system integrators who are -# building distribution packages. +# number of the compiler. Boost headers are +# installed directly into . This option is +# intended for system integrators building +# distribution packages. # # The default value is 'versioned' on Windows, and # 'system' on Unix. # -# --buildid=ID Adds the specified ID to the name of built -# libraries. The default is to not add anything. -# -# --python-buildid=ID Adds the specified ID to the name of built -# libraries that depend on Python. The default -# is to not add anything. This ID is added in -# addition to --buildid. +# --buildid=ID Add the specified ID to the name of built libraries. +# The default is to not add anything. # +# --python-buildid=ID Add the specified ID to the name of built libraries +# that depend on Python. The default is to not add +# anything. This ID is added in addition to --buildid. # # --help This message. # -# --with- Build and install the specified -# If this option is used, only libraries -# specified using this option will be built. +# --with- Build and install the specified . If this +# option is used, only libraries specified using this +# option will be built. # # --without- Do not build, stage, or install the specified # . By default, all libraries are built. # # Properties: # -# toolset=toolset Indicates the toolset to build with. +# toolset=toolset Indicate the toolset to build with. # # variant=debug|release Select the build variant # # link=static|shared Whether to build static or shared libraries # # threading=single|multi Whether to build single or multithreaded binaries -# -# runtime-link=static|shared -# Whether to link to static or shared C and C++ runtime. -# +# +# runtime-link=static|shared +# Whether to link to static or shared C and C++ +# runtime. +# # TODO: # - handle boost version @@ -130,30 +133,65 @@ import sequence ; import xsltproc ; import set ; import path ; +import link ; +import notfile ; +import virtual-target ; +import "class" : new ; +import property-set ; +import threadapi-feature ; +import option ; +import property ; +# Backslash because of `bcp --namespace` +import tools/boost\_install/boost-install ; path-constant BOOST_ROOT : . ; -constant BOOST_VERSION : 1.46.1 ; +constant BOOST_VERSION : 1.84.0 ; constant BOOST_JAMROOT_MODULE : $(__name__) ; +# Allow subprojects to simply `import config : requires ;` to get access to the requires rule +modules.poke : BOOST_BUILD_PATH : $(BOOST_ROOT)/libs/config/checks [ modules.peek : BOOST_BUILD_PATH ] ; + boostcpp.set-version $(BOOST_VERSION) ; +use-project /boost/architecture : libs/config/checks/architecture ; + +local all-headers = + [ MATCH .*libs/(.*)/include/boost : [ glob libs/*/include/boost libs/*/*/include/boost ] ] ; + +for dir in $(all-headers) +{ + link-directory $(dir)-headers : libs/$(dir)/include/boost : . ; + explicit $(dir)-headers ; +} + +if $(all-headers) +{ + constant BOOST_MODULARLAYOUT : $(all-headers) ; +} + project boost : requirements . + + [ boostcpp.architecture ] + [ boostcpp.address-model ] + # Disable auto-linking for all targets here, primarily because it caused # troubles with V2. BOOST_ALL_NO_LIB=1 # Used to encode variant in target name. See the 'tag' rule below. @$(__name__).tag @handle-static-runtime - # The standard library Sun compilers use by default has no chance - # of working with Boost. Override it. - sun:sun-stlport + @clang-darwin-cxxstd-11 # Comeau does not support shared lib como:static como-linux:_GNU_SOURCE=1 # When building docs within Boost, we want the standard Boost style boost.defaults=Boost + @threadapi-feature.detect : usage-requirements . + : default-build + hidden + multi : build-dir bin.v2 ; @@ -165,27 +203,47 @@ rule tag ( name : type ? : property-set ) { return [ boostcpp.tag $(name) : $(type) : $(property-set) ] ; } - + +rule python-tag ( name : type ? : property-set ) +{ + return [ boostcpp.python-tag $(name) : $(type) : $(property-set) ] ; +} + rule handle-static-runtime ( properties * ) { - # Using static runtime with shared libraries is impossible on Linux, - # and dangerous on Windows. Therefore, we disallow it. This might - # be drastic, but it was disabled for a while with nobody complaining. + # Using static runtime with shared libraries is impossible on Linux, and + # dangerous on Windows. Therefore, we disallow it. This might be drastic, + # but it was disabled for a while without anybody complaining. + + local argv = [ modules.peek : ARGV ] ; + + if shared in $(properties) + && static in $(properties) + # For CW, static runtime is needed so that std::locale works. + && ! ( cw in $(properties) ) + && ! --allow-shared-static in $(argv) + { + boostcpp.emit-shared-static-warning ; + return no ; + } +} + +rule clang-darwin-cxxstd-11 ( properties * ) +{ + # AppleClang defaults to C++03 + + local result = [ property.select : $(properties) ] ; - # For CW, static runtime is needed so that std::locale works. - if shared in $(properties) && static in $(properties) && - ! ( cw in $(properties) ) + if darwin in $(properties) { - ECHO "error: link=shared together with runtime-link=static is not allowed" ; - ECHO "error: such property combination is either impossible " ; - ECHO "error: or too dangerious to be of any use" ; - EXIT ; + result ?= 11 ; } + + return $(result) ; } all-libraries = [ MATCH .*libs/(.*)/build/.* : [ glob libs/*/build/Jamfile.v2 ] - [ glob libs/*/build/Jamfile ] ] - ; + [ glob libs/*/build/Jamfile ] ] ; all-libraries = [ sequence.unique $(all-libraries) ] ; # The function_types library has a Jamfile, but it's used for maintenance @@ -205,18 +263,34 @@ local rule explicit-alias ( id : targets + ) explicit-alias prg_exec_monitor : libs/test/build//boost_prg_exec_monitor ; explicit-alias test_exec_monitor : libs/test/build//boost_test_exec_monitor ; explicit-alias unit_test_framework : libs/test/build//boost_unit_test_framework ; -explicit-alias bgl-vis : libs/graps/build//bgl-vis ; explicit-alias serialization : libs/serialization/build//boost_serialization ; explicit-alias wserialization : libs/serialization/build//boost_wserialization ; for local l in $(all-libraries) { - if ! $(l) in test graph serialization + if ! $(l) in test graph serialization headers { explicit-alias $(l) : libs/$(l)/build//boost_$(l) ; } } -alias headers : : : : . ; +# Log has an additional target +explicit-alias log_setup : libs/log/build//boost_log_setup ; + +rule do-nothing { } + +rule generate-alias ( project name : property-set : sources * ) +{ + local action-name = [ $(property-set).get ] ; + local m = [ MATCH ^@(.*) : $(action-name) ] ; + property-set = [ property-set.empty ] ; + local action = [ new action $(sources) : $(m[1]) : $(property-set) ] ; + local t = [ new notfile-target $(name) : $(project) : $(action) ] ; + return [ virtual-target.register $(t) ] ; +} + +generate headers : $(all-headers)-headers : @generate-alias @do-nothing : : . ; + +#alias headers : $(all-headers)-headers : : : . ; explicit headers ; # Make project ids of all libraries known. @@ -225,39 +299,46 @@ for local l in $(all-libraries) use-project /boost/$(l) : libs/$(l)/build ; } +if [ path.exists $(BOOST_ROOT)/tools/inspect/build ] +{ + use-project /boost/tools/inspect : tools/inspect/build ; +} + +if [ path.exists $(BOOST_ROOT)/libs/wave/tool/build ] +{ + use-project /boost/libs/wave/tool : libs/wave/tool/build ; +} + +# Make the boost-install rule visible in subprojects + # 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 - : /boost//install-proper-headers $(install-requirements) - : # No binaries - : $(libraries) - : # No headers, it is handled by the dependency. - ; - - install stage : $(libraries) : $(BOOST_STAGE_LOCATE) ; + boost-install.boost-install $(libraries) ; +} - module [ CALLER_MODULE ] - { - explicit stage ; - explicit install ; - } +# Creates a library target, adding autolink support and also creates +# stage and install targets via boost-install, above. +rule boost-lib ( name : sources * : requirements * : default-build * : usage-requirements * ) +{ + autolink = shared:BOOST_$(name:U)_DYN_LINK=1 ; + name = boost_$(name) ; + lib $(name) + : $(sources) + : $(requirements) $(autolink) + : $(default-build) + : $(usage-requirements) $(autolink) + ; + boost-install $(name) ; } -headers = - # The .SUNWCCh files are present in tr1 include directory and have to be installed, - # see http://lists.boost.org/Archives/boost/2007/05/121430.php - [ path.glob-tree $(BOOST_ROOT)/boost : *.hpp *.ipp *.h *.inc *.SUNWCCh : CVS .svn ] - [ path.glob-tree $(BOOST_ROOT)/boost/compatibility/cpp_c_headers : c* : CVS .svn ] - [ path.glob boost/tr1/tr1 : * : bcc32 sun CVS .svn ] - ; # Declare special top-level targets that build and install the desired variants # of the libraries. -boostcpp.declare-targets $(all-libraries) : $(headers) ; +boostcpp.declare-targets $(all-libraries) ; diff --git a/README.md b/README.md new file mode 100644 index 000000000000..27557400bd89 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# Boost C++ Libraries + +The Boost project provides free peer-reviewed portable C++ source libraries. + +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 Boost license encourages both commercial and non-commercial use +and does not require attribution for binary use. + +The project website is www.boost.org, where you can obtain more information and +[download](https://www.boost.org/users/download/) the current release. + +## Cloning + +Clone the superproject repository with all submodules and checkout the `master` as the default branch: + +```console +git clone --recurse-submodules https://github.com/boostorg/boost.git boost-root +``` + +or checkout the `develop` branch with the latest development snapshot: + +```console +git clone --branch develop --recurse-submodules https://github.com/boostorg/boost.git boost-root +``` + +Alternatively, clone just the superproject repository, then clone a desired submodule together with its dependencies: + +```console +git clone https://github.com/boostorg/boost.git boost-root +cd boost-root +git submodule update --init tools/boostdep +python tools/boostdep/depinst/depinst.py filesystem +``` + +Alternatively, clone just the superproject repository, then manually pick individual submodules: + +```console +git clone https://github.com/boostorg/boost.git boost-root +cd boost-root +git submodule --quiet update --init \ + tools/build \ + tools/boost_install \ + tools/boostdep \ + libs/headers +``` diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000000..69e02e0b41a8 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,34 @@ +version: 1.0.{build}-{branch} + +branches: + only: + - develop + - master + +environment: + matrix: + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + SCRIPT: ci_boost_test_library + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + SCRIPT: ci_boost_test_library + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + SCRIPT: ci_boost_test_library + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + SCRIPT: ci_boost_status + TARGET: quick + +init: + - cd %APPVEYOR_BUILD_FOLDER%/.. + - appveyor DownloadFile "https://raw.githubusercontent.com/boostorg/release-tools/develop/ci_boost_common.py" + - appveyor DownloadFile "https://raw.githubusercontent.com/boostorg/release-tools/develop/%SCRIPT%.py" + - cd %APPVEYOR_BUILD_FOLDER% +install: python ../%SCRIPT%.py install +before_build: python ../%SCRIPT%.py before_build +build_script: python ../%SCRIPT%.py build_script +after_build: python ../%SCRIPT%.py after_build +before_test: python ../%SCRIPT%.py before_test +test_script: python ../%SCRIPT%.py test_script +after_test: python ../%SCRIPT%.py after_test +on_success: python ../%SCRIPT%.py on_success +on_failure: python ../%SCRIPT%.py on_failure +on_finish: python ../%SCRIPT%.py on_finish diff --git a/boost-build.jam b/boost-build.jam index 8b8775433aef..b4eae2d1112b 100644 --- a/boost-build.jam +++ b/boost-build.jam @@ -9,9 +9,9 @@ # 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). +# opposed to any other Boost Build version installed on the user's system). BOOST_ROOT = $(.boost-build-file:D) ; BOOST_BUILD = [ MATCH --boost-build=(.*) : $(ARGV) ] ; -BOOST_BUILD ?= tools/build/v2 ; +BOOST_BUILD ?= tools/build/src ; boost-build $(BOOST_BUILD) ; diff --git a/boostcpp.jam b/boostcpp.jam index 330a974d954f..be6b49142fad 100644 --- a/boostcpp.jam +++ b/boostcpp.jam @@ -8,27 +8,30 @@ # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) -import option ; -import regex ; +import "class" : new ; import common ; - +import configure ; +import build-system ; +import generate ; import modules ; +import option ; import os ; -import path ; -import build-system ; -import configure ; -import set ; import package ; +import path ; import project ; +import regex ; +import sequence ; +import set ; import targets ; -import generate ; -import package ; +import feature ; +import property ; +import version : version-less ; ############################################################################## -# +# # 0. General setup. Parse options, check them. # -############################################################################## +############################################################################## BOOST_ROOT = [ modules.binding $(__name__) ] ; BOOST_ROOT = $(BOOST_ROOT:D) ; @@ -36,32 +39,48 @@ BOOST_ROOT = $(BOOST_ROOT:D) ; rule set-version ( version ) { BOOST_VERSION = $(version) ; - - local version-tag = [ MATCH "^([^.]+)[.]([^.]+)[.]([^.]+)" : $(BOOST_VERSION) ] - ; + + local version-tag = + [ MATCH "^([^.]+)[.]([^.]+)[.]([^.]+)" : $(BOOST_VERSION) ] ; if $(version-tag[3]) = 0 { version-tag = $(version-tag[1-2]) ; } - - BOOST_VERSION_TAG = $(version-tag:J="_") ; + BOOST_VERSION_TAG = $(version-tag:J=_) ; } # Option to choose how many variants to build. The default is "minimal". -build-type = [ option.get "build-type" ] ; +build-type = [ option.get build-type ] ; build-type ?= minimal ; -if ! ( $(build-type) in minimal complete ) +if ! ( $(build-type) in complete minimal ) { - ECHO "The value of the --build-type option should be either 'complete' or 'minimal'" ; - EXIT ; + EXIT The value of the --build-type option should be either 'complete' or + 'minimal' ; } # What kind of layout are we doing? layout = [ option.get layout : "" ] ; -# On Windows, we used versioned layout by default in order to -# be compatible with autolink. On other systems, we use system -# layout which is what every other program uses. Note that windows -# check is static, and won't + +layout = [ MATCH (versioned|tagged|system)(-(.+))? : $(layout) ] ; +if $(layout[3]) +{ + layout-version = $(layout[3]) ; + layout = $(layout[1]) ; + if [ version-less [ regex.split $(layout-version) "[.]" ] : 1 66 ] + { + layout-version = 1.40 ; + } + else if [ version-less [ regex.split $(layout-version) "[.]" ] : 1 69 ] + { + layout-version = 1.66 ; + } +} +layout-version ?= 1.69 ; + +# On Windows, we used versioned layout by default in order to be compatible with +# autolink. On other systems, we use system layout which is what every other +# program uses. Note that the Windows check is static, and will not be affected +# by specific build properties used. if ! $(layout) { if [ os.name ] = NT @@ -77,329 +96,333 @@ layout-$(layout) = true ; if $(layout) = system && $(build-type) = complete { - ECHO "error: Cannot use --layout=system with --build-type complete." ; - ECHO "error: Please used either --layout=versioned or --layout=tagged " ; - ECHO "error: if you wish to build multiple variants." ; - if ! [ os.name ] = NT - { - ECHO "error: Note that --layout=system is default on Unix starting with Boost 1.40." ; - } + ECHO error\: Cannot use --layout=system with --build-type complete. ; + ECHO error\: Please use either --layout=versioned or --layout=tagged ; + ECHO error\: if you wish to build multiple variants. ; + if [ os.name ] != NT + { + ECHO error\: Note that --layout=system is used by default on Unix + starting with Boost 1.40. ; + } EXIT ; } # Possible stage only location. -stage-locate = [ option.get "stagedir" ] ; -stage-locate ?= stage ; +stage-locate = [ option.get stagedir ] ; + +if $(stage-locate) +{ + stage-locate = [ path.root [ path.make $(stage-locate) ] [ path.pwd ] ] ; +} +else +{ + stage-locate = $(BOOST_ROOT)/stage ; +} + BOOST_STAGE_LOCATE = $(stage-locate) ; # Custom build ID. -build-id = [ option.get "buildid" ] ; +build-id = [ option.get buildid ] ; if $(build-id) { - BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" "_" ] ; + BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" _ ] ; } -# Python build id (only for Python libraries) +# Python build id (for Python libraries only). python-id = [ option.get "python-buildid" ] ; if $(python-id) { - PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ; + PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" _ ] ; } -############################################################################## + +if $(layout) = versioned +{ + switch $(layout-version) + { + case 1.40 : + .format-name-args = + ; + case 1.66 : + .format-name-args = + ; + case 1.69 : + .format-name-args = + ; + } +} +else if $(layout) = tagged +{ + switch $(layout-version) + { + case 1.40 : + .format-name-args = + ; + case 1.66 : + .format-name-args = + ; + case 1.69 : + .format-name-args = + ; + } +} +else if $(layout) = system +{ + .format-name-args = ; +} +else +{ + .format-name-error = true ; +} + + +################################################################################ # -# 1. The 'tag' function that adds decoration suitable to the properties if -# versioned or tagged layout is requested. This function is called from -# Jamroot +# 1. 'tag' function adding decorations suitable to the properties if versioned +# or tagged layout is requested. Called from Jamroot. # -############################################################################## +################################################################################ rule tag ( name : type ? : property-set ) { if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB { - local result ; + local args = $(.format-name-args) ; if $(layout) = versioned { - result = [ common.format-name - -$(BOOST_VERSION_TAG) - -$(BUILD_ID) - : $(name) : $(type) : $(property-set) ] ; - } - else if $(layout) = tagged - { - result = [ common.format-name - - -$(BUILD_ID) - : $(name) : $(type) : $(property-set) ] ; + args += -$(BOOST_VERSION_TAG) ; } - else if $(layout) = system - { - result = [ common.format-name - - -$(BUILD_ID) - : $(name) : $(type) : $(property-set) ] ; - } - else + local result = [ common.format-name + $(args) -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + if $(.format-name-error) { - ECHO "error: invalid layout '$(layout:E=)'" ; - EXIT ; + EXIT error\: invalid layout '$(layout:E=)' ; } - - # Optionally add version suffix. On NT, library with version suffix - # will not 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 expects - # the libFoo.1.2.3.dylib format. AIX linkers do not accept version - # suffixes either. Pgi compilers can not accept library with version - # suffix. + + # Optionally add version suffix. On NT, library with version suffix will + # not 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 expects the + # libFoo.1.2.3.dylib format. AIX linkers do not accept version suffixes + # either. Pgi compilers can not accept a library with version suffix. + # For android, if we link to libFoo.so, which is a soft link to libFoo.so.1.2.3, + # the android studio will only pack the former into the final apk. if $(type) = SHARED_LIB && - ( ! ( [ $(property-set).get ] in windows cygwin darwin aix ) && - ! ( [ $(property-set).get ] in pgi ) ) + ! [ $(property-set).get ] in windows cygwin darwin aix android && + ! [ $(property-set).get ] in pgi { result = $(result).$(BOOST_VERSION) ; } return $(result) ; - } + } } -############################################################################## -# -# 2. Declare targets that build and install all libraries. Specifically: -# -# - 'stage-proper' that puts all libraries in stage/lib -# - 'install-proper' that install libraries and headers to system location -# - 'stage-unversioned' that creates links to libraries without boost veriosn -# in name -# - 'install-unversioned' which creates unversioned linked to installed -# libraries. -# -############################################################################## - -# Worker function suitable to the 'generate' metatarget. Creates a link -# to 'source', striping any version number from the name. -rule make-unversioned-links ( project name ? : property-set : sources * ) +# Specialized tag function to use for libraries linking to Python. +# Appends value of --python-buildid if provided. +rule python-tag ( name : type ? : property-set ) { - local result ; - local filtered ; - local pattern ; - local nt = [ modules.peek : NT ] ; + local result = $(name) ; - # Collect the libraries that have the version number in 'filtered'. - for local s in $(sources) + if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB { - local m ; - if $(nt) - { - m = [ MATCH "(.*[.]lib)" : [ $(s).name ] ] ; - } - else - { - m = [ MATCH "(.*[.]so[.0-9]+)" "(.*[.]dylib)" "(.*[.]a)" : - [ $(s).name ] ] ; - } - if $(m) - { - filtered += $(s) ; - } - } + # Add Python version suffix - # 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 version = [ $(property-set).get ] ; - local noversion-file ; - if $(nt) - { - noversion-file = [ MATCH "(.*)-[0-9_]+(.*[.]lib)" : $(name) ] ; - } - else + local major-minor = [ MATCH "^([0-9]+)\.([0-9]+)" : $(version) ] ; + local suffix = $(major-minor:J="") ; + + if $(suffix) { - 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) ] ; + result = $(result)$(suffix) ; } - local new-name = - $(noversion-file[1])$(noversion-file[2]) ; - result += [ new file-target $(new-name) exact : [ $(s).type ] : $(project) - : $(a) ] ; + # Add PYTHON_ID if supplied + if $(PYTHON_ID) + { + result = $(result)-$(PYTHON_ID) ; + } } - return $(result) ; + + # forward to the boost tagging rule + return [ tag $(result) : $(type) : $(property-set) ] ; } -rule declare_install_and_stage_proper_targets ( libraries * : headers * ) +################################################################################ +# +# 2. Declare targets that build and install all libraries. Specifically: +# +# - 'stage-proper' that puts all libraries in stage/lib +# - 'install-proper' that install libraries and headers to system location +# +################################################################################ + +rule declare_install_and_stage_proper_targets ( libraries * ) { - install-requirements = $(BOOST_ROOT)/boost ; + local p = [ project.current ] ; - if $(layout-versioned) - { - install-requirements += boost-$(BOOST_VERSION_TAG)/boost ; - } - else - { - install-requirements += boost ; - } - - if [ os.name ] = NT - { - install-requirements += C:/Boost ; - } - else - { - install-requirements += /usr/local ; - } - - p = [ project.current ] ; - - # Complete install. - package.install install-proper - : $(install-requirements) on - : - : libs/$(libraries)/build - : $(headers) - ; - + alias install-proper : libs/$(libraries)/build//install ; $(p).mark-target-as-explicit install-proper ; - # Install just library. - install stage-proper - : libs/$(libraries)/build - : $(stage-locate)/lib - on LIB - on - ; + alias stage-proper : libs/$(libraries)/build//stage ; $(p).mark-target-as-explicit stage-proper ; +} - if $(layout-versioned) && ( [ modules.peek : NT ] || [ modules.peek : UNIX ] ) - { - generate stage-unversioned : stage-proper : - boostcpp.make-unversioned-links ; - $(p).mark-target-as-explicit stage-unversioned ; - generate install-unversioned : install-proper : - boostcpp.make-unversioned-links ; - $(p).mark-target-as-explicit explicit install-unversioned ; - } - else +################################################################################ +# +# 3. Declare top-level targets 'stage' and 'install'. These examine the +# --build-type option and, in case it is 'complete', build the 'install-proper' +# and 'stage-proper' targets with a number of property sets. +# +################################################################################ + +rule emit-shared-static-warning ( ) +{ + if ! $(.shared-static-warning-emitted) { - # Create do-nothing aliases. - alias stage-unversioned ; - $(p).mark-target-as-explicit stage-unversioned ; - alias install-unversioned ; - $(p).mark-target-as-explicit install-unversioned ; + ECHO "" ; + ECHO "warning: The configuration link=shared, runtime-link=static is disabled" ; + ECHO "warning: by default as being too dangerous to use, and will not be built." ; + ECHO "warning: To enable it, use --allow-shared-static." ; + ECHO "" ; + + .shared-static-warning-emitted = 1 ; } } -############################################################################## -# -# 3. Declare top-level targets 'stage' and 'install'. These examine -# the --build-type option and, in case it's 'complete', build the -# 'install-proper' and 'stage-proper' targets with a number of -# property sets. -# -############################################################################## - class top-level-target : alias-target-class { import modules ; - import errors ; - + import boostcpp ; + rule __init__ ( name : project : sources * : requirements * : default-build * : usage-requirements * ) { alias-target-class.__init__ $(name) : $(project) : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ; - + self.build-type = [ modules.peek boostcpp : build-type ] ; - # On Linux, we build release variant by default, since few users will - # ever want to debug C++ Boost libraries, and there's no ABI - # incompatibility between debug and release variants. We build - # shared and static libraries since that's what most packages - # seem to provide (.so in libfoo and .a in libfoo-dev). - self.minimal-properties = [ property-set.create - release multi shared static shared ] ; + # On Linux, we build the release variant by default, since few users + # will ever want to debug C++ Boost libraries, and there is no ABI + # incompatibility between debug and release variants. We build shared + # and static libraries since that is what most packages seem to provide + # (.so in libfoo and .a in libfoo-dev). + + self.minimal-properties = [ property-set.create release + multi shared static shared ] ; + # On Windows, new IDE projects use: # # runtime-link=dynamic, threading=multi, variant=(debug|release) # # and in addition, C++ Boost's autolink defaults to static linking. - self.minimal-properties-win = [ property-set.create - debug release multi static shared ] ; + + self.minimal-properties-win = [ property-set.create debug + release multi static shared + 32 64 ] ; self.complete-properties = [ property-set.create debug release - single multi + multi shared static shared static ] ; + + self.complete-properties-win = [ property-set.create + debug release + multi + shared static + shared static + 32 64 ] ; } - + rule generate ( property-set ) { - local x = [ modules.peek : top-level-targets ] ; - x += $(self.name) ; - modules.poke : top-level-targets : $(x) ; + modules.poke : top-level-targets : [ modules.peek : top-level-targets ] + $(self.name) ; + + local os = [ $(property-set).get ] ; + + # Because we completely override the parent's 'generate' we need to + # check for default feature values ourselves. + + if ! $(os) + { + os = [ feature.defaults ] ; + os = $(os:G=) ; + } + + local build-type-set ; + if $(self.build-type) = minimal { - local expanded ; - - local os = [ $(property-set).get ] ; - # Because we completely override parent's 'generate' - # we need to check for default value of feature ourself. - if ! $(os) + if $(os) = windows { - os = [ feature.defaults ] ; - os = $(os:G=) ; + build-type-set = $(self.minimal-properties-win) ; } - + else + { + build-type-set = $(self.minimal-properties) ; + } + } + else if $(self.build-type) = complete + { if $(os) = windows - { - expanded = [ targets.apply-default-build $(property-set) - : $(self.minimal-properties-win) ] ; + { + build-type-set = $(self.complete-properties-win) ; } else { - expanded = [ targets.apply-default-build $(property-set) - : $(self.minimal-properties) ] ; - } - return [ build-multiple $(expanded) ] ; + build-type-set = $(self.complete-properties) ; + } } - else if $(self.build-type) = complete - { + else + { + import errors ; + errors.error "Unknown build type" ; + } + + if $(build-type-set) + { local expanded = [ targets.apply-default-build $(property-set) - : $(self.complete-properties) ] ; - - # Filter inappopriate combinations + : $(build-type-set) ] ; + + # Filter inappropriate combinations. + local filtered ; + local skipped ; + + local argv = [ modules.peek : ARGV ] ; + for local p in $(expanded) { # See comment in handle-static-runtime regarding this logic. - if [ $(p).get ] = shared && [ $(p).get ] = static - && [ $(p).get ] != cw + if [ $(p).get ] = shared + && [ $(p).get ] = static + && [ $(p).get ] != cw + && ! --allow-shared-static in $(argv) { - # Skip this + # Skip this. + skipped += $(p) ; } else { filtered += $(p) ; } - } - return [ build-multiple $(filtered) ] ; + } + + if $(expanded) = $(skipped) + { + boostcpp.emit-shared-static-warning ; + } + + return [ build-multiple $(filtered) ] ; } - else - { - errors.error "Unknown build type" ; - } } - + rule build-multiple ( property-sets * ) { local usage-requirements = [ property-set.empty ] ; @@ -414,27 +437,27 @@ class top-level-target : alias-target-class } } return $(usage-requirements) [ sequence.unique $(result) ] ; - } + } } -rule declare_top_level_targets ( libraries * : headers * ) +rule declare_top_level_targets ( libraries * ) { - declare_install_and_stage_proper_targets $(libraries) : $(headers) ; - + declare_install_and_stage_proper_targets $(libraries) ; + targets.create-metatarget top-level-target : [ project.current ] : install - : install-proper install-unversioned + : install-proper ; targets.create-metatarget top-level-target : [ project.current ] : stage - : stage-proper stage-unversioned + : stage-proper headers ; p = [ project.current ] ; $(p).mark-target-as-explicit install stage ; - - # This target is built by default, and will forward to 'stage' - # after producing some explanations. + + # This target is built by default, and will forward to 'stage' after + # producing some explanations. targets.create-metatarget top-level-target : [ project.current ] : forward : explain stage @@ -442,18 +465,15 @@ rule declare_top_level_targets ( libraries * : headers * ) } -stage-abs = [ path.native [ path.root $(stage-locate)/lib [ path.pwd ] ] ] ; - -############################################################################## +################################################################################ # -# 4. Add hook to report configuration before the build, and confirmation -# with setup instructions after the build +# 4. Add hook to report configuration before the build, and confirmation with +# setup instructions after the build. # -############################################################################## +################################################################################ -message explain : -"\nBuilding the Boost C++ Libraries.\n\n" ; -p = [ project.current ] ; +message explain : "\nBuilding the Boost C++ Libraries.\n\n" ; +local p = [ project.current ] ; $(p).mark-target-as-explicit explain ; rule pre-build ( ) @@ -461,109 +481,109 @@ rule pre-build ( ) local tl = [ modules.peek : top-level-targets ] ; if stage in $(tl) || install in $(tl) { - # FIXME: remove if when Boost regression tests use trunk - # bjam. + # FIXME: Remove 'if' when Boost regression tests start using trunk bjam. if PAD in [ RULENAMES ] - { + { configure.print-component-configuration ; - } + } } } IMPORT $(__name__) : pre-build : : $(__name__).pre-build ; build-system.set-pre-build-hook $(__name__).pre-build ; -# FIXME: revive stage_abs -rule post-build ( ok ? ) +rule post-build ( ok ? ) { - if forward in [ modules.peek : top-level-targets ] - { + if forward in [ modules.peek : top-level-targets ] + { if $(ok) { - ECHO -"\n\nThe Boost C++ Libraries were successfully built! - + local include-path = [ path.native $(BOOST_ROOT) ] ; + local stage-abs = [ path.native $(stage-locate)/lib ] ; + + ECHO " + +The Boost C++ Libraries were successfully built! + The following directory should be added to compiler include paths: - - $(BOOST_ROOT) - + + $(include-path) + The following directory should be added to linker library paths: - + $(stage-abs) " ; - } - } + } + } } IMPORT $(__name__) : post-build : : $(__name__).post-build ; build-system.set-post-build-hook $(__name__).post-build ; -############################################################################## -# -# 5. Top-level setup +################################################################################ # -############################################################################## - +# 5. Top-level setup. +# +################################################################################ # Decides which libraries are to be installed by looking at --with- # --without- arguments. Returns the list of directories under "libs" # which must be built and installed. # -rule libraries-to-install ( existing-libraries * ) +rule libraries-to-install ( existing-libs * ) { - local argv = [ modules.peek : ARGV ] ; - local with-parameter = [ MATCH --with-(.*) : $(argv) ] ; - local without-parameter = [ MATCH --without-(.*) : $(argv) ] ; - - if ! $(with-parameter) && ! $(without-parameter) - { - # Nothing is specified on command line. See if maybe - # project-config.jam has some choices. - local project-config-libs = [ modules.peek project-config : libraries ] ; - with-parameter = [ MATCH --with-(.*) : $(project-config-libs) ] ; - without-parameter = [ MATCH --without-(.*) : $(project-config-libs) ] ; - } - - # Do some checks. - if $(with-parameter) && $(without-parameter) - { - ECHO "error: both --with- and --without- specified" ; - EXIT ; - } - - local wrong = [ set.difference $(with-parameter) : $(existing-libraries) ] ; - if $(wrong) - { - ECHO "error: wrong library name '$(wrong[1])' in the --with- option." ; - EXIT ; - } - local wrong = [ set.difference $(without-parameter) : $(existing-libraries) ] ; - if $(wrong) - { - ECHO "error: wrong library name '$(wrong[1])' in the --without- option." ; - EXIT ; - } - - if $(with-parameter) - { - return [ set.intersection $(existing-libraries) : $(with-parameter) ] ; - } - else - { - return [ set.difference $(existing-libraries) : $(without-parameter) ] ; - } + local argv = [ modules.peek : ARGV ] ; + local with-parameter = [ MATCH ^--with-(.*) : $(argv) ] ; + local without-parameter = [ MATCH ^--without-(.*) : $(argv) ] ; + + if ! $(with-parameter) && ! $(without-parameter) + { + # Nothing is specified on command line. See if maybe project-config.jam + # has some choices. + local libs = [ modules.peek project-config : libraries ] ; + with-parameter = [ MATCH ^--with-(.*) : $(libs) ] ; + without-parameter = [ MATCH ^--without-(.*) : $(libs) ] ; + } + + # Do some checks. + if $(with-parameter) && $(without-parameter) + { + EXIT error\: both --with- and --without- specified ; + } + + local wrong = [ set.difference $(with-parameter) : $(existing-libs) ] ; + if $(wrong) + { + EXIT error\: wrong library name '$(wrong[1])' in the --with- + option. ; + } + local wrong = [ set.difference $(without-parameter) : $(existing-libs) ] ; + if $(wrong) + { + EXIT error\: wrong library name '$(wrong[1])' in the --without- + option. ; + } + + if $(with-parameter) + { + return [ set.intersection $(existing-libs) : $(with-parameter) ] ; + } + else + { + return [ set.difference $(existing-libs) : $(without-parameter) ] ; + } } -rule declare-targets ( all-libraries * : headers * ) +rule declare-targets ( all-libraries * ) { configure.register-components $(all-libraries) ; - + # Select the libraries to install. libraries = [ libraries-to-install $(all-libraries) ] ; configure.components-building $(libraries) ; if [ option.get "show-libraries" : : true ] { - ECHO "The following libraries require building:" ; + ECHO The following libraries require building\: ; for local l in $(libraries) { ECHO " - $(l)" ; @@ -571,5 +591,84 @@ rule declare-targets ( all-libraries * : headers * ) EXIT ; } - declare_top_level_targets $(libraries) : $(headers) ; + declare_top_level_targets $(libraries) ; +} + +# Returns the properties identifying the toolset. We'll use them +# below to configure checks. These are essentially same as in +# configure.builds, except we don't use address-model and +# architecture - as we're trying to detect them here. +# +rule toolset-properties ( properties * ) +{ + local toolset = [ property.select : $(properties) ] ; + local toolset-version-property = "" ; + return [ property.select $(toolset-version-property) : $(properties) ] ; +} + +feature.feature deduced-address-model : 32 64 : propagated optional composite hidden ; +feature.compose 32 : 32 ; +feature.compose 64 : 64 ; + +rule deduce-address-model ( properties * ) +{ + local result ; + local filtered = [ toolset-properties $(properties) ] ; + local names = 32 64 ; + local idx = [ configure.find-builds "default address-model" : $(filtered) + : /boost/architecture//32 "32-bit" + : /boost/architecture//64 "64-bit" ] ; + result = $(names[$(idx)]) ; + + if $(result) + { + # Normally, returning composite feature here is equivalent to forcing + # constituent properties as well. But we only want to indicate toolset + # deduced default, so also pick whatever address-model is explicitly + # specified, if any. + result = $(result) [ property.select : $(properties) ] ; + } + return $(result) ; +} + +rule address-model ( ) +{ + return @boostcpp.deduce-address-model ; +} + +local deducable-architectures = arm loongarch mips power riscv s390x sparc x86 combined ; +feature.feature deduced-architecture : $(deducable-architectures) : propagated optional composite hidden ; +for a in $(deducable-architectures) +{ + feature.compose $(a) : $(a) ; +} + +rule deduce-architecture ( properties * ) +{ + local result ; + local filtered = [ toolset-properties $(properties) ] ; + local names = arm loongarch mips power riscv s390x sparc x86 combined ; + local idx = [ configure.find-builds "default architecture" : $(filtered) + : /boost/architecture//arm + : /boost/architecture//loongarch + : /boost/architecture//mips + : /boost/architecture//power + : /boost/architecture//riscv + : /boost/architecture//s390x + : /boost/architecture//sparc + : /boost/architecture//x86 + : /boost/architecture//combined ] ; + result = $(names[$(idx)]) ; + + if $(result) + { + # See comment in deduce-address-model. + result = $(result) [ property.select : $(properties) ] ; + } + return $(result) ; +} + +rule architecture ( ) +{ + return @boostcpp.deduce-architecture ; } diff --git a/bootstrap.bat b/bootstrap.bat index 121ff6d4e220..7f4fd93e5359 100644 --- a/bootstrap.bat +++ b/bootstrap.bat @@ -1,77 +1,98 @@ -@ECHO OFF - -REM Copyright (C) 2009 Vladimir Prus -REM -REM Distributed under the Boost Software License, Version 1.0. -REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - -ECHO Building Boost.Jam build engine -if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" del tools\build\v2\engine\bin.ntx86\bjam.exe -if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" del tools\build\v2\engine\bin.ntx86_64\bjam.exe -pushd tools\build\v2\engine - -call .\build.bat %* > ..\..\..\..\bootstrap.log -@ECHO OFF - -popd - -if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" ( - copy .\tools\build\v2\engine\bin.ntx86\bjam.exe . > nul - goto :bjam_built) - -if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" ( - copy .\tools\build\v2\engine\bin.ntx86_64\bjam.exe . > nul - goto :bjam_built) - -goto :bjam_failure - -:bjam_built - -REM Ideally, we should obtain the toolset that build.bat has -REM guessed. However, it uses setlocal at the start and does -REM export BOOST_JAM_TOOLSET, and I don't know how to do that -REM properly. Default to msvc for now. -set toolset=msvc - -ECHO import option ; > project-config.jam -ECHO. >> project-config.jam -ECHO using %toolset% ; >> project-config.jam -ECHO. >> project-config.jam -ECHO option.set keep-going : false ; >> project-config.jam -ECHO. >> project-config.jam - -ECHO. -ECHO Bootstrapping is done. To build, run: -ECHO. -ECHO .\bjam -ECHO. -ECHO To adjust configuration, edit 'project-config.jam'. -ECHO Further information: -ECHO. -ECHO - Command line help: -ECHO .\bjam --help -ECHO. -ECHO - Getting started guide: -ECHO http://boost.org/more/getting_started/windows.html -ECHO. -ECHO - Boost.Build documentation: -ECHO http://www.boost.org/boost-build2/doc/html/index.html - -goto :end - -:bjam_failure - -ECHO. -ECHO Failed to build Boost.Jam build engine. -ECHO Please consult bootstrap.log for furter diagnostics. -ECHO. -ECHO You can try to obtain a prebuilt binary from -ECHO. -ECHO http://sf.net/project/showfiles.php?group_id=7586^&package_id=72941 -ECHO. -ECHO Also, you can file an issue at http://svn.boost.org -ECHO Please attach bootstrap.log in that case. - -goto :end - -:end +@ECHO OFF + +SETLOCAL + +REM Copyright 2019-2020 Rene Rivera +REM Copyright (C) 2009 Vladimir Prus +REM +REM Distributed under the Boost Software License, Version 1.0. +REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +ECHO Building Boost.Build engine +if exist ".\tools\build\src\engine\b2.exe" del tools\build\src\engine\b2.exe +pushd tools\build\src\engine + +call .\build.bat %* +@ECHO OFF + +popd + +if exist ".\tools\build\src\engine\b2.exe" ( + copy .\tools\build\src\engine\b2.exe . > nul + goto :bjam_built) + +goto :bjam_failure + +:bjam_built + +REM Ideally, we should obtain the toolset that build.bat has +REM guessed. However, it uses setlocal at the start and does not +REM export BOOST_JAM_TOOLSET, and I don't know how to do that +REM properly. Default to msvc if not specified. + +SET TOOLSET=msvc + +IF "%1"=="gcc" SET TOOLSET=gcc +IF "%1"=="clang" SET TOOLSET=clang +IF "%1"=="borland" SET TOOLSET=embarcadero +IF "%1"=="vc71" SET TOOLSET=msvc : 7.1 +IF "%1"=="vc8" SET TOOLSET=msvc : 8.0 +IF "%1"=="vc9" SET TOOLSET=msvc : 9.0 +IF "%1"=="vc10" SET TOOLSET=msvc : 10.0 +IF "%1"=="vc11" SET TOOLSET=msvc : 11.0 +IF "%1"=="vc12" SET TOOLSET=msvc : 12.0 +IF "%1"=="vc14" SET TOOLSET=msvc : 14.0 +IF "%1"=="vc141" SET TOOLSET=msvc : 14.1 +IF "%1"=="vc142" SET TOOLSET=msvc : 14.2 +IF "%1"=="vc143" SET TOOLSET=msvc : 14.3 + +ECHO. +ECHO Generating Boost.Build configuration in project-config.jam for %TOOLSET%... +ECHO # Boost.Build Configuration > project-config.jam +ECHO # Automatically generated by bootstrap.bat >> project-config.jam +ECHO. >> project-config.jam +ECHO import option ; >> project-config.jam +ECHO. >> project-config.jam +ECHO using %TOOLSET% ; >> project-config.jam +ECHO. >> project-config.jam +ECHO option.set keep-going : false ; >> project-config.jam +ECHO. >> project-config.jam + +ECHO. +ECHO Bootstrapping is done. To build, run: +ECHO. +ECHO .\b2 +ECHO. + +IF EXIST libs\config\include ( +ECHO. To generate header files, run: +ECHO. +ECHO. .\b2 headers +ECHO. +) + +ECHO To adjust configuration, edit 'project-config.jam'. +ECHO Further information: +ECHO. +ECHO - Command line help: +ECHO .\b2 --help +ECHO. +ECHO - Getting started guide: +ECHO http://boost.org/more/getting_started/windows.html +ECHO. +ECHO - Boost.Build documentation: +ECHO http://www.boost.org/build/ +ECHO. + +goto :end + +:bjam_failure + +ECHO. +ECHO Failed to build Boost.Build engine. +ECHO. + +REM Set an error code to allow `bootstrap && b2` +cmd /c exit /b 1 > nul + +:end diff --git a/bootstrap.sh b/bootstrap.sh index 5dfe5e9044b4..654801e21f34 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,4 +1,5 @@ #!/bin/sh +# Copyright 2019-2021 René Ferdinand Rivera Morell # Copyright (C) 2005, 2006 Douglas Gregor. # Copyright (C) 2006 The Trustees of Indiana University # @@ -21,6 +22,14 @@ PYTHON_VERSION= PYTHON_ROOT= ICU_ROOT= +# Handle case where builtin shell version of echo command doesn't +# support -n. Use the installed echo executable if there is one +# rather than builtin version to ensure -n is supported. +ECHO=`which echo` +if test "x$ECHO" = x; then + ECHO=echo +fi + # Internal flags flag_no_python= flag_icu= @@ -133,7 +142,9 @@ done if test "x$want_help" = xyes; then cat < bootstrap.log 2>&1 + CXX= CXXFLAGS= "$my_dir/tools/build/src/engine/build.sh" ${TOOLSET} if [ $? -ne 0 ]; then echo - echo "Failed to build Boost.Jam" - echo "Consult 'bootstrap.log' for more details" + echo "Failed to build B2 build engine" exit 1 fi cd "$pwd" - arch=`cd $my_dir/tools/build/v2/engine && ./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target && cd ..` - BJAM="$my_dir/tools/build/v2/engine/$arch/bjam" - echo "tools/build/v2/engine/$arch/bjam" + BJAM="$my_dir/tools/build/src/engine/b2" + echo "tools/build/src/engine/b2" cp "$BJAM" . + fi # TBD: Turn BJAM into an absolute path @@ -241,7 +251,7 @@ the headers only. The Boost libraries requiring separate building and installation are: EOF - $BJAM -d0 --show-libraries | grep '^\s*-' + $BJAM -d0 --show-libraries | grep '^[[:space:]]*-' exit 0 fi @@ -268,21 +278,26 @@ fi if test "x$flag_no_python" = x; then if test "x$PYTHON_VERSION" = x; then - echo -n "Detecting Python version... " + $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 -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?... " +$ECHO -n "Unicode/ICU support for Boost.Regex?... " if test "x$flag_icu" != xno; then + if test "x$ICU_ROOT" = x; then + if command -v pkg-config > /dev/null && pkg-config icu-uc ; then + ICU_ROOT=`pkg-config --variable=prefix icu-uc` + fi + fi if test "x$ICU_ROOT" = x; then COMMON_ICU_PATHS="/usr /usr/local /sw" for p in $COMMON_ICU_PATHS; do @@ -314,14 +329,14 @@ if test -r "project-config.jam"; then counter=`expr $counter + 1` done - echo "Backing up existing Boost.Build configuration in project-config.jam.$counter" + echo "Backing up existing B2 configuration in project-config.jam.$counter" mv "project-config.jam" "project-config.jam.$counter" fi # Generate user-config.jam -echo "Generating Boost.Build configuration in project-config.jam..." +echo "Generating B2 configuration in project-config.jam for $TOOLSET..." cat > project-config.jam <> project-config.jam <> project-config.jam << EOF # override this variable. libraries = $LIBS ; -# These settings are equivivalent to corresponding command-line +# These settings are equivalent to corresponding command-line # options. option.set prefix : $PREFIX ; option.set exec-prefix : $EPREFIX ; @@ -378,18 +397,25 @@ cat << EOF Bootstrapping is done. To build, run: - ./bjam + ./b2 -To adjust configuration, edit 'project-config.jam'. +To generate header files, run: + + ./b2 headers + +The configuration generated uses ${TOOLSET} to build by default. If that is +unintended either use the --with-toolset option or adjust configuration, by +editing 'project-config.jam'. + Further information: - Command line help: - ./bjam --help + ./b2 --help - Getting started guide: http://www.boost.org/more/getting_started/unix-variants.html - - Boost.Build documentation: - http://www.boost.org/boost-build2/doc/html/index.html + - B2 documentation: + http://www.boost.org/build/ -EOF \ No newline at end of file +EOF diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 index dc41df42f1b7..d466c9be12e3 100644 --- a/doc/Jamfile.v2 +++ b/doc/Jamfile.v2 @@ -1,94 +1,224 @@ # Copyright (c) 2002 Douglas Gregor +# Copyright (c) 2016-2018 Rene Rivera # # Distributed under the 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 ; + +project boost/doc + : requirements + boost.libraries=../../libs/libraries.htm + html:chunker.output.doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + html:chunker.output.doctype-system="http://www.w3.org/TR/html4/loose.dtd" + ; + import boostbook : boostbook ; +import project ; +import targets ; +import print ; +import type ; +import generators ; +import sequence ; +import path ; +import "class" : is-a ; +import regex ; + +path-constant BOOST_DOC : . ; + +local lib-docs = [ path.glob [ path.glob $(BOOST_DOC)/../libs $(BOOST_DOC)/../tools : */doc ] + : [ modules.peek project : JAMFILE ] ] ; + +local rule find-target-of-class-or-type ( root-target : klass ? : type ? ) +{ + local result ; + if ! $(result) && $(klass) && [ is-a $(root-target) : $(klass) ] + { + result ?= $(root-target) $(klass) ; + } + if ! $(result) && $(type) && $(type:U) = [ modules.peek $(root-target) : self.type ] + { + result ?= $(root-target) $(type:U) ; + } + local alternatives = [ modules.peek $(root-target) : self.alternatives ] ; + if ! $(result) + { + for local alternative in $(alternatives) + { + if $(result) { break ; } + result ?= [ find-target-of-class-or-type $(alternative) : $(klass) : $(type) ] ; + } + } + if ! $(result) + { + for local alternative in $(alternatives) + { + if $(result) { break ; } + local sources = [ modules.peek $(alternative) : self.sources ] ; + for local source in [ $(alternative).sources ] + { + if $(result) { break ; } + result ?= [ find-target-of-class-or-type $(source) : $(klass) : $(type) ] ; + } + } + } + return $(result) ; +} + +local rule docbook-target-spec ( main-target ) +{ + local spec ; + local doc-sub-target + = [ find-target-of-class-or-type $(main-target) : boostbook-target-class : XML ] ; + if $(doc-sub-target) + { + #ECHO *** $(main-target) ; + #ECHO " ::" [ $(main-target).full-name ] ; + #ECHO " ::" $(doc-sub-target) :: [ $(doc-sub-target[0]).full-name ] ; + local full-name = [ $(doc-sub-target[0]).full-name ] ; + local target-path = $(full-name:D) ; + local target-name = $(full-name:B) ; + local this-path = [ path.root [ project.attribute $(__name__) location ] [ path.pwd ] ] ; + target-path = [ path.relative-to $(this-path) $(target-path) ] ; + #ECHO " ::" $(target-path) :: $(target-name) ; + spec = $(target-path)//$(target-name) ; + } + return $(spec) ; +} + +local exclude-libs = [ MATCH "^--exclude-libraries=(.*)" : [ modules.peek : ARGV ] ] ; +exclude-libs = [ regex.split-list $(exclude-libs) : "," ] ; + +#ECHO "=== --exclude-libraries:" $(exclude-libs) ; + +local lib-doc-boostdoc-refs ; +local lib-doc-boostrelease-refs ; + +local this-path = [ path.root [ project.attribute $(__name__) location ] [ path.pwd ] ] ; +for local lib-doc in $(lib-docs) +{ + #ECHO === $(lib-doc) ... ; + local doc-project = $(lib-doc:D) ; + + local lib-dir = $(doc-project:D) ; + local lib-name = $(lib-dir:BS) ; -alias asio : ../libs/asio/doc//asio/boost.libraries=../../libs/libraries.htm ; + #ECHO "=== lib-name:" $(lib-name) ... ; + + if $(lib-name) in $(exclude-libs) + { + ECHO "-- Excluded library" '$(lib-name)' ; + } + else + { + local doc-module = [ project.find $(doc-project) + : [ project.attribute $(__name__) location ] ] ; + local doc-target = [ project.target $(doc-module) ] ; + $(doc-target).build-main-targets ; + local boostrelease-target = [ $(doc-target).main-target boostrelease ] ; + if $(boostrelease-target) + { + local full-name = [ $(boostrelease-target).full-name ] ; + local target-path = [ path.relative-to $(this-path) $(full-name:D) ] ; + lib-doc-boostrelease-refs += $(target-path)//boostrelease ; + #ECHO " ::" $(target-path)//boostrelease ; + } + local boostdoc-target = [ $(doc-target).main-target boostdoc ] ; + if $(boostdoc-target) + { + local full-name = [ $(boostdoc-target).full-name ] ; + local target-path = [ path.relative-to $(this-path) $(full-name:D) ] ; + lib-doc-boostdoc-refs += $(target-path)//boostdoc ; + #ECHO " ::" $(target-path)//boostdoc ; + } + } +} + +# Build non-integrated library docs for release. +if "--release-build" in [ modules.peek : ARGV ] +{ + alias release-build : $(lib-doc-boostrelease-refs) ; +} + +local rule component-order ( x y ) +{ + local a = [ MATCH "(/libs/[^/]+)" "(/tools/[^/]+)" : $(x:G) $(x:G=) ] ; + local b = [ MATCH "(/libs/[^/]+)" "(/tools/[^/]+)" : $(y:G) $(y:G=) ] ; + if $(a[1]) < $(b[1]) + { + return true ; + } + else if $(a[1]) = $(b[1]) && $(x) < $(y) + { + return true ; + } +} + +rule xinclude-generator ( target : sources * : properties * ) +{ + print.output $(target) ; + local includes ; + sources = [ sequence.insertion-sort $(sources) : component-order ] ; + locate = [ path.root [ on $(target) return $(LOCATE) ] [ path.pwd ] ] ; + for local xml in $(sources) + { + local dir ; + dir ?= [ on $(xml) return $(LOCATE) ] ; + dir ?= [ on $(xml) return $(SEARCH) ] ; + dir ?= "" ; + dir = [ path.root $(dir[1]) [ path.pwd ] ] ; + dir = [ path.relative-to $(locate) $(dir) ] ; + includes += "" ; + } + print.text + "" + "" + $(includes) + "" + : overwrite ; +} +type.register XINCLUDE_XML : xinclude : XML ; +generators.register-composing $(__name__).xinclude-generator : XML : XINCLUDE_XML ; + +rule xinclude ( name : sources * : requirements * : default-build * : usage-requirements * ) +{ + targets.create-typed-target XINCLUDE_XML + : [ project.current ] + : $(name) + : $(sources) + : $(requirements) + : $(default-build) + : $(usage-requirements) + ; +} + +xinclude libraries : + $(lib-doc-boostdoc-refs) + ; +explicit libraries ; + +xinclude tools : + ../tools/quickbook/doc//quickbook + ../tools/boostbook/doc/boostbook.xml + ; +explicit tools ; boostbook doc : src/boost.xml : - ## Build the various generated docs (Doxygen and QuickBook)... - - ../libs/accumulators/doc//accdoc.xml - ../libs/accumulators/doc//statsdoc.xml - ../libs/accumulators/doc//opdoc.xml - ../libs/accumulators/doc//accumulators - ../libs/chrono/doc//chrono - ../libs/program_options/doc//autodoc.xml - ../libs/algorithm/string/doc//autodoc.xml - ../libs/logic/doc//reference.xml - ../libs/functional/hash/doc//hash - #../libs/type_traits/doc//type_traits - ../libs/static_assert/doc//static_assert - ../libs/tr1/doc//tr1 - ../libs/foreach/doc//foreach - ../libs/mpi/doc//mpi - ../libs/mpi/doc//mpi_autodoc.xml - ../libs/property_tree/doc//autodoc.xml - ../libs/property_tree/doc//property_tree - #../libs/proto/doc//protodoc.xml - ../libs/proto/doc//proto - ../libs/ratio/doc//ratio - ../libs/typeof/doc//typeof - ../libs/xpressive/doc//autodoc.xml - ../libs/xpressive/doc//xpressive - ../libs/date_time/xmldoc//date_time_autodoc.xml - ../libs/date_time/xmldoc//gregorian_autodoc.xml - ../libs/date_time/xmldoc//posix_time_autodoc.xml - ../libs/date_time/xmldoc//local_time_autodoc.xml - ../tools/build/v2/doc//jam_docs - ../tools/quickbook/doc//quickbook - ../libs/interprocess/doc//autodoc.xml - ../libs/interprocess/doc//interprocess - ../libs/intrusive/doc//autodoc.xml - ../libs/intrusive/doc//intrusive - ../libs/units/doc//units - ../libs/unordered/doc//unordered - ../libs/thread/doc//thread - ../libs/signals2/doc//hello_world_def_code_snippet.xml - ../libs/random/doc//random - #../libs/spirit/doc//spirit - - ## Add path references to the QuickBook generated docs... - - ../libs/accumulators/doc//accumulators - ../libs/chrono/doc//chrono - ../libs/functional/hash/doc//hash - #../libs/type_traits/doc//type_traits - ../libs/static_assert/doc//static_assert - ../libs/tr1/doc//tr1 - ../libs/foreach/doc//foreach - ../libs/property_tree/doc//property_tree - ../libs/proto/doc//proto - ../libs/ratio/doc//ratio - ../libs/typeof/doc//typeof - ../libs/xpressive/doc//xpressive - ../tools/build/v2/doc//jam_docs - ../tools/quickbook/doc//quickbook - ../libs/mpi/doc//mpi - ../libs/interprocess/doc//interprocess - ../libs/intrusive/doc//intrusive - ../libs/units/doc//units - ../libs/unordered/doc//unordered - ../libs/thread/doc//thread - ../libs/signals2/doc//hello_world_def_code_snippet.xml - ../libs/random/doc//random - #../libs/spirit/doc//spirit - - boost.libraries=../../libs/libraries.htm + generate.consistent.ids=1 + $(lib-doc-boostdoc-refs) + libraries + libraries + tools + tools images callouts + $(BOOST_DOC) ; install images : [ glob src/images/*.png ] : html/images ; explicit images ; install callouts : [ glob src/images/callouts/*.png ] : html/images/callouts ; explicit callouts ; - - diff --git a/doc/html/Assignable.html b/doc/html/Assignable.html index d7a6f6829a28..708eeaa79b60 100644 --- a/doc/html/Assignable.html +++ b/doc/html/Assignable.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/Assignable.html + http://www.boost.org/doc/libs/master/doc/html/Assignable.html diff --git a/doc/html/CopyConstructible.html b/doc/html/CopyConstructible.html index d88bf22c12a1..30e7bb882b35 100644 --- a/doc/html/CopyConstructible.html +++ b/doc/html/CopyConstructible.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/CopyConstructible.html + http://www.boost.org/doc/libs/master/doc/html/CopyConstructible.html diff --git a/doc/html/accumulators.html b/doc/html/accumulators.html index c32c8ca35a34..c31b261844e6 100644 --- a/doc/html/accumulators.html +++ b/doc/html/accumulators.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/accumulators.html + http://www.boost.org/doc/libs/master/doc/html/accumulators.html diff --git a/doc/html/any.html b/doc/html/any.html index 6b70582822cc..f7e6d125de6b 100644 --- a/doc/html/any.html +++ b/doc/html/any.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/any.html + http://www.boost.org/doc/libs/master/doc/html/any.html diff --git a/doc/html/array.html b/doc/html/array.html index 03a39036cfd7..9a065555423b 100644 --- a/doc/html/array.html +++ b/doc/html/array.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/array.html + http://www.boost.org/doc/libs/master/doc/html/array.html diff --git a/doc/html/boost_tr1.html b/doc/html/atomic.html similarity index 64% rename from doc/html/boost_tr1.html rename to doc/html/atomic.html index c682dc5cb9f9..9f61809b71a1 100644 --- a/doc/html/boost_tr1.html +++ b/doc/html/atomic.html @@ -7,11 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_tr1.html + http://www.boost.org/doc/libs/master/doc/html/atomic.html - diff --git a/doc/html/bbv2.html b/doc/html/bbv2.html index 9fb97856a0ed..6737b0cae3c7 100644 --- a/doc/html/bbv2.html +++ b/doc/html/bbv2.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/bbv2.html + ../../tools/build/doc/html/index.html diff --git a/doc/html/bbv2/installation.html b/doc/html/bbv2/installation.html index ca0ff279f194..c740c8fc60be 100644 --- a/doc/html/bbv2/installation.html +++ b/doc/html/bbv2/installation.html @@ -6,12 +6,12 @@ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> - Redirect to generated documentation - + Redirect to new location + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/bbv2/installation.html + ../bbv2.html#bbv2.installation diff --git a/doc/html/boost_asio.html b/doc/html/boost_asio.html index 10fefd4e6779..dd3902c23d80 100644 --- a/doc/html/boost_asio.html +++ b/doc/html/boost_asio.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_asio.html + http://www.boost.org/doc/libs/master/doc/html/boost_asio.html diff --git a/doc/html/boost_lexical_cast.html b/doc/html/boost_lexical_cast.html new file mode 100644 index 000000000000..bbbf47485c57 --- /dev/null +++ b/doc/html/boost_lexical_cast.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/boost_lexical_cast.html + + diff --git a/doc/html/boost_random.html b/doc/html/boost_random.html index abbf5bca48f3..4b9c4e27a793 100644 --- a/doc/html/boost_random.html +++ b/doc/html/boost_random.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_random.html + http://www.boost.org/doc/libs/master/doc/html/boost_random.html diff --git a/doc/html/boost_staticassert.html b/doc/html/boost_staticassert.html index 1b1e042acd66..84afae9792ab 100644 --- a/doc/html/boost_staticassert.html +++ b/doc/html/boost_staticassert.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_staticassert.html + http://www.boost.org/doc/libs/master/doc/html/boost_staticassert.html diff --git a/doc/html/boost_typeerasure.html b/doc/html/boost_typeerasure.html new file mode 100644 index 000000000000..ea41d9480760 --- /dev/null +++ b/doc/html/boost_typeerasure.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/boost_typeerasure.html + + diff --git a/doc/html/boostbook.html b/doc/html/boostbook.html index 89b866bfec48..d77406f7161c 100644 --- a/doc/html/boostbook.html +++ b/doc/html/boostbook.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boostbook.html + http://www.boost.org/doc/libs/master/doc/html/boostbook.html diff --git a/doc/html/boost_ratio.html b/doc/html/chrono.html similarity index 64% rename from doc/html/boost_ratio.html rename to doc/html/chrono.html index 854fc2ed76cb..54d54626b861 100644 --- a/doc/html/boost_ratio.html +++ b/doc/html/chrono.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_ratio.html + http://www.boost.org/doc/libs/master/doc/html/chrono.html diff --git a/doc/html/circular_buffer.html b/doc/html/circular_buffer.html new file mode 100644 index 000000000000..6400dc1e646d --- /dev/null +++ b/doc/html/circular_buffer.html @@ -0,0 +1,17 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/circular_buffer.html + + + diff --git a/doc/html/boost_chrono.html b/doc/html/container.html similarity index 63% rename from doc/html/boost_chrono.html rename to doc/html/container.html index a681647a3d89..ec33eb4510c5 100644 --- a/doc/html/boost_chrono.html +++ b/doc/html/container.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/boost_chrono.html + http://www.boost.org/doc/libs/master/doc/html/container.html diff --git a/doc/html/date_time.html b/doc/html/date_time.html index a8113c6654e6..139ab4aa1703 100644 --- a/doc/html/date_time.html +++ b/doc/html/date_time.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/date_time.html + http://www.boost.org/doc/libs/master/doc/html/date_time.html diff --git a/doc/html/date_time/date_time_io.html b/doc/html/date_time/date_time_io.html index 4a6304bb900f..449f2e1612c1 100644 --- a/doc/html/date_time/date_time_io.html +++ b/doc/html/date_time/date_time_io.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/date_time/date_time_io.html + http://www.boost.org/doc/libs/master/doc/html/date_time/date_time_io.html diff --git a/doc/html/date_time/details.html b/doc/html/date_time/details.html index 77b01b16285f..1f239472297f 100644 --- a/doc/html/date_time/details.html +++ b/doc/html/date_time/details.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/date_time/details.html + http://www.boost.org/doc/libs/master/doc/html/date_time/details.html diff --git a/doc/html/date_time/local_time.html b/doc/html/date_time/local_time.html index 23e64a44ef8b..ed3893fe7682 100644 --- a/doc/html/date_time/local_time.html +++ b/doc/html/date_time/local_time.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/date_time/local_time.html + http://www.boost.org/doc/libs/master/doc/html/date_time/local_time.html diff --git a/doc/html/foreach.html b/doc/html/foreach.html index 369fc453c13a..dcf19fe89120 100644 --- a/doc/html/foreach.html +++ b/doc/html/foreach.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/foreach.html + http://www.boost.org/doc/libs/master/doc/html/foreach.html diff --git a/doc/html/function.html b/doc/html/function.html index d768e4c76894..78c45190469f 100644 --- a/doc/html/function.html +++ b/doc/html/function.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/function.html + http://www.boost.org/doc/libs/master/doc/html/function.html diff --git a/doc/html/hash.html b/doc/html/hash.html index 5a860649b840..0d5982f6f7bb 100644 --- a/doc/html/hash.html +++ b/doc/html/hash.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/hash.html + http://www.boost.org/doc/libs/master/doc/html/hash.html diff --git a/doc/html/hash/custom.html b/doc/html/hash/custom.html index f42ada110632..b7706246e3b2 100644 --- a/doc/html/hash/custom.html +++ b/doc/html/hash/custom.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/hash/custom.html + http://www.boost.org/doc/libs/master/doc/html/hash/custom.html diff --git a/doc/html/heap.html b/doc/html/heap.html new file mode 100644 index 000000000000..35b9e56306b4 --- /dev/null +++ b/doc/html/heap.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/heap.html + + diff --git a/doc/html/interprocess.html b/doc/html/interprocess.html index acb8310a6c25..f148b5a7284b 100644 --- a/doc/html/interprocess.html +++ b/doc/html/interprocess.html @@ -6,12 +6,12 @@ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> - + Redirect to generated documentation Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/interprocess.html + http://www.boost.org/doc/libs/master/doc/html/interprocess.html diff --git a/doc/html/intrusive.html b/doc/html/intrusive.html index 4b83dd3329c5..e89dcbc853bc 100644 --- a/doc/html/intrusive.html +++ b/doc/html/intrusive.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/intrusive.html + http://www.boost.org/doc/libs/master/doc/html/intrusive.html diff --git a/doc/html/lambda.html b/doc/html/lambda.html index 9a771e2025be..1d180b824f43 100644 --- a/doc/html/lambda.html +++ b/doc/html/lambda.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/lambda.html + http://www.boost.org/doc/libs/master/doc/html/lambda.html diff --git a/doc/html/lockfree.html b/doc/html/lockfree.html new file mode 100644 index 000000000000..af31e14d8c0c --- /dev/null +++ b/doc/html/lockfree.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/lockfree.html + + diff --git a/doc/html/move.html b/doc/html/move.html new file mode 100644 index 000000000000..41abb988e59c --- /dev/null +++ b/doc/html/move.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/move.html + + diff --git a/doc/html/mpi.html b/doc/html/mpi.html index 5019c0b098e1..452e992bfe18 100644 --- a/doc/html/mpi.html +++ b/doc/html/mpi.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/mpi.html + http://www.boost.org/doc/libs/master/doc/html/mpi.html diff --git a/doc/html/program_options.html b/doc/html/program_options.html index 13f316a27158..a2d8071c429c 100644 --- a/doc/html/program_options.html +++ b/doc/html/program_options.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/program_options.html + http://www.boost.org/doc/libs/master/doc/html/program_options.html diff --git a/doc/html/property_tree.html b/doc/html/property_tree.html index 8d0a4794b78f..2127a17f4375 100644 --- a/doc/html/property_tree.html +++ b/doc/html/property_tree.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/property_tree.html + http://www.boost.org/doc/libs/master/doc/html/property_tree.html diff --git a/doc/html/proto.html b/doc/html/proto.html index 98502e961046..b09d5cfb7c5a 100644 --- a/doc/html/proto.html +++ b/doc/html/proto.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/proto.html + http://www.boost.org/doc/libs/master/doc/html/proto.html diff --git a/doc/html/quickbook.html b/doc/html/quickbook.html index 46372c9c0c8e..54ef7bf89515 100644 --- a/doc/html/quickbook.html +++ b/doc/html/quickbook.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/quickbook.html + http://www.boost.org/doc/libs/master/doc/html/quickbook.html diff --git a/doc/html/ratio.html b/doc/html/ratio.html new file mode 100644 index 000000000000..857ccf35afca --- /dev/null +++ b/doc/html/ratio.html @@ -0,0 +1,16 @@ + + + + + Redirect to generated documentation + + + + Automatic redirection failed, please go to + http://www.boost.org/doc/libs/master/doc/html/ratio.html + + diff --git a/doc/html/ref.html b/doc/html/ref.html index 0457c760b1a8..a42b78b37dfc 100644 --- a/doc/html/ref.html +++ b/doc/html/ref.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/ref.html + ../../libs/core/doc/html/core/ref.html diff --git a/doc/html/signals.html b/doc/html/signals.html index 62b7a08138bc..6969f7036a96 100644 --- a/doc/html/signals.html +++ b/doc/html/signals.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/signals.html + http://www.boost.org/doc/libs/master/doc/html/signals.html diff --git a/doc/html/signals2.html b/doc/html/signals2.html index 046b9606300c..c72bcf0ad647 100644 --- a/doc/html/signals2.html +++ b/doc/html/signals2.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/signals2.html + http://www.boost.org/doc/libs/master/doc/html/signals2.html diff --git a/doc/html/string_algo.html b/doc/html/string_algo.html index 967db684812c..3ce93fcff39d 100644 --- a/doc/html/string_algo.html +++ b/doc/html/string_algo.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/string_algo.html + http://www.boost.org/doc/libs/master/doc/html/string_algo.html diff --git a/doc/html/thread.html b/doc/html/thread.html index 6b4379bc740e..c24b88b10ed2 100644 --- a/doc/html/thread.html +++ b/doc/html/thread.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/thread.html + http://www.boost.org/doc/libs/master/doc/html/thread.html diff --git a/doc/html/tribool.html b/doc/html/tribool.html index 79894ee550b6..f04653e6550c 100644 --- a/doc/html/tribool.html +++ b/doc/html/tribool.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/tribool.html + http://www.boost.org/doc/libs/master/doc/html/tribool.html diff --git a/doc/html/typeof.html b/doc/html/typeof.html index 79c95b2d979f..31a64def434f 100644 --- a/doc/html/typeof.html +++ b/doc/html/typeof.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/typeof.html + http://www.boost.org/doc/libs/master/doc/html/typeof.html diff --git a/doc/html/unordered.html b/doc/html/unordered.html index a7418c38d5a2..889d267f90da 100644 --- a/doc/html/unordered.html +++ b/doc/html/unordered.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/unordered.html + http://www.boost.org/doc/libs/master/doc/html/unordered.html diff --git a/doc/html/variant.html b/doc/html/variant.html index b67b72ddf76e..394ba103797c 100644 --- a/doc/html/variant.html +++ b/doc/html/variant.html @@ -7,10 +7,10 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/variant.html + http://www.boost.org/doc/libs/master/doc/html/variant.html diff --git a/doc/html/xpressive.html b/doc/html/xpressive.html index 70931e88ab10..fad8757902c8 100644 --- a/doc/html/xpressive.html +++ b/doc/html/xpressive.html @@ -7,11 +7,11 @@ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --> Redirect to generated documentation - + Automatic redirection failed, please go to - http://boost-sandbox.sourceforge.net/doc/html/xpressive.html + http://www.boost.org/doc/libs/master/doc/html/xpressive.html diff --git a/doc/pdf/Jamfile.v2 b/doc/pdf/Jamfile.v2 index 8ca87a691dd6..49eb5aa71e95 100644 --- a/doc/pdf/Jamfile.v2 +++ b/doc/pdf/Jamfile.v2 @@ -10,6 +10,12 @@ import common ; import doxygen ; import quickbook ; +project : requirements ../../libs/geometry/doc ; + + + + + boostbook array_docs : ../../libs/array/doc/array.xml @@ -29,55 +35,67 @@ install pdf-install : array_docs any_docs + ../../libs/align/doc//standalone + ../../libs/atomic/doc//standalone ../../libs/accumulators/doc//standalone ../../libs/algorithm/string/doc//string_algo + ../../libs/algorithm/doc//standalone ../../libs/bimap/doc//standalone ../../libs/bind/doc//ref-doc + ../../libs/chrono/doc//standalone ../../libs/concept_check/doc//concepts ../../libs/config/doc//standalone - ../../libs/date_time/xmldoc//date_time + ../../libs/context/doc//context + ../../libs/core/doc//standalone + ../../libs/date_time/xmldoc//date_time + ../../libs/dll/doc//dll-doc ../../libs/foreach/doc//standalone ../../libs/function/doc//function-doc - ../../libs/functional/factory/doc//standalone - ../../libs/functional/forward/doc//standalone - ../../libs/functional/hash/doc//standalone +# ../../libs/functional/overloaded_function/doc//doc ../../libs/fusion/doc//quickbook - ../../libs/interprocess/doc//standalone + #../../libs/geometry/doc//geometry + ../../libs/heap/doc//standalone + ../../libs/icl/doc//standalone ../../libs/integer/doc//standalone - ../../libs/intrusive/doc//standalone ../../libs/iterator/doc//standalone ../../libs/lambda/doc//lambda-doc + ../../libs/lockfree/doc//standalone + ../../libs/lexical_cast/doc//standalone +# ../../libs/local_function/doc//doc ../../libs/logic/doc//tribool - ../../libs/math/doc/complex//standalone - ../../libs/math/doc/octonion//standalone - ../../libs/math/doc/quaternion//standalone - ../../libs/math/doc/gcd//standalone - ../../libs/math/doc/sf_and_dist//standalone + ../../libs/move/doc//standalone ../../libs/mpi/doc//standalone ../../libs/numeric/conversion/doc//standalone +# ../../libs/numeric/odeint/doc//standalone ../../libs/optional/doc//standalone + ../../libs/phoenix/doc//phoenix-doc ../../libs/program_options/doc//program_option ../../libs/property_tree/doc//standalone ../../libs/proto/doc//standalone # Invalid Jamfile, doesn't use Boostbook anyway?? #../../libs/ptr_container/doc//standalone + ../../libs/ratio/doc//standalone + ../../libs/random/doc//standalone ../../libs/regex/doc//standalone - ../../libs/scope_exit/doc//standalone - ../../libs/signals/doc//doc - ../../libs/spirit/doc//spirit2 ../../libs/spirit/repository/doc//spirit2_repository ../../libs/static_assert/doc//standalone ../../libs/thread/doc//standalone ../../libs/tr1/doc//standalone - ../../libs/type_traits/doc//standalone + ../../libs/type_index/doc//standalone + ../../libs/type_traits/doc//pdfinstall ../../libs/typeof/doc//standalone ../../libs/units/doc//standalone +# ../../libs/utility/identity_type/doc//doc ../../libs/unordered/doc//standalone ../../libs/variant/doc//variant-doc ../../libs/xpressive/doc//standalone + ../../libs/utility/doc//standalone_base_from_member + ../../libs/utility/doc//standalone_compressed_pair + ../../libs/utility/doc//standalone_declval + ../../libs/utility/doc//standalone_string_ref ../../tools/boostbook/doc//boostbook - ../../tools/build/v2/doc//jam_docs + ../../tools/build/doc//jam_docs ../../tools/quickbook/doc//standalone ../../tools/bcp/doc//standalone : @@ -107,19 +125,9 @@ install asio-install asio.pdf ; -install phoenix-install - : - ../../libs/spirit/phoenix/doc//quickbook - : - . - PDF - pdf - phoenix.pdf - ; - install boost-build-install : - ../../tools/build/v2/doc//userman + ../../tools/build/doc//userman : . PDF @@ -151,15 +159,135 @@ install range-install # Just copy the MSM PDF over: install msm_install : ../../libs/msm/doc/pdf/msm.pdf : . ; +install spirit-install + : + ../../libs/spirit/doc//spirit2 + : + . + PDF + pdf + spirit2.pdf +; + +install scope_exit_install + : + ../../libs/scope_exit/doc//doc + : + . + PDF + pdf + scope_exit.pdf +; + +install math_install + : + ../../libs/math/doc//standalone + : + . + PDF + pdf + math.pdf +; + +install multiprecision_install + : + ../../libs/multiprecision/doc//standalone + : + . + PDF + pdf + multiprecision.pdf +; +install tti_install + : + ../../libs/tti/doc//standalone + : + . + PDF + pdf + TypeTraitsIntrospection.pdf +; +install circular_buffer_install + : + ../../libs/circular_buffer/doc//standalone + : + . + PDF + pdf + circular_buffer.pdf +; +install coroutine_install + : + ../../libs/coroutine/doc//coro + : + . + PDF + pdf + coroutine.pdf +; +install pool_install + : + ../../libs/pool/doc//standalone + : + . + PDF + pdf + pool.pdf +; +install multi_array_install + : + ../../libs/multi_array/doc/xml//multi_array-doc + : + . + PDF + pdf + multi_array.pdf +; +install factory_install + : + ../../libs/functional/factory/doc//standalone + : + . + PDF + pdf + functional_factory.pdf +; +install forward_install + : + ../../libs/functional/forward/doc//standalone + : + . + PDF + pdf + functional_forward.pdf +; +install hash_install + : + ../../libs/functional/hash/doc//standalone + : + . + PDF + pdf + functional_hash.pdf +; +install log_install + : + ../../libs/log/doc//log + : + . + PDF + pdf + log.pdf +; diff --git a/doc/pdf/build b/doc/pdf/build index c3aa9e3e506e..6f1c663807cf 100644 --- a/doc/pdf/build +++ b/doc/pdf/build @@ -1,11 +1,19 @@ -#!/bin/bash +#!/usr/bin/env bash boost_version=$(grep 'define.*BOOST_LIB_VERSION' ../../boost/version.hpp | sed 's/.*"\([^"]*\)".*/\1/') echo Boost version tag = $boost_version -bjam -a pdf xsl:param=fop1.extensions=0 xsl:param=xep.extensions=1 +(cd ../../libs/accumulators/doc && bjam -a --hash) 2>&1 | tee build.log +(cd ../../libs/container/doc && rm -rf *.pdf && bjam -a --hash pdfinstall xsl:param=fop1.extensions=1 && cp *.pdf ../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/interprocess/doc && rm -rf *.pdf && bjam -a --hash pdf pdfinstall xsl:param=fop1.extensions=1 && cp *.pdf ../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/intrusive/doc && rm -rf *.pdf && bjam -a --hash pdf pdfinstall xsl:param=fop1.extensions=1 && cp *.pdf ../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/functional/overloaded_function/doc && rm -rf *.pdf && bjam -a --hash pdf pdfinstall && cp *.pdf ../../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/local_function/doc && rm -rf *.pdf && bjam -a --hash pdf pdfinstall && cp *.pdf ../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/utility/identity_type/doc && rm -rf *.pdf && bjam -a --hash pdf pdf_doc_install && cp *.pdf ../../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/numeric/odeint/doc && rm -rf *.pdf && bjam -a --hash --enable-index pdf pdfinstall && cp *.pdf ../../../../doc/pdf) 2>&1 | tee -a build.log +(cd ../../libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk && bjam release) 2>&1 | tee -a build.log +cp ../../dist/bin/doxygen_xml2qbk* /usr/bin +chmod +wrx /usr/bin/doxygen_xml2qbk* +(cd ../../libs/geometry/doc && rm -rf *.pdf && ./make_qbk.py && bjam pdfinstall -a --hash xsl:param=fop1.extensions=1 xsl:param=xep.extensions=0 && cp *.pdf ../../../doc/pdf) 2>&1 | tee -a build.log +bjam -a --hash --enable-index pdf -d2 xsl:param=fop1.extensions=0 xsl:param=xep.extensions=1 2>&1 | tee -a build.log +rm -rf boost_${boost_version}_pdf mkdir boost_${boost_version}_pdf mv *.pdf boost_${boost_version}_pdf - - - - - diff --git a/doc/src/boost.xml b/doc/src/boost.xml index fb48be93c2ad..3a4e25c7e595 100644 --- a/doc/src/boost.xml +++ b/doc/src/boost.xml @@ -37,704 +37,21 @@ The Boost C++ Libraries (BoostBook Subset) - - - - - - - - - - Christopher - Kohlhoff - - - Portable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs - - - - - - - - Peter - Dimov - - Generalized binders for function/object/pointers and member functions - - - - - - - - Peter - Dimov - - Generalized binders for member functions - - - - - - - - John - Maddock - - - Howard - Hinnant - - Defines types for passing parameters - - - - - - - - - - Jan - Gaspar - - A STL compliant container also known as ring or cyclic buffer - - - - - - - - Ralf - Grosse-Kunstleve - - - Jens - Maurer - - Help for non-conforming standard libraries - - - - - - - - Nicolai - Josuttis - - - Functional composition adapters for the STL - - - - - - - - John - Maddock - - - Howard - Hinnant - - Empty member optimization - - - - - - - - - Jeremy - Siek - - Tools for generic programming - - - - Boost.Concept_Check - - - - - - - John - Maddock - - - Beman - Dawes - - - Vesa - Karvonen - - - Helps boost library developers adapt to compiler idiosyncrasies; not intended for library users - - - - - - - - Dave - Abrahams - - - Kevlin - Henney - - - Numeric, polymorphic, and lexical casts - - - - - - - - Daryle - Walker - - - Cyclic Redundancy Code - - - - - - - - - - Jeremy - Siek - - - Chuck - Allison - - A runtime sized version of std::bitset - - - - - - - - Samuel - Krempp - - - Type-safe 'printf-like' format operations - - - - - - - - - Beman - Dawes - - - Portable paths, iteration over directories, and other useful filesystem operations - - - - - - - - - - - - Mark - Rodgers - - Enhanced function object adaptors - - - - - - - - - - Jeremy - Siek - - - University of Notre Dame - Team - - Generic graph components and algorithms - - - - - - - - - - various - authors - - - Headers to ease dealing with integral types - - - - - - - - - - Guillaume - Melquiond - - - Hervé - Brönnimann - - - Sylvain - Pion - - - Extends the usual arithmetic functions to mathematical intervals - - - - - - - - - - Daryle - Walker - - - Save I/O state to prevent jumbled data - - - - - - - - Dave - Abrahams - - - Jeremy - Siek - - - John - Potter - - - Adapt a base type into a standard conforming iterator - - - - - - - - - - various - authors - - - Several contributions in the domain of mathematics - - - - - - - - Daryle - Walker - - - Greatest common divisor and least common multiple - - - - - - - - Hubert - Holin - - - Octonions - - - - - - - - Hubert - Holin - - - Quaternions - - - - - - - - Hubert - Holin - - - Mathematical special functions such as atanh, sinc, and sinhc - - - - - - - - Aleksey - Gurtovoy - - - Template metaprogramming framework of compile-time algorithms, sequences and metafunction classes - - - - - - - - Ron - Garcia - - - Multidimensional containers and adaptors for arrays of contiguous data - - - - - - - - - Dave - Abrahams - - - Jeremy - Siek - - - Templates ease arithmetic classes and iterators - - - - - - - - - - Fernando - Cacciola - - - Discriminated-union wrapper for optional values - - - - - - - - - - - Steve - Cleary - - - Memory pool management - - - - - - - - Vesa - Karvonen - - - Paul - Mensonides - - - Preprocessor metaprogramming tools including repetition and recursion - - - - - - - - - - Jeremy - Siek - - Concepts defining interfaces which map key objects to value objects - - - - - - - - - - - - - Dave - Abrahams - - Reflects C++ classes and functions into Python - - - - - - - - - - - - Paul - Moore - - A rational number class - - - - - - - - - - John - Maddock - - Regular expression library - - - - - - - - Robert - Ramey - - Serialization of C++ objects for persistence and marshalling - - - - - - - - - - - - Greg - Colvin - - - Beman - Dawes - - - Peter - Dimov - - - Darin - Adler - - Six smart pointer class templates - - - - - - - - Joel - de Guzman - - - team - - - LL parser framework represents parsers directly as EBNF grammars in inlined C++ - - - - - - - - - - - - - Gennadiy - Rozental - - Support for simple program testing, full unit testing, and for program execution monitoring - - - - - - - - - - Beman - Dawes - - Event timer, progress timer, and progress display classes - - - - - - - - John - Bandela - - Break of a string or other character sequence into a series of tokens - - - - - - - - - - - - Jaakko - Järvi - - Ease definition of functions returning multiple values, and more - - - - - - - - John - Maddock - - Meta-programming support library. - - - - - - - - - - Joerg - Walter - - - Mathias - Koch - - Basic linear algebra for dense, packed and sparse matrices - - - - - - - - - - - - Dave - Abrahams - - - others - - - Class noncopyable plus checked_delete, checked_array_delete, next, prior function templates, plus base-from-member idiom - - - - - - - - - + + + + + + Jeremy + Siek + + Tools for generic programming + + + + Boost.Concept_Check + + @@ -751,11 +68,6 @@ or for use with their own applications. - - - - + - - diff --git a/doc/src/boostbook.css b/doc/src/boostbook.css index c60e100318e6..283176577411 100644 --- a/doc/src/boostbook.css +++ b/doc/src/boostbook.css @@ -1,26 +1,32 @@ + /*============================================================================= - Copyright (c) 2004 Joel de Guzman - http://spirit.sourceforge.net/ +Copyright (c) 2004 Joel de Guzman +http://spirit.sourceforge.net/ + +Copyright 2013 Niall Douglas additions for colors and alignment. +Copyright 2013 Paul A. Bristow additions for more colors and alignments. +Copyright 2017 Tom Westerhout font fixes to support Sphinx - 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) +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 defaults =============================================================================*/ body { margin: 1em; + font-size: 16px; font-family: sans-serif; } /*============================================================================= - Paragraphs +Paragraphs =============================================================================*/ - p + p, div.document, div.footer { text-align: left; font-size: 10pt; @@ -28,7 +34,7 @@ } /*============================================================================= - Program listings +Program listings =============================================================================*/ /* Code on paragraphs */ @@ -44,6 +50,7 @@ padding: 0.5pc 0.5pc 0.5pc 0.5pc; } + div.highlight, .programlisting, .screen { @@ -58,11 +65,11 @@ td .screen { margin: 0pc 0pc 0pc 0pc; - padding: 0pc 0pc 0pc 0pc; + padding: 0pc 0pc 0pc 0pc; } /*============================================================================= - Headings +Headings =============================================================================*/ h1, h2, h3, h4, h5, h6 @@ -72,12 +79,12 @@ 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% } + h1 { font-size: 140%; } + h2 { font-weight: bold; font-size: 140%; } + h3 { font-weight: bold; font-size: 130%; } + h4 { font-weight: bold; font-size: 120%; } + h5 { font-weight: normal; font-style: italic; font-size: 110%; } + h6 { font-weight: normal; font-style: italic; font-size: 100%; } /* Top page titles */ title, @@ -116,13 +123,13 @@ h1 tt.computeroutput { font-size: 140% } h2 tt.computeroutput { font-size: 140% } h3 tt.computeroutput { font-size: 130% } - h4 tt.computeroutput { font-size: 130% } + h4 tt.computeroutput { font-size: 130% } h5 tt.computeroutput { font-size: 130% } h6 tt.computeroutput { font-size: 130% } /*============================================================================= - Author +Author =============================================================================*/ h3.author @@ -131,7 +138,7 @@ } /*============================================================================= - Lists +Lists =============================================================================*/ li @@ -153,7 +160,7 @@ } /*============================================================================= - Links +Links =============================================================================*/ a @@ -167,7 +174,7 @@ } /*============================================================================= - Spirit style navigation +Spirit style navigation =============================================================================*/ .spirit-nav @@ -187,7 +194,7 @@ } /*============================================================================= - Copyright footer +Copyright footer =============================================================================*/ .copyright-footer { @@ -202,10 +209,10 @@ } /*============================================================================= - Table of contents +Table of contents =============================================================================*/ - .toc + div.toc { margin: 1pc 4% 0pc 4%; padding: 0.1pc 1pc 0.1pc 1pc; @@ -218,12 +225,16 @@ float: right; padding: 0.5pc; } - + /* Code on toc */ .toc .computeroutput { font-size: 120% } - + + /* No margin on nested menus */ + + .toc dl dl { margin: 0; } + /*============================================================================= - Tables +Tables =============================================================================*/ .table-title, @@ -282,7 +293,23 @@ } /*============================================================================= - Blurbs +Suppress margins in tables +=============================================================================*/ + + table th > *:first-child, + table td > *:first-child + { + margin-top: 0; + } + + table th > *:last-child, + table td > *:last-child + { + margin-bottom: 0; + } + +/*============================================================================= +Blurbs =============================================================================*/ div.note, @@ -290,6 +317,7 @@ div.important, div.caution, div.warning, + div.blurb, p.blurb { font-size: 9pt; /* A little bit smaller than the main text */ @@ -299,13 +327,14 @@ padding: 0.5pc 0.5pc 0.5pc 0.5pc; } + div.blurb img, p.blurb img { padding: 1pt; } /*============================================================================= - Variable Lists +Variable Lists =============================================================================*/ div.variablelist @@ -350,7 +379,7 @@ } /*============================================================================= - Misc +Misc =============================================================================*/ /* Title of books and articles in bibliographies */ @@ -376,7 +405,7 @@ } /*============================================================================= - Colors +Colors =============================================================================*/ @media screen @@ -387,16 +416,81 @@ } /* 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; } + .property, + .highlight .k, + .highlight .kc, + .highlight .kd, + .highlight .kn, + .highlight .kp, + .highlight .kr, + .highlight .kt, + .keyword { color: #0000AA; } + + .highlight .n, + .highlight .na, + .highlight .nb, + .highlight .bp, + .highlight .nc, + .highlight .no, + .highlight .nd, + .highlight .ni, + .highlight .ne, + .highlight .nf, + .highlight .py, + .highlight .nl, + .highlight .nn, + .highlight .nx, + .highlight .nt, + .highlight .nv, + .highlight .vc, + .highlight .vg, + .highlight .vi, + .identifier { color: #000000; } + + .special { color: #707070; } + + .highlight .cp, + .preprocessor { color: #402080; } + + .highlight .sc + .char { color: teal; } + + .highlight .c, + .highlight .ch, + .highlight .cm, + .highlight .cp, + .highlight .cpf, + .highlight .c1, + .highlight .cs, + .highlight .sd, + .highlight .sh, + .comment { color: #800000; } + + .highlight .s, + .highlight .sa, + .highlight .sb, + .highlight .dl, + .highlight .s2, + .highlight .se, + .highlight .si, + .highlight .sx, + .highlight .sr, + .highlight .s1, + .highlight .ss, + .string { color: teal; } + + .highlight .m, + .highlight .mf, + .highlight .mh, + .highlight .mi, + .highlight .mo, + .number { color: teal; } + + .highlight, + .white_bkd { background-color: #FFFFFF; } + + .highlight .hll, + .dk_grey_bkd { background-color: #999999; } /* Links */ a, a .keyword, a .identifier, a .special, a .preprocessor @@ -438,6 +532,7 @@ border: 1px solid #DCDCDC; } + div.highlight, .programlisting, .screen { @@ -456,13 +551,14 @@ div.important, div.caution, div.warning, + div.blurb, p.blurb { border: 1px solid #DCDCDC; } /* Table of contents */ - .toc + div.toc { border: 1px solid #DCDCDC; } @@ -517,6 +613,7 @@ border: 1px solid gray; } + div.highlight, .programlisting, .screen { @@ -530,7 +627,7 @@ } /* Table of contents */ - .toc + div.toc { border: 1px solid gray; } @@ -568,7 +665,7 @@ } /*============================================================================= - Images +Images =============================================================================*/ span.inlinemediaobject img @@ -577,25 +674,116 @@ } /*============================================================================== - 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 +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; - +height: 0; +line-height: 1; +vertical-align: baseline; +position: relative; + +} + +/* For internet explorer: */ + +* html sup, +* html sub { +vertical-align: bottom; } sup { - bottom: 1ex; +bottom: 1ex; } sub { - top: .5ex; +top: .5ex; +} + +/*============================================================================== +Indexes: pretty much the same as the TOC. +==============================================================================*/ + + .index + { + font-size: 80%; + padding-top: 0px; + padding-bottom: 0px; + margin-top: 0px; + margin-bottom: 0px; + margin-left: 0px; + } + + .index ul + { + padding-left: 3em; + } + + .index p + { + padding: 2px; + margin: 2px; + } + + .index-entry-level-0 + { + font-weight: bold; + } + + .index em + { + font-weight: bold; + } + + +/*============================================================================== +Alignment and coloring use 'role' feature, available from Quickbook 1.6 up. +Added from Niall Douglas for role color and alignment. +http://article.gmane.org/gmane.comp.lib.boost.devel/243318 +*/ + +/* Add text alignment (see http://www.w3schools.com/cssref/pr_text_text-align.asp) */ +span.aligncenter +{ + display: inline-block; width: 100%; text-align: center; +} +span.alignright +{ + display: inline-block; width: 100%; text-align: right; +} +/* alignleft is the default. */ +span.alignleft +{ + display: inline-block; width: 100%; text-align: left; +} + +/* alignjustify stretches the word spacing so that each line has equal width +within a chosen fraction of page width (here arbitrarily 20%). +*Not* useful inside table items as the column width remains the total string width. +Nor very useful, except to temporarily restrict the width. +*/ +span.alignjustify +{ + display: inline-block; width: 20%; text-align: justify; } +/* Text colors. +Names at http://www.w3.org/TR/2002/WD-css3-color-20020219/ 4.3. X11 color keywords. +Quickbook Usage: [role red Some red text] + +*/ +span.red { inline-block; color: red; } +span.green { color: green; } +span.lime { color: #00FF00; } +span.blue { color: blue; } +span.navy { color: navy; } +span.yellow { color: yellow; } +span.magenta { color: magenta; } +span.indigo { color: #4B0082; } +span.cyan { color: cyan; } +span.purple { color: purple; } +span.gold { color: gold; } +span.silver { color: silver; } /* lighter gray */ +span.gray { color: #808080; } /* light gray */ diff --git a/doc/src/minimal.css b/doc/src/minimal.css index 2e5812a9b8e9..60c62422afb2 100644 --- a/doc/src/minimal.css +++ b/doc/src/minimal.css @@ -1,29 +1,23 @@ /* - � Copyright Beman Dawes, 2007 + Copyright (c) 2007 Beman Dawes 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; + max-width : 8.5in; + } -body { font-family: sans-serif; margin: 1em; } +table { margin: 0.5em; } -/******************************************************************************* - Table -*******************************************************************************/ +pre { background-color:#D7EEFF } -table { margin: 0.5em; } - -/******************************************************************************* - Font sizes -*******************************************************************************/ - -p, td, li, blockquote { font-size: 10pt; } -pre { font-size: 9pt; } +ins { background-color:#A0FFA0 } +del { background-color:#FFA0A0 } /*** end ***/ \ No newline at end of file diff --git a/doc/test/HTML4_symbols.qbk b/doc/test/HTML4_symbols.qbk index 2af7241ff2ee..b78f7ee0d886 100644 --- a/doc/test/HTML4_symbols.qbk +++ b/doc/test/HTML4_symbols.qbk @@ -11,7 +11,7 @@ http://www.boost.org/LICENSE_1_0.txt). [/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html] [/ All (except 2 angle brackets) show OK on Firefox 2.0] -[/ Also some miscellaneous math charaters added to this list - see the end.] +[/ Also some miscellaneous math characters added to this list - see the end.] [/ To use, enclose the template name in square brackets.] @@ -99,7 +99,7 @@ http://www.boost.org/LICENSE_1_0.txt). [template notin[]'''∉'''] [/ ? not an element of] [template ni[]'''∋'''] [/ ? contains as member] [template prod[]'''∏'''] [/ ? n-ary product = product sign] -[template sum[]'''∑'''] [/ ? n-ary sumation] +[template sum[]'''∑'''] [/ ? n-ary summation] [template minus[]'''−'''] [/ - minus sign] [template lowast[]'''∗'''] [/ * asterisk operator] [template radic[]'''√'''] [/ v square root = radical sign] diff --git a/doc/test/Jamfile.v2 b/doc/test/Jamfile.v2 index 7d55b74e4932..5ccd5ef9165c 100644 --- a/doc/test/Jamfile.v2 +++ b/doc/test/Jamfile.v2 @@ -186,6 +186,8 @@ boostbook standalone chunk.section.depth=1 boost.root=../../.. navig.graphics=1 + boost.mathjax=1 + $(images_location)/.. # PDF Options: @@ -201,7 +203,5 @@ boostbook standalone ; -install pdf-install : standalone : . PDF ; - - - +install pdfinstall : standalone/pdf : . PDF ; +explicit pdfinstall ; diff --git a/doc/test/array.xml b/doc/test/array.xml index ce3f57e02905..3cf8e1759955 100644 --- a/doc/test/array.xml +++ b/doc/test/array.xml @@ -36,7 +36,7 @@ Note that this class is suggested to be part of the next Technical Report, which will extend the C++ Standard (see - http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm). + http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm). Class array fulfills most but not all of the requirements of "reversible containers" (see diff --git a/doc/test/gold/document_to_test_formatting/array.html b/doc/test/gold/document_to_test_formatting/array.html index b49a79825f8d..ff7f5eba3b6d 100644 --- a/doc/test/gold/document_to_test_formatting/array.html +++ b/doc/test/gold/document_to_test_formatting/array.html @@ -63,7 +63,7 @@ class simply array.

Note that this class is suggested to be part of the next Technical Report, which will extend the C++ Standard (see - http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm).

+ http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm).

Class array fulfills most but not all of the requirements of "reversible containers" (see Section 23.1, [lib.container.requirements] of the C++ diff --git a/doc/test/gold/document_to_test_formatting/images.html b/doc/test/gold/document_to_test_formatting/images.html index 8303d68f6030..88e72913d99e 100644 --- a/doc/test/gold/document_to_test_formatting/images.html +++ b/doc/test/gold/document_to_test_formatting/images.html @@ -27,7 +27,7 @@ Images

- These are tricky enough that they warrent their own section. + These are tricky enough that they warrant their own section.

Let's start with a PNG file that's set to 120dpi, it should render at a sensible diff --git a/doc/test/gold/document_to_test_formatting/remez.html b/doc/test/gold/document_to_test_formatting/remez.html index e8b89f19691d..2086d6b273fa 100644 --- a/doc/test/gold/document_to_test_formatting/remez.html +++ b/doc/test/gold/document_to_test_formatting/remez.html @@ -221,7 +221,7 @@

In single point exchange, we move the control point nearest to the largest - extrema to the absissa value of the extrema. + extrema to the abscissa value of the extrema.

In multi-point exchange we swap all the current control points, for the locations @@ -450,7 +450,7 @@ and then re-minimise.

  • - Keep absissa values small: use a change of variable to keep the abscissa + Keep abscissa values small: use a change of variable to keep the abscissa over, say [0, b], for some smallish value b.
  • diff --git a/doc/test/gold/index.html b/doc/test/gold/index.html index 19d2738ad925..6483969eee7b 100644 --- a/doc/test/gold/index.html +++ b/doc/test/gold/index.html @@ -137,7 +137,7 @@ We can count in Greek too: α, β, γ.

    - Try some superscrips and subscripts: x2, xi3, α2, βα, ⌊x⌋, ⌊α⌋, ⌈a⌉. + Try some superscripts and subscripts: x2, xi3, α2, βα, ⌊x⌋, ⌊α⌋, ⌈a⌉.

    diff --git a/doc/test/remez.qbk b/doc/test/remez.qbk index 3a72b12da2fc..b1e125051d9c 100644 --- a/doc/test/remez.qbk +++ b/doc/test/remez.qbk @@ -142,7 +142,7 @@ The N+2 extrema can then be found using standard function minimisation technique We now have a choice: multi-point exchange, or single point exchange. In single point exchange, we move the control point nearest to the largest extrema to -the absissa value of the extrema. +the abscissa value of the extrema. In multi-point exchange we swap all the current control points, for the locations of the extrema. @@ -317,7 +317,7 @@ retaining the last set of control points at each stage. * Try using a smaller interval. It may also be possible to optimise over one (small) interval, rescale the control points over a larger interval, and then re-minimise. -* Keep absissa values small: use a change of variable to keep the abscissa +* Keep abscissa values small: use a change of variable to keep the abscissa over, say \[0, b\], for some smallish value /b/. [h4 References] diff --git a/doc/test/test.mml b/doc/test/test.mml new file mode 100644 index 000000000000..e31630b93b3e --- /dev/null +++ b/doc/test/test.mml @@ -0,0 +1,30 @@ + + + asinh + + + x + + + + x + + + + + x + 3 + + + 6 + + + ; + + x + < + + ε + + + diff --git a/doc/test/test.png b/doc/test/test.png new file mode 100644 index 000000000000..3d2d41ae02ee Binary files /dev/null and b/doc/test/test.png differ diff --git a/doc/test/test.qbk b/doc/test/test.qbk index 889d4147587e..9d40e4978868 100644 --- a/doc/test/test.qbk +++ b/doc/test/test.qbk @@ -35,7 +35,7 @@ This is some body text. We can count in Greek too: [alpha], [beta], [gamma]. -Try some superscrips and subscripts: x[super 2], x[sub i][super 3], [alpha][super 2], +Try some superscripts and subscripts: x[super 2], x[sub i][super 3], [alpha][super 2], [beta][super [alpha]], [floor x], [floor [alpha]], [ceil a]. [endsect] @@ -592,7 +592,7 @@ ibeta_inva, and ibeta_invb respectively.]] [section Images] -These are tricky enough that they warrent their own section. +These are tricky enough that they warrant their own section. Let's start with a PNG file that's set to 120dpi, it should render at a sensible size in both html and PDF forms. It should print OK too! @@ -604,6 +604,26 @@ Now try again with a sample SVG image: [$images/open_clipart_library_logo.svg] +[endsect] + +[section Equations] + +This page is largely to test equation handling in various browsers, unfortunately none of this works as well as it should (or at all?) +in Internet Explorer.... + +This equation is formatted from Latex text: + +'''ax^2 + bx + c = 0''' + +This equation is formed from MathML: + +'''''' + +This equation is SVG: + +'''''' + + [endsect] [include test_HTML4_symbols.qbk] diff --git a/doc/test/test.svg b/doc/test/test.svg new file mode 100644 index 000000000000..bfc3cc11933e --- /dev/null +++ b/doc/test/test.svg @@ -0,0 +1,2 @@ + +asinh(x)xx36;x<ε \ No newline at end of file diff --git a/doc/test/test_HTML4_symbols.qbk b/doc/test/test_HTML4_symbols.qbk index 9dc271ee1f90..be401b3a5f3d 100644 --- a/doc/test/test_HTML4_symbols.qbk +++ b/doc/test/test_HTML4_symbols.qbk @@ -2,7 +2,7 @@ [/ Examples of using all the Greek and Math symbols defined in HTML4_symbols.qbk] [/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html] -[/ Also some miscellaneous math charaters added to this list - see the end.] +[/ Also some miscellaneous math characters added to this list - see the end.] [/ To use, enclose the template name in square brackets.] diff --git a/index.html b/index.html index 1fe9286f4b60..4192a7d92d6c 100644 --- a/index.html +++ b/index.html @@ -12,9 +12,12 @@ - boost.png (6897 bytes) + boost.png (6897 bytes) -

    Release 1.46.1

    +

    + {{#is_develop}}Development Snapshot{{/is_develop}} + {{^is_develop}}Release {{version}}{{/is_develop}} +

    @@ -55,11 +58,21 @@

    Welcome to the Boost C++ Libraries

    Changes in this release

    -

    This is a bug fix release addressing problems with the 1.46.0 release. - 1.46.0 included 1 new library - (Interval Container Library) - as well as updates to many existing libraries. See - Release + {{#unreleased_lib_count}} +

    + {{#is_develop}}This development snapshot{{/is_develop}} + {{^is_develop}}Boost {{minor_release}}{{/is_develop}} + includes {{unreleased_lib_count}} new + {{#unreleased_library_plural}}libraries{{/unreleased_library_plural}} + {{^unreleased_library_plural}}library{{/unreleased_library_plural}} + ({{#unreleased_libs}}{{#index}}, {{/index}}{{name}}{{/unreleased_libs}}) + as well as updates to many existing libraries. + {{/unreleased_lib_count}} + {{^unreleased_lib_count}} +

    The release includes updates to many existing libraries. + {{/unreleased_lib_count}} + See + Release History for more information.

    Getting Started

    @@ -119,4 +132,4 @@

    Community

    Initiative.

    - \ No newline at end of file + diff --git a/libs/Jamfile.v2 b/libs/Jamfile.v2 new file mode 100644 index 000000000000..b0d40658043c --- /dev/null +++ b/libs/Jamfile.v2 @@ -0,0 +1,15 @@ +# Jamfile.v2 +# +# Copyright (C) 2013 Bjorn Roald +# +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt +# +# Boost libraries common project properties: +# +# Under modularized layout, ensure all inheriting projects get +# implicit dependency to headers staged as links in /boost + +project boost/libs + : requirements /boost//headers + ; diff --git a/libs/accumulators b/libs/accumulators index 8c45f6a12b79..9d9e5dae2202 160000 --- a/libs/accumulators +++ b/libs/accumulators @@ -1 +1 @@ -Subproject commit 8c45f6a12b79aaf740ad7ba9901ca57779f6c065 +Subproject commit 9d9e5dae2202660f57e2dc91efb620aa001525b3 diff --git a/libs/algorithm b/libs/algorithm index caea7bd12590..faac048d5994 160000 --- a/libs/algorithm +++ b/libs/algorithm @@ -1 +1 @@ -Subproject commit caea7bd1259030c16bce152c9f56dd1732ef8244 +Subproject commit faac048d59948b1990c0a8772a050d8e47279343 diff --git a/libs/align b/libs/align new file mode 160000 index 000000000000..5ad7df63cd79 --- /dev/null +++ b/libs/align @@ -0,0 +1 @@ +Subproject commit 5ad7df63cd792fbdb801d600b93cad1a432f0151 diff --git a/libs/any b/libs/any index 23b025589ce9..f104bceb3290 160000 --- a/libs/any +++ b/libs/any @@ -1 +1 @@ -Subproject commit 23b025589ce9f98bd08f42a663e99a32d7ca7967 +Subproject commit f104bceb329021b2018db317521637fe4a7c3aee diff --git a/libs/array b/libs/array index 111e93aa4cdb..ecc47cb42c98 160000 --- a/libs/array +++ b/libs/array @@ -1 +1 @@ -Subproject commit 111e93aa4cdb5e75443af1591fe11550b3560e1d +Subproject commit ecc47cb42c98261d6abf39fb5575c38eac6db748 diff --git a/libs/asio b/libs/asio index d5ec01e6cc83..28ff1e7c2b44 160000 --- a/libs/asio +++ b/libs/asio @@ -1 +1 @@ -Subproject commit d5ec01e6cc83f0edd98c2a0b2418e48090c0683f +Subproject commit 28ff1e7c2b44f141eb809abaf2d76c95f38350ca diff --git a/libs/assert b/libs/assert new file mode 160000 index 000000000000..02256c84fd0c --- /dev/null +++ b/libs/assert @@ -0,0 +1 @@ +Subproject commit 02256c84fd0cd58a139d9dc1b25b5019ca976ada diff --git a/libs/assign b/libs/assign index a06e83923620..ababd47970e8 160000 --- a/libs/assign +++ b/libs/assign @@ -1 +1 @@ -Subproject commit a06e8392362045d03081fc4535300aa3b2d0f25d +Subproject commit ababd47970e8a5fa1bebc8ccad526c4f25bd867a diff --git a/libs/atomic b/libs/atomic index 88da98e37b95..65c51f5bf5a9 160000 --- a/libs/atomic +++ b/libs/atomic @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 65c51f5bf5a9b0c2f0f9f3f9a725ce35273e086a diff --git a/libs/beast b/libs/beast new file mode 160000 index 000000000000..45d4f7f30640 --- /dev/null +++ b/libs/beast @@ -0,0 +1 @@ +Subproject commit 45d4f7f30640e3d10503abdcd53828aa9ab81bb5 diff --git a/libs/bimap b/libs/bimap index 25b5f1917142..e5c2657a9e2d 160000 --- a/libs/bimap +++ b/libs/bimap @@ -1 +1 @@ -Subproject commit 25b5f19171425f92e9ac145d336389afc17bdc0c +Subproject commit e5c2657a9e2d6184622ad4ccd1373e6c60a7efca diff --git a/libs/bind b/libs/bind index 27003baf129d..55d037093bc7 160000 --- a/libs/bind +++ b/libs/bind @@ -1 +1 @@ -Subproject commit 27003baf129d86edfead0371d7f615070be51dd4 +Subproject commit 55d037093bc715d3cf5682f6f84c3dc3456a3b97 diff --git a/libs/callable_traits b/libs/callable_traits new file mode 160000 index 000000000000..2a56a3a2496c --- /dev/null +++ b/libs/callable_traits @@ -0,0 +1 @@ +Subproject commit 2a56a3a2496cdb66496f844db55085dd992d5e49 diff --git a/libs/chrono b/libs/chrono index a9ce738e55e2..8551ec1c5373 160000 --- a/libs/chrono +++ b/libs/chrono @@ -1 +1 @@ -Subproject commit a9ce738e55e29dba7eaccee5d12298c25d5751d2 +Subproject commit 8551ec1c5373621e5228a06cf0aacbb5c261560f diff --git a/libs/circular_buffer b/libs/circular_buffer index fb8503278344..05a83223e449 160000 --- a/libs/circular_buffer +++ b/libs/circular_buffer @@ -1 +1 @@ -Subproject commit fb8503278344a246b4cfe01b0a98db75a46559bb +Subproject commit 05a83223e4494edd86d099b672eba4367b45677b diff --git a/libs/compat b/libs/compat new file mode 160000 index 000000000000..0008d02a6211 --- /dev/null +++ b/libs/compat @@ -0,0 +1 @@ +Subproject commit 0008d02a6211fb598b8f76c4edc92b949150fae4 diff --git a/libs/compatibility b/libs/compatibility index 3e0da6395d7a..d0caac5c346f 160000 --- a/libs/compatibility +++ b/libs/compatibility @@ -1 +1 @@ -Subproject commit 3e0da6395d7afd381e0376baf016ab862266ad46 +Subproject commit d0caac5c346f7e24b4f8ec1e55110119492b64bd diff --git a/libs/compose b/libs/compose deleted file mode 160000 index d5be6d029fd3..000000000000 --- a/libs/compose +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d5be6d029fd3c98c0ec300502b25d9773e32495f diff --git a/libs/compute b/libs/compute new file mode 160000 index 000000000000..4cf065340259 --- /dev/null +++ b/libs/compute @@ -0,0 +1 @@ +Subproject commit 4cf06534025999560c909a9a0e60f7ac1f8c5a5c diff --git a/libs/concept_check b/libs/concept_check index 15afb20c8455..37c9bddf0bde 160000 --- a/libs/concept_check +++ b/libs/concept_check @@ -1 +1 @@ -Subproject commit 15afb20c84551613f75f5cf4bfa6519311bb72f9 +Subproject commit 37c9bddf0bdefaaae0ca5852c1a153d9fc43f278 diff --git a/libs/config b/libs/config index 4f8c31987152..29c39d45858d 160000 --- a/libs/config +++ b/libs/config @@ -1 +1 @@ -Subproject commit 4f8c31987152dede8e3e5ea7843d0ef727211755 +Subproject commit 29c39d45858d40bee86bd3b58ca14499663f08b5 diff --git a/libs/container b/libs/container index 88da98e37b95..b8b089730ad7 160000 --- a/libs/container +++ b/libs/container @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit b8b089730ad7a9cd4a97f5796827177475462d0c diff --git a/libs/container_hash b/libs/container_hash new file mode 160000 index 000000000000..226eb066e949 --- /dev/null +++ b/libs/container_hash @@ -0,0 +1 @@ +Subproject commit 226eb066e949adbf37b220e993d64ecefeeaae99 diff --git a/libs/context b/libs/context index 88da98e37b95..033ea195111b 160000 --- a/libs/context +++ b/libs/context @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 033ea195111bf278a7b79325260552b4f1d4e3fa diff --git a/libs/contract b/libs/contract new file mode 160000 index 000000000000..eca93d24b5d3 --- /dev/null +++ b/libs/contract @@ -0,0 +1 @@ +Subproject commit eca93d24b5d3bb909ed64c12b5feb5296c5cc070 diff --git a/libs/conversion b/libs/conversion index c28efea0b3db..5cf5f78376c8 160000 --- a/libs/conversion +++ b/libs/conversion @@ -1 +1 @@ -Subproject commit c28efea0b3dba58b100e41bec54a4ca005a81306 +Subproject commit 5cf5f78376c8562c168e322ba64b5a94c1f29a6c diff --git a/libs/convert b/libs/convert new file mode 160000 index 000000000000..1179fbd5689b --- /dev/null +++ b/libs/convert @@ -0,0 +1 @@ +Subproject commit 1179fbd5689b3146d3a41239516790fc38c70eac diff --git a/libs/core b/libs/core new file mode 160000 index 000000000000..5f6fe65eb227 --- /dev/null +++ b/libs/core @@ -0,0 +1 @@ +Subproject commit 5f6fe65eb227375888f7305c73767600ab7f1cf2 diff --git a/libs/coroutine b/libs/coroutine index 88da98e37b95..1e1347c0b191 160000 --- a/libs/coroutine +++ b/libs/coroutine @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 1e1347c0b1910b9310ec1719edad8b0bf2fd03c8 diff --git a/libs/coroutine2 b/libs/coroutine2 new file mode 160000 index 000000000000..d7e1c1c4abcf --- /dev/null +++ b/libs/coroutine2 @@ -0,0 +1 @@ +Subproject commit d7e1c1c4abcf8c1e90097279e485edea0b253a80 diff --git a/libs/crc b/libs/crc index e916db4b0803..e3b1e56890a7 160000 --- a/libs/crc +++ b/libs/crc @@ -1 +1 @@ -Subproject commit e916db4b0803492f78dd7902dbf4b57232ca7bfa +Subproject commit e3b1e56890a701ded5e66929579fb7fa62ac6bcc diff --git a/libs/date_time b/libs/date_time index 5c9a8909724f..39714907b7d3 160000 --- a/libs/date_time +++ b/libs/date_time @@ -1 +1 @@ -Subproject commit 5c9a8909724fa5794db3b321ec2fbf96c147fa98 +Subproject commit 39714907b7d32ed8f005b5a01d1c2b885b5717b3 diff --git a/libs/describe b/libs/describe new file mode 160000 index 000000000000..c89e4dd3db81 --- /dev/null +++ b/libs/describe @@ -0,0 +1 @@ +Subproject commit c89e4dd3db81eb4f2867b2bc965d161f51cc316c diff --git a/libs/detail b/libs/detail index c42fd431af2f..b75c26149286 160000 --- a/libs/detail +++ b/libs/detail @@ -1 +1 @@ -Subproject commit c42fd431af2fe78550e060d5287642b82050f822 +Subproject commit b75c261492862448cdc5e1c0d5900203497122d6 diff --git a/libs/disjoint_sets b/libs/disjoint_sets deleted file mode 160000 index 34939ce5b0d1..000000000000 --- a/libs/disjoint_sets +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 34939ce5b0d1f7eab2fa8b6af667db4dc83d6f0b diff --git a/libs/dll b/libs/dll new file mode 160000 index 000000000000..15574811de5a --- /dev/null +++ b/libs/dll @@ -0,0 +1 @@ +Subproject commit 15574811de5ac224483bd6d586fc4f6a2e95f074 diff --git a/libs/dynamic_bitset b/libs/dynamic_bitset index 734861bdac7f..8e20aa1462bf 160000 --- a/libs/dynamic_bitset +++ b/libs/dynamic_bitset @@ -1 +1 @@ -Subproject commit 734861bdac7f0629d9a44ab26d8d46f26dbff643 +Subproject commit 8e20aa1462bf6dcadc338835df529a6d568431b1 diff --git a/libs/endian b/libs/endian new file mode 160000 index 000000000000..56bd7c23aeaf --- /dev/null +++ b/libs/endian @@ -0,0 +1 @@ +Subproject commit 56bd7c23aeafe6410b73d2ca69684611eb69eec2 diff --git a/libs/exception b/libs/exception index a74d041bd533..fe23c01a9375 160000 --- a/libs/exception +++ b/libs/exception @@ -1 +1 @@ -Subproject commit a74d041bd5338f970406eb4fe8aeea6b6e65340a +Subproject commit fe23c01a93757117916e6b8dd393ab2ecabf16bc diff --git a/libs/fiber b/libs/fiber new file mode 160000 index 000000000000..2e3594c8fb7c --- /dev/null +++ b/libs/fiber @@ -0,0 +1 @@ +Subproject commit 2e3594c8fb7cf1659a82ca9b1915118997a41690 diff --git a/libs/filesystem b/libs/filesystem index d776d3985fcf..78a6c4a6ba0e 160000 --- a/libs/filesystem +++ b/libs/filesystem @@ -1 +1 @@ -Subproject commit d776d3985fcf76572375bb0a885f250d014b6ea1 +Subproject commit 78a6c4a6ba0e6c7711605291dccc5389b49ea3b0 diff --git a/libs/flyweight b/libs/flyweight index 3fc47562317a..e9f3a0a005ec 160000 --- a/libs/flyweight +++ b/libs/flyweight @@ -1 +1 @@ -Subproject commit 3fc47562317aaae04501c400bc40a0ca80cb0616 +Subproject commit e9f3a0a005eca8baa377f13423107b35985d9119 diff --git a/libs/foreach b/libs/foreach index 33bda938b0ac..cc2f75ae3049 160000 --- a/libs/foreach +++ b/libs/foreach @@ -1 +1 @@ -Subproject commit 33bda938b0ac27ee8afe4f3b1a31e07f32296aee +Subproject commit cc2f75ae30492b9de69b3b692f5c59afcb7dea5e diff --git a/libs/format b/libs/format index 7907ce81f437..78ef371d2d90 160000 --- a/libs/format +++ b/libs/format @@ -1 +1 @@ -Subproject commit 7907ce81f437644490148db9e748ceb44e2e41b4 +Subproject commit 78ef371d2d90462671b90c3af407fae07820b193 diff --git a/libs/function b/libs/function index 8cde82a56863..7ca2310b15e3 160000 --- a/libs/function +++ b/libs/function @@ -1 +1 @@ -Subproject commit 8cde82a568634dd47bf685d4529e19cb8eaee974 +Subproject commit 7ca2310b15e387258e97e4cd16887f5ee4906b28 diff --git a/libs/function_types b/libs/function_types index c73823068f32..895335874d67 160000 --- a/libs/function_types +++ b/libs/function_types @@ -1 +1 @@ -Subproject commit c73823068f326beceaa9a88f032a8eb701bb5855 +Subproject commit 895335874d67987ada0d8bf6ca1725e70642ed49 diff --git a/libs/functional b/libs/functional index 048d92f36a18..6a573e4b8333 160000 --- a/libs/functional +++ b/libs/functional @@ -1 +1 @@ -Subproject commit 048d92f36a18774519d3db91ff69d8361057b92e +Subproject commit 6a573e4b8333ee63ee62ce95558c3667348db233 diff --git a/libs/fusion b/libs/fusion index 1efa444f2431..7d4c03fa0322 160000 --- a/libs/fusion +++ b/libs/fusion @@ -1 +1 @@ -Subproject commit 1efa444f24314daa4f54b56fdd55bf71ac0addab +Subproject commit 7d4c03fa032299f2d46149b7b3136c9fd43e4f81 diff --git a/libs/geometry b/libs/geometry index 8c9c643f9310..3f5c044abcc8 160000 --- a/libs/geometry +++ b/libs/geometry @@ -1 +1 @@ -Subproject commit 8c9c643f93102c03371bc99b832748a6abbdce0f +Subproject commit 3f5c044abcc813a36d6af83465a9c086f9728a2f diff --git a/libs/gil b/libs/gil index b3ad20c906af..eabd679f632b 160000 --- a/libs/gil +++ b/libs/gil @@ -1 +1 @@ -Subproject commit b3ad20c906af0c121a5bb46caac723f326f8bc50 +Subproject commit eabd679f632be3170d98145fcc3b49e85df7cc4b diff --git a/libs/graph b/libs/graph index 516c833574e1..f3158683b598 160000 --- a/libs/graph +++ b/libs/graph @@ -1 +1 @@ -Subproject commit 516c833574e10e924ca3874616a595721dca30a5 +Subproject commit f3158683b598c32ddcd99c143543d482d4c97e91 diff --git a/libs/graph_parallel b/libs/graph_parallel index 11e660b6156b..5520a5617d27 160000 --- a/libs/graph_parallel +++ b/libs/graph_parallel @@ -1 +1 @@ -Subproject commit 11e660b6156bf35c37d1175871ac695afb9df12f +Subproject commit 5520a5617d2763c48a06a4ff277ad76e665c7cf3 diff --git a/libs/hana b/libs/hana new file mode 160000 index 000000000000..5dcac0f20fe6 --- /dev/null +++ b/libs/hana @@ -0,0 +1 @@ +Subproject commit 5dcac0f20fe6c03e615749fbf3b51e38333cbfe1 diff --git a/libs/headers b/libs/headers new file mode 160000 index 000000000000..0456900fadde --- /dev/null +++ b/libs/headers @@ -0,0 +1 @@ +Subproject commit 0456900fadde4b07c84760eadea4ccc9f948fe28 diff --git a/libs/heap b/libs/heap index 88da98e37b95..dc2f19f8815c 160000 --- a/libs/heap +++ b/libs/heap @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit dc2f19f8815cbe0654df61bfc5f31ad8b06fc883 diff --git a/libs/histogram b/libs/histogram new file mode 160000 index 000000000000..a29729e66826 --- /dev/null +++ b/libs/histogram @@ -0,0 +1 @@ +Subproject commit a29729e6682652800b06dc8aded29bbeb4acea61 diff --git a/libs/hof b/libs/hof new file mode 160000 index 000000000000..814f2be28631 --- /dev/null +++ b/libs/hof @@ -0,0 +1 @@ +Subproject commit 814f2be28631f386793feb62ec06788cf5b3c711 diff --git a/libs/icl b/libs/icl index e157d8e4a9f6..b2db8e5997f6 160000 --- a/libs/icl +++ b/libs/icl @@ -1 +1 @@ -Subproject commit e157d8e4a9f613517528121709a524f2ea5dc8a6 +Subproject commit b2db8e5997f602caa2b6d4bc58d84a04f9de2d3f diff --git a/libs/integer b/libs/integer index 8457bd01b152..becbd39cc48c 160000 --- a/libs/integer +++ b/libs/integer @@ -1 +1 @@ -Subproject commit 8457bd01b152c7f6cdc89e89cc884663c86c5fab +Subproject commit becbd39cc48c312f4b8ad546ae4f4557d338a921 diff --git a/libs/interprocess b/libs/interprocess index 4cabab53960b..718e17dd3e36 160000 --- a/libs/interprocess +++ b/libs/interprocess @@ -1 +1 @@ -Subproject commit 4cabab53960b0f44fb8b7fe19b80208eb598818a +Subproject commit 718e17dd3e365d83c90f9a93ecad94a4dfcc07c5 diff --git a/libs/intrusive b/libs/intrusive index 13fa2907cdfc..060a6398c768 160000 --- a/libs/intrusive +++ b/libs/intrusive @@ -1 +1 @@ -Subproject commit 13fa2907cdfce01ad1c31f46af63b37a3c6b25ac +Subproject commit 060a6398c768c1091400ba304113fccaa64b79f3 diff --git a/libs/io b/libs/io index e2fe59318b97..83e927f998e8 160000 --- a/libs/io +++ b/libs/io @@ -1 +1 @@ -Subproject commit e2fe59318b9782d195767cf65d5a4ebabf2855da +Subproject commit 83e927f998e83a29be8fb033389110affe8787f5 diff --git a/libs/iostreams b/libs/iostreams index 9913f2336161..7c21f2d8663b 160000 --- a/libs/iostreams +++ b/libs/iostreams @@ -1 +1 @@ -Subproject commit 9913f2336161da08c856c0f065f7c10b396b49e0 +Subproject commit 7c21f2d8663b62bb3257bfcdd326915bc928c48b diff --git a/libs/iterator b/libs/iterator index caa0e5035ae4..80bb1ac9e401 160000 --- a/libs/iterator +++ b/libs/iterator @@ -1 +1 @@ -Subproject commit caa0e5035ae4e89fe4e26ad9f287e8ac3848382e +Subproject commit 80bb1ac9e401d0d679718e29bef2f2aaf0123fcb diff --git a/libs/json b/libs/json new file mode 160000 index 000000000000..66d925116740 --- /dev/null +++ b/libs/json @@ -0,0 +1 @@ +Subproject commit 66d925116740c1063eab814be7821fc7611ac480 diff --git a/libs/lambda b/libs/lambda index 2ed8d7f4dfd0..ac2651424352 160000 --- a/libs/lambda +++ b/libs/lambda @@ -1 +1 @@ -Subproject commit 2ed8d7f4dfd0b56509a6d915d9824a985ee5df9a +Subproject commit ac26514243521513d33be23aaa92a85b858ddf51 diff --git a/libs/lambda2 b/libs/lambda2 new file mode 160000 index 000000000000..62815a69bfaf --- /dev/null +++ b/libs/lambda2 @@ -0,0 +1 @@ +Subproject commit 62815a69bfaf6d0fac5ace703737e7a9b4899139 diff --git a/libs/leaf b/libs/leaf new file mode 160000 index 000000000000..f2ec744ce9ca --- /dev/null +++ b/libs/leaf @@ -0,0 +1 @@ +Subproject commit f2ec744ce9ca1934193b85f7094c1931177a451c diff --git a/libs/lexical_cast b/libs/lexical_cast new file mode 160000 index 000000000000..1ca93a8e275c --- /dev/null +++ b/libs/lexical_cast @@ -0,0 +1 @@ +Subproject commit 1ca93a8e275c88efd83b3d622547faef697e0f42 diff --git a/libs/libraries.htm b/libs/libraries.htm index b892fb145f8b..2ee4d3d1e95d 100644 --- a/libs/libraries.htm +++ b/libs/libraries.htm @@ -1,3 +1,6 @@ +{{! This is a template for the library list. See the generated file at: + http://www.boost.org/doc/libs/develop/libs/libraries.htm +}} @@ -24,7 +27,7 @@ - +
    "; - 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 += ""; - 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 += ""; - 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 += ""; - target += ""; - target += ""; - - bool no_warn_save = no_warn; - //if ( test_type.find( "fail" ) != string::npos ) no_warn = true; - - // for each compiler, generate html - bool anything_to_report = false; - int compiler = 0; - for ( std::vector::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 += ""; - 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 & results ) - { - for ( fs::directory_iterator itr( bin_dir ); itr != end_itr; ++itr ) - { - if ( fs::is_directory( *itr ) - && itr->path().string().find( ".test" ) == (itr->path().string().size()-5) ) - { - results.push_back( std::string() ); - do_row( *itr, - itr->path().string().substr( 0, itr->path().string().size()-5 ), - results[results.size()-1] ); - } - } - } - -// find_compilers ------------------------------------------------------------// - - void find_compilers(const fs::path & bin_dir) - { - fs::directory_iterator compiler_itr( bin_dir ); - if ( specific_compiler.empty() ) - std::clog << "Using " << bin_dir.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->path().string() != "test" ) // avoid strange directory (Jamfile bug?) - { - if ( specific_compiler.size() != 0 - && specific_compiler != compiler_itr->path().string() ) continue; - toolsets.push_back( compiler_itr->path().string() ); - string desc( compiler_desc( compiler_itr->path().string() ) ); - string vers( version_desc( compiler_itr->path().string() ) ); - report << "\n"; - error_count.push_back( 0 ); - } - } - } - -// 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 results; - - // do primary bin directory - do_rows_for_sub_tree( bin_dir, results ); - - // do subinclude bin directories - jamfile.clear(); - jamfile.seekg(0); - string line; - bool run_tests = false; - - while( std::getline( jamfile, line ) ) - { - bool v2(false); - string::size_type sub_pos( line.find( "subinclude" ) ); - if ( sub_pos == string::npos ) { - sub_pos = line.find( "build-project" ); - v2 = true; - } - if ( sub_pos != string::npos - && line.find( '#' ) > sub_pos ) - { - if (v2) - sub_pos = line.find_first_not_of( " \t./", sub_pos+13 ); - else - sub_pos = line.find_first_not_of( " \t./", sub_pos+10 ); - - if ( sub_pos == string::npos ) continue; - string subinclude_bin_dir( - line.substr( sub_pos, line.find_first_of( " \t", sub_pos )-sub_pos ) ); - - fs::path bin_path = find_bin_path(subinclude_bin_dir); - if (!bin_path.empty()) - do_rows_for_sub_tree( bin_path, results ); - } - if ( ! run_tests ) - { - string::size_type run_pos = line.find("run-tests"); - if ( run_pos != string::npos && line.find_first_not_of(" \t") == run_pos ) - run_tests = true; - } - else - { - if ( line.find(";") != string::npos ) - run_tests = false; - else - { - string::size_type pos = line.find_first_not_of( " \t" ); - if ( pos != string::npos && line[pos] != '#' ) - { - string::size_type end_pos = line.find_first_of(" \t#", pos); - string::iterator end = end_pos != string::npos ? line.begin() + end_pos : line.end(); - string run_tests_bin_dir(line.begin() + pos, end); - fs::path bin_path = find_bin_path("libs/" + run_tests_bin_dir); - if (!bin_path.empty()) - do_rows_for_sub_tree( bin_path, results ); - } - } - } - } - - - std::sort( results.begin(), results.end() ); - - for ( std::vector::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() ); - -#ifdef BOOST_WINDOWS_API - if (relative.size() > 1 && relative[1] == ':') relative[0] = std::tolower(relative[0]); -#endif - - if ( relative.find(boost_root.string()) != string::npos ) - relative.erase( 0, boost_root.string().size()+1 ); - else if ( relative.find(locate_root.string()) != string::npos ) - relative.erase( 0, locate_root.string().size()+1 ); - fs::path bin_path = find_bin_path(relative); - - report << "
    Getting Started         Tools    @@ -41,26 +44,9 @@
    Libraries Listed Alphabetically
    Libraries Listed by Category
    -
    String and text processing
    -
    Containers
    -
    Iterators
    -
    Algorithms
    -
    Function Objects and higher-order programming
    -
    Generic Programming
    -
    Template Metaprogramming
    -
    Preprocessor Metaprogramming
    -
    Concurrent Programming
    -
    Math and numerics
    -
    Correctness and testing
    -
    Data structures
    -
    Image processing
    -
    Input/Output
    -
    Inter-language support
    -
    Memory
    -
    Parsing
    -
    Programming Interfaces
    -
    Miscellaneous
    -
    Broken compiler workarounds
    +{{#categorized}} +
    {{title}}
    +{{/categorized}}
    Libraries Retired from Boost
    @@ -73,702 +59,27 @@

    Libraries Listed Alphabetically

      -
    • accumulators - Framework for incremental - calculation, and collection of statistical accumulators, from Eric Niebler.
    • -
    • any - Safe, generic container for single - values of different value types, from Kevlin Henney. 
    • -
    • array - STL compliant - container wrapper for arrays of constant size, from - Nicolai Josuttis.
    • -
    • asio - 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.
    • -
    • assign - Filling containers - with constant or generated data has never been - easier, from Thorsten Ottosen. -
    • -
    • bimap - Bidirectional maps, from Matias Capeletto. -
    • -
    • bind and mem_fn - Generalized binders for function/object/pointers and member functions, from Peter - Dimov.
    • -
    • call_traits - - Defines types for passing parameters, from John Maddock, - Howard Hinnant, et al.
    • -
    • chrono - Useful time utilities, - from Vicente J. Botet Escribá.
    • -
    • circular_buffer - STL compliant - container also known as ring or cyclic buffer, from Jan Gaspar.
    • -
    • compatibility - Help for - non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens - Maurer.
    • -
    • compressed_pair - - Empty member optimization, from John Maddock, Howard - Hinnant, et al.
    • -
    • concept check - - Tools for generic programming, from Jeremy Siek.
    • -
    • config - Helps boost - library developers adapt to compiler idiosyncrasies; not - intended for library users.
    • -
    • conversion - Polymorphic and lexical casts, from Dave Abrahams and - Kevlin Henney.
    • -
    • crc - Cyclic Redundancy Code, from Daryle - Walker.
    • -
    • date_time - Date-Time library from Jeff Garland.
    • -
    • dynamic_bitset - A runtime sized version of std::bitset from Jeremy Siek and Chuck Allison.
    • -
    • exception - A library for transporting of arbitrary data in exception objects, and transporting of exceptions between threads (N2179), from Emil Dotchevski.
    • -
    • enable_if - Selective inclusion of function template overloads, from Jaakko Järvi, Jeremiah Willcock, and Andrew Lumsdaine.
    • -
    • filesystem - Portable paths, - iteration over directories, and other useful filesystem operations, from - Beman Dawes.
    • -
    • flyweight - Design pattern - to manage large quantities of highly redundant objects, - from Joaquín M López Muñoz.
    • -
    • foreach - BOOST_FOREACH macro for easily - iterating over the elements of a sequence, from Eric Niebler.
    • -
    • format - Type-safe 'printf-like' format - operations, from Samuel Krempp.
    • -
    • function - Function object wrappers - for deferred calls or callbacks, from Doug Gregor.
    • -
    • function_types - Type traits - for callable, built-in types, from Tobias Schwinger
    • -
    • functional - Enhanced - function object adaptors, from Mark Rodgers.
    • -
    • functional/factory - - function object templates for dynamic and static object creation, - from Tobias Schwinger
    • -
    • functional/forward - - adapters to allow generic function objects to accept arbitrary - arguments, from Tobias Schwinger
    • -
    • functional/hash - - A TR1 hash function object that can be extended to hash user defined - types, from Daniel James.
    • -
    • fusion - - Library for working with tuples, including various containers, algorithms, etc. - From Joel de Guzman, Dan Marsden and Tobias Schwinger.
    • -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    • geometry - Geometry Library, from - Barend Gehrels, Bruno Lalande and Mateusz Loskot.
    • -
    • graph - - Generic graph components and algorithms, from Jeremy Siek - and a University of Notre Dame team; now maintained by Andrew Sutton and Jeremiah Willcock.
    • -
    • icl - - Interval Container Library, interval sets and maps and aggregation - of associated values, from Joachim Faulhaber.
    • -
    • integer - Headers to ease - dealing with integral types.
    • -
    • interprocess - Shared memory, memory mapped files, - process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga
    • -
    • interval - Extends the - usual arithmetic functions to mathematical intervals, from Guillaume - Melquiond, Hervé Brönnimann and Sylvain Pion.
    • -
    • intrusive - Intrusive containers and algorithms, from Ion Gaztañaga
    • -
    • in_place_factory, typed_in_place_factory- Generic in-place construction of contained objects with a variadic argument-list, from Fernando Cacciola.
    • -
    • io state savers - Save I/O state to - prevent jumbled data, from Daryle Walker.
    • -
    • iostreams - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.
    • -
    • iterators - Iterator - construction framework, adaptors, concepts, and more, from Dave - Abrahams, Jeremy Siek, and Thomas Witt.
    • -
    • lambda - Define small unnamed - function objects at the actual call site, and more, from Jaakko Järvi and - Gary Powell.
    • -
    • lexical_cast -  General literal text conversions, such as an int represented as - a string, or vice-versa, from Kevlin Henney.
    • -
    • math - Several contributions in the - domain of mathematics, from various authors.
    • -
    • math/complex number algorithms - - These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.
    • -
    • math/common_factor - Greatest - common divisor and least common multiple, from Daryle Walker.
    • -
    • math/octonion - - Octonions, from Hubert Holin.
    • -
    • math/quaternion - - Quaternions, from Hubert Holin.
    • -
    • math/special_functions - - A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.
    • -
    • math/statistical distributions - - A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow
    • -
    • minmax - standard library - extensions for simultaneous min/max and min/max element computations, - from Hervé Brönnimann.
    • -
    • MPI - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer.
    • -
    • mpl - Template metaprogramming - framework of compile-time algorithms, sequences and metafunction classes, - from Aleksey Gurtovoy.
    • -
    • meta state machine - High-performance expressive UML 2.0 finite state machines, from Christophe Henry.
    • -
    • multi_array - Multidimensional - containers and adaptors for arrays of contiguous data, from Ron Garcia.
    • -
    • multi_index - Containers with - multiple STL-compatible access interfaces, from Joaquín M López - Muñoz.
    • -
    • numeric/conversion - Optimized Policy-based Numeric Conversions, - from Fernando Cacciola.
    • -
    • operators - Templates - ease arithmetic classes and iterators, from Dave Abrahams - and Jeremy Siek.
    • -
    • optional - Discriminated-union - wrapper for optional values, from Fernando Cacciola.
    • - -
    • parameter - - Write functions that accept arguments by name, by David Abrahams - and Daniel Wallin.
    • - -
    • pointer container - - Containers for storing heap-allocated polymorphic objects to ease - OO-programming, from Thorsten Ottosen.
    • -
    • polygon - Booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates, from - Lucanus Simonson.
    • -
    • pool - Memory pool management, from - Steve Cleary.
    • -
    • preprocessor - Preprocessor - metaprogramming tools including repetition and recursion, from Vesa Karvonen - and Paul Mensonides.
    • -
    • program_options - Access to configuration - data given on command line, in config files and other sources, from Vladimir Prus.
    • -
    • property map - - Concepts defining interfaces which map key objects to - value objects, from Jeremy Siek.
    • -
    • property tree - A tree data - structure especially suited to storing configuration data, from Marcin - Kalicinski and Sebastian Redl. -
    • proto - Expression template library and compiler - construction toolkit for domain-specific embedded languages, from Eric Niebler.
    • -
    • python - Reflects C++ - classes and functions into Python, from Dave - Abrahams.
    • -
    • random - A complete - system for random number generation, from Jens Maurer.
    • -
    • range - Concepts and utilities for - range-based algorithms, as well as range-based algorithms and range - adaptors that allow for efficient and very expressive code, from - Thorsten Ottosen and Neil Groves.
    • -
    • ratio - Compile time rational arithmetic, - from Vicente J. Botet Escribá.
    • -
    • rational - A rational - number class, from Paul Moore.
    • - -
    • ref - A utility library for - passing references to generic functions, from Jaako Järvi, - Peter Dimov, Doug Gregor, and Dave Abrahams.
    • - -
    • regex - Regular expression - library, from John Maddock.
    • -
    • result_of - determines the type of a function call expression.
    • -
    • scope_exit - - Execute arbitrary code at scope exit, from Alexander Nasonov.
    • -
    • serialization - - Serialization for persistence and marshalling, from Robert Ramey
    • -
    • signals - managed signals & - slots callback implementation, from Doug Gregor.
    • -
    • signals2 - managed signals & - slots callback implementation (thread-safe version 2), from Frank Mori Hess.
    • -
    • smart_ptr - Six smart - pointer class templates, from Greg Colvin, Beman Dawes, - Peter Dimov, and Darin Adler.
    • -
    • statechart - Arbitrarily - complex finite state machines can be implemented in easily readable and - maintainable C++ code, from Andreas Huber.
    • -
    • static_assert - - Static assertions (compile time assertions), from John - Maddock.
    • -
    • spirit - LL parser framework  - represents parsers directly as EBNF grammars in inlined C++, from Joel de - Guzman, Hartmut Kaiser, Dan Nuffer and team.
    • -
    • string_algo - - String algorithms library, from Pavol Droba.
    • -
    • swap - - Enhanced generic swap function, from Joseph Gauterin.
    • -
    • system - Operating system support, - including the diagnostics support that will be part of the C++0x standard - library, from Beman Dawes.
    • -
    • test - Support for simple program testing, - full unit testing, and for program - execution monitoring, from Gennadiy Rozental.
    • -
    • thread - Portable C++ - multi-threading, from William Kempf and Anthony Williams.
    • -
    • timer - Event timer, - progress timer, and progress display classes, from Beman - Dawes.
    • -
    • tokenizer - Break of a string or other - character sequence into a series of tokens, from John Bandela.
    • -
    • TR1 - An implementation of the Technical - Report on C++ Library Extensions, using other Boost libraries as a basis, from John Maddock.
    • -
    • tribool - 3-state boolean type library, from Doug Gregor.
    • -
    • tuple - Ease definition of functions returning multiple values, and more, - from Jaakko Järvi.
    • -
    • type_traits - - Templates for fundamental properties of types, from John - Maddock, Steve Cleary, et al.
    • -
    • typeof - - Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt.
    • -
    • uBLAS - Basic linear algebra - for dense, packed and sparse matrices, from Joerg Walter and Mathias Koch.
    • -
    • units - - Zero-overhead dimensional analysis and unit/quantity - manipulation and conversion, from Matthias Schabel and Steven Watanabe.
    • -
    • unordered - unordered associative containers, from Daniel James.
    • -
    • utility - Class noncopyable - plus checked_delete(), checked_array_delete(), next(),  - prior() - function templates, plus base-from-member idiom, from Dave Abrahams and others.
    • -
    • value_initialized - Wrapper for uniform-syntax value initialization, - from Fernando Cacciola, based on the original idea of David Abrahams.
    • -
    • uuid - A universally unique identifier, from Andy Tompkins.
    • -
    • variant - Safe, generic, stack-based discriminated union - container, from Eric Friedman and Itay Maman.
    • -
    • wave - Standards conformant - implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser
    • -
    • xpressive - 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.
    • +{{#alphabetic}} +
    • {{name}} - {{description}}{{#authors}}, from {{authors}}{{/authors}}
    • +{{/alphabetic}}

    Libraries Listed by Category

    -

    String and text processing

    - -
      -
    • conversion/lexical_cast - lexical_cast - class template, from Kevlin Henney.
    • -
    • format - Type-safe 'printf-like' format - operations, from Samuel Krempp.
    • -
    • iostreams - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.
    • -
    • regex - Regular expression - library, from John Maddock
    • -
    • spirit - LL parser framework  - represents parsers directly as EBNF grammars in inlined C++, from Joel de - Guzman, Hartmut Kaiser, Dan Nuffer and team.
    • -
    • string_algo - - String algorithms library, from Pavol Droba
    • -
    • tokenizer - Break of a string or other - character sequence into a series of tokens, from John Bandela
    • -
    • wave - Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser.
    • -
    • xpressive - 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.
    • -
    - -

    Containers

    - -
      -
    • array - STL compliant - container wrapper for arrays of constant size, from - Nicolai Josuttis.
    • -
    • bimap - Bidirectional maps, from Matias Capeletto. -
    • -
    • circular_buffer - STL compliant - container also known as ring or cyclic buffer, from Jan Gaspar.
    • -
    • dynamic_bitset - A runtime sized version of std::bitset from Jeremy Siek and Chuck Allison.
    • -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    • graph - - Generic graph components and algorithms, from Jeremy Siek - and a University of Notre Dame team; now maintained by Andrew Sutton and Jeremiah Willcock.
    • -
    • icl - - Interval Container Library, interval sets and maps and aggregation - of associated values, from Joachim Faulhaber.
    • -
    • intrusive - Intrusive containers and algorithms, from Ion Gaztañaga
    • -
    • multi_array - Multidimensional - containers and adaptors for arrays of contiguous data, from Ron Garcia.
    • -
    • multi_index - Containers with - multiple STL-compatible access interfaces, from Joaquín M López - Muñoz.
    • -
    • pointer container - - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen.
    • -
    • property map - - Concepts defining interfaces which map key objects to - value objects, from Jeremy Siek.
    • -
    • property tree - A tree data - structure especially suited to storing configuration data, from Marcin - Kalicinski and Sebastian Redl. -
    • unordered - unordered associative containers, from Daniel James.
    • -
    • variant - Safe, generic, stack-based - discriminated union container, from Eric Friedman and Itay Maman.
    • -
    - -

    Iterators

    - -
      -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    • graph - - Generic graph components and algorithms, from Jeremy Siek - and a University of Notre Dame team; now maintained by Andrew Sutton and Jeremiah Willcock.
    • -
    • iterators - Iterator - construction framework, adaptors, concepts, and more, from Dave - Abrahams, Jeremy Siek, and Thomas Witt.
    • -
    • operators - Templates - ease arithmetic classes and iterators, from Dave Abrahams - and Jeremy Siek.
    • -
    • tokenizer - Break of a string or other - character sequence into a series of tokens, from John Bandela.
    • -
    - -

    Algorithms

    +{{#categorized}} +

    {{title}}

      -
    • foreach - BOOST_FOREACH macro for easily - iterating over the elements of a sequence, from Eric Niebler.
    • -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    • geometry - Geometry Library, from - Barend Gehrels, Bruno Lalande and Mateusz Loskot.
    • -
    • graph - - Generic graph components and algorithms, from Jeremy Siek - and a University of Notre Dame team; now maintained by Andrew Sutton and Jeremiah Willcock.
    • -
    • minmax - standard library - extensions for simultaneous min/max and min/max element computations, - from Hervé Brönnimann.
    • -
    • range - A new infrastructure - for generic algorithms that builds on top - of the new iterator concepts, from Thorsten Ottosen.
    • -
    • string_algo - - String algorithms library, from Pavol Droba
    • -
    • utility - Class next(),  prior() - function templates, from Dave Abrahams and others.
    • +{{#libraries}} +
    • {{name}} - {{description}}{{#authors}}, from {{authors}}{{/authors}}
    • +{{/libraries}}
    -

    Function objects and higher-order programming

    - -
      -
    • bind and mem_fn - Generalized binders for function/object/pointers and member functions, from Peter Dimov.
    • - -
    • function - Function object wrappers - for deferred calls or callbacks, from Doug Gregor.
    • -
    • functional - Enhanced - function object adaptors, from Mark Rodgers.
    • -
    • functional/factory - - function object templates for dynamic and static object creation, - from Tobias Schwinger
    • -
    • functional/forward - - adapters to allow generic function objects to accept arbitrary - arguments, from Tobias Schwinger
    • -
    • functional/hash - - A TR1 hash function object that can be extended to hash user defined - types, from Daniel James.
    • -
    • lambda - Define small unnamed - function objects at the actual call site, and more, from Jaakko Järvi and - Gary Powell.
    • - -
    • ref - A utility library for - passing references to generic functions, from Jaako Järvi, - Peter Dimov, Doug Gregor, and Dave Abrahams.
    • - -
    • signals - managed signals & - slots callback implementation, from Doug Gregor.
    • -
    • signals2 - managed signals & - slots callback implementation (thread-safe version 2), from Frank Mori Hess.
    • - -
    • result_of - determines the type of a function call expression.
    • -
    - -

    Generic Programming

    - -
      -
    • call_traits - - Defines types for passing parameters, from John Maddock, - Howard Hinnant, et al.
    • -
    • concept check - - Tools for generic programming, from Jeremy Siek.
    • -
    • enable_if - - Selective inclusion of function template overloads, from Jaakko - Järvi, Jeremiah Willcock, and Andrew Lumsdaine.
    • -
    • function_types - Type traits - for callable, built-in types, from Tobias Schwinger
    • -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    • in_place_factory, typed_in_place_factory- Generic in-place construction - of contained objects with a variadic argument-list, from Fernando Cacciola.
    • -
    • operators - Templates - ease arithmetic classes and iterators, from Dave Abrahams - and Jeremy Siek.
    • - -
    • property map - - Concepts defining interfaces which map key objects to - value objects, from Jeremy Siek.
    • -
    • static_assert - - Static assertions (compile time assertions), from John - Maddock.
    • -
    • type_traits - - Templates for fundamental properties of types, from John - Maddock, Steve Cleary, et al.
    • -
    - -

    Template Metaprogramming

    - -
      -
    • function_types - Type traits - for callable, built-in types, from Tobias Schwinger
    • -
    • fusion - - Library for working with tuples, including various containers, - algorithms, etc. From Joel de Guzman, Dan Marsden and Tobias Schwinger.
    • -
    • mpl - Template metaprogramming - framework of compile-time algorithms, sequences and metafunction classes, - from Aleksey Gurtovoy.
    • -
    • proto - Expression template library and compiler - construction toolkit for domain-specific embedded languages, from Eric Niebler.
    • -
    • static_assert - - Static assertions (compile time assertions), from John - Maddock.
    • -
    • type_traits - - Templates for fundamental properties of types, from John - Maddock, Steve Cleary, et al.
    • -
    - -

    Preprocessor Metaprogramming

    - -
      -
    • preprocessor - Preprocessor - metaprogramming tools including repetition and recursion, from Vesa Karvonen - and Paul Mensonides.
    • -
    - -

    Concurrent Programming

    - -
      -
    • asio - 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.
    • -
    • interprocess - Shared memory, memory mapped files, - process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga
    • -
    • MPI - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer.
    • -
    • thread - Portable C++ - multi-threading, from William Kempf.
    • -
    - -

    Math and numerics

    - -
      -
    • accumulators - Framework for incremental - calculation, and collection of statistical accumulators, from Eric Niebler.
    • -
    • geometry - Geometry Library, from - Barend Gehrels, Bruno Lalande and Mateusz Loskot.
    • -
    • integer - Headers to ease - dealing with integral types.
    • -
    • interval - Extends the - usual arithmetic functions to mathematical intervals, from Guillaume - Melquiond, Hervé Brönnimann and Sylvain Pion.
    • -
    • math - Several contributions in the - domain of mathematics, from various authors.
    • -
    • math/complex number algorithms - - These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.
    • -
    • math/common_factor - Greatest - common divisor and least common multiple, from Daryle Walker.
    • -
    • math/octonion - - Octonions, from Hubert Holin.
    • -
    • math/quaternion - - Quaternions, from Hubert Holin.
    • -
    • math/special_functions - - A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.
    • -
    • math/statistical distributions - - A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow
    • -
    • multi_array - Multidimensional - containers and adaptors for arrays of contiguous data, from Ron Garcia.
    • -
    • numeric/conversion - Optimized Policy-based Numeric Conversions, - from Fernando
    • -
    • operators - Templates - ease arithmetic classes and iterators, from Dave Abrahams - and Jeremy Siek.
    • -
    • random - A complete - system for random number generation, from Jens Maurer.
    • -
    • ratio - A compile time ratio arithmetic, - from Vicente J. Botet Escribá.
    • -
    • rational - A rational - number class, from Paul Moore.
    • -
    • uBLAS - Basic linear algebra - for dense, packed and sparse matrices, from Joerg Walter and Mathias Koch.
    • -
    - -

    Correctness and testing

    - -
      -
    • concept check - - Tools for generic programming, from Jeremy Siek.
    • -
    • static_assert - - Static assertions (compile time assertions), from John - Maddock.
    • -
    • test - Support for simple program testing, - full unit testing, and for program - execution monitoring, from Gennadiy Rozental.
    • -
    - -

    Data structures

    - -
      -
    • any - Safe, generic container for single - values of different value types, from Kevlin Henney.
    • -
    • bimap - Bidirectional maps, from Matias Capeletto. -
    • -
    • compressed_pair - - Empty member optimization, from John Maddock, Howard - Hinnant, et al.
    • -
    • fusion - - Library for working with tuples, including various containers, algorithms, etc. - From Joel de Guzman and Dan Marsden and Tobias Schwinger.
    • -
    • icl - - Interval Container Library, interval sets and maps and aggregation - of associated values, from Joachim Faulhaber.
    • -
    • multi_index - Containers with - multiple STL-compatible access interfaces, from Joaquín M López - Muñoz.
    • -
    • pointer container - - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen.
    • -
    • property tree - A tree data - structure especially suited to storing configuration data, from Marcin - Kalicinski and Sebastian Redl. -
    • tuple - Ease definition of functions returning multiple values, and more, - from Jaakko Järvi.
    • -
    • uuid - A universally unique identifier, from Andy Tompkins.
    • -
    • variant - Safe, generic, stack-based - discriminated union container, from Eric Friedman and Itay Maman.
    • -
    - -

    Image processing

    -
      -
    • gil - Generic Image Library, from - Lubomir Bourdev and Hailin Jin.
    • -
    - -

    Input/Output

    -
      -
    • asio - 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.
    • -
    • assign - Filling containers - with constant or generated data has never been - easier, from Thorsten Ottosen. -
    • - -
    • format - Type-safe 'printf-like' format - operations, from Samuel Krempp.
    • -
    • io state savers - Save I/O state to - prevent jumbled data, from Daryle Walker.
    • -
    • iostreams - Framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis.
    • -
    • program_options - Access to configuration - data given on command line, in config files and other sources, from Vladimir Prus.
    • -
    • serialization - Serialization -of arbitrary data for persistence and marshalling, from Robert Ramey
    • - -
    - -

    Inter-language support

    - -
      -
    • python - Reflects C++ - classes and functions into Python, from Dave - Abrahams.
    • -
    - -

    Memory

    - -
      -
    • pool - Memory pool management, from - Steve Cleary.
    • -
    • smart_ptr - Six smart - pointer class templates, from Greg Colvin, Beman Dawes, - Peter Dimov, and Darin Adler.
    • -
    • utility - Class noncopyable - plus checked_delete(), checked_array_delete(), next(),  - prior() - function templates, plus base-from-member idiom, from Dave Abrahams and others.
    • -
    - -

    Parsing

    - -
      -
    • spirit - LL parser framework  - represents parsers directly as EBNF grammars in inlined C++, from Joel de - Guzman, Hartmut Kaiser, Dan Nuffer and team.
    • -
    - -

    Programming Interfaces

    - -
      -
    • function - Function object wrappers - for deferred calls or callbacks, from Doug Gregor.
    • - -
    • parameter - - Write functions that accept arguments by name, by David Abrahams - and Daniel Wallin.
    • -
    - -

    Miscellaneous

    - -
      -
    • base-from-member - Idiom to - initialize a base class with a member, from Daryle Walker.
    • -
    • chrono - A compile time ratio arithmetic, - from Vicente J. Botet Escribá.
    • -
    • compressed_pair - - Empty member optimization, from John Maddock, Howard - Hinnant, et al.
    • -
    • conversion - Polymorphic and lexical casts, from Dave Abrahams and - Kevlin Henney.
    • -
    • crc - Cyclic Redundancy Code, from Daryle - Walker.
    • -
    • date_time - Date-Time library from Jeff Garland.
    • -
    • exception - A library for transporting of arbitrary data in exception objects, and transporting of exceptions between threads (N2179), from Emil Dotchevski.
    • -
    • filesystem - Portable paths, - iteration over directories, and other useful filesystem operations, from - Beman Dawes.
    • -
    • flyweight - Design pattern - to manage large quantities of highly redundant objects, - from Joaquín M López Muñoz.
    • -
    • lexical_cast -  General literal text conversions, such as an int represented as - a string, or vice-versa, from Kevlin Henney.
    • -
    • meta state machine - High-performance expressive UML 2.0 finite state machines, from Christophe Henry.
    • -
    • numeric/conversion - Optimized Policy-based Numeric Conversions, - from Fernando Cacciola.
    • -
    • optional - Discriminated-union - wrapper for optional values, from Fernando Cacciola.
    • -
    • program_options - Access to configuration - data given on command line, in config files and other sources, from Vladimir Prus.
    • -
    • scope_exit - - Execute arbitrary code at scope exit, from Alexander Nasonov.
    • -
    • statechart - Arbitrarily - complex finite state machines can be implemented in easily readable and - maintainable C++ code, from Andreas Huber.
    • -
    • swap - - Enhanced generic swap function, from Joseph Gauterin.
    • -
    • system - Operating - system support, including the diagnostics support that will be part of the - C++0x standard library, from Beman Dawes.
    • -
    • timer - Event timer, - progress timer, and progress display classes, from Beman - Dawes.
    • -
    • TR1 - An implementation of the Technical - Report on C++ Library Extensions, using other Boost libraries as a basis, from John Maddock.
    • -
    • tribool - 3-state boolean type library, from Doug Gregor.
    • -
    • typeof - - Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt.
    • -
    • units - - Zero-overhead dimensional analysis and unit/quantity - manipulation and conversion, from Matthias Schabel and Steven Watanabe.
    • -
    • utility - Class noncopyable - plus checked_delete(), checked_array_delete(), next(),  - prior() - function templates, plus base-from-member idiom, from Dave Abrahams and others.
    • -
    • value_initialized - Wrapper for uniform-syntax value initialization, - from Fernando Cacciola, based on the original idea of David Abrahams.
    • -
    - -

    Broken compiler workarounds

    - -
      -
    • compatibility - Help for - non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens - Maurer.
    • -
    • config - Helps boost - library developers adapt to compiler idiosyncrasies; not - intended for library users.
    • -
    +{{/categorized}} -

    [Category suggestions from Aleksey Gurtovoy and Beman Dawes]

    +

    [Category suggestions from Aleksey Gurtovoy, Beman Dawes and Vicente J. Botet Escribá]


    @@ -779,13 +90,16 @@

    Libraries Retired from Boost

    from Nicolai Josuttis. Removed in Boost version 1.32. Please use Bind or Lambda instead. +
  • signals (v1) - Managed signals and slots callback implementation, from + Doug Gregor. Removed in Boost version 1.69. Please use + Signals2 instead.

  • Revised 03 Nov 2009

    +s-format="%d %b %Y" startspan -->19 Feb 2015

    © Copyright Beman Dawes 2000-2004

    Distributed under the Boost Software License, Version 1.0. diff --git a/libs/local_function b/libs/local_function index 88da98e37b95..099e96bef0e5 160000 --- a/libs/local_function +++ b/libs/local_function @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 099e96bef0e5f2d513940c5987958121ca6f6e02 diff --git a/libs/locale b/libs/locale index 88da98e37b95..2cdef1a6f974 160000 --- a/libs/locale +++ b/libs/locale @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 2cdef1a6f97488e7827697a6201da5239051c9bf diff --git a/libs/lockfree b/libs/lockfree index 88da98e37b95..417fcdb6e796 160000 --- a/libs/lockfree +++ b/libs/lockfree @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 417fcdb6e79654338cb18842a16007bb55b08aac diff --git a/libs/log b/libs/log new file mode 160000 index 000000000000..9d726cc5fe0e --- /dev/null +++ b/libs/log @@ -0,0 +1 @@ +Subproject commit 9d726cc5fe0ed59ab98cc367a50956f802d3cca1 diff --git a/libs/logic b/libs/logic index 9c4577cce36d..145778490c2d 160000 --- a/libs/logic +++ b/libs/logic @@ -1 +1 @@ -Subproject commit 9c4577cce36d00f4c5f45e5123aae8268535ef9e +Subproject commit 145778490c2d332c1411df6a5274a4b53ec3e091 diff --git a/libs/maintainers.txt b/libs/maintainers.txt index c631c84d30fd..1a1fa2fb6105 100644 --- a/libs/maintainers.txt +++ b/libs/maintainers.txt @@ -5,101 +5,182 @@ # 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. +# maintainers. +# +# This file is automatically updated from library metadata. accumulators Eric Niebler -algorithm/minmax Herve Bronnimann -algorithm/string Pavol Droba -any Alexander Nasonov +algorithm Marshall Clow +algorithm/minmax Marshall Clow +algorithm/string Marshall Clow +align Glen Fernandes +any Antony Polukhin array Marshall Clow asio Chris Kohlhoff +assert Peter Dimov assign Thorsten Ottosen +atomic Helge Bahmann , Tim Blechmann , Andrey Semashev +beast Vinnie Falco bimap Matias Capeletto -bind Peter Dimov +bind Peter Dimov +callable_traits Barrett Adair chrono Vicente J. Botet Escriba +chrono/stopwatch Vicente J. Botet Escriba circular_buffer Jan Gaspar +compat Peter Dimov +compute Kyle Lutz concept_check Jeremy Siek config John Maddock -conversion Alexander Nasonov +container Ion Gaztanaga +container_hash Daniel James +context Oliver Kowalke +contract Lorenzo Caminiti +conversion Antony Polukhin +convert Vladimir Batov +core Peter Dimov , Glen Fernandes , Andrey Semashev +coroutine Oliver Kowalke +coroutine2 Oliver Kowalke crc Daryle Walker -date_time Jeff Garland +date_time Jeff Garland , James E. King III +describe Peter Dimov +detail Robert Ramey , Rene Rivera , Andrey Semashev disjoint_sets Jeremy Siek +dll Antony Polukhin dynamic_bitset Jeremy Siek +endian Peter Dimov exception Emil Dotchevski -filesystem Beman Dawes -flyweight Joaquin M Lopez Munoz +fiber Oliver Kowalke +filesystem Andrey Semashev +flyweight Joaquin M Lopez Munoz foreach Eric Niebler -format Samuel Krempp -function Douglas Gregor +format Samuel Krempp , James E. King III +function Peter Dimov function_types Tobias Schwinger functional -functional/factory Tobias Schwinger +functional/factory Glen Fernandes , Tobias Schwinger functional/forward Tobias Schwinger functional/hash Daniel James +functional/overloaded_function Lorenzo Caminiti fusion Joel de Guzman , Dan Marsden , Tobias Schwinger -function_types Tobias Schwinger -gil Lubomir Bourdev , Hailin Jin -graph Andrew Sutton +geometry Barend Gehrels , Bruno Lalande , Mateusz Loskot , Adam Wulkiewicz , Vissarion Fisikopoulos +geometry/extensions Barend Gehrels , Bruno Lalande , Mateusz Loskot , Adam Wulkiewicz , Vissarion Fisikopoulos +geometry/index Barend Gehrels , Bruno Lalande , Mateusz Loskot , Adam Wulkiewicz , Vissarion Fisikopoulos +gil Stefan Seefeld , Mateusz Loskot , Pranam Lashkari +graph K. Noel Belcourt +graph_parallel K. Noel Belcourt +hana Louis Dionne +heap Tim Blechmann +histogram Hans Dembinski +hof Paul Fultz II icl Joachim Faulhaber -integer Daryle Walker +integer Daryle Walker , Andrey Semashev interprocess Ion Gaztanaga intrusive Ion Gaztanaga -io Daryle Walker +io Glen Fernandes iostreams Jonathan Turkanis -iterator David Abrahams , Thomas Witt +iterator David Abrahams , Thomas Witt , Jeffrey Lee Hellrung Jr. +iterator_facade Zach Laine +json Vinnie Falco lambda Jaakko Jarvi +lambda2 Peter Dimov +leaf Emil Dotchevski +lexical_cast Antony Polukhin +local_function Lorenzo Caminiti +locale Artyom Beilis , Alexander Grund +lockfree Tim Blechmann +log Andrey Semashev logic Douglas Gregor -math Hubert Holin , John Maddock +math John Maddock , Chris Kormanyos , Nick Thompson , Matt Borland +metaparse Abel Sinkovics +move Ion Gaztanaga +mp11 Peter Dimov +mpi K. Noel Belcourt , Alain Miniussi mpl Aleksey Gurtovoy msm Christophe Henry multi_array Ronald Garcia -multi_index Joaquin M Lopez Munoz -numeric/conversion Fernando Cacciola +multi_index Joaquin M Lopez Munoz +multiprecision John Maddock , christopher Kormanyos +mysql Rubén Pérez +nowide Alexander Grund +numeric/conversion Fernando Cacciola , Brandon Kohn numeric/interval Sylvain Pion , Herve Bronnimann , Guillaume Melquiond -numeric/ublas Michael Stevens -optional Fernando Cacciola +numeric/odeint Karsten Ahnert , Mario Mulansky +numeric/ublas David Bellot , Cem Bassoy , Stefan Seefeld operators Daniel Frey +optional Fernando Cacciola , Andrzej Krzemienski +outcome Niall Douglas parameter David Abrahams , Daniel Wallin -polygon Lucanus Simonson +parameter_python David Abrahams , Daniel Wallin +pfr Antony Polukhin +phoenix Joel de Guzman , Thomas Heller , John Fletcher +poly_collection Joaquin M Lopez Munoz +polygon Lucanus Simonson , Andrii Sydorchuk pool Stephen Cleary -preprocessor Paul Mensonides -program_options Vladimir Prus +predef René Ferdinand Rivera Morell +preprocessor Paul Mensonides , Edward Diener +process Klemens D. Morgenstern +program_options Vladimir Prus property_map Douglas Gregor -property_tree Sebastian Redl +property_map_parallel Douglas Gregor +property_tree Richard Hodges proto Eric Niebler ptr_container Thorsten Ottosen -python David Abrahams -random Jens Maurer -range Neil Groves +python Stefan Seefeld +qvm Emil Dotchevski +random Steven Watanabe +range Neil Groves , Nathan Ridge ratio Vicente J. Botet Escriba rational Jonathan Turkanis regex John Maddock -scope_exit Alexander Nasonov +safe_numerics Robert Ramey +scope_exit Alexander Nasonov , Lorenzo Caminiti serialization Robert Ramey signals Douglas Gregor signals2 Frank Mori Hess -smart_ptr Beman Dawes , Peter Dimov +smart_ptr Peter Dimov +smart_ptr/make_shared Glen Fernandes +sort Steven Ross spirit Joel de Guzman , Hartmut Kaiser +spirit/classic Joel de Guzman , Hartmut Kaiser +spirit/repository Joel de Guzman , Hartmut Kaiser +stacktrace Antony Polukhin statechart Andreas Huber static_assert John Maddock -test Gennadiy Rozental -thread Anthony Williams , Roland Schwarz -timer Beman Dawes +static_string Alan de Freitas , Vinnie Falco +stl_interfaces Zach Laine +sync Tim Blechmann , Andrey Semashev , Vicente J. Botet Escriba +system Peter Dimov +test Gennadiy Rozental , Raffi Enficiaud +thread Vicente J. Botet Escriba +throw_exception Emil Dotchevski , Peter Dimov +timer Peter Dimov tokenizer John R. Bandela tr1 John Maddock +tti Edward Diener tuple Jaakko Jarvi +type_erasure Steven Watanabe +type_index Antony Polukhin type_traits John Maddock typeof Arkadiy Vertleyb , Peder Holt -units Matthias Schabel , Steven Watanabe -unordered Daniel James +units Jürgen Hunold , Steven Watanabe +unordered Christian Mazakas , Joaquín M López Muñoz +url Vinnie Falco , Alan de Freitas utility -utility/result_of Daniel Walker utility/enable_if Jaakko Jarvi , Jeremiah Willcock +utility/identity_type Lorenzo Caminiti +utility/ostream_string Glen Fernandes +utility/result_of Daniel Walker +utility/string_ref Marshall Clow +utility/string_view Marshall Clow utility/swap Joseph Gauterin -uuid Andy Tompkins -variant Eric Friedman +uuid Andy Tompkins , James E. King III +variant Antony Polukhin , Eric Friedman +variant2 Peter Dimov +vmd Edward Diener wave Hartmut Kaiser +winapi Andrey Semashev xpressive Eric Niebler +yap Zach Laine + diff --git a/libs/math b/libs/math index 5ba171ee1216..1722ef9261b5 160000 --- a/libs/math +++ b/libs/math @@ -1 +1 @@ -Subproject commit 5ba171ee12168a0032e41ca5c202edabe1467f14 +Subproject commit 1722ef9261b51c414b976a156baaf1e4d3ceea66 diff --git a/libs/metaparse b/libs/metaparse new file mode 160000 index 000000000000..dd35492d40f8 --- /dev/null +++ b/libs/metaparse @@ -0,0 +1 @@ +Subproject commit dd35492d40f8f15ff80d4690d63274de03a09250 diff --git a/libs/move b/libs/move index 88da98e37b95..60f782350aa7 160000 --- a/libs/move +++ b/libs/move @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 60f782350aa7c64e06ac6d2a6914ff6f6ff35ce1 diff --git a/libs/mp11 b/libs/mp11 new file mode 160000 index 000000000000..391e23ae716a --- /dev/null +++ b/libs/mp11 @@ -0,0 +1 @@ +Subproject commit 391e23ae716aec4d59f6c7272e49e1dd8c01dcdb diff --git a/libs/mpi b/libs/mpi index a1ca5b5e7bfa..347595c77379 160000 --- a/libs/mpi +++ b/libs/mpi @@ -1 +1 @@ -Subproject commit a1ca5b5e7bfaaddaed4862aa958f8fef67c197a7 +Subproject commit 347595c77379ac5cbfc6e4474fe315398fef355e diff --git a/libs/mpl b/libs/mpl index 7cd1d88886a8..b440c45c2810 160000 --- a/libs/mpl +++ b/libs/mpl @@ -1 +1 @@ -Subproject commit 7cd1d88886a890d8b85370e967b9cd02c4d6640e +Subproject commit b440c45c2810acbddc917db057f2e5194da1a199 diff --git a/libs/msm b/libs/msm index 2210693b8aac..f932a51ef0f7 160000 --- a/libs/msm +++ b/libs/msm @@ -1 +1 @@ -Subproject commit 2210693b8aacf4bcaff08239afbdcd68ec8c8685 +Subproject commit f932a51ef0f7a136312c7d2949fb69963cb46830 diff --git a/libs/multi_array b/libs/multi_array index 6b6d2320eac1..0c5348bef71b 160000 --- a/libs/multi_array +++ b/libs/multi_array @@ -1 +1 @@ -Subproject commit 6b6d2320eac15d154ef531b39f96278adda1527a +Subproject commit 0c5348bef71b890c4bd06eff1ee5ebda69e7b27a diff --git a/libs/multi_index b/libs/multi_index index 3e9d0232d237..2b2c52a27f58 160000 --- a/libs/multi_index +++ b/libs/multi_index @@ -1 +1 @@ -Subproject commit 3e9d0232d2374ede6bb3035bef8210ec18d6df19 +Subproject commit 2b2c52a27f5800c6e5eb566cc330c4bbe2387de6 diff --git a/libs/multiprecision b/libs/multiprecision index 88da98e37b95..737357f1fece 160000 --- a/libs/multiprecision +++ b/libs/multiprecision @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 737357f1fecef5c6c6553d4dd280f47aeb056aaf diff --git a/libs/mysql b/libs/mysql new file mode 160000 index 000000000000..f41096758779 --- /dev/null +++ b/libs/mysql @@ -0,0 +1 @@ +Subproject commit f410967587790744c9318b9238e7fc0d65d2de48 diff --git a/libs/nowide b/libs/nowide new file mode 160000 index 000000000000..f20b831c62a9 --- /dev/null +++ b/libs/nowide @@ -0,0 +1 @@ +Subproject commit f20b831c62a9fe659a0ef9cee2f2bfe3704c4377 diff --git a/libs/numeric/conversion b/libs/numeric/conversion index 8312050b3658..50a1eae942ef 160000 --- a/libs/numeric/conversion +++ b/libs/numeric/conversion @@ -1 +1 @@ -Subproject commit 8312050b3658527f987977c008aed39aaf5ea81e +Subproject commit 50a1eae942effb0a9b90724323ef8f2a67e7984a diff --git a/libs/numeric/doc/build.jam b/libs/numeric/doc/build.jam new file mode 100644 index 000000000000..16e757d672d7 --- /dev/null +++ b/libs/numeric/doc/build.jam @@ -0,0 +1,11 @@ +# Copyright (c) 2016 Rene Rivera +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +############################################################################### +alias boostdoc ; +explicit boostdoc ; +alias boostrelease : ../conversion/doc//standalone ../odeint/doc//standalone ; +explicit boostrelease ; diff --git a/libs/numeric/index.html b/libs/numeric/index.html index 6c74e6c74111..f1e4350beb5d 100644 --- a/libs/numeric/index.html +++ b/libs/numeric/index.html @@ -1,14 +1,14 @@ - + Automatic redirection failed, please go to -ublas/doc/index.htm


    +ublas/doc/index.html

    � Copyright Beman Dawes, 2001

    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)

    - \ No newline at end of file + diff --git a/libs/numeric/interval b/libs/numeric/interval index 38524e1025c9..2eda7413ac16 160000 --- a/libs/numeric/interval +++ b/libs/numeric/interval @@ -1 +1 @@ -Subproject commit 38524e1025c940c2112bcb33c769cad2960c55b5 +Subproject commit 2eda7413ac16dd4158005446438daf8a7e435dd9 diff --git a/libs/numeric/odeint b/libs/numeric/odeint index 88da98e37b95..2bbc186b43d7 160000 --- a/libs/numeric/odeint +++ b/libs/numeric/odeint @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 2bbc186b43d7267e622c4e1ad9527e4a8ecc8c42 diff --git a/libs/numeric/ublas b/libs/numeric/ublas index 6351744e3531..3a4fe24ee16b 160000 --- a/libs/numeric/ublas +++ b/libs/numeric/ublas @@ -1 +1 @@ -Subproject commit 6351744e353103a7827cdb184d1e18cc3ee5a250 +Subproject commit 3a4fe24ee16b4d6a084eb51c37cfeffba697ff71 diff --git a/libs/optional b/libs/optional index e9989b260e0e..bf58a919dfd7 160000 --- a/libs/optional +++ b/libs/optional @@ -1 +1 @@ -Subproject commit e9989b260e0e4acd02a839ac95904746fe9922d2 +Subproject commit bf58a919dfd7abe0d79ad802a4c93791a05aebd5 diff --git a/libs/outcome b/libs/outcome new file mode 160000 index 000000000000..b15504265f22 --- /dev/null +++ b/libs/outcome @@ -0,0 +1 @@ +Subproject commit b15504265f2223d07cb528a367357a5a79dfb333 diff --git a/libs/parameter b/libs/parameter index 15d8701d770f..6538609cf5e3 160000 --- a/libs/parameter +++ b/libs/parameter @@ -1 +1 @@ -Subproject commit 15d8701d770f4e5e71b1c992c22ba80f39fdc647 +Subproject commit 6538609cf5e390b6e7cbcb73173d86d18af73281 diff --git a/libs/parameter_python b/libs/parameter_python new file mode 160000 index 000000000000..1f7f9ce99301 --- /dev/null +++ b/libs/parameter_python @@ -0,0 +1 @@ +Subproject commit 1f7f9ce9930119f0dda7dcd5e1ec3b5ed7c6b091 diff --git a/libs/pfr b/libs/pfr new file mode 160000 index 000000000000..2c7903681677 --- /dev/null +++ b/libs/pfr @@ -0,0 +1 @@ +Subproject commit 2c7903681677c7683457f0beb53d51329c81f430 diff --git a/libs/phoenix b/libs/phoenix index 88da98e37b95..8913607a3788 160000 --- a/libs/phoenix +++ b/libs/phoenix @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 8913607a3788cb82d48ed461ea59c919b7bad3df diff --git a/libs/poly_collection b/libs/poly_collection new file mode 160000 index 000000000000..fd456f781e92 --- /dev/null +++ b/libs/poly_collection @@ -0,0 +1 @@ +Subproject commit fd456f781e922fa8e4433421f8423815e772340c diff --git a/libs/polygon b/libs/polygon index a1219447a2d7..7aa8793414fc 160000 --- a/libs/polygon +++ b/libs/polygon @@ -1 +1 @@ -Subproject commit a1219447a2d75c4ca5827a06ff378af08516b864 +Subproject commit 7aa8793414fc926dbc816cf6017dfa64c54da288 diff --git a/libs/pool b/libs/pool index 434c9a7630c3..8ec1be1e82ba 160000 --- a/libs/pool +++ b/libs/pool @@ -1 +1 @@ -Subproject commit 434c9a7630c3a8de4db0ddb89f1ec9be1a30d76c +Subproject commit 8ec1be1e82ba559744ecfa3c6ec13f71f9c175cc diff --git a/libs/predef b/libs/predef index 88da98e37b95..e508ed842c15 160000 --- a/libs/predef +++ b/libs/predef @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit e508ed842c153b5dd4858e2cdafd58d2ede418d4 diff --git a/libs/preprocessor b/libs/preprocessor index 49142ec9308d..667e87b3392d 160000 --- a/libs/preprocessor +++ b/libs/preprocessor @@ -1 +1 @@ -Subproject commit 49142ec9308d9ee60abd57a1c516782815d8ee50 +Subproject commit 667e87b3392db338a919cbe0213979713aca52e3 diff --git a/libs/process b/libs/process new file mode 160000 index 000000000000..507768e2308f --- /dev/null +++ b/libs/process @@ -0,0 +1 @@ +Subproject commit 507768e2308f3e9935f3d1d0eaaabe9f6628105d diff --git a/libs/program_options b/libs/program_options index 7051655c7661..847b130e19a9 160000 --- a/libs/program_options +++ b/libs/program_options @@ -1 +1 @@ -Subproject commit 7051655c766120cf523e6593c501cf8eb984adab +Subproject commit 847b130e19a9e5118bfb5486e9b4d4f6ab2797a2 diff --git a/libs/property_map b/libs/property_map index 3a1dba235e6b..252f64913ec0 160000 --- a/libs/property_map +++ b/libs/property_map @@ -1 +1 @@ -Subproject commit 3a1dba235e6be8d522dc75033737e279c30d5142 +Subproject commit 252f64913ec014d0e3b5362aecde36ce73298594 diff --git a/libs/property_map_parallel b/libs/property_map_parallel new file mode 160000 index 000000000000..a2f90e9660e4 --- /dev/null +++ b/libs/property_map_parallel @@ -0,0 +1 @@ +Subproject commit a2f90e9660e4e7e012c0b54a1338d8e69fb71906 diff --git a/libs/property_tree b/libs/property_tree index 0dd8746cba7b..88a3b0ba8a6c 160000 --- a/libs/property_tree +++ b/libs/property_tree @@ -1 +1 @@ -Subproject commit 0dd8746cba7bee40a3b323b762245d91cc6d1d8c +Subproject commit 88a3b0ba8a6cd4ddf35f10d841bde9878241d64a diff --git a/libs/proto b/libs/proto index c2fb79256d96..7f924934689b 160000 --- a/libs/proto +++ b/libs/proto @@ -1 +1 @@ -Subproject commit c2fb79256d964c4bfe858f40d913a9881b849b0d +Subproject commit 7f924934689b940f3a72212ab0f714ec6fd6e34b diff --git a/libs/ptr_container b/libs/ptr_container index 71d4329d85fb..b90a92d46a6c 160000 --- a/libs/ptr_container +++ b/libs/ptr_container @@ -1 +1 @@ -Subproject commit 71d4329d85fb400d4b361bc1742dd63c9ff494d3 +Subproject commit b90a92d46a6c654a841a48f664d3ed64c4a2b8b0 diff --git a/libs/python b/libs/python index b5336f36d65a..47d5bc76f69e 160000 --- a/libs/python +++ b/libs/python @@ -1 +1 @@ -Subproject commit b5336f36d65a12a87018b29ae755e6c046506e0c +Subproject commit 47d5bc76f69e20625214381c930a2fad5765e2b3 diff --git a/libs/qvm b/libs/qvm new file mode 160000 index 000000000000..fa272cb0b07c --- /dev/null +++ b/libs/qvm @@ -0,0 +1 @@ +Subproject commit fa272cb0b07ce85b5d8d53fb3dfade389e9cc4df diff --git a/libs/random b/libs/random index ed945c9eb1e8..3c1f0dbf634a 160000 --- a/libs/random +++ b/libs/random @@ -1 +1 @@ -Subproject commit ed945c9eb1e84ceb547aeae518f722d7dc9f9e55 +Subproject commit 3c1f0dbf634ad92fd2a2ffe2a46f5553e5a02de7 diff --git a/libs/range b/libs/range index 96c78123f02f..f0e109312cab 160000 --- a/libs/range +++ b/libs/range @@ -1 +1 @@ -Subproject commit 96c78123f02f41541ee2120e389bcc3f5ac9bc2a +Subproject commit f0e109312cab295a660ae94b138cb5f8fc7d182f diff --git a/libs/ratio b/libs/ratio index 9ac749e09584..3708bcab308f 160000 --- a/libs/ratio +++ b/libs/ratio @@ -1 +1 @@ -Subproject commit 9ac749e0958484f2bb189f8809bbaab62185bddb +Subproject commit 3708bcab308f54a0a4f365b09f37057b7bab7268 diff --git a/libs/rational b/libs/rational index a23c6ef3a99f..564623136417 160000 --- a/libs/rational +++ b/libs/rational @@ -1 +1 @@ -Subproject commit a23c6ef3a99f473b74525b4221d097a4eb3f6f80 +Subproject commit 564623136417068916495e2b24737054d607347c diff --git a/libs/regex b/libs/regex index 7ed55a515ee4..237e69caf659 160000 --- a/libs/regex +++ b/libs/regex @@ -1 +1 @@ -Subproject commit 7ed55a515ee4f4b4388c223d1f7aa6bb0f801efc +Subproject commit 237e69caf65906d0313c9b852541b07fa84a99c1 diff --git a/libs/safe_numerics b/libs/safe_numerics new file mode 160000 index 000000000000..13ca3d6dd36d --- /dev/null +++ b/libs/safe_numerics @@ -0,0 +1 @@ +Subproject commit 13ca3d6dd36db1aac2d6b5caca2c281d15c881ad diff --git a/libs/scope_exit b/libs/scope_exit index fd2168edf87f..60baaae454b2 160000 --- a/libs/scope_exit +++ b/libs/scope_exit @@ -1 +1 @@ -Subproject commit fd2168edf87fbe2868420e072eccd2d4952e32e5 +Subproject commit 60baaae454b2da887a31cf939e22015b6263c9e4 diff --git a/libs/serialization b/libs/serialization index a7bd7ef6c22b..897dec4c0160 160000 --- a/libs/serialization +++ b/libs/serialization @@ -1 +1 @@ -Subproject commit a7bd7ef6c22ba76832593eb17ed6840548328305 +Subproject commit 897dec4c0160aa683e6f4720cd1dbd93e21e786b diff --git a/libs/signals b/libs/signals deleted file mode 160000 index 63524f1ce176..000000000000 --- a/libs/signals +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 63524f1ce17614bf2390d2db202a3fc609152f9d diff --git a/libs/signals2 b/libs/signals2 index cc04d5ec4547..9bcd76256a76 160000 --- a/libs/signals2 +++ b/libs/signals2 @@ -1 +1 @@ -Subproject commit cc04d5ec4547ae020159f40ee481a66835ee4ca4 +Subproject commit 9bcd76256a76a0cb89c5e0f047a8386c230e7b78 diff --git a/libs/smart_ptr b/libs/smart_ptr index 634866c28afc..13be03abf880 160000 --- a/libs/smart_ptr +++ b/libs/smart_ptr @@ -1 +1 @@ -Subproject commit 634866c28afcf8b46ce231f5ca2f5619144fe990 +Subproject commit 13be03abf880cdb616d0597c38880f53f1b415b8 diff --git a/libs/sort b/libs/sort new file mode 160000 index 000000000000..cb7df6bcb652 --- /dev/null +++ b/libs/sort @@ -0,0 +1 @@ +Subproject commit cb7df6bcb652ab2120971e7cc522fcf06975afa3 diff --git a/libs/spirit b/libs/spirit index 418fd94ddb3b..ba5026b191fb 160000 --- a/libs/spirit +++ b/libs/spirit @@ -1 +1 @@ -Subproject commit 418fd94ddb3b631948297546f450a1d37a37bf08 +Subproject commit ba5026b191fbbea77d25609406b89ae678817cb9 diff --git a/libs/stacktrace b/libs/stacktrace new file mode 160000 index 000000000000..dc5cd9d1f393 --- /dev/null +++ b/libs/stacktrace @@ -0,0 +1 @@ +Subproject commit dc5cd9d1f393299e5210d0acb92e97bf455e5e9a diff --git a/libs/statechart b/libs/statechart index b5707cd40948..586445b824c5 160000 --- a/libs/statechart +++ b/libs/statechart @@ -1 +1 @@ -Subproject commit b5707cd4094867c4d592f0fd81abc3f39a957c9f +Subproject commit 586445b824c5cf0e7e6ce4ff2df620fda5d0f0d7 diff --git a/libs/static_assert b/libs/static_assert index e910489e163d..45eec41c293b 160000 --- a/libs/static_assert +++ b/libs/static_assert @@ -1 +1 @@ -Subproject commit e910489e163dfcd8ffb68949511cf329e54879e5 +Subproject commit 45eec41c293bc5cd36ec3ed83671f70bc1aadc9f diff --git a/libs/static_string b/libs/static_string new file mode 160000 index 000000000000..175f467a0384 --- /dev/null +++ b/libs/static_string @@ -0,0 +1 @@ +Subproject commit 175f467a03841662c0aac7442978245b977fecf9 diff --git a/libs/stl_interfaces b/libs/stl_interfaces new file mode 160000 index 000000000000..510eb431fbf6 --- /dev/null +++ b/libs/stl_interfaces @@ -0,0 +1 @@ +Subproject commit 510eb431fbf64e98b6870468aa523dd4c6a6c69a diff --git a/libs/sync b/libs/sync index 88da98e37b95..e3b397214fc8 160000 --- a/libs/sync +++ b/libs/sync @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit e3b397214fc87e0f9802c6140e7af4ce68bdbb80 diff --git a/libs/system b/libs/system index 322e46fc4921..b0ef682e3d94 160000 --- a/libs/system +++ b/libs/system @@ -1 +1 @@ -Subproject commit 322e46fc4921a75f27642897fe1f8fd4683adaed +Subproject commit b0ef682e3d94f98478c00513ea7819f384a36f83 diff --git a/libs/test b/libs/test index 704e7cb51674..a6063692a714 160000 --- a/libs/test +++ b/libs/test @@ -1 +1 @@ -Subproject commit 704e7cb5167445dae9df796982d94ae8fda56d9b +Subproject commit a6063692a714d87584e9b9a940a8633b8cb6479a diff --git a/libs/thread b/libs/thread index 0439d5370475..d0264d6813d9 160000 --- a/libs/thread +++ b/libs/thread @@ -1 +1 @@ -Subproject commit 0439d537047532ad10692451ff3c21a4be89e633 +Subproject commit d0264d6813d9668aa4803b2d9f303538a5f5eb29 diff --git a/libs/throw_exception b/libs/throw_exception new file mode 160000 index 000000000000..23dd41e920ec --- /dev/null +++ b/libs/throw_exception @@ -0,0 +1 @@ +Subproject commit 23dd41e920ecd91237500ac6428f7d392a7a875c diff --git a/libs/timer b/libs/timer index 9e83237560b2..85b2642a42e5 160000 --- a/libs/timer +++ b/libs/timer @@ -1 +1 @@ -Subproject commit 9e83237560b2ebfa7669a0bfc78fc2c6cb308fb3 +Subproject commit 85b2642a42e55706c98fd5227be162747547aea5 diff --git a/libs/tokenizer b/libs/tokenizer index 8355a34b812b..90106f155bd7 160000 --- a/libs/tokenizer +++ b/libs/tokenizer @@ -1 +1 @@ -Subproject commit 8355a34b812b2b37023766ec231f8a884b838c13 +Subproject commit 90106f155bd72b62aaca0d9ad826f4132030dba0 diff --git a/libs/tr1 b/libs/tr1 deleted file mode 160000 index 6e2f04c73d17..000000000000 --- a/libs/tr1 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6e2f04c73d17adcad46ed938bb339c432f3cf69f diff --git a/libs/tti b/libs/tti index 88da98e37b95..03734c54a51b 160000 --- a/libs/tti +++ b/libs/tti @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 03734c54a51b6372ac3296d2fe5103b7360bcd3f diff --git a/libs/tuple b/libs/tuple index f904cd5d6994..b67941dd7d03 160000 --- a/libs/tuple +++ b/libs/tuple @@ -1 +1 @@ -Subproject commit f904cd5d6994fe480183dddb9e9ef380afbc979d +Subproject commit b67941dd7d03536a854b96f001954792311ab515 diff --git a/libs/type_erasure b/libs/type_erasure index 88da98e37b95..729f3e739abc 160000 --- a/libs/type_erasure +++ b/libs/type_erasure @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 729f3e739abc65d36d46df470c5bab735599d042 diff --git a/libs/type_index b/libs/type_index new file mode 160000 index 000000000000..29ab3258a732 --- /dev/null +++ b/libs/type_index @@ -0,0 +1 @@ +Subproject commit 29ab3258a73215c67598383696c927887fc0cfeb diff --git a/libs/type_traits b/libs/type_traits index 104afb9ba464..1ebd31e60eab 160000 --- a/libs/type_traits +++ b/libs/type_traits @@ -1 +1 @@ -Subproject commit 104afb9ba4642fe52b8b5fa032a1619731ccd113 +Subproject commit 1ebd31e60eab91bd8bdc586d8df00586ecfb53e4 diff --git a/libs/typeof b/libs/typeof index b46f8efd6b4a..8c654f75a36a 160000 --- a/libs/typeof +++ b/libs/typeof @@ -1 +1 @@ -Subproject commit b46f8efd6b4a1bdc49aaaebdc7f87eff3c8b082e +Subproject commit 8c654f75a36a4a2cdbc1f79f4e120e1fba856ac4 diff --git a/libs/units b/libs/units index 8f866ba0de37..45787015dd8c 160000 --- a/libs/units +++ b/libs/units @@ -1 +1 @@ -Subproject commit 8f866ba0de374edd1e435abe8e0360e4078a24bb +Subproject commit 45787015dd8c11653eb988260acf05c4af9d42e5 diff --git a/libs/unordered b/libs/unordered index a4750fbdba39..44b669a71c95 160000 --- a/libs/unordered +++ b/libs/unordered @@ -1 +1 @@ -Subproject commit a4750fbdba398475ff8fb48e46732fc2dfe2cf05 +Subproject commit 44b669a71c9565a592187c31b392d59dc393fe9d diff --git a/libs/url b/libs/url new file mode 160000 index 000000000000..1dc789839f34 --- /dev/null +++ b/libs/url @@ -0,0 +1 @@ +Subproject commit 1dc789839f34f9a13451c3aaa5bf4cacec04fd78 diff --git a/libs/utility b/libs/utility index 7d23c75eefb4..a95a4f6580c6 160000 --- a/libs/utility +++ b/libs/utility @@ -1 +1 @@ -Subproject commit 7d23c75eefb4597f66fd34c31be2740ffa25a2a6 +Subproject commit a95a4f6580c65be5861cf4c40dbf9ed64a344ee6 diff --git a/libs/uuid b/libs/uuid index f8b764edf0eb..2bc0c8e71677 160000 --- a/libs/uuid +++ b/libs/uuid @@ -1 +1 @@ -Subproject commit f8b764edf0eb272129abe5abbb9cf11ca7b9fcc7 +Subproject commit 2bc0c8e71677f387afdc09bc4f8d609d2c74e80e diff --git a/libs/variant b/libs/variant index e5547f95bcdb..9d1e62f33cf7 160000 --- a/libs/variant +++ b/libs/variant @@ -1 +1 @@ -Subproject commit e5547f95bcdb39f203cef99356d4262323427e0e +Subproject commit 9d1e62f33cf75486fc12ab11aca9a3036623119e diff --git a/libs/variant2 b/libs/variant2 new file mode 160000 index 000000000000..a5cb0582d566 --- /dev/null +++ b/libs/variant2 @@ -0,0 +1 @@ +Subproject commit a5cb0582d5669e86ee913f97c001677987023967 diff --git a/libs/vmd b/libs/vmd new file mode 160000 index 000000000000..34cad2c1a574 --- /dev/null +++ b/libs/vmd @@ -0,0 +1 @@ +Subproject commit 34cad2c1a574d445812c7c2432d3a5a5c843b412 diff --git a/libs/wave b/libs/wave index 5cd2912a6f51..61abf8b6b98d 160000 --- a/libs/wave +++ b/libs/wave @@ -1 +1 @@ -Subproject commit 5cd2912a6f51a0997f7664774d31efef0a34840f +Subproject commit 61abf8b6b98d8937515a4eddf6d0d7274921dcda diff --git a/libs/winapi b/libs/winapi new file mode 160000 index 000000000000..02b4161832e7 --- /dev/null +++ b/libs/winapi @@ -0,0 +1 @@ +Subproject commit 02b4161832e7ca5f78e996967a793120e36b22dc diff --git a/libs/xpressive b/libs/xpressive index 1ac8cf17d195..4679fbd23f96 160000 --- a/libs/xpressive +++ b/libs/xpressive @@ -1 +1 @@ -Subproject commit 1ac8cf17d1950035ea878f0249c918bc4af83911 +Subproject commit 4679fbd23f962bfa78d44acf5fa48f6f790642c0 diff --git a/libs/yap b/libs/yap new file mode 160000 index 000000000000..ae49bf274458 --- /dev/null +++ b/libs/yap @@ -0,0 +1 @@ +Subproject commit ae49bf2744586e6bd6c0cedff4500a58a4386860 diff --git a/more b/more new file mode 160000 index 000000000000..80f38948abb0 --- /dev/null +++ b/more @@ -0,0 +1 @@ +Subproject commit 80f38948abb08ab606109678830a129403d16124 diff --git a/more/BoostSponsorshipAgreement.pdf b/more/BoostSponsorshipAgreement.pdf deleted file mode 100644 index ea8b838b2fda..000000000000 Binary files a/more/BoostSponsorshipAgreement.pdf and /dev/null differ diff --git a/more/blanket-permission.txt b/more/blanket-permission.txt deleted file mode 100644 index 6096aeac1c21..000000000000 --- a/more/blanket-permission.txt +++ /dev/null @@ -1,104 +0,0 @@ -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/getting_started.html b/more/getting_started.html deleted file mode 100644 index 62d669e763d2..000000000000 --- a/more/getting_started.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - -Automatically loading index page... if nothing happens, please go to -getting_started/index.html. - - - - - diff --git a/more/getting_started/Jamfile.v2 b/more/getting_started/Jamfile.v2 deleted file mode 100644 index 770aae934d67..000000000000 --- a/more/getting_started/Jamfile.v2 +++ /dev/null @@ -1,23 +0,0 @@ -# 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 : - - "--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 deleted file mode 100644 index 21f32aba72d6..000000000000 --- a/more/getting_started/detail/binary-head.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. 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 deleted file mode 100644 index 4d63c0884363..000000000000 --- a/more/getting_started/detail/build-from-source-head.rst +++ /dev/null @@ -1,122 +0,0 @@ -.. 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) - -Install Boost.Build -................... - -Boost.Build_ is a text-based system for developing, testing, and -installing software. First, you'll need to build and -install it. To do this: - -1. Go to the directory ``tools``\ |/|\ ``build``\ |/|\ ``v2``\ |/|. -2. Run ``bootstrap.bat`` -3. Run ``bjam install --prefix=``\ *PREFIX* where *PREFIX* is - the directory where you want Boost.Build to be installed -4. Add *PREFIX*\ |/|\ ``bin`` to your PATH environment variable. - -.. _Boost.Build: ../../tools/build/index.html -.. _Boost.Build documentation: Boost.Build_ - -.. _toolset: -.. _toolset-name: - -Identify Your Toolset -..................... - -First, find the toolset corresponding to your compiler in the -following table (an up-to-date list is always available `in the -Boost.Build documentation`__). - -__ http://www.boost.org/boost-build2/doc/html/bbv2/reference/tools.html - -.. 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/bbv2/installation.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 | | -+-----------+--------------------+-----------------------------+ -|``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 - -For a complete description of these and other invocation options, -please see the `Boost.Build documentation`__. - -__ http://www.boost.org/boost-build2/doc/html/bbv2/advanced/invocation.html - diff --git a/more/getting_started/detail/build-from-source-tail.rst b/more/getting_started/detail/build-from-source-tail.rst deleted file mode 100644 index 78035c3c7b31..000000000000 --- a/more/getting_started/detail/build-from-source-tail.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. 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``\ |/|\ ``lib``\ |/| subdirectory of -the Boost tree. To use a different directory pass the -``--stagedir=``\ *directory* option to ``bjam``. - -.. 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. - -.. Note:: Boost.Build can produce a great deal of output, which can - make it easy to miss problems. If you want to make sure - everything is went well, you might redirect the output into a - file by appending “``>build.log 2>&1``” to your 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 -`here`__. 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`_. - -__ http://www.boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html diff --git a/more/getting_started/detail/build-simple-head.rst b/more/getting_started/detail/build-simple-head.rst deleted file mode 100644 index 487610e344c0..000000000000 --- a/more/getting_started/detail/build-simple-head.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. 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 - #include - #include - #include - - int main() - { - using namespace boost::lambda; - typedef std::istream_iterator 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 deleted file mode 100644 index 980600b719c5..000000000000 --- a/more/getting_started/detail/common-footnotes.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. 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 deleted file mode 100644 index 09ad5d88cdb6..000000000000 --- a/more/getting_started/detail/common-unix.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. 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 - -.. |pathsep| replace:: colon - -.. |path| replace:: ``echo $PATH`` - -.. include:: common.rst diff --git a/more/getting_started/detail/common-windows.rst b/more/getting_started/detail/common-windows.rst deleted file mode 100644 index 75ba004dea60..000000000000 --- a/more/getting_started/detail/common-windows.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. 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`_ - -.. |pathsep| replace:: semicolon - -.. |path| replace:: ``PATH`` - -.. include:: common.rst diff --git a/more/getting_started/detail/common.rst b/more/getting_started/detail/common.rst deleted file mode 100644 index 591c05b175fd..000000000000 --- a/more/getting_started/detail/common.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. 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 deleted file mode 100644 index 2c439e143ad2..000000000000 --- a/more/getting_started/detail/conclusion.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. 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 Users' mailing list`_ -* `Boost.Build mailing list`_ -* `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 Users' mailing list: http://www.boost.org/more/mailing_lists.htm#users -.. _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 deleted file mode 100644 index 708dfd1ab65d..000000000000 --- a/more/getting_started/detail/distro.rst +++ /dev/null @@ -1,88 +0,0 @@ -.. 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 - - 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 deleted file mode 100644 index 770d46eae3de..000000000000 --- a/more/getting_started/detail/errors-and-warnings.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. 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 deleted file mode 100644 index d70fd2c8d001..000000000000 --- a/more/getting_started/detail/header-only.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. 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.GraphParallel_ -* Boost.IOStreams_ -* Boost.MPI_ -* Boost.ProgramOptions_ -* Boost.Python_ (see the `Boost.Python build documentation`__ - before building and installing it) -* Boost.Regex_ -* Boost.Serialization_ -* Boost.Signals_ -* Boost.System_ -* 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.Math_ has binary components for the TR1 and C99 - cmath functions. - -* Boost.Random_ has a binary component which is only needed if - you're using ``random_device``. - -* 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 deleted file mode 100644 index 63854ab39801..000000000000 --- a/more/getting_started/detail/library-naming.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. 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: |Boost.Build option | - +=====+==============================================================================+=====================+ - |``s``|linking statically to the C++ standard library and compiler runtime support |runtime-link=static | - | |libraries. | | - +-----+------------------------------------------------------------------------------+---------------------+ - |``g``|using debug versions of the standard and runtime support libraries. |runtime-debugging=on | - +-----+------------------------------------------------------------------------------+---------------------+ - |``y``|using a special `debug build of Python`__. |python-debugging=on | - +-----+------------------------------------------------------------------------------+---------------------+ - |``d``|building a debug version of your code. [#debug-abi]_ |variant=debug | - +-----+------------------------------------------------------------------------------+---------------------+ - |``p``|using the STLPort standard library rather than the default one supplied with |stdlib=stlport | - | |your compiler. | | - +-----+------------------------------------------------------------------------------+---------------------+ - - 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 ``.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 deleted file mode 100644 index c4a59958bed0..000000000000 --- a/more/getting_started/detail/link-head.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. 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 - #include - #include - - 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 deleted file mode 100644 index d760294b79f6..000000000000 --- a/more/getting_started/detail/links.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. 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.GraphParallel: ../../libs/graph_parallel/index.html -.. _Boost.IOStreams: ../../libs/iostreams/index.html -.. _Boost.Math: ../../libs/math/index.html -.. _Boost.MPI: ../../libs/mpi/index.html -.. _Boost.ProgramOptions: ../../libs/program_options/index.html -.. _Boost.Python: ../../libs/python/doc/building.html -.. _Boost.Random: ../../libs/random/index.html -.. _Boost.Regex: ../../libs/regex/index.html -.. _Boost.Serialization: ../../libs/serialization/index.html -.. _Boost.Signals: ../../libs/signals/index.html -.. _Boost.System: ../../libs/system/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 deleted file mode 100644 index f8ef9cfd2d58..000000000000 --- a/more/getting_started/detail/release-variables.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. 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.46.1 -.. |boost_ver| replace:: ``boost_1_46_1`` -.. |boost_ver-bold| replace:: **boost_1_46_1** - -.. _sf-download: http://www.boost.org/users/history/version_1_46_1.html diff --git a/more/getting_started/detail/test-head.rst b/more/getting_started/detail/test-head.rst deleted file mode 100644 index 90e1ce7557ba..000000000000 --- a/more/getting_started/detail/test-head.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. 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 deleted file mode 100644 index f82b1e4367e3..000000000000 --- a/more/getting_started/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - -Boost Getting Started - - - -
    -

    Getting Started

    - - - - -
    -

    Use the latest version of this Getting Started guide

    -

    The Boost website version of this Getting Started guide may -have updated 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.

    -
    -
    -

    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:

    -
    -$ 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!

    -
    -
    - - - diff --git a/more/getting_started/index.rst b/more/getting_started/index.rst deleted file mode 100644 index 7585d5300ad3..000000000000 --- a/more/getting_started/index.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. 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 updated 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/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 deleted file mode 100644 index ee464463f42d..000000000000 --- a/more/getting_started/unix-variants.html +++ /dev/null @@ -1,811 +0,0 @@ - - - - - - -Boost Getting Started on Unix Variants - - - - -
    -

    Getting Started on Unix Variants

    - - - - - - -
    -

    1   Get Boost

    -

    The most reliable way to get a copy of Boost is to download a -distribution from SourceForge:

    -
      -
    1. Download boost_1_46_1.tar.bz2.

      -
    2. -
    3. In the directory where you want to put the Boost installation, -execute

      -
      -tar --bzip2 -xf /path/to/boost_1_46_1.tar.bz2
      -
      -
    4. -
    -
    -

    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.1 If you have -any trouble, we suggest using an official Boost distribution -from SourceForge.

    -
    - - - -
    -
    -

    2   The Boost Distribution

    -

    This is a sketch of the resulting directory structure:

    -
    -boost_1_46_1/ .................The “boost root directory”
    -   index.htm .........A copy of www.boost.org starts here
    -   boost/ .........................All Boost Header files
    -    
    -   libs/ ............Tests, .cpps, 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
    -
    - -

    It's important to note the following:

    -
      -
    1. The path to the boost root directory (often /usr/local/boost_1_46_1) is -sometimes referred to as $BOOST_ROOT in documentation and -mailing lists .

      -
    2. -
    3. To compile anything in Boost, you need a directory containing -the boost/ subdirectory in your #include path.

      -
    4. -
    5. 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:

      -
      -#include <boost/whatever.hpp>
      -
      -

      or

      -
      -#include "boost/whatever.hpp"
      -
      -

      depending on your preference regarding the use of angle bracket -includes.

      -
    6. -
    7. 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.

      -
    8. -
    - - - -
    -
    -

    3   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.

    -
    -

    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.

    -
    - -

    The only Boost libraries that must be built separately are:

    - -

    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.Math has binary components for the TR1 and C99 -cmath functions.
    • -
    • Boost.Random has a binary component which is only needed if -you're using random_device.
    • -
    • Boost.Test can be used in “header-only” or “separately compiled” -mode, although separate compilation is recommended for serious -use.
    • -
    - - - -
    -
    -

    4   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.

    -

    Now, in the directory where you saved example.cpp, issue the -following command:

    -
    -c++ -I path/to/boost_1_46_1 example.cpp -o example
    -
    -

    To test the result, type:

    -
    -echo 1 2 3 | ./example
    -
    - - - -
    -

    4.1   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.3 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.

    - - - -
    -
    -
    -

    5   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.

    -
    -

    5.1   Easy Build and Install

    -

    Issue the following commands in the shell (don't type $; that -represents the shell's prompt):

    -
    -$ cd path/to/boost_1_46_1
    -$ ./bootstrap.sh --help
    -
    -

    Select your configuration options and invoke ./bootstrap.sh 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

    -
    -$ ./bootstrap.sh --prefix=path/to/installation/prefix
    -
    -

    to install somewhere else. Also, consider using the ---show-libraries and --with-libraries=library-name-list options to limit the -long wait you'll experience if you build everything. Finally,

    -
    -$ ./bjam 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.

    -

    skip to the next step

    -
    -
    -

    5.2   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).

    -
    -

    Boost.CMake

    -

    There is also an experimental CMake build for boost, supported and distributed -separately. See the Boost.CMake wiki page for more information.

    -
    - - - -
    -

    5.2.1   Install Boost.Build

    -

    Boost.Build is a text-based system for developing, testing, and -installing software. First, you'll need to build and -install it. To do this:

    -
      -
    1. Go to the directory tools/build/v2/.
    2. -
    3. Run bootstrap.bat
    4. -
    5. Run bjam install --prefix=PREFIX where PREFIX is -the directory where you want Boost.Build to be installed
    6. -
    7. Add PREFIX/bin to your PATH environment variable.
    8. -
    -
    -
    -

    5.2.2   Identify Your Toolset

    -

    First, find the toolset corresponding to your compiler in the -following table (an up-to-date list is always available in the -Boost.Build documentation).

    -
    -

    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.

    -
    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Toolset -NameVendorNotes
    accHewlett PackardOnly very recent versions are -known to work well with Boost
    borlandBorland 
    comoComeau ComputingUsing this toolset may -require configuring another -toolset to act as its backend
    cwMetrowerks/FreescaleThe CodeWarrior compiler. We -have not tested versions of -this compiler produced since -it was sold to Freescale.
    dmcDigital MarsAs of this Boost release, no -version of dmc is known to -handle Boost well.
    darwinApple ComputerApple's version of the GCC -toolchain with support for -Darwin and MacOS X features -such as frameworks.
    gccThe Gnu ProjectIncludes support for Cygwin -and MinGW compilers.
    hp_cxxHewlett PackardTargeted at the Tru64 -operating system.
    intelIntel 
    msvcMicrosoft 
    qccQNX Software Systems 
    sunSunOnly very recent versions are -known to work well with -Boost.
    vacppIBMThe VisualAge C++ compiler.
    -

    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.

    -
    -
    -

    5.2.3   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.

    -
    -
    -

    5.2.4   Invoke bjam

    -

    Change your current directory to the Boost root directory and -invoke bjam as follows:

    -
    -bjam --build-dir=build-directory toolset=toolset-name   stage
    -
    -

    For a complete description of these and other invocation options, -please see the Boost.Build documentation.

    -

    For example, your session might look like this:

    -
    -$ cd ~/boost_1_46_1
    -$ bjam --build-dir=/tmp/build-boost toolset=gcc stage
    -
    -

    That will build static and shared non-debug multi-threaded variants of the libraries. To build all variants, pass the additional option, “--build-type=complete”.

    - - - -

    Building the special stage target places Boost -library binaries in the stage/lib/ subdirectory of -the Boost tree. To use a different directory pass the ---stagedir=directory option to bjam.

    -
    -

    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.
    • -
    -
    -

    Note

    -

    Boost.Build can produce a great deal of output, which can -make it easy to miss problems. If you want to make sure -everything is went well, you might redirect the output into a -file by appending “>build.log 2>&1” to your command line.

    -
    -
    -
    -
    -

    5.3   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:

      -
      -toolset-name.c++ long/path/to/file/being/built
      -
      -
    • -
    • Compiler warnings.

      -
    • -
    -
    -
    -

    5.4   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.

    -

    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 -here. 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.

    - - - -
    -
    - -
    -

    7   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.

    - -
    -

    Onward

    -
    -

    Good luck, and have fun!

    -

    —the Boost Developers

    -
    -
    -
    - - - - - -
    [1]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.
    - - - - - -
    [2]That option is a dash followed by a lowercase “L” -character, which looks very much like a numeral 1 in some fonts.
    - - - - - - - - -
    [3]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.
    - - - - - -
    [4]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.
    - - - - - -
    [5]These libraries were compiled without optimization -or inlining, with full debug symbols enabled, and without -NDEBUG #defined. 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.
    - - - - - -
    [6]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/unix-variants.rst b/more/getting_started/unix-variants.rst deleted file mode 100644 index e80378884cfc..000000000000 --- a/more/getting_started/unix-variants.rst +++ /dev/null @@ -1,250 +0,0 @@ -.. 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| - **$** ./bootstrap.sh --help - -Select your configuration options and invoke ``./bootstrap.sh`` 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:: - - **$** ./bootstrap.sh **--prefix=**\ *path*\ /\ *to*\ /\ *installation*\ /\ *prefix* - -to install somewhere else. Also, consider using the -``--show-libraries`` and ``--with-libraries=``\ *library-name-list* options to limit the -long wait you'll experience if you build everything. Finally, - -.. parsed-literal:: - - **$** ./bjam 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). - -.. Admonition:: Boost.CMake - - There is also an experimental CMake build for boost, supported and distributed - separately. See the `Boost.CMake`_ wiki page for more information. - - .. _`Boost.CMake`: - https://svn.boost.org/trac/boost/wiki/CMake - -.. 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 variants of the libraries. To build all variants, pass the additional option, “``--build-type=complete``”. - -.. 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/stage/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/stage/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. - -.. |build-type-complete| replace:: `` `` - -.. 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 deleted file mode 100644 index aec46597783f..000000000000 --- a/more/getting_started/windows.html +++ /dev/null @@ -1,940 +0,0 @@ - - - - - - -Boost Getting Started on Windows - - - -
    -

    Getting Started on Windows

    - - - - -
    -

    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.

    -
    - -
    -

    1   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 Static Multithreaded variants of the Boost.Regex -binaries when given the option.

    -

    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_1_46_1.7z or boost_1_46_1.zip and unpack it to install a complete Boost -distribution.1

    - - - -
    -
    -

    2   The Boost Distribution

    -

    This is a sketch of the resulting directory structure:

    -
    -boost_1_46_1\ .................The “boost root directory”
    -   index.htm .........A copy of www.boost.org starts here
    -   boost\ .........................All Boost Header files
    -   lib\ .....................precompiled library binaries
    -   libs\ ............Tests, .cpps, 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
    -
    - -

    It's important to note the following:

    -
      -
    1. The path to the boost root directory (often C:\Program Files\boost\boost_1_46_1) is -sometimes referred to as $BOOST_ROOT in documentation and -mailing lists .

      -
    2. -
    3. To compile anything in Boost, you need a directory containing -the boost\ subdirectory in your #include path. 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.

      -
    4. -
    5. 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:

      -
      -#include <boost/whatever.hpp>
      -
      -

      or

      -
      -#include "boost/whatever.hpp"
      -
      -

      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 -#include directives; your compiler doesn't care.

      -
    6. -
    7. 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.

      -
    8. -
    - - - -
    -
    -

    3   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.

    -
    -

    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.

    -
    - -

    The only Boost libraries that must be built separately are:

    - -

    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.Math has binary components for the TR1 and C99 -cmath functions.
    • -
    • Boost.Random has a binary component which is only needed if -you're using random_device.
    • -
    • Boost.Test can be used in “header-only” or “separately compiled” -mode, although separate compilation is recommended for serious -use.
    • -
    - - - -
    -
    -

    4   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.

    -
    -

    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.

    -
    - -
    -

    4.1   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

      -
      -

      C:\Program Files\boost\boost_1_46_1

      -
      -
    • -
    • In Configuration Properties > C/C++ > Precompiled Headers, change -Use Precompiled Header (/Yu) to Not Using Precompiled -Headers.3

      -
    • -
    • 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.

    -

    skip to the next step

    -
    -
    -

    4.2   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:

    -
    -cl /EHsc /I path\to\boost_1_46_1 path\to\example.cpp
    -
    -

    To test the result, type:

    -
    -echo 1 2 3 | example
    -
    - - - -
    -
    -

    4.3   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.5 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.

    - - - -
    -
    -
    -

    5   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.

    -
    -

    5.1   Install Visual Studio Binaries

    -

    The installers supplied by BoostPro Computing will download and -install pre-compiled binaries into the lib\ subdirectory of the -boost root, typically C:\Program Files\boost\boost_1_46_1\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.

    -

    skip to the next step

    -
    -
    -

    5.2   Or, Simplified Build From Source

    -

    If you wish to build from source with Visual C++, you can use a -simple build procedure described in this section. Open the command prompt -and change your current directory to the Boost root directory. Then, type -the following commands:

    -
    -bootstrap
    -.\bjam
    -
    -

    The first command prepares the Boost.Build system for use. The second -command invokes Boost.Build to build the separately-compiled Boost -libraries. Please consult the Boost.Build documentation for a list -of options that can be passed to bjam.

    -
    -
    -

    5.3   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.

    -
    -

    Boost.CMake

    -

    There is also an experimental CMake build for boost, supported and distributed -separately. See the Boost.CMake wiki page for more information.

    -
    - - - -
    -

    5.3.1   Install Boost.Build

    -

    Boost.Build is a text-based system for developing, testing, and -installing software. First, you'll need to build and -install it. To do this:

    -
      -
    1. Go to the directory tools\build\v2\.
    2. -
    3. Run bootstrap.bat
    4. -
    5. Run bjam install --prefix=PREFIX where PREFIX is -the directory where you want Boost.Build to be installed
    6. -
    7. Add PREFIX\bin to your PATH environment variable.
    8. -
    -
    -
    -

    5.3.2   Identify Your Toolset

    -

    First, find the toolset corresponding to your compiler in the -following table (an up-to-date list is always available in the -Boost.Build documentation).

    -
    -

    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.

    -
    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Toolset -NameVendorNotes
    accHewlett PackardOnly very recent versions are -known to work well with Boost
    borlandBorland 
    comoComeau ComputingUsing this toolset may -require configuring another -toolset to act as its backend
    cwMetrowerks/FreescaleThe CodeWarrior compiler. We -have not tested versions of -this compiler produced since -it was sold to Freescale.
    dmcDigital MarsAs of this Boost release, no -version of dmc is known to -handle Boost well.
    darwinApple ComputerApple's version of the GCC -toolchain with support for -Darwin and MacOS X features -such as frameworks.
    gccThe Gnu ProjectIncludes support for Cygwin -and MinGW compilers.
    hp_cxxHewlett PackardTargeted at the Tru64 -operating system.
    intelIntel 
    msvcMicrosoft 
    qccQNX Software Systems 
    sunSunOnly very recent versions are -known to work well with -Boost.
    vacppIBMThe VisualAge C++ compiler.
    -

    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. 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.

    -
    -
    -

    5.3.3   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.

    -
    -
    -

    5.3.4   Invoke bjam

    -

    Change your current directory to the Boost root directory and -invoke bjam as follows:

    -
    -bjam --build-dir=build-directory toolset=toolset-name --build-type=complete stage
    -
    -

    For a complete description of these and other invocation options, -please see the Boost.Build documentation.

    -

    For example, your session might look like this:4

    -
    -C:\WINDOWS> cd C:\Program Files\boost\boost_1_46_1
    -C:\Program Files\boost\boost_1_46_1> bjam ^
    -More? --build-dir="C:\Documents and Settings\dave\build-boost" ^
    -More? --build-type=complete msvc stage
    -
    -

    Be sure to read this note about the appearance of ^, -More? and quotation marks (") in that line.

    -

    The option “--build-type=complete” causes bjam to build -all supported variants of the libraries. For instructions on how to -build only specific variants, please ask on the Boost.Build mailing -list.

    - - - -

    Building the special stage target places Boost -library binaries in the stage\lib\ subdirectory of -the Boost tree. To use a different directory pass the ---stagedir=directory option to bjam.

    -
    -

    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.
    • -
    -
    -

    Note

    -

    Boost.Build can produce a great deal of output, which can -make it easy to miss problems. If you want to make sure -everything is went well, you might redirect the output into a -file by appending “>build.log 2>&1” to your command line.

    -
    -
    -
    -
    -

    5.4   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:

      -
      -toolset-name.c++ long/path/to/file/being/built
      -
      -
    • -
    • Compiler warnings.

      -
    • -
    -
    -
    -

    5.5   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.

    -

    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 -here. 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.

    - - - -
    -
    - -
    -

    7   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.

    - -
    -

    Onward

    -
    -

    Good luck, and have fun!

    -

    —the Boost Developers

    -
    -
    -
    - - - - - -
    [1]We recommend -downloading boost_1_46_1.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.
    - - - - - -
    [2]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.
    - - - - - -
    [3]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.
    - - - - - -
    [4]

    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

    -
    ---build-dir="C:\Documents_and_Settings\dave\build-boost"
    -
    -

    Also, for example, you can't add spaces around the = sign as in

    -
    ---build-dir_=_"C:\Documents and Settings\dave\build-boost"
    -
    -
    - - - - - - - - -
    [5]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.
    - - - - - -
    [6]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.
    - - - - - -
    [7]These libraries were compiled without optimization -or inlining, with full debug symbols enabled, and without -NDEBUG #defined. 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.
    - - - - - -
    [8]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/windows.rst b/more/getting_started/windows.rst deleted file mode 100644 index 280373cfe736..000000000000 --- a/more/getting_started/windows.rst +++ /dev/null @@ -1,386 +0,0 @@ -.. 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 Static Multithreaded variants of the Boost.Regex_ -binaries when given the option. - -.. _`Boost website version of this Getting Started guide`: - http://www.boost.org/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 supplied by BoostPro Computing 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, Simplified Build From Source --------------------------------- - -If you wish to build from source with Visual C++, you can use a -simple build procedure described in this section. Open the command prompt -and change your current directory to the Boost root directory. Then, type -the following commands:: - - bootstrap - .\bjam - -The first command prepares the Boost.Build system for use. The second -command invokes Boost.Build to build the separately-compiled Boost -libraries. Please consult the `Boost.Build documentation`__ for a list -of options that can be passed to ``bjam``. - -__ http://www.boost.org/boost-build2/doc/html/bbv2/overview/invocation.html - -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. - -.. Admonition:: Boost.CMake - - There is also an experimental CMake build for boost, supported and distributed - separately. See the `Boost.CMake`_ wiki page for more information. - - .. _`Boost.CMake`: - https://svn.boost.org/trac/boost/wiki/CMake - -.. 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? **--build-type=complete** **msvc** stage - -Be sure to read `this note`__ about the appearance of ``^``, -``More?`` and quotation marks (``"``) in that line. - -The option “\ **--build-type=complete**\ ” causes ``bjam`` to build -all supported variants of the libraries. For instructions on how to -build only specific variants, please ask on the `Boost.Build mailing -list`_. - -__ 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:`"`\ C:\\Documents\ :raw-html:`_`\ and\ :raw-html:`_`\ Settings\\dave\\build-boost\ \ :raw-html:`"` - - Also, for example, you can't add spaces around the ``=`` sign as in - - .. parsed-literal:: - - --build-dir\ :raw-html:`_`\ =\ :raw-html:`_`\ "C:\\Documents and Settings\\dave\\build-boost" - -.. |boost.zip| replace:: |boost_ver|\ ``.zip`` - -.. _`boost.zip`: `sf-download`_ - -.. |build-type-complete| replace:: **--build-type=complete** - -.. 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 deleted file mode 100644 index 849239938689..000000000000 --- a/more/index.htm +++ /dev/null @@ -1,102 +0,0 @@ - - - - Boost More Information - - - - - - - - - - - - -
    - - boost.png (6897 bytes) - More Info -
    - - - - - -
    Getting Started    -       - Libraries    -       Tools    -      Web Site    -      News    -     Community    -      - FAQ 
    - -

    Boost Policies

    -
    -

    Mailing List Discussion Policy.  - What's acceptable and what isn't.

    -

    Library Requirements and Guidelines.  - Basic standards for those preparing a submission.

    -

    - Guidelines for Libraries with Separate - Source.  Basic tutorial for libraries that require the - building of a separate link library.

    -

    Writing Documentation for Boost Basic guidelines for writing documentation and templates for quickly generating - documentation that follows the guidelines.

    -

    Test Policies and Protocols.  - What tests must be in place for a Boost library.

    -

    Library Submission Process.  - How to submit a library to Boost.

    -

    Library Formal Review Process. - Including how to submit a review comment.

    -

    Header Policy.  Headers are where a - library contacts its users, so programming practices are particularly - important.

    -

    Library Reuse.  Should Boost - libraries use other boost libraries?  What about the C++ Standard - Library?  It's another trade-off.

    -

    Moderators.  Who they are and what - they do.

    -
    -

    Boost Whatever

    -
    -

    License Information  Information - about the Boost Software License.

    -

    Bibliography  Print and online - publications relating to Boost and Boost libraries.

    -

    Who's Using Boost?   - Products and organizations that are using Boost.

    -

    Formal Review Schedule  - Future, current, and recently past Formal Reviews.

    -

    Proposal for a C++ Library Repository Web Site  - The original 1998 proposal that launched Boost.

    -

    How to report bugs  Ways to report Boost - bugs.

    -

    How to request features Ways - to request new library features.

    -
    -

    Articles and Papers

    -
    -

    - Coding Guidelines for Integral Constant - Expressions describes how to work through the maze of - compiler related bugs surrounding this tricky topic.

    -
    -
    -

    - Revised - 13 March, 2008

    -

    - � 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) -

    - - \ No newline at end of file diff --git a/more/writingdoc/design.html b/more/writingdoc/design.html deleted file mode 100644 index cb47fef187ec..000000000000 --- a/more/writingdoc/design.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - - - - Writing Documentation for Boost - HTML Design - - - - - - - - - -
    -

    C++ Boost

    -
    -

    Writing Documentation for Boost

    - -

    HTML Design

    -
    -
    - -
    -
    Introduction
    - -
    Common Pages Included in HTML - Documentation
    - -
    -
    -
    Index
    - -
    Overview
    - -
    Definitions
    - -
    Rationale
    - -
    Configuration Information
    - -
    Frequently Asked Questions
    - -
    Bibliography
    - -
    Acknowledgment
    - -
    Header Reference
    -
    -
    - -
    Layout
    - -
    -
    -
    Page Banner
    - -
    Page Index
    - -
    Documentation Content
    - -
    -
    -
    Footnotes
    -
    -
    - -
    Revision Information
    - -
    Copyright Information
    -
    -
    - -
    Format
    - -
    -
    -
    Cascading Style Sheets
    - -
    -
    -
    Boost Style Sheet
    -
    -
    -
    -
    - -
    Templates
    - -
    -
    -
    Index Page Template
    - -
    Overview Page Template
    - -
    Definitions Page - Template
    - -
    Rationale Page Template
    - -
    Configuration Page - Template
    - -
    FAQ (Frequently Asked Questions) Page - Template
    - -
    Bibliography Page - Template
    - -
    Acknowledgments Page - Template
    - -
    Header Page Template
    -
    -
    -
    - -

    Introduction

    - -

    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.

    - -

    In several places this document assumes you're writing the documentation - to conform to the structure described in the Documentation Structure 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.

    - -

    This document also contains links to HTML template - files that can be used to rapidly develop documentation for a library - submission. These templates follow the guidelines presented here and in the - Documentation Structure document.

    - -

    Common Pages Included in - HTML Documentation

    - -

    Most HTML documentation projects will contain some common pages. General - guidelines for these common pages are provided below.

    - -

    Index

    - -

    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 Page Index, 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 Documentation Structure) 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.

    - -

    The index list should generally be constructed using an HTML "definition - list" (<dl> and <dt> tags). A definition list has no bullets or - ordered specifications and produces a cleaner layout then an unordered list - (<ul> and <li> tags) or an ordered list (<ol> and - <li> tags). If you choose to use the common Boost Style Sheet you should add a - class="index" attribute/value pair to the <dl> tag.

    - -

    An Index page template is provided for - use.

    - -

    Overview

    - -

    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 - Rational Page.

    - -

    Like most content pages, the Overview page should include a Page Index.

    - -

    An Overview page template is provided - for use.

    - -

    Definitions

    - -

    The Definitions page is used to provide a list of definitions for terms - that a user may be unfamiliar with.

    - -

    The definition list should generally be constructed using an HTML - "definition list" (<dl> and <DT> tags). A definition list has - no bullets or ordered specifications and produces a cleaner layout then an - unordered list (<UL> and <li> tags) or an ordered list - (<ol> and <li> tags). If you choose to use the common Boost Style Sheet you should add a - class="definition" attribute/value pair to the <dl> - tag.

    - -

    Because this page's content should only contain a list of definitions, - it should not have a Page Index.

    - -

    A Definitions page template is - provided for use.

    - -

    Rationale

    - -

    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 Rationale rationale - in the general submission guidelines.

    - -

    Like most content pages, the Rationale page should include a Page Index.

    - -

    A Rationale page template is provided - for use.

    - -

    Configuration - Information

    - -

    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 - <boost/config.hpp>, macros used by library users to - detect platform configuration information and macros defined by library - users to configure library behavior.

    - -

    Like most content pages, the Overview page should include a Page Index.

    - -

    A Configuration page template is - provided for use.

    - -

    Frequently Asked Questions

    - -

    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.

    - -

    The Page Index 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.

    - -

    A Frequently Asked Questions page template - is provided for use.

    - -

    Bibliography

    - -

    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 here.

    - -

    Since the Bibliography page should contain only bibliographical - information there is no need for a Page - Index.

    - -

    A Bibliography page template is - provided for use.

    - -

    Acknowledgment

    - -

    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.

    - -

    Since the Acknowledgment page should contain only a list of - acknowledgment there is no need for a Page - Index.

    - -

    An Acknowledgments page template is provided for use.

    - -

    Header Reference

    - -

    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 Documentation Structure when writing the content for - these pages.

    - -

    Like most content pages, the Header Reference pages should include a - Page Index.

    - -

    A Header Reference page template is - provided for use.

    - -

    Layout

    - -

    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.

    - -

    Page Banner

    - -

    The Page Banner is located at the very top of a page and provides quick - information about the page contents. This includes the Boost logo, which - indicates to the reader that this page is part of the Boost web site, a - title for the documentation (generally the library name) and the page - title. The Boost logo should hyper link to the Boost home page on the index - page and to the index page on all other pages. This allows the user to - easily navigate through the Boost web site and through the documentation. - The <title> tag for the HTML page should consist of the documentation - title and the page title separated by a hyphen.

    - -

    The Page Banner should be separated from the rest of the page by the use - of an <hr> tag. This helps to clearly separate the actual content - from the title information and produces cleaner text.

    - -

    Page Index

    - -

    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.

    - -

    The index list should generally be constructed using an HTML "definition - list" (<dl> and <DT> tags). A definition list has no bullets or - ordered specifications and produces a cleaner layout then an unordered list - (<UL> and <li> tags) or an ordered list (<ol> and - <li> tags). If you choose to use the Boost Style Sheet you should add - a class="page-index" attribute/value pair to the <dl> - tag.

    - -

    Most pages should include a Page Index.

    - -

    Documentation Content

    - -

    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.

    - -

    Footnotes

    - -

    Footnotes may be used within a page's documentation. Within the - documentation content a footnote reference should take the form of a - footnote number in parentheses (the parentheses make it easier for the - reader to click on the hyper link) hyper linking to the actual footnote at - the bottom of the page's documentation content. You may either use the - <sup> tag to format such footnote numbers, or, preferably, you can - use a CSS style class in order to distinguish the number as a footnote - instead of as part of the actual text. If you choose to use the common - Boost Style Sheet, a footnote - class is defined for this purpose.

    - -

    Revision - Information

    - -

    At the bottom of every page should be some revision information - indicating when the page was last revised. This information should be - separated from the rest of the page above by an <hr> tag. The - following HTML code snippet can be used to track this revision information - (this code uses some server components that exist on the Boost web site to - automatically track revision dates with out the need for hand editing the - date text):

    -
    -<hr>
    -<p>Revised
    -  <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
    -  01 January, 2001
    -  <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
    -</p>
    -
    - -

    Copyright Information

    - -

    The very bottom of the page should contain any copyright information - that applies to the document.

    - -

    Format

    - -

    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.

    - -

    Code

    - -

    Code within the documentation should be placed within either - <code></code> or <pre></pre> tags. For code that's - placed inline with other text you use <code></code> tags, while - <pre></pre> tags are used for code "blocks". If a cascading - style sheet is used to specify formatting for these tags, a fixed width - sans serif font should be used. This insures that the code is easily - distinguishable from the rest of the text. It may also be beneficial to set - the style for <pre></pre> tags to indent the text, to help - separate code blocks from other structural HTML blocks. The Boost Style Sheet specifies formatting for these - tags.

    - -

    Note: "Code" includes variable names, function names, etc.

    - -

    Lists

    - -

    Lists should be constructed as unordered (<UL> and <li> - tags), ordered (<ol> and <li> tags) or definition (<dl> - and <DT> tags) lists in HTML. You use an unordered list when you need - a collection of items that don't have any kind of logical ordering, such as - a list of data types that are defined by the library and can be used for a - template argument. You use an ordered list when the collection of items - must be grouped in a logical ordering, such as when enumerating the steps - that an action logically performs. You use a definition list when the list - consists of not only items that have no logical ordering, but also contains - definitions/descriptions/etc. of the items. A good example of this is the - function specifications as described in Documentation Structure.

    - -

    Graphics

    - -

    Graphics should be used very sparingly, if at all. Graphic images - greatly effect the download time for many people, which can discourage - users from reading the documentation. If you need graphic images to help - illustrate something in your documentation consider supplying only a link - to the image within the documentation, instead of embedding it directly in - the text. If an image is going to be included in the text of the document - you should specify the image's size in the <img> tag, in order to - allow the user's browser to optimize the formatting of the text before the - image is loaded.

    - -

    Non-breaking - Spaces

    - -

    Non-breaking spaces (&nbsp;) should be avoided in HTML text. - Generally there are more appropriate ways to format the document, such as - using list constructs or specifying indentation as a style attribute or in - cascading style sheets.

    - -

    Cascading Style - Sheets

    - -

    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.

    - -

    Boost Style - Sheet

    - -

    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.

    - -

    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:

    - -
    -
    index Used for <dl> tags when writing index lists.
    - -
    page-index Used for <dl> tags when writing page index - lists.
    - -
    Footnote Used when writing Footnote numbers.
    - -
    function-semantics Used for <dl> tags when writing - function semantic lists.
    -
    - -

    Templates

    - -

    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 boost/libs/library/doc. They may need correcting if the - file will reside in some other location.

    - -

    Note: 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).

    - - -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2001 William E. Kempf

    - -

    Distributed under the 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/writingdoc/index.html b/more/writingdoc/index.html deleted file mode 100644 index 65143695651c..000000000000 --- a/more/writingdoc/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - Writing Documentation for Boost - - - - - - - - - -
    -

    -

    -
    -

    Writing Documentation for Boost

    - -

    Index

    -
    -
    - -

    Contents

    - -
    -
    Introduction
    - -
    Documentation Structure
    - -
    HTML Design
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2001 William E. Kempf

    - -

    Distributed under the 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/writingdoc/introduction.html b/more/writingdoc/introduction.html deleted file mode 100644 index 2928a9457a5f..000000000000 --- a/more/writingdoc/introduction.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - Writing Documentation for Boost - Introduction - - - - - - - - - -
    -

    C++ Boost

    -
    -

    Writing Documentation for Boost

    - -

    Introduction

    -
    -
    - -

    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.

    - -

    The section on Documentation Structure - 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).

    - -

    The section on HTML Design 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.

    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2001 William E. Kempf

    - -

    Distributed under the 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/writingdoc/structure.html b/more/writingdoc/structure.html deleted file mode 100644 index c38b554c7a06..000000000000 --- a/more/writingdoc/structure.html +++ /dev/null @@ -1,461 +0,0 @@ - - - - - - - - - Writing Documentation for Boost - Documentation Structure - - - - - - - - - -
    -

    C++ Boost

    -
    -

    Writing Documentation for Boost

    - -

    Documentation Structure

    -
    -
    - -
    -
    Introduction
    - -
    Standards Conforming - Documentation
    - -
    -
    -
    Document elements
    - -
    -
    -
    Summary
    - -
    Requirements
    - -
    Detailed specifications
    - -
    References to the Standard C++ - library
    - -
    References to the Standard C - library
    -
    -
    - -
    Other conventions
    - -
    -
    -
    Type descriptions
    -
    -
    -
    -
    - -
    More Information
    - -
    -
    -
    Function semantic - element explanations
    - -
    -
    -
    Requires
    - -
    Effects
    - -
    Postconditions
    - -
    Returns
    - -
    Throws
    - -
    Complexity
    - -
    Rationale
    -
    -
    -
    -
    - -
    Web Reference Documentation
    - -
    Footnotes
    -
    - -

    Introduction

    - -

    Boost does not require any specific documentation structure. - However, there are some important considerations that - influence content and structure. For example, many Boost - libraries wind up being proposed for inclusion in the C++ - Standard, so writing them initially with text suitable for - inclusion in the Standard may be helpful. Also, Boost library - documentation is often accessed via the World Wide Web, - including via search engines, so context is often important - for every page. Finally, Boost libraries should provide - additional documentation, such as introductory, tutorial, - example, and rationale content. With those things in mind, we - suggest the following guidelines for Boost library - documentation.

    - -

    Standards - Conforming Documentation

    - -

    The documentation structure required for the C++ Standard is - an effective way to describe the technical specifications for - a library. Although terse, that format is familiar to many - Boost users and is far more precise than most ad hoc formats. - The following description is based upon §17.3 of the - Standard. (Note that while final Standard proposals must - include full standardese wording, which the committee will - not do for you, that level of detail is not expected of Boost - library documentation.)

    - -

    Document elements

    - -

    Each document contains the following elements, as applicable(1):

    - - - -

    Summary

    - -

    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.

    - -

    Paragraphs labeled "Note(s):" or "Example(s):" are informative, other - paragraphs are normative.

    - -

    The summary and the detailed specifications are presented in the - order:

    - -
      -
    • Macros
    • - -
    • Values
    • - -
    • Types
    • - -
    • Classes
    • - -
    • Functions
    • - -
    • Objects
    • -
    - -

    Requirements

    - -

    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:

    - -
      -
    • Template arguments
    • - -
    • Derived classes
    • - -
    • Containers, iterators, and/or algorithms that meet an interface - convention
    • -
    - -

    Interface convention requirements are stated as generally as possible. - Instead of stating "class X has to define a member function - operator++()," the interface requires "for any object - x of class X, ++x is defined." That - is, whether the operator is a member is unspecified.

    - -

    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.

    - -

    Template argument requirements are sometimes referenced by name.

    - -

    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.(2)

    - -

    Detailed - specification

    - -

    The detailed specifications each contain the following elements:

    - -
      -
    • Name and brief description
    • - -
    • Synopsis (class definition or function prototype, as - appropriate)
    • - -
    • Restrictions on template arguments, if any
    • - -
    • Description of class invariants
    • - -
    • Description of function semantics
    • -
    - -

    Descriptions of class member functions follow the order (as - appropriate)(3):

    - -
      -
    • Constructor(s) and destructor
    • - -
    • Copying and assignment functions
    • - -
    • Comparison functions
    • - -
    • Modifier functions
    • - -
    • Observer functions
    • - -
    • Operators and other non-member functions
    • -
    - -

    Descriptions of function semantics contain the following elements (as - appropriate)(4):

    - -
    -
    Requires: the preconditions for - calling the function
    - -
    Effects: the actions performed by the - function
    - -
    Postconditions: the observable - results established by the function
    - -
    Returns: a description of the value(s) - returned by the function
    - -
    Throws: any exceptions thrown by the - function, and the conditions that would cause the exception
    - -
    Complexity: the time and/or space - complexity of the function
    - -
    Rationale: the rationale for the - function's design or existence
    -
    - -

    Complexity requirements specified in the library clauses are upper - bounds, and implementations that provide better complexity guarantees - satisfy the requirements.

    - -

    References to the C++ Standard - library

    - -

    References to the C Standard - library

    - -

    Other conventions

    - -

    These conventions are for describing implementation-defined types, and - member functions.

    - -

    Type descriptions

    - -

    The Requirements subclauses may describe names that are used to specify - constraints on template arguments.

    - -

    More Information

    - -

    Function semantic element - explanations

    - -

    The function semantic element description above is taken directly from the C++ standard, and - is quite terse. Here is a more detailed explanation of each of the - elements.

    - -

    Note the use of the <code> ... </code> font tag - to distinguish actual C++ usage from English prose.

    - -

    Requires

    - -

    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,

    -
    - 
    -void limit( int * p, int min, int max );
    -
    - -
    -
    Requires: p != 0 && min <= max
    -
    - -

    Requirements already enforced by the C++ language rules (such as the - type of arguments) are not repeated in Requires paragraphs.

    - -

    Effects

    - -

    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.

    - -

    If an effect is specified in one of the other elements, particularly - postconditions, returns, or throws, it is not also - described in the effects paragraph. Having only a single description - ensures that there is one and only one specification, and thus eliminates - the risk of divergence.

    - -

    Postconditions

    - -

    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:

    -
    - 
    -void make_zero_if_negative( int & x );
    -
    - -
    -
    Postcondition: x >= 0
    -
    - -

    Returns

    - -

    The value returned by the function, usually in the form of a C++ - expression. For example:

    -
    -int sum( int x, int y );
    -
    - -
    -
    Returns: x + y
    -
    - -

    Only specify the return value; the type is already dictated by C++ - language rules.

    - -

    Throws

    - -

    Specify both the type of exception thrown, and the condition that causes - the exception to be thrown. For example, the std::basic_string - class specifies:

    -
    - 
    -void resize(size_type n, charT c);
    -
    - -
    -
    Throws: length_error if n > - max_size().
    -
    - -

    Complexity

    - -

    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.

    - -

    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.

    - -

    Complexity is often specified in generalized "Big-O" - notation.

    - -

    Rationale

    - -

    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.

    - -

    Web Reference Documentation

    - -

    Boost library documentation is often accessed via the World - Web. Using search engines, a page deep in the reference - content could be viewed without any further context. - Therefore, it is helpful to add extra context, such as the - following, to each page:

    - -
      -
    • Describe the enclosing namespace or use fully scoped - identifiers. -
    • Document required headers for each type or function. -
    • Link to relevant tutorial information. -
    • Link to related example code. -
    • Include the library name. -
    • Include navigation elements to the beginning of the - documentation. -
    - -

    It is also useful to consider the effectiveness of a - description in search engines. Terse or cryptic descriptions - are less likely to help the curious find a relevant function - or type.

    - -

    Footnotes

    - -
    -
    (1) 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.
    - -
    (2) Although - in some cases the code is unambiguously the optimum implementation.
    - -
    (3) 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.
    - -
    (4) 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.
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2001 William E. Kempf

    - -

    Distributed under the 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/writingdoc/template/acknowledgments.html b/more/writingdoc/template/acknowledgments.html deleted file mode 100644 index 9a4995099c56..000000000000 --- a/more/writingdoc/template/acknowledgments.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - {{Library}} - Acknowledgments - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Acknowledgments

    -
    -
    - {{text}} -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/bibliography.html b/more/writingdoc/template/bibliography.html deleted file mode 100644 index 6704847df6f5..000000000000 --- a/more/writingdoc/template/bibliography.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - {{Library}} - Bibliography - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Bibliography

    -
    -
    - {{bibliographical information}} -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/configuration.html b/more/writingdoc/template/configuration.html deleted file mode 100644 index e32eff4c235d..000000000000 --- a/more/writingdoc/template/configuration.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - {{Library}} - Configuration - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Configuration

    -
    -
    - -
    -
    Introduction
    - -
    Application Defined Macros
    - -
    Public Library Defined Macros
    - -
    Library Defined Implementation - Macros
    -
    - -

    Introduction

    - -

    {{library}} uses several configuration macros in <boost/config.hpp>, - as well as configuration macros meant to be supplied by the application. - These macros are documented here.

    - -

    Application Defined - Macros

    - -

    These are the macros that may be defined by an application using - {{library}}.

    - - - - - - - - - - - - - - - - - - - -
    MacroMeaning
    {{macro}}{{meaning}}
    {{macro}}{{meaning}}
    - -

    Public Library - Defined Macros

    - -

    These macros are defined by {{library}} but are expected to be used by - application code.

    - - - - - - - - - - - - - - - - - - - -
    MacroMeaning
    {{macro}}{{meaning}}
    {{macro}}{{meaning}}
    - -

    Library Defined - Implementation Macros

    - -

    These macros are defined by {{library}} and are implementation details - of interest only to implementers.

    - - - - - - - - - - - - - - - - - - - -
    MacroMeaning
    {{macro}}{{meaning}}
    {{macro}}{{meaning}}
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/definitions.html b/more/writingdoc/template/definitions.html deleted file mode 100644 index 03fa3430c6b7..000000000000 --- a/more/writingdoc/template/definitions.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - {{Library}} - Definitions - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Definitions

    -
    -
    - -

    Contents

    - -
    -
    Introduction
    - -
    Definitions
    - -
    -
    -
    Term 1
    - -
    Term 2
    -
    -
    -
    -
    - -

    Introduction

    - -

    {{Introductory text}}

    - -

    Definitions

    - -
    -
    {{term}}: - {{definition}}
    - -
    {{term}}: - {{definition}}
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/faq.html b/more/writingdoc/template/faq.html deleted file mode 100644 index 7d30768fce5a..000000000000 --- a/more/writingdoc/template/faq.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - {{Library}} - FAQ - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Frequently Asked Questions (FAQs)

    -
    -
    - -
    -
    {{question}}
    - -
    {{question}}
    -
    - -

    {{question}}

    - -

    {{answer}}

    - -

    {{question}}

    - -

    {{answer}}

    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/header.html b/more/writingdoc/template/header.html deleted file mode 100644 index a0141f893323..000000000000 --- a/more/writingdoc/template/header.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - {{library}} - Header <{{header}}> - - - - - - - - - -
    -

    -

    -
    -

    {{library}}

    - -

    Header <{{header}}>

    -
    -
    - -

    Contents

    - -
    -
    Introduction
    - -
    Macros
    - -
    -
    -
    {{macro name}}
    -
    -
    - -
    Values
    - -
    -
    -
    {{value name}}
    -
    -
    - -
    Types
    - -
    -
    -
    {{type name}}
    -
    -
    - -
    Classes
    - -
    -
    -
    Class {{class name}}
    - -
    -
    -
    Class {{class - name}} synopsis
    - -
    Class {{class name}} - constructors and destructor
    - -
    Class {{class - name}} comparison functions
    - -
    Class {{class - name}} modifier functions
    - -
    Class {{class - name}} observer functions
    - -
    Class {{class - name}} static functions
    -
    -
    -
    -
    - -
    Functions
    - -
    -
    -
    {{function name}}
    -
    -
    - -
    Objects
    - -
    -
    -
    {{object name}}
    -
    -
    - -
    Example(s)
    -
    -
    - -

    Introduction

    - -

    {{Introductory text}}

    - -

    Macros

    - -

    {{Macro specifications}}

    - -

    Values

    - -

    {{Value specifications}}

    - -

    Types

    - -

    {{Type specifications}}

    - -

    Classes

    - -

    Class {{class - name}}

    - -

    {{class overview text}}

    - -

    Class - {{class name}} synopsis

    -
    -namespace boost
    -{
    -    class {{class name}}
    -        {
    -        };
    -};
    -
    - -

    Class - {{class name}} constructors and destructor

    -
    -{{constructor}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    -
    -{{destructor}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Class - {{class name}} comparison functions

    -
    -{{function}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Class - {{class name}} modifier functions

    -
    -{{function}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Class - {{class name}} observer functions

    -
    -{{function}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Class - {{class name}} static functions

    -
    -{{function}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Functions

    -
    -{{function}}
    -
    - -
    -
    Requires: {{text}}
    - -
    Effects: {{text}}
    - -
    Postconditions: {{text}}
    - -
    Returns: {{text}}
    - -
    Throws: {{text}}
    - -
    Complexity: {{text}}
    - -
    Note: {{text}}
    - -
    Danger: {{text}}
    - -
    Rationale: {{text}}
    -
    - -

    Objects

    - -

    {{Object specifications}}

    - -

    Example(s)

    - -

    {{Example(s)}}

    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/index.html b/more/writingdoc/template/index.html deleted file mode 100644 index 82fe9d95cb26..000000000000 --- a/more/writingdoc/template/index.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - {{Library}} - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Index

    -
    -
    - -

    Contents

    - -
    -
    Overview
    - -
    Reference
    - -
    -
    -
    {{header}}
    - -
    -
    -
    Macros
    - -
    -
    -
    {{macro name}}
    -
    -
    - -
    Values
    - -
    -
    -
    {{value name}}
    -
    -
    - -
    Types
    - -
    -
    -
    {{type name}}
    -
    -
    - -
    Classes
    - -
    -
    -
    {{class name}}
    -
    -
    - -
    Functions
    - -
    -
    -
    {{function - name}}
    -
    -
    - -
    Objects
    - -
    -
    -
    {{object name}}
    -
    -
    -
    -
    -
    -
    - -
    Configuration Information
    - -
    Rationale
    - -
    Definitions
    - -
    Frequently Asked Questions (FAQs)
    - -
    Bibliography
    - -
    Acknowledgments
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/overview.html b/more/writingdoc/template/overview.html deleted file mode 100644 index d4a443d6fa6e..000000000000 --- a/more/writingdoc/template/overview.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - {{Library}} - Overview - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Overview

    -
    -
    - -
    -
    Introduction
    - -
    First topic
    - -
    Second topic
    - -
    Footnotes
    -
    - -

    Introduction

    - -

    {{text}}

    - -

    First Topic

    - -

    {{text}}

    - -

    Second Topic

    - -

    {{text}}

    - -

    Footnotes

    - -
    -
    (1) - {{text}}
    - -
    (2) - {{text}}
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/writingdoc/template/rationale.html b/more/writingdoc/template/rationale.html deleted file mode 100644 index 7ea0c9d7c346..000000000000 --- a/more/writingdoc/template/rationale.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - {{Library}} - Rationale - - - - - - - - - -
    -

    -

    -
    -

    {{Library}}

    - -

    Rationale

    -
    -
    - -
    -
    Introduction
    - -
    First topic
    - -
    Second topic
    - -
    Footnotes
    -
    - -

    Introduction

    - -

    {{text}}

    - -

    First Topic

    - -

    {{text}}

    - -

    Second Topic

    - -

    {{text}}

    - -

    Footnotes

    - -
    -
    (1) - {{text}}
    - -
    (2) - {{text}}
    -
    -
    - -

    Valid HTML 4.01 Transitional

    - -

    Revised - 04 - December, 2006

    - -

    Copyright © 2006 {{author}}

    - -

    Distributed under the 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/status/Jamfile.v2 b/status/Jamfile.v2 index 864bca7de8f7..ee0288945afb 100644 --- a/status/Jamfile.v2 +++ b/status/Jamfile.v2 @@ -1,16 +1,50 @@ -# 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. -# 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. +# Copyright 2002. Dave Abrahams +# Copyright 2016-2018. Rene Rivera +# Distributed under the 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 build project manages running the tests for all of Boost. +# The tests to run are discovered from the structure of the libs tree. +# +# Usage: +# +# > cd boost-root/status +# > b2 [--check-libs-only] [--limit-tests=/lib-name-regex../]* [--exclude-tests=/lib-name-regex../]* +# +# --check-libs-only +# Only runs the library conformance tests. +# +# --no-check-libs +# Do not run the library conformance tests. +# +# --limit-tests, or --include-tests +# Only runs the tests for whom the name matches the regex. +# The value for the argument is a comma separated list of simple +# regular expressions to check against the names of all the libraries. +# If any one regex matches the matching library is tested. +# +# --exclude-tests +# Only runs the tests for whom the names does not match the regex. +# The argument is the same as for the limit-tests option except +# that the result is that libraries for whom the name matches +# are not tested. +# +# The test filters are evaluated in the order given in the command +# and can be used to selectively narrow or widen the set of libraries +# tested. +# +# Examples: +# +# > b2 --check-libs-only --include-tests=predef,config +# +# Runs the library conformance tests for the predef and config +# libraries only. +# +# > b2 --include-tests=[n-t] --exclude-tests=rat --limit-tests=[v-w] +# +# Runs all the tests for library names that begin with "n" through "t", +# or "v" through "w", but not libraries that start with "rat". project status : source-location $(BOOST_ROOT) @@ -19,136 +53,173 @@ project status import testing ; import modules ; +import project ; +import regex ; +import modules ; +import path ; +import feature ; +import numbers ; + +local check-libs-only = [ MATCH "^--(check-libs-only)" : [ modules.peek : ARGV ] ] ; +local no-check-libs = [ MATCH "^--(no-check-libs)$" : [ modules.peek : ARGV ] ] ; +local check-libs-only-targets = ; +local libraries = ; local rule run-tests ( root : tests * ) { - local limit-tests = [ MATCH "^--limit-tests=(.*)" : [ modules.peek : ARGV ] ] ; + local filter-args = [ MATCH "^--(limit|exclude|include)-tests=(.*)" : [ modules.peek : ARGV ] ] ; + local filter-tests ; + while $(filter-args) + { + local type = $(filter-args[1]) ; + for local test in [ regex.split-list $(filter-args[2]) : "[,]" ] + { + filter-tests += $(type) $(test) ; + } + filter-args = $(filter-args[3-]) ; + } + # If any filter is given we make the initial set of tested libraries we: + # (a) make it empty if the first filter is an include. + # (b) make it full otherwise. + local include-default = y ; + if $(filter-tests[1]) && ( $(filter-tests[1]) in limit include ) + { + include-default = n ; + } + local location = [ project.attribute $(__name__) location ] ; + # We only run the check library test when host-os == target-os. + # Hence we need that information. + local host-os-default = [ feature.defaults ] ; for local test in $(tests) { - if $(limit-tests) + local library = [ path.parent $(test) ] ; + if $(library) = "." + { + library = $(test) ; + } + local include-test = $(include-default) ; + local t = 1 ; + local f = 2 ; + while $(filter-tests[$(f)]) { - if [ MATCH "^($(limit-tests))" : $(test) ] + if [ MATCH "^($(filter-tests[$(f)]))" : $(test) ] { - build-project ../$(root)/$(test) ; + if $(filter-tests[$(t)]) = exclude { include-test = n ; } + else { include-test = y ; } } - else + t = [ CALC $(t) + 2 ] ; + f = [ CALC $(f) + 2 ] ; + } + if $(include-test) = y + { + if [ path.exists ../$(root)/$(test) ] { use-project /boost/$(test) : ../$(root)/$(test) ; } + if $(root) = libs && ! $(no-check-libs) && ( ! ( $(library) in $(libraries) ) ) + { + libraries += $(library) ; + local test_module = [ project.find ../$(root)/$(test) : $(location) ] ; + modules.poke $(test_module) : __LIBRARY__ : $(root)/$(library) ; + modules.poke $(test_module) : __JAMFILE__ : [ modules.peek project : JAMFILE ] ; + modules.poke $(test_module) : __REQUIRE__ : $(host-os-default:G=) ; + project.push-current [ project.target $(test_module) ] ; + module $(test_module) + { + import testing ; + testing.make-test run-pyd : + $(BOOST_ROOT)/status/boost_check_library.py + : + $(BOOST_ROOT)/status + --boost-root=\"$(BOOST_ROOT)\" + --library=$(__LIBRARY__) + --jamfile=\"$(__JAMFILE__:J=;)\" + organization + $(__REQUIRE__) + : + __boost_check_library__ ; + } + project.pop-current ; + check-libs-only-targets += ../$(root)/$(test)//__boost_check_library__ ; + } + if ! $(check-libs-only) + { + build-project ../$(root)/$(test) ; + } } - else + } +} + +local rule find-targets ( target : libs * ) +{ + local result = ; + + for local lib in $(libs) + { + local path = $(lib)/test ; + local project = [ project.load $(path) ] ; + local pt = [ project.target $(project) ] ; + local mt = [ $(pt).main-target $(target) ] ; + + if $(mt) { - build-project ../$(root)/$(test) ; + result += $(path)//$(target) ; } } + + return $(result) ; } -# Tests from Jamfiles in individual library test subdirectories -# Please keep these in alphabetic order by test-suite name -run-tests libs : - accumulators/test # test-suite accumulators - algorithm/minmax/test # test-suite algorith/minmax - algorithm/string/test # test-suite algorithm/string - array/test # test-suite array - asio/test # test-suite asio - assign/test # test-suite assign - any/test # test-suite any - bimap/test # test-suite bimap - bind/test # test-suite bind - chrono/test # test-suite chrono - circular_buffer/test # test-suite circular_buffer - concept_check # test-suite concept_check - config/test # test-suite config - conversion/test # test-suite conversion - crc/test # test-suite crc - date_time/test # test-suite date_time - detail/test # test-suite detail - disjoint_sets # test-suite disjoint_sets - dynamic_bitset # test-suite dynamic_bitset - exception/test - filesystem/test # test-suite filesystem - flyweight/test # test-suite flyweight - foreach/test # test-suite foreach - format/test # test-suite format - function/test # test-suite function - functional/test # test-suite functional - functional/factory/test # test-suite functional/factory - functional/forward/test # test-suite functional/forward - functional/hash/test # test-suite functional/hash - function_types/test # test-suite function_types - fusion/test # test-suite fusion - geometry/test # test-suite geometry - gil/test # test-suite gil - graph/test # test-suite graph - graph_parallel/test # test-suite graph/parallel - icl/test # test-suite icl - io/test # test-suite io - integer/test # test-suite integer - interprocess/example # test-suite interprocess_example - interprocess/test # test-suite interprocess_test - intrusive/example # test-suite intrusive_example - intrusive/test # test-suite intrusive_test - iostreams/test # test-suite iostreams - iterator/test # test-suite iterator - lambda/test # test-suite lambda - logic/test # test-suite logic - math/test # test-suite math - mpi/test # test-suite mpi - mpl/test # test-suite mpl - msm/test # msm-unit-tests - numeric/conversion/test # test-suite numeric/conversion - numeric/interval/test # test-suite numeric/interval - numeric/ublas/test # test-suite numeirc/uBLAS - multi_array/test # test-suite multi_array - multi_index/test # test-suite multi_index - optional/test # test-suite optional - parameter/test # test-suite parameter - polygon/test # test-suite polygon - pool/test # test-suite pool - preprocessor/test # test-suite preprocessor - program_options/test # test-suite program_options - property_map/test # test-suite property_map - property_tree/test # test-suite property_test - proto/test # test-suite proto - ptr_container/test # test-suite ptr_container - python/test # test-suite python - random/test # test-suite random - range/test # test-suite range - ratio/test # test-suite ratio - rational/test # test-suite rational - regex/test # test-suite regex - regex/example # test-suite regex-examples - scope_exit/test # test-suite scope_exit - serialization/test # test-suite serialization - signals/test # test-suite signals - signals2/test # test-suite signals2 - smart_ptr/test # test-suite smart_ptr - spirit/classic/test # test-suite classic spirit - spirit/test # test-suite spirit_v2 - spirit/repository/test # test-suite spirit_v2 repository - statechart/test # test-suite statechart - static_assert # test-suite static_assert - system/test # test-suite system - test/test # test-suite test - thread/test # test-suite thread - timer/test # test-suite timer - tokenizer/test # test-suite tokenizer - tr1/test # test-suite tr1 - tuple/test # test-suite tuple - type_traits/test # test-suite type_traits - typeof/test # test-suite typeof - units/test # test-suite units - unordered/test/unordered # test-suite unordered - unordered/test/exception # test-suite unordered-exception - utility/enable_if/test # test-suite utility/enable_if - utility/swap/test # test-suite utility/swap - utility/test # test-suite utility - uuid/test # test-suite uuid - variant/test # test-suite variant - wave/test/build # test-suite wave - xpressive/test # test-suite xpressive - ; +local libs-to-test = ; +for local libdir in [ path.glob $(BOOST_ROOT) : libs/* ] +{ + local jamfile = [ modules.peek project : JAMFILE ] ; + local jamfiles = [ path.glob [ path.join $(libdir) test ] : $(jamfile) ] ; + if $(jamfiles) + { + libs-to-test += $(libdir:B) ; + } + if [ path.glob $(libdir) : sublibs ] + { + jamfiles = [ path.glob $(libdir) : */test/$(jamfile) ] ; + for local sublib_jamfile in $(jamfiles) + { + local sublibdir = [ path.parent [ path.parent $(sublib_jamfile) ] ] ; + local sublib = $(libdir:B)/$(sublibdir:B) ; + libs-to-test += $(sublib) ; + } + } +} -run-tests tools : - bcp/test - ; +libs-to-test = [ SORT $(libs-to-test) ] ; + +run-tests libs : $(libs-to-test)/test ; + +# Tests from Jamfiles in tools/ +# Please keep these in alphabetical order + +local tools-to-test = ; +for local tooldir in bcp check_build quickbook +{ + local jamfile = [ modules.peek project : JAMFILE ] ; + local jamfiles = [ path.glob [ path.join $(BOOST_ROOT) tools $(tooldir) test ] : $(jamfile) ] ; + if $(jamfiles) + { + tools-to-test += $(tooldir) ; + } +} + +#ECHO "tools-to-test:" $(tools-to-test) ; + +run-tests tools : $(tools-to-test)/test ; + +if $(check-libs-only-targets) +{ + alias check-libs-only : $(check-libs-only-targets) ; +} + +alias minimal : [ find-targets minimal : ../libs/$(libs-to-test) ] ; +explicit minimal ; + +alias quick : [ find-targets quick : ../libs/$(libs-to-test) ../tools/$(tools-to-test) ] ; +explicit quick ; diff --git a/status/boost_check_library.py b/status/boost_check_library.py new file mode 100644 index 000000000000..856d5dbcba15 --- /dev/null +++ b/status/boost_check_library.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python + +# Copyright Rene Rivera 2016 +# +# Distributed under the 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 inspect +import optparse +import sys +import glob +import fnmatch +import json + +class check_library(): + ''' + This is a collection of checks for a library to test if a library + follows the Boost C++ Libraries requirements and guidelines. It also + checks for possible and likely errors in the library. + ''' + + def __init__(self): + self.main() + + def check_organization(self): + self.run_batch('check_organization_') + + def check_organization_build(self): + if os.path.isdir(os.path.join(self.library_dir, 'build')): + self.assert_file_exists(os.path.join(self.library_dir, 'build'), self.jamfile, + ''' + Did not find a Boost Build file in the [project-root]/build directory. + The library needs to provide a Boost Build project that the user, + and the top level Boost project, can use to build the library if it + has sources to build. + ''', + 'org-build-ok') + if os.path.isdir(os.path.join(self.library_dir, 'src')): + self.assert_dir_exists(os.path.join(self.library_dir,'build'), + ''' + Missing [project-root]/build directory. The [project-root]/build directory + is required for libraries that have a [project-root]/src directory. + ''', + 'org-build-src') + + def check_organization_doc(self): + self.assert_file_exists(self.library_dir, ['index.html'], + ''' + Did not find [project-root]/index.html file. + + The file is required for all libraries. Redirection to HTML documentation. + ''', + 'org-doc-redir') + self.assert_dir_exists(os.path.join(self.library_dir,'doc'), + ''' + Missing [project-root]/doc directory. The [project-root]/doc directory + is required for all libraries. + + Sources to build with and built documentation for the library. If the + library needs to build documentation from non-HTML files this location + must be buildable with Boost Build. + ''', + 'org-doc-dir') + + def check_organization_include(self): + if os.path.isdir(os.path.join(self.library_dir,'include','boost',self.library_name)): + self.warn_file_exists(os.path.join(self.library_dir,'include','boost'), ['*.h*'], + ''' + Found extra files in [project-root]/include/boost directory. + ''', + 'org-inc-extra', + negate = True, + globs_to_exclude = ['%s.h*'%(self.library_name)]) + else: + self.warn_file_exists(os.path.join(self.library_dir,'include','boost'), ['%s.h*'%(self.library_name)], + ''' + Did not find [project-root]/include/boost/[library].h* file. + + A single header for the library is suggested at [project-root]/include/boost/[library].h* + if the library does not have a header directory at [project-root]/include/boost/[library]. + ''', + 'org-inc-one') + + def check_organization_meta(self): + parent_dir = os.path.dirname(self.library_dir) + # If this is a sublibrary it's possible that the library information is the + # parent library's meta/libraries.json. Otherwise it's a regular library + # and structure. + if not self.test_dir_exists(os.path.join(self.library_dir,'meta')) \ + and self.test_file_exists(os.path.join(parent_dir,'meta'),['libraries.json']): + if self.get_library_meta(): + return + self.assert_file_exists(os.path.join(self.library_dir, 'meta'), ['libraries.json'], + ''' + Did not find [project-root]/meta/libraries.json file, nor did + [super-project]/meta/libraries.json contain an entry for the sublibrary. + + The file is required for all libraries. And contains information about + the library used to generate website and documentation for the + Boost C++ Libraries collection. + ''', + 'org-meta-libs') + elif self.assert_dir_exists(os.path.join(self.library_dir,'meta'), + ''' + Missing [project-root]/meta directory. The [project-root]/meta directory + is required for all libraries. + ''', + 'org-meta-dir'): + self.assert_file_exists(os.path.join(self.library_dir, 'meta'), ['libraries.json'], + ''' + Did not find [project-root]/meta/libraries.json file. + + The file is required for all libraries. And contains information about + the library used to generate website and documentation for the + Boost C++ Libraries collection. + ''', + 'org-meta-libs') + + def check_organization_test(self): + if self.assert_dir_exists(os.path.join(self.library_dir,'test'), + ''' + Missing [project-root]/test directory. The [project-root]/test directory + is required for all libraries. + + Regression or other test programs or scripts. This is the only location + considered for automated testing. If you have additional locations that + need to be part of automated testing it is required that this location + refer to the additional test locations. + ''', + 'org-test-dir'): + self.assert_file_exists(os.path.join(self.library_dir, 'test'), self.jamfile, + ''' + Did not find a Boost Build file in the [project-root]/test directory. + ''', + 'org-test-ok') + + def main(self): + commands = []; + for method in inspect.getmembers(self, predicate=inspect.ismethod): + if method[0].startswith('check_'): + commands.append(method[0][6:].replace('_','-')) + commands = "commands: %s" % ', '.join(commands) + + opt = optparse.OptionParser( + usage="%prog [options] [commands]", + description=commands) + opt.add_option('--boost-root') + opt.add_option('--library') + opt.add_option('--jamfile') + opt.add_option('--debug', action='store_true') + self.boost_root = None + self.library = None + self.jamfile = None + self.debug = False + ( _opt_, self.actions ) = opt.parse_args(None,self) + + self.library_dir = os.path.join(self.boost_root, self.library) + self.error_count = 0; + self.jamfile = self.jamfile.split(';') + self.library_name = self.library.split('/',1)[1] #os.path.basename(self.library) + self.library_key = self.library.split('/',1)[1] + + if self.debug: + print(">>> cwd: %s"%(os.getcwd())) + print(">>> actions: %s"%(self.actions)) + print(">>> boost_root: %s"%(self.boost_root)) + print(">>> library: %s"%(self.library)) + print(">>> jamfile: %s"%(self.jamfile)) + + for action in self.actions: + action_m = "check_"+action.replace('-','_') + if hasattr(self,action_m): + getattr(self,action_m)() + + def run_batch(self, action_base, *args, **kargs): + for method in inspect.getmembers(self, predicate=inspect.ismethod): + if method[0].startswith(action_base): + getattr(self,method[0])(*args, **kargs) + + def get_library_meta(self): + ''' + Fetches the meta data for the current library. The data could be in + the superlib meta data file. If we can't find the data None is returned. + ''' + parent_dir = os.path.dirname(self.library_dir) + if self.test_file_exists(os.path.join(self.library_dir,'meta'),['libraries.json']): + with open(os.path.join(self.library_dir,'meta','libraries.json'),'r') as f: + meta_data = json.load(f) + if isinstance(meta_data,list): + for lib in meta_data: + if lib['key'] == self.library_key: + return lib + elif 'key' in meta_data and meta_data['key'] == self.library_key: + return meta_data + if not self.test_dir_exists(os.path.join(self.library_dir,'meta')) \ + and self.test_file_exists(os.path.join(parent_dir,'meta'),['libraries.json']): + with open(os.path.join(parent_dir,'meta','libraries.json'),'r') as f: + libraries_json = json.load(f) + if isinstance(libraries_json,list): + for lib in libraries_json: + if lib['key'] == self.library_key: + return lib + return None + + def error(self, reason, message, key): + self.error_count += 1 + print("%s: error: %s; %s <<%s>>"%( + self.library, + self.clean_message(reason), + self.clean_message(message), + key, + )) + + def warn(self, reason, message, key): + print("%s: warning: %s; %s <<%s>>"%( + self.library, + self.clean_message(reason), + self.clean_message(message), + key, + )) + + def info(self, message): + if self.debug: + print("%s: info: %s"%(self.library, self.clean_message(message))) + + def clean_message(self, message): + return " ".join(message.strip().split()) + + def assert_dir_exists(self, dir, message, key, negate = False): + self.info("check directory '%s', negate = %s"%(dir,negate)) + if os.path.isdir(dir): + if negate: + self.error("directory found", message, key) + return False + else: + if not negate: + self.error("directory not found", message, key) + return False + return True + + def warn_dir_exists(self, dir, message, key, negate = False): + self.info("check directory '%s', negate = %s"%(dir,negate)) + if os.path.isdir(dir): + if negate: + self.warn("directory found", message, key) + return False + else: + if not negate: + self.warn("directory not found", message, key) + return False + return True + + def assert_file_exists(self, dir, globs_to_include, message, key, negate = False, globs_to_exclude = []): + found = self.test_file_exists(dir, globs_to_include = globs_to_include, globs_to_exclude = globs_to_exclude) + if negate: + if found: + self.error("file found", message, key) + return False + else: + if not found: + self.error("file not found", message, key) + return False + return True + + def warn_file_exists(self, dir, globs_to_include, message, key, negate = False, globs_to_exclude = []): + found = self.test_file_exists(dir, globs_to_include = globs_to_include, globs_to_exclude = globs_to_exclude) + if negate: + if found: + self.warn("file found", message, key) + return False + else: + if not found: + self.warn("file not found", message, key) + return False + return True + + def test_dir_exists(self, dir): + return os.path.isdir(dir) + + def test_file_exists(self, dir, globs_to_include, globs_to_exclude = []): + self.info("test file(s) in dir '%s', include = '%s', exclude = %s"%(dir,globs_to_include,globs_to_exclude)) + found = False + if os.path.isdir(dir): + for g in globs_to_include: + for f in glob.iglob(os.path.join(dir,g)): + exclude = False + for ge in globs_to_exclude: + if fnmatch.fnmatch(os.path.basename(f),ge): + exclude = True + found = not exclude + if found: + break + return found + +if check_library().error_count > 0: + sys.exit(1) + diff --git a/status/explicit-failures-markup.xml b/status/explicit-failures-markup.xml index de98b8365662..1ab1f8f431ab 100644 --- a/status/explicit-failures-markup.xml +++ b/status/explicit-failures-markup.xml @@ -7,7 +7,7 @@ Locally, the xmlint tool can be used: - xmllint valid explicit-failures-markup.xml schema explicit-failures.xsd + xmllint explicit-failures-markup.xml schema explicit-failures.xsd The following online services can be used to validate your changes to this file: @@ -45,6 +45,8 @@ + + @@ -75,6 +77,27 @@ + + + + + + + + + + + + + + + + + + + These failures are caused by a lack of support/configuration for Boost.Tr1 + + @@ -327,6 +350,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C++11 is the minimum requirement. + + + @@ -466,34 +532,34 @@ - - - - - - - See https://zigzag.lvk.cs.msu.su:7813/boost.build/ticket/218 - - - + + + + + Temporarily enabled and always failing test used for collecting + additional feedback from the testing site. + + - + The compiler does not support features that are essential for the library. - + + + - + - + - + @@ -525,12 +591,6 @@ - - - - - - @@ -603,9 +663,130 @@ + + + + + + + + + + + + + + + + The compiler does not support features that are essential for the library. + + + + + + + + + + + hash_value is not overloaded for arrays for older versions + of Visual C++. There is a work around so that + boost::hash<T[N]>, boost::hash_combine and boost::hash_range + work. + + + + + + + + + + + + + + + + + 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). + + + + + + + + + This platform has poor support for long double so + the hash function perform poorly for values out of the range + of double or if they differ at a greater precision + that double is capable of representing. + + + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + The test demonstrates a Borland bug - functions that aren't + in a namespace don't appear to be found by ADL. + + + + + + + + Debug containers aren't supported on Apple's version of gcc 4.2. + + + + + + + + + + + + + + The relevant SFINAE support is broken in MSVC up to version 11. + + + + - - + + @@ -627,32 +808,332 @@ - + + + - + + + + + + + + + - Conversion double-string-double may give a different value (or even throw) on many compilers + Conversion double-string-double may give a different + value (or even throw) on many compilers - + - - - I don't have an access to Windows and VC++ to - investigate this issue. + + + + + + + + + + + + + + Some compilers and STL realizations convert double and long + double types with bigger precision loss than minimal (or + even round to infinity). Such failures are not a + lexical_cast, but a compiler fault. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + On this compiler, Boost.Function gives a run-time error when + calling non-nullary lambdas as used by the tests of this library + to program contract failure handlers. + It might still be possible to use this library on this compiler + using default contract failure handlers or programming custom + contract failure handlers but without using non-nullary lambdas + (however, the authors did not confirm that). + + + + + + + Even tests that do not use C++11 lambda functions fail on this + compiler because it incorrectly attempts an extra copy when + objects are constructed using `boost::check c = ...`. + This is fixed in MinGW GCC 4.3. + + + + + + Even tests that do not use C++11 lambda functions fail on this + compiler because of a number of issues (Boost.Exception is not + supported on this compiler but it is used by this library + implementation, some aspects of `friend` and `volatile` are not + properly implemented on this compiler, etc.). + These specific issues are fixed in MSVC 9.0 (but only MSVC 11.0 + has adequate lambda function support that makes this library + actually usable). + + + + + + + + + + This test fails on this compiler because of a bug with + exceptions (see http://grokbase.com/t/gg/android-ndk/1656csqqtp/assertion-ttypeencoding-dw-eh-pe-absptr-unexpected-ttypeencoding-failed). + + + + + + + + + + This test fails on this compiler because of a bug in its STL + implementation (undefined references to + `std::ios_base::failure::failure`). + + + + + + + + + + + + + + This test fails because of a libcxxrt bug on Clang for FreeBSD + which causes `std::uncaught_exception` to not work properly on + re-throws (see https://github.com/pathscale/libcxxrt/issues/49). + + + + + + + + + + + This test fails because this complier does not properly + implement SFINAE giving incorrect errors on substitution + failures for private members. + This seems to be fixed in GCC 4.8 and MSVC 12.0. + + + + + + + + This test fails because SFINAE on this complier seems to not + fail as it should when a derived class tries to call a + protected member function on a base class object via a function + pointer instead of via inheritance. + This seems to be fixed in Clang 3.1, and to be specific to + version 4.6 of GCC. + + + + + + + + This test fails because this compiler seems to incorrectly check + access level of members in base classes in a context when only + derived class members are used. + This seems to be fixed in GCC 4.8 (possibly related to + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57973). + + + + + + + + + + + + + + + + + + + + + + + + This test fails because `std::unchaught_exception` seems to + always return zero on this compiler (even if the authors could + not find a direct reference to this possible compiler issue + online). + + + + + + + + + This test fails because this complier seems to dispatch calls + incorrectly when both `const` and `const volatile` overloads + are present (even if the authors could not find a direct + reference to this possible compiler issue online). + This is fixed in MSVC 9.0 (but only MSVC 11.0 has adequate + lambda function support). + + + + + + + This test fails because MSVC 10.0 is not able to properly deduce + a template specialization. + This is fixed in MSVC 11.0. + + + + + + + + This test fails because of a MSVC 10.0 bug with lambdas within + template class initialization list. + This can be worked around using a functor bind instead of a + lambda, but it is fixed in MSVC 11.0. + + + + + + + This test fails because of a MSVC 10.0 bug for which lambdas + cannot access typedefs declared within classes. + This can be worked around declaring typedefs outside of + classes, but it is fixed in MSVC 11.0. + + + + + + + + + + + + This test fails because of an internal MSVC 10.0 compiler bug. + This is fixed in MSVC 11.0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1248,7 +1729,7 @@ Although these tests compile, the execution aborts for - an unknown reason. Note that sometimes the excution is + an unknown reason. Note that sometimes the execution is ok on cw-9_4. This may be fixable if someone can track down the source of the problem. @@ -1341,6 +1822,88 @@ + + + + + + + + + + + + This indicates that forward declarations could probably be used + for these compilers but currently aren't. All these compilers use + STLport, which is compatible with forward declarations in some + circumstances, but not in others. I haven't looked into how to + determine this, so I've just set container_fwd to never forward + declare for STLport. + + + + + + + + + + + + + + + + + + + + + + + + + + + GCC's libstdc++ has a versioned namespace feature which breaks + container forwarding. I don't know how to detect it so I'm just + always disabling it, which means that a lot of setups which + means that it's disabled for a lot of setups where it could + work - which is what these failures represent. + + + + + + + + + + Failing because these tests are run with warnings as errors, + and the standard library is causing warnings. + + + + + + + + STLport debug mode seems to be broken here. + + + + + + + + + + Some old versions of GCC's libstdc++ don't work on clang with + _GLIBCXX_DEBUG defined. + http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-May/015178.html + + + @@ -1376,6 +1939,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1406,7 +1994,7 @@ - Due to lack of C library featues, this toolset is not supported. + Due to lack of C library features, this toolset is not supported. @@ -1504,7 +2092,6 @@ - @@ -1538,7 +2125,7 @@ - + @@ -1549,7 +2136,7 @@ - + This compiler does not support detection of const rvalues. @@ -1568,7 +2155,7 @@ - + @@ -1579,7 +2166,7 @@ - + This compiler does not support detection of const rvalues. @@ -1599,6 +2186,7 @@ + This compiler does not support detection of rvalues. @@ -1618,6 +2206,7 @@ + This compiler does not support detection of rvalues. @@ -1709,6 +2298,19 @@ + + + + + + + + + This compiler is currently not supported. + + + + @@ -1810,61 +2412,122 @@ - - - - - - - - - - - - - - - The compiler does not support features that are - essential for the library. - - - - - - - - - - - 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. + + + + + + + + + + The compiler doesn't generate defaulted move ctor/assgin thus + perform copy construction/assginment. Even though such case, + the `inline` versions don't force generating move ctor/assign + to preserve trivial requirements. Since that is not documented + behaviour, it might be changed in future release. - + - - + - - - - + + + These compilers do not support features that are essential for the library. + + + + + + Intel 11.1 and 12.0 on Darwin raises a SIGSEGV in almost all unit tests. + + + + + + Intel 13.1.3 does not support BOOST_TEST + + + + + + pgi 11.1 does not support BOOST_AUTO and is not configured for UBLAS + + + + + + This configuration is not well configured for UBLAS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1896,6 +2559,25 @@ + + + + + + + + + + + + + + + The compiler does not provide sufficient C++14 support for the library. + + + + @@ -1907,56 +2589,14 @@ The compiler does not support features that are essential for the library. - - - - - - - - - - - - - - - - - - - - - - - - - - - The clang compiler seems to have problems with passing template template parameters in - some combinations with test function templates. This is done in the tests in order to be - able to vary more than one template parameter in the tests. Because this is a feature - of the tests, failure does not necessarily mean, that icl can not be used with clang. - The tests most likely fail for a property that relates to the test environment rather - than to library code itself. - - - - - - - - - Compiler error expected for clang: Minimal examples for passing combinations - of template template parameters that derail clang. - - - + + + Compiler error expected for msvc: A minimal example of a class template 'value' that results in syntax error in a subsequent meta function. @@ -1983,7 +2623,7 @@ - + @@ -2012,6 +2652,7 @@ + @@ -2020,7 +2661,6 @@ - The compiler does not support features that are essential for the library. @@ -2294,6 +2934,36 @@ ptrdiff_t, which is an alias for a 32-bit type + + + + + Visual C++ 7.1's SFINAE implementation can't deal with multiple + assignment functions with the same parameters (but disabled with + SFINAE). So path's assignment from boost::filesystem2::path is + disabled. Would be pretty easy to workaround, but probably not + worth it since this is pretty obscure, and filesystem2 will be + removed soon. + + + + + + + + + + + + + + + + + + + C++11 is the minimum requirement. + @@ -2326,6 +2996,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This test does not allow C++11 auto-declaration support + (because it uses the `auto` keyword as storage classifier). + + + + + + + + + + The compiler fails to compile Boost.Move and Boost.PropertyTree, which are used by this library. + + + + + + Boost.Filesystem used by Boost.Log does not support Windows Mobile. + + + + @@ -2339,6 +3090,25 @@ + + + + + + + + + + + + + + + + The compiler does not support features that are essential for the library. + + + @@ -2627,9 +3397,140 @@ for more information. + + + + + + + + +

    + These compilers are too antiquated for this library. +

    +
    +
    + + + + + + + +

    + These compilers don't quite have the necessary support for this library, it's possible + that they could be made to work if someone cares enough. +

    +
    +
    - + + + + + + + + + + + + + + + + + + + + + + This failure is caused by a test-runner timeout: unfortunately the Intel + compiler is exceptionally slow at building some of these tests. + + + + + + + + + This failure is caused by a test-runner timeout. + + +
    + + + + + + +

    This is a compiler bug: it sometimes creates an illegal temporary object. + The following code illustrates the bug:

    +
    +		#include <cassert>
    +		const int global_i = 0;
    +		
    +		struct TestingReferenceBinding
    +		{
    +		  void operator=(const int& ii)
    +		  {
    +		    assert(&ii == &global_i);
    +		  }
    +		};
    +		
    +		int main()
    +		{
    +		  TestingReferenceBinding ttt;
    +		  ttt = global_i;
    +		}
    +                
    +
    +
    + + + + + + + + + + + +

    This is a compiler bug: it sometimes creates an illegal temporary object. + The following code illustrates the bug:

    +
    +		#include <cassert>
    +		const int global_i = 0;
    +		
    +		struct TestingReferenceBinding
    +		{
    +		  TestingReferenceBinding(const int& ii)
    +		  {
    +		    assert(&ii == &global_i);
    +  		  }
    +		};
    +		
    +		int main()
    +		{
    +		  TestingReferenceBinding ttt = global_i;
    +		}
    +                
    +
    +
    + + + + + + + + +

    This is a compiler bug: it sometimes creates an illegal temporary object.

    +
    +
    @@ -2639,11 +3540,19 @@ for more information. + + + + + + + +

    This failure is caused by a compiler bug, and as far as we can tell, can't be worked around in the library, although we think @@ -2692,6 +3601,109 @@ for more information. + + + + + + + + + + + + + + + + + + + + + + + + + + + Complete C++14 support is the minimum requirement. + + + + + + libstdc++ 6 is the minimum version which works. + + + + Tests are unstable on GCC 6. + + + + + + + Tests are unstable on VS2017 and VS2019. + + + + + + + + + + + + + + Wrokaround: define BOOST_RESULT_OF_USE_TR1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compiler's too old for working. + + + + + + C++11 or later required. + + + @@ -2718,6 +3730,8 @@ for more information. + + @@ -2757,9 +3771,6 @@ for more information. - - - @@ -2803,7 +3814,7 @@ for more information. msvc 6 compiler failure. The facility being tested conflicts the the - compiler in a fundamental way and cannnot be worked around. + compiler in a fundamental way and cannot be worked around. @@ -2812,7 +3823,7 @@ for more information. msvc 6 compiler failure. The facility being tested conflicts the the - compiler in a fundamental way and cannnot be worked around. + compiler in a fundamental way and cannot be worked around. @@ -2873,7 +3884,7 @@ for more information. 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 + cases CW specific workarounds 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. @@ -2953,11 +3964,6 @@ for more information. - - - - - @@ -2970,9 +3976,22 @@ for more information. - - + + + + + + + + + + + + + + + @@ -2980,7 +3999,12 @@ for more information. + + + + + @@ -3764,7 +4788,7 @@ for more information. - This compiler has some problems with name looup / overload resolution. + This compiler has some problems with name lookup / overload resolution. @@ -4402,6 +5426,35 @@ for more information. + + + + + + + + + + + + + + + + + Unsupported compiler + + + + + + + + C++11 mode (or later) required + + + + @@ -4430,7 +5483,7 @@ for more information. Reported to Intel as issue 409291, and confirmed as a problem. Probably this relates to a specific - Linux-Kernal or GLibC version. + Linux-Kernel or GLibC version. @@ -4607,7 +5660,7 @@ for more information. - + The compiler does not support features that are essential for this test . @@ -4747,7 +5800,7 @@ for more information. - Test fails due to unresilved externals from STLport: appears to be + Test fails due to unresolved externals from STLport: appears to be an STLport bug. @@ -4767,11 +5820,14 @@ for more information. + + + + - The test does not compile in typeof emulation mode, @@ -4806,6 +5862,75 @@ for more information. + + + + + + + + + + This compiler does not support native type-of (force type-of + emulation mode defining the BOOST_TYPEOF_EMULATION macro). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5024,6 +6149,7 @@ for more information. + @@ -5070,13 +6196,14 @@ for more information. + 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 + which clearly 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 @@ -5103,22 +6230,170 @@ With aC++, the tests compile cleanly in strict ansi mode and succeed. - + These tests will fail in most compilers that don't support rvalue references. + + + + + + +The implementation of native_handle() is not possible on this platform. + + + + + + + +The implementation of native_handle() is not possible on this platform. + + + + + + + + + + + + + + + + + + + + + + + + + + +This platform doesn't supports Boost.Chrono. + + + + + + +This platform doesn't supports Boost.Container. + + + + + + + + + + + + + + + These are all failures with Boost.FunctionTypes which TTI uses. + + + + + + + + + + + + + + + + + + + + + + SFINAE for the constructors of param doesn't work correctly on this compiler. + This affects free functions (including operators) with more than one + any argument and overloaded member functions. + + + + + + This looks like an instance of MSVC substituting int in a template-id. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Classes with exactly the same names defined in different modules in anonymous namespaces collapse + for this compiler even with RTTI on. This is a known compiler limitation that already fixed + in newer versions or will be fixed soon. + + + + + + + + + + Classes with exactly the same names defined in different modules in anonymous namespaces collapse + for this compiler with RTTI off. This is a known limitation of RTTI-off mode. Such behavior is + reflected in docs. + + + + + + + + Type Traits tests are run with warnings-as-errors and GCC 3.x emits warnings with this test + that I haven't been able to suppress. + + @@ -5192,9 +6467,16 @@ These tests will fail in most compilers that don't support rvalue references. + + + + + + See bug 99776 'enum UIntEnum { value = UINT_MAX } is promoted to int' http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=22b0a6b7-120f-4ca0-9136-fa1b25b26efe + https://developercommunity.visualstudio.com/content/problem/490264/standard-violation-enum-underlying-type-cannot-rep.html @@ -5352,7 +6634,7 @@ These tests will fail in most compilers that don't support rvalue references. - Metrowerks Codeworrier has partial TR1 support built in + Metrowerks Codewarrior 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. @@ -5596,7 +6878,7 @@ These tests will fail in most compilers that don't support rvalue references. - These tests fail on this platform due to a recuring GCC bug. + These tests fail on this platform due to a recurring GCC bug. @@ -5952,15 +7234,49 @@ These tests will fail in most compilers that don't support rvalue references. - - - - + + + + This test fail because it's using unordered's internal + allocator traits, which doesn't work on Visual C++ 7.1. + It normally uses the one from Boost.Container by default. + + + + + + - Failing on compilers that don't have good support - concept check support. + boost::is_nothrow_move_constructible and + boost::is_nothrow_move_assignable don't seem to work on this + compiler. I'd hope that anyone wanting noexcept support would + use a more recent compiler anyway. + + + + + + + + + + + + + + + + + + + + + + + C++11 is the minimum requirement. + @@ -6295,6 +7611,18 @@ These tests will fail in most compilers that don't support rvalue references. + + + + Boost.Proto doesn't work on the cray compiler. + + + + + + Boost.Proto doesn't work on the vacpp compiler. + + @@ -6310,6 +7638,45 @@ These tests will fail in most compilers that don't support rvalue references. + + + + + This library is unusable due to bug #5373 in Boost.Thread + on this compiler. + + + + + + + Windows Mobile lacks essential features of the standard C + library like gmtime, mktime, localtime making it impossible + to use Boost.Locale on this platform. + + + + + + + + Compiler does not support shared runtime linking + thus is makes it problematic to use Boost.Locale as dll + + + + + + + + Problems with wide file stream I/O. + Currently unresolved due to lack of access to the + compiler. + + + + + @@ -6556,5 +7923,17 @@ These tests will fail in most compilers that don't support rvalue references. This test fails because MinGW apparently does not always catch exceptions properly. + + This test requires variadic macro support. + + + + This test requires lambda function support. + + + + This test has not been updated to accomodate changes in Boost.Random. + + diff --git a/status/explicit-failures.xsd b/status/explicit-failures.xsd index 6c777507200f..fc7bcc941854 100644 --- a/status/explicit-failures.xsd +++ b/status/explicit-failures.xsd @@ -4,9 +4,9 @@ - - - + + + diff --git a/tools/Jamfile.v2 b/tools/Jamfile.v2 index d7fab287a88a..e1391c768607 100644 --- a/tools/Jamfile.v2 +++ b/tools/Jamfile.v2 @@ -12,18 +12,16 @@ project : requirements static + /boost//headers + : + usage-requirements /boost//headers ; -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 + /boost/libs/wave/tool//wave ; install dist-bin diff --git a/tools/auto_index b/tools/auto_index index 88da98e37b95..55bce3c4174e 160000 --- a/tools/auto_index +++ b/tools/auto_index @@ -1 +1 @@ -Subproject commit 88da98e37b9539c103ae9e6fc7db1b4e52010585 +Subproject commit 55bce3c4174e4130404b14a86db74ea6dd9ec874 diff --git a/tools/bcp b/tools/bcp index 9d351e94b63a..f573ac4a82e2 160000 --- a/tools/bcp +++ b/tools/bcp @@ -1 +1 @@ -Subproject commit 9d351e94b63a318bfcee1ce339a51c93d4b28564 +Subproject commit f573ac4a82e2daa85073661cfec61b986b092f21 diff --git a/tools/boost_install b/tools/boost_install new file mode 160000 index 000000000000..93bd5adb2363 --- /dev/null +++ b/tools/boost_install @@ -0,0 +1 @@ +Subproject commit 93bd5adb2363112a3da015af356537cbe10d4bb6 diff --git a/tools/boostbook b/tools/boostbook index f4e66088861c..46c7732d061a 160000 --- a/tools/boostbook +++ b/tools/boostbook @@ -1 +1 @@ -Subproject commit f4e66088861c6d31603825f8da7b04b089afae73 +Subproject commit 46c7732d061a33381e6593139d10fb3d032845a4 diff --git a/tools/boostdep b/tools/boostdep new file mode 160000 index 000000000000..df0647fef2ed --- /dev/null +++ b/tools/boostdep @@ -0,0 +1 @@ +Subproject commit df0647fef2ed465cd08da61da67b2a7dd4104538 diff --git a/tools/build b/tools/build index 67a6670c8bbb..8d86b9a85407 160000 --- a/tools/build +++ b/tools/build @@ -1 +1 @@ -Subproject commit 67a6670c8bbb1dc25fdb9c67a8fd918e186d2cec +Subproject commit 8d86b9a85407d73d6e8c631771f18c2a237d2d71 diff --git a/tools/check_build b/tools/check_build new file mode 160000 index 000000000000..9c3fc263fc32 --- /dev/null +++ b/tools/check_build @@ -0,0 +1 @@ +Subproject commit 9c3fc263fc3203e566c4b632c1b124e57dafbed5 diff --git a/tools/cmake b/tools/cmake new file mode 160000 index 000000000000..69f16e2819c4 --- /dev/null +++ b/tools/cmake @@ -0,0 +1 @@ +Subproject commit 69f16e2819c4686450bdac807e3eb58346fb2ac2 diff --git a/tools/docca b/tools/docca new file mode 160000 index 000000000000..0ce4e198398d --- /dev/null +++ b/tools/docca @@ -0,0 +1 @@ +Subproject commit 0ce4e198398dbb52f1de0029f4ed9b7d2bded273 diff --git a/tools/index.html b/tools/index.html index e74ff76318bc..65236fedda85 100644 --- a/tools/index.html +++ b/tools/index.html @@ -54,13 +54,6 @@ Boost.Build - The Boost build system, including the full Boost version of the jam sources.
      -

  • - Regression - The Boost regression testing - system reporting sources.
  • - Release - Scripts used to build the - release tarballs and zips.
    -  
  • Inspect - The inspection tool used to detect errors in the Boost directory hierarchy.
    @@ -83,9 +76,14 @@  
  • Wave - 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 built-in - preprocessor.
    + 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 built-in + preprocessor.
    +   +
  • + AutoIndex - A tool for indexing Boostbook/Docbook + documents.
    +  

  • diff --git a/tools/inspect b/tools/inspect index 7051540715d7..db423bf897bc 160000 --- a/tools/inspect +++ b/tools/inspect @@ -1 +1 @@ -Subproject commit 7051540715d74fe587999c653c5163d1a957bbdb +Subproject commit db423bf897bcc6aa34231e5266442b75ee2a5666 diff --git a/tools/litre b/tools/litre index b477f20b03ed..564d4d8d30b7 160000 --- a/tools/litre +++ b/tools/litre @@ -1 +1 @@ -Subproject commit b477f20b03ed0f3280cc2be7b430a1f60344ecb6 +Subproject commit 564d4d8d30b7e03ac5e25d78e14d2c19fa321c83 diff --git a/tools/quickbook b/tools/quickbook index fa0a683b4ea5..f9f14bd3cf0b 160000 --- a/tools/quickbook +++ b/tools/quickbook @@ -1 +1 @@ -Subproject commit fa0a683b4ea5c8e20af0edd6cb801c7a559a81e6 +Subproject commit f9f14bd3cf0b7ac263af26f55ea9b808b367c3d2 diff --git a/tools/regression/build/Jamroot.jam b/tools/regression/build/Jamroot.jam deleted file mode 100644 index e1abe768cd75..000000000000 --- a/tools/regression/build/Jamroot.jam +++ /dev/null @@ -1,84 +0,0 @@ -# Regression test status reporting tools build Jamfile - -# Copyright Rene Rivera - -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - - -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 - : - BOOST_ALL_NO_LIB=1 - _CRT_SECURE_NO_WARNINGS - /boost//headers - : - release - ; -explicit tiny_xml ; - -exe process_jam_log - : - process_jam_log.cpp - tiny_xml - /boost/filesystem//boost_filesystem/static - : - BOOST_ALL_NO_LIB=1 - _CRT_SECURE_NO_WARNINGS - /boost//headers - : - release - ; -#~ explicit process_jam_log ; - -exe compiler_status - : - compiler_status.cpp - tiny_xml - /boost/filesystem//boost_filesystem/static - : - BOOST_ALL_NO_LIB=1 - /boost//headers - : - release - ; -explicit compiler_status ; - -exe library_status - : - library_status.cpp - tiny_xml - /boost/filesystem//boost_filesystem/static - : - BOOST_ALL_NO_LIB=1 - /boost//headers - : - release - ; -explicit library_status ; diff --git a/tools/regression/build/vcide/compiler_status.vcproj b/tools/regression/build/vcide/compiler_status.vcproj deleted file mode 100644 index 600981c9df87..000000000000 --- a/tools/regression/build/vcide/compiler_status.vcproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/build/vcide/library_status.vcproj b/tools/regression/build/vcide/library_status.vcproj deleted file mode 100644 index bd069fdaf691..000000000000 --- a/tools/regression/build/vcide/library_status.vcproj +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/build/vcide/process_jam_log.sln b/tools/regression/build/vcide/process_jam_log.sln deleted file mode 100644 index 29833cc0e182..000000000000 --- a/tools/regression/build/vcide/process_jam_log.sln +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index bbc8c9d78aae..000000000000 --- a/tools/regression/build/vcide/process_jam_log.vcproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/build/vcide/regression.sln b/tools/regression/build/vcide/regression.sln deleted file mode 100644 index 170f08037fe0..000000000000 --- a/tools/regression/build/vcide/regression.sln +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index 14775eb5334a..000000000000 --- a/tools/regression/doc/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - Regression Test Reporting Tools - - - -

    boost.png (6897 bytes) Regression Test Reporting Tools

    - -

    Boost regression testing uses Boost.Build to run the actual builds and - tests. A separate set of tools is used to generate the actual status - reports.

    - -
      -
    • Instructions - for running the regression tests as part of the published regression - tests are available at the Boost web site.
    • - -
    • process_jam_log.cpp - - Processes the bjam outputs, creating a file named test_log.xml for each - test encountered.
    • - -
    • compiler_status.cpp - - Generates HTML status tables from test_log.xml and other files.
    • - -
    • Jamroot.jam - Builds process_jam_log - and compiler_status executables.
    • - -
    • Library Status - 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.
    • -
    -
    - -

    Revised $Date$

    - -

    Copyright Beman Dawes 2003.

    - -

    Copyright Rene Rivera 2007.

    - -

    Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

    - - diff --git a/tools/regression/doc/library_status.html b/tools/regression/doc/library_status.html deleted file mode 100644 index a8eb4827fca2..000000000000 --- a/tools/regression/doc/library_status.html +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - - - - Libary Status - - - - - - - - - - -
    boost.png (6897 bytes) -

    Generating Library Status Tables

    -
    - -

    Purpose

    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. - -

    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.

    - -

    Preliminaries

    Generating these tables requires a couple of utility - programs: process_jam_log and library_status. - These can be built by moving to the directory - tools/regression/build and invoking bjam. If all goes well - these utility programs will be found in the directory - dist/bin. From there they should be moved to a place in the - current path. - -

    Running Tests for One Library

    - -
      -
    1. Start from your command line environment.
    2. - -
    3. set the current directory to:../libs/<library name>/test
    4. - -
    5. Invoke one of the following: - -
        -
      • ../../../tools/regression/src/library_test (*nix).
      • - -
      • ..\..\..\tools\regression\src\library_test - (windows).
      • -
      -
    6. - -
    7. 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.
    8. - -
    9. 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.
    10. - -
    11. Rerun the abve command with the argument set accordingly.
    12. - -
    13. When the command terminates, there should be a file named - "library_status.html" in the current directory.
    14. - -
    15. Display this file with any web browser.
    16. -
    There should appear a table similar to the following for the regex - library. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Test Namemsvc-7.1
    debugrelease
    link-staticthreading-multilink-staticthreading-multi
    threading-multithreading-multi
    bad_expression_testMissing - WarnMissing - Warn
    capturesMissing - FailMissing - Fail
    captures_testMissing - WarnMissing - Warn
    concept_checkMissingPassMissingPass
    icu_concept_checkMissingPassMissingPass
    object_cache_testMissing - WarnMissing - Warn
    posix_api_checkMissing - WarnMissing - Warn
    posix_api_check_cppMissingPassMissingPass
    recursion_testMissing - WarnMissing - Warn
    regex_config_infoMissing - PassMissing - Pass
    regex_dll_config_infoMissing - PassMissing - Pass
    regex_regress - Pass*Missing - Pass*Missing
    regex_regress_dllMissing - Pass*Missing - Pass*
    regex_regress_threadedMissingPassMissingPass
    static_mutex_testMissingPassMissingPass
    test_collate_infoMissing - WarnMissing - Warn
    unicode_iterator_testMissing - WarnMissing - Warn
    wide_posix_api_check_cMissing - WarnMissing - Warn
    wide_posix_api_check_cppMissing - WarnMissing - Warn
    - -

    This table was generated by invoking the following command line:

    - -

    ../../../tools/regression/src/library_test --toolset=msvc-7.1 - variant=debug,release

    - -

    from within the .../libs/regex/test directory.

    - -

    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 Jamfile.v2 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.

    - -

    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.

    - -

    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 - ../bin.v2/libs/test/<library%gt;/.... To reinitialize the - test results to empty, delete the corresponding files in this - directory.

    - -

    The procedure above assumes that the table are generated within the - directory ../libs/<library>/test. This is the most - common case since this directory contains the Jamfile.v2 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 ../libs/%lt;library%gt;/example. 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 library_test command is invoked.

    - -

    Running Tests for All Libraries

    For those with *nix or cygwin - command line shells, there is shell script that can be run from the boost - root directory: - -

    tools/regression/src/library_test_all

    - -

    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 status directory named - library_status_summary.html. This can be used to browse - through all test results for all test in all libraries.

    -
    - - -

    Copyright 2011 Bryce Lelbach.

    -

    Copyright 2007-2011 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)

    - -

    Revised $Date$

    - - diff --git a/tools/regression/index.html b/tools/regression/index.html deleted file mode 100644 index 536c846f9d8e..000000000000 --- a/tools/regression/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - Automatic redirection failed, please go to doc/index.html -
    - -

    Copyright Rene Rivera, 2007

    - -

    Distributed under the Boost Software License, Version 1.0. (See - accompanying file LICENSE_1_0.txt or - copy at www.boost.org/LICENSE_1_0.txt)

    - - diff --git a/tools/regression/src/boost_svn_export_archive.sh b/tools/regression/src/boost_svn_export_archive.sh deleted file mode 100755 index e86d377ab976..000000000000 --- a/tools/regression/src/boost_svn_export_archive.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/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 deleted file mode 100644 index 7f1345bd6f24..000000000000 --- a/tools/regression/src/collect_and_upload_logs.py +++ /dev/null @@ -1,546 +0,0 @@ - -# 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 -import re -import urlparse - - -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( -''' - - %(site)s - %(buildname)s - %(track)s - %(datetimestamp)s - -''' % { - '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(''' - - .Test.Boost.%(tag)s.%(library)s.%(test-name)s.%(type)s - %(result)s - %(toolset)s - %(timestamp)s - %(log)s - - ''' % { - '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_url ): - - if not ftp_url: - ftp_host = 'boost.cowic.de' - ftp_url = ''.join(['ftp','://anonymous','@',ftp_host,'/boost/do-not-publish-this-url/results/']) - utils.log( 'Uploading log archive "%s" to %s/%s' % ( results_file, ftp_url, tag ) ) - - ftp_parts = urlparse.urlparse(ftp_url) - ftp_netloc = re.split('[@]',ftp_parts[1]) - ftp_user = re.split('[:]',ftp_netloc[0])[0] - ftp_password = re.split('[:]',ftp_netloc[0]+':anonymous')[1] - ftp_site = re.split('[:]',ftp_netloc[1])[0] - ftp_path = ftp_parts[2] - - if not ftp_proxy: - ftp = ftplib.FTP( ftp_site ) - ftp.set_debuglevel( debug_level ) - ftp.login( ftp_user, ftp_password ) - 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( '%s@%s' % (ftp_user,ftp_site), ftp_password ) - - ftp.cwd( ftp_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 ) - - lines = [''] - for arg in sys.argv: - # Make sure that the ftp details are hidden - arg = re.sub( 'ftp://.*$', 'ftp://XXXXX', arg ) - - # Escape quotes - arg = re.sub( r'(\\|")', r'\\\1', arg ) - - # Quote arguments if needed - if arg.find( ' ' ) != -1: - arg = '"%s"' % arg - if len( lines[-1] ) + len( arg ) + 2 >= 80: - # align backslashes - lines[-1] += ' ' * ( 79 - len( lines[-1] ) ) - # indent lines after the first - lines.append( ' ' ) - lines[-1] += ( arg + ' ' ) - - results_xml.characters( '
    ' ) - results_xml.characters( '
    ' ) - results_xml.characters( '
    Command Line
    ' ) - results_xml.characters( '
    ' ) - results_xml.characters( '
    ' )
    -    results_xml.characters( '\\\n'.join(lines) )
    -    results_xml.characters( '
    ' ) - results_xml.characters( '
    ' ) - results_xml.characters( '
    \n' ) - - 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 - , ftp_url = None - , **unused - ): - - logs_archive = os.path.join( results_dir, '%s.zip' % runner_id ) - upload_to_ftp( tag, logs_archive, ftp_proxy, debug_level, ftp_url ) - 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, ftp_url ) - - -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 - , ftp_url = 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 - , ftp_url = ftp_url - ) - - -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=' - , 'ftp=' - ] - - 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 - , '--ftp' : 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' ] - , 'ftp' : options[ '--ftp' ] - } - - -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. -\t--ftp The ftp URL to upload 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 deleted file mode 100644 index c853f44d9924..000000000000 --- a/tools/regression/src/compiler_status.cpp +++ /dev/null @@ -1,1113 +0,0 @@ -// Generate Compiler Status HTML from jam regression test output -----------// - -// Copyright Bryce Lelbach 2011 -// Copyright Beman Dawes 2002-2011. - -// Distributed under the 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. - -// 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 - -#include "boost/config.hpp" -#include "boost/filesystem/operations.hpp" -#include "boost/filesystem/convenience.hpp" -#include "boost/filesystem/fstream.hpp" -#include "detail/tiny_xml.hpp" -namespace fs = boost::filesystem; -namespace xml = boost::tiny_xml; - -#include // for abort, exit -#include // for toupper -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using std::string; - -const string pass_msg( "Pass" ); -const string warn_msg( "Warn" ); -const string fail_msg( "Fail" ); -const string note_msg( "*" ); -const string missing_residue_msg( "Missing" ); - -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 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 error_count; - - // prefix for library and test hyperlink prefix - string svn_root ( "http://svn.boost.org/trac/boost/browser/trunk/" ); - string url_prefix_dir_view( svn_root ); - string url_prefix_checkout_view( svn_root ); - string url_suffix_text_view( "" ); - -// 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( "" ) != string::npos ) in_body = false; - if ( in_body ) notes_html += line; - else if ( line.find( "" ) ) 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->path().string() != ignore_dir_named ) - { - if ( find_file( *itr, name, path_found ) ) return true; - } - else if ( itr->path().string() == 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).path().string() == "SunWS_cache" ) continue; - // SGI does something similar for template instantiations. Jens Maurer - if( (*itr).path().string() == "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.string() - << " and " << (*itr).path().string() << "\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) - { - if ( relative == "status" ) - bin_path = locate_root / "bin.v2" / "libs"; - else - { - bin_path = locate_root / "bin.v2" / relative; - if (!fs::exists(bin_path)) - bin_path = locate_root / "bin" / relative; - } - if (!fs::exists(bin_path)) - { - std::cerr << "warning: could not find build results for '" - << relative << "'.\n"; - std::cerr << "warning: tried directory " - << bin_path.parent_path().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" )) ); - - string::size_type pos; - if ( (pos = compile.find("30 DAY EVALUATION LICENSE")) != string::npos ) - { - compile.erase(pos, 25); - while ( compile[0] == '\n' || compile[0] == '\r' ) compile.erase(0,1); - } - - // 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. - 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 << "

    " - << source_library_name << " - " << test_name << " - " << toolset << "

    \n"; - - if ( !compile.empty() ) - { - ++result; - links_file << "

    Compiler output:

    "
    -        << compile << "
    \n"; - } - if ( !link.empty() ) - links_file << "

    Linker output:

    " << link << "
    \n"; - if ( !run.empty() ) - links_file << "

    Run output:

    " << run << "
    \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 << "

    Library build failure:

    \n" - "See " - << source_library_name << " - " - << object_library_name << " - " << toolset << ""; - - 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 << "

    " - << object_library_name << " - " << toolset << "

    \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 += ""; - target += note_desc; - target += ""; - } - } - } - } - - // get_notes -------------------------------------------------------------// - - string get_notes( const string & toolset, - const string & library, const string & test, bool fail ) - { - string sep; - string target( "" ); - 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 == "" ) target.clear(); - else target += ""; - 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 += "
    " + missing_residue_msg + "" + missing_residue_msg + ""; - - // generate the status table cell pass/warn/fail HTML - if ( anything_generated != 0 ) - { - target += ""; - target += pass - ? (anything_generated < 2 ? pass_msg : warn_msg) - : fail_msg; - target += ""; - 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 += "
    "; - 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 += "
    "; - target += times.substr( 0, times.find( " " ) ); - } - } - } - - if ( !pass ) ++error_count[compiler]; - - target += "
    " + lib_name + "" + test_name + ""; - - if ( compile_time ) target += "
    Compile time:"; - if ( run_time ) target += "
    Run time:"; - - target += "
    " + test_type + "...
    " - << (desc.size() ? desc : compiler_itr->path().string()) - << (vers.size() ? (string( "
    " ) + vers ) : string( "" )) - << "
    \n"; - - // generate the column headings - - report << "\n" - "\n"; - - if ( relative == "status" ) - { - fs::recursive_directory_iterator ritr( bin_path ); - fs::recursive_directory_iterator end_ritr; - while ( ritr != end_ritr - && ((ritr->path().string().find( ".test" ) != (ritr->path().string().size()-5)) - || !fs::is_directory( *ritr ))) - ++ritr; // bypass chaff - if ( ritr != end_ritr ) - { - find_compilers( *ritr ); - } - } - else - { - fs::directory_iterator itr( bin_path ); - while ( itr != end_itr - && ((itr->path().string().find( ".test" ) != (itr->path().string().size()-5)) - || !fs::is_directory( *itr ))) - ++itr; // bypass chaff - if ( itr != end_itr ) - { - find_compilers( *itr ); - } - } - - report << "\n"; - - // now the rest of the table body - - do_table_body( bin_path ); - - // error total row - - report << "\n"; - - // for each compiler, generate html - int compiler = 0; - for ( std::vector::const_iterator itr=toolsets.begin(); - itr != toolsets.end(); ++itr, ++compiler ) - { - report << "\n"; - } - - report << "\n
    LibraryTest NameTest Type
     Number of Failures  ..." << error_count[compiler] << "
    \n"; - } - -} // unnamed namespace - -// main --------------------------------------------------------------------// - -#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE -#include - -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] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--comment" ) == 0 ) - { comment_path = fs::path( argv[2] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--notes" ) == 0 ) - { notes_path = fs::path( argv[2] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--notes-map" ) == 0 ) - { notes_map_path = fs::path( argv[2] ); --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] ); --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] ); - 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::system_complete( jamfile_path ); - jamfile.open( jamfile_path ); - if ( !jamfile ) - { - std::cerr << "Could not open Jamfile: " << jamfile_path.string() << std::endl; - return 1; - } - - report.open( fs::path( argv[2] ) ); - 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] ); - links_name = links_path.string(); - 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 << "\n" - "\n" - "Boost Test Results\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n
    \n" - "

    Boost Test Results - " + platform_desc() + "

    \n" - "Run " - << run_date; - if ( !rev.empty() ) report << ", Revision " << rev; - report << "\n"; - - - if ( compile_time ) - report << "

    Times reported are elapsed wall clock time in seconds.

    \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 << "
    \n
    \n"; - - if ( !no_links ) - { - links_file - << "\n" - "\n" - "Boost Test Details\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n
    \n" - "

    Boost Test Details - " + platform_desc() + "

    \n" - "Run Date: " - << run_date; - if ( !rev.empty() ) links_file << ", Revision " << rev; - links_file << "\n
    \n
    \n"; - } - - do_table(); - - if ( load_notes_html() ) report << notes_html << "\n"; - - report << "\n" - "\n" - ; - - if ( !no_links ) - { - links_file - << "\n" - "\n" - ; - } - return 0; -} diff --git a/tools/regression/src/detail/tiny_xml.cpp b/tools/regression/src/detail/tiny_xml.cpp deleted file mode 100644 index 682c04ff7b2e..000000000000 --- a/tools/regression/src/detail/tiny_xml.cpp +++ /dev/null @@ -1,167 +0,0 @@ -// 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 -#include - -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 << "\n"; - } - - } // namespace tiny_xml -} // namespace boost - diff --git a/tools/regression/src/detail/tiny_xml.hpp b/tools/regression/src/detail/tiny_xml.hpp deleted file mode 100644 index f9d91d2652b3..000000000000 --- a/tools/regression/src/detail/tiny_xml.hpp +++ /dev/null @@ -1,70 +0,0 @@ -// 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] "" } -// -// 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 -#include -#include - -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 deleted file mode 100644 index b5c0542ba471..000000000000 --- a/tools/regression/src/detail/tiny_xml_test.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// 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 - -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 deleted file mode 100644 index b248cbf06289..000000000000 --- a/tools/regression/src/detail/tiny_xml_test.txt +++ /dev/null @@ -1,17 +0,0 @@ - - -// (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) - - - -It's Howdy Doody time! - -It's not Howdy Doody time! - - -It's -Eastern Standard time! - - diff --git a/tools/regression/src/library_status.cpp b/tools/regression/src/library_status.cpp deleted file mode 100644 index d3ad41804877..000000000000 --- a/tools/regression/src/library_status.cpp +++ /dev/null @@ -1,991 +0,0 @@ -// Generate Library Status HTML from jam regression test output -----------// - -// Copyright Bryce Lelbach 2011 -// Copyright Beman Dawes 2002-2011. - -// Distributed under the 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 // for abort, exit -#include -#include -#include -#include // for make_pair on STLPort -#include -#include -#include -#include -#include -#include -#include -#include - -using std::string; - -const string pass_msg( "Pass" ); -const string warn_msg( "Warn" ); -const string fail_msg( "Fail" ); -const string note_msg( "*" ); -const string missing_residue_msg( "Missing" ); - -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 html_from_path; - - template - std::ostream & operator<<( - std::ostream &os, - std::pair p - ){ - while(p.first != p.second) - os << *p.first++; - return os; - } - - struct col_node { - int rows, cols; - bool has_leaf; - typedef std::map subcolumns_t; - subcolumns_t m_subcolumns; - bool operator<(const col_node &cn) const; - col_node() : - has_leaf(false) - {} - std::pair get_spans(); - }; - - std::pair 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 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 result - = node.m_subcolumns.insert( - std::make_pair(itr->path().native(), 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( "" ) != string::npos ) in_body = false; - if ( in_body ) notes_html += line; - else if ( line.find( "" ) ) 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 << "

    " - << std::make_pair( - html_from_path(target_dir.string().begin()), - html_from_path(target_dir.string().end()) - ) - ; - links_file << "

    \n";; - - if ( !compile.empty() ) - { - ++result; - links_file << "

    Compiler output:

    "
    -                << compile << "
    \n"; - } - if ( !link.empty() ) - links_file << "

    Linker output:

    " << link << "
    \n"; - if ( !run.empty() ) - links_file << "

    Run output:

    " << run << "
    \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 << "

    Library build failure:

    \n" - "See "; - 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 << "

    " - << object_library_name << " - " - << std::make_pair( - html_from_path(target_dir.string().begin()), - html_from_path(target_dir.string().end()) - ) - << "

    \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 += ""; - target += note_desc; - target += ""; - } - } - } - } - - // 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 += "" + missing_residue_msg + ""; - 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 += "" + missing_residue_msg + ""; - 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 += ""; - if ( anything_generated != 0 ) - { - target += ""; - target += pass - ? (anything_generated < 2 ? pass_msg : warn_msg) - : fail_msg; - target += ""; - if ( pass && note ) target += note_msg; - } - else target += pass ? pass_msg : fail_msg; - - // if profiling - if(profile && pass){ - // add link to profile - target += " Profile"; - } - - // if notes, generate the superscript HTML -// if ( !notes.empty() ) -// target += get_notes( toolset, lib_name, test_name, !pass ); - - target += ""; - 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 += ""; - - target += ""; - //target += ""; - target += test_name; - target += ""; - target += ""; - -// target += "" + test_type + ""; - - 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 += ""; - - 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 results; - - for ( fs::directory_iterator itr( test_lib_dir ); itr != end_itr; ++itr ) - { - if(! fs::is_directory(*itr)) - continue; - - string test_name = itr->path().native(); - // if the file name contains ".test" - string::size_type s = test_name.find( ".test" ); - if(string::npos != s) - // strip it off - test_name.resize(s); - else - // if it doesn't - skip this directory - continue; - - 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::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 << "" ; - report << name; - report << "\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(fs::path const& initial_path){ - // walk up from the path were we started until we find - // bin or bin.v2 - - fs::path::const_iterator it = initial_path.end(), end = initial_path.end(); - fs::path test_lib_dir = 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(*it != "libs") - --it; - test_lib_dir.remove_filename(); - } - - if(it == end) - throw std::string("must be run from within a library directory"); - - - for(;it != end; ++it){ - test_lib_dir /= *it; // 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).native()); - if(1 == --count) - break; - library_name.append("/"); - } - return library_name; - } - - fs::path find_boost_root(fs::path initial_path){ - fs::path boost_root = 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_filename(); - } - - return boost_root; - } - - // do_table ----------------------------------------------------------------// - void do_table(fs::path const& initial_path, const string & lib_name) - { - col_node root_node; - - fs::path lib_test_dir = find_lib_test_dir(initial_path); - - 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 << "\n"; - - // emit - root_node.get_spans(); - int row_count = header_depth(root_node); - report << "\n"; - report << "\n"; - - // emit column headers - int row_index = 0; - for(;;){ - emit_column_headers(root_node, row_index, 0, row_count); - report << "" ; - if(++row_index == row_count) - break; - report << "\n"; - } - - // now the rest of the table body - do_table_body(root_node, lib_name, lib_test_dir); - - report << "
    Test Name
    \n"; - } -}// unnamed namespace - -// main --------------------------------------------------------------------// - -#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE -#include - -int cpp_main( int argc, char * argv[] ) // note name! -{ - fs::path initial_path = fs::initial_path(); - - 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] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--boost-root" ) == 0 ) - { boost_root = fs::path( argv[2] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--comment" ) == 0 ) - { comment_path = fs::path( argv[2] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--notes" ) == 0 ) - { notes_path = fs::path( argv[2] ); --argc; ++argv; } - else if ( argc > 2 && std::strcmp( argv[1], "--notes-map" ) == 0 ) - { notes_map_path = fs::path( argv[2] ); --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(initial_path); - if ( locate_root.empty() ) - locate_root = boost_root; - - report.open( fs::path( argv[1] ) ); - 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] ); - links_name = links_path.native(); - 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(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 - << "\n" - << "\n" - << "Boost Library Status Automatic Test\n" - << "\n" - << "\n" - << "\n" - << "\n" - << "\n" - << "\n
    \n" - << "

    Library Status: " + library_name + "

    \n" - << "Run Date: " - << 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 << "
    \n
    \n"; - - if ( !no_links ) - { - links_file - << "\n" - << "\n" - << "Boost Library Status Error Log\n" - << "\n" - << "\n" - << "\n" - << "\n" - << "\n" - << "\n
    \n" - << "

    Library Status: " + library_name + "

    \n" - << "Run Date: " - << run_date - << "\n
    \n
    \n" - ; - } - - do_table(initial_path, library_name); - - if ( load_notes_html() ) report << notes_html << "\n"; - - report << "\n" - "\n" - ; - - if ( !no_links ) - { - links_file - << "\n" - "\n" - ; - } - return 0; -} diff --git a/tools/regression/src/library_test.bat b/tools/regression/src/library_test.bat deleted file mode 100644 index 0f33840c3465..000000000000 --- a/tools/regression/src/library_test.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off - -rem Copyright Robert Ramey 2007 - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -if not "%1" == "" goto bjam - echo Usage: %0 "" - 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="" - goto end -:bjam - bjam --dump-tests %* >bjam.log 2>&1 - process_jam_log --v2 " - 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=" -else - bjam --dump-tests $@ >bjam.log 2>&1 - process_jam_log --v2 " - 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 <status/library_status_contents.html - - - - - - -Library Status Contents - -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 "$lib_name
    " - ../../../tools/regression/src/library_test.sh $@ - 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 "$lib_name/$sublib_name
    " - ../../../../tools/regression/src/library_test.sh $@ - cd >nul .. - fi - cd >nul .. - fi - done - - cd >nul .. - fi -done - - -cd >nul .. - -#html trailer -cat <>status/library_status_contents.html - - -end - - diff --git a/tools/regression/src/process_jam_log.cpp b/tools/regression/src/process_jam_log.cpp deleted file mode 100644 index 2119d74a6313..000000000000 --- a/tools/regression/src/process_jam_log.cpp +++ /dev/null @@ -1,892 +0,0 @@ -// 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. - -#define BOOST_FILESYSTEM_VERSION 3 - -#include - -#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 -#include -#include -#include -#include // for make_pair -#include -#include // for tolower -#include // for exit - -using std::string; -namespace xml = boost::tiny_xml; -namespace fs = boost::filesystem; - -// options - -static bool echo = false; -static bool create_dirs = false; -static bool boost_build_v2 = true; - -namespace -{ - struct test_info - { - string file_path; // relative boost-root - string type; - bool always_show_run_output; - }; - typedef std::map< string, test_info > test2info_map; // key is test-name - test2info_map test2info; - - fs::path boost_root; - fs::path locate_root; // ALL_LOCATE_TARGET (or boost_root if none) - - // set_boost_root --------------------------------------------------------// - - void set_boost_root() - { - - boost_root = fs::initial_path(); - - for(;;) - { - if ( fs::exists( boost_root / "libs" ) ) - { - fs::current_path( fs::initial_path() ); // restore initial path - return; - } - fs::current_path( ".." ); - if ( boost_root == fs::current_path() ) - { - fs::current_path( fs::initial_path() ); // restore initial path - std::cout << - "Abort: process_jam_log must be run from within a boost directory tree\n"; - std::exit(1); - } - boost_root = fs::current_path(); - } - } - - // append_html -------------------------------------------------------------// - - void append_html( const string & src, string & target ) - { - // there are a few lines we want to ignore - if ( src.find( "th target..." ) != string::npos - || src.find( "cc1plus.exe: warning: changing search order for system directory" ) != string::npos - || src.find( "cc1plus.exe: warning: as it has already been specified as a non-system directory" ) != string::npos - ) return; - - // on some platforms (e.g. tru64cxx) the following line is a real performance boost - target.reserve(src.size() * 2 + target.size()); - - for ( string::size_type pos = 0; pos < src.size(); ++pos ) - { - if ( src[pos] == '<' ) target += "<"; - else if ( src[pos] == '>' ) target += ">"; - else if ( src[pos] == '&' ) target += "&"; - else target += src[pos]; - } - } - - // timestamp ---------------------------------------------------------------// - - string timestamp() - { - char run_date[128]; - std::time_t tod; - std::time( &tod ); - std::strftime( run_date, sizeof(run_date), - "%Y-%m-%d %X UTC", std::gmtime( &tod ) ); - return string( run_date ); - } - -// convert path separators to forward slashes ------------------------------// - - void convert_path_separators( string & s ) - { - for ( string::iterator itr = s.begin(); itr != s.end(); ++itr ) - if ( *itr == '\\' || *itr == '!' ) *itr = '/'; - } - -// trim_left ----------------------------------------------------------------// - - std::string trim_left( std::string const& s ) - { - std::string::size_type const pos( s.find_first_not_of(' ') ); - return pos != std::string::npos - ? s.substr( pos, s.size() - pos + 1 ) - : "" - ; - } - - -// split --------------------------------------------------------------------// - - std::vector split( std::string const& s ) - { - std::string::size_type const pos( s.find_first_of(' ') ); - std::vector result( 1, s.substr( 0, pos ) ); - if ( pos == std::string::npos ) - return result; - - std::vector 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 ) { - start_pos = path.find( "tools/" ); - } - - 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 = path.find( '/', start_pos ) + 1; - 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(); - std::istream* input = 0; - - if ( argc <= 1 ) - { - std::cout << "process_jam_log [--echo] [--create-directories] [--v1|--v2]\n" - " [--boost-root boost_root] [--locate-root locate_root]\n" - " [--input-file input_file]\n" - " [locate-root]\n" - "--echo - verbose diagnostic output.\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" - "--boost-root - the root of the boost installation being used. If not defined\n" - " assume to run from within it and discover it heuristically.\n" - "--locate-root - the same as the bjam ALL_LOCATE_TARGET\n" - " parameter, if any. Default is boost-root.\n" - "--input-file - the output of a bjam --dump-tests run. Default is std input.\n" - ; - return 1; - } - - while ( argc > 1 ) - { - if ( std::strcmp( argv[1], "--echo" ) == 0 ) - { - echo = true; - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--create-directories" ) == 0 ) - { - create_dirs = true; - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--v2" ) == 0 ) - { - boost_build_v2 = true; - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--v1" ) == 0 ) - { - boost_build_v2 = false; - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--boost-root" ) == 0 ) - { - --argc; ++argv; - if ( argc == 1 ) - { - std::cout << "Abort: option --boost-root requires a directory argument\n"; - std::exit(1); - } - boost_root = fs::path( argv[1] ); - if ( !boost_root.is_complete() ) - boost_root = ( fs::initial_path() / boost_root ).normalize(); - - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--locate-root" ) == 0 ) - { - --argc; ++argv; - if ( argc == 1 ) - { - std::cout << "Abort: option --locate-root requires a directory argument\n"; - std::exit(1); - } - locate_root = fs::path( argv[1] ); - --argc; ++argv; - } - else if ( std::strcmp( argv[1], "--input-file" ) == 0 ) - { - --argc; ++argv; - if ( argc == 1 ) - { - std::cout << "Abort: option --input-file requires a filename argument\n"; - std::exit(1); - } - input = new std::ifstream(argv[1]); - --argc; ++argv; - } - else if ( *argv[1] == '-' ) - { - std::cout << "Abort: unknown option; invoke with no arguments to see list of valid options\n"; - return 1; - } - else - { - locate_root = fs::path( argv[1] ); - --argc; ++argv; - } - } - - if ( boost_root.empty() ) - { - set_boost_root(); - boost_root.normalize(); - } - - - if ( locate_root.empty() ) - { - locate_root = boost_root; - } - else if ( !locate_root.is_complete() ) - { - locate_root = ( fs::initial_path() / locate_root ).normalize(); - } - - if ( input == 0 ) - { - input = &std::cin; - } - - 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; - - // 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. - - static const int max_line_length = 8192; - int line_num = 0; - while ( std::getline( *input, line ) ) - { - if (max_line_length < line.size()) line = line.substr(0, max_line_length); - - ++line_num; - - std::vector 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( "" ) != 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( "" ) == 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/process_jam_log.py b/tools/regression/src/process_jam_log.py deleted file mode 100755 index a7722b9d7a68..000000000000 --- a/tools/regression/src/process_jam_log.py +++ /dev/null @@ -1,468 +0,0 @@ -#!/usr/bin/python -# Copyright 2008 Rene Rivera -# 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) - -import re -import optparse -import time -import xml.dom.minidom -import xml.dom.pulldom -from xml.sax.saxutils import unescape, escape -import os.path - -#~ Process a bjam XML log into the XML log format for Boost result processing. -class BJamLog2Results: - - def __init__(self,args=None): - opt = optparse.OptionParser( - usage="%prog [options] input") - opt.add_option( '--output', - help="output file" ) - 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( '--incremental', - help="do incremental run (do not remove previous binaries)", - action='store_true' ) - opt.add_option( '--platform' ) - opt.add_option( '--source' ) - opt.add_option( '--revision' ) - self.output = None - self.runner = None - self.comment='comment.html' - self.tag='trunk' - self.incremental=False - self.platform='' - self.source='SVN' - self.revision=None - self.input = [] - ( _opt_, self.input ) = opt.parse_args(args,self) - if self.incremental: - run_type = 'incremental' - else: - run_type = 'full' - self.results = xml.dom.minidom.parseString(''' - - -''' % { - 'source' : self.source, - 'runner' : self.runner, - 'platform' : self.platform, - 'tag' : self.tag, - 'run-type' : run_type, - 'revision' : self.revision, - } ) - - self.test = {} - self.target_to_test = {} - self.target = {} - self.parent = {} - self.log = {} - - self.add_log() - self.gen_output() - - #~ print self.test - #~ print self.target - - def add_log(self): - if self.input[0]: - bjam_xml = self.input[0] - else: - bjam_xml = self.input[1] - events = xml.dom.pulldom.parse(bjam_xml) - context = [] - test_run = self.results.documentElement - for (event,node) in events: - if event == xml.dom.pulldom.START_ELEMENT: - context.append(node) - if node.nodeType == xml.dom.Node.ELEMENT_NODE: - x_f = self.x_name_(*context) - if x_f: - events.expandNode(node) - # expanding eats the end element, hence walking us out one level - context.pop() - # call the translator, and add returned items to the result - items = (x_f[1])(node) - if items: - for item in items: - if item: - test_run.appendChild(self.results.createTextNode("\n")) - test_run.appendChild(item) - elif event == xml.dom.pulldom.END_ELEMENT: - context.pop() - #~ Add the log items nwo that we've collected all of them. - items = self.log.values() - if items: - for item in items: - if item: - test_run.appendChild(self.results.createTextNode("\n")) - test_run.appendChild(item) - - def gen_output(self): - if self.output: - out = open(self.output,'w') - else: - out = sys.stdout - if out: - self.results.writexml(out,encoding='utf-8') - - def tostring(self): - return self.results.toxml('utf-8') - - def x_name_(self, *context, **kwargs): - node = None - names = [ ] - for c in context: - if c: - if not isinstance(c,xml.dom.Node): - suffix = '_'+c.replace('-','_').replace('#','_') - else: - suffix = '_'+c.nodeName.replace('-','_').replace('#','_') - node = c - names.append('x') - names = map(lambda x: x+suffix,names) - if node: - for name in names: - if hasattr(self,name): - return (name,getattr(self,name)) - return None - - def x(self, *context, **kwargs): - node = None - names = [ ] - for c in context: - if c: - if not isinstance(c,xml.dom.Node): - suffix = '_'+c.replace('-','_').replace('#','_') - else: - suffix = '_'+c.nodeName.replace('-','_').replace('#','_') - node = c - names.append('x') - names = map(lambda x: x+suffix,names) - if node: - for name in names: - if hasattr(self,name): - return getattr(self,name)(node,**kwargs) - else: - assert False, 'Unknown node type %s'%(name) - return None - - #~ The timestamp goes to the corresponding attribute in the result. - def x_build_timestamp( self, node ): - test_run = self.results.documentElement - test_run.setAttribute('timestamp',self.get_data(node).strip()) - return None - - #~ Comment file becomes a comment node. - def x_build_comment( self, node ): - comment = None - if self.comment: - comment_f = open(self.comment) - if comment_f: - comment = comment_f.read() - comment_f.close() - if not comment: - comment = '' - return [self.new_text('comment',comment)] - - #~ Tests are remembered for future reference. - def x_build_test( self, node ): - test_run = self.results.documentElement - test_node = node - test_name = test_node.getAttribute('name') - self.test[test_name] = { - 'library' : '/'.join(test_name.split('/')[0:-1]), - 'test-name' : test_name.split('/')[-1], - 'test-type' : test_node.getAttribute('type').lower(), - 'test-program' : self.get_child_data(test_node,tag='source',strip=True), - 'target' : self.get_child_data(test_node,tag='target',strip=True), - 'info' : self.get_child_data(test_node,tag='info',strip=True) - } - #~ Add a lookup for the test given the test target. - self.target_to_test[self.test[test_name]['target']] = test_name - #~ print "--- %s\n => %s" %(self.test[test_name]['target'],test_name) - return None - - #~ Process the target dependency DAG into an ancestry tree so we can look up - #~ which top-level library and test targets specific build actions correspond to. - def x_build_targets_target( self, node ): - test_run = self.results.documentElement - target_node = node - name = self.get_child_data(target_node,tag='name',strip=True) - path = self.get_child_data(target_node,tag='path',strip=True) - jam_target = self.get_child_data(target_node,tag='jam-target',strip=True) - #~ print "--- target :: %s" %(name) - #~ Map for jam targets to virtual targets. - self.target[jam_target] = { - 'name' : name, - 'path' : path - } - #~ Create the ancestry. - dep_node = self.get_child(self.get_child(target_node,tag='dependencies'),tag='dependency') - while dep_node: - child = self.get_data(dep_node,strip=True) - child_jam_target = '%s' % (path,child.split('//',1)[1]) - self.parent[child_jam_target] = jam_target - #~ print "--- %s\n ^ %s" %(jam_target,child_jam_target) - dep_node = self.get_sibling(dep_node.nextSibling,tag='dependency') - return None - - #~ Given a build action log, process into the corresponding test log and - #~ specific test log sub-part. - def x_build_action( self, node ): - test_run = self.results.documentElement - action_node = node - name = self.get_child(action_node,tag='name') - if name: - name = self.get_data(name) - #~ Based on the action, we decide what sub-section the log - #~ should go into. - action_type = None - if re.match('[^%]+%[^.]+[.](compile)',name): - action_type = 'compile' - elif re.match('[^%]+%[^.]+[.](link|archive)',name): - action_type = 'link' - elif re.match('[^%]+%testing[.](capture-output)',name): - action_type = 'run' - elif re.match('[^%]+%testing[.](expect-failure|expect-success)',name): - action_type = 'result' - #~ print "+ [%s] %s %s :: %s" %(action_type,name,'','') - if action_type: - #~ Get the corresponding test. - (target,test) = self.get_test(action_node,type=action_type) - #~ Skip action that have no correspoding test as they are - #~ regular build actions and don't need to show up in the - #~ regression results. - if not test: - return None - #~ And the log node, which we will add the results to. - log = self.get_log(action_node,test) - #~ print "--- [%s] %s %s :: %s" %(action_type,name,target,test) - #~ Collect some basic info about the action. - result_data = "%(info)s\n\n%(command)s\n%(output)s\n" % { - 'command' : self.get_action_command(action_node,action_type), - 'output' : self.get_action_output(action_node,action_type), - 'info' : self.get_action_info(action_node,action_type) - } - #~ For the test result status we find the appropriate node - #~ based on the type of test. Then adjust the result status - #~ acorrdingly. This makes the result status reflect the - #~ expectation as the result pages post processing does not - #~ account for this inversion. - action_tag = action_type - if action_type == 'result': - if re.match(r'^compile',test['test-type']): - action_tag = 'compile' - elif re.match(r'^link',test['test-type']): - action_tag = 'link' - elif re.match(r'^run',test['test-type']): - action_tag = 'run' - #~ The result sub-part we will add this result to. - result_node = self.get_child(log,tag=action_tag) - if action_node.getAttribute('status') == '0': - action_result = 'succeed' - else: - action_result = 'fail' - if not result_node: - #~ If we don't have one already, create it and add the result. - result_node = self.new_text(action_tag,result_data, - result = action_result, - timestamp = action_node.getAttribute('start')) - log.appendChild(self.results.createTextNode("\n")) - log.appendChild(result_node) - else: - #~ For an existing result node we set the status to fail - #~ when any of the individual actions fail, except for result - #~ status. - if action_type != 'result': - result = result_node.getAttribute('result') - if action_node.getAttribute('status') != '0': - result = 'fail' - else: - result = action_result - result_node.setAttribute('result',result) - result_node.appendChild(self.results.createTextNode("\n")) - result_node.appendChild(self.results.createTextNode(result_data)) - return None - - #~ The command executed for the action. For run actions we omit the command - #~ as it's just noise. - def get_action_command( self, action_node, action_type ): - if action_type != 'run': - return self.get_child_data(action_node,tag='command') - else: - return '' - - #~ The command output. - def get_action_output( self, action_node, action_type ): - return self.get_child_data(action_node,tag='output',default='') - - #~ Some basic info about the action. - def get_action_info( self, action_node, action_type ): - info = "" - #~ The jam action and target. - info += "%s %s\n" %(self.get_child_data(action_node,tag='name'), - self.get_child_data(action_node,tag='path')) - #~ The timing of the action. - info += "Time: (start) %s -- (end) %s -- (user) %s -- (system) %s\n" %( - action_node.getAttribute('start'), action_node.getAttribute('end'), - action_node.getAttribute('user'), action_node.getAttribute('system')) - #~ And for compiles some context that may be hidden if using response files. - if action_type == 'compile': - define = self.get_child(self.get_child(action_node,tag='properties'),name='define') - while define: - info += "Define: %s\n" %(self.get_data(define,strip=True)) - define = self.get_sibling(define.nextSibling,name='define') - return info - - #~ Find the test corresponding to an action. For testing targets these - #~ are the ones pre-declared in the --dump-test option. For libraries - #~ we create a dummy test as needed. - def get_test( self, node, type = None ): - jam_target = self.get_child_data(node,tag='jam-target') - base = self.target[jam_target]['name'] - target = jam_target - while target in self.parent: - target = self.parent[target] - #~ print "--- TEST: %s ==> %s" %(jam_target,target) - #~ main-target-type is a precise indicator of what the build target is - #~ proginally meant to be. - main_type = self.get_child_data(self.get_child(node,tag='properties'), - name='main-target-type',strip=True) - if main_type == 'LIB' and type: - lib = self.target[target]['name'] - if not lib in self.test: - self.test[lib] = { - 'library' : re.search(r'libs/([^/]+)',lib).group(1), - 'test-name' : os.path.basename(lib), - 'test-type' : 'lib', - 'test-program' : os.path.basename(lib), - 'target' : lib - } - test = self.test[lib] - else: - target_name_ = self.target[target]['name'] - if self.target_to_test.has_key(target_name_): - test = self.test[self.target_to_test[target_name_]] - else: - test = None - return (base,test) - - #~ Find, or create, the test-log node to add results to. - def get_log( self, node, test ): - target_directory = os.path.dirname(self.get_child_data( - node,tag='path',strip=True)) - target_directory = re.sub(r'.*[/\\]bin[.]v2[/\\]','',target_directory) - target_directory = re.sub(r'[\\]','/',target_directory) - if not target_directory in self.log: - if 'info' in test and test['info'] == 'always_show_run_output': - show_run_output = 'true' - else: - show_run_output = 'false' - self.log[target_directory] = self.new_node('test-log', - library=test['library'], - test_name=test['test-name'], - test_type=test['test-type'], - test_program=test['test-program'], - toolset=self.get_toolset(node), - target_directory=target_directory, - show_run_output=show_run_output) - return self.log[target_directory] - - #~ The precise toolset from the build properties. - def get_toolset( self, node ): - toolset = self.get_child_data(self.get_child(node,tag='properties'), - name='toolset',strip=True) - toolset_version = self.get_child_data(self.get_child(node,tag='properties'), - name='toolset-%s:version'%toolset,strip=True) - return '%s-%s' %(toolset,toolset_version) - - #~ XML utilities... - - def get_sibling( self, sibling, tag = None, id = None, name = None, type = None ): - n = sibling - while n: - found = True - if type and found: - found = found and type == n.nodeType - if tag and found: - found = found and tag == n.nodeName - if (id or name) and found: - found = found and n.nodeType == xml.dom.Node.ELEMENT_NODE - if id and found: - if n.hasAttribute('id'): - found = found and n.getAttribute('id') == id - else: - found = found and n.hasAttribute('id') and n.getAttribute('id') == id - if name and found: - found = found and n.hasAttribute('name') and n.getAttribute('name') == name - if found: - return n - n = n.nextSibling - return None - - def get_child( self, root, tag = None, id = None, name = None, type = None ): - return self.get_sibling(root.firstChild,tag=tag,id=id,name=name,type=type) - - def get_data( self, node, strip = False, default = None ): - data = None - if node: - data_node = None - if not data_node: - data_node = self.get_child(node,tag='#text') - if not data_node: - data_node = self.get_child(node,tag='#cdata-section') - data = "" - while data_node: - data += data_node.data - data_node = data_node.nextSibling - if data_node: - if data_node.nodeName != '#text' \ - and data_node.nodeName != '#cdata-section': - data_node = None - if not data: - data = default - else: - if strip: - data = data.strip() - return data - - def get_child_data( self, root, tag = None, id = None, name = None, strip = False, default = None ): - return self.get_data(self.get_child(root,tag=tag,id=id,name=name),strip=strip,default=default) - - def new_node( self, tag, *child, **kwargs ): - result = self.results.createElement(tag) - for k in kwargs.keys(): - if kwargs[k] != '': - if k == 'id': - result.setAttribute('id',kwargs[k]) - elif k == 'klass': - result.setAttribute('class',kwargs[k]) - else: - result.setAttribute(k.replace('_','-'),kwargs[k]) - for c in child: - if c: - result.appendChild(c) - return result - - def new_text( self, tag, data, **kwargs ): - result = self.new_node(tag,**kwargs) - data = data.strip() - if len(data) > 0: - result.appendChild(self.results.createTextNode(data)) - return result - - -if __name__ == '__main__': BJamLog2Results() diff --git a/tools/regression/src/regression-logs.pl b/tools/regression/src/regression-logs.pl deleted file mode 100644 index 97cd4e9acd41..000000000000 --- a/tools/regression/src/regression-logs.pl +++ /dev/null @@ -1,197 +0,0 @@ -#!/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 "$percent%
    ($warn warnings)
    "; -} - -# 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 "$percent%
    ($fail)
    "; -} - -# 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 "\n"; - my $test_t = timegm($sec,$min,$hour,$day,$month,$year); - my $age = time-$test_t; - my $age_days = $age/(60*60*24); - #print "\n"; - my $age_html = ""; - if ($age_days <= 2) { } - elsif ($age_days <= 14) { $age_html = ""; } - else { $age_html = ""; } - return $age_html.$_[0].""; -} - -# 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 "\n"; - my $test_t = timegm($sec,$min,$hour,$day,$month,$year); - my $age = time-$test_t; - my $age_days = $age/(60*60*24); - #print "\n"; - my $age_html = ""; - if ($age_days <= 2) { } - elsif ($age_days <= 14) { $age_html = ""; } - else { $age_html = ""; } - 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.""; -} - -#~ foreach my $k (sort keys %ENV) -#~ { - #~ print "\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 "\n"; -print "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\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 =~ /(

    Compiler(.(?!<\/td>))+.)/si); - my ($platform) = ($status =~ /Status: ([^<]+)/si); - my ($run_date) = ($status =~ /Date:<\/b> ([^<]+)/si); - $run_date =~ s/, /
    /g; - my ($compilers) = ($content =~ /Test Type<\/a><\/t[dh]>((.(?!<\/tr>))+.)/si); - if ($compilers eq "") { next; } - $compilers =~ s/-
    //g; - $compilers =~ s/<\/td>//g; - my @compiler = ($compilers =~ /

    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n"; - $row = ($row+1)%2; - foreach my $c (1..($count-1)) - { - print - "\n", - "\n", - "\n", - "\n", - "\n"; - $row = ($row+1)%2; - } - print - "\n", - "\n", - "\n"; - } -} -print "
    PlatformRun DateAgeCompilersPassFail
    (.*)$/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 "\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 "\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 "\n"; - for my $comp (1..(scalar @compiler)) - { - my @lines = split(/
    /,$compiler[$comp-1]); - if (@lines > 2) { $compiler[$comp-1] = join(' ',@lines[0..(scalar @lines)-2])."
    ".$lines[(scalar @lines)-1]; } - } - print - "
    $platform
    ($spec)
    ",$run_date,"",age_info($run_date),"",$compiler[0],"",result_info_pass("#000000",$pass[0],$warn[0],$fail[0],$missing[0]),"",result_info_fail("#FF0000",$pass[0],$warn[0],$fail[0],$missing[0]),"
    ",$compiler[$c],"",result_info_pass("#000000",$pass[$c],$warn[$c],$fail[$c],$missing[$c]),"",result_info_fail("#FF0000",$pass[$c],$warn[$c],$fail[$c],$missing[$c]),"

    \n"; diff --git a/tools/regression/src/regression.py b/tools/regression/src/regression.py deleted file mode 100644 index 47de795fd027..000000000000 --- a/tools/regression/src/regression.py +++ /dev/null @@ -1,908 +0,0 @@ -#!/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' : 'trunk/tools/build/v2/engine', - '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( '--libraries', - help="comma separated list of libraries to test") - 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( '--ftp', - help="FTP URL to upload results to." ) - 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: :@[:]" ) - 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.libraries=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.ftp=None - 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' ) - if self.pjl_toolset != 'python': - self.regression_log = os.path.join( self.regression_results, 'bjam.log' ) - else: - self.regression_log = os.path.join( self.regression_results, 'bjam.xml' ) - 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' } - elif sys.platform == 'cygwin': - self.patch_boost = 'patch_boost' - 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) - - if self.libraries is not None: - self.libraries = self.libraries.split(",") - # Boost.Build depends on any having run - if "build" in self.libraries and "any" not in self.libraries: - self.libraries += ["any"] - - self.bjam_options += ' "--limit-tests=' + \ - "|".join(lib for lib in self.libraries if lib != "build") + '"' - - 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) - if self.pjl_toolset != 'python': - 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() - self.command_test_boost_build() - - if "process" in args: - if self.pjl_toolset != 'python': - 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() - if self.pjl_toolset != 'python': - test_cmd = '%s -d2 preserve-test-targets=off --dump-tests %s "--build-dir=%s" >>"%s" 2>&1' % ( - self.bjam_cmd( self.toolsets ), - self.bjam_options, - self.regression_results, - self.regression_log ) - else: - test_cmd = '%s -d1 preserve-test-targets=off --dump-tests --verbose-test %s "--build-dir=%s" "--out-xml=%s"' % ( - 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_boost_build(self): - if self.libraries is not None and "build" not in self.libraries: - return - - self.import_utils() - self.log( 'Running Boost.Build tests' ) - # Find the true names of the toolsets used for testing - toolsets = os.listdir(os.path.join(self.regression_results, - "boost/bin.v2/libs/any/test/any_test.test")); - for t in toolsets: - d = os.path.join(self.regression_results, ("boost-build-%s" % (t))) - utils.makedirs (d) - fn = os.path.join(d, "test_log.xml") - cd = os.getcwd() - try: - os.chdir (os.path.join (self.boost_root, 'tools/build/v2/test')); - bjam_path = os.path.dirname (self.tool_path( self.bjam )) - self.log( "Using bjam binary in '%s'" % (bjam_path)) - os.putenv('PATH', bjam_path + os.pathsep + os.environ['PATH']) - utils.system ( [ '"%s" test_all.py --default-bjam --xml %s > %s' % (sys.executable, t, fn) ] ) - finally: - 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( '

    Tests are run on %s platform.

    ' % self.platform_name() ) - f.close() - - 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 - - if self.pjl_toolset != 'python': - from collect_and_upload_logs import collect_logs - if self.incremental: - run_type = 'incremental' - else: - run_type = 'full' - 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 ) - else: - from process_jam_log import BJamLog2Results - if self.incremental: - run_type = '--incremental' - else: - run_type = '' - BJamLog2Results([ - '--output='+os.path.join(self.regression_results,self.runner+'.xml'), - '--runner='+self.runner, - '--comment='+comment_path, - '--tag='+self.tag, - '--platform='+self.platform, - '--source='+source, - '--revision='+revision, - run_type, - self.regression_log - ]) - self.compress_file( - os.path.join(self.regression_results,self.runner+'.xml'), - os.path.join(self.regression_results,self.runner+'.zip') - ) - - def command_upload_logs(self): - self.import_utils() - from collect_and_upload_logs import upload_logs - if self.ftp: - 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, - ftp_url = self.ftp ) - ) - else: - 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( self.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 ) ) - - def compress_file( self, file_path, archive_path ): - self.import_utils() - utils.log( 'Compressing "%s"...' % file_path ) - - try: - import zipfile - 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 ) - - #~ 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 self.user != 'anonymous' and self.user != '': - 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 deleted file mode 100644 index 5e8e0c7d0116..000000000000 --- a/tools/regression/src/run.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/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', 'process_jam_log.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 deleted file mode 100644 index 483cecfeaecc..000000000000 --- a/tools/regression/src/run_tests.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh -# -# Copyright John Maddock -# Copyright Rene Rivera -# -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt -# -# 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/build/v2/engine/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/build/v2/engine" && \ -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 deleted file mode 100755 index 1b17cfaaee72..000000000000 --- a/tools/regression/src/smoke.py +++ /dev/null @@ -1,197 +0,0 @@ -# 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("")] - 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 deleted file mode 100644 index 43c715b2e070..000000000000 --- a/tools/regression/test/Jamfile.v2 +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright Misha Bergal 2006 -# -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - -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 ] -# The link test .cpp files were apparently never committed to the repository, -# and were lost. -# [ 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 ] - ; diff --git a/tools/regression/test/compile-fail_fail.cpp b/tools/regression/test/compile-fail_fail.cpp deleted file mode 100644 index 76fc53b9d7c9..000000000000 --- a/tools/regression/test/compile-fail_fail.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// (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 deleted file mode 100644 index cacb17d13394..000000000000 --- a/tools/regression/test/compile-fail_pass.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// (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 deleted file mode 100644 index cacb17d13394..000000000000 --- a/tools/regression/test/compile_fail.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// (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 deleted file mode 100644 index 384b51fa4a32..000000000000 --- a/tools/regression/test/compile_pass.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// (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 deleted file mode 100644 index 7895a229e72e..000000000000 --- a/tools/regression/test/compile_warn.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// (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 deleted file mode 100644 index cacb17d13394..000000000000 --- a/tools/regression/test/run-fail_compile-fail.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// (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 deleted file mode 100644 index 577d2bb890b0..000000000000 --- a/tools/regression/test/run-fail_fail-warn.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// (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 deleted file mode 100644 index 865b8eb3dda5..000000000000 --- a/tools/regression/test/run-fail_fail.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// (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 deleted file mode 100644 index 3e3ab139731f..000000000000 --- a/tools/regression/test/run-fail_pass.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// (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 - -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 deleted file mode 100644 index 8cc21a110a96..000000000000 --- a/tools/regression/test/run-fail_warn.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// (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 - -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 deleted file mode 100644 index cacb17d13394..000000000000 --- a/tools/regression/test/run_compile-fail.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// (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 deleted file mode 100644 index b514da093885..000000000000 --- a/tools/regression/test/run_fail-note.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// (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 - -int main() -{ - std::cout << "example of output before a line\n"; - std::cout << "\n"; - std::cout << "example of output after a line\n"; - return 1; -} diff --git a/tools/regression/test/run_fail-warn.cpp b/tools/regression/test/run_fail-warn.cpp deleted file mode 100644 index 8cc21a110a96..000000000000 --- a/tools/regression/test/run_fail-warn.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// (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 - -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 deleted file mode 100644 index d6b8ffacf918..000000000000 --- a/tools/regression/test/run_fail.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// (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 - -int main() -{ - return 1; -} diff --git a/tools/regression/test/run_note.cpp b/tools/regression/test/run_note.cpp deleted file mode 100644 index 2841618522e2..000000000000 --- a/tools/regression/test/run_note.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// (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 - -int main() -{ - std::cout << "example of output before a line\n"; - std::cout << "\n"; - std::cout << "example of output after a line\n"; - return 0; -} diff --git a/tools/regression/test/run_pass.cpp b/tools/regression/test/run_pass.cpp deleted file mode 100644 index 865b8eb3dda5..000000000000 --- a/tools/regression/test/run_pass.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// (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 deleted file mode 100644 index 36e1c5faf3f9..000000000000 --- a/tools/regression/test/run_warn-note.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// (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 - -int main() -{ - std::cout << "example of output before a line\n"; - std::cout << "\n"; - std::cout << "example of output after a line\n"; - - // provoke a compiler warning to make sure 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 deleted file mode 100644 index 7895a229e72e..000000000000 --- a/tools/regression/test/run_warn.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// (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 deleted file mode 100644 index 61b14592926e..000000000000 --- a/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 6afbc25ed4ed..000000000000 --- a/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index d9e5149e8c97..000000000000 --- a/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2 +++ /dev/null @@ -1,9 +0,0 @@ -project - : requirements - /boost/filesystem//boost_filesystem - BOOST_ALL_NO_LIB - ; - - test-suite "missing_dependencies" : - [ run test.cpp lib//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 deleted file mode 100644 index 410e7edc9b5c..000000000000 --- a/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2 +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 09c7cfafd0cb..000000000000 --- a/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp +++ /dev/null @@ -1 +0,0 @@ -#error diff --git a/tools/regression/test/test-boost-build/missing_dependencies/test.cpp b/tools/regression/test/test-boost-build/missing_dependencies/test.cpp deleted file mode 100644 index 76e8197013aa..000000000000 --- a/tools/regression/test/test-boost-build/missing_dependencies/test.cpp +++ /dev/null @@ -1 +0,0 @@ -int main() { return 0; } diff --git a/tools/regression/test/test-cases/Huber2629/bjam.log b/tools/regression/test/test-cases/Huber2629/bjam.log deleted file mode 100644 index ca1fe1b9f407..000000000000 --- a/tools/regression/test/test-cases/Huber2629/bjam.log +++ /dev/null @@ -1,36 +0,0 @@ -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' - 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' - 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 DllTestNormal.exe for lack of DllTestNormalLib-vc71-mt-gd-1_35.lib... -...skipped DllTestNormal.run for lack of DllTestNormal.exe... diff --git a/tools/regression/test/test-cases/Huber2629/expected/results.xml b/tools/regression/test/test-cases/Huber2629/expected/results.xml deleted file mode 100644 index 44a32b04f5cb..000000000000 --- a/tools/regression/test/test-cases/Huber2629/expected/results.xml +++ /dev/null @@ -1,27 +0,0 @@ - -../../bin.v2/libs/statechart/test/msvc-7.1/debug/threading-multi - - - - -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' - - - 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" - ) - - - diff --git a/tools/regression/test/test-cases/general/bjam.log b/tools/regression/test/test-cases/general/bjam.log deleted file mode 100644 index 71013f7458f1..000000000000 --- a/tools/regression/test/test-cases/general/bjam.log +++ /dev/null @@ -1,325 +0,0 @@ -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 run-fail~compile-fail.exe for lack of run-fail~compile-fail.obj... -...skipped run-fail~compile-fail.run for lack of 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 deleted file mode 100644 index 13224e01136b..000000000000 --- a/tools/regression/test/test-cases/general/expected/results.xml +++ /dev/null @@ -1,167 +0,0 @@ - - -compile-fail~fail.cpp - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\compile-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\compile-fail~fail.obj.rsp" - - - - - -compile-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~fail.cpp -compile~fail.cpp(9) : fatal error C1189: #error : example of a compile failure - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\compile~fail.test\msvc-7.1\debug\link-static\threading-multi\compile~fail.obj.rsp" - - - - - -compile~pass.cpp - - - - -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 - - - - -link-fail~fail.cpp - - - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe" @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.rsp" - if errorlevel 1 exit %errorlevel% - if exist "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" ( - mt -nologo -manifest "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe.manifest" "-outputresource:C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link-fail~fail.test\msvc-7.1\debug\link-static\threading-multi\link-fail~fail.exe;1" - ) - - - - - -link-fail~pass.cpp - - -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~fail.cpp - - -link~fail.obj : error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main -C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe : fatal error LNK1120: 1 unresolved externals - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -link /NOLOGO /INCREMENTAL:NO /DEBUG /subsystem:console /out:"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe" @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.rsp" - if errorlevel 1 exit %errorlevel% - if exist "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" ( - mt -nologo -manifest "C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe.manifest" "-outputresource:C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\link~fail.test\msvc-7.1\debug\link-static\threading-multi\link~fail.exe;1" - ) - - - - - -link~pass.cpp - - - - - - -run-fail~compile-fail.cpp -run-fail~compile-fail.cpp(9) : fatal error C1189: #error : example of a compile failure - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\general\actual\tools\regression\test\run-fail~compile-fail.test\msvc-7.1\debug\link-static\threading-multi\run-fail~compile-fail.obj.rsp" - - - - - -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 - - - - - - - -run-fail~fail.cpp - - - - - - - -run-fail~pass.cpp - - - - - - - -run~fail.cpp - - - - - - - -run~note.cpp - - - - - - - -run~pass.cpp - - - - - - - -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 - - - - - - - -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 - - - - - diff --git a/tools/regression/test/test-cases/incremental/bjam.log b/tools/regression/test/test-cases/incremental/bjam.log deleted file mode 100644 index 65db0844c290..000000000000 --- a/tools/regression/test/test-cases/incremental/bjam.log +++ /dev/null @@ -1,33 +0,0 @@ -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 deleted file mode 100644 index 967ed9eb23ad..000000000000 --- a/tools/regression/test/test-cases/incremental/bjam.log.1 +++ /dev/null @@ -1,38 +0,0 @@ -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 deleted file mode 100644 index 0580bd588fc0..000000000000 --- a/tools/regression/test/test-cases/incremental/expected/results.xml +++ /dev/null @@ -1,9 +0,0 @@ - - -run~pass.cpp - - call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat" >nul -cl /Zm800 -nologo @"C:\users\Misha\Stuff\boost\boost\tools\regression\test\test-cases\incremental\actual\tools\regression\test\run~pass.test\msvc-7.1\debug\link-static\threading-multi\run~pass.obj.rsp" - - - diff --git a/tools/regression/test/test.bat b/tools/regression/test/test.bat deleted file mode 100644 index ce32fb727f53..000000000000 --- a/tools/regression/test/test.bat +++ /dev/null @@ -1,15 +0,0 @@ -rem Copyright Beman Dawes 2005 - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -set TEST_LOCATE_ROOT=%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% 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'.+[.](? -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 deleted file mode 100644 index 6c91a939dd43..000000000000 --- a/tools/regression/xsl_reports/boostbook_report.py +++ /dev/null @@ -1,179 +0,0 @@ -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 deleted file mode 100755 index 5947117fa99b..000000000000 --- a/tools/regression/xsl_reports/build_results.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh - -#~ Copyright Redshift Software, Inc. 2007-2008 -#~ 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} ${2} - build_results ${1} ${2} - upload_results ${1} ${2} -} - -update_tools() -{ - cwd=`pwd` - cd boost - svn up - cd "${cwd}" -} - -report_info() -{ -cat - > comment.html < - - uname - -
    -`uname -a`
    -            
    - - - - uptime - -
    -`uptime`
    -            
    - - - - vmstat - -
    -`vmstat`
    -            
    - - - - xsltproc - -
    -`xsltproc --version`
    -            
    - - - - python - -
    -`python --version 2>&1`
    -            
    - - - - previous run - -
    -`cat previous.txt`
    -            
    - - - - current run - -
    -`date -u`
    -            
    - - - -HTML - date -u > previous.txt -} - -build_results() -{ - cwd=`pwd` - cd ${1} - root=`pwd` - boost=${cwd}/boost - case ${1} in - trunk) - tag=trunk - reports="dd,ds,i,n" - ;; - - release) - tag=branches/release - reports="dd,ds,i,n" - ;; - - release-1_35_0) - tag=tags/release/Boost_1_35_0 - reports="dd,ud,ds,us,ddr,udr,dsr,usr,i,n,e" - ;; - - release-1_36_0) - tag=tags/release/Boost_1_36_0 - reports="dd,ud,ds,us,ddr,udr,dsr,usr,i,n,e" - ;; - 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=${reports} - cd "${cwd}" -} - -upload_results() -{ - cwd=`pwd` - upload_dir=/home/grafik/www.boost.org/testing - - cd ${1}/all - rm -f ../../${1}.zip* - #~ zip -q -r -9 ../../${1} * -x '*.xml' - 7za a -tzip -mx=9 ../../${1}.zip * '-x!*.xml' - cd "${cwd}" - mv ${1}.zip ${1}.zip.uploading - rsync -vuz --rsh=ssh --stats \ - ${1}.zip.uploading grafik@beta.boost.org:/${upload_dir}/incoming/ - ssh grafik@beta.boost.org \ - cp ${upload_dir}/incoming/${1}.zip.uploading ${upload_dir}/live/${1}.zip - mv ${1}.zip.uploading ${1}.zip -} - -build_all ${1} ${2} diff --git a/tools/regression/xsl_reports/email_maintainers.py b/tools/regression/xsl_reports/email_maintainers.py deleted file mode 100644 index 308ab688f577..000000000000 --- a/tools/regression/xsl_reports/email_maintainers.py +++ /dev/null @@ -1,840 +0,0 @@ -# -# 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 " -boost_dev_list = "Boost Developer List " -boost_testing_list = "Boost Testing List " - -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() - self.maintainers = list() - return - - def addFailure(self, failure): - self.failures.append(failure) - return - - def isBroken(self): - return len(self.failures) > 300 - - def addMaintainer(self, maintainer): - """ - Add a new maintainer for this platform. - """ - self.maintainers.append(maintainer) - return - -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 -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 PlatformMaintainer: - """ - Information about the platform maintainer of a library - """ - def __init__(self, name, email): - self.name = name - self.email = email - self.platforms = list() - return - - def addPlatform(self, runner, platform): - self.platforms.append(platform) - return - - def composeEmail(self, report): - """ - Composes an e-mail to this platform maintainer if one or more of - the platforms s/he maintains has a large number of failures. - 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 platform in self.platforms: - if platform.isBroken(): - requires_message = True - break - - if not requires_message: - return None - - # Build the message header - message = """From: Douglas Gregor -To: """ - message += self.name + ' <' + self.email + '>' - message += """ -Reply-To: boost@lists.boost.org -Subject: Large number of Boost failures on a platform you maintain as of """ - message += str(datetime.date.today()) + " [" + report.branch + "]" - message += """ - -You are receiving this report because one or more of the testing -platforms that you maintain has a large number of Boost 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 + """ - -The following platforms have a large number of failures: -""" - - for platform in self.platforms: - if platform.isBroken(): - message += (' ' + platform.name + ' (' - + str(len(platform.failures)) + ' failures)\n') - - 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() - self.platform_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 getPlatformMaintainer(self, name, email): - """ - Retrieve the platform maintainer with the given name and - e-mail address. - """ - if self.platform_maintainers.has_key(name): - return self.platform_maintainers[name] - else: - self.platform_maintainers[name] = PlatformMaintainer(name, email) - return self.platform_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'): - if line.startswith('#'): - continue - 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 - - # Parses the file $BOOST_ROOT/libs/platform_maintainers.txt to - # create a hash mapping from the platform name to the list of - # maintainers. - def parsePlatformMaintainersFile(self): - """ - Parse the platform maintainers file in - ../../../libs/platform_maintainers.txt to collect information - about the maintainers of the various platforms. - """ - platform_maintainer_regex = re.compile('([A-Za-z0-9_.-]*|"[^"]*")\s+(\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/platform_maintainers.txt', 'r'): - if line.startswith('#'): - continue - m = platform_maintainer_regex.match (line) - if m: - platformname = m.group(2) - if self.platforms.has_key(platformname): - platform = self.platforms[platformname] - for person in re.split('\s*,\s*', m.group(3)): - nmm = name_email_regex.match(person) - if nmm: - name = nmm.group(1) - email = nmm.group(3) - email = at_regex.sub('@', email) - maintainer = self.getPlatformMaintainer(name, email) - maintainer.addPlatform(m.group(1), platform) - platform.addMaintainer(maintainer) - 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 -To: boost@lists.boost.org -Reply-To: boost@lists.boost.org -Subject: [Report] """ - message += str(self.numFailures()) + " failures on " + branch - if branch != 'trunk': - message += ' branch' - message += " (" + str(datetime.date.today()) + ")" - message += """ - -Boost regression test failures -""" - message += "Report time: " + self.date + """ - -This report lists all regression test failures on high-priority 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 + ' (' - + str(len(self.platforms[platform].failures)) - + ' failures)\n') - - message += """ -Failures on these "broken" platforms will be omitted from the results below. -Please see the full report for information about these failures. - -""" - - # Display the number of failures - message += (str(self.numReportableFailures()) + ' failures in ' + - str(len(self.libraries)) + ' libraries') - if any_broken_platforms: - message += (' (plus ' + str(self.numFailures() - self.numReportableFailures()) - + ' from 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 + ' (' - - if library.numReportableFailures() > 0: - message += (str(library.numReportableFailures()) - + " failures") - - if library.numReportableFailures() < num_failures: - if library.numReportableFailures() > 0: - message += ', plus ' - - message += (str(num_failures-library.numReportableFailures()) - + ' failures on broken platforms') - message += ')\n' - pass - - message += '\n' - - # Provide the details for the failures in each library. - for k in sorted_keys( self.libraries ): - library = self.libraries[k] - 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: - platform = failure.platform - if not platform.isBroken(): - message += ' ' + platform.name - message += '\n' - - return message - - def composeTestingSummaryEmail(self): - """ - Compose a message to send to the Boost Testing list. Returns - the message text if a message is needed, returns None - otherwise. - """ - brokenPlatforms = 0 - for platform in sorted_keys( self.platforms ): - if self.platforms[platform].isBroken(): - brokenPlatforms = brokenPlatforms + 1 - - if brokenPlatforms == 0: - return None; - - message = """From: Douglas Gregor -To: boost-testing@lists.boost.org -Reply-To: boost-testing@lists.boost.org -Subject: [Report] """ - message += str(brokenPlatforms) + " potentially broken platforms on " + branch - if branch != 'trunk': - message += ' branch' - message += " (" + str(datetime.date.today()) + ")" - message += """ - -Potentially broken platforms for Boost regression testing -""" - message += "Report time: " + self.date + """ - -This report lists the high-priority platforms that are exhibiting a -large number of regression test failures, which might indicate a problem -with the test machines or testing harness. - -Detailed report: -""" - - message += ' ' + self.url + '\n' - - message += """ -Platforms with a large number of failures: -""" - for platform in sorted_keys( self.platforms ): - if self.platforms[platform].isBroken(): - message += (' ' + platform + ' (' - + str(len(self.platforms[platform].failures)) - + ' failures)\n') - - 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 ', - 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 ' - - message = """From: Douglas Gregor -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 - To: Douglas Gregor - 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 ', - to_addrs = 'dgregor@osl.iu.edu', - msg = message) - sys.exit(1) - -# Try to parse maintainers information -report.parseLibraryMaintainersFile() -report.parsePlatformMaintainersFile() - -# Generate individualized e-mail for library maintainers -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 - -# Generate individualized e-mail for platform maintainers -for maintainer_name in report.platform_maintainers: - maintainer = report.platform_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 - -email = report.composeTestingSummaryEmail() -if email: - if '--send' in sys.argv: - print 'Sending summary email to Boost testing list...' - smtp = smtplib.SMTP('milliways.osl.iu.edu') - smtp.sendmail(from_addr = report_author, - to_addrs = boost_testing_list, - msg = email) - print 'done.\n' - if '--debug' in sys.argv: - print 'Message text for testing 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 deleted file mode 100644 index 43e72ca406a1..000000000000 --- a/tools/regression/xsl_reports/empty_expected_results.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tools/regression/xsl_reports/make_snapshot.py b/tools/regression/xsl_reports/make_snapshot.py deleted file mode 100644 index b060a104066e..000000000000 --- a/tools/regression/xsl_reports/make_snapshot.py +++ /dev/null @@ -1,174 +0,0 @@ - -# 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 deleted file mode 100644 index 75ee1b31bcab..000000000000 --- a/tools/regression/xsl_reports/report.py +++ /dev/null @@ -1,371 +0,0 @@ - -# 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( '\n' ) - runner.collect_test_logs( [ bin_boost_dir ], f ) - f.write( '\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 deleted file mode 100644 index cd9e5729a2da..000000000000 --- a/tools/regression/xsl_reports/test/common.py +++ /dev/null @@ -1,165 +0,0 @@ -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 deleted file mode 100644 index d9fdd26cc983..000000000000 --- a/tools/regression/xsl_reports/test/expected_results.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tools/regression/xsl_reports/test/generate_test_results.py b/tools/regression/xsl_reports/test/generate_test_results.py deleted file mode 100644 index ba6a7ee39f3c..000000000000 --- a/tools/regression/xsl_reports/test/generate_test_results.py +++ /dev/null @@ -1,160 +0,0 @@ -# -# 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( "Runner is who running 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() - - - -## -## - -## "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 *** -## -## - - -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 deleted file mode 100644 index 0f7f8f796a55..000000000000 --- a/tools/regression/xsl_reports/test/generate_test_results_v1.py +++ /dev/null @@ -1,85 +0,0 @@ -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" ) - - - - -## -## - -## "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 *** -## -## - - -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 deleted file mode 100644 index 8de3354d8499..000000000000 --- a/tools/regression/xsl_reports/test/restrict_to_library.xsl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/test/run_notes_regression.py b/tools/regression/xsl_reports/test/run_notes_regression.py deleted file mode 100644 index 884dcfe9dbcc..000000000000 --- a/tools/regression/xsl_reports/test/run_notes_regression.py +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index a995ed635d33..000000000000 --- a/tools/regression/xsl_reports/test/run_v1.py +++ /dev/null @@ -1,35 +0,0 @@ -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 deleted file mode 100644 index 1378586c1d78..000000000000 --- a/tools/regression/xsl_reports/test/test.py +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index f7d52fc2ff15..000000000000 --- a/tools/regression/xsl_reports/test/test_boost_wide_report.py +++ /dev/null @@ -1,36 +0,0 @@ -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 deleted file mode 100644 index bd54208488a9..000000000000 --- a/tools/regression/xsl_reports/test_results.xsd +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/utils/__init__.py b/tools/regression/xsl_reports/utils/__init__.py deleted file mode 100644 index 6d542083d982..000000000000 --- a/tools/regression/xsl_reports/utils/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ - -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 deleted file mode 100644 index b08739f40b38..000000000000 --- a/tools/regression/xsl_reports/utils/accept_args.py +++ /dev/null @@ -1,30 +0,0 @@ - -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.*?)=(?P.*)', 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 deleted file mode 100644 index c2d8fb6c9506..000000000000 --- a/tools/regression/xsl_reports/utils/char_translation_table.py +++ /dev/null @@ -1,13 +0,0 @@ - -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 deleted file mode 100644 index 9e3d0e7b2171..000000000000 --- a/tools/regression/xsl_reports/utils/check_existance.py +++ /dev/null @@ -1,9 +0,0 @@ - -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 deleted file mode 100644 index bdb8e8f8e6b5..000000000000 --- a/tools/regression/xsl_reports/utils/checked_system.py +++ /dev/null @@ -1,22 +0,0 @@ - -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 deleted file mode 100644 index d9184100e278..000000000000 --- a/tools/regression/xsl_reports/utils/libxslt.py +++ /dev/null @@ -1,49 +0,0 @@ - -# 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 deleted file mode 100644 index 28b1366f889c..000000000000 --- a/tools/regression/xsl_reports/utils/log.py +++ /dev/null @@ -1,18 +0,0 @@ - -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 deleted file mode 100644 index 94b68d32f195..000000000000 --- a/tools/regression/xsl_reports/utils/makedirs.py +++ /dev/null @@ -1,7 +0,0 @@ - -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 deleted file mode 100644 index 95fb36ff48fc..000000000000 --- a/tools/regression/xsl_reports/utils/rename.py +++ /dev/null @@ -1,17 +0,0 @@ - -# 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 deleted file mode 100644 index d0ed98fd18af..000000000000 --- a/tools/regression/xsl_reports/utils/send_mail.py +++ /dev/null @@ -1,13 +0,0 @@ - -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 deleted file mode 100644 index 0c6b0852863c..000000000000 --- a/tools/regression/xsl_reports/utils/sourceforge.py +++ /dev/null @@ -1,48 +0,0 @@ - -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 deleted file mode 100644 index 19deb1992be7..000000000000 --- a/tools/regression/xsl_reports/utils/tar.py +++ /dev/null @@ -1,16 +0,0 @@ - -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 deleted file mode 100644 index 7473aa0051c8..000000000000 --- a/tools/regression/xsl_reports/utils/zip.py +++ /dev/null @@ -1,12 +0,0 @@ - -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 deleted file mode 100644 index 6771f0034f29..000000000000 --- a/tools/regression/xsl_reports/xsl/add_expected_results.xsl +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - success - - - fail - - - success - - - - - - - - - - - no - - yes - - - - - - - fail - - - - - - fail - - - success - - - - - - - - - - expected - unexpected - - - - - - expected - unexpected - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/common.xsl b/tools/regression/xsl_reports/xsl/common.xsl deleted file mode 100644 index 0029eeaebba4..000000000000 --- a/tools/regression/xsl_reports/xsl/common.xsl +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - yes - a - - - no - z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [   ] - - - [  ] - - - [  ] - - - - - - - - - -
    -
    - -
    diff --git a/tools/regression/xsl_reports/xsl/html/issues_legend.html b/tools/regression/xsl_reports/xsl/html/issues_legend.html deleted file mode 100644 index 6274048b55af..000000000000 --- a/tools/regression/xsl_reports/xsl/html/issues_legend.html +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - - - - -
    - - - - - - - - - -
    - - -
    <toolset>
    -
    Failure on a newly added test/compiler.
    - - -
    <toolset>
    -
    Unexpected failure.
    -
    -
    diff --git a/tools/regression/xsl_reports/xsl/html/library_developer_legend.html b/tools/regression/xsl_reports/xsl/html/library_developer_legend.html deleted file mode 100644 index 405e52ab4b51..000000000000 --- a/tools/regression/xsl_reports/xsl/html/library_developer_legend.html +++ /dev/null @@ -1,72 +0,0 @@ - - -
    - - - - - -
    - - - - - - - - - - - - - -
    - - -
    pass
    -
    Success.
    - - -
    pass
    -
    Unexpected success.
    - - -
    fail
    -
    Expected failure.
    -
    - - - - - - - - - - - - - -
    - - -
    fail
    -
    Failure on a newly added test/compiler.
    - - -
    fail
    -
    Unexpected failure.
    - - -
    n/a
    -
    The library author marked it as unusable on particular platform/toolset.
    -
    -
    diff --git a/tools/regression/xsl_reports/xsl/html/library_user_legend.html b/tools/regression/xsl_reports/xsl/html/library_user_legend.html deleted file mode 100644 index 5175f042711d..000000000000 --- a/tools/regression/xsl_reports/xsl/html/library_user_legend.html +++ /dev/null @@ -1,65 +0,0 @@ - - -
    - - - - - -
    - - - - - - - - - -
    - - -
    pass
    -
    - The test passes. -
    - - -
    fail
    -
    - A known test failure; click on the link to see the log. -
    -
    - - - - - - - - - -
    - - -
    unexp.
    -
    - The test is known to pass, but is currently failing; - click on the link to see the log. -
    - - -
    n/a
    -
    - The library author marked it as unusable on particular platform/toolset. -
    -
    -
    diff --git a/tools/regression/xsl_reports/xsl/html/make_tinyurl.html b/tools/regression/xsl_reports/xsl/html/make_tinyurl.html deleted file mode 100644 index 2de8830106f1..000000000000 --- a/tools/regression/xsl_reports/xsl/html/make_tinyurl.html +++ /dev/null @@ -1,24 +0,0 @@ - - -
    - - - -TinyUrl - -
    diff --git a/tools/regression/xsl_reports/xsl/html/master.css b/tools/regression/xsl_reports/xsl/html/master.css deleted file mode 100644 index 8e643efebf0e..000000000000 --- a/tools/regression/xsl_reports/xsl/html/master.css +++ /dev/null @@ -1,525 +0,0 @@ -/* - -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 deleted file mode 100644 index 0f8282822805..000000000000 --- a/tools/regression/xsl_reports/xsl/html/summary_developer_legend.html +++ /dev/null @@ -1,75 +0,0 @@ - - -
    - - - - - -
    - - - - - - - - - - - - - -
    - - -
    OK
    -
    - All expected tests pass. -
    - - -
    OK
    -
    - All expected tests pass, and some other tests that were expected to fail - unexpectedly pass as well. -
    - - -
    fail
    -
    - There are some failures on the newly added tests/compiler(s). -
    -
    - - - - - - - - - -
    - - -
    broken
    -
    - Tests that the library author expects to pass are currently failing. -
    - - -
    n/a
    -
    - The library author marked it as unusable on particular platform/toolset. -
    -
    -
    diff --git a/tools/regression/xsl_reports/xsl/html/summary_user_legend.html b/tools/regression/xsl_reports/xsl/html/summary_user_legend.html deleted file mode 100644 index 4407608120ad..000000000000 --- a/tools/regression/xsl_reports/xsl/html/summary_user_legend.html +++ /dev/null @@ -1,65 +0,0 @@ - - -
    - - - - - -
    - - - - - - - - - -
    - - -
     
    -
    - All library tests are passing. -
    - - -
    details
    -
    - There are some known failures in the tests, click on the link to see the details. -
    -
    - - - - - - - - - -
    - - -
    unexp.
    -
    - Some tests that the library author expects to pass are currently failing, - click on the link to see the details. -
    - - -
    n/a
    -
    - The library author marked it as unusable on particular platform/toolset. -
    -
    -
    diff --git a/tools/regression/xsl_reports/xsl/issues_page.xsl b/tools/regression/xsl_reports/xsl/issues_page.xsl deleted file mode 100644 index 4faa410d0d89..000000000000 --- a/tools/regression/xsl_reports/xsl/issues_page.xsl +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Boost regression unresolved issues: <xsl:value-of select="$source"/> - - - - - - - - - Writing document - - - - - - - - - -

    - Unresolved Issues: - -

    - -
    -
    - Report Time: -
    -
    - Purpose: Provides a list of current unresolved test failures. -
    -
    - - - - - - - - - - -

    - - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    testfailures
    testfailures
    - - - - - - - - - - - - - - - - library-fail-unexpected-new - - - library-fail-unexpected - - - - - - - - -
    - - - - - -
    -
    - - -
    -
    - - - - - - -
    - -
    -
    diff --git a/tools/regression/xsl_reports/xsl/links_page.xsl b/tools/regression/xsl_reports/xsl/links_page.xsl deleted file mode 100644 index ebc4488f5014..000000000000 --- a/tools/regression/xsl_reports/xsl/links_page.xsl +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - Writing log file document - - - - - - - -
    - -
    -
    - - - -
    -
    - - - - Boost regression - test run output: <xsl:value-of select="$component"/> - - - -
    -
    - Boost regression - test run output: -
    - - - -

    -

    Notes
    - - - - -

    -
    - - -

    -

    Compiler output:
    -
    -                    
    -                
    -

    -
    - - -

    -

    Linker output:
    -
    -                    
    -                
    -

    -
    - - -

    -

    Lib output:
    -

    - See - - -

    -

    -
    - - -

    -

    Run output:
    -
    -                    
    -                
    -

    -
    - -
    - - - - - - -
    - -
    - -
    diff --git a/tools/regression/xsl_reports/xsl/produce_expected_results.xsl b/tools/regression/xsl_reports/xsl/produce_expected_results.xsl deleted file mode 100644 index a47a3acfedd2..000000000000 --- a/tools/regression/xsl_reports/xsl/produce_expected_results.xsl +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/result_page.xsl b/tools/regression/xsl_reports/xsl/result_page.xsl deleted file mode 100644 index dbd0fbf91965..000000000000 --- a/tools/regression/xsl_reports/xsl/result_page.xsl +++ /dev/null @@ -1,702 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - developer - user - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - test / toolset - - - - - !!!!!!!!!!!!!!!!!!!1 - - - - - - - - - - - - - required-toolset-name - - - toolset-name - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - toolset / test - - - - - - - - - r - r - rf - c - cf - - Incorrect test type "" - - - - - - - - - - - - - - - Boost regression: <xsl:value-of select="$source"/> - - - - - - - - Writing document - - - - - - - - - - Boost logo - -

    - - report: - -

    - -
    -
    - Report Time: -
    - -
    - Purpose: - - - 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 - developer summary. - - - Provides Boost developers with visual indication of the CVS "health". For user-level - report, see user summary. - - -
    -
    - -
    - - - -
    - - - -
    - - - - - - - - - Writing document - - - - - - - - -
    - Report info -
    -
    - Summary -
    - - -
    - Unresolved issues -
    -
    -
    - - - - -
    - - - -
    -
    - - - -
    -
    - - - - - - - - - - - Writing document - - - - - - - Boost regression: <xsl:value-of select="$library"/>/<xsl:value-of select="$source"/> - - - - - - - - - - Writing document - - - - - - - - - - -

    - - - - / - -

    - -
    - Report Time: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Corner-case tests
    - - - - - - - - -
    - - - - - - - - - -
    -
    - - - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - library-missing - - - library-unusable - - - - - - - - - - - missing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    conf. problem
    -
    - -
    - - - - - - - - - - library-missing - - - library-unusable - - - library-user-fail-unexpected - - - library-user-fail-expected - - - library-user-success - - - - Unknown status - - - - - - - - - - missing - - - - fail - - - - - unexp. - - - - pass - - - - -
    conf. problem
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Writing log file document - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -single - - - -first - - - -last - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/tools/regression/xsl_reports/xsl/summary_page.xsl b/tools/regression/xsl_reports/xsl/summary_page.xsl deleted file mode 100644 index 7bf3818c29cb..000000000000 --- a/tools/regression/xsl_reports/xsl/summary_page.xsl +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Boost regression summary: <xsl:value-of select="$source"/> - - - - - - - - - Writing document - - - - - - - - - -

    - Summary: - -

    - -
    - Report Time: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -single - - - -first - - - -last - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - - -
    - -
    - - - - - - - - - - - summary-unusable - - - summary-missing - - - summary-fail-unexpected - - - summary-fail-unexpected-new - - - summary-success-unexpected - - - summary-expected - - - summary-unknown-status - - - - - - - - - - - n/a - - - - missing - - - - broken - - - - - fail - - - - OK - - - - - - - - - - - - - - - - - summary-unusable - - - summary-missing - - - summary-user-fail-unexpected - - - summary-user-fail-expected - - - summary-user-success - - - summary-unknown-status - - - - - - - - - - - unusable - - - - - missing - - - - - unexp. - - - - - - details - - - - -   - - - - - - - - - - library / toolset - - - - - - required-toolset-name - - - toolset-name - - - - - - - - toolset / library - - - -
    diff --git a/tools/regression/xsl_reports/xsl/test/test_re_match.xml b/tools/regression/xsl_reports/xsl/test/test_re_match.xml deleted file mode 100644 index 3841f782d78b..000000000000 --- a/tools/regression/xsl_reports/xsl/test/test_re_match.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/test/test_re_match.xsl b/tools/regression/xsl_reports/xsl/test/test_re_match.xsl deleted file mode 100644 index eefd31316676..000000000000 --- a/tools/regression/xsl_reports/xsl/test/test_re_match.xsl +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl b/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl deleted file mode 100644 index b519a7754fff..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unknown test type "" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fail - - - success - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - no - - yes - - - - - - - - - - fail - - - - - - fail - - success - - - - - - - - expected - unexpected - - - - - - - - - - - - - - - - - - - - - - - This test case was explicitly marked up in - - status/explicit-failures-markup.xml file in the Boost SVN as "expected to fail", - but is passing. Please consult the notes/output below for more details. - - - - - - - - - - No explanation was provided for this markup. Please contact the library - author(s)/maintainer(s) for more details. - - - - - - - This failure was explicitly marked as expected in - - status/explicit-failures-markup.xml file in the Boost SVN. - Please contact the library author(s)/maintainer(s) for the explanation of this markup. - - - - - - - - - - - - - - - - - - - - - - - - - This test case used to fail in the reference ("last-known-good") release. - - - - - - - This failure was present in the reference ("last-known-good") release. - - - - - - - - - - [Reporting Tools Internal Error] 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 (""). - Please contact reporting tools - maintainers about this problem. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl b/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl deleted file mode 100644 index 009f0eb27ce1..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - BoostBook build log for <xsl:value-of select="build/@timestamp"/> - - - - - - - - -
    -            
    -        
    -
    - - -
    -
    -
    \ 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 deleted file mode 100644 index 14023f03953a..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/common.xsl +++ /dev/null @@ -1,668 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - yes - no - - - - - sort hint A - sort hint B - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unusable - - - fail-unexpected - - - fail-unexpected-new - - - success-unexpected - - - expected - - - other - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unusable - - - - missing - - - - fail-unexpected - - - - fail-unexpected-new - - - - - fail-expected-unresearched - - - - fail-expected - - - - - success-unexpected - - - - success-expected - - - - unknown - - - - - - - - - - -
    -
    - Report Time: -
    - - -
    - Purpose: -
    -
    - - - -
    - Warning: - - - -
    -
    -
    - -
    - -
    - - - - - - - - - - - Full View - - - - - Release View - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 2 - - - - - - -   - - - - - - - -   - - - - -   - - - - - - - -   - - - -   - - - rev - - -   - - - -   - - - - - - - - - - -   - - - - -   - - - - - - - -   - - - - - - - - - - - - - - - 1 - 2 - - - - - -  library / toolset  -  test / toolset  - - - - - - - - - - - - - required-toolset-name - - - toolset-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - -
    -
    -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - [   ] - - - [  ] - - - [  ] - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    diff --git a/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl b/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl deleted file mode 100644 index b9058e35d00c..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - aka - - - - - - - - - - - - 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 deleted file mode 100644 index 71f33d2c1c33..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/expected_to_1_33_format.xsl +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html b/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html deleted file mode 100644 index 6274048b55af..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/issues_legend.html +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - - - - -
    - - - - - - - - - -
    - - -
    <toolset>
    -
    Failure on a newly added test/compiler.
    - - -
    <toolset>
    -
    Unexpected failure.
    -
    -
    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 deleted file mode 100644 index 009211ac194b..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/library_developer_legend.html +++ /dev/null @@ -1,82 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    pass
    -
    Success.
    - - -
    pass
    -
    Unexpected success; follow the link for more details.
    - - -
    fail*
    -
    Expected failure; follow the link for more details.
    - - -
    n/a
    -
    The library author marked it as unusable on this particular platform/toolset.
    - - -
    fail?
    -
    Unsearched failure; follow the link for more details.
    - - -
    fail
    -
    Failure on a newly added test/compiler.
    - - -
    fail
    -
    Unexpected failure/regression.
    -
    -
    - - - - - -
    iAn incremental run.
    -
    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 deleted file mode 100644 index bae1742e949c..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/library_user_legend.html +++ /dev/null @@ -1,89 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    pass
    -
    The test successfully passes.
    - - -
    fail*
    -
    - A known failure that the library maintainers are aware about. Please follow the link to - find out how it affects the library's functionality. -
    - - -
    unusable
    -
    - The library author marked it as unusable on this particular platform/toolset. Please - see the corresponding footnote. -
    - - -
    fail?
    -
    - An unsearched failure: 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.
    - - -
    fail
    -
    - A new failure on the test/compiler added in this release that hasn't been accounted for yet. - Please follow the link to access the details. -
    - - -
    fail
    -
    - A regression comparing to the previous release. Please follow the link to - access the details. -
    -
    -
    - - - - - -
    iAn incremental run.
    -
    diff --git a/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html b/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html deleted file mode 100644 index e57fb06a4ffe..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/make_tinyurl.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -TinyUrl - diff --git a/tools/regression/xsl_reports/xsl/v2/html/master.css b/tools/regression/xsl_reports/xsl/v2/html/master.css deleted file mode 100644 index a6dc486b6873..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/master.css +++ /dev/null @@ -1,654 +0,0 @@ -/* - -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 deleted file mode 100644 index b85a6403fa91..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/summary_developer_legend.html +++ /dev/null @@ -1,72 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - -
    OK
    -
    - All expected tests pass. -
    - - -
    OK
    -
    - All expected tests pass, and some other tests that were expected to fail - unexpectedly pass as well. -
    - - -
    fail
    -
    - There are some failures on the newly added tests/compiler(s). -
    - - -
    broken
    -
    - Tests that the library author expects to pass are currently failing. -
    - - -
    n/a
    -
    - The library author marked it as unusable on particular platform/toolset. -
    -
    - - - - - -
    iAn incremental run.
    -
    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 deleted file mode 100644 index 1fbf68a4cd31..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/html/summary_user_legend.html +++ /dev/null @@ -1,76 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - -
     pass 
    -
    - All library's tests pass. -
    - - -
    details
    -
    - Most of the library's tests pass, but there are some known failures which might affect the library's - functionality. Please follow the link to see the detailed report. -
    - - -
    details
    -
    - Some of the newly added library's tests fail, or some of the library's tests fail on - the newly added compiler, or some of the tests fail due to unresearched - reasons. Please follow the link to see the detailed report. -
    - - -
    regress.
    -
    - There are some regressions in the library comparing to the previous release. - Please follow the link to see the detailed report. -
    - - -
    unusable
    -
    - The library author marked it as unusable on the particular platform/toolset. - Please follow the link to see the detailed report. -
    -
    - - - - - -
    iAn incremental run.
    -
    diff --git a/tools/regression/xsl_reports/xsl/v2/issues_page.xsl b/tools/regression/xsl_reports/xsl/v2/issues_page.xsl deleted file mode 100644 index 64117d9007f4..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/issues_page.xsl +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - _release - - - - - - - - - - - - - - - - - - - - - - - - - - - - Boost regression unresolved issues: <xsl:value-of select="$source"/> - - - - - - - - - Writing document - - - - - - - - - -

    - Unresolved Issues: - -

    - - - - - - - - -

    Libraries with unresolved failures

    -
    - - - - - - - - -
    - - - - - - - - -

    - - - - ( - - failure - - s - - ) - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    testfailures
    testfailures
    - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - -
    - - Writing document issues-email.txt - - Boost regression test failures ------------------------------- -Report time: - - - - - -This report lists all regression test failures on release platforms. - -Detailed report: - http://beta.boost.org/development/tests/ - - /developer/issues.html - - - - failure - - s - - in - - librar - - - ies - - - y - - - : - - - - - - - ( - - ) - - - - - - - - - - - -| - - | - - - - - - - - - - - - : - - - - - - - - - - -
    - - - - - - - - - - - - - - library-fail-unexpected-new - - - library-fail-unexpected - - - - - - - - - - - - -
    diff --git a/tools/regression/xsl_reports/xsl/v2/links_page.xsl b/tools/regression/xsl_reports/xsl/v2/links_page.xsl deleted file mode 100644 index 1aacd6c7c8c1..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/links_page.xsl +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing test "///" - - - Processing variants - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing test-log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Writing variants reference file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Writing variants file - - - - - - - - - Test output: <xsl:value-of select="$component"/> - - - -
    -
    - Test output: -
    -
    - Rev / - -
    -
    - -
    - Report Time: -
    - -

    Output by test variants:

    - - - - - - -
    - - - - - - - - - - -
    - - -
    -
    - - - - - - - - Writing log file document - - - - - - - - - - Test output: <xsl:value-of select="$component"/> - - - -
    -
    - Test output: -
    -
    - Rev / - -
    -
    - -
    - Report Time: -
    - - -

    -

    Notes
    - - - - -

    -
    - - -

    -

    Compile []:
    -
    -

    -
    - - -

    -

    Link []:
    -
    -

    -
    - - -

    -

    Lib []:
    -

    - See - - -

    -

    -
    - - -

    -

    Run []:
    -
    -                                
    -                            
    -

    -
    - - - - - -
    -
    - - - - - - Writing log frame document - - - - - - - - - - - - - - -
    diff --git a/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl b/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl deleted file mode 100644 index 8574c59361ee..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/produce_expected_results.xsl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/regression/xsl_reports/xsl/v2/result_page.xsl b/tools/regression/xsl_reports/xsl/v2/result_page.xsl deleted file mode 100644 index 7528430f9715..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/result_page.xsl +++ /dev/null @@ -1,691 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - developer - user - - - - - _release - - - - - - - - - - r - r - r - rf - c - cf - l - lf - - Incorrect test type "" - - - - - - - - - - - - - - - - - - - - - - - - - Wrote debug - - - - - - Boost regression: <xsl:value-of select="$source"/> - - - - - - - - Writing document - - - - - - - - - - Boost logo - -

    - - report: - -

    - - - - - 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 - developer summary. - - - Provides Boost developers with visual indication of the SVN "health". For user-level - report, see user summary. - - - - - - - - - - -
    - - - -
    - - - -
    - - - - - - - - - Writing document - - - - - - - - -
    - Report info -
    -
    - Summary -
    - - -
    - Unresolved issues -
    -
    - -
    - - - - - -
    - -
    - - - - -
    - - - -
    -
    - - - -
    -
    - - - - - - - - - - - Writing document - - - - - - - Boost regression: <xsl:value-of select="$library"/>/<xsl:value-of select="$source"/> - - - - - - - - - - Writing document - - - - - - - - - - - - - - - - -

    - - - - / - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - -
    - - - - - - - - - -
    -
    - -
    - -
    - - - - - - - - - - -
    - -
    - -
    - - - - - - - - - - -    - - - -    - - -    - -    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      - - - - - - - - fail? - - - fail* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -      - - - - - - - - fail? - - - fail* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -single - -first - -last - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/tools/regression/xsl_reports/xsl/v2/runners.xsl b/tools/regression/xsl_reports/xsl/v2/runners.xsl deleted file mode 100644 index 9bda7db8d3ed..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/runners.xsl +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
    - Writing runner document - - - - - <xsl:value-of select="@runner"/> - - -

    -
    - - - -
    -
    -
    - -
    - diff --git a/tools/regression/xsl_reports/xsl/v2/summary_page.xsl b/tools/regression/xsl_reports/xsl/v2/summary_page.xsl deleted file mode 100644 index b0e1deb47726..000000000000 --- a/tools/regression/xsl_reports/xsl/v2/summary_page.xsl +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - developer - user - - - - - - _release - - - - - - - - - - - - Boost regression summary: <xsl:value-of select="$source"/> - - - - - - - - - Writing document - - - - - - - - - - - - - - - -

    - Summary: - -

    - - - - - - -
    - Unusable: -  |  - Regressions: -  |  - New failures: -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -single - - - -first - - - -last - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - -
    - -
    - - - - - - - - - -
    - -
    - - - - - - - - - - - - - - - -    - - n/a - -    - - -      - - - - broken - - - -    - - fail - -    - - -   OK   - - - - - - - - - - - - - - - - - - - - - -   - - unusable - -   - - -  no results  - - -   - - regress. - -   - - -   - - details - -   - - -  pass  - - - - - - -
    diff --git a/tools/release/2release.bat b/tools/release/2release.bat deleted file mode 100644 index 13f36e318a1a..000000000000 --- a/tools/release/2release.bat +++ /dev/null @@ -1,16 +0,0 @@ -rem @echo off -rem Copyright Beman Dawes 2011 -rem Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt -if not %1$==$ goto usage_ok -echo Usage: 2release path-relative-to-boost-root [svn-options] -echo Path may be to file or directory -echo Options include --dry-run -echo WARNING: The current directory must be the directory in %BOOST_RELEASE% -echo specified by the path-relative argument -goto done - -:usage_ok -svn merge %2 %3 %4 %5 %6 https://svn.boost.org/svn/boost/branches/release/%1 ^ - https://svn.boost.org/svn/boost/trunk/%1 - -:done diff --git a/tools/release/build_docs.sh b/tools/release/build_docs.sh deleted file mode 100755 index 6e00fb31a0ac..000000000000 --- a/tools/release/build_docs.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Build docs - -# 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 "directory-name" - echo "example:" $0 "posix" - exit 1 -fi - -echo building $1 docs... -pushd $1/doc -bjam --v2 >../../$1-bjam.log -ls html -popd - diff --git a/tools/release/build_release.sh b/tools/release/build_release.sh deleted file mode 100755 index 39a10df4db37..000000000000 --- a/tools/release/build_release.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Build 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 "release-name" - echo "example:" $0 "boost_1_35_0_RC3" - exit 1 -fi - -./load_posix.sh -./load_windows.sh -./build_docs.sh posix -./build_docs.sh windows -./build_release_packages.sh $1 - diff --git a/tools/release/build_release_packages.bat b/tools/release/build_release_packages.bat deleted file mode 100644 index 5f72e5157c39..000000000000 --- a/tools/release/build_release_packages.bat +++ /dev/null @@ -1,47 +0,0 @@ -@echo off -rem Build release packages - -rem Copyright Beman Dawes 2009 - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -echo Build release packages... - -if not %1$==$ goto ok -echo Usage: build_release_packages release-name -echo Example: build_release_packages boost_1_38_0_Beta1 -goto done - -:ok - -echo Preping posix... -rmdir /s /q posix\bin.v2 2>nul -rmdir /s /q posix\dist 2>nul -ren posix %1 -del %1.tar.gz 2>nul -del %1.tar.bz2 2>nul -echo Creating gz... -tar cfz %1.tar.gz %1 -echo Creating bz2... -gzip -d -c %1.tar.gz | bzip2 >%1.tar.bz2 -echo Cleaning up posix... -ren %1 posix - -echo Preping windows... -rmdir /s /q windows\bin.v2 2>nul -rmdir /s /q windows\dist 2>nul -ren windows %1 -del %1.zip 2>nul -del %1.7z 2>nul -echo Creating zip... -zip -r -q %1.zip %1 -echo Creating 7z... -7z a -r -bd %1.7z %1 -echo Cleaning up windows... -ren %1 windows - -grep "Revision:" snapshot.log -echo Build release packages complete - -:done diff --git a/tools/release/build_release_packages.sh b/tools/release/build_release_packages.sh deleted file mode 100755 index 2a126c01c0a0..000000000000 --- a/tools/release/build_release_packages.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -# Build 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 "release-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..." -gzip -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 - -exit 0 - diff --git a/tools/release/index.html b/tools/release/index.html deleted file mode 100644 index 8e850eab4fdb..000000000000 --- a/tools/release/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - -Release Scripts - - - - - - - - - -
    - -boost.png (6897 bytes) - Release Scripts -
    - -

    Introduction

    -

    The release scripts are used by the release management team to build the -release distribution files, and perform related release management functions.

    -

    The files being built include:

    - - - - - - - - - - - - - - - - - - - - -
    -

    Files

    boost_x_xx_x.7z 
    boost_x_xx_x.tar.bz2Unix-style line endings
    boost_x_xx_x.tar.gzUnix-style line endings
    boost_x_xx_x.zipWindows-style line endings
    -

    The content of all files is identical except for the line endings.

    - -
    - -

    � Copyright Beman Dawes, 2008
    -Distributed under the Boost Software License, Version 1.0. See -www.boost.org/LICENSE_1_0.txt

    - -

    Revised -January 18, 2008 -

    - - - - \ No newline at end of file diff --git a/tools/release/inspect.sh b/tools/release/inspect.sh deleted file mode 100755 index 7c04fb58c29b..000000000000 --- a/tools/release/inspect.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Inspect snapshot - -# � Copyright 2008 Beman Dawes -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - -# This script uses ftp, and thus assumes ~/.netrc contains a machine ... entry - -pushd posix/tools/inspect/build -bjam -popd -echo inspect... -pushd posix -dist/bin/inspect >../inspect.html -popd - -# create the ftp script -echo create 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 -echo ftp... -/usr/bin/ftp -v -i boost.cowic.de %TEMP%\trunk_inspect.html - -echo Create ftp script... -pushd %TEMP% -copy %BOOST_TRUNK%\..\user.txt inspect.ftp -echo dir >>inspect.ftp -echo binary >>inspect.ftp -echo put trunk_inspect.html >>inspect.ftp -echo dir >>inspect.ftp -echo mdelete inspect-trunk.html >>inspect.ftp -echo rename trunk_inspect.html inspect-trunk.html >>inspect.ftp -echo dir >>inspect.ftp -echo bye >>inspect.ftp - -echo Run ftp script... -ftp -n -i -s:inspect.ftp boost.cowic.de -popd - -echo Update script for next run -copy /y tools\release\inspect_trunk.bat - -echo Inspect script complete diff --git a/tools/release/linux_user-config.jam b/tools/release/linux_user-config.jam deleted file mode 100644 index 6b62071b025b..000000000000 --- a/tools/release/linux_user-config.jam +++ /dev/null @@ -1,21 +0,0 @@ -# Linux user-config.jam - -import toolset : using ; - -using gcc ; - -using python ; # requires pythonN.NN-dev be installed - -# Boost iostreams requires no user-config.jam entries, -# but does require zliblg-dev, libbz2-dev, be installed - -using xsltproc ; - -using boostbook - : /usr/share/xml/docbook/stylesheet/nwalsh - : /usr/share/xml/docbook/schema/dtd/4.2 - ; - -# Remove this line if you're not using doxygen -using doxygen ; -using quickbook ; diff --git a/tools/release/load_posix.sh b/tools/release/load_posix.sh deleted file mode 100755 index eecdbed240ed..000000000000 --- a/tools/release/load_posix.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# Load posix directory from branches/release snapshot, 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 2>/dev/null -svn export --non-interactive --native-eol LF http://svn.boost.org/svn/boost/branches/release posix - diff --git a/tools/release/load_windows.sh b/tools/release/load_windows.sh deleted file mode 100755 index 08967ddf9e4d..000000000000 --- a/tools/release/load_windows.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# Load windows directory from branches/release snapshot, using CR/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 windows 2>/dev/null -svn export --non-interactive --native-eol CRLF http://svn.boost.org/svn/boost/branches/release windows - diff --git a/tools/release/make_packages.sh b/tools/release/make_packages.sh deleted file mode 100755 index 3aeb17f8f5bc..000000000000 --- a/tools/release/make_packages.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/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/merge2release.bat b/tools/release/merge2release.bat deleted file mode 100644 index 39bb01f2166c..000000000000 --- a/tools/release/merge2release.bat +++ /dev/null @@ -1,22 +0,0 @@ -rem @echo off -rem Copyright Beman Dawes 2010 -rem Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt -if not %1$==$ goto usage_ok -echo Usage: merge2release library-name [svn-options] -echo Options include --dry-run -goto done - -:usage_ok -pushd %BOOST_RELEASE% -pushd boost -call 2release boost/%1.hpp %2 %3 %4 %5 %6 -pushd %1 -call 2release boost/%1 %2 %3 %4 %5 %6 -popd -popd -pushd libs\%1 -call 2release libs/%1 %2 %3 %4 %5 %6 -popd -popd - -:done diff --git a/tools/release/release-mgt-msvc/compare_trees/compare_trees.vcproj b/tools/release/release-mgt-msvc/compare_trees/compare_trees.vcproj deleted file mode 100644 index f52093006fda..000000000000 --- a/tools/release/release-mgt-msvc/compare_trees/compare_trees.vcproj +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/release/release-mgt-msvc/msvc.sln b/tools/release/release-mgt-msvc/msvc.sln deleted file mode 100644 index ca70e06f638a..000000000000 --- a/tools/release/release-mgt-msvc/msvc.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compare_trees", "compare_trees\compare_trees.vcproj", "{7E6AD5ED-4168-4613-A342-0217AA82DEC1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strftime", "strftime\strftime.vcproj", "{4A82F955-7630-4B79-9C50-E45F27E28BA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7E6AD5ED-4168-4613-A342-0217AA82DEC1}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E6AD5ED-4168-4613-A342-0217AA82DEC1}.Debug|Win32.Build.0 = Debug|Win32 - {7E6AD5ED-4168-4613-A342-0217AA82DEC1}.Release|Win32.ActiveCfg = Release|Win32 - {7E6AD5ED-4168-4613-A342-0217AA82DEC1}.Release|Win32.Build.0 = Release|Win32 - {4A82F955-7630-4B79-9C50-E45F27E28BA8}.Debug|Win32.ActiveCfg = Debug|Win32 - {4A82F955-7630-4B79-9C50-E45F27E28BA8}.Debug|Win32.Build.0 = Debug|Win32 - {4A82F955-7630-4B79-9C50-E45F27E28BA8}.Release|Win32.ActiveCfg = Release|Win32 - {4A82F955-7630-4B79-9C50-E45F27E28BA8}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/tools/release/release-mgt-msvc/strftime/strftime.vcproj b/tools/release/release-mgt-msvc/strftime/strftime.vcproj deleted file mode 100644 index 4b8e9ab866f2..000000000000 --- a/tools/release/release-mgt-msvc/strftime/strftime.vcproj +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/release/release_reports.sh b/tools/release/release_reports.sh deleted file mode 100755 index 73d8ead91da5..000000000000 --- a/tools/release/release_reports.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Run the release branch regression reporting system - -# Copyright 2008 Beman Dawes - -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - -# Requirements: -# -# * ~/boost/trunk is an svn working copy of the trunk -# * ~/boost/release-reports is a directory devoted to release regression reporting -# * ~/boost/release-reports/boost is an svn working of branches/release -# * ~/boost/release-reports/release/ exists - -echo Updating ~/boost/trunk/tools/regression ... -svn up ~/boost/trunk/tools/regression - -echo Updating ~/boost/trunk/tools/release ... -svn up ~/boost/trunk/tools/release - -pushd ~/boost/release-reports - -echo Running build_results.sh ... -date >report.log -~/boost/trunk/tools/regression/xsl_reports/build_results.sh release 1>>report.log 2>>report.log -date >>report.log - -popd -echo Release regression reporting complete - see ~/boost/release-reports/report.log diff --git a/tools/release/revision_number.bat b/tools/release/revision_number.bat deleted file mode 100644 index 8f03bd0f1660..000000000000 --- a/tools/release/revision_number.bat +++ /dev/null @@ -1,13 +0,0 @@ -rem Create revision information, to be used by other script - -rem Copyright 2011 Beman Dawes - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -echo Getting current subversion revision number... -svn co --non-interactive --depth=files http://svn.boost.org/svn/boost/branches/release svn_info -svn info svn_info - -svn info svn_info | grep Revision | sed "s/Revision: /set BOOST_REVISION_NUMBER=/" >generated_set_release.bat -call generated_set_release.bat diff --git a/tools/release/snapshot.bat b/tools/release/snapshot.bat deleted file mode 100644 index 5029e3d73bb9..000000000000 --- a/tools/release/snapshot.bat +++ /dev/null @@ -1,39 +0,0 @@ -@echo off -rem Run POSIX and Windows snapshots and inspection - -rem Copyright 2008 Beman Dawes - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -rem Must be run in a directory devoted to boost release snapshots - -echo Remove residue from prior runs... -rem rmdir commands seem to finish before the deletes are necessarily complete. -rem This can occasionally cause subsequent commands to fail because they expect -rem the directory to be gone or empty. snapshot_posix and snapshot_windows -rem are affected. Fix is to run rmdir here so that deletes are complete -rem by the time snapshots are run. -rmdir /s /q posix >nul -rmdir /s /q windows >nul -time /t - -echo Using %BOOST_TRUNK% as boost trunk -time /t -pushd %BOOST_TRUNK% -echo Running svn cleanup on %BOOST_TRUNK% -svn --non-interactive --trust-server-cert cleanup -echo Running svn update on %BOOST_TRUNK% -svn --non-interactive --trust-server-cert up -popd -call %BOOST_TRUNK%\tools\release\revision_number.bat -time /t -call %BOOST_TRUNK%\tools\release\snapshot_download_docs.bat -time /t -call %BOOST_TRUNK%\tools\release\snapshot_posix.bat -time /t -call %BOOST_TRUNK%\tools\release\snapshot_windows.bat -time /t -call %BOOST_TRUNK%\tools\release\snapshot_inspection.bat -time /t -echo Revision %BOOST_REVISION_NUMBER% snapshot complete diff --git a/tools/release/snapshot.sh b/tools/release/snapshot.sh deleted file mode 100755 index 8e45abbcccf4..000000000000 --- a/tools/release/snapshot.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# � Copyright 2008 Beman Dawes -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - -sleep 5s -echo Using $BOOST_TRUNK as boost trunk -date -$BOOST_TRUNK/tools/release/snapshot_posix.sh -date -$BOOST_TRUNK/tools/release/snapshot_windows.sh -date -$BOOST_TRUNK/tools/release/snapshot_inspect.sh -date -sleep 5s diff --git a/tools/release/snapshot_download_docs.bat b/tools/release/snapshot_download_docs.bat deleted file mode 100644 index 3479e84f32e8..000000000000 --- a/tools/release/snapshot_download_docs.bat +++ /dev/null @@ -1,30 +0,0 @@ -@echo off -rem Download and unpack boost-docs.7z - -rem Copyright 2008 Beman Dawes - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -echo Downloading docs subdirectory... - -echo Deleting old files and directories ... -del boost-docs.7z 2>nul -rmdir /s /q docs_temp 2>nul -mkdir docs_temp - -echo Creating ftp script ... -rem user.txt must be a single line: user userid password -rem where "userid" and "password" are replace with the appropriate values -copy user.txt download_docs.ftp -echo binary >>download_docs.ftp -echo get boost-docs.7z >>download_docs.ftp -echo bye >>download_docs.ftp - -echo Running ftp script ... -ftp -d -n -i -s:download_docs.ftp boost.cowic.de - -echo Unpacking 7z file ... -7z x -y -odocs_temp boost-docs.7z - -echo Download and unpack boost-docs.7z complete! \ No newline at end of file diff --git a/tools/release/snapshot_inspect.sh b/tools/release/snapshot_inspect.sh deleted file mode 100755 index 7c04fb58c29b..000000000000 --- a/tools/release/snapshot_inspect.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Inspect snapshot - -# � Copyright 2008 Beman Dawes -# Distributed under the Boost Software License, Version 1.0. -# See http://www.boost.org/LICENSE_1_0.txt - -# This script uses ftp, and thus assumes ~/.netrc contains a machine ... entry - -pushd posix/tools/inspect/build -bjam -popd -echo inspect... -pushd posix -dist/bin/inspect >../inspect.html -popd - -# create the ftp script -echo create 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 -echo ftp... -/usr/bin/ftp -v -i boost.cowic.de ..\inspect.html -popd - -echo Create ftp script... -copy user.txt inspect.ftp -echo dir >>inspect.ftp -echo binary >>inspect.ftp -echo put inspect.html >>inspect.ftp -echo dir >>inspect.ftp -echo mdelete inspect-snapshot.html >>inspect.ftp -echo rename inspect.html inspect-snapshot.html >>inspect.ftp -echo dir >>inspect.ftp -echo bye >>inspect.ftp - -echo Run ftp script... -ftp -n -i -s:inspect.ftp boost.cowic.de - -echo Inspect script complete diff --git a/tools/release/snapshot_posix.bat b/tools/release/snapshot_posix.bat deleted file mode 100644 index 32a899ef57f8..000000000000 --- a/tools/release/snapshot_posix.bat +++ /dev/null @@ -1,69 +0,0 @@ -rem Build a branches/release snapshot for POSIX, using LF line termination - -rem Copyright 2008 Beman Dawes - -rem Distributed under the Boost Software License, Version 1.0. -rem See http://www.boost.org/LICENSE_1_0.txt - -echo Build a branches/release snapshot for POSIX, using LF line termination... -echo Revision %BOOST_REVISION_NUMBER% -echo Removing old files... -rmdir /s /q posix >nul -rmdir /s /q svn_info >nul -del posix.tar.gz >nul -del posix.tar.bz2 >nul - -echo Exporting files from subversion... -svn export --non-interactive --native-eol LF -r %BOOST_REVISION_NUMBER% http://svn.boost.org/svn/boost/branches/release posix - -echo Copying docs into posix\doc... -pushd posix\doc -xcopy /s /y ..\..\docs_temp\html html -popd - -echo Setting SNAPSHOT_DATE -strftime "%%Y-%%m-%%d" >date.txt -set /p SNAPSHOT_DATE= posix.tar.bz2 - -ren boost-posix-%SNAPSHOT_DATE% posix - -echo The ftp transfer will be done in two steps because that has proved more -echo reliable on Beman's Windows XP 64-bit system. - -echo Creating ftp script 1 ... -copy user.txt posix.ftp -echo dir >>posix.ftp -echo binary >>posix.ftp - -rem echo put posix.tar.gz >>posix.ftp -rem echo mdelete boost-posix*.gz >>posix.ftp -rem echo rename posix.tar.gz boost-posix-%SNAPSHOT_DATE%.tar.gz >>posix.ftp - -echo put posix.tar.bz2 >>posix.ftp -echo bye >>posix.ftp - -echo Running ftp script 1 ... -ftp -n -i -s:posix.ftp boost.cowic.de - -echo Creating ftp script 2 ... -copy user.txt posix.ftp -echo dir >>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 - -echo Running ftp script 2 ... -ftp -n -i -s:posix.ftp boost.cowic.de - -echo POSIX snapshot complete! diff --git a/tools/release/snapshot_posix.sh b/tools/release/snapshot_posix.sh deleted file mode 100755 index ccc625a99980..000000000000 --- a/tools/release/snapshot_posix.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash - -# 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 - -echo "Build a branches/release snapshot for POSIX, using LF line termination..." - -echo "Removing old files..." -rm -r -f posix -rm -r -f svn_info - -echo "Exporting files from subversion..." -# leave an audit trail, which is used by inspect to determine revision number -# use --non-recursive rather than --depth=files until the linux distros catch up -svn co --non-recursive http://svn.boost.org/svn/boost/branches/release svn_info -svn export --non-interactive --native-eol LF http://svn.boost.org/svn/boost/branches/release posix - -#echo "Building bjam..." -# failure to use an up-to-date copy of bjam has caused much wasted effort. -#pushd posix/tools/build/v2/engine -#./build.sh gcc -#popd -# -#echo "Building docs..." -#pushd posix/doc -#../tools/build/v2/engine/bin.cygwinx86/bjam --toolset=gcc &>../../posix-bjam.log -#popd - -echo "Cleaning up and renaming..." -#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 - -echo "Building .gz file..." -tar cfz posix.tar.gz boost-posix-$SNAPSHOT_DATE -echo "Building .bz2 file..." -gunzip -c posix.tar.gz | bzip2 >posix.tar.bz2 -mv boost-posix-$SNAPSHOT_DATE posix - -echo "Creating 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 - -echo "Running ftp script..." -# use cygwin ftp rather than Windows ftp -/usr/bin/ftp -v -i boost.cowic.de nul -rmdir /s /q svn_info >nul -del windows.7z >nul -del windows.zip >nul - -echo Exporting files from subversion... -svn export --non-interactive --native-eol CRLF -r %BOOST_REVISION_NUMBER% http://svn.boost.org/svn/boost/branches/release windows - -echo Copying docs into windows\doc... -pushd windows\doc -xcopy /s /y ..\..\docs_temp\html html -popd - -echo Setting SNAPSHOT_DATE -strftime "%%Y-%%m-%%d" >date.txt -set /p SNAPSHOT_DATE= >windows.ftp -echo binary >>windows.ftp - -rem echo put windows.zip >>windows.ftp -rem echo mdelete boost-windows*.zip >>windows.ftp -rem echo rename windows.zip boost-windows-%SNAPSHOT_DATE%.zip >>windows.ftp - -echo put windows.7z >>windows.ftp -echo bye >>windows.ftp - -echo Running ftp script 1 ... -ftp -n -i -s:windows.ftp boost.cowic.de - -echo Creating ftp script 2 ... -copy user.txt windows.ftp -echo dir >>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 - -echo Running ftp script 2 ... -ftp -n -i -s:windows.ftp boost.cowic.de - -echo Windows snapshot complete! diff --git a/tools/release/snapshot_windows.sh b/tools/release/snapshot_windows.sh deleted file mode 100755 index 14de67f1470c..000000000000 --- a/tools/release/snapshot_windows.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash - -# 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 - -# This script uses ftp, and thus assumes ~/.netrc contains a machine ... entry - -echo "Build a branches/release snapshot for Windows, using CRLF line termination..." - -echo "Removing old files..." -rm -r -f windows - -echo "Exporting files from subversion..." -svn export --non-interactive --native-eol CRLF http://svn.boost.org/svn/boost/branches/release windows - -#echo "Copying docs from posix tree..." -#cp --recursive posix/doc/html windows/doc - -echo "Renaming..." -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 - -echo "Building .7z..." -rm -f windows.7z -# On Windows, 7z comes from the 7-Zip package, not Cygwin, -# so path must include C:\Program Files\7-Zip. -7z a -r windows.7z boost-windows-$SNAPSHOT_DATE - -echo "Reverting name..." -mv boost-windows-$SNAPSHOT_DATE windows - -echo "Creating ftp script..." -cat >windows.ftp -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 - -echo "Running ftp script..." -# This is the Windows ftp client -ftp -n -i -d -s:windows.ftp boost.cowic.de - -echo "Windows snapshot complete!" diff --git a/tools/release/strftime.cpp b/tools/release/strftime.cpp deleted file mode 100644 index 57d66099aeed..000000000000 --- a/tools/release/strftime.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// Command line utility to output the date under control of a format string - -// Copyright 2008 Beman Dawes - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -#define _CRT_SECURE_NO_WARNINGS - -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char * argv[]) -{ - if (argc != 2 ) - { - cerr << - "Invoke: strftime format\n" - "Example: strftime \"The date is %Y-%m-%d in ISO format\"" - "The format codes are:\n" - " %a Abbreviated weekday name\n" - " %A Full weekday name\n" - " %b Abbreviated month name\n" - " %B Full month name\n" - " %c Date and time representation appropriate for locale\n" - " %d Day of month as decimal number (01 - 31)\n" - " %H Hour in 24-hour format (00 - 23)\n" - " %I Hour in 12-hour format (01 - 12)\n" - " %j Day of year as decimal number (001 - 366)\n" - " %m Month as decimal number (01 - 12)\n" - " %M Minute as decimal number (00 - 59)\n" - " %p Current locale's A.M./P.M. indicator for 12-hour clock\n" - " %S Second as decimal number (00 - 59)\n" - " %U Week of year as decimal number, with Sunday as first day of week (00 - 53)\n" - " %w Weekday as decimal number (0 - 6; Sunday is 0)\n" - " %W Week of year as decimal number, with Monday as first day of week (00 - 53)\n" - " %x Date representation for current locale\n" - " %X Time representation for current locale\n" - " %y Year without century, as decimal number (00 - 99)\n" - " %Y Year with century, as decimal number\n" - " %z, %Z Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown\n" - " %% Percent sign\n" - ; - return 1; - } - - string format = argv[1]; - time_t t = time(0); - tm * tod = localtime(&t); - if (!tod) - { - cerr << "error: localtime function failed\n"; - return 1; - } - char* s = new char [format.size() + 256]; - if (strftime( s, format.size() + 256, format.c_str(), tod ) == 0 ) - { - cerr << "error: buffer overflow\n"; - return 1; - } - - cout << s; - return 0; -} diff --git a/tools/release/unmerged.bat b/tools/release/unmerged.bat deleted file mode 100644 index 9a3581b8abe5..000000000000 --- a/tools/release/unmerged.bat +++ /dev/null @@ -1,17 +0,0 @@ -@echo off -rem Copyright Beman Dawes 2009 -rem Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt -if not %1$==$ goto usage_ok -echo Usage: unmerged library-name [svn-options] -echo Options include --summarize to show paths only. i.e. suppresses line-by-line diffs -goto done - -:usage_ok -svn diff %2 %3 %4 %5 %6 http://svn.boost.org/svn/boost/branches/release/boost/%1.hpp ^ - http://svn.boost.org/svn/boost/trunk/boost/%1.hpp -svn diff %2 %3 %4 %5 %6 http://svn.boost.org/svn/boost/branches/release/boost/%1 ^ - http://svn.boost.org/svn/boost/trunk/boost/%1 -svn diff %2 %3 %4 %5 %6 http://svn.boost.org/svn/boost/branches/release/libs/%1 ^ - http://svn.boost.org/svn/boost/trunk/libs/%1 - -:done diff --git a/tools/release/unmerged_all.bat b/tools/release/unmerged_all.bat deleted file mode 100644 index 6bb19dd9f14f..000000000000 --- a/tools/release/unmerged_all.bat +++ /dev/null @@ -1,86 +0,0 @@ -rem Copyright Beman Dawes 2009 -rem Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt -call unmerged accumulators --summarize -call unmerged algorithm --summarize -call unmerged any --summarize -call unmerged array --summarize -call unmerged asio --summarize -call unmerged assign --summarize -call unmerged bimap --summarize -call unmerged bind --summarize -call unmerged circular_buffer --summarize -call unmerged compatibility --summarize -call unmerged compose --summarize -call unmerged concept --summarize -call unmerged concept_check --summarize -call unmerged config --summarize -call unmerged conversion --summarize -call unmerged crc --summarize -call unmerged date_time --summarize -call unmerged detail --summarize -call unmerged disjoint_sets --summarize -call unmerged dynamic_bitset --summarize -call unmerged exception --summarize -call unmerged filesystem --summarize -call unmerged flyweight --summarize -call unmerged foreach --summarize -call unmerged format --summarize -call unmerged function --summarize -call unmerged functional --summarize -call unmerged function_types --summarize -call unmerged fusion --summarize -call unmerged gil --summarize -call unmerged graph --summarize -call unmerged graph_parallel --summarize -call unmerged integer --summarize -call unmerged interprocess --summarize -call unmerged intrusive --summarize -call unmerged io --summarize -call unmerged iostreams --summarize -call unmerged iterator --summarize -call unmerged lambda --summarize -call unmerged logic --summarize -call unmerged math --summarize -call unmerged mem_fn --summarize -call unmerged mpi --summarize -call unmerged mpl --summarize -call unmerged multi_array --summarize -call unmerged multi_index --summarize -call unmerged numeric --summarize -call unmerged optional --summarize -call unmerged parameter --summarize -call unmerged pool --summarize -call unmerged preprocessor --summarize -call unmerged program_options --summarize -call unmerged property_map --summarize -call unmerged property_tree --summarize -call unmerged proto --summarize -call unmerged ptr_container --summarize -call unmerged python --summarize -call unmerged random --summarize -call unmerged range --summarize -call unmerged rational --summarize -call unmerged regex --summarize -call unmerged scope_exit --summarize -call unmerged serialization --summarize -call unmerged signals --summarize -call unmerged signals2 --summarize -call unmerged smart_ptr --summarize -call unmerged spirit --summarize -call unmerged statechart --summarize -call unmerged static_assert --summarize -call unmerged system --summarize -call unmerged test --summarize -call unmerged thread --summarize -call unmerged timer --summarize -call unmerged tokenizer --summarize -call unmerged tr1 --summarize -call unmerged tuple --summarize -call unmerged typeof --summarize -call unmerged type_traits --summarize -call unmerged units --summarize -call unmerged unordered --summarize -call unmerged utility --summarize -call unmerged variant --summarize -call unmerged wave --summarize -call unmerged xpressive --summarize diff --git a/tools/release/upload2sourceforge.bat b/tools/release/upload2sourceforge.bat deleted file mode 100644 index f16a2e809b1e..000000000000 --- a/tools/release/upload2sourceforge.bat +++ /dev/null @@ -1,13 +0,0 @@ -rem Copyright Beman Dawes 2009 -rem Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt -if not %1$==$ goto usage_ok -echo Usage: upload2sourceforge release-folder -echo Example: upload2sourceforge 1.40.0 -goto done - -:usage_ok -dir boost_* -pause Are these the correct files to upload? [Ctrl-C to interrupt] -rsync -avP -e ssh boost_* beman_dawes,boost@frs.sourceforge.net:/home/frs/project/b/bo/boost/boost/%1/ - -:done