diff --git a/libs/full/init_runtime/include/hpx/hpx_init_impl.hpp b/libs/full/init_runtime/include/hpx/hpx_init_impl.hpp index cc3570264c4..5fc0817d44d 100644 --- a/libs/full/init_runtime/include/hpx/hpx_init_impl.hpp +++ b/libs/full/init_runtime/include/hpx/hpx_init_impl.hpp @@ -1,5 +1,5 @@ // Copyright (c) 2018 Mikael Simberg -// Copyright (c) 2007-2022 Hartmut Kaiser +// Copyright (c) 2007-2023 Hartmut Kaiser // Copyright (c) 2011 Bryce Lelbach // // SPDX-License-Identifier: BSL-1.0 @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include #include @@ -26,8 +27,7 @@ #include #if defined(__FreeBSD__) -extern HPX_EXPORT char** freebsd_environ; -extern char** environ; +extern char** environ; // available in executables only #endif #if defined(HPX_WINDOWS) && defined(HPX_HAVE_APEX) @@ -56,7 +56,8 @@ namespace hpx { inline int init(std::function f, int argc, char** argv, init_params const& params) { - return detail::init_impl(HPX_MOVE(f), argc, argv, params, HPX_PREFIX); + return detail::init_impl( + HPX_MOVE(f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main entry point for launching the HPX runtime system. @@ -71,7 +72,7 @@ namespace hpx { std::function main_f = hpx::bind_back(detail::init_helper, HPX_MOVE(f)); return detail::init_impl( - HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX); + HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main entry point for launching the HPX runtime system. @@ -82,8 +83,8 @@ namespace hpx { /// function given by \p f as a HPX thread. inline int init(int argc, char** argv, init_params const& params) { - return detail::init_impl( - hpx_startup::get_main_func(), argc, argv, params, HPX_PREFIX); + return detail::init_impl(hpx_startup::get_main_func(), argc, argv, + params, HPX_PREFIX, environ); } /// \brief Main entry point for launching the HPX runtime system. @@ -97,7 +98,7 @@ namespace hpx { { hpx::function main_f; return detail::init_impl( - HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX); + HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main entry point for launching the HPX runtime system. @@ -109,6 +110,6 @@ namespace hpx { { return detail::init_impl(hpx_startup::get_main_func(), hpx::local::detail::dummy_argc, hpx::local::detail::dummy_argv, - params, HPX_PREFIX); + params, HPX_PREFIX, environ); } } // namespace hpx diff --git a/libs/full/init_runtime/include/hpx/hpx_start_impl.hpp b/libs/full/init_runtime/include/hpx/hpx_start_impl.hpp index baebdab1b64..c89de39cf65 100644 --- a/libs/full/init_runtime/include/hpx/hpx_start_impl.hpp +++ b/libs/full/init_runtime/include/hpx/hpx_start_impl.hpp @@ -1,5 +1,5 @@ // Copyright (c) 2018 Mikael Simberg -// Copyright (c) 2007-2022 Hartmut Kaiser +// Copyright (c) 2007-2023 Hartmut Kaiser // // SPDX-License-Identifier: BSL-1.0 // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -24,8 +25,7 @@ #include #if defined(__FreeBSD__) -extern HPX_EXPORT char** freebsd_environ; -extern char** environ; +extern char** environ; // available in executables only #endif #if defined(HPX_WINDOWS) && defined(HPX_HAVE_APEX) @@ -57,7 +57,8 @@ namespace hpx { std::function f, int argc, char** argv, init_params const& params) { - return detail::start_impl(HPX_MOVE(f), argc, argv, params, HPX_PREFIX); + return detail::start_impl( + HPX_MOVE(f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main non-blocking entry point for launching the HPX runtime system. @@ -74,7 +75,7 @@ namespace hpx { hpx::function main_f = hpx::bind_back(detail::init_helper, HPX_MOVE(f)); return detail::start_impl( - HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX); + HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main non-blocking entry point for launching the HPX runtime system. @@ -87,8 +88,8 @@ namespace hpx { /// with the runtime system's execution. inline bool start(int argc, char** argv, init_params const& params) { - return detail::start_impl( - hpx_startup::get_main_func(), argc, argv, params, HPX_PREFIX); + return detail::start_impl(hpx_startup::get_main_func(), argc, argv, + params, HPX_PREFIX, environ); } /// \brief Main non-blocking entry point for launching the HPX runtime system. @@ -104,7 +105,7 @@ namespace hpx { { hpx::function main_f; return detail::start_impl( - HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX); + HPX_MOVE(main_f), argc, argv, params, HPX_PREFIX, environ); } /// \brief Main non-blocking entry point for launching the HPX runtime system. @@ -119,6 +120,6 @@ namespace hpx { { return detail::start_impl(hpx_startup::get_main_func(), hpx::local::detail::dummy_argc, hpx::local::detail::dummy_argv, - params, HPX_PREFIX); + params, HPX_PREFIX, environ); } } // namespace hpx diff --git a/libs/full/init_runtime/include/hpx/init_runtime/detail/run_or_start.hpp b/libs/full/init_runtime/include/hpx/init_runtime/detail/run_or_start.hpp index 14279896ff1..431d161331b 100644 --- a/libs/full/init_runtime/include/hpx/init_runtime/detail/run_or_start.hpp +++ b/libs/full/init_runtime/include/hpx/init_runtime/detail/run_or_start.hpp @@ -22,12 +22,12 @@ namespace hpx { HPX_EXPORT int init_impl( hpx::function const& f, int argc, char** argv, init_params const& params, - char const* hpx_prefix); + char const* hpx_prefix, char** env); HPX_EXPORT bool start_impl( hpx::function const& f, int argc, char** argv, init_params const& params, - char const* hpx_prefix); + char const* hpx_prefix, char** env); } // namespace detail /// \endcond } // namespace hpx diff --git a/libs/full/init_runtime/src/hpx_init.cpp b/libs/full/init_runtime/src/hpx_init.cpp index 67222404d61..ef823d5e0a5 100644 --- a/libs/full/init_runtime/src/hpx_init.cpp +++ b/libs/full/init_runtime/src/hpx_init.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2022 Hartmut Kaiser +// Copyright (c) 2007-2023 Hartmut Kaiser // Copyright (c) 2017 Shoshana Jakobovits // Copyright (c) 2010-2011 Phillip LeBlanc, Dylan Stark // Copyright (c) 2011 Bryce Lelbach @@ -109,7 +109,7 @@ namespace hpx::detail { int init_impl( hpx::function const& f, int argc, char** argv, init_params const& params, - char const* hpx_prefix) + char const* hpx_prefix, [[maybe_unused]] char** env) { if (argc == 0 || argv == nullptr) { @@ -127,7 +127,7 @@ namespace hpx::detail { #endif util::set_hpx_prefix(hpx_prefix); #if defined(__FreeBSD__) - freebsd_environ = environ; + freebsd_environ = env; #endif // set a handler for std::abort, std::at_quick_exit, and std::atexit std::signal(SIGABRT, detail::on_abort); @@ -142,7 +142,7 @@ namespace hpx::detail { bool start_impl( hpx::function const& f, int argc, char** argv, init_params const& params, - char const* hpx_prefix) + char const* hpx_prefix, [[maybe_unused]] char** env) { if (argc == 0 || argv == nullptr) { @@ -160,7 +160,7 @@ namespace hpx::detail { #endif util::set_hpx_prefix(hpx_prefix); #if defined(__FreeBSD__) - freebsd_environ = environ; + freebsd_environ = env; #endif // set a handler for std::abort, std::at_quick_exit, and std::atexit std::signal(SIGABRT, detail::on_abort);