diff --git a/libmamba/CMakeLists.txt b/libmamba/CMakeLists.txt index cc77f6546d..5fe133ceb6 100644 --- a/libmamba/CMakeLists.txt +++ b/libmamba/CMakeLists.txt @@ -617,6 +617,9 @@ macro(libmamba_create_target target_name linkage output_name) solv::libsolvext solv::cpp ) + # CMake 3.17 provides a LibArchive::LibArchive target that could be used instead of + # LIBRARIES/INCLUDE_DIRS + target_include_directories(${target_name} PRIVATE "${LibArchive_INCLUDE_DIRS}") endif() if(WIN32) diff --git a/libmamba/ext/solv-cpp/CMakeLists.txt b/libmamba/ext/solv-cpp/CMakeLists.txt index 4af07a432a..8934098b4b 100644 --- a/libmamba/ext/solv-cpp/CMakeLists.txt +++ b/libmamba/ext/solv-cpp/CMakeLists.txt @@ -20,6 +20,7 @@ find_package(Libsolv REQUIRED) if(BUILD_SHARED) set(LIBSOLV_DEPS solv::libsolv solv::libsolvext) + set_target_properties(solv-cpp PROPERTIES POSITION_INDEPENDENT_CODE ON) else() set(LIBSOLV_DEPS solv::libsolv_static solv::libsolvext_static) endif() diff --git a/libmamba/include/mamba/specs/channel.hpp b/libmamba/include/mamba/specs/channel.hpp index f3bdc23ff4..26e829a728 100644 --- a/libmamba/include/mamba/specs/channel.hpp +++ b/libmamba/include/mamba/specs/channel.hpp @@ -22,61 +22,15 @@ namespace mamba::specs { - class Channel; - - struct ChannelResolveParams - { - /** - * The weakener for @ref ResolveParams::custom_channels. - */ - struct NameWeakener - { - /** - * Return the key unchanged. - */ - [[nodiscard]] auto make_first_key(std::string_view key) const -> std::string_view; - - /** - * Remove the last element of the '/'-separated name. - */ - [[nodiscard]] auto weaken_key(std::string_view key) const - -> std::optional; - }; - - template - using name_map = util::weakening_map, NameWeakener>; - - using platform_list = util::flat_set; - using channel_list = std::vector; - using channel_map = name_map; - using multichannel_map = name_map; - - platform_list platforms = {}; - CondaURL channel_alias = {}; - channel_map custom_channels = {}; - multichannel_map custom_multichannels = {}; - AuthenticationDataBase authentication_db = {}; - std::string home_dir = {}; - std::string current_working_dir = {}; - }; - - struct ChannelResolveParamsView - { - const ChannelResolveParams::platform_list& platforms = {}; - const CondaURL& channel_alias = {}; - const ChannelResolveParams::channel_map& custom_channels = {}; - const ChannelResolveParams::multichannel_map& custom_multichannels = {}; - const AuthenticationDataBase& authentication_db = {}; - std::string_view home_dir = {}; - std::string_view current_working_dir = {}; - }; + struct ChannelResolveParams; + struct ChannelResolveParamsView; class Channel { public: - using platform_list = ChannelResolveParams::platform_list; - using channel_list = ChannelResolveParams::channel_list; + using platform_list = util::flat_set; + using channel_list = std::vector; [[nodiscard]] static auto resolve( // UnresolvedChannel uc, @@ -145,6 +99,53 @@ namespace mamba::specs util::flat_set m_platforms; }; + struct ChannelResolveParams + { + /** + * The weakener for @ref ResolveParams::custom_channels. + */ + struct NameWeakener + { + /** + * Return the key unchanged. + */ + [[nodiscard]] auto make_first_key(std::string_view key) const -> std::string_view; + + /** + * Remove the last element of the '/'-separated name. + */ + [[nodiscard]] auto weaken_key(std::string_view key) const + -> std::optional; + }; + + template + using name_map = util::weakening_map, NameWeakener>; + + using platform_list = util::flat_set; + using channel_list = std::vector; + using channel_map = name_map; + using multichannel_map = name_map; + + platform_list platforms = {}; + CondaURL channel_alias = {}; + channel_map custom_channels = {}; + multichannel_map custom_multichannels = {}; + AuthenticationDataBase authentication_db = {}; + std::string home_dir = {}; + std::string current_working_dir = {}; + }; + + struct ChannelResolveParamsView + { + const ChannelResolveParams::platform_list& platforms = {}; + const CondaURL& channel_alias = {}; + const ChannelResolveParams::channel_map& custom_channels = {}; + const ChannelResolveParams::multichannel_map& custom_multichannels = {}; + const AuthenticationDataBase& authentication_db = {}; + std::string_view home_dir = {}; + std::string_view current_working_dir = {}; + }; + /** Tuple-like equality of all observable members */ auto operator==(const Channel& a, const Channel& b) -> bool; auto operator!=(const Channel& a, const Channel& b) -> bool; diff --git a/libmamba/src/core/transaction.cpp b/libmamba/src/core/transaction.cpp index 7d2f766896..6daa990a12 100644 --- a/libmamba/src/core/transaction.cpp +++ b/libmamba/src/core/transaction.cpp @@ -698,7 +698,8 @@ namespace mamba it != extract_tasks.end(); ++it) { - std::packaged_task task{ [=] { return it->run(); } }; + std::packaged_task task{ [=] + { return it->run(); } }; extract_trackers.push_back(task.get_future()); MainExecutor::instance().schedule(std::move(task)); } diff --git a/libmamba/src/solver/problems_graph.cpp b/libmamba/src/solver/problems_graph.cpp index d1da0a4984..e19d8c0597 100644 --- a/libmamba/src/solver/problems_graph.cpp +++ b/libmamba/src/solver/problems_graph.cpp @@ -265,7 +265,7 @@ namespace mamba::solver } // GCC reports dangling reference when using std::invoke with data members -#if defined(__GNUC__) && !defined(__clang__) +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 13 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdangling-reference" #endif @@ -334,7 +334,7 @@ namespace mamba::solver } } -#if defined(__GNUC__) && !defined(__clang__) +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 13 #pragma GCC diagnostic pop #endif