diff --git a/.github/workflows/commit-bot.yml b/.github/workflows/commit-bot.yml new file mode 100644 index 000000000000..17430d60fcd9 --- /dev/null +++ b/.github/workflows/commit-bot.yml @@ -0,0 +1,109 @@ +name: Commit Bot + +on: + push: + branches: + - master + - develop + # 2026 + # The schedule is the way to run it + # but does this need to be running in the cppalliance org? + # Disable for now + # schedule: + # - cron: "0 * * * *" + +concurrency: + group: ${{format('commit-bot-{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +jobs: + update-modules: + runs-on: ubuntu-latest + name: Commit Bot + + steps: + - name: Check for module updates + id: branches + run: | + if [[ "${{ github.event_name }}" == "push" ]]; then + branches="${{ github.ref_name }}" + else + branches="master develop" + fi + echo "branches=$branches" >> $GITHUB_OUTPUT + + - name: Checkout master repository + uses: actions/checkout@v4 + if: contains(steps.branches.outputs.branches, 'master') + with: + ref: master + path: master + + - name: Checkout develop repository + uses: actions/checkout@v4 + if: contains(steps.branches.outputs.branches, 'develop') + with: + ref: develop + path: develop + + - name: Check for module updates + run: | + branches="${{ steps.branches.outputs.branches }}" + + # Set up Git + git config --global user.name "cppal-commitbot" + git config --global user.email "cppal-commitbot@example.com" + + # Update each branch + for branch in $branches; do + cd $branch + module_paths=$(git config --file .gitmodules --get-regexp '^submodule\..*\.path$') + while IFS=' ' read -r key path; do + submodule_name=$(echo "$key" | awk -F '.' '{print $2}') + submodule_path=$(echo "$path") + url=$(git config --file .gitmodules --get-regexp "^submodule\.$submodule_name\.url$" | awk '{print $2}') + current_hash=$(git ls-remote "$url" "refs/heads/$branch" | cut -f 1) + current_hash="${current_hash#"${current_hash%%[![:space:]]*}"}" + current_hash="${current_hash%"${hash##*[![:space:]]}"}" + commit_id="${current_hash:0:8}" + previous_hash=$(git ls-tree HEAD "$submodule_path" | awk '{print $3}') + previous_hash="${previous_hash#"${previous_hash%%[![:space:]]*}"}" + previous_hash="${previous_hash%"${previous_hash##*[![:space:]]}"}" + previous_commit_id="${previous_hash:0:8}" + # debugging + if [[ "$submodule_name" =~ container_hash ]]; then + echo "current_hash is XX${current_hash}XX and previous_hash is XX${previous_hash}XX" + fi + if [[ "${current_hash}" == "${previous_hash}" ]]; then + echo "$submodule_name ($commit_id): OK" + else + echo "$submodule_name: $previous_commit_id -> $commit_id" + set -x + set +e + git submodule update --init "$submodule_path" + git submodule update --remote "$submodule_path" + git add "$submodule_path" + git commit -m "Update $submodule_name from $branch" + set -e + set +x + fi + done <<< "$module_paths" + cd .. + done + + - name: Push changes from master + uses: ad-m/github-push-action@v0.8.0 + if: contains(steps.branches.outputs.branches, 'master') + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: master + directory: master + + - name: Push changes from develop + uses: ad-m/github-push-action@v0.8.0 + if: contains(steps.branches.outputs.branches, 'develop') + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: develop + directory: develop + diff --git a/.github/workflows/distro.yml b/.github/workflows/distro.yml new file mode 100644 index 000000000000..1614ed312dab --- /dev/null +++ b/.github/workflows/distro.yml @@ -0,0 +1,151 @@ +# This workflow builds boost and creates the formal release which goes in the website +name: Create release +on: + push: + branches: + - '*' # Run tests on all branches. Upload to AWS if master or develop. + tags: + - boost-* # Run tests on version tags. Upload to AWS with version tag. + pull_request: + branches: + - master # Run tests on PRs. Don't upload. + - develop + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +jobs: + build: + name: Create releases + runs-on: ubuntu-latest + container: + image: cppalliance/boost_superproject_build:20.04-v1 + defaults: + run: + shell: bash + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Environment + run: | + set -xe + env + pwd + ps -p $$ + + echo "HOME=/root" >> $GITHUB_ENV + git config --global --add safe.directory /__w/boost/boost + chown -R root:root /__w/boost/boost + + ls -al + ls -al /root + ln -s /root/build build + ls . + ls build + + - name: Antora setup + run: | + set -xe + + apt-get update + apt-get install -y nodejs + node -v + + wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash + export NVM_DIR="$HOME/.nvm" + source "$NVM_DIR/nvm.sh" + PATH=$PATH:${HOME}/.nvm + echo "${HOME}/.nvm" >> $GITHUB_PATH + nvm --version + nvm install --lts + + npm i -g npx || true + + npm i -g @antora/cli@3.1 @antora/site-generator@3.1 + npm i -g gulp-cli + + - name: Checkout post + run: | + python3 ./release/ci_boost_release.py checkout_post + + - name: Build + run: | + export NVM_DIR="$HOME/.nvm" + source "$NVM_DIR/nvm.sh" + export CIRCLECI=true + export CIRCLE_BRANCH=develop + CIRCLE_WORKING_DIRECTORY=$(pwd) + export CIRCLE_WORKING_DIRECTORY + export JOBS=$(grep -c ^processor /proc/cpuinfo) + echo "JOBS=$JOBS" + python3 ./release/ci_boost_release.py test_override --build-dir=build --releases-dir=releases + + - name: Find AWS Release + id: docs-dir + run: | + # Store doc release path + pwd + ls releases + boost_docs_dir=$(find releases -type d -name "boost_*-docs" -print -quit) + echo "$boost_docs_dir" + boost_docs_basename=$(basename "$boost_docs_dir") + echo "boost_docs_basename=$boost_docs_basename" + echo "boost_docs_basename=$boost_docs_basename" >> $GITHUB_OUTPUT + + - name: AWS Sync (revsys cluster) + if: github.ref_name == 'develop' || github.ref_name == 'master' || startsWith(github.ref_name, 'refs/tags/boost-') + uses: jakejarvis/s3-sync-action@master + with: + args: --follow-symlinks --delete + env: + AWS_S3_BUCKET: ${{ secrets.REVSYS_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.REVSYS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.REVSYS_ACCESS_KEY }} + AWS_REGION: 'us-east-2' + SOURCE_DIR: ${{ format('releases/{0}', steps.docs-dir.outputs.boost_docs_basename) }} + DEST_DIR: ${{ format('site/{0}', (github.ref_name == 'develop' && 'develop') || (github.ref_name == 'master' && 'master') || github.ref_name_name) }} + + - name: AWS Sync (staging on GKE) + if: github.ref_name == 'develop' || github.ref_name == 'master' || startsWith(github.ref_name, 'refs/tags/boost-') + uses: jakejarvis/s3-sync-action@master + with: + args: --follow-symlinks --delete + env: + AWS_S3_BUCKET: ${{ secrets.BOOST_STAGE_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.BOOST_STAGE_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.BOOST_STAGE_ACCESS_KEY }} + AWS_REGION: 'us-east-2' + SOURCE_DIR: ${{ format('releases/{0}', steps.docs-dir.outputs.boost_docs_basename) }} + DEST_DIR: ${{ format('site/{0}', (github.ref_name == 'develop' && 'develop') || (github.ref_name == 'master' && 'master') || github.ref_name_name) }} + + - name: AWS Sync (staging on GKE) + if: false && (github.ref_name == 'develop' || github.ref_name == 'master' || startsWith(github.ref_name, 'refs/tags/boost-')) + uses: jakejarvis/s3-sync-action@master + with: + args: --follow-symlinks --delete + env: + AWS_S3_BUCKET: ${{ secrets.BOOST_PRODUCTION_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.BOOST_PRODUCTION_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.BOOST_PRODUCTION_ACCESS_KEY }} + AWS_REGION: 'us-east-2' + SOURCE_DIR: ${{ format('releases/{0}', steps.docs-dir.outputs.boost_docs_basename) }} + DEST_DIR: ${{ format('site/{0}', (github.ref_name == 'develop' && 'develop') || (github.ref_name == 'master' && 'master') || github.ref_name_name) }} + + - name: Remove release dirs + run: find "releases" -mindepth 1 -maxdepth 1 -type d -exec rm -r {} + + + - name: Publish Releases as Artifacts + if: github.event_name == 'push' + uses: kittaakos/upload-artifact-as-is@v0 + with: + path: releases + + - uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/boost-') + with: + files: | + releases/${{ github.ref_name }}*.* + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51b494070a92..ffecf1f41bcd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,5 @@ -name: Release +# This workflow creates the github release, which is basically all libs with git related files removed +name: Github Release on: push: diff --git a/.gitignore b/.gitignore index cfeeaed7f7ca..b16d433b8601 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ /.settings/ /.project /.pydevproject +/build +/cmake-build-* diff --git a/.gitmodules b/.gitmodules index 2535437517f3..b5c69b1ab9f7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,805 +1,810 @@ [submodule "system"] path = libs/system - url = ../system.git + url = https://github.com/boostorg/system.git fetchRecurseSubmodules = on-demand branch = . [submodule "multi_array"] path = libs/multi_array - url = ../multi_array.git + url = https://github.com/boostorg/multi_array.git fetchRecurseSubmodules = on-demand branch = . [submodule "math"] path = libs/math - url = ../math.git + url = https://github.com/boostorg/math.git fetchRecurseSubmodules = on-demand branch = . [submodule "smart_ptr"] path = libs/smart_ptr - url = ../smart_ptr.git + url = https://github.com/boostorg/smart_ptr.git fetchRecurseSubmodules = on-demand branch = . [submodule "parameter"] path = libs/parameter - url = ../parameter.git + url = https://github.com/boostorg/parameter.git fetchRecurseSubmodules = on-demand branch = . [submodule "algorithm"] path = libs/algorithm - url = ../algorithm.git + url = https://github.com/boostorg/algorithm.git fetchRecurseSubmodules = on-demand branch = . [submodule "any"] path = libs/any - url = ../any.git + url = https://github.com/boostorg/any.git fetchRecurseSubmodules = on-demand branch = . [submodule "concept_check"] path = libs/concept_check - url = ../concept_check.git + url = https://github.com/boostorg/concept_check.git fetchRecurseSubmodules = on-demand branch = . [submodule "python"] path = libs/python - url = ../python.git + url = https://github.com/boostorg/python.git fetchRecurseSubmodules = on-demand branch = . [submodule "tti"] path = libs/tti - url = ../tti.git + url = https://github.com/boostorg/tti.git fetchRecurseSubmodules = on-demand branch = . [submodule "functional"] path = libs/functional - url = ../functional.git + url = https://github.com/boostorg/functional.git fetchRecurseSubmodules = on-demand branch = . [submodule "config"] path = libs/config - url = ../config.git + url = https://github.com/boostorg/config.git fetchRecurseSubmodules = on-demand branch = . [submodule "log"] path = libs/log - url = ../log.git + url = https://github.com/boostorg/log.git fetchRecurseSubmodules = on-demand branch = . [submodule "interprocess"] path = libs/interprocess - url = ../interprocess.git + url = https://github.com/boostorg/interprocess.git fetchRecurseSubmodules = on-demand branch = . [submodule "exception"] path = libs/exception - url = ../exception.git + url = https://github.com/boostorg/exception.git fetchRecurseSubmodules = on-demand branch = . [submodule "foreach"] path = libs/foreach - url = ../foreach.git + url = https://github.com/boostorg/foreach.git fetchRecurseSubmodules = on-demand branch = . [submodule "spirit"] path = libs/spirit - url = ../spirit.git + url = https://github.com/boostorg/spirit.git fetchRecurseSubmodules = on-demand branch = . [submodule "io"] path = libs/io - url = ../io.git + url = https://github.com/boostorg/io.git fetchRecurseSubmodules = on-demand branch = . [submodule "units"] path = libs/units - url = ../units.git + url = https://github.com/boostorg/units.git fetchRecurseSubmodules = on-demand branch = . [submodule "preprocessor"] path = libs/preprocessor - url = ../preprocessor.git + url = https://github.com/boostorg/preprocessor.git fetchRecurseSubmodules = on-demand branch = . [submodule "format"] path = libs/format - url = ../format.git + url = https://github.com/boostorg/format.git fetchRecurseSubmodules = on-demand branch = . [submodule "xpressive"] path = libs/xpressive - url = ../xpressive.git + url = https://github.com/boostorg/xpressive.git fetchRecurseSubmodules = on-demand branch = . [submodule "integer"] path = libs/integer - url = ../integer.git + url = https://github.com/boostorg/integer.git fetchRecurseSubmodules = on-demand branch = . [submodule "thread"] path = libs/thread - url = ../thread.git + url = https://github.com/boostorg/thread.git fetchRecurseSubmodules = on-demand branch = . [submodule "tokenizer"] path = libs/tokenizer - url = ../tokenizer.git + url = https://github.com/boostorg/tokenizer.git fetchRecurseSubmodules = on-demand branch = . [submodule "timer"] path = libs/timer - url = ../timer.git + url = https://github.com/boostorg/timer.git fetchRecurseSubmodules = on-demand branch = . [submodule "inspect"] path = tools/inspect - url = ../inspect.git + url = https://github.com/boostorg/inspect.git fetchRecurseSubmodules = on-demand branch = . [submodule "boostbook"] path = tools/boostbook - url = ../boostbook.git + url = https://github.com/boostorg/boostbook.git fetchRecurseSubmodules = on-demand branch = . [submodule "regex"] path = libs/regex - url = ../regex.git + url = https://github.com/boostorg/regex.git fetchRecurseSubmodules = on-demand branch = . [submodule "crc"] path = libs/crc - url = ../crc.git + url = https://github.com/boostorg/crc.git fetchRecurseSubmodules = on-demand branch = . [submodule "random"] path = libs/random - url = ../random.git + url = https://github.com/boostorg/random.git fetchRecurseSubmodules = on-demand branch = . [submodule "serialization"] path = libs/serialization - url = ../serialization.git + url = https://github.com/boostorg/serialization.git fetchRecurseSubmodules = on-demand branch = . [submodule "test"] path = libs/test - url = ../test.git + url = https://github.com/boostorg/test.git fetchRecurseSubmodules = on-demand branch = . [submodule "date_time"] path = libs/date_time - url = ../date_time.git + url = https://github.com/boostorg/date_time.git fetchRecurseSubmodules = on-demand branch = . [submodule "logic"] path = libs/logic - url = ../logic.git + url = https://github.com/boostorg/logic.git fetchRecurseSubmodules = on-demand branch = . [submodule "graph"] path = libs/graph - url = ../graph.git + url = https://github.com/boostorg/graph.git fetchRecurseSubmodules = on-demand branch = . [submodule "numeric_conversion"] path = libs/numeric/conversion - url = ../numeric_conversion.git + url = https://github.com/boostorg/numeric_conversion.git fetchRecurseSubmodules = on-demand branch = . [submodule "lambda"] path = libs/lambda - url = ../lambda.git + url = https://github.com/boostorg/lambda.git fetchRecurseSubmodules = on-demand branch = . [submodule "mpl"] path = libs/mpl - url = ../mpl.git + url = https://github.com/boostorg/mpl.git fetchRecurseSubmodules = on-demand branch = . [submodule "typeof"] path = libs/typeof - url = ../typeof.git + url = https://github.com/boostorg/typeof.git fetchRecurseSubmodules = on-demand branch = . [submodule "tuple"] path = libs/tuple - url = ../tuple.git + url = https://github.com/boostorg/tuple.git fetchRecurseSubmodules = on-demand branch = . [submodule "utility"] path = libs/utility - url = ../utility.git + url = https://github.com/boostorg/utility.git fetchRecurseSubmodules = on-demand branch = . [submodule "dynamic_bitset"] path = libs/dynamic_bitset - url = ../dynamic_bitset.git + url = https://github.com/boostorg/dynamic_bitset.git fetchRecurseSubmodules = on-demand branch = . [submodule "assign"] path = libs/assign - url = ../assign.git + url = https://github.com/boostorg/assign.git fetchRecurseSubmodules = on-demand branch = . [submodule "filesystem"] path = libs/filesystem - url = ../filesystem.git + url = https://github.com/boostorg/filesystem.git fetchRecurseSubmodules = on-demand branch = . [submodule "function"] path = libs/function - url = ../function.git + url = https://github.com/boostorg/function.git fetchRecurseSubmodules = on-demand branch = . [submodule "conversion"] path = libs/conversion - url = ../conversion.git + url = https://github.com/boostorg/conversion.git fetchRecurseSubmodules = on-demand branch = . [submodule "optional"] path = libs/optional - url = ../optional.git + url = https://github.com/boostorg/optional.git fetchRecurseSubmodules = on-demand branch = . [submodule "property_tree"] path = libs/property_tree - url = ../property_tree.git + url = https://github.com/boostorg/property_tree.git fetchRecurseSubmodules = on-demand branch = . [submodule "bimap"] path = libs/bimap - url = ../bimap.git + url = https://github.com/boostorg/bimap.git fetchRecurseSubmodules = on-demand branch = . [submodule "variant"] path = libs/variant - url = ../variant.git + url = https://github.com/boostorg/variant.git fetchRecurseSubmodules = on-demand branch = . [submodule "array"] path = libs/array - url = ../array.git + url = https://github.com/boostorg/array.git fetchRecurseSubmodules = on-demand branch = . [submodule "iostreams"] path = libs/iostreams - url = ../iostreams.git + url = https://github.com/boostorg/iostreams.git fetchRecurseSubmodules = on-demand branch = . [submodule "multi_index"] path = libs/multi_index - url = ../multi_index.git + url = https://github.com/boostorg/multi_index.git fetchRecurseSubmodules = on-demand branch = . [submodule "bcp"] path = tools/bcp - url = ../bcp.git + url = https://github.com/boostorg/bcp.git fetchRecurseSubmodules = on-demand branch = . [submodule "ptr_container"] path = libs/ptr_container - url = ../ptr_container.git + url = https://github.com/boostorg/ptr_container.git fetchRecurseSubmodules = on-demand branch = . [submodule "statechart"] path = libs/statechart - url = ../statechart.git + url = https://github.com/boostorg/statechart.git fetchRecurseSubmodules = on-demand branch = . [submodule "static_assert"] path = libs/static_assert - url = ../static_assert.git + url = https://github.com/boostorg/static_assert.git fetchRecurseSubmodules = on-demand branch = . [submodule "range"] path = libs/range - url = ../range.git + url = https://github.com/boostorg/range.git fetchRecurseSubmodules = on-demand branch = . [submodule "rational"] path = libs/rational - url = ../rational.git + url = https://github.com/boostorg/rational.git fetchRecurseSubmodules = on-demand branch = . [submodule "iterator"] path = libs/iterator - url = ../iterator.git + url = https://github.com/boostorg/iterator.git fetchRecurseSubmodules = on-demand branch = . [submodule "build"] path = tools/build - url = ../build.git + url = https://github.com/boostorg/build.git fetchRecurseSubmodules = on-demand branch = . [submodule "quickbook"] path = tools/quickbook - url = ../quickbook.git + url = https://github.com/boostorg/quickbook.git fetchRecurseSubmodules = on-demand branch = . [submodule "graph_parallel"] path = libs/graph_parallel - url = ../graph_parallel.git + url = https://github.com/boostorg/graph_parallel.git fetchRecurseSubmodules = on-demand branch = . [submodule "property_map"] path = libs/property_map - url = ../property_map.git + url = https://github.com/boostorg/property_map.git fetchRecurseSubmodules = on-demand branch = . [submodule "program_options"] path = libs/program_options - url = ../program_options.git + url = https://github.com/boostorg/program_options.git fetchRecurseSubmodules = on-demand branch = . [submodule "detail"] path = libs/detail - url = ../detail.git + url = https://github.com/boostorg/detail.git fetchRecurseSubmodules = on-demand branch = . [submodule "interval"] path = libs/numeric/interval - url = ../interval.git + url = https://github.com/boostorg/interval.git fetchRecurseSubmodules = on-demand branch = . [submodule "ublas"] path = libs/numeric/ublas - url = ../ublas.git + url = https://github.com/boostorg/ublas.git fetchRecurseSubmodules = on-demand branch = . [submodule "wave"] path = libs/wave - url = ../wave.git + url = https://github.com/boostorg/wave.git fetchRecurseSubmodules = on-demand branch = . [submodule "type_traits"] path = libs/type_traits - url = ../type_traits.git + url = https://github.com/boostorg/type_traits.git fetchRecurseSubmodules = on-demand branch = . [submodule "compatibility"] path = libs/compatibility - url = ../compatibility.git + url = https://github.com/boostorg/compatibility.git fetchRecurseSubmodules = on-demand branch = . [submodule "bind"] path = libs/bind - url = ../bind.git + url = https://github.com/boostorg/bind.git fetchRecurseSubmodules = on-demand branch = . [submodule "pool"] path = libs/pool - url = ../pool.git + url = https://github.com/boostorg/pool.git fetchRecurseSubmodules = on-demand branch = . [submodule "proto"] path = libs/proto - url = ../proto.git + url = https://github.com/boostorg/proto.git fetchRecurseSubmodules = on-demand branch = . [submodule "fusion"] path = libs/fusion - url = ../fusion.git + url = https://github.com/boostorg/fusion.git fetchRecurseSubmodules = on-demand branch = . [submodule "function_types"] path = libs/function_types - url = ../function_types.git + url = https://github.com/boostorg/function_types.git fetchRecurseSubmodules = on-demand branch = . [submodule "gil"] path = libs/gil - url = ../gil.git + url = https://github.com/boostorg/gil.git fetchRecurseSubmodules = on-demand branch = . [submodule "intrusive"] path = libs/intrusive - url = ../intrusive.git + url = https://github.com/boostorg/intrusive.git fetchRecurseSubmodules = on-demand branch = . [submodule "asio"] path = libs/asio - url = ../asio.git + url = https://github.com/boostorg/asio.git fetchRecurseSubmodules = on-demand branch = . [submodule "uuid"] path = libs/uuid - url = ../uuid.git + url = https://github.com/boostorg/uuid.git fetchRecurseSubmodules = on-demand branch = . [submodule "litre"] path = tools/litre - url = ../litre.git + url = https://github.com/boostorg/litre.git fetchRecurseSubmodules = on-demand branch = . [submodule "circular_buffer"] path = libs/circular_buffer - url = ../circular_buffer.git + url = https://github.com/boostorg/circular_buffer.git fetchRecurseSubmodules = on-demand branch = . [submodule "mpi"] path = libs/mpi - url = ../mpi.git + url = https://github.com/boostorg/mpi.git fetchRecurseSubmodules = on-demand branch = . [submodule "unordered"] path = libs/unordered - url = ../unordered.git + url = https://www.github.com/vinniefalco/unordered.git fetchRecurseSubmodules = on-demand branch = . [submodule "signals2"] path = libs/signals2 - url = ../signals2.git + url = https://github.com/boostorg/signals2.git fetchRecurseSubmodules = on-demand branch = . [submodule "accumulators"] path = libs/accumulators - url = ../accumulators.git + url = https://github.com/boostorg/accumulators.git fetchRecurseSubmodules = on-demand branch = . [submodule "atomic"] path = libs/atomic - url = ../atomic.git + url = https://github.com/boostorg/atomic.git fetchRecurseSubmodules = on-demand branch = . [submodule "scope_exit"] path = libs/scope_exit - url = ../scope_exit.git + url = https://github.com/boostorg/scope_exit.git fetchRecurseSubmodules = on-demand branch = . [submodule "flyweight"] path = libs/flyweight - url = ../flyweight.git + url = https://github.com/boostorg/flyweight.git fetchRecurseSubmodules = on-demand branch = . [submodule "icl"] path = libs/icl - url = ../icl.git + url = https://github.com/boostorg/icl.git fetchRecurseSubmodules = on-demand branch = . [submodule "predef"] path = libs/predef - url = ../predef.git + url = https://www.github.com/vinniefalco/predef.git fetchRecurseSubmodules = on-demand branch = . [submodule "chrono"] path = libs/chrono - url = ../chrono.git + url = https://github.com/boostorg/chrono.git fetchRecurseSubmodules = on-demand branch = . [submodule "polygon"] path = libs/polygon - url = ../polygon.git + url = https://github.com/boostorg/polygon.git fetchRecurseSubmodules = on-demand branch = . [submodule "msm"] path = libs/msm - url = ../msm.git + url = https://github.com/boostorg/msm.git fetchRecurseSubmodules = on-demand branch = . [submodule "heap"] path = libs/heap - url = ../heap.git + url = https://github.com/boostorg/heap.git fetchRecurseSubmodules = on-demand branch = . [submodule "coroutine"] path = libs/coroutine - url = ../coroutine.git + url = https://github.com/boostorg/coroutine.git fetchRecurseSubmodules = on-demand branch = . [submodule "coroutine2"] path = libs/coroutine2 - url = ../coroutine2.git + url = https://github.com/boostorg/coroutine2.git fetchRecurseSubmodules = on-demand branch = . [submodule "ratio"] path = libs/ratio - url = ../ratio.git + url = https://github.com/boostorg/ratio.git fetchRecurseSubmodules = on-demand branch = . [submodule "odeint"] path = libs/numeric/odeint - url = ../odeint.git + url = https://github.com/boostorg/odeint.git fetchRecurseSubmodules = on-demand branch = . [submodule "geometry"] path = libs/geometry - url = ../geometry.git + url = https://github.com/boostorg/geometry.git fetchRecurseSubmodules = on-demand branch = . [submodule "phoenix"] path = libs/phoenix - url = ../phoenix.git + url = https://github.com/boostorg/phoenix.git fetchRecurseSubmodules = on-demand branch = . [submodule "move"] path = libs/move - url = ../move.git + url = https://github.com/boostorg/move.git fetchRecurseSubmodules = on-demand branch = . [submodule "locale"] path = libs/locale - url = ../locale.git + url = https://github.com/boostorg/locale.git fetchRecurseSubmodules = on-demand branch = . [submodule "auto_index"] path = tools/auto_index - url = ../auto_index.git + url = https://github.com/boostorg/auto_index.git fetchRecurseSubmodules = on-demand branch = . [submodule "container"] path = libs/container - url = ../container.git + url = https://github.com/boostorg/container.git fetchRecurseSubmodules = on-demand branch = . [submodule "local_function"] path = libs/local_function - url = ../local_function.git + url = https://github.com/boostorg/local_function.git fetchRecurseSubmodules = on-demand branch = . [submodule "context"] path = libs/context - url = ../context.git + url = https://github.com/boostorg/context.git fetchRecurseSubmodules = on-demand branch = . [submodule "type_erasure"] path = libs/type_erasure - url = ../type_erasure.git + url = https://github.com/boostorg/type_erasure.git fetchRecurseSubmodules = on-demand branch = . [submodule "multiprecision"] path = libs/multiprecision - url = ../multiprecision.git + url = https://github.com/boostorg/multiprecision.git fetchRecurseSubmodules = on-demand branch = . [submodule "lockfree"] path = libs/lockfree - url = ../lockfree.git + url = https://github.com/boostorg/lockfree.git + fetchRecurseSubmodules = on-demand + branch = . +[submodule "sync"] + path = libs/sync + url = https://github.com/boostorg/sync.git fetchRecurseSubmodules = on-demand branch = . [submodule "assert"] path = libs/assert - url = ../assert.git + url = https://github.com/boostorg/assert.git fetchRecurseSubmodules = on-demand branch = . [submodule "align"] path = libs/align - url = ../align.git + url = https://github.com/boostorg/align.git fetchRecurseSubmodules = on-demand branch = . [submodule "type_index"] path = libs/type_index - url = ../type_index.git + url = https://github.com/boostorg/type_index.git fetchRecurseSubmodules = on-demand branch = . [submodule "core"] path = libs/core - url = ../core.git + url = https://github.com/boostorg/core.git fetchRecurseSubmodules = on-demand branch = . [submodule "throw_exception"] path = libs/throw_exception - url = ../throw_exception.git + url = https://github.com/boostorg/throw_exception.git fetchRecurseSubmodules = on-demand branch = . [submodule "winapi"] path = libs/winapi - url = ../winapi.git + url = https://github.com/boostorg/winapi.git fetchRecurseSubmodules = on-demand branch = . [submodule "boostdep"] path = tools/boostdep - url = ../boostdep.git + url = https://github.com/boostorg/boostdep.git fetchRecurseSubmodules = on-demand branch = . [submodule "lexical_cast"] path = libs/lexical_cast - url = ../lexical_cast.git + url = https://github.com/boostorg/lexical_cast.git fetchRecurseSubmodules = on-demand branch = . [submodule "sort"] path = libs/sort - url = ../sort.git + url = https://github.com/boostorg/sort.git fetchRecurseSubmodules = on-demand branch = . [submodule "convert"] path = libs/convert - url = ../convert.git + url = https://github.com/boostorg/convert.git fetchRecurseSubmodules = on-demand branch = . [submodule "endian"] path = libs/endian - url = ../endian.git + url = https://github.com/boostorg/endian.git fetchRecurseSubmodules = on-demand branch = . [submodule "vmd"] path = libs/vmd - url = ../vmd.git + url = https://github.com/boostorg/vmd.git fetchRecurseSubmodules = on-demand branch = . [submodule "dll"] path = libs/dll - url = ../dll.git + url = https://github.com/boostorg/dll.git fetchRecurseSubmodules = on-demand branch = . [submodule "compute"] path = libs/compute - url = ../compute.git + url = https://github.com/boostorg/compute.git fetchRecurseSubmodules = on-demand branch = . [submodule "hana"] path = libs/hana - url = ../hana.git + url = https://github.com/boostorg/hana.git fetchRecurseSubmodules = on-demand branch = . [submodule "metaparse"] path = libs/metaparse - url = ../metaparse.git + url = https://github.com/boostorg/metaparse.git fetchRecurseSubmodules = on-demand branch = . [submodule "qvm"] path = libs/qvm - url = ../qvm.git + url = https://www.github.com/vinniefalco/qvm.git fetchRecurseSubmodules = on-demand branch = . [submodule "fiber"] path = libs/fiber - url = ../fiber.git + url = https://github.com/boostorg/fiber.git fetchRecurseSubmodules = on-demand branch = . [submodule "process"] path = libs/process - url = ../process.git + url = https://github.com/boostorg/process.git fetchRecurseSubmodules = on-demand branch = . [submodule "stacktrace"] path = libs/stacktrace - url = ../stacktrace.git + url = https://github.com/boostorg/stacktrace.git fetchRecurseSubmodules = on-demand branch = . [submodule "poly_collection"] path = libs/poly_collection - url = ../poly_collection.git + url = https://github.com/boostorg/poly_collection.git fetchRecurseSubmodules = on-demand branch = . [submodule "beast"] path = libs/beast - url = ../beast.git + url = https://github.com/boostorg/beast.git fetchRecurseSubmodules = on-demand branch = . [submodule "mp11"] path = libs/mp11 - url = ../mp11.git + url = https://www.github.com/vinniefalco/mp11.git fetchRecurseSubmodules = on-demand branch = . [submodule "callable_traits"] path = libs/callable_traits - url = ../callable_traits.git + url = https://github.com/boostorg/callable_traits.git fetchRecurseSubmodules = on-demand branch = . [submodule "contract"] path = libs/contract - url = ../contract.git + url = https://github.com/boostorg/contract.git fetchRecurseSubmodules = on-demand branch = . [submodule "check_build"] path = tools/check_build - url = ../check_build.git + url = https://github.com/boostorg/check_build.git fetchRecurseSubmodules = on-demand branch = . [submodule "container_hash"] path = libs/container_hash - url = ../container_hash.git + url = https://github.com/boostorg/container_hash.git fetchRecurseSubmodules = on-demand branch = . [submodule "hof"] path = libs/hof - url = ../hof.git + url = https://github.com/boostorg/hof.git fetchRecurseSubmodules = on-demand branch = . [submodule "yap"] path = libs/yap - url = ../yap.git + url = https://github.com/boostorg/yap.git fetchRecurseSubmodules = on-demand branch = . [submodule "safe_numerics"] path = libs/safe_numerics - url = ../safe_numerics.git + url = https://github.com/boostorg/safe_numerics.git fetchRecurseSubmodules = on-demand branch = . [submodule "parameter_python"] path = libs/parameter_python - url = ../parameter_python.git + url = https://github.com/boostorg/parameter_python.git fetchRecurseSubmodules = on-demand branch = . [submodule "headers"] path = libs/headers - url = ../headers.git + url = https://github.com/boostorg/headers.git fetchRecurseSubmodules = on-demand branch = . [submodule "boost_install"] path = tools/boost_install - url = ../boost_install.git + url = https://github.com/boostorg/boost_install.git fetchRecurseSubmodules = on-demand branch = . [submodule "outcome"] path = libs/outcome - url = ../outcome.git + url = https://github.com/boostorg/outcome.git fetchRecurseSubmodules = on-demand branch = . [submodule "histogram"] path = libs/histogram - url = ../histogram.git + url = https://github.com/boostorg/histogram.git fetchRecurseSubmodules = on-demand branch = . [submodule "variant2"] path = libs/variant2 - url = ../variant2.git + url = https://github.com/boostorg/variant2.git fetchRecurseSubmodules = on-demand branch = . [submodule "nowide"] path = libs/nowide - url = ../nowide.git + url = https://github.com/boostorg/nowide.git fetchRecurseSubmodules = on-demand branch = . [submodule "docca"] path = tools/docca - url = ../docca.git + url = https://github.com/boostorg/docca.git fetchRecurseSubmodules = on-demand branch = . [submodule "cmake"] path = tools/cmake - url = ../cmake.git + url = https://github.com/boostorg/cmake.git fetchRecurseSubmodules = on-demand branch = . [submodule "static_string"] path = libs/static_string - url = ../static_string.git + url = https://github.com/boostorg/static_string.git fetchRecurseSubmodules = on-demand branch = . [submodule "stl_interfaces"] path = libs/stl_interfaces - url = ../stl_interfaces.git + url = https://github.com/boostorg/stl_interfaces.git fetchRecurseSubmodules = on-demand branch = . [submodule "more"] path = more - url = ../more.git + url = https://github.com/boostorg/more.git fetchRecurseSubmodules = on-demand branch = . [submodule "leaf"] path = libs/leaf - url = ../leaf.git + url = https://github.com/boostorg/leaf.git fetchRecurseSubmodules = on-demand branch = . [submodule "json"] path = libs/json - url = ../json.git + url = https://github.com/boostorg/json.git fetchRecurseSubmodules = on-demand branch = . [submodule "pfr"] path = libs/pfr - url = ../pfr.git + url = https://github.com/boostorg/pfr.git fetchRecurseSubmodules = on-demand branch = . [submodule "describe"] path = libs/describe - url = ../describe.git + url = https://github.com/boostorg/describe.git fetchRecurseSubmodules = on-demand branch = . [submodule "lambda2"] path = libs/lambda2 - url = ../lambda2.git + url = https://github.com/boostorg/lambda2.git fetchRecurseSubmodules = on-demand branch = . [submodule "property_map_parallel"] path = libs/property_map_parallel - url = ../property_map_parallel.git + url = https://github.com/boostorg/property_map_parallel.git fetchRecurseSubmodules = on-demand branch = . [submodule "url"] path = libs/url - url = ../url.git + url = https://github.com/boostorg/url.git fetchRecurseSubmodules = on-demand branch = . [submodule "mysql"] path = libs/mysql - url = ../mysql.git + url = https://github.com/boostorg/mysql.git fetchRecurseSubmodules = on-demand branch = . diff --git a/libs/accumulators b/libs/accumulators index 4df0de9b47ef..eb7ff254b81b 160000 --- a/libs/accumulators +++ b/libs/accumulators @@ -1 +1 @@ -Subproject commit 4df0de9b47ef1415a7ccf0310250d6e15e132537 +Subproject commit eb7ff254b81b6a4d3fd0012a9691e91c8591d312 diff --git a/libs/algorithm b/libs/algorithm index 28dd87b90e79..32c5a6327cfd 160000 --- a/libs/algorithm +++ b/libs/algorithm @@ -1 +1 @@ -Subproject commit 28dd87b90e79c5e1d9de82835125aa2bcbb3f468 +Subproject commit 32c5a6327cfdca5d41ce0f1d8849b811886daa2f diff --git a/libs/any b/libs/any index 89d456572b24..3312581e7741 160000 --- a/libs/any +++ b/libs/any @@ -1 +1 @@ -Subproject commit 89d456572b2419228ed94275100bd0cc5d6059bb +Subproject commit 3312581e774129462e06bbdc752b919dca37e85c diff --git a/libs/array b/libs/array index 868af27d82d4..3df3aafd1924 160000 --- a/libs/array +++ b/libs/array @@ -1 +1 @@ -Subproject commit 868af27d82d4f83566c072615ec8eabea4266dc0 +Subproject commit 3df3aafd1924084d46988590bd94cf4c1b362859 diff --git a/libs/asio b/libs/asio index f5ca167d300a..8b22ca054c15 160000 --- a/libs/asio +++ b/libs/asio @@ -1 +1 @@ -Subproject commit f5ca167d300a3a18853c29314b03ae0ce91c737a +Subproject commit 8b22ca054c15f32b5aea8649c0189f48f8ad874e diff --git a/libs/assert b/libs/assert index f10ddd608e08..af15ced8d049 160000 --- a/libs/assert +++ b/libs/assert @@ -1 +1 @@ -Subproject commit f10ddd608e087a89ee5bfc41cf2987cc5ef61473 +Subproject commit af15ced8d04907345a0211dab46557e085960eb7 diff --git a/libs/assign b/libs/assign index ababd47970e8..b452220f5de0 160000 --- a/libs/assign +++ b/libs/assign @@ -1 +1 @@ -Subproject commit ababd47970e8a5fa1bebc8ccad526c4f25bd867a +Subproject commit b452220f5de0f6205433c08cee63742102a424d2 diff --git a/libs/atomic b/libs/atomic index 295afdecd75f..84dccb548a7d 160000 --- a/libs/atomic +++ b/libs/atomic @@ -1 +1 @@ -Subproject commit 295afdecd75f01a4f308465d4f072ee983e31e22 +Subproject commit 84dccb548a7d8353c8ae4021aa7903bc94f80e0b diff --git a/libs/beast b/libs/beast index 42b6387ae454..67106ebaab7a 160000 --- a/libs/beast +++ b/libs/beast @@ -1 +1 @@ -Subproject commit 42b6387ae45481cad4ef7134a57affb637ffcab5 +Subproject commit 67106ebaab7a644a9bdb5d6e6b0a3f4ad1d0e4f7 diff --git a/libs/bimap b/libs/bimap index e5c2657a9e2d..705a7ca7f49f 160000 --- a/libs/bimap +++ b/libs/bimap @@ -1 +1 @@ -Subproject commit e5c2657a9e2d6184622ad4ccd1373e6c60a7efca +Subproject commit 705a7ca7f49f197a803134ade3a8c64473617a24 diff --git a/libs/bind b/libs/bind index 8d945a9733e4..8cc29fc19db4 160000 --- a/libs/bind +++ b/libs/bind @@ -1 +1 @@ -Subproject commit 8d945a9733e4e7b8d5120186e1cdb2afc8a2f873 +Subproject commit 8cc29fc19db49e791743c821821e201b46ab9c66 diff --git a/libs/chrono b/libs/chrono index 207d30d4c622..ef5108720394 160000 --- a/libs/chrono +++ b/libs/chrono @@ -1 +1 @@ -Subproject commit 207d30d4c6228998851967874ffe2fadf0c03feb +Subproject commit ef510872039483dc66b7b2263c43c273a9aaecd6 diff --git a/libs/compatibility b/libs/compatibility index 47ce71af6b01..7be386ad9808 160000 --- a/libs/compatibility +++ b/libs/compatibility @@ -1 +1 @@ -Subproject commit 47ce71af6b018764c9ba74c0bfcb4f3151b81aa7 +Subproject commit 7be386ad98083806f805c6d1e2450e09ae10250f diff --git a/libs/compute b/libs/compute index 36350b7de849..cf7907574d61 160000 --- a/libs/compute +++ b/libs/compute @@ -1 +1 @@ -Subproject commit 36350b7de849300bd3d72a05d8bf890ca405a014 +Subproject commit cf7907574d6159cd43e6cf687a7b656278c61dd0 diff --git a/libs/concept_check b/libs/concept_check index 37c9bddf0bde..0ef7f2b5daea 160000 --- a/libs/concept_check +++ b/libs/concept_check @@ -1 +1 @@ -Subproject commit 37c9bddf0bdefaaae0ca5852c1a153d9fc43f278 +Subproject commit 0ef7f2b5daeaa125a53d98affba8f40091d24b17 diff --git a/libs/config b/libs/config index 429c1982d475..3d0726154953 160000 --- a/libs/config +++ b/libs/config @@ -1 +1 @@ -Subproject commit 429c1982d4751facab94027200d553fc4af3bdd8 +Subproject commit 3d072615495357ff450a77ac8c43e060a75455ef diff --git a/libs/container b/libs/container index 22357b34b7a5..9e2afe85ad20 160000 --- a/libs/container +++ b/libs/container @@ -1 +1 @@ -Subproject commit 22357b34b7a5ad94a307fb0df69ff5a1f05f0c83 +Subproject commit 9e2afe85ad20b93bf8766396188da744b02a5a26 diff --git a/libs/container_hash b/libs/container_hash index e62a2685661d..060d4aea6b5b 160000 --- a/libs/container_hash +++ b/libs/container_hash @@ -1 +1 @@ -Subproject commit e62a2685661de1e3f2848fa1e5dd0a0f58d3359d +Subproject commit 060d4aea6b5b59d2c9146b7d8e994735b2c0a582 diff --git a/libs/context b/libs/context index dbe0b27303c2..639fa7305657 160000 --- a/libs/context +++ b/libs/context @@ -1 +1 @@ -Subproject commit dbe0b27303c2a834b87ef67ac07e6a8e22f7ad8e +Subproject commit 639fa73056578dbffc82537854109430950ed3ef diff --git a/libs/contract b/libs/contract index eca93d24b5d3..4a4047f84a1a 160000 --- a/libs/contract +++ b/libs/contract @@ -1 +1 @@ -Subproject commit eca93d24b5d3bb909ed64c12b5feb5296c5cc070 +Subproject commit 4a4047f84a1a849f8e2737d8d4ceb71a739e2082 diff --git a/libs/conversion b/libs/conversion index 7ba0984b34d2..827dd94c681d 160000 --- a/libs/conversion +++ b/libs/conversion @@ -1 +1 @@ -Subproject commit 7ba0984b34d23f4c8c4a69b900210fe449ce7eee +Subproject commit 827dd94c681d9a660c81d8f2716eb7d11fc4d42f diff --git a/libs/convert b/libs/convert index 1dd2ca23cb74..0dd7a76b1c05 160000 --- a/libs/convert +++ b/libs/convert @@ -1 +1 @@ -Subproject commit 1dd2ca23cb74991d420ea85b9b764f0ac76367c1 +Subproject commit 0dd7a76b1c051c048b4991b7aa9c8b5aeb5776ee diff --git a/libs/core b/libs/core index 39978bde2ba0..a90a31934fe8 160000 --- a/libs/core +++ b/libs/core @@ -1 +1 @@ -Subproject commit 39978bde2ba03e7acfa79f530093f0e2e247595d +Subproject commit a90a31934fe8bcb6e6be6dfea77b80492c7b6c81 diff --git a/libs/coroutine b/libs/coroutine index 1e1347c0b191..8b09bf7d0e8a 160000 --- a/libs/coroutine +++ b/libs/coroutine @@ -1 +1 @@ -Subproject commit 1e1347c0b1910b9310ec1719edad8b0bf2fd03c8 +Subproject commit 8b09bf7d0e8a13d1ef59aaff02a84d42acb034f3 diff --git a/libs/coroutine2 b/libs/coroutine2 index d7e1c1c4abcf..dbbf042e0a90 160000 --- a/libs/coroutine2 +++ b/libs/coroutine2 @@ -1 +1 @@ -Subproject commit d7e1c1c4abcf8c1e90097279e485edea0b253a80 +Subproject commit dbbf042e0a9081b4119d491b788ae0fe7c03192a diff --git a/libs/crc b/libs/crc index 96daae9fcdf9..d547322aa734 160000 --- a/libs/crc +++ b/libs/crc @@ -1 +1 @@ -Subproject commit 96daae9fcdf965298077ed12a9304ea24713bb40 +Subproject commit d547322aa734b37901fa79e7b5e71040d698ce69 diff --git a/libs/describe b/libs/describe index 311cab756539..4959611e0925 160000 --- a/libs/describe +++ b/libs/describe @@ -1 +1 @@ -Subproject commit 311cab7565398f106f783f904f7bda036493cce4 +Subproject commit 4959611e0925c35b5cb954e6e8298f1f13374951 diff --git a/libs/detail b/libs/detail index c6dac7611086..965826dc3741 160000 --- a/libs/detail +++ b/libs/detail @@ -1 +1 @@ -Subproject commit c6dac76110869b7cd22e48a146170d14af994240 +Subproject commit 965826dc374165d71530d9814ecd5f4628365522 diff --git a/libs/dll b/libs/dll index 200bff6f9359..a71976486975 160000 --- a/libs/dll +++ b/libs/dll @@ -1 +1 @@ -Subproject commit 200bff6f9359cd770a4f9f2b637bf8179a55dbdf +Subproject commit a71976486975d9c56169214b331157a1ffa1d278 diff --git a/libs/dynamic_bitset b/libs/dynamic_bitset index 8e20aa1462bf..9b64641093ca 160000 --- a/libs/dynamic_bitset +++ b/libs/dynamic_bitset @@ -1 +1 @@ -Subproject commit 8e20aa1462bf6dcadc338835df529a6d568431b1 +Subproject commit 9b64641093ca7890e656f60f65e285ff08908345 diff --git a/libs/endian b/libs/endian index b84ac7969b4d..4bffdf3defc2 160000 --- a/libs/endian +++ b/libs/endian @@ -1 +1 @@ -Subproject commit b84ac7969b4df0ff6add52c0e87fce4cde5db242 +Subproject commit 4bffdf3defc2836409e72622066a40d8396088ae diff --git a/libs/exception b/libs/exception index b039b4ea18ef..0bb269605886 160000 --- a/libs/exception +++ b/libs/exception @@ -1 +1 @@ -Subproject commit b039b4ea18ef752d0c1684b3f715ce493b778060 +Subproject commit 0bb269605886f410f70cb9659d33ac3fa20fa522 diff --git a/libs/fiber b/libs/fiber index 2cb72f5dcefd..238487b543e8 160000 --- a/libs/fiber +++ b/libs/fiber @@ -1 +1 @@ -Subproject commit 2cb72f5dcefdeffbb36636234e6ccb36282f8ae3 +Subproject commit 238487b543e8863c647d31a82ccfc3fa11a960d9 diff --git a/libs/filesystem b/libs/filesystem index fcc1bf3eca15..8e4e89c7604e 160000 --- a/libs/filesystem +++ b/libs/filesystem @@ -1 +1 @@ -Subproject commit fcc1bf3eca15323b90f2df042464668b0d131698 +Subproject commit 8e4e89c7604e46a665bf0aee456e1fddcd5681b4 diff --git a/libs/flyweight b/libs/flyweight index aaef985f8940..fcd6671d9786 160000 --- a/libs/flyweight +++ b/libs/flyweight @@ -1 +1 @@ -Subproject commit aaef985f8940d2e8bd071bd138342fdb9470f35c +Subproject commit fcd6671d978652a7debe9e2530021b047d50ae41 diff --git a/libs/foreach b/libs/foreach index cc2f75ae3049..904451bb8b09 160000 --- a/libs/foreach +++ b/libs/foreach @@ -1 +1 @@ -Subproject commit cc2f75ae30492b9de69b3b692f5c59afcb7dea5e +Subproject commit 904451bb8b094b426a69fbf33825c06677f2835f diff --git a/libs/format b/libs/format index 78ef371d2d90..66075102416b 160000 --- a/libs/format +++ b/libs/format @@ -1 +1 @@ -Subproject commit 78ef371d2d90462671b90c3af407fae07820b193 +Subproject commit 66075102416bc5d0f8e0bd151a19013dadbf94ce diff --git a/libs/function b/libs/function index 65bbbbc359b2..18650af5175e 160000 --- a/libs/function +++ b/libs/function @@ -1 +1 @@ -Subproject commit 65bbbbc359b2e1c57f589d020b8e9615a9a05843 +Subproject commit 18650af5175ea247aebc60ff12db1b477123d5dc diff --git a/libs/function_types b/libs/function_types index 895335874d67..e454e797fbd2 160000 --- a/libs/function_types +++ b/libs/function_types @@ -1 +1 @@ -Subproject commit 895335874d67987ada0d8bf6ca1725e70642ed49 +Subproject commit e454e797fbd2e1df704306e8ef70836e8bcb71ae diff --git a/libs/functional b/libs/functional index b733c0d31825..6a573e4b8333 160000 --- a/libs/functional +++ b/libs/functional @@ -1 +1 @@ -Subproject commit b733c0d318250b076b1011e021a3c956f7978254 +Subproject commit 6a573e4b8333ee63ee62ce95558c3667348db233 diff --git a/libs/fusion b/libs/fusion index 5d19cc2d5713..53da4e0b2c8c 160000 --- a/libs/fusion +++ b/libs/fusion @@ -1 +1 @@ -Subproject commit 5d19cc2d57134b2bd8881972a6596432e6c2f39c +Subproject commit 53da4e0b2c8cd4969b09fa646d314ac0c414c1ff diff --git a/libs/geometry b/libs/geometry index 2ec9d65d1294..93a8ff869e98 160000 --- a/libs/geometry +++ b/libs/geometry @@ -1 +1 @@ -Subproject commit 2ec9d65d1294edb97157b564726fdf56b6ac562f +Subproject commit 93a8ff869e985941f0d500c72df9667ef9203c8a diff --git a/libs/gil b/libs/gil index 8994c2ff8ed8..61e21588fd30 160000 --- a/libs/gil +++ b/libs/gil @@ -1 +1 @@ -Subproject commit 8994c2ff8ed8b88e0ffef9658a4c603c4a001fad +Subproject commit 61e21588fd306e3fa8168e147d9008dc61f149f6 diff --git a/libs/graph b/libs/graph index a649be53bd90..54a94911e68d 160000 --- a/libs/graph +++ b/libs/graph @@ -1 +1 @@ -Subproject commit a649be53bd90ab3365c6c0c44414c80907cfd8a1 +Subproject commit 54a94911e68dccf5812b32d018566566700499f3 diff --git a/libs/hana b/libs/hana index d3634a3e9ce4..bc49ee25638e 160000 --- a/libs/hana +++ b/libs/hana @@ -1 +1 @@ -Subproject commit d3634a3e9ce49a2207bd7870407c05e74ce29ef5 +Subproject commit bc49ee25638e59d977edff5737b4e6bf12c1e5ea diff --git a/libs/headers b/libs/headers index 0456900fadde..95930ca8f5d1 160000 --- a/libs/headers +++ b/libs/headers @@ -1 +1 @@ -Subproject commit 0456900fadde4b07c84760eadea4ccc9f948fe28 +Subproject commit 95930ca8f5d144fe345a2ad7a2a7728b8c3e5cd5 diff --git a/libs/heap b/libs/heap index dc2f19f8815c..3b22808536e4 160000 --- a/libs/heap +++ b/libs/heap @@ -1 +1 @@ -Subproject commit dc2f19f8815cbe0654df61bfc5f31ad8b06fc883 +Subproject commit 3b22808536e43f501fce7af81e83a18958d50ce5 diff --git a/libs/histogram b/libs/histogram index 70b98302a2ea..5e9b7b162e8a 160000 --- a/libs/histogram +++ b/libs/histogram @@ -1 +1 @@ -Subproject commit 70b98302a2ea7f61de15a1b52274e2649dd2d50d +Subproject commit 5e9b7b162e8a2801b77ccf199dedea88fa44325c diff --git a/libs/icl b/libs/icl index e6c06ddee1e2..2741c3a1b7b7 160000 --- a/libs/icl +++ b/libs/icl @@ -1 +1 @@ -Subproject commit e6c06ddee1e2320f11c4ec5cd2661c4abe9bca53 +Subproject commit 2741c3a1b7b79f7326360c26c3e1588b385c9e53 diff --git a/libs/integer b/libs/integer index 8ce66ab37e24..4299761fcc31 160000 --- a/libs/integer +++ b/libs/integer @@ -1 +1 @@ -Subproject commit 8ce66ab37e246d1df51a8d7b37cfa0049057ca8f +Subproject commit 4299761fcc31172fe8a2c9b9c5c0f191dbf41d73 diff --git a/libs/interprocess b/libs/interprocess index a0c5a8ff1764..cefc846e381b 160000 --- a/libs/interprocess +++ b/libs/interprocess @@ -1 +1 @@ -Subproject commit a0c5a8ff176434c9024d4540ce092a2eebb8c5c3 +Subproject commit cefc846e381b2fd14d81ddf31e4d28bf06377765 diff --git a/libs/intrusive b/libs/intrusive index 1014e97fb28e..075ed5a0948d 160000 --- a/libs/intrusive +++ b/libs/intrusive @@ -1 +1 @@ -Subproject commit 1014e97fb28ec0b512cb875579fd43c9189a3ec3 +Subproject commit 075ed5a0948d1f1c3277ce60c82f4ead56356752 diff --git a/libs/io b/libs/io index 932dd480263d..342e4c6d10d5 160000 --- a/libs/io +++ b/libs/io @@ -1 +1 @@ -Subproject commit 932dd480263d06d00bf4b40a323dc3f4ace266e2 +Subproject commit 342e4c6d10d586058818daa84201a2d301357a53 diff --git a/libs/iostreams b/libs/iostreams index 5fe4de84f863..8561bdb8bcd0 160000 --- a/libs/iostreams +++ b/libs/iostreams @@ -1 +1 @@ -Subproject commit 5fe4de84f863964f7573be1146f524886146a5d3 +Subproject commit 8561bdb8bcd0a1b528d60c090407233b0c1d9148 diff --git a/libs/iterator b/libs/iterator index 7c9b4296a189..b74b5534821e 160000 --- a/libs/iterator +++ b/libs/iterator @@ -1 +1 @@ -Subproject commit 7c9b4296a189f71b28de3aad025b08da1f4ca84b +Subproject commit b74b5534821ebd78adb2b8c13c417219e0bb34c4 diff --git a/libs/json b/libs/json index ee01580cfde8..64db9b700d50 160000 --- a/libs/json +++ b/libs/json @@ -1 +1 @@ -Subproject commit ee01580cfde818e31d8ea41c2e4056bcff9e3018 +Subproject commit 64db9b700d5030f39c4f0cc466c14745c48b990c diff --git a/libs/lambda b/libs/lambda index ac2651424352..0068b4d90d78 160000 --- a/libs/lambda +++ b/libs/lambda @@ -1 +1 @@ -Subproject commit ac26514243521513d33be23aaa92a85b858ddf51 +Subproject commit 0068b4d90d7843ecec3e43da0ed4229b7acc27c6 diff --git a/libs/lambda2 b/libs/lambda2 index 29353437235f..f60f1d7f9f1b 160000 --- a/libs/lambda2 +++ b/libs/lambda2 @@ -1 +1 @@ -Subproject commit 29353437235fa3ff7542d3af095cdbd35e9bab98 +Subproject commit f60f1d7f9f1bba9196844e1cf5ee8c86ee7b541e diff --git a/libs/leaf b/libs/leaf index 801e5e813ff9..710797a4a724 160000 --- a/libs/leaf +++ b/libs/leaf @@ -1 +1 @@ -Subproject commit 801e5e813ff9923d8d610b1b00597226369328d1 +Subproject commit 710797a4a724ff74b0807031c612b518edf977e8 diff --git a/libs/lexical_cast b/libs/lexical_cast index 32e9b6d2a0ca..184f7e43f078 160000 --- a/libs/lexical_cast +++ b/libs/lexical_cast @@ -1 +1 @@ -Subproject commit 32e9b6d2a0ca1beac1c6ae0fde506a9a66b646e0 +Subproject commit 184f7e43f078767c5c0439891a47b1e35c4fa60f diff --git a/libs/local_function b/libs/local_function index 099e96bef0e5..258aeaa6c1a9 160000 --- a/libs/local_function +++ b/libs/local_function @@ -1 +1 @@ -Subproject commit 099e96bef0e5f2d513940c5987958121ca6f6e02 +Subproject commit 258aeaa6c1a9618c02ca4e4af2890e70833035f0 diff --git a/libs/locale b/libs/locale index a4c26e4a4743..448d98ec03c1 160000 --- a/libs/locale +++ b/libs/locale @@ -1 +1 @@ -Subproject commit a4c26e4a4743d267c6cf0fadcc1991330cfbd400 +Subproject commit 448d98ec03c10da6b4b8b4a9c4424818fb2dedc2 diff --git a/libs/lockfree b/libs/lockfree index fdd4d0632dd0..1a5af261286a 160000 --- a/libs/lockfree +++ b/libs/lockfree @@ -1 +1 @@ -Subproject commit fdd4d0632dd0904f6e9c656c45397fe8ef985bc9 +Subproject commit 1a5af261286a102848d090b1b84b51b1d231dc29 diff --git a/libs/log b/libs/log index f6808349bfd9..f0d196ee0360 160000 --- a/libs/log +++ b/libs/log @@ -1 +1 @@ -Subproject commit f6808349bfd91f39ec18cc8ef25d1e1a3104d149 +Subproject commit f0d196ee03609d8cea8448bc4ad5889d52d9e4a0 diff --git a/libs/logic b/libs/logic index 145778490c2d..9b8703a2d662 160000 --- a/libs/logic +++ b/libs/logic @@ -1 +1 @@ -Subproject commit 145778490c2d332c1411df6a5274a4b53ec3e091 +Subproject commit 9b8703a2d6623405323b892f1d126a6b17ca1651 diff --git a/libs/math b/libs/math index c56f334348d5..6f367256fa2a 160000 --- a/libs/math +++ b/libs/math @@ -1 +1 @@ -Subproject commit c56f334348d5476783fba996d604fc5c6ae980c3 +Subproject commit 6f367256fa2ae7f0c3aab5bec493035ceb8679fd diff --git a/libs/metaparse b/libs/metaparse index 0ef448c1a7ce..5a7d50bda78d 160000 --- a/libs/metaparse +++ b/libs/metaparse @@ -1 +1 @@ -Subproject commit 0ef448c1a7ce22b5de514f9cd504c323c28f4379 +Subproject commit 5a7d50bda78dc7a2ef667a3b10ddef05f26c0256 diff --git a/libs/move b/libs/move index f1fbb4513406..932983f9b838 160000 --- a/libs/move +++ b/libs/move @@ -1 +1 @@ -Subproject commit f1fbb45134065deebe95249c616a967d4b66c809 +Subproject commit 932983f9b838c601d28b5ba27e7ce70f1a355ee4 diff --git a/libs/mp11 b/libs/mp11 index 6365e9c6b64b..52fd7817e85e 160000 --- a/libs/mp11 +++ b/libs/mp11 @@ -1 +1 @@ -Subproject commit 6365e9c6b64b8f7971a1264422854c1385187171 +Subproject commit 52fd7817e85e2d208d364f2ff4bde74594308945 diff --git a/libs/mpi b/libs/mpi index 1d6ee972f472..b5733ba6f936 160000 --- a/libs/mpi +++ b/libs/mpi @@ -1 +1 @@ -Subproject commit 1d6ee972f472cb1468af3273f5d24ff7d94e180b +Subproject commit b5733ba6f93671c696be707e13e8b2662c1e45e2 diff --git a/libs/mpl b/libs/mpl index db09fb1dce01..2358570f2d80 160000 --- a/libs/mpl +++ b/libs/mpl @@ -1 +1 @@ -Subproject commit db09fb1dce010e172072a1ba62858b2155285444 +Subproject commit 2358570f2d801dfd5a1b06701696f42b0d2e390a diff --git a/libs/msm b/libs/msm index 03f58ead6d0e..576547e56998 160000 --- a/libs/msm +++ b/libs/msm @@ -1 +1 @@ -Subproject commit 03f58ead6d0ec23d52e5c7b382e2c98df1d943d5 +Subproject commit 576547e569989b434dc9ffe9868747ea516810d1 diff --git a/libs/multi_index b/libs/multi_index index a5c3213de4f5..7c69f1af944f 160000 --- a/libs/multi_index +++ b/libs/multi_index @@ -1 +1 @@ -Subproject commit a5c3213de4f5ed04d588af2cc3515df294b04054 +Subproject commit 7c69f1af944fc6493d50cd53133d14813d24fc11 diff --git a/libs/multiprecision b/libs/multiprecision index 404139728472..529dfac19919 160000 --- a/libs/multiprecision +++ b/libs/multiprecision @@ -1 +1 @@ -Subproject commit 40413972847280fcfc893968db4b3c8680973a77 +Subproject commit 529dfac199191a7eb8a5eb7f47256eff6d0db993 diff --git a/libs/mysql b/libs/mysql index 1743a5b9fafa..c242bb0ffdea 160000 --- a/libs/mysql +++ b/libs/mysql @@ -1 +1 @@ -Subproject commit 1743a5b9fafa2316c52b36fd2f88b74ea16046e8 +Subproject commit c242bb0ffdea2675a32e0b3a6baeeb987bb90777 diff --git a/libs/nowide b/libs/nowide index b96aba4a432f..8efc23a692c0 160000 --- a/libs/nowide +++ b/libs/nowide @@ -1 +1 @@ -Subproject commit b96aba4a432f7502eb8dcacaef45b93494afc873 +Subproject commit 8efc23a692c01b25f3ab63b417fde9066eb0619b diff --git a/libs/numeric/conversion b/libs/numeric/conversion index 50a1eae942ef..d1b479f7a4aa 160000 --- a/libs/numeric/conversion +++ b/libs/numeric/conversion @@ -1 +1 @@ -Subproject commit 50a1eae942effb0a9b90724323ef8f2a67e7984a +Subproject commit d1b479f7a4aa54d8ffb93d8dc4ee0c24670210d8 diff --git a/libs/numeric/interval b/libs/numeric/interval index 2eda7413ac16..565d0d754f85 160000 --- a/libs/numeric/interval +++ b/libs/numeric/interval @@ -1 +1 @@ -Subproject commit 2eda7413ac16dd4158005446438daf8a7e435dd9 +Subproject commit 565d0d754f851eb9447745b359ca5be6a033918c diff --git a/libs/numeric/odeint b/libs/numeric/odeint index db8f91a51da6..9e75be5d9e43 160000 --- a/libs/numeric/odeint +++ b/libs/numeric/odeint @@ -1 +1 @@ -Subproject commit db8f91a51da630957d6bfa1ff87be760b0be97a6 +Subproject commit 9e75be5d9e435739b086aee928736fc241e77a4a diff --git a/libs/numeric/ublas b/libs/numeric/ublas index f0e55caf310d..15d871b410ff 160000 --- a/libs/numeric/ublas +++ b/libs/numeric/ublas @@ -1 +1 @@ -Subproject commit f0e55caf310d5e01c7e9f2190b2422e113ddeedb +Subproject commit 15d871b410ff92592c6f3e0a53550035e7817046 diff --git a/libs/optional b/libs/optional index c809700d6a5f..881bf8da26fe 160000 --- a/libs/optional +++ b/libs/optional @@ -1 +1 @@ -Subproject commit c809700d6a5fdcbb39e1bf8e9df3433a1615ad02 +Subproject commit 881bf8da26fedad0401d9b30556a2a67631896fc diff --git a/libs/outcome b/libs/outcome index a9e75dd59100..26afdb581bc3 160000 --- a/libs/outcome +++ b/libs/outcome @@ -1 +1 @@ -Subproject commit a9e75dd59100f382195fd395631a2b7407f6f1e7 +Subproject commit 26afdb581bc3563ffa20d71199b1ac4c42e39d76 diff --git a/libs/parameter b/libs/parameter index e1f75be395c5..9984eff746f0 160000 --- a/libs/parameter +++ b/libs/parameter @@ -1 +1 @@ -Subproject commit e1f75be395c5ed2557b223a3ed102d2dd4160fcf +Subproject commit 9984eff746f0ceb7b553ff89699d0405a3bfa896 diff --git a/libs/pfr b/libs/pfr index b0bf18798c70..adfce351d178 160000 --- a/libs/pfr +++ b/libs/pfr @@ -1 +1 @@ -Subproject commit b0bf18798c7037ca8a91a1cd2ad2e5798d8f6d46 +Subproject commit adfce351d1785772ac8077fec51cba288dc34adc diff --git a/libs/phoenix b/libs/phoenix index faadf7577e9a..8913607a3788 160000 --- a/libs/phoenix +++ b/libs/phoenix @@ -1 +1 @@ -Subproject commit faadf7577e9adeb30b3f1c31533225d95350a7bb +Subproject commit 8913607a3788cb82d48ed461ea59c919b7bad3df diff --git a/libs/poly_collection b/libs/poly_collection index 0b8bfc4cff01..3175ae3c9120 160000 --- a/libs/poly_collection +++ b/libs/poly_collection @@ -1 +1 @@ -Subproject commit 0b8bfc4cff012d0f23049fc5a0009ac4abadceb4 +Subproject commit 3175ae3c91203556f86561f574830aa38d5bc80c diff --git a/libs/pool b/libs/pool index 600bcb027379..740c8076f9d0 160000 --- a/libs/pool +++ b/libs/pool @@ -1 +1 @@ -Subproject commit 600bcb027379b0670ccecf14f380f77e1264037f +Subproject commit 740c8076f9d02f0216e8f3dbb15d2fd80f67d7f4 diff --git a/libs/predef b/libs/predef index 392e4e767469..b4190512790e 160000 --- a/libs/predef +++ b/libs/predef @@ -1 +1 @@ -Subproject commit 392e4e767469e3469c9390f0d9cca16724dc3fc8 +Subproject commit b4190512790e3d4e3373e7dbb6305d8c757e32df diff --git a/libs/preprocessor b/libs/preprocessor index 667e87b3392d..cd1b1bd03900 160000 --- a/libs/preprocessor +++ b/libs/preprocessor @@ -1 +1 @@ -Subproject commit 667e87b3392db338a919cbe0213979713aca52e3 +Subproject commit cd1b1bd03900b68505822cfa25cb16851bd6caf1 diff --git a/libs/process b/libs/process index 1fdd405a3f54..2a41d0a0dcef 160000 --- a/libs/process +++ b/libs/process @@ -1 +1 @@ -Subproject commit 1fdd405a3f54772eac9c0093b367760f0033d41e +Subproject commit 2a41d0a0dcef77ff362c1e3a7cc88b47191ff9d2 diff --git a/libs/program_options b/libs/program_options index 7bcbb4ea23c9..902aaedaaa15 160000 --- a/libs/program_options +++ b/libs/program_options @@ -1 +1 @@ -Subproject commit 7bcbb4ea23c958800694436b411669f80c543e18 +Subproject commit 902aaedaaa157a92e649c3b1324c92f5a264a805 diff --git a/libs/property_map b/libs/property_map index e3a3c3655f41..830cb6bce0b5 160000 --- a/libs/property_map +++ b/libs/property_map @@ -1 +1 @@ -Subproject commit e3a3c3655f4118fd15a02d8315f86a48db7390fd +Subproject commit 830cb6bce0b54fc1b2d7806901c1b8c8716964b7 diff --git a/libs/property_map_parallel b/libs/property_map_parallel index a2f90e9660e4..d63b8a0153f6 160000 --- a/libs/property_map_parallel +++ b/libs/property_map_parallel @@ -1 +1 @@ -Subproject commit a2f90e9660e4e7e012c0b54a1338d8e69fb71906 +Subproject commit d63b8a0153f622f30a480bf24a48983cc8a6f0fc diff --git a/libs/property_tree b/libs/property_tree index d30ff9404bd6..2669458cebee 160000 --- a/libs/property_tree +++ b/libs/property_tree @@ -1 +1 @@ -Subproject commit d30ff9404bd6af5cc8922a177865e566f4846b19 +Subproject commit 2669458cebee100bc1f9f4a9d2f0cd95d07740bc diff --git a/libs/ptr_container b/libs/ptr_container index b90a92d46a6c..ea15c5768092 160000 --- a/libs/ptr_container +++ b/libs/ptr_container @@ -1 +1 @@ -Subproject commit b90a92d46a6c654a841a48f664d3ed64c4a2b8b0 +Subproject commit ea15c57680927e915e93b14af2eef244baef6bce diff --git a/libs/python b/libs/python index 47d5bc76f69e..97402f792564 160000 --- a/libs/python +++ b/libs/python @@ -1 +1 @@ -Subproject commit 47d5bc76f69e20625214381c930a2fad5765e2b3 +Subproject commit 97402f7925648ef433d0f1f979b9b422936dac31 diff --git a/libs/qvm b/libs/qvm index e659dc47a636..21cf9d7f9079 160000 --- a/libs/qvm +++ b/libs/qvm @@ -1 +1 @@ -Subproject commit e659dc47a6369504b7d607f3749de1e808887e61 +Subproject commit 21cf9d7f9079be9f59f1dbb617466787d38f3209 diff --git a/libs/random b/libs/random index a2740d4b3017..90224ffbd0e8 160000 --- a/libs/random +++ b/libs/random @@ -1 +1 @@ -Subproject commit a2740d4b30178cb187fabca163e5be7803a577b9 +Subproject commit 90224ffbd0e8419fa5298c3669288d1d084d344a diff --git a/libs/range b/libs/range index 88c6199aedf8..24b7c98ca127 160000 --- a/libs/range +++ b/libs/range @@ -1 +1 @@ -Subproject commit 88c6199aedf8bbb5a6a8966e534f9de99943cde2 +Subproject commit 24b7c98ca12708549513adc4770a2cf5586168f9 diff --git a/libs/ratio b/libs/ratio index 0d29daf1f007..6eceadad2eb0 160000 --- a/libs/ratio +++ b/libs/ratio @@ -1 +1 @@ -Subproject commit 0d29daf1f0072af9c1a941945f1d1de3dc599457 +Subproject commit 6eceadad2eb04f00b8cae5e400f7bee34c2d501f diff --git a/libs/rational b/libs/rational index 564623136417..3c6dfc84c90d 160000 --- a/libs/rational +++ b/libs/rational @@ -1 +1 @@ -Subproject commit 564623136417068916495e2b24737054d607347c +Subproject commit 3c6dfc84c90d4dbcfa81d7dc685bcab702f3473d diff --git a/libs/regex b/libs/regex index 4cbcd3078e6a..f439e22ae41f 160000 --- a/libs/regex +++ b/libs/regex @@ -1 +1 @@ -Subproject commit 4cbcd3078e6ae10d05124379623a1bf03fcb9350 +Subproject commit f439e22ae41fa647bd7de16c2d92deb232593985 diff --git a/libs/serialization b/libs/serialization index 0ca603daf998..a20c4d97c37e 160000 --- a/libs/serialization +++ b/libs/serialization @@ -1 +1 @@ -Subproject commit 0ca603daf99888bf059c01ae1bab1b27dbc35ebe +Subproject commit a20c4d97c37e5f437c8ba78f296830edb79cff9e diff --git a/libs/signals2 b/libs/signals2 index ed50b7720e91..3e7413b9d608 160000 --- a/libs/signals2 +++ b/libs/signals2 @@ -1 +1 @@ -Subproject commit ed50b7720e91215975dd74bca2bf9741f9a56798 +Subproject commit 3e7413b9d6084a160db9a2a90bb74d55415c5226 diff --git a/libs/smart_ptr b/libs/smart_ptr index bcb2566e744a..6e945160d788 160000 --- a/libs/smart_ptr +++ b/libs/smart_ptr @@ -1 +1 @@ -Subproject commit bcb2566e744a0467a980c3648d9e92b7c8ccb2bf +Subproject commit 6e945160d788b8efdfc49ba4af1f8797cacd7c97 diff --git a/libs/sort b/libs/sort index f2a2396466b1..48c424bee18e 160000 --- a/libs/sort +++ b/libs/sort @@ -1 +1 @@ -Subproject commit f2a2396466b15c9d47601b75c15833f8cca2d17e +Subproject commit 48c424bee18ee2d886f83571cc592f0319b501e3 diff --git a/libs/spirit b/libs/spirit index 2f65e6e7440e..82184fecd6e6 160000 --- a/libs/spirit +++ b/libs/spirit @@ -1 +1 @@ -Subproject commit 2f65e6e7440e97621878e1b52e0d264dfb9b2321 +Subproject commit 82184fecd6e6979e44a539bb5ff0918724948c40 diff --git a/libs/stacktrace b/libs/stacktrace index 95065ca63883..902537345a72 160000 --- a/libs/stacktrace +++ b/libs/stacktrace @@ -1 +1 @@ -Subproject commit 95065ca63883c0b1d6754bdb7bb106058c7532cb +Subproject commit 902537345a72cab9063e5eaa1d7f2e2df5cf1864 diff --git a/libs/statechart b/libs/statechart index 586445b824c5..ae93e58e44f7 160000 --- a/libs/statechart +++ b/libs/statechart @@ -1 +1 @@ -Subproject commit 586445b824c5cf0e7e6ce4ff2df620fda5d0f0d7 +Subproject commit ae93e58e44f722626fe462a854b92d9b4f11449a diff --git a/libs/static_assert b/libs/static_assert index ba72d3340f3d..858097c08ebb 160000 --- a/libs/static_assert +++ b/libs/static_assert @@ -1 +1 @@ -Subproject commit ba72d3340f3dc6e773868107f35902292f84b07e +Subproject commit 858097c08ebb53faaf1fba3201c0a76a96e49584 diff --git a/libs/static_string b/libs/static_string index ac84c4f40ec3..c91593452944 160000 --- a/libs/static_string +++ b/libs/static_string @@ -1 +1 @@ -Subproject commit ac84c4f40ec38f7a7237255738e3e5259aa4a1a8 +Subproject commit c91593452944680bb02752890f750e1884da5b02 diff --git a/libs/stl_interfaces b/libs/stl_interfaces index 1dc29234347d..48375e95648b 160000 --- a/libs/stl_interfaces +++ b/libs/stl_interfaces @@ -1 +1 @@ -Subproject commit 1dc29234347df5aeb3f940d0bf945f78e9c70a71 +Subproject commit 48375e95648bed776a2f6d34148185daf2cdce96 diff --git a/libs/system b/libs/system index 707b24bfa14b..65983129dcca 160000 --- a/libs/system +++ b/libs/system @@ -1 +1 @@ -Subproject commit 707b24bfa14b25b15e0d23c567febfa20e26d83b +Subproject commit 65983129dcca99bf26af0e1ed1389b0b9bb735a8 diff --git a/libs/test b/libs/test index b69fbb3854f4..0cba5d6cd973 160000 --- a/libs/test +++ b/libs/test @@ -1 +1 @@ -Subproject commit b69fbb3854f4b76ecb5b8060ed71406478183a03 +Subproject commit 0cba5d6cd973e544c6121072d426522d5be47a13 diff --git a/libs/thread b/libs/thread index 52b62ee7b029..a1f89c951879 160000 --- a/libs/thread +++ b/libs/thread @@ -1 +1 @@ -Subproject commit 52b62ee7b029028126c4eaf36e377833b0666510 +Subproject commit a1f89c951879b6677772606d0549e7368c9c99bc diff --git a/libs/throw_exception b/libs/throw_exception index c5f734275ba0..0924b53b40d1 160000 --- a/libs/throw_exception +++ b/libs/throw_exception @@ -1 +1 @@ -Subproject commit c5f734275ba0cb59da460294f759aed73d03004e +Subproject commit 0924b53b40d1da33301f94fb97518f5a7df31e9b diff --git a/libs/timer b/libs/timer index cd7d42696bb6..b7f65f09a097 160000 --- a/libs/timer +++ b/libs/timer @@ -1 +1 @@ -Subproject commit cd7d42696bb6c7477b4555128c586101ee9eb4f0 +Subproject commit b7f65f09a0975f26cb294eebd8b17e91a5beff3f diff --git a/libs/tokenizer b/libs/tokenizer index 90106f155bd7..a1207c1a424e 160000 --- a/libs/tokenizer +++ b/libs/tokenizer @@ -1 +1 @@ -Subproject commit 90106f155bd72b62aaca0d9ad826f4132030dba0 +Subproject commit a1207c1a424ee565344fe5ef00605cb93f5210c2 diff --git a/libs/tuple b/libs/tuple index 500e4fa0a284..d04e4a692fda 160000 --- a/libs/tuple +++ b/libs/tuple @@ -1 +1 @@ -Subproject commit 500e4fa0a2845b96c0dd919e7485e0f216438a01 +Subproject commit d04e4a692fda32f939edede89d67e4b2234f0da9 diff --git a/libs/type_erasure b/libs/type_erasure index fc39ca9936bd..5281f14d3cb5 160000 --- a/libs/type_erasure +++ b/libs/type_erasure @@ -1 +1 @@ -Subproject commit fc39ca9936bd7ac37afa8fadf3be3b62ee378f39 +Subproject commit 5281f14d3cb59f978c8cb6cbb90ce92dde4e3e13 diff --git a/libs/type_index b/libs/type_index index 9507b06b68b3..96d4a76d6505 160000 --- a/libs/type_index +++ b/libs/type_index @@ -1 +1 @@ -Subproject commit 9507b06b68b34bb8b127c820ec278f9182094f15 +Subproject commit 96d4a76d650502fc4c0203d09ff12ba3864a5ceb diff --git a/libs/type_traits b/libs/type_traits index 89f5011b4a79..e6275ccf01c9 160000 --- a/libs/type_traits +++ b/libs/type_traits @@ -1 +1 @@ -Subproject commit 89f5011b4a79d91e42735670e39f72cb25c86c72 +Subproject commit e6275ccf01c9cf8775ef0cb6188bd58f3b167a0f diff --git a/libs/typeof b/libs/typeof index 27a4d8b09e69..26e22b8b3706 160000 --- a/libs/typeof +++ b/libs/typeof @@ -1 +1 @@ -Subproject commit 27a4d8b09e693d88897eed7d9813231f3063100b +Subproject commit 26e22b8b370617a6181f3ae4bd1f584b3b4767e1 diff --git a/libs/unordered b/libs/unordered index 5724adbbe9fd..d05824312f4b 160000 --- a/libs/unordered +++ b/libs/unordered @@ -1 +1 @@ -Subproject commit 5724adbbe9fd4b36345b8ce6efedb77d0fff5f6e +Subproject commit d05824312f4b4748f8975a4bdb9e51bfc10327b2 diff --git a/libs/url b/libs/url index e549f40c8ba1..1e010e5ba102 160000 --- a/libs/url +++ b/libs/url @@ -1 +1 @@ -Subproject commit e549f40c8ba14aac07634caeb86ad45b8e01e610 +Subproject commit 1e010e5ba102641fd5c6b997e1dae950b13faaf1 diff --git a/libs/utility b/libs/utility index 656b5397c527..8679ac0f1f76 160000 --- a/libs/utility +++ b/libs/utility @@ -1 +1 @@ -Subproject commit 656b5397c527e321f1c7d2be4518833dc021da72 +Subproject commit 8679ac0f1f769fa8d705a1d2329afb5fb6a1eaf2 diff --git a/libs/uuid b/libs/uuid index 9df4da92a085..9c5f195bcdb5 160000 --- a/libs/uuid +++ b/libs/uuid @@ -1 +1 @@ -Subproject commit 9df4da92a0852a66fc3334d664d9cc575e1c8eed +Subproject commit 9c5f195bcdb5d85a857831e22bd182589c3374d0 diff --git a/libs/variant b/libs/variant index e4447e892f4f..fdf2c0f6467d 160000 --- a/libs/variant +++ b/libs/variant @@ -1 +1 @@ -Subproject commit e4447e892f4f39add5cc0ed9698a9165729ca319 +Subproject commit fdf2c0f6467d0ce3d6eb6f0e4dab23351d3e2c35 diff --git a/libs/variant2 b/libs/variant2 index 95a8c5ffec40..b137164c0d66 160000 --- a/libs/variant2 +++ b/libs/variant2 @@ -1 +1 @@ -Subproject commit 95a8c5ffec407533893fa39900bc7799c20c755e +Subproject commit b137164c0d66ab600d05f48e115b1cb2d7d043eb diff --git a/libs/wave b/libs/wave index 0e0c35ed66fe..d7aa5a369d8f 160000 --- a/libs/wave +++ b/libs/wave @@ -1 +1 @@ -Subproject commit 0e0c35ed66fee538d547b0f6f809935aa9e8c956 +Subproject commit d7aa5a369d8f2faf48c8ea16ba041dfabbf91363 diff --git a/libs/winapi b/libs/winapi index 02b4161832e7..094612ee33a8 160000 --- a/libs/winapi +++ b/libs/winapi @@ -1 +1 @@ -Subproject commit 02b4161832e7ca5f78e996967a793120e36b22dc +Subproject commit 094612ee33a8dce960cd075537266fdb4788d059 diff --git a/libs/xpressive b/libs/xpressive index 4679fbd23f96..bd1db9341abd 160000 --- a/libs/xpressive +++ b/libs/xpressive @@ -1 +1 @@ -Subproject commit 4679fbd23f962bfa78d44acf5fa48f6f790642c0 +Subproject commit bd1db9341abd303dacc2979422d8809a9a1e0558 diff --git a/libs/yap b/libs/yap index ae49bf274458..2d44666933c2 160000 --- a/libs/yap +++ b/libs/yap @@ -1 +1 @@ -Subproject commit ae49bf2744586e6bd6c0cedff4500a58a4386860 +Subproject commit 2d44666933c2993c992a3fc348776ba62cafad6b diff --git a/more b/more index 82f202384ec2..746ff14869b1 160000 --- a/more +++ b/more @@ -1 +1 @@ -Subproject commit 82f202384ec2eb2cfea135b806176634de1fc35a +Subproject commit 746ff14869b195dff9260d426d47ebc898ab19c4 diff --git a/release/MakeBoostDistro.py b/release/MakeBoostDistro.py new file mode 100755 index 000000000000..a5d41be6fe05 --- /dev/null +++ b/release/MakeBoostDistro.py @@ -0,0 +1,344 @@ +#!/usr/bin/python +# + +from __future__ import print_function + +import os +import sys +import shutil +import stat +import six +import datetime +import fnmatch +import re + +ignored_files_pattern = shutil.ignore_patterns( + '[.]*', + '[.]gitattributes', + '[.]gitignore', + '[.]gitmodules', + '[.]travis[.]yml', + 'appveyor[.]yml', + 'circle[.]yml') + + +def should_ignore_file(src, name): + return len(ignored_files_pattern(src, [name])) > 0 + + +source_file_patterns = [ + '*.jam', 'Jamfile.v2', 'Jamfile', 'Jamfile.jam', 'jamfile.jam', 'jamfile.v2', 'jamfile', 'build.jam', 'Jamroot', + "*.cpp", "*.hpp", "*.ipp", "*.cxx", "*.hxx", "*.c", "*.h", "*.asm", "*.S", "CMakeLists.txt", "*.cmake", "Makefile", + "*.py", "*.sh", "*.bash", "*.zsh", "*.ksh", "*.csh", "*.bat", "*.pl", + "INSTALL", "LICENSE*", "COPYING*", "COPYRIGHT*", "LICENCE*", "UNLICENSE*"] + + +def is_image_file(file_path): + return any(file_path.endswith(ext) for ext in ['.png', '.jpg', '.jpeg', '.gif', '.svg']) + + +def is_html_content_file(file_path): + return any(file_path.endswith(ext) for ext in + ['.html', '.htm', '.css', '.js', '.txt', 'README.md', '.pdf', 'readme', '.md']) and \ + os.path.split(file_path)[1] != 'CMakeLists.txt' + + +def is_source_file(f): + return any(fnmatch.fnmatch(os.path.split(f)[1], pattern) for pattern in source_file_patterns) + + +DocFiles = ["INSTALL", "LICENSE*", "COPYING*", "COPYRIGHT*", "LICENCE*", "UNLICENSE*"] + + +def is_doc_file(f): + return is_html_content_file(f) or is_image_file(f) or any( + fnmatch.fnmatch(os.path.split(f)[1], pattern) for pattern in DocFiles) + + +# http://stackoverflow.com/questions/1868714/how-do-i-copy-an-entire-directory-of-files-into-an-existing-directory-using-pyth +def merge_dir_tree(src, dst, symlinks=False): + if not os.path.exists(dst): + os.makedirs(dst) + shutil.copystat(src, dst) + lst = os.listdir(src) + excl = ignored_files_pattern(src, lst) + lst = [x for x in lst if x not in excl] + for item in lst: + s = os.path.join(src, item) + d = os.path.join(dst, item) + if symlinks and os.path.islink(s): + if os.path.lexists(d): + os.remove(d) + os.symlink(os.readlink(s), d) + try: + st = os.lstat(s) + mode = stat.S_IMODE(st.st_mode) + os.lchmod(d, mode) + except: + pass # lchmod not available + elif os.path.isdir(s): + merge_dir_tree(s, d, symlinks) + else: + if os.path.exists(d): + print("## Overwriting file %s with %s" % (d, s)) + shutil.copy2(s, d) + + +def merge_dir_tree_if_exists(s, d, dd): + if os.path.exists(os.path.join(s, dd)): + merge_dir_tree(os.path.join(s, dd), os.path.join(d, dd), symlinks=False) + + +def copy_distro_file(s, d, f, include_source, include_docs): + if os.path.isfile(os.path.join(s, f)) and not should_ignore_file(s, f) and ( + (include_source and is_source_file(f)) or (include_docs and is_doc_file(f))): + shutil.copy2(os.path.join(s, f), os.path.join(d, f)) + + +def copy_abs_source_file(s, d): + if os.path.isfile(s) and is_source_file(s): + shutil.copy2(s, d) + + +def copy_abs_doc_file(s, d): + if os.path.isfile(s) and is_doc_file(s): + shutil.copy2(s, d) + + +def copy_distro_dir(s, d, dd, include_source, include_docs): + if os.path.isdir(os.path.join(s, dd)) and not should_ignore_file(s, dd): + if include_source and include_docs: + if os.path.isdir(os.path.join(s, dd)) and not should_ignore_file(s, dd): + shutil.copytree(os.path.join(s, dd), os.path.join(d, dd), symlinks=False, ignore=ignored_files_pattern) + elif not include_docs: + shutil.copytree(os.path.join(s, dd), os.path.join(d, dd), symlinks=False, ignore=ignored_files_pattern, + copy_function=copy_abs_source_file) + elif not include_source: + shutil.copytree(os.path.join(s, dd), os.path.join(d, dd), symlinks=False, ignore=ignored_files_pattern, + copy_function=copy_abs_doc_file) + + +def copy_distro_include_dir(src, dst, include_source, include_docs): + for item in os.listdir(src): + if should_ignore_file(src, item): + continue + if item == 'pending': + continue + if item == 'detail': + continue + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isdir(s): + merge_dir_tree(s, d, symlinks=False) + else: + if not include_docs and not is_doc_file(item): + continue + if not include_source and not is_source_file(item): + continue + if os.path.exists(d): + print("## Overwriting file %s with %s" % (d, s)) + copy_distro_file(src, dst, item, include_source, include_docs) + + +def copy_distro_subproject(src, dst, headers, p, include_source, include_docs): + # First, everything except the "include" directory + source_project_dir = os.path.join(src, p) + dest_project_dir = os.path.join(dst, p) + # print "CopySubProject %p" % p + os.makedirs(dest_project_dir) + for item in os.listdir(source_project_dir): + if item == 'antora': + continue + if os.path.isfile(os.path.join(source_project_dir, item)): + copy_distro_file(source_project_dir, dest_project_dir, item, include_source, include_docs) + elif item != "include": + copy_distro_dir(source_project_dir, dest_project_dir, item, include_source, include_docs) + + # Now the includes + source_project_dir = os.path.join(src, "%s/include/boost" % p) + if os.path.exists(source_project_dir): + copy_distro_include_dir(source_project_dir, headers, include_source, include_docs) + merge_dir_tree_if_exists(source_project_dir, headers, 'detail') + merge_dir_tree_if_exists(source_project_dir, headers, 'pending') + + +def copy_distro_nested_project(src, dst, headers, p, include_source, include_docs): + # First, everything except the "include" directory + source_nested_dir = os.path.join(src, p[1]) + dest_nested_dir = os.path.join(dst, p[1]) + os.makedirs(dest_nested_dir) + for item in os.listdir(source_nested_dir): + if os.path.isfile(os.path.join(source_nested_dir, item)): + copy_distro_file(source_nested_dir, dest_nested_dir, item, include_source, include_docs) + elif item != "include": + copy_distro_dir(source_nested_dir, dest_nested_dir, item, include_source, include_docs) + source_nested_dir = os.path.join(src, "%s/include/boost" % (p[1])) + copy_distro_include_dir(source_nested_dir, headers, include_source, include_docs) + + +def remove_empty_subdirs(path): + subdirs = [os.path.join(path, d) for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))] + for subdir in subdirs: + remove_empty_subdirs(subdir) + try: + os.rmdir(subdir) + except OSError: + pass + + +def main(src_root, dest_root, include_source=True, include_docs=True, cmake_distro=False): + if not os.path.isabs(src_root): + src_root = os.path.abspath(src_root) + print("Source = %s" % src_root) + + if not os.path.isabs(dest_root): + dest_root = os.path.abspath(dest_root) + print("Dest = %s" % dest_root) + + if not os.path.exists(src_root): + print("## Error: %s does not exist" % src_root) + exit(1) + + if os.path.exists(dest_root): + print("The destination directory already exists. Renaming it, so that a new one can be generated.\n") + timestamp1 = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + os.rename(dest_root, dest_root + "_bck_" + timestamp1) + + if not os.path.exists(dest_root): + print("Creating destination directory %s" % dest_root) + os.makedirs(dest_root) + + # Step 1: Copy all the files at the root level to the dest folder + for f in os.listdir(src_root): + if f != 'CMakeLists.txt' or cmake_distro: + copy_distro_file(src_root, dest_root, f, include_source, include_docs) + + # Step 2: Copy all the "special" root folders to the dest folder + special_root_folders = ["tools"] + if include_docs: + special_root_folders += ["doc", "more", "status"] + if cmake_distro: + special_root_folders += ["libs"] + for d in special_root_folders: + copy_distro_dir(src_root, dest_root, d, include_source, include_docs) + + # Step 3: copy all the files from $SOURCE/libs/* to $DEST/libs/* + libs_dir_name = "libs" + dest_libs_dir = os.path.join(dest_root, libs_dir_name) + if not os.path.exists(dest_libs_dir): + os.makedirs(dest_libs_dir) + source_libs_dir = os.path.join(src_root, libs_dir_name) + for f in os.listdir(source_libs_dir): + copy_distro_file(source_libs_dir, dest_libs_dir, f, include_source, include_docs) + + # Step 4: For each subproject, copy everything except "include" into $DEST/libs + # 4a) Aggregate subprojects to copy + boost_subprojects = set() + for f in os.listdir(source_libs_dir): + if os.path.isdir(os.path.join(source_libs_dir, f)): + if os.path.isfile(os.path.join(source_libs_dir, f, "meta", "libraries.json")): + boost_subprojects.add(f) + elif os.path.isdir(os.path.join(source_libs_dir, f, "include")): + boost_subprojects.add(f) + elif f == 'headers': + boost_subprojects.add(f) + elif os.path.isfile(os.path.join(source_libs_dir, f, "sublibs")): + for s in os.listdir(os.path.join(source_libs_dir, f)): + if os.path.isdir(os.path.join(source_libs_dir, f, s)): + if os.path.isfile(os.path.join(source_libs_dir, f, s, "meta", "libraries.json")): + boost_subprojects.add((f, s)) + elif os.path.isdir(os.path.join(source_libs_dir, f, s, "include")): + boost_subprojects.add((f, s)) + + if not cmake_distro: + # Step 4b) Copy each subproject + # copy the contents of the "includes" folder into $DEST/boost + # copy the contents of the other folders into $DEST/libs + headers_dir_name = "boost" + dest_headers = os.path.join(dest_root, headers_dir_name) + os.makedirs(dest_headers) + for p in boost_subprojects: + if isinstance(p, six.string_types): + copy_distro_subproject(source_libs_dir, dest_libs_dir, dest_headers, p, include_source, include_docs) + else: + nested_source_dir = os.path.join(src_root, "libs", p[0]) + nested_dest_dir = os.path.join(dest_root, "libs", p[0]) + nested_dest_headers_dir = os.path.join(dest_root, "boost") + if not os.path.exists(nested_dest_dir): + os.makedirs(nested_dest_dir) + if not os.path.exists(nested_dest_headers_dir): + os.makedirs(nested_dest_headers_dir) + for f in os.listdir(nested_source_dir): + copy_distro_file(nested_source_dir, nested_dest_dir, f, include_source, include_docs) + copy_distro_nested_project(nested_source_dir, nested_dest_dir, nested_dest_headers_dir, p, + include_source, + include_docs) + else: + # Step 4b) Clean tests dir + def clean_test_dir(test_dir): + if not os.path.exists(test_dir) or not os.path.exists(test_dir): + return + for base_path in os.listdir(test_dir): + abs_path = os.path.join(test_dir, base_path) + if os.path.isdir(abs_path): + clean_test_dir(abs_path) + elif base_path == 'CMakeLists.txt' or base_path.endswith('.cmake'): + with open(abs_path, "w") as fw: + fw.write('# Placeholder \n') + else: + os.remove(abs_path) + + for p in boost_subprojects: + if isinstance(p, six.string_types): + clean_test_dir(os.path.join(dest_root, 'libs', p, 'test')) + else: + clean_test_dir(os.path.join(dest_root, 'libs', p[0], 'docs')) + clean_test_dir(os.path.join(dest_root, 'libs', p[0], p[1], 'docs')) + + # Step 5: Copy any source files referred linked in the docs + if not include_source and include_docs: + href_pattern = re.compile(r'href=["\'](.*?)["\']') + # Iterate html files + for root, dirs, files in os.walk(dest_root): + for file in files: + filepath = os.path.join(root, file) + if filepath.endswith('.html') or filepath.endswith('.htm'): + # extract href contents + with open(filepath, 'r') as f: + dir = os.path.dirname(filepath) + try: + contents = f.read() + hrefs = href_pattern.findall(contents) + for href in hrefs: + if href.startswith('http:') or href.startswith('https:'): + continue + p = href.rfind('#') + if p != -1: + href = href[:p] + if href == '' or is_doc_file(href): + continue + dest = os.path.normpath(os.path.join(dir, href)) + if not dest.startswith(dest_root): + continue + if os.path.exists(dest): + continue + src = os.path.join(src_root, os.path.relpath(dest, dest_root)) + if not src.startswith(src_root): + continue + if not os.path.exists(src): + continue + destdir = os.path.dirname(dest) + if not os.path.exists(destdir): + os.makedirs(destdir) + shutil.copy2(src, dest) + except UnicodeDecodeError: + pass + + # Step 6: remove any empty subdirs + if not (include_source and include_docs): + remove_empty_subdirs(dest_root) + + +if __name__ == "__main__": + main(sys.argv[1], sys.argv[2], sys.argv[3] if len(sys.argv) > 3 else True, + sys.argv[4] if len(sys.argv) > 4 else True, sys.argv[5] if len(sys.argv) > 5 else False) diff --git a/release/README.adoc b/release/README.adoc new file mode 100644 index 000000000000..498d17db02f7 --- /dev/null +++ b/release/README.adoc @@ -0,0 +1,5 @@ +Temporary directory with release scripts adapted for antora docs. + +These are scripts that are usually located in https://github.com/boostorg/release-tools + +That's where they should go once the antora-enabled release process is implemented. \ No newline at end of file diff --git a/release/ci_boost_common.py b/release/ci_boost_common.py new file mode 100644 index 000000000000..d3abd68d4796 --- /dev/null +++ b/release/ci_boost_common.py @@ -0,0 +1,716 @@ +#!/usr/bin/env python + +# Copyright Rene Rivera 2016 +# Copyright Alan de Freitas 2023 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +from __future__ import print_function + +import sys +import inspect +import optparse +import os.path +import string +import time +import subprocess +import codecs +import shutil +import threading +import distutils.dir_util + +# For urllib +from future.standard_library import install_aliases + +install_aliases() + +from builtins import str + + +class SystemCallError(Exception): + def __init__(self, command, result): + self.command = command + self.result = result + + def __str__(self, *args, **kwargs): + return "'%s' ==> %s" % ("' '".join(self.command), self.result) + + +class utils: + call_stats = [] + + @staticmethod + def call(*command, **kargs): + utils.log("%s> '%s'" % (os.getcwd(), "' '".join(command))) + t = time.time() + result = subprocess.call(command, **kargs) + t = time.time() - t + if result != 0: + print("Failed: '%s' ERROR = %s" % ("' '".join(command), result)) + utils.call_stats.append((t, os.getcwd(), command, result)) + utils.log("%s> '%s' execution time %s seconds" % (os.getcwd(), "' '".join(command), t)) + return result + + @staticmethod + def print_call_stats(): + utils.log("================================================================================") + for j in sorted(utils.call_stats, reverse=True): + utils.log("{:>12.4f}\t{}> {} ==> {}".format(*j)) + utils.log("================================================================================") + + @staticmethod + def check_call(*command, **kargs): + cwd = os.getcwd() + result = utils.call(*command, **kargs) + if result != 0: + commandinfo = [cwd] + commandinfo.extend(command) + raise SystemCallError(commandinfo, result) + + @staticmethod + def makedirs(path): + if not os.path.exists(path): + os.makedirs(path) + + @staticmethod + def log_level(): + frames = inspect.stack() + level = 0 + for i in frames[3:]: + if '__log__' in i[0].f_locals: + level = level + i[0].f_locals['__log__'] + return level + + @staticmethod + def log(message): + sys.stdout.flush() + sys.stderr.flush() + sys.stderr.write('# ' + ' ' * utils.log_level() + message + '\n') + sys.stderr.flush() + + @staticmethod + def rmtree(path): + if os.path.exists(path): + # ~ shutil.rmtree( unicode( path ) ) + if sys.platform == 'win32': + os.system('del /f /s /q "%s" >nul 2>&1' % path) + # Python 3 compatibility hack + try: + unicode('') + except NameError: + unicode = str + shutil.rmtree(unicode(path)) + else: + os.system('rm -f -r "%s"' % path) + + @staticmethod + def retry(f, max_attempts=5, sleep_secs=10): + for attempts in range(max_attempts, -1, -1): + try: + return f() + except Exception as 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) + + @staticmethod + def web_get(source_url, destination_file, proxy=None): + import urllib.request, urllib.parse, urllib.error + + proxies = None + if proxy is not None: + proxies = { + 'https': proxy, + 'http': proxy + } + + src = urllib.request.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() + + @staticmethod + def unpack_archive(archive_path): + utils.log('Unpacking archive ("%s")...' % archive_path) + + archive_name = os.path.basename(archive_path) + extension = archive_name[archive_name.find('.'):] + + if extension in (".tar.gz", ".tar.bz2"): + import tarfile + import stat + + mode = os.path.splitext(extension)[1][1:] + tar = tarfile.open(archive_path, 'r:%s' % mode) + for tarinfo in tar: + tar.extract(tarinfo) + 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(os.curdir, 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(archive_path, 'r', zipfile.ZIP_DEFLATED) + for f in z.infolist(): + destination_file_path = os.path.join(os.curdir, 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 + + @staticmethod + def make_file(filename, *text): + f = codecs.open(filename, 'w', 'utf-8') + f.write('\n'.join(text)) + f.close() + + @staticmethod + def mem_info(): + if sys.platform == "darwin": + utils.call("top", "-l", "1", "-s", "0", "-n", "0") + elif sys.platform.startswith("linux"): + utils.call("free", "-m", "-l") + + +class parallel_call(threading.Thread): + + def __init__(self, *command, **kargs): + super(parallel_call, self).__init__() + self.result = None + self.command = command + self.command_kargs = kargs + self.start() + + def run(self): + self.result = utils.call(*self.command, **self.command_kargs) + + def join(self, **kwargs): + super(parallel_call, self).join(**kwargs) + if self.result != 0: + raise SystemCallError(self.command, self.result) + + +class script_common(object): + """ + Main script to run Boost C++ Libraries continuous integration. + """ + + def __init__(self, ci_klass, **kargs): + self.ci = ci_klass(self) + + opt = optparse.OptionParser( + usage="%prog [options] [commands]") + + # ~ Debug Options: + opt.add_option('--debug-level', + help="debugging level; controls the amount of debugging output printed", + type='int') + opt.add_option('-j', + help="maximum number of parallel jobs to use for building with b2", + type='int', dest='jobs') + opt.add_option('--branch') + opt.add_option('--commit') + opt.add_option('--commit-message') + kargs = self.init(opt, kargs) + kargs = self.ci.init(opt, kargs) + branch = kargs.get('branch', None) + commit = kargs.get('commit', None) + commit_message = kargs.get('commit_message', None) + actions = kargs.get('actions', None) + root_dir = kargs.get('root_dir', None) + + # ~ Defaults + self.debug_level = 0 + + try: + self.jobs = int(os.getenv('JOBS')) + except: + self.jobs = 3 + + self.branch = branch + self.commit = commit + self.commit_message = commit_message + (_opt_, self.actions) = opt.parse_args(None, self) + if not self.actions or self.actions == []: + if actions: + self.actions = actions + else: + self.actions = ['info'] + if not root_dir: + self.root_dir = os.getcwd() + else: + self.root_dir = root_dir + if self.build_dir is None: + self.build_dir = os.path.join(os.path.dirname(self.root_dir), "build") + elif not os.path.isabs(_opt_.build_dir): + self.build_dir = os.path.join(self.root_dir, _opt_.build_dir) + self.home_dir = os.path.expanduser('~') + + # ~ Read in the Boost version from the repo we are in. + self.boost_version = branch + v = self.read_boost_version(os.path.join(self.root_dir, 'Jamroot')) + if v is not None: + self.boost_version = v + if not self.boost_version: + self.boost_version = 'default' + + # API keys. + self.sf_releases_key = os.getenv('SF_RELEASES_KEY') + self.gh_token = os.getenv('GH_TOKEN') + self.artifactory_pass = os.getenv('ARTIFACTORY_PASS') + + try: + self.start() + self.command_info() + self.main() + utils.print_call_stats() + except: + utils.print_call_stats() + raise + + @staticmethod + def read_boost_version(jamroot_path): + if os.path.exists(jamroot_path): + with codecs.open(jamroot_path, 'r', 'utf-8') as f: + for line in f.readlines(): + parts = line.split() + if len(parts) >= 5 and parts[1] == 'BOOST_VERSION': + return parts[3] + return None + + def init(self, opt, kargs): + return kargs + + def start(self): + pass + + def main(self): + for action in self.actions: + action_m = "command_" + action.replace('-', '_') + if hasattr(self, action_m): + utils.log("### %s.." % (action)) + if os.path.exists(self.root_dir): + os.chdir(self.root_dir) + getattr(self, action_m)() + else: + utils.log('### %s not available in %s' % (action, self.__class__.__name__)) + + def b2(self, *args, **kargs): + cmd = ['b2', '--debug-configuration', '-j%s' % self.jobs] + cmd.extend(args) + + if 'toolset' in kargs: + cmd.append('toolset=' + kargs['toolset']) + + if 'parallel' in kargs: + return parallel_call(*cmd) + else: + return utils.check_call(*cmd) + + def __getattr__(self, attr): + """ + Wraps attribute access to fabricate method calls that + forward to the ci instance. This allows the ci to add and + override script commands as needed. + """ + if attr.startswith('command_'): + ci_command = getattr(self.ci, attr) + if ci_command: + def call(*args, **kwargs): + return ci_command(*args, **kwargs) + + return call + return self.__dict__[attr] + + # Common test commands in the order they should be executed.. + + def command_info(self): + if self.ci and hasattr(self.ci, 'command_info'): + self.ci.command_info() + + def command_install(self): + utils.makedirs(self.build_dir) + os.chdir(self.build_dir) + if self.ci and hasattr(self.ci, 'command_install'): + self.ci.command_install() + + def command_before_build(self): + if self.ci and hasattr(self.ci, 'command_before_build'): + self.ci.command_before_build() + + def command_build(self): + if self.ci and hasattr(self.ci, 'command_build'): + self.ci.command_build() + + def command_after_success(self): + if self.ci and hasattr(self.ci, 'command_after_success'): + self.ci.command_after_success() + + +class ci_cli(): + """ + This version of the script provides a way to do manual building. It sets up + additional environment and adds fetching of the git repos that would + normally be done by the CI system. + + The common way to use this variant is to invoke something like: + + mkdir boost-ci + cd boost-ci + python path-to/ci_boost_