public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/hpx] rawhide: Fix build with asio-1.38.1
@ 2026-08-21 13:51 Christoph Junghans
0 siblings, 0 replies; only message in thread
From: Christoph Junghans @ 2026-08-21 13:51 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/hpx
Branch : rawhide
Commit : 32238e23ab7a9331f856ff9328a4e484a3e2d7cc
Author : Christoph Junghans <junghans@votca.org>
Date : 2026-08-21T07:51:50-06:00
Stats : +1831/-1 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/hpx/c/32238e23ab7a9331f856ff9328a4e484a3e2d7cc?branch=rawhide
Log:
Fix build with asio-1.38.1
Fixes: rhbz#2504129
---
diff --git a/7463.diff b/7463.diff
new file mode 100644
index 0000000..a3aa42b
--- /dev/null
+++ b/7463.diff
@@ -0,0 +1,1824 @@
+diff --git a/.github/workflows/windows_clang_debug.yml b/.github/workflows/windows_clang_debug.yml
+index b1ec565b812d..2329b25bb143 100644
+--- a/.github/workflows/windows_clang_debug.yml
++++ b/.github/workflows/windows_clang_debug.yml
+@@ -9,20 +9,23 @@ name: Windows CI (ClangCL, Debug)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/.github/workflows/windows_clang_release.yml b/.github/workflows/windows_clang_release.yml
+index c769c1bd42b7..7f2e8babea04 100644
+--- a/.github/workflows/windows_clang_release.yml
++++ b/.github/workflows/windows_clang_release.yml
+@@ -9,20 +9,23 @@ name: Windows CI (ClangCL, Release)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/.github/workflows/windows_debug_vs2019.yml b/.github/workflows/windows_debug_vs2019.yml
+index 864ccae71b0e..0972ee2f219f 100644
+--- a/.github/workflows/windows_debug_vs2019.yml
++++ b/.github/workflows/windows_debug_vs2019.yml
+@@ -5,29 +5,28 @@
+ # Distributed under the Boost Software License, Version 1.0. (See accompanying
+ # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+-name: Windows CI (Debug, VS2019 toolset)
++name: Windows CI (Debug, VS2022 toolset, Local Runtime)
+
+ on: [pull_request]
+
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+ run: |
+- cmake . -Bbuild -G'Visual Studio 17 2022' -T v142 \
++ cmake . -Bbuild -G'Visual Studio 17 2022' \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_TOOLCHAIN_FILE='C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake' \
+ -DHPX_WITH_FETCH_ASIO=ON \
+diff --git a/.github/workflows/windows_debug_vs2022.yml b/.github/workflows/windows_debug_vs2022.yml
+index cebecd992140..67e1e54f9ddf 100644
+--- a/.github/workflows/windows_debug_vs2022.yml
++++ b/.github/workflows/windows_debug_vs2022.yml
+@@ -9,20 +9,23 @@ name: Windows CI (Debug, VS2022 toolset)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+@@ -31,6 +34,7 @@ jobs:
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_TOOLCHAIN_FILE='C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake' \
+ -DHPX_WITH_FETCH_ASIO=ON \
++ -DHPX_WITH_ASIO_TAG=asio-1-34-2 \
+ -DHPX_WITH_EXAMPLES=ON \
+ -DHPX_WITH_TESTS=ON \
+ -DHPX_WITH_TESTS_EXAMPLES=ON \
+diff --git a/.github/workflows/windows_debug_vs2022_fetch_boost.yml b/.github/workflows/windows_debug_vs2022_fetch_boost.yml
+index 05701b8d2ec3..682f9bfe37fa 100644
+--- a/.github/workflows/windows_debug_vs2022_fetch_boost.yml
++++ b/.github/workflows/windows_debug_vs2022_fetch_boost.yml
+@@ -8,20 +8,23 @@ name: Windows CI (Debug, VS2022 toolset) with Boost Fetch
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/.github/workflows/windows_debug_vs2022_fetch_hwloc.yml b/.github/workflows/windows_debug_vs2022_fetch_hwloc.yml
+index cd5680f1b5da..5983a0146ace 100644
+--- a/.github/workflows/windows_debug_vs2022_fetch_hwloc.yml
++++ b/.github/workflows/windows_debug_vs2022_fetch_hwloc.yml
+@@ -9,20 +9,23 @@ name: Windows CI (Debug, VS2022 toolset) with HWLoc fetch
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/.github/workflows/windows_release_2022.yml b/.github/workflows/windows_release_2022.yml
+index 14e96a29f989..0ff0708119af 100644
+--- a/.github/workflows/windows_release_2022.yml
++++ b/.github/workflows/windows_release_2022.yml
+@@ -8,20 +8,23 @@ name: Windows CI (Release, VS2022 toolset)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/.github/workflows/windows_release_gcc_mingw.yml b/.github/workflows/windows_release_gcc_mingw.yml
+index 138058764ef7..c61c96ae3ab1 100644
+--- a/.github/workflows/windows_release_gcc_mingw.yml
++++ b/.github/workflows/windows_release_gcc_mingw.yml
+@@ -8,15 +8,18 @@ name: Windows CI (Release, gcc/mingw toolset)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ choco install ninja -y
+diff --git a/.github/workflows/windows_release_static.yml b/.github/workflows/windows_release_static.yml
+index 1b0490d1b8d4..710213b2c423 100644
+--- a/.github/workflows/windows_release_static.yml
++++ b/.github/workflows/windows_release_static.yml
+@@ -9,20 +9,23 @@ name: Windows CI (Release, Static)
+
+ on: [pull_request]
+
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
+ jobs:
+ build:
+- runs-on: windows-latest
++ runs-on: windows-2022
+
+ steps:
+- - uses: actions/checkout@v4
+- - uses: jwlawson/actions-setup-cmake@v2.0
+- with:
+- cmake-version: '3.22.x'
++ - uses: actions/checkout@v7
++ - uses: lukka/get-cmake@v4.4.2
++
+ - name: Install dependencies
+ run: |
+ md C:\projects
+ $client = new-object System.Net.WebClient
+- $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2024.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
++ $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2026.7z","C:\projects\vcpkg-export-hpx-dependencies.7z")
+ 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg
+ - name: Configure
+ shell: bash
+diff --git a/cmake/HPX_SetupAsio.cmake b/cmake/HPX_SetupAsio.cmake
+index ea17a574472e..d8d081f3877e 100644
+--- a/cmake/HPX_SetupAsio.cmake
++++ b/cmake/HPX_SetupAsio.cmake
+@@ -14,7 +14,17 @@ if(ASIO_ROOT AND NOT Asio_ROOT)
+ endif()
+
+ if(NOT HPX_WITH_FETCH_ASIO)
+- find_package(Asio 1.12.0 REQUIRED)
++ find_package(Asio 1.12.0)
++ if(NOT Asio_FOUND)
++ hpx_error(
++ "Could not find Asio. Set Asio_ROOT as a CMake or environment variable to "
++ "point to the Asio root install directory. Alternatively, set "
++ "HPX_WITH_FETCH_ASIO=ON to fetch Asio using CMake's FetchContent (this is "
++ "currently the default, but might have failed or been disabled). Note that "
++ "Asio is installed together with HPX, be careful about conflicts with "
++ "separately installed versions of Asio."
++ )
++ endif()
+ elseif(NOT TARGET Asio::asio AND NOT HPX_FIND_PACKAGE)
+ if(FETCHCONTENT_SOURCE_DIR_ASIO)
+ hpx_info(
+@@ -36,8 +46,20 @@ elseif(NOT TARGET Asio::asio AND NOT HPX_FIND_PACKAGE)
+ set(Asio_ROOT ${asio_SOURCE_DIR})
+
+ add_library(asio INTERFACE)
++
++ # convert ASIO tag into CMake version
++ string(REGEX REPLACE "asio-([0-9]+)-([0-9]+)-([0-9]+)" "\\1.\\2.\\3" VERSION
++ "${HPX_WITH_ASIO_TAG}"
++ )
++
++ # starting v1.37.0 ASIO has changed its directory structure
++ set(asio_base_directory ${Asio_ROOT}/asio/include)
++ if(VERSION VERSION_GREATER "1.36.0")
++ set(asio_base_directory ${Asio_ROOT}/include)
++ endif()
++
+ target_include_directories(
+- asio SYSTEM INTERFACE $<BUILD_INTERFACE:${Asio_ROOT}/asio/include>
++ asio SYSTEM INTERFACE $<BUILD_INTERFACE:${asio_base_directory}>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ )
+
+@@ -48,7 +70,7 @@ elseif(NOT TARGET Asio::asio AND NOT HPX_FIND_PACKAGE)
+ )
+
+ install(
+- DIRECTORY ${Asio_ROOT}/asio/include/
++ DIRECTORY ${asio_base_directory}/
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ COMPONENT core
+ FILES_MATCHING
+diff --git a/components/iostreams/src/server/output_stream.cpp b/components/iostreams/src/server/output_stream.cpp
+index dd0a519b27f8..e71e3ab52818 100644
+--- a/components/iostreams/src/server/output_stream.cpp
++++ b/components/iostreams/src/server/output_stream.cpp
+@@ -9,7 +9,9 @@
+ #include <hpx/config.hpp>
+ #include <hpx/functional/bind_front.hpp>
+
++#include <hpx/io_service/io_service_pool.hpp>
+ #include <hpx/runtime_distributed/runtime_fwd.hpp>
++#include <hpx/runtime_local/runtime_local_fwd.hpp>
+ #include <hpx/serialization/serialize.hpp>
+ #include <hpx/serialization/shared_ptr.hpp>
+ #include <hpx/serialization/vector.hpp>
+@@ -19,7 +21,11 @@
+ #include <hpx/components/iostreams/server/buffer.hpp>
+ #include <hpx/components/iostreams/server/output_stream.hpp>
+
+-#include <hpx/io_service/io_service_pool.hpp>
++#include <asio/io_context.hpp>
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
+
+ #include <cstdint>
+ #include <functional>
+@@ -34,7 +40,7 @@ namespace hpx::iostreams::detail {
+ ar << valid;
+ if (valid)
+ {
+- ar& data_;
++ ar & data_;
+ }
+ }
+
+@@ -44,7 +50,7 @@ namespace hpx::iostreams::detail {
+ ar >> valid;
+ if (valid)
+ {
+- ar& data_;
++ ar & data_;
+ }
+ }
+ } // namespace hpx::iostreams::detail
+@@ -60,16 +66,22 @@ namespace hpx::iostreams::server {
+
+ void output_stream::write_async(std::uint32_t locality_id,
+ std::uint64_t count, detail::buffer const& buf_in)
+- { // {{{
++ {
+ // Perform the IO in another OS thread.
+ detail::buffer in(buf_in);
+ // we need to capture the GID of the component to keep it alive long
+ // enough.
+ hpx::id_type this_id = this->get_id();
++#if ASIO_VERSION >= 103400
++ ::asio::post(hpx::get_thread_pool("io_pool")->get_io_service(),
++ hpx::bind_front(&output_stream::call_write_async, this, locality_id,
++ count, HPX_MOVE(in), HPX_MOVE(this_id)));
++#else
+ hpx::get_thread_pool("io_pool")->get_io_service().post(
+ hpx::bind_front(&output_stream::call_write_async, this, locality_id,
+ count, HPX_MOVE(in), HPX_MOVE(this_id)));
+- } // }}}
++#endif
++ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ void output_stream::call_write_sync(std::uint32_t locality_id,
+@@ -86,16 +98,21 @@ namespace hpx::iostreams::server {
+
+ void output_stream::write_sync(std::uint32_t locality_id,
+ std::uint64_t count, detail::buffer const& buf_in)
+- { // {{{
++ {
+ // Perform the IO in another OS thread.
+ detail::buffer in(buf_in);
+- hpx::get_thread_pool("io_pool")->get_io_service().post(
++#if ASIO_VERSION >= 103400
++ ::asio::post(hpx::get_thread_pool("io_pool")->get_io_service(),
+ hpx::bind_front(&output_stream::call_write_sync, this, locality_id,
+ count, std::ref(in),
+- threads::thread_id_ref_type(threads::get_outer_self_id())));
+-
++ threads::thread_id_ref_type(threads::get_self_id())));
++#else
++ hpx::get_thread_pool("io_pool")->get_io_service().post(hpx::bind_front(
++ &output_stream::call_write_sync, this, locality_id, count,
++ std::ref(in), threads::thread_id_ref_type(threads::get_self_id())));
++#endif
+ // Sleep until the worker thread wakes us up.
+ this_thread::suspend(threads::thread_schedule_state::suspended,
+ "output_stream::write_sync");
+- } // }}}
++ }
+ } // namespace hpx::iostreams::server
+diff --git a/examples/async_io/async_io_low_level.cpp b/examples/async_io/async_io_low_level.cpp
+index 75312984bf7f..776e973006c5 100644
+--- a/examples/async_io/async_io_low_level.cpp
++++ b/examples/async_io/async_io_low_level.cpp
+@@ -1,4 +1,4 @@
+-// Copyright (c) 2007-2013 Hartmut Kaiser
++// Copyright (c) 2007-2026 Hartmut Kaiser
+ //
+ // SPDX-License-Identifier: BSL-1.0
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+@@ -14,6 +14,14 @@
+ #include <hpx/io_service/io_service_pool.hpp>
+ #include <hpx/iostream.hpp>
+
++#include <hpx/modules/io_service.hpp>
++
++#include <asio/io_context.hpp>
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
++
+ #include <iostream>
+ #include <memory>
+
+@@ -39,7 +47,12 @@ hpx::future<int> async_io(char const* string_to_write)
+ hpx::get_runtime().get_thread_pool("io_pool");
+
+ // ... and schedule the handler to run on one of its OS-threads.
++#if ASIO_VERSION >= 103400
++ ::asio::post(
++ pool->get_io_service(), hpx::bind(&do_async_io, string_to_write, p));
++#else
+ pool->get_io_service().post(hpx::bind(&do_async_io, string_to_write, p));
++#endif
+
+ return p->get_future();
+ }
+diff --git a/libs/core/asio/include/hpx/asio/asio_util.hpp b/libs/core/asio/include/hpx/asio/asio_util.hpp
+index 286536692102..7daef54e098e 100644
+--- a/libs/core/asio/include/hpx/asio/asio_util.hpp
++++ b/libs/core/asio/include/hpx/asio/asio_util.hpp
+@@ -1,4 +1,4 @@
+-// Copyright (c) 2007-2023 Hartmut Kaiser
++// Copyright (c) 2007-2026 Hartmut Kaiser
+ // Copyright (c) 2011 Bryce Lelbach
+ //
+ // SPDX-License-Identifier: BSL-1.0
+@@ -17,6 +17,7 @@
+ #endif
+ #include <asio/io_context.hpp>
+ #include <asio/ip/tcp.hpp>
++#include <asio/version.hpp>
+
+ /* The asio support includes termios.h.
+ * The termios.h file on ppc64le defines these macros, which
+@@ -29,17 +30,17 @@ namespace hpx::util {
+
+ ///////////////////////////////////////////////////////////////////////////
+ HPX_CORE_EXPORT bool get_endpoint(std::string const& addr,
+- std::uint16_t port, asio::ip::tcp::endpoint& ep,
++ std::uint16_t port, ::asio::ip::tcp::endpoint& ep,
+ bool force_ipv4 = false);
+
+ HPX_CORE_EXPORT std::string get_endpoint_name(
+- asio::ip::tcp::endpoint const& ep);
++ ::asio::ip::tcp::endpoint const& ep);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // properly resolve a give host name to the corresponding IP address
+- HPX_CORE_EXPORT asio::ip::tcp::endpoint resolve_hostname(
++ HPX_CORE_EXPORT ::asio::ip::tcp::endpoint resolve_hostname(
+ std::string const& hostname, std::uint16_t port,
+- asio::io_context& io_service, bool force_ipv4 = false);
++ ::asio::io_context& io_service, bool force_ipv4 = false);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // return the public IP address of the local node
+@@ -50,43 +51,51 @@ namespace hpx::util {
+ [[nodiscard]] HPX_CORE_EXPORT std::string cleanup_ip_address(
+ std::string const& addr);
+
+- using endpoint_iterator_type = asio::ip::tcp::resolver::iterator;
++ namespace detail {
+
+- [[nodiscard]] endpoint_iterator_type HPX_CORE_EXPORT connect_begin(
++#if ASIO_VERSION >= 103400
++ using endpoint_iterator_type =
++ ::asio::ip::basic_resolver_iterator<asio::ip::tcp>;
++#else
++ using endpoint_iterator_type = ::asio::ip::tcp::resolver::iterator;
++#endif
++ } // namespace detail
++
++ [[nodiscard]] HPX_CORE_EXPORT detail::endpoint_iterator_type connect_begin(
+ std::string const& address, std::uint16_t port,
+- asio::io_context& io_service);
++ ::asio::io_context& io_service);
+
+ /// \brief Returns an iterator which when dereferenced will give an
+ /// endpoint suitable for a call to connect() related to this
+ /// locality
+ template <typename Locality>
+- [[nodiscard]] endpoint_iterator_type connect_begin(
+- Locality const& loc, asio::io_context& io_service)
++ [[nodiscard]] detail::endpoint_iterator_type connect_begin(
++ Locality const& loc, ::asio::io_context& io_service)
+ {
+ return connect_begin(loc.address(), loc.port(), io_service);
+ }
+
+- [[nodiscard]] inline endpoint_iterator_type connect_end()
++ [[nodiscard]] inline detail::endpoint_iterator_type connect_end()
+ {
+ return {};
+ }
+
+- [[nodiscard]] endpoint_iterator_type HPX_CORE_EXPORT accept_begin(
++ [[nodiscard]] HPX_CORE_EXPORT detail::endpoint_iterator_type accept_begin(
+ std::string const& address, std::uint16_t port,
+- asio::io_context& io_service);
++ ::asio::io_context& io_service);
+
+ ///////////////////////////////////////////////////////////////////////////
+ /// \brief Returns an iterator which when dereferenced will give an
+ /// endpoint suitable for a call to accept() related to this
+ /// locality
+ template <typename Locality>
+- [[nodiscard]] endpoint_iterator_type accept_begin(
+- Locality const& loc, asio::io_context& io_service)
++ [[nodiscard]] detail::endpoint_iterator_type accept_begin(
++ Locality const& loc, ::asio::io_context& io_service)
+ {
+ return accept_begin(loc.address(), loc.port(), io_service);
+ }
+
+- [[nodiscard]] inline endpoint_iterator_type accept_end() //-V524
++ [[nodiscard]] inline detail::endpoint_iterator_type accept_end() //-V524
+ {
+ return {};
+ }
+diff --git a/libs/core/asio/src/asio_util.cpp b/libs/core/asio/src/asio_util.cpp
+index b5443e5dfa4e..5d98ece1d553 100644
+--- a/libs/core/asio/src/asio_util.cpp
++++ b/libs/core/asio/src/asio_util.cpp
+@@ -1,4 +1,4 @@
+-// Copyright (c) 2007-2023 Hartmut Kaiser
++// Copyright (c) 2007-2026 Hartmut Kaiser
+ // Copyright (c) 2011 Bryce Lelbach
+ //
+ // SPDX-License-Identifier: BSL-1.0
+@@ -26,7 +26,9 @@
+ #include <asio/ip/host_name.hpp>
+ #include <asio/ip/tcp.hpp>
+
++#include <cstdint>
+ #include <exception>
++#include <string>
+ #include <system_error>
+
+ #if defined(HPX_WINDOWS) && !defined(HPX_HAVE_STATIC_LINKING)
+@@ -39,23 +41,30 @@
+ #pragma warning(disable : 4073)
+ #endif
+ #pragma init_seg(lib)
+-asio::detail::winsock_init<>::manual manual_winsock_init;
++::asio::detail::winsock_init<>::manual manual_winsock_init;
+ #if defined(HPX_MSVC_WARNING_PRAGMA)
+ #pragma warning(pop)
+ #endif
+ #endif
+
++#include <hpx/config/warnings_prefix.hpp>
++
+ ///////////////////////////////////////////////////////////////////////////////
+ namespace hpx::util {
+
+ ///////////////////////////////////////////////////////////////////////////
+ bool get_endpoint(std::string const& addr, std::uint16_t port,
+- asio::ip::tcp::endpoint& ep, bool force_ipv4)
++ ::asio::ip::tcp::endpoint& ep, bool force_ipv4)
+ {
+- using namespace asio::ip;
++ using namespace ::asio::ip;
+ std::error_code ec;
++#if ASIO_VERSION >= 103400
++ address_v4 const addr4 = //-V821
++ make_address_v4(addr.c_str(), ec);
++#else
+ address_v4 const addr4 = //-V821
+ address_v4::from_string(addr.c_str(), ec);
++#endif
+ if (!ec)
+ { // it's an IPV4 address
+ ep = tcp::endpoint(address(addr4), port);
+@@ -64,8 +73,13 @@ namespace hpx::util {
+
+ if (!force_ipv4)
+ {
++#if ASIO_VERSION >= 103400
++ address_v6 const addr6 = //-V821
++ make_address_v6(addr.c_str(), ec);
++#else
+ address_v6 const addr6 = //-V821
+ address_v6::from_string(addr.c_str(), ec);
++#endif
+ if (!ec)
+ { // it's an IPV6 address
+ ep = tcp::endpoint(address(addr6), port);
+@@ -76,17 +90,17 @@ namespace hpx::util {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+- std::string get_endpoint_name(asio::ip::tcp::endpoint const& ep)
++ std::string get_endpoint_name(::asio::ip::tcp::endpoint const& ep)
+ {
+ return ep.address().to_string();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // properly resolve a give host name to the corresponding IP address
+- asio::ip::tcp::endpoint resolve_hostname(std::string const& hostname,
+- std::uint16_t port, asio::io_context& io_service, bool force_ipv4)
++ ::asio::ip::tcp::endpoint resolve_hostname(std::string const& hostname,
++ std::uint16_t port, ::asio::io_context& io_service, bool force_ipv4)
+ {
+- using asio::ip::tcp;
++ using ::asio::ip::tcp;
+
+ // collect errors here
+ exception_list errors;
+@@ -108,9 +122,27 @@ namespace hpx::util {
+ {
+ // resolve the given address
+ tcp::resolver resolver(io_service);
+- tcp::resolver::query query(hostname, std::to_string(port));
+
+- asio::ip::tcp::resolver::iterator it = resolver.resolve(query);
++#if ASIO_VERSION >= 103400
++ auto resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v4(), hostname, std::to_string(port));
++
++ auto it = resolver_results.begin();
++ auto end = resolver_results.begin();
++
++ // skip ipv6 results, if required
++ if (it == end && !force_ipv4)
++ {
++ resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v6(), hostname, std::to_string(port));
++ it = resolver_results.begin();
++ }
++
++ HPX_ASSERT(it != end);
++ return *it;
++#else
++ tcp::resolver::query query(hostname, std::to_string(port));
++ ::asio::ip::tcp::resolver::iterator it = resolver.resolve(query);
+
+ // skip ipv6 results, if required
+ if (force_ipv4)
+@@ -121,9 +153,9 @@ namespace hpx::util {
+ ++it;
+ }
+ }
+-
+- HPX_ASSERT(it != asio::ip::tcp::resolver::iterator());
++ HPX_ASSERT(it != ::asio::ip::tcp::resolver::iterator());
+ return *it;
++#endif
+ }
+ catch (std::system_error const&)
+ {
+@@ -140,17 +172,30 @@ namespace hpx::util {
+ // return the public IP address of the local node
+ std::string resolve_public_ip_address()
+ {
+- using asio::ip::tcp;
++ using ::asio::ip::tcp;
+
+ // collect errors here
+ exception_list errors;
+
+ try
+ {
+- asio::io_context io_service;
++ ::asio::io_context io_service;
+ tcp::resolver resolver(io_service);
+- tcp::resolver::query query(asio::ip::host_name(), "");
++
++#if ASIO_VERSION >= 103400
++ auto resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v4(), asio::ip::host_name(), "");
++ auto it = resolver_results.begin();
++ if (it == resolver_results.end())
++ {
++ resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v6(), asio::ip::host_name(), "");
++ it = resolver_results.begin();
++ }
++#else
++ tcp::resolver::query query(::asio::ip::host_name(), "");
+ tcp::resolver::iterator it = resolver.resolve(query);
++#endif
+ tcp::endpoint endpoint = *it;
+ return endpoint.address().to_string();
+ }
+@@ -184,7 +229,7 @@ namespace hpx::util {
+ for (/**/; i < 2; ++i)
+ {
+ #if defined(HPX_WINDOWS)
+- int const s = asio::detail::socket_ops::inet_pton(
++ int const s = ::asio::detail::socket_ops::inet_pton(
+ domain[i], addr.data(), buf, &scope_id, ec);
+ if (s > 0 && !ec)
+ break;
+@@ -201,7 +246,7 @@ namespace hpx::util {
+ }
+
+ #if defined(HPX_WINDOWS)
+- if (asio::detail::socket_ops::inet_ntop(
++ if (::asio::detail::socket_ops::inet_ntop(
+ domain[i], buf, str, INET6_ADDRSTRLEN, scope_id, ec) == nullptr)
+ {
+ #else
+@@ -214,10 +259,10 @@ namespace hpx::util {
+ return {str};
+ }
+
+- endpoint_iterator_type connect_begin(std::string const& address,
+- std::uint16_t port, asio::io_context& io_service)
++ detail::endpoint_iterator_type connect_begin(std::string const& address,
++ std::uint16_t port, ::asio::io_context& io_service)
+ {
+- using asio::ip::tcp;
++ using ::asio::ip::tcp;
+
+ // collect errors here
+ exception_list errors;
+@@ -230,8 +275,14 @@ namespace hpx::util {
+ tcp::endpoint ep;
+ if (util::get_endpoint(address, port, ep))
+ {
++#if ASIO_VERSION >= 103400
++ auto resolver_results =
++ tcp::resolver::results_type::create(ep, address, port_str);
++ return resolver_results.begin();
++#else
+ return {
+ tcp::resolver::results_type::create(ep, address, port_str)};
++#endif
+ }
+ }
+ catch (std::system_error const&)
+@@ -244,10 +295,24 @@ namespace hpx::util {
+ {
+ // resolve the given address
+ tcp::resolver resolver(io_service);
+- tcp::resolver::query query(
+- !address.empty() ? address : asio::ip::host_name(), port_str);
+
++#if ASIO_VERSION >= 103400
++ auto resolver_results = resolver.resolve(::asio::ip::tcp::v4(),
++ !address.empty() ? address : ::asio::ip::host_name(), port_str);
++ auto it = resolver_results.begin();
++ if (it == resolver_results.end())
++ {
++ resolver_results = resolver.resolve(::asio::ip::tcp::v6(),
++ !address.empty() ? address : ::asio::ip::host_name(),
++ port_str);
++ it = resolver_results.begin();
++ }
++ return it;
++#else
++ tcp::resolver::query query(
++ !address.empty() ? address : ::asio::ip::host_name(), port_str);
+ return {resolver.resolve(query)};
++#endif
+ }
+ catch (std::system_error const&)
+ {
+@@ -260,10 +325,10 @@ namespace hpx::util {
+ address, port);
+ }
+
+- endpoint_iterator_type accept_begin(std::string const& address,
+- std::uint16_t port, asio::io_context& io_service)
++ detail::endpoint_iterator_type accept_begin(std::string const& address,
++ std::uint16_t port, ::asio::io_context& io_service)
+ {
+- using asio::ip::tcp;
++ using ::asio::ip::tcp;
+
+ // collect errors here
+ exception_list errors;
+@@ -276,8 +341,14 @@ namespace hpx::util {
+ tcp::endpoint ep;
+ if (util::get_endpoint(address, port, ep))
+ {
++#if ASIO_VERSION >= 103400
++ auto resolver_results =
++ tcp::resolver::results_type::create(ep, address, port_str);
++ return resolver_results.begin();
++#else
+ return {
+ tcp::resolver::results_type::create(ep, address, port_str)};
++#endif
+ }
+ }
+ catch (std::system_error const&)
+@@ -290,9 +361,21 @@ namespace hpx::util {
+ {
+ // resolve the given address
+ tcp::resolver resolver(io_service);
++#if ASIO_VERSION >= 103400
++ auto resolver_results =
++ resolver.resolve(::asio::ip::tcp::v4(), address, port_str);
++ auto it = resolver_results.begin();
++ if (it == resolver_results.end())
++ {
++ resolver_results =
++ resolver.resolve(::asio::ip::tcp::v6(), address, port_str);
++ it = resolver_results.begin();
++ }
++ return it;
++#else
+ tcp::resolver::query query(address, port_str);
+-
+ return {resolver.resolve(query)};
++#endif
+ }
+ catch (std::system_error const&)
+ {
+@@ -306,9 +389,22 @@ namespace hpx::util {
+ {
+ // resolve the given address
+ tcp::resolver resolver(io_service);
+- tcp::resolver::query query(asio::ip::host_name(), port_str);
+
++#if ASIO_VERSION >= 103400
++ auto resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v4(), ::asio::ip::host_name(), port_str);
++ auto it = resolver_results.begin();
++ if (it == resolver_results.end())
++ {
++ resolver_results = resolver.resolve(
++ ::asio::ip::tcp::v6(), ::asio::ip::host_name(), port_str);
++ it = resolver_results.begin();
++ }
++ return it;
++#else
++ tcp::resolver::query query(::asio::ip::host_name(), port_str);
+ return {resolver.resolve(query)};
++#endif
+ }
+ catch (std::system_error const&)
+ {
+@@ -394,3 +490,5 @@ namespace hpx::util {
+ return true;
+ }
+ } // namespace hpx::util
++
++#include <hpx/config/warnings_suffix.hpp>
+diff --git a/libs/core/asio/src/map_hostnames.cpp b/libs/core/asio/src/map_hostnames.cpp
+index 156c40a03df2..793d1134c96a 100644
+--- a/libs/core/asio/src/map_hostnames.cpp
++++ b/libs/core/asio/src/map_hostnames.cpp
+@@ -1,4 +1,4 @@
+-// Copyright (c) 2007-2023 Hartmut Kaiser
++// Copyright (c) 2007-2026 Hartmut Kaiser
+ //
+ // SPDX-License-Identifier: BSL-1.0
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+@@ -44,8 +44,8 @@ namespace hpx::util {
+ }
+
+ // do full host name resolution
+- asio::io_context io_service;
+- asio::ip::tcp::endpoint const ep = util::resolve_hostname(
++ ::asio::io_context io_service;
++ ::asio::ip::tcp::endpoint const ep = util::resolve_hostname(
+ prefix_ + host_name + suffix_, port, io_service, ipv4_);
+
+ std::string resolved_addr(util::get_endpoint_name(ep));
+diff --git a/libs/core/batch_environments/src/batch_environment.cpp b/libs/core/batch_environments/src/batch_environment.cpp
+index 2c522b01f549..97c6dde58927 100644
+--- a/libs/core/batch_environments/src/batch_environment.cpp
++++ b/libs/core/batch_environments/src/batch_environment.cpp
+@@ -140,7 +140,7 @@ namespace hpx::util {
+ bool found_agas_host = false;
+
+ #if defined(HPX_HAVE_NETWORKING)
+- asio::io_context io_service;
++ ::asio::io_context io_service;
+
+ std::size_t agas_node_num = 0;
+ for (std::string const& s : nodes)
+@@ -161,7 +161,7 @@ namespace hpx::util {
+
+ if (have_tcp)
+ {
+- asio::ip::tcp::endpoint ep =
++ ::asio::ip::tcp::endpoint ep =
+ util::resolve_hostname(s, 0, io_service);
+
+ if (0 == nodes_.count(ep))
+@@ -251,7 +251,7 @@ namespace hpx::util {
+
+ std::string batch_environment::host_name() const
+ {
+- std::string hostname = asio::ip::host_name();
++ std::string hostname = ::asio::ip::host_name();
+ if (debug_)
+ std::cerr << "asio host_name: " << hostname << std::endl;
+ return hostname;
+diff --git a/libs/core/debugging/src/attach_debugger.cpp b/libs/core/debugging/src/attach_debugger.cpp
+index b9d8ec8dfde8..7f6941ab419d 100644
+--- a/libs/core/debugging/src/attach_debugger.cpp
++++ b/libs/core/debugging/src/attach_debugger.cpp
+@@ -30,7 +30,7 @@ namespace hpx::util {
+ DebugBreak();
+ #elif defined(_POSIX_VERSION) && defined(HPX_HAVE_UNISTD_H)
+ volatile int i = 0;
+- std::cerr << "PID: " << getpid() << " on " << asio::ip::host_name()
++ std::cerr << "PID: " << getpid() << " on " << ::asio::ip::host_name()
+ << " ready for attaching debugger. Once attached set i = 1 "
+ "and continue"
+ << std::endl;
+diff --git a/libs/core/executors/src/service_executors.cpp b/libs/core/executors/src/service_executors.cpp
+index 4e3ba88a2392..0aecf22a6b45 100644
+--- a/libs/core/executors/src/service_executors.cpp
++++ b/libs/core/executors/src/service_executors.cpp
+@@ -1,4 +1,4 @@
+-// Copyright (c) 2023 Hartmut Kaiser
++// Copyright (c) 2023-2026 Hartmut Kaiser
+ //
+ // SPDX-License-Identifier: BSL-1.0
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+@@ -10,12 +10,20 @@
+ #include <hpx/io_service/io_service_pool.hpp>
+
+ #include <asio/io_context.hpp>
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
+
+ namespace hpx::parallel::execution::detail {
+
+ void service_executor::post(
+ hpx::util::io_service_pool* pool, hpx::function<void()>&& f)
+ {
++#if ASIO_VERSION >= 103400
++ ::asio::post(pool->get_io_service(), HPX_MOVE(f));
++#else
+ pool->get_io_service().post(HPX_MOVE(f));
++#endif
+ }
+ } // namespace hpx::parallel::execution::detail
+diff --git a/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp b/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
+index 8d800f36d18d..b5a2aa3c5ae7 100644
+--- a/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
++++ b/libs/core/io_service/include/hpx/io_service/io_service_pool.hpp
+@@ -91,7 +91,7 @@ namespace hpx::util {
+ bool stopped();
+
+ /// \brief Get an io_service to use.
+- asio::io_context& get_io_service(int index = -1);
++ ::asio::io_context& get_io_service(int index = -1);
+
+ /// \brief access underlying thread handle
+ std::thread& get_os_thread_handle(std::size_t thread_num);
+@@ -122,13 +122,13 @@ namespace hpx::util {
+ void wait_locked();
+
+ private:
+- using io_service_ptr = std::unique_ptr<asio::io_context>;
++ using io_service_ptr = std::unique_ptr<::asio::io_context>;
+
+ using raw_work_type =
+- asio::executor_work_guard<asio::io_context::executor_type>;
++ ::asio::executor_work_guard<::asio::io_context::executor_type>;
+ using work_type = std::unique_ptr<raw_work_type>;
+
+- static work_type initialize_work(asio::io_context& io_service);
++ static work_type initialize_work(::asio::io_context& io_service);
+
+ std::mutex mtx_;
+
+diff --git a/libs/core/io_service/src/io_service_pool.cpp b/libs/core/io_service/src/io_service_pool.cpp
+index 44eb3318c04b..53ff2aa29a25 100644
+--- a/libs/core/io_service/src/io_service_pool.cpp
++++ b/libs/core/io_service/src/io_service_pool.cpp
+@@ -12,11 +12,24 @@
+ #include <hpx/config/asio.hpp>
+ #include <hpx/assert.hpp>
+ #include <hpx/concurrency/barrier.hpp>
+-#include <hpx/io_service/io_service_pool.hpp>
++
+ #include <hpx/modules/errors.hpp>
+ #include <hpx/modules/logging.hpp>
+
++#include <hpx/io_service/io_service_pool.hpp>
++
++#include <asio/executor_work_guard.hpp>
+ #include <asio/io_context.hpp>
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
++
++// The asio support includes termios.h. The termios.h file on ppc64le defines
++// these macros, which are also used by blaze, blaze_tensor as Template names.
++// Make sure we undefine them before continuing.
++#undef VT1
++#undef VT2
+
+ #include <cstddef>
+ #include <memory>
+@@ -59,8 +72,8 @@ namespace hpx::util {
+ // will not exit until they are explicitly stopped.
+ for (std::size_t i = 0; i < pool_size_; ++i)
+ {
+- std::unique_ptr<asio::io_context> p =
+- std::make_unique<asio::io_context>();
++ std::unique_ptr<::asio::io_context> p =
++ std::make_unique<::asio::io_context>();
+ io_services_.emplace_back(HPX_MOVE(p));
+ work_.emplace_back(initialize_work(*io_services_[i]));
+ }
+@@ -178,8 +191,8 @@ namespace hpx::util {
+
+ for (std::size_t i = 0; i < num_threads; ++i)
+ {
+- std::unique_ptr<asio::io_context> p =
+- std::make_unique<asio::io_context>();
++ std::unique_ptr<::asio::io_context> p =
++ std::make_unique<::asio::io_context>();
+ io_services_.emplace_back(HPX_MOVE(p));
+ work_.emplace_back(initialize_work(*io_services_[i]));
+ }
+@@ -259,7 +272,11 @@ namespace hpx::util {
+ for (std::size_t i = 0; i < pool_size_; ++i)
+ {
+ work_.emplace_back(initialize_work(*io_services_[i]));
++#if ASIO_VERSION >= 103400
++ io_services_[i]->restart();
++#else
+ io_services_[i]->reset();
++#endif
+ }
+
+ continue_barrier_->wait();
+@@ -290,12 +307,12 @@ namespace hpx::util {
+ }
+
+ io_service_pool::work_type io_service_pool::initialize_work(
+- asio::io_context& io_service)
++ ::asio::io_context& io_service)
+ {
+ return std::make_unique<raw_work_type>(io_service.get_executor());
+ }
+
+- asio::io_context& io_service_pool::get_io_service(int index)
++ ::asio::io_context& io_service_pool::get_io_service(int index)
+ {
+ // use this function for single group io_service pools only
+ std::lock_guard<std::mutex> l(mtx_);
+diff --git a/libs/core/lci_base/src/lci_environment.cpp b/libs/core/lci_base/src/lci_environment.cpp
+index f3e51a29eb30..3d0b75f8913b 100644
+--- a/libs/core/lci_base/src/lci_environment.cpp
++++ b/libs/core/lci_base/src/lci_environment.cpp
+@@ -178,7 +178,7 @@ namespace hpx { namespace util {
+
+ std::string lci_environment::get_processor_name()
+ {
+- return asio::ip::host_name();
++ return ::asio::ip::host_name();
+ }
+
+ void lci_environment::finalize()
+diff --git a/libs/core/runtime_local/include/hpx/runtime_local/runtime_handlers.hpp b/libs/core/runtime_local/include/hpx/runtime_local/runtime_handlers.hpp
+index 4b322e955b73..aecb494d8088 100644
+--- a/libs/core/runtime_local/include/hpx/runtime_local/runtime_handlers.hpp
++++ b/libs/core/runtime_local/include/hpx/runtime_local/runtime_handlers.hpp
+@@ -32,5 +32,5 @@ namespace hpx::detail {
+ HPX_CORE_EXPORT threads::thread_pool_base* get_default_pool();
+ HPX_CORE_EXPORT threads::mask_type get_pu_mask(
+ threads::topology& topo, std::size_t thread_num);
+- HPX_CORE_EXPORT asio::io_context& get_default_timer_service();
++ HPX_CORE_EXPORT ::asio::io_context& get_default_timer_service();
+ } // namespace hpx::detail
+diff --git a/libs/core/runtime_local/src/pool_timer.cpp b/libs/core/runtime_local/src/pool_timer.cpp
+index 7487b5a72692..7b847d8a08c6 100644
+--- a/libs/core/runtime_local/src/pool_timer.cpp
++++ b/libs/core/runtime_local/src/pool_timer.cpp
+@@ -68,7 +68,7 @@ namespace hpx::util::detail {
+
+ private:
+ using deadline_timer =
+- asio::basic_waitable_timer<std::chrono::steady_clock>;
++ ::asio::basic_waitable_timer<std::chrono::steady_clock>;
+
+ mutable mutex_type mtx_;
+ hpx::function<bool()> f_; ///< function to call
+@@ -146,7 +146,7 @@ namespace hpx::util::detail {
+ }
+
+ HPX_ASSERT(timer_ != nullptr);
+- timer_->expires_from_now(time_duration.value());
++ timer_->expires_at(time_duration.from_now());
+ timer_->async_wait(hpx::bind_front( //-V779
+ &pool_timer::timer_handler, this->shared_from_this()));
+
+diff --git a/libs/core/runtime_local/src/runtime_handlers.cpp b/libs/core/runtime_local/src/runtime_handlers.cpp
+index 9bfee95c10cc..b377cb4642bf 100644
+--- a/libs/core/runtime_local/src/runtime_handlers.cpp
++++ b/libs/core/runtime_local/src/runtime_handlers.cpp
+@@ -152,7 +152,7 @@ namespace hpx::detail {
+ return &rt->get_thread_manager().default_pool();
+ }
+
+- asio::io_context& get_default_timer_service()
++ ::asio::io_context& get_default_timer_service()
+ {
+ hpx::runtime const* rt = get_runtime_ptr();
+ if (rt == nullptr)
+diff --git a/libs/core/threading_base/include/hpx/threading_base/detail/get_default_timer_service.hpp b/libs/core/threading_base/include/hpx/threading_base/detail/get_default_timer_service.hpp
+index 7249905f897b..f9786f4c4321 100644
+--- a/libs/core/threading_base/include/hpx/threading_base/detail/get_default_timer_service.hpp
++++ b/libs/core/threading_base/include/hpx/threading_base/detail/get_default_timer_service.hpp
+@@ -14,8 +14,8 @@
+
+ namespace hpx::threads::detail {
+
+- using get_default_timer_service_type = hpx::function<asio::io_context&()>;
++ using get_default_timer_service_type = hpx::function<::asio::io_context&()>;
+ HPX_CORE_EXPORT void set_get_default_timer_service(
+ get_default_timer_service_type f);
+- HPX_CORE_EXPORT asio::io_context& get_default_timer_service();
++ HPX_CORE_EXPORT ::asio::io_context& get_default_timer_service();
+ } // namespace hpx::threads::detail
+diff --git a/libs/core/threading_base/src/get_default_timer_service.cpp b/libs/core/threading_base/src/get_default_timer_service.cpp
+index 5e9a4791af43..a8a51aa2c7d8 100644
+--- a/libs/core/threading_base/src/get_default_timer_service.cpp
++++ b/libs/core/threading_base/src/get_default_timer_service.cpp
+@@ -25,7 +25,7 @@ namespace hpx::threads::detail {
+ get_default_timer_service_f = HPX_MOVE(f);
+ }
+
+- asio::io_context& get_default_timer_service()
++ ::asio::io_context& get_default_timer_service()
+ {
+ if (detail::get_default_timer_service_f)
+ {
+diff --git a/libs/core/threading_base/src/set_thread_state_timed.cpp b/libs/core/threading_base/src/set_thread_state_timed.cpp
+index 9b762a825935..1fb591c68fae 100644
+--- a/libs/core/threading_base/src/set_thread_state_timed.cpp
++++ b/libs/core/threading_base/src/set_thread_state_timed.cpp
+@@ -99,7 +99,7 @@ namespace hpx::threads::detail {
+
+ // create timer firing in correspondence with given time
+ using deadline_timer =
+- asio::basic_waitable_timer<std::chrono::steady_clock>;
++ ::asio::basic_waitable_timer<std::chrono::steady_clock>;
+
+ deadline_timer t(get_default_timer_service(), abs_time);
+
+diff --git a/libs/full/async_distributed/include/hpx/async_distributed/packaged_action.hpp b/libs/full/async_distributed/include/hpx/async_distributed/packaged_action.hpp
+index 179c96970c3f..2969c3e698ae 100644
+--- a/libs/full/async_distributed/include/hpx/async_distributed/packaged_action.hpp
++++ b/libs/full/async_distributed/include/hpx/async_distributed/packaged_action.hpp
+@@ -55,8 +55,8 @@ namespace hpx::lcos {
+ if (hpx::tolerate_node_faults())
+ {
+ if (ec ==
+- asio::error::make_error_code(
+- asio::error::connection_reset))
++ ::asio::error::make_error_code(
++ ::asio::error::connection_reset))
+ {
+ return;
+ }
+diff --git a/libs/full/init_runtime/src/hpx_main_winsocket.cpp b/libs/full/init_runtime/src/hpx_main_winsocket.cpp
+index 6013bbd6e5ec..5ce54bef5039 100644
+--- a/libs/full/init_runtime/src/hpx_main_winsocket.cpp
++++ b/libs/full/init_runtime/src/hpx_main_winsocket.cpp
+@@ -23,10 +23,10 @@ namespace hpx { namespace detail {
+ // is executed.
+ struct winsocket_init_helper
+ {
+- static asio::detail::winsock_init<> const& init()
++ static ::asio::detail::winsock_init<> const& init()
+ {
+- static const asio::detail::winsock_init<> init_winsocket =
+- asio::detail::winsock_init<>(false);
++ static const ::asio::detail::winsock_init<> init_winsocket =
++ ::asio::detail::winsock_init<>(false);
+ return init_winsocket;
+ }
+ };
+diff --git a/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp b/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
+index 77da0c839b16..06e55455ab76 100644
+--- a/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
++++ b/libs/full/parcelport_gasnet/src/parcelport_gasnet.cpp
+@@ -37,6 +37,11 @@
+ #include <system_error>
+ #include <type_traits>
+
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
++
+ #include <hpx/config/warnings_prefix.hpp>
+
+ namespace hpx::parcelset {
+@@ -142,8 +147,13 @@ namespace hpx::parcelset {
+
+ for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
+ {
++#if ASIO_VERSION >= 103400
++ ::asio::post(io_service_pool_.get_io_service(int(i)),
++ hpx::bind(&parcelport::io_service_work, this));
++#else
+ io_service_pool_.get_io_service(int(i)).post(
+ hpx::bind(&parcelport::io_service_work, this));
++#endif
+ }
+ return true;
+ }
+diff --git a/libs/full/parcelport_lci/src/parcelport_lci.cpp b/libs/full/parcelport_lci/src/parcelport_lci.cpp
+index d9083191376a..12d08448fe28 100644
+--- a/libs/full/parcelport_lci/src/parcelport_lci.cpp
++++ b/libs/full/parcelport_lci/src/parcelport_lci.cpp
+@@ -39,6 +39,11 @@
+ #include <type_traits>
+ #include <vector>
+
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
++
+ namespace hpx::parcelset::policies::lci {
+
+ parcelset::locality parcelport::here()
+@@ -98,8 +103,13 @@ namespace hpx::parcelset::policies::lci {
+ sender_p->run();
+ for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
+ {
++#if ASIO_VERSION >= 103400
++ ::asio::post(io_service_pool_.get_io_service(int(i)),
++ hpx::bind(&parcelport::io_service_work, this));
++#else
+ io_service_pool_.get_io_service(int(i)).post(
+ hpx::bind(&parcelport::io_service_work, this));
++#endif
+ }
+ return true;
+ }
+@@ -167,10 +177,10 @@ namespace hpx::parcelset::policies::lci {
+ static_cast<int>(hpx::get_local_worker_thread_num());
+ HPX_ASSERT(prg_thread_id < config_t::progress_thread_num);
+ for (int i = prg_thread_id * config_t::ndevices /
+- config_t::progress_thread_num;
+- i < (prg_thread_id + 1) * config_t::ndevices /
+- config_t::progress_thread_num;
+- ++i)
++ config_t::progress_thread_num;
++ i < (prg_thread_id + 1) * config_t::ndevices /
++ config_t::progress_thread_num;
++ ++i)
+ {
+ devices_to_progress.push_back(&devices[i]);
+ }
+diff --git a/libs/full/parcelport_mpi/src/parcelport_mpi.cpp b/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
+index e30025899e76..14320e4e625e 100644
+--- a/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
++++ b/libs/full/parcelport_mpi/src/parcelport_mpi.cpp
+@@ -35,6 +35,11 @@
+ #include <string>
+ #include <type_traits>
+
++#include <asio/version.hpp>
++#if ASIO_VERSION >= 103400
++#include <asio/post.hpp>
++#endif
++
+ #include <hpx/config/warnings_prefix.hpp>
+
+ namespace hpx::parcelset {
+@@ -181,8 +186,14 @@ namespace hpx::parcelset {
+
+ for (std::size_t i = 0; i != io_service_pool_.size(); ++i)
+ {
++#if ASIO_VERSION >= 103400
++ ::asio::post(
++ io_service_pool_.get_io_service(static_cast<int>(i)),
++ hpx::bind(&parcelport::io_service_work, this));
++#else
+ io_service_pool_.get_io_service(static_cast<int>(i))
+ .post(hpx::bind(&parcelport::io_service_work, this));
++#endif
+ }
+ return true;
+ }
+diff --git a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/connection_handler.hpp b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/connection_handler.hpp
+index 00d01900912a..0ef797ace408 100644
+--- a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/connection_handler.hpp
++++ b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/connection_handler.hpp
+@@ -98,7 +98,7 @@ namespace hpx::parcelset {
+ // Return the name of this locality
+ std::string get_locality_name() const override
+ {
+- return asio::ip::host_name();
++ return ::asio::ip::host_name();
+ }
+
+ std::shared_ptr<sender> create_connection(
+@@ -116,7 +116,7 @@ namespace hpx::parcelset {
+ std::shared_ptr<receiver> const& receiver_conn);
+
+ /// Acceptor used to listen for incoming connections.
+- asio::ip::tcp::acceptor* acceptor_;
++ ::asio::ip::tcp::acceptor* acceptor_;
+
+ /// The list of accepted connections
+ mutable hpx::spinlock connections_mtx_;
+diff --git a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/receiver.hpp b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/receiver.hpp
+index ffa937bf17d4..8f47b0a465a9 100644
+--- a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/receiver.hpp
++++ b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/receiver.hpp
+@@ -56,7 +56,7 @@ namespace hpx::parcelset::policies::tcp {
+ class receiver : public parcelport_connection<receiver>
+ {
+ public:
+- receiver(asio::io_context& io_service, std::uint64_t max_inbound_size,
++ receiver(::asio::io_context& io_service, std::uint64_t max_inbound_size,
+ connection_handler& parcelport)
+ : socket_(io_service)
+ , max_inbound_size_(max_inbound_size)
+@@ -77,7 +77,7 @@ namespace hpx::parcelset::policies::tcp {
+ }
+
+ // Get the socket associated with the parcelport_connection.
+- asio::ip::tcp::socket& socket() noexcept
++ ::asio::ip::tcp::socket& socket() noexcept
+ {
+ return socket_;
+ }
+@@ -100,8 +100,8 @@ namespace hpx::parcelset::policies::tcp {
+ chunk_buffers_.clear();
+
+ // Issue a read operation to read the message size.
+- using asio::buffer;
+- std::vector<asio::mutable_buffer> buffers;
++ using ::asio::buffer;
++ std::vector<::asio::mutable_buffer> buffers;
+ buffers.emplace_back(&buffer_.size_, sizeof(buffer_.size_));
+ buffers.emplace_back(
+ &buffer_.data_size_, sizeof(buffer_.data_size_));
+@@ -115,12 +115,12 @@ namespace hpx::parcelset::policies::tcp {
+ {
+ lk.unlock();
+ // report this problem back to the handler
+- handler(asio::error::make_error_code(
+- asio::error::not_connected));
++ handler(::asio::error::make_error_code(
++ ::asio::error::not_connected));
+ return;
+ }
+ #if defined(__linux) || defined(linux) || defined(__linux__)
+- asio::detail::socket_option::boolean<IPPROTO_TCP, TCP_QUICKACK>
++ ::asio::detail::socket_option::boolean<IPPROTO_TCP, TCP_QUICKACK>
+ quickack(true);
+ socket_.set_option(quickack);
+ #endif
+@@ -128,7 +128,7 @@ namespace hpx::parcelset::policies::tcp {
+ void (receiver::*f)(std::error_code const&, std::size_t,
+ Handler) = &receiver::handle_read_header<Handler>;
+
+- asio::async_read(socket_, buffers,
++ ::asio::async_read(socket_, buffers,
+ hpx::bind(f, shared_from_this(),
+ placeholders::_1, // error
+ placeholders::_2, // bytes_transferred
+@@ -144,7 +144,7 @@ namespace hpx::parcelset::policies::tcp {
+ if (socket_.is_open())
+ {
+ std::error_code ec;
+- socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ec);
++ socket_.shutdown(::asio::ip::tcp::socket::shutdown_both, ec);
+
+ // close the socket to give it back to the OS
+ socket_.close(ec);
+@@ -178,8 +178,8 @@ namespace hpx::parcelset::policies::tcp {
+ if (max_inbound_size_ != 0 && inbound_size > max_inbound_size_)
+ {
+ // report this problem back to the handler
+- handler(asio::error::make_error_code(
+- asio::error::operation_not_supported));
++ handler(::asio::error::make_error_code(
++ ::asio::error::operation_not_supported));
+ return;
+ }
+
+@@ -188,7 +188,7 @@ namespace hpx::parcelset::policies::tcp {
+ static_cast<std::size_t>(inbound_size);
+ #endif
+ // receive buffers
+- std::vector<asio::mutable_buffer> buffers;
++ std::vector<::asio::mutable_buffer> buffers;
+
+ // determine the size of the chunk buffer
+ auto const num_zero_copy_chunks = static_cast<std::size_t>(
+@@ -215,7 +215,7 @@ namespace hpx::parcelset::policies::tcp {
+ // add main buffer holding data that was serialized normally
+ buffer_.data_.resize(
+ static_cast<std::size_t>(inbound_size));
+- buffers.emplace_back(asio::buffer(buffer_.data_));
++ buffers.emplace_back(::asio::buffer(buffer_.data_));
+
+ // Start an asynchronous call to receive the data.
+ f = &receiver::handle_read_chunk_data<Handler>;
+@@ -225,7 +225,7 @@ namespace hpx::parcelset::policies::tcp {
+ // add main buffer holding data that was serialized normally
+ buffer_.data_.resize(
+ static_cast<std::size_t>(inbound_size));
+- buffers.emplace_back(asio::buffer(buffer_.data_));
++ buffers.emplace_back(::asio::buffer(buffer_.data_));
+
+ // Start an asynchronous call to receive the data.
+ f = &receiver::handle_read_data<Handler>;
+@@ -238,18 +238,18 @@ namespace hpx::parcelset::policies::tcp {
+ lk.unlock();
+
+ // report this problem back to the handler
+- handler(asio::error::make_error_code(
+- asio::error::not_connected));
++ handler(::asio::error::make_error_code(
++ ::asio::error::not_connected));
+ return;
+ }
+
+ #if defined(__linux) || defined(linux) || defined(__linux__)
+- asio::detail::socket_option::boolean<IPPROTO_TCP,
++ ::asio::detail::socket_option::boolean<IPPROTO_TCP,
+ TCP_QUICKACK>
+ quickack(true);
+ socket_.set_option(quickack);
+ #endif
+- asio::async_read(socket_, buffers,
++ ::asio::async_read(socket_, buffers,
+ hpx::bind(f, shared_from_this(),
+ placeholders::_1, // error,
+ util::protect(handler)));
+@@ -271,7 +271,7 @@ namespace hpx::parcelset::policies::tcp {
+ else
+ {
+ // receive buffers
+- std::vector<asio::mutable_buffer> buffers;
++ std::vector<::asio::mutable_buffer> buffers;
+
+ // add appropriately sized chunk buffers for the zero-copy data
+ auto const num_zero_copy_chunks = static_cast<std::size_t>(
+@@ -359,18 +359,18 @@ namespace hpx::parcelset::policies::tcp {
+ lk.unlock();
+
+ // report this problem back to the handler
+- handler(asio::error::make_error_code(
+- asio::error::not_connected));
++ handler(::asio::error::make_error_code(
++ ::asio::error::not_connected));
+ return;
+ }
+
+ #if defined(__linux) || defined(linux) || defined(__linux__)
+- asio::detail::socket_option::boolean<IPPROTO_TCP,
++ ::asio::detail::socket_option::boolean<IPPROTO_TCP,
+ TCP_QUICKACK>
+ quickack(true);
+ socket_.set_option(quickack);
+ #endif
+- asio::async_read(socket_, buffers,
++ ::asio::async_read(socket_, buffers,
+ hpx::bind(f, shared_from_this(),
+ placeholders::_1, // error,
+ util::protect(handler)));
+@@ -425,13 +425,13 @@ namespace hpx::parcelset::policies::tcp {
+ lk.unlock();
+
+ // report this problem back to the handler
+- handler(asio::error::make_error_code(
+- asio::error::not_connected));
++ handler(::asio::error::make_error_code(
++ ::asio::error::not_connected));
+ return;
+ }
+
+- asio::async_write(socket_,
+- asio::buffer(&ack_, sizeof(ack_)),
++ ::asio::async_write(socket_,
++ ::asio::buffer(&ack_, sizeof(ack_)),
+ hpx::bind(f, shared_from_this(),
+ placeholders::_1, // error,
+ util::protect(handler)));
+@@ -460,7 +460,7 @@ namespace hpx::parcelset::policies::tcp {
+ }
+
+ // Socket for the parcelport_connection.
+- asio::ip::tcp::socket socket_;
++ ::asio::ip::tcp::socket socket_;
+
+ std::uint64_t max_inbound_size_;
+
+diff --git a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/sender.hpp b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/sender.hpp
+index 59f23f2dd2e0..18ddf681347a 100644
+--- a/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/sender.hpp
++++ b/libs/full/parcelport_tcp/include/hpx/parcelport_tcp/sender.hpp
+@@ -57,7 +57,7 @@ namespace hpx::parcelset::policies::tcp {
+
+ public:
+ // Construct a sending parcelport_connection with the given io_context.
+- sender(asio::io_context& io_service,
++ sender(::asio::io_context& io_service,
+ parcelset::locality const& locality_id,
+ [[maybe_unused]] parcelset::parcelport* pp)
+ : socket_(io_service)
+@@ -75,7 +75,7 @@ namespace hpx::parcelset::policies::tcp {
+ if (socket_.is_open())
+ {
+ std::error_code ec;
+- socket_.shutdown(asio::ip::tcp::socket::shutdown_both, ec);
++ socket_.shutdown(::asio::ip::tcp::socket::shutdown_both, ec);
+
+ // close the socket to give it back to the OS
+ socket_.close(ec);
+@@ -83,7 +83,7 @@ namespace hpx::parcelset::policies::tcp {
+ }
+
+ // Get the socket associated with the parcelport_connection.
+- asio::ip::tcp::socket& socket() noexcept
++ ::asio::ip::tcp::socket& socket() noexcept
+ {
+ return socket_;
+ }
+@@ -97,7 +97,7 @@ namespace hpx::parcelset::policies::tcp {
+ {
+ #if defined(HPX_DEBUG)
+ std::error_code ec;
+- asio::ip::tcp::socket::endpoint_type const endpoint =
++ ::asio::ip::tcp::socket::endpoint_type const endpoint =
+ socket_.remote_endpoint(ec);
+
+ locality const& impl = parcel_locality_id.get<locality>();
+@@ -143,7 +143,7 @@ namespace hpx::parcelset::policies::tcp {
+ #endif
+ // Write the serialized data to the socket. We use "gather-write"
+ // to send both the header and the data in a single write operation.
+- std::vector<asio::const_buffer> buffers;
++ std::vector<::asio::const_buffer> buffers;
+ buffers.emplace_back(&buffer_.size_, sizeof(buffer_.size_));
+ buffers.emplace_back(
+ &buffer_.data_size_, sizeof(buffer_.data_size_));
+@@ -161,7 +161,7 @@ namespace hpx::parcelset::policies::tcp {
+ sizeof(parcel_buffer_type::transmission_chunk_type));
+
+ // add main buffer holding data which was serialized normally
+- buffers.emplace_back(asio::buffer(buffer_.data_));
++ buffers.emplace_back(::asio::buffer(buffer_.data_));
+
+ // now add chunks themselves, those hold zero-copy serialized chunks
+ for (serialization::serialization_chunk& c : buffer_.chunks_)
+@@ -174,7 +174,7 @@ namespace hpx::parcelset::policies::tcp {
+ else
+ {
+ // add main buffer holding data which was serialized normally
+- buffers.emplace_back(asio::buffer(buffer_.data_));
++ buffers.emplace_back(::asio::buffer(buffer_.data_));
+ }
+
+ // this additional wrapping of the handler into a bind object is
+@@ -183,7 +183,7 @@ namespace hpx::parcelset::policies::tcp {
+ void (sender::*f)(std::error_code const&, std::size_t) =
+ &sender::handle_write;
+
+- asio::async_write(socket_, buffers,
++ ::asio::async_write(socket_, buffers,
+ hpx::bind(f, shared_from_this(), hpx::placeholders::_1,
+ hpx::placeholders::_2));
+ }
+@@ -241,7 +241,7 @@ namespace hpx::parcelset::policies::tcp {
+
+ // now handle the acknowledgment byte which is sent by the receiver
+ #if defined(__linux) || defined(linux) || defined(__linux__)
+- asio::detail::socket_option::boolean<IPPROTO_TCP, TCP_QUICKACK>
++ ::asio::detail::socket_option::boolean<IPPROTO_TCP, TCP_QUICKACK>
+ quickack(true);
+ socket_.set_option(quickack);
+ #endif
+@@ -249,7 +249,7 @@ namespace hpx::parcelset::policies::tcp {
+ void (sender::*f)(std::error_code const&) =
+ &sender::handle_read_ack;
+
+- asio::async_read(socket_, asio::buffer(&ack_, sizeof(ack_)),
++ ::asio::async_read(socket_, asio::buffer(&ack_, sizeof(ack_)),
+ hpx::bind(f, shared_from_this(), placeholders::_1));
+ }
+
+@@ -271,7 +271,7 @@ namespace hpx::parcelset::policies::tcp {
+ }
+
+ // Socket for the parcelport_connection.
+- asio::ip::tcp::socket socket_;
++ ::asio::ip::tcp::socket socket_;
+
+ bool ack_;
+
+diff --git a/libs/full/parcelport_tcp/src/connection_handler_tcp.cpp b/libs/full/parcelport_tcp/src/connection_handler_tcp.cpp
+index e4e81a285c38..7189f5fb14d4 100644
+--- a/libs/full/parcelport_tcp/src/connection_handler_tcp.cpp
++++ b/libs/full/parcelport_tcp/src/connection_handler_tcp.cpp
+@@ -86,18 +86,18 @@ namespace hpx::parcelset::policies::tcp {
+
+ bool connection_handler::do_run()
+ {
+- using asio::ip::tcp;
+- asio::io_context& io_service = io_service_pool_.get_io_service();
++ using ::asio::ip::tcp;
++ ::asio::io_context& io_service = io_service_pool_.get_io_service();
+ if (nullptr == acceptor_)
+ acceptor_ = new tcp::acceptor(io_service);
+
+ // initialize network
+ std::size_t tried = 0;
+ exception_list errors;
+- util::endpoint_iterator_type const end = util::accept_end();
+- for (util::endpoint_iterator_type it =
++ util::detail::endpoint_iterator_type const end = util::accept_end();
++ for (util::detail::endpoint_iterator_type it =
+ util::accept_begin(here_.get<locality>(), io_service);
+- it != end; ++it, ++tried)
++ it != end; ++it, ++tried)
+ {
+ try
+ {
+@@ -156,14 +156,14 @@ namespace hpx::parcelset::policies::tcp {
+ std::shared_ptr<sender> connection_handler::create_connection(
+ parcelset::locality const& l, error_code& ec)
+ {
+- asio::io_context& io_service = io_service_pool_.get_io_service();
++ ::asio::io_context& io_service = io_service_pool_.get_io_service();
+
+ // The parcel gets serialized inside the connection constructor, no
+ // need to keep the original parcel alive after this call returned.
+ auto sender_connection = std::make_shared<sender>(io_service, l, this);
+
+ // Connect to the target locality, retry if needed
+- std::error_code error = asio::error::try_again;
++ std::error_code error = ::asio::error::try_again;
+ for (std::size_t i = 0; i < HPX_MAX_NETWORK_RETRIES; ++i)
+ {
+ // The acceptor is only nullptr when the parcelport has been stopped.
+@@ -173,12 +173,12 @@ namespace hpx::parcelset::policies::tcp {
+ return std::shared_ptr<sender>();
+ try
+ {
+- util::endpoint_iterator_type end = util::connect_end();
+- for (util::endpoint_iterator_type it =
++ util::detail::endpoint_iterator_type end = util::connect_end();
++ for (util::detail::endpoint_iterator_type it =
+ util::connect_begin(l.get<locality>(), io_service);
+- it != end; ++it)
++ it != end; ++it)
+ {
+- asio::ip::tcp::socket& s = sender_connection->socket();
++ ::asio::ip::tcp::socket& s = sender_connection->socket();
+ s.close();
+ s.connect(*it, error);
+ if (!error)
+@@ -227,10 +227,10 @@ namespace hpx::parcelset::policies::tcp {
+
+ // make sure the Nagle algorithm is disabled for this socket,
+ // disable lingering on close
+- asio::ip::tcp::socket& s = sender_connection->socket();
++ ::asio::ip::tcp::socket& s = sender_connection->socket();
+
+- s.set_option(asio::ip::tcp::no_delay(true));
+- s.set_option(asio::socket_base::linger(true, 0));
++ s.set_option(::asio::ip::tcp::no_delay(true));
++ s.set_option(::asio::socket_base::linger(true, 0));
+
+ #if defined(HPX_HOLDON_TO_OUTGOING_CONNECTIONS)
+ {
+@@ -289,7 +289,7 @@ namespace hpx::parcelset::policies::tcp {
+ // handle this incoming connection
+ std::shared_ptr<receiver> c(receiver_conn);
+
+- asio::io_context& io_service = io_service_pool_.get_io_service();
++ ::asio::io_context& io_service = io_service_pool_.get_io_service();
+ receiver_conn.reset(new receiver(
+ io_service, get_max_inbound_message_size(), *this));
+ acceptor_->async_accept(receiver_conn->socket(),
+@@ -303,9 +303,9 @@ namespace hpx::parcelset::policies::tcp {
+ }
+
+ // disable Nagle algorithm, disable lingering on close
+- asio::ip::tcp::socket& s = c->socket();
+- s.set_option(asio::ip::tcp::no_delay(true));
+- s.set_option(asio::socket_base::linger(true, 0));
++ ::asio::ip::tcp::socket& s = c->socket();
++ s.set_option(::asio::ip::tcp::no_delay(true));
++ s.set_option(::asio::socket_base::linger(true, 0));
+
+ // now accept the incoming connection by starting to read from the
+ // socket
+@@ -329,7 +329,7 @@ namespace hpx::parcelset::policies::tcp {
+ return;
+ }
+
+- if (e != asio::error::operation_aborted && e != asio::error::eof)
++ if (e != ::asio::error::operation_aborted && e != ::asio::error::eof)
+ {
+ LPT_(error).format(
+ "handle read operation completion: error: {}", e.message());
+diff --git a/libs/full/parcelset/src/parcelhandler.cpp b/libs/full/parcelset/src/parcelhandler.cpp
+index b01da355a72f..1b2c5c148f1b 100644
+--- a/libs/full/parcelset/src/parcelhandler.cpp
++++ b/libs/full/parcelset/src/parcelhandler.cpp
+@@ -910,12 +910,12 @@ namespace hpx::parcelset {
+ // If we are in a stopped state, ignore some errors
+ if (hpx::is_stopped_or_shutting_down())
+ {
+- using asio::error::make_error_code;
+- if (ec == make_error_code(asio::error::connection_aborted) ||
+- ec == make_error_code(asio::error::connection_reset) ||
+- ec == make_error_code(asio::error::broken_pipe) ||
+- ec == make_error_code(asio::error::not_connected) ||
+- ec == make_error_code(asio::error::eof))
++ using ::asio::error::make_error_code;
++ if (ec == make_error_code(::asio::error::connection_aborted) ||
++ ec == make_error_code(::asio::error::connection_reset) ||
++ ec == make_error_code(::asio::error::broken_pipe) ||
++ ec == make_error_code(::asio::error::not_connected) ||
++ ec == make_error_code(::asio::error::eof))
+ {
+ return;
+ }
+@@ -923,7 +923,7 @@ namespace hpx::parcelset {
+ else if (hpx::tolerate_node_faults())
+ {
+ if (ec ==
+- asio::error::make_error_code(asio::error::connection_reset))
++ ::asio::error::make_error_code(::asio::error::connection_reset))
+ {
+ return;
+ }
diff --git a/hpx.spec b/hpx.spec
index cda576e..8c0d07b 100644
--- a/hpx.spec
+++ b/hpx.spec
@@ -1,12 +1,14 @@
Name: hpx
Version: 1.11.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: General Purpose C++ Runtime System
License: BSL-1.0
URL: https://hpx.stellar-group.org/
Source0: https://github.com/STEllAR-GROUP/hpx/archive/v%{version}/%{name}-%{version}.tar.gz
# from upstream https://github.com/STEllAR-GROUP/hpx/issues/6867#issuecomment-3829261348
Patch0: gcc-16.patch
+# from upstream https://github.com/TheHPXProject/hpx/issues/7428#issuecomment-5168078573
+Patch1: https://patch-diff.githubusercontent.com/raw/TheHPXProject/hpx/pull/7463.diff
BuildRequires: gcc-c++ >= 4.9
BuildRequires: gperftools-devel
@@ -279,6 +281,10 @@ done
%{_libdir}/lib*.so*
%changelog
+* Fri Aug 21 2026 Christoph Junghans <junghans@votca.org> - 1.11.0-5
+- Fix build with asio-1.38.1
+- Fixes: rhbz#2504129
+
* Thu Jul 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 1.11.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-21 13:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-21 13:51 [rpms/hpx] rawhide: Fix build with asio-1.38.1 Christoph Junghans
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox