From 0992b51e2fe337e594f2c57bf6c01ee4d733165a Mon Sep 17 00:00:00 2001 From: Anton Danielsson Date: Tue, 21 May 2024 07:10:41 +0200 Subject: [PATCH 01/83] (#23704) Migrate/openscenegraph * openscenegraph: migrate to Conan v2 * openscenegraph: improve patching * openscenegraph: bump deps * openscenegraph: further migration * fix * Apply suggestions from code review * review * openscenegraph: bump deps * openscenegraph: make CMake dependency detection more robust * openscenegraph: fix CMake target name * openscenegraph: fix v1 build * openscenegraph: reproduce the project CMake and pkg-config structures more faithfully, export CMake vars * openscenegraph: fix v1 incompatibility * openscenegraph: drop test_v1_package * wip * wip * wip * fix test * do not convert LIBRARY to LIBRARIES * openscenegraph: re-enable patches Should fix the missing JPEG plugin issue. * add patches, move patch * minor changes * fix linter * fix freetype plugin * wip * wip * fix rebase issue * fix rebase issue * Don't replace OSG_LIBRARY_STATIC in plugins root folder * test, try to find png/gif/jpeg also on macos * Revert "test, try to find png/gif/jpeg also on macos" This reverts commit 58d4707cb268ed00ff6e449098bcf3ddfee5a961. * Add extra guard to not include png plug-in on macos * Disable a check in the test For some reason the test on Mac fails with: Looking for curl support: found (expected not found) for shared=True builds... * Revert "Disable a check in the test" This reverts commit aed59cc7b47b52ee3f4197862554b0b991aa3bf1. * Make sure curl plug-in is only enabled if requested * Try to fix issues with longpaths... * Revert "Try to fix issues with longpaths..." This reverts commit b3e2dbaf5a3675b9919e3859fa0501edf81216b0. * add back short paths to please conan 1 builds * fix some warnings * Update recipes/openscenegraph/all/patches/0009-replace-auto-ptr-in-plugins.patch Co-authored-by: Jordan Williams * Update recipes/openscenegraph/all/conanfile.py * Update recipes/openscenegraph/all/conanfile.py * Update recipes/openscenegraph/all/conanfile.py * Update recipes/openscenegraph/all/conanfile.py * Update recipes/openscenegraph/all/conanfile.py --------- Co-authored-by: Martin Valgur Co-authored-by: Petukhov Maksim Co-authored-by: Maksim Petukhov <6967052+maksim-petukhov@users.noreply.github.com> Co-authored-by: czoido Co-authored-by: Jordan Williams --- recipes/openscenegraph/all/CMakeLists.txt | 59 ++- .../all/conan-official-osg-variables.cmake | 23 ++ recipes/openscenegraph/all/conandata.yml | 42 +- recipes/openscenegraph/all/conanfile.py | 391 +++++++++++------- ...0002-Use-standard-CMake-name-for-gif.patch | 54 --- ...rect-usage-of-_LIBRARY-to-_LIBRARIES.patch | 155 ------- ...04-Allow-explicit-control-of-plugins.patch | 259 ------------ .../0007-fix-msvc-with-std-c++17.patch | 50 +++ .../patches/0008-replace-mem-fun-ref.patch | 13 + .../0009-replace-auto-ptr-in-plugins.patch | 75 ++++ .../0010-replace-ptr-fun-in-obj-plugin.patch | 24 ++ .../0011-remove-deprecated-register.patch | 187 +++++++++ .../all/test_package/CMakeLists.txt | 73 +++- .../all/test_package/conanfile.py | 46 ++- .../all/test_package/test_package.cpp | 10 +- 15 files changed, 780 insertions(+), 681 deletions(-) create mode 100644 recipes/openscenegraph/all/conan-official-osg-variables.cmake delete mode 100644 recipes/openscenegraph/all/patches/0002-Use-standard-CMake-name-for-gif.patch delete mode 100644 recipes/openscenegraph/all/patches/0003-Correct-usage-of-_LIBRARY-to-_LIBRARIES.patch delete mode 100644 recipes/openscenegraph/all/patches/0004-Allow-explicit-control-of-plugins.patch create mode 100644 recipes/openscenegraph/all/patches/0007-fix-msvc-with-std-c++17.patch create mode 100644 recipes/openscenegraph/all/patches/0008-replace-mem-fun-ref.patch create mode 100644 recipes/openscenegraph/all/patches/0009-replace-auto-ptr-in-plugins.patch create mode 100644 recipes/openscenegraph/all/patches/0010-replace-ptr-fun-in-obj-plugin.patch create mode 100644 recipes/openscenegraph/all/patches/0011-remove-deprecated-register.patch diff --git a/recipes/openscenegraph/all/CMakeLists.txt b/recipes/openscenegraph/all/CMakeLists.txt index a0749127966c05..5acc346654c579 100644 --- a/recipes/openscenegraph/all/CMakeLists.txt +++ b/recipes/openscenegraph/all/CMakeLists.txt @@ -1,23 +1,44 @@ -cmake_minimum_required(VERSION 3.1.2) +cmake_minimum_required(VERSION 3.15) project(cmake_wrapper) -include(${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(NO_OUTPUT_DIRS) +macro(custom_find_package name variable) + string(TOUPPER ${name} name_upper) + if(${variable}) + find_package(${name} ${ARGN} REQUIRED CONFIG + # Allow only Conan packages + NO_DEFAULT_PATH + PATHS ${CMAKE_PREFIX_PATH} + ) + set(${name_upper}_FOUND TRUE) + set(${name_upper}_VERSION_STRING ${${name}_VERSION_STRING}) + set(${name_upper}_INCLUDE_DIRS ${${name}_INCLUDE_DIRS}) + set(${name_upper}_INCLUDE_DIR ${${name}_INCLUDE_DIR}) + set(${name_upper}_LIBRARIES ${${name}_LIBRARIES}) + set(${name_upper}_DEFINITIONS ${${name}_DEFINITIONS}) + unset(name_upper) + else() + set(${name}_FOUND FALSE) + set(${name_upper}_FOUND FALSE) + endif() +endmacro() -# Hack to insure that conan's copy of these are used, rather than CMake's -# If this isn't here, find_package(X11) will pull in CMake's copy -find_package(Freetype QUIET) -find_package(Fontconfig QUIET) +custom_find_package(Boost OSG_WITH_ASIO) +custom_find_package(Asio OSG_WITH_ASIO) +custom_find_package(CURL OSG_WITH_CURL) +custom_find_package(Fontconfig OSG_TEXT_USE_FONTCONFIG) +custom_find_package(Freetype OSG_WITH_FREETYPE) +custom_find_package(GDAL OSG_WITH_GDAL) +custom_find_package(GIFLIB OSG_WITH_GIFLIB) +custom_find_package(GTA OSG_WITH_GTA) +custom_find_package(JPEG OSG_WITH_JPEG) +custom_find_package(Jasper OSG_WITH_JASPER) +custom_find_package(OpenEXR OSG_WITH_OPENEXR) +custom_find_package(PNG OSG_WITH_PNG) +custom_find_package(TIFF OSG_WITH_TIFF) +custom_find_package(ZLIB OSG_WITH_ZLIB) +custom_find_package(DCMTK OSG_WITH_DCMTK) +# custom_find_package(Poppler) +# custom_find_package(RSVG) +# custom_find_package(SDL2) -# Workaround limitations of the cmake_find_package generator -set(FREETYPE_FOUND ${Freetype_FOUND}) -if(FREETYPE_FOUND) - set(FREETYPE_LIBRARIES ${Freetype_LIBRARIES}) - set(FREETYPE_INCLUDE_DIRS ${Freetype_INCLUDE_DIRS}) -endif() - -if(APPLE) - add_compile_definitions("GL_SILENCE_DEPRECATION") -endif() - -add_subdirectory("source_subfolder") +add_subdirectory(src) diff --git a/recipes/openscenegraph/all/conan-official-osg-variables.cmake b/recipes/openscenegraph/all/conan-official-osg-variables.cmake new file mode 100644 index 00000000000000..636f54b308c409 --- /dev/null +++ b/recipes/openscenegraph/all/conan-official-osg-variables.cmake @@ -0,0 +1,23 @@ +# Reproduce https://github.com/openscenegraph/OpenSceneGraph/blob/master/packaging/cmake/OpenSceneGraphConfig.cmake.in +# Component-specific variables are not created. Use the component targets instead. + +# Only export these for the OpenSceneGraph config file, not FindOSG.cmake +if(NOT DEFINED OSG_LIBRARIES) + set(OPENSCENEGRAPH_FOUND TRUE) + set(OPENSCENEGRAPH_LIBRARIES ${OpenSceneGraph_LIBRARIES}) + set(OPENSCENEGRAPH_INCLUDE_DIR ${OpenSceneGraph_INCLUDE_DIRS}) + set(OPENSCENEGRAPH_INCLUDE_DIRS ${OpenSceneGraph_INCLUDE_DIRS}) + + set(OPENSCENEGRAPH_VERSION ${OpenSceneGraph_VERSION}) + set(OPENSCENEGRAPH_VERSION_STRING ${OpenSceneGraph_VERSION_STRING}) + + set(OSG_LIBRARY ${OpenSceneGraph_LIBRARIES}) + set(OSG_LIBRARIES ${OpenSceneGraph_LIBRARIES}) + set(OSG_INCLUDE_DIR ${OpenSceneGraph_INCLUDE_DIRS}) + set(OSG_INCLUDE_DIRS ${OpenSceneGraph_INCLUDE_DIRS}) +endif() + +# Reproduce https://github.com/openscenegraph/OpenSceneGraph/blob/master/CMakeModules/FindOpenThreads.cmake +set(OPENTHREADS_FOUND TRUE) +set(OPENTHREADS_INCLUDE_DIR ${OpenSceneGraph_INCLUDE_DIRS}) +set(OPENTHREADS_LIBRARY OpenThreads::OpenThreads) diff --git a/recipes/openscenegraph/all/conandata.yml b/recipes/openscenegraph/all/conandata.yml index 0f1b6a2cc47905..094e9853e6fca2 100644 --- a/recipes/openscenegraph/all/conandata.yml +++ b/recipes/openscenegraph/all/conandata.yml @@ -1,18 +1,38 @@ sources: 3.6.5: - sha256: aea196550f02974d6d09291c5d83b51ca6a03b3767e234a8c0e21322927d1e12 - url: https://github.com/openscenegraph/OpenSceneGraph/archive/OpenSceneGraph-3.6.5.tar.gz + url: "https://github.com/openscenegraph/OpenSceneGraph/archive/OpenSceneGraph-3.6.5.tar.gz" + sha256: "aea196550f02974d6d09291c5d83b51ca6a03b3767e234a8c0e21322927d1e12" patches: 3.6.5: - patch_file: patches/0001-fix-to_cmake_path-usage.patch - base_path: source_subfolder - - patch_file: patches/0002-Use-standard-CMake-name-for-gif.patch - base_path: source_subfolder - - patch_file: patches/0003-Correct-usage-of-_LIBRARY-to-_LIBRARIES.patch - base_path: source_subfolder - - patch_file: patches/0004-Allow-explicit-control-of-plugins.patch - base_path: source_subfolder + patch_description: Fix cmake paths + patch_type: portability - patch_file: patches/0005-use-JPEG-target-for-plugin.patch - base_path: source_subfolder + patch_description: This fixes building against a static libjpeg on windows + patch_type: portability - patch_file: patches/0006-Declare-result-as-LONG-for-Mingw-build.patch - base_path: source_subfolder + patch_description: Win32's ChangeDisplaySettingsEx() API function is documented as returning `LONG`, which evidently is not always the same as `unsigned int` (Mingw64.) This cause a compile error on Mingw with clang10. + patch_type: official + patch_source: https://github.com/openscenegraph/OpenSceneGraph/commit/67468cce344dd5e503aaa1063845f34720563f79 + - patch_file: patches/0007-fix-msvc-with-std-c++17.patch + patch_description: Fix to be able to build with c++17 on MSVC + patch_type: official + patch_source: https://github.com/openscenegraph/OpenSceneGraph/pull/1055 + - patch_file: patches/0008-replace-mem-fun-ref.patch + patch_description: Replaced std::mem_fun_ref usage to avoid compatiblity with modern compilers + patch_type: official + patch_source: https://github.com/openscenegraph/OpenSceneGraph/commit/8a0114a46a4bad9041297950fe3bfbb2aea6e1da + - patch_file: patches/0009-replace-auto-ptr-in-plugins.patch + patch_description: auto_ptr is removed in C++17. + patch_type: portability + patch_source: https://github.com/openscenegraph/OpenSceneGraph/pull/1246 + - patch_file: patches/0010-replace-ptr-fun-in-obj-plugin.patch + patch_description: ptr_fun is removed in C++17 + patch_type: portability + patch_source: https://github.com/openscenegraph/OpenSceneGraph/pull/1246 + - patch_file: patches/0011-remove-deprecated-register.patch + patch_description: The "register" keyword is deprecated as of C++17 + patch_type: bugfix + patch_source: + - https://github.com/openscenegraph/OpenSceneGraph/pull/1296 + - https://github.com/openscenegraph/OpenSceneGraph/pull/951 diff --git a/recipes/openscenegraph/all/conanfile.py b/recipes/openscenegraph/all/conanfile.py index 5d6b6d3a14882b..8ed902063ca316 100644 --- a/recipes/openscenegraph/all/conanfile.py +++ b/recipes/openscenegraph/all/conanfile.py @@ -1,25 +1,27 @@ +import os +import re +from pathlib import Path + from conan import ConanFile -from conan.tools.files import get, rmdir, rm, apply_conandata_patches +from conan.errors import ConanInvalidConfiguration +from conan.tools.apple import is_apple_os from conan.tools.build import cross_building +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rm, rmdir, replace_in_file from conan.tools.scm import Version -from conan.tools.apple import is_apple_os -from conan.errors import ConanInvalidConfiguration -from conans import CMake -import os -import functools - -required_conan_version = ">=1.50.0" +required_conan_version = ">=1.53.0" class OpenSceneGraphConanFile(ConanFile): name = "openscenegraph" description = "OpenSceneGraph is an open source high performance 3D graphics toolkit" - topics = ("openscenegraph", "graphics") + license = ("LGPL-2.1-only", "WxWindows-exception-3.1") url = "https://github.com/conan-io/conan-center-index" homepage = "http://www.openscenegraph.org" - license = "LGPL-2.1-only", "WxWindows-exception-3.1" + topics = ("graphics",) + package_type = "library" settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], @@ -42,11 +44,12 @@ class OpenSceneGraphConanFile(ConanFile): "with_gif": [True, False], "with_gta": [True, False], "with_jasper": [True, False], - "with_jpeg": [True, False], + "with_jpeg": ["libjpeg", "libjpeg-turbo", "mozjpeg", False], "with_openexr": [True, False], "with_png": [True, False], "with_tiff": [True, False], "with_zlib": [True, False], + "with_avfoundation": [True, False], "opengl_profile": ["gl1", "gl2", "gl3", "glCore", "gles1", "gles2", "gles3", "gles2+gles3"], } default_options = { @@ -70,21 +73,20 @@ class OpenSceneGraphConanFile(ConanFile): "with_gif": True, "with_gta": False, "with_jasper": False, - "with_jpeg": True, + "with_jpeg": "libjpeg", "with_openexr": False, "with_png": True, "with_tiff": True, "with_zlib": True, "opengl_profile": "gl2", + "with_avfoundation": True, } - short_paths = True - exports_sources = "CMakeLists.txt", "patches/*.patch" - generators = "cmake", "cmake_find_package" - @property - def _source_subfolder(self): - return "source_subfolder" + def export_sources(self): + copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) + copy(self, "conan-official-osg-variables.cmake", self.recipe_folder, self.export_sources_folder) + export_conandata_patches(self) def config_options(self): if self.settings.os == "Windows": @@ -102,163 +104,254 @@ def config_options(self): # imageio supports tiff files so the tiff plugin isn't needed on Apple platforms self.options.with_tiff = False + else: + del self.options.with_avfoundation def configure(self): if self.options.shared: - del self.options.fPIC + self.options.rm_safe("fPIC") if not self.options.with_zlib: # These require zlib support - del self.options.with_openexr - del self.options.with_png - del self.options.with_dcmtk + self.options.rm_safe("with_openexr") + self.options.rm_safe("with_png") + self.options.rm_safe("with_dcmtk") - def validate(self): - if self.options.get_safe("with_asio", False): - raise ConanInvalidConfiguration("ASIO support in OSG is broken, see https://github.com/openscenegraph/OpenSceneGraph/issues/921") - if hasattr(self, "settings_build") and cross_building(self): - raise ConanInvalidConfiguration("openscenegraph recipe cannot be cross-built yet. Contributions are welcome.") + def layout(self): + cmake_layout(self, src_folder="src") def requirements(self): - if self.options.enable_windowing_system and self.settings.os == "Linux": + if self.options.enable_windowing_system and self.settings.os in ["Linux", "FreeBSD"]: self.requires("xorg/system") self.requires("opengl/system") if self.options.use_fontconfig: self.requires("fontconfig/2.14.2") - if self.options.get_safe("with_asio", False): + if self.options.get_safe("with_asio"): # Should these be private requires? - self.requires("asio/1.22.1") - self.requires("boost/1.81.0") + self.requires("asio/1.28.1") + self.requires("boost/1.83.0") if self.options.with_curl: - self.requires("libcurl/8.0.1") + self.requires("libcurl/[>=7.78 <9]") if self.options.get_safe("with_dcmtk"): - self.requires("dcmtk/3.6.6") + self.requires("dcmtk/3.6.7") if self.options.with_freetype: - self.requires("freetype/2.13.0") + self.requires("freetype/2.13.2") if self.options.with_gdal: - self.requires("gdal/3.4.3") + self.requires("gdal/3.8.3") if self.options.get_safe("with_gif"): self.requires("giflib/5.2.1") if self.options.with_gta: self.requires("libgta/1.2.1") if self.options.with_jasper: - self.requires("jasper/2.0.33") - if self.options.get_safe("with_jpeg"): + self.requires("jasper/4.2.0") + if self.options.get_safe("with_jpeg") == "libjpeg": self.requires("libjpeg/9e") + elif self.options.get_safe("with_jpeg") == "libjpeg-turbo": + self.requires("libjpeg-turbo/3.0.2") + elif self.options.get_safe("with_jpeg") == "mozjpeg": + self.requires("mozjpeg/4.1.5") if self.options.get_safe("with_openexr"): - self.requires("openexr/3.1.7") + self.requires("openexr/3.2.3") if self.options.get_safe("with_png"): self.requires("libpng/1.6.40") if self.options.with_tiff: - self.requires("libtiff/4.5.1") + self.requires("libtiff/4.6.0") if self.options.with_zlib: - self.requires("zlib/1.2.13") - - def source(self): - get(self, **self.conan_data["sources"][self.version], destination=self._source_subfolder, strip_root=True) + self.requires("zlib/[>=1.2.11 <2]") - def _patch_sources(self): - apply_conandata_patches(self) - - for package in ("Fontconfig", "Freetype", "GDAL", "GIFLIB", "GTA", "Jasper", "OpenEXR"): - # Prefer conan's find package scripts over osg's - os.unlink(os.path.join(self._source_subfolder, "CMakeModules", "Find{}.cmake".format(package))) + def validate(self): + if self.options.get_safe("with_asio"): + raise ConanInvalidConfiguration( + "ASIO support in OSG is broken, " + "see https://github.com/openscenegraph/OpenSceneGraph/issues/921" + ) + if hasattr(self, "settings_build") and cross_building(self): + raise ConanInvalidConfiguration( + "openscenegraph recipe cannot be cross-built yet. " + "Contributions are welcome." + ) - @functools.lru_cache(1) - def _configured_cmake(self): - cmake = CMake(self) + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) - cmake.definitions["USE_3RDPARTY_BIN"] = False + def generate(self): + tc = CMakeToolchain(self) + tc.variables["USE_3RDPARTY_BIN"] = False - cmake.definitions["DYNAMIC_OPENSCENEGRAPH"] = self.options.shared - cmake.definitions["DYNAMIC_OPENTHREADS"] = self.options.shared + tc.variables["DYNAMIC_OPENSCENEGRAPH"] = self.options.shared + tc.variables["DYNAMIC_OPENTHREADS"] = self.options.shared - cmake.definitions["BUILD_OSG_APPLICATIONS"] = self.options.build_applications - cmake.definitions["BUILD_OSG_EXAMPLES"] = False + tc.variables["BUILD_OSG_APPLICATIONS"] = self.options.build_applications + tc.variables["BUILD_OSG_EXAMPLES"] = False - cmake.definitions["OSG_NOTIFY_DISABLED"] = not self.options.enable_notify - cmake.definitions["OSG_USE_DEPRECATED_API"] = self.options.enable_deprecated_api - cmake.definitions["OSG_PROVIDE_READFILE"] = self.options.enable_readfile - cmake.definitions["OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION"] = self.options.enable_ref_ptr_implicit_output_conversion - cmake.definitions["OSG_USE_REF_PTR_SAFE_DEREFERENCE"] = self.options.enable_ref_ptr_safe_dereference - cmake.definitions["OSG_ENVVAR_SUPPORTED"] = self.options.enable_envvar_support + tc.variables["OSG_NOTIFY_DISABLED"] = not self.options.enable_notify + tc.variables["OSG_USE_DEPRECATED_API"] = self.options.enable_deprecated_api + tc.variables["OSG_PROVIDE_READFILE"] = self.options.enable_readfile + tc.variables["OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION"] = self.options.enable_ref_ptr_implicit_output_conversion + tc.variables["OSG_USE_REF_PTR_SAFE_DEREFERENCE"] = self.options.enable_ref_ptr_safe_dereference + tc.variables["OSG_ENVVAR_SUPPORTED"] = self.options.enable_envvar_support if not self.options.enable_windowing_system: - cmake.definitions["OSG_WINDOWING_SYSTEM"] = None + tc.variables["OSG_WINDOWING_SYSTEM"] = None - cmake.definitions["BUILD_OSG_DEPRECATED_SERIALIZERS"] = self.options.enable_deprecated_serializers + tc.variables["BUILD_OSG_DEPRECATED_SERIALIZERS"] = self.options.enable_deprecated_serializers - cmake.definitions["OSG_TEXT_USE_FONTCONFIG"] = self.options.use_fontconfig + tc.variables["OSG_TEXT_USE_FONTCONFIG"] = self.options.use_fontconfig - cmake.definitions["OPENGL_PROFILE"] = str(self.options.opengl_profile).upper() + tc.variables["OPENGL_PROFILE"] = str(self.options.opengl_profile).upper() # Disable option dependencies unless we have a package for them - cmake.definitions["OSG_WITH_FREETYPE"] = self.options.with_freetype - cmake.definitions["OSG_WITH_OPENEXR"] = self.options.get_safe("with_openexr", False) - cmake.definitions["OSG_WITH_INVENTOR"] = False - cmake.definitions["OSG_WITH_JASPER"] = self.options.with_jasper - cmake.definitions["OSG_WITH_OPENCASCADE"] = False - cmake.definitions["OSG_WITH_FBX"] = False - cmake.definitions["OSG_WITH_ZLIB"] = self.options.with_zlib - cmake.definitions["OSG_WITH_GDAL"] = self.options.with_gdal - cmake.definitions["OSG_WITH_GTA"] = self.options.with_gta - cmake.definitions["OSG_WITH_CURL"] = self.options.with_curl - cmake.definitions["OSG_WITH_LIBVNCSERVER"] = False - cmake.definitions["OSG_WITH_DCMTK"] = self.options.get_safe("with_dcmtk", False) - cmake.definitions["OSG_WITH_FFMPEG"] = False - cmake.definitions["OSG_WITH_DIRECTSHOW"] = False - cmake.definitions["OSG_WITH_SDL"] = False - cmake.definitions["OSG_WITH_POPPLER"] = False - cmake.definitions["OSG_WITH_RSVG"] = False - cmake.definitions["OSG_WITH_NVTT"] = False - cmake.definitions["OSG_WITH_ASIO"] = self.options.get_safe("with_asio", False) - cmake.definitions["OSG_WITH_ZEROCONF"] = False - cmake.definitions["OSG_WITH_LIBLAS"] = False - cmake.definitions["OSG_WITH_GIF"] = self.options.get_safe("with_gif", False) - cmake.definitions["OSG_WITH_JPEG"] = self.options.get_safe("with_jpeg", False) - cmake.definitions["OSG_WITH_PNG"] = self.options.get_safe("with_png", False) - cmake.definitions["OSG_WITH_TIFF"] = self.options.with_tiff + tc.variables["OSG_WITH_FREETYPE"] = self.options.with_freetype + tc.variables["OSG_WITH_OPENEXR"] = self.options.get_safe("with_openexr", False) + tc.variables["OSG_WITH_INVENTOR"] = False + tc.variables["OSG_WITH_JASPER"] = self.options.with_jasper + tc.variables["OSG_WITH_OPENCASCADE"] = False + tc.variables["OSG_WITH_FBX"] = False + tc.variables["OSG_WITH_ZLIB"] = self.options.with_zlib + tc.variables["OSG_WITH_GDAL"] = self.options.with_gdal + tc.variables["OSG_WITH_GTA"] = self.options.with_gta + tc.variables["OSG_WITH_CURL"] = self.options.with_curl + tc.variables["OSG_WITH_LIBVNCSERVER"] = False + tc.variables["OSG_WITH_DCMTK"] = self.options.get_safe("with_dcmtk", False) + tc.variables["OSG_WITH_FFMPEG"] = False + tc.variables["OSG_WITH_DIRECTSHOW"] = False + tc.variables["OSG_WITH_SDL"] = False + tc.variables["OSG_WITH_POPPLER"] = False + tc.variables["OSG_WITH_RSVG"] = False + tc.variables["OSG_WITH_NVTT"] = False + tc.variables["OSG_WITH_ASIO"] = self.options.get_safe("with_asio", False) + tc.variables["OSG_WITH_ZEROCONF"] = False + tc.variables["OSG_WITH_LIBLAS"] = False + tc.variables["OSG_WITH_GIFLIB"] = self.options.get_safe("with_gif", False) + tc.variables["OSG_WITH_JPEG"] = self.options.get_safe("with_jpeg", False) + tc.variables["OSG_WITH_PNG"] = self.options.get_safe("with_png", False) + tc.variables["OSG_WITH_TIFF"] = self.options.with_tiff + + if (self.options.get_safe("with_avfoundation")): + tc.variables["OSG_WITH_AV_FOUNDATION"] = True if self.settings.os == "Windows": # osg has optional quicktime support on Windows - cmake.definitions["CMAKE_DISABLE_FIND_PACKAGE_QuickTime"] = True + tc.variables["CMAKE_DISABLE_FIND_PACKAGE_QuickTime"] = True + + tc.variables["OSG_MSVC_VERSIONED_DLL"] = False - cmake.definitions["OSG_MSVC_VERSIONED_DLL"] = False + if is_apple_os(self): + tc.preprocessor_definitions["GL_SILENCE_DEPRECATION"] = "1" - cmake.configure() + tc.generate() - return cmake + deps = CMakeDeps(self) + deps.set_property("freetype", "cmake_module_file_name", "Freetype") + deps.set_property("giflib", "cmake_file_name", "GIFLIB") + deps.generate() + + def _patch_sources(self): + for package in ["Fontconfig", "Freetype", "GDAL", "GIFLIB", "GTA", "Jasper", "OpenEXR"]: + # Prefer conan's find package scripts over osg's + os.unlink(os.path.join(self.source_folder, "CMakeModules", f"Find{package}.cmake")) + plugins_root = Path(self.source_path.joinpath("src", "osgPlugins")) + for path in plugins_root.rglob("CMakeLists.txt"): + if path.parent == plugins_root: + # Don't replace in the root dir + continue + content = path.read_text() + # Correct usage of *_LIBRARY variables to *_LIBRARIES + content = content.replace("_LIBRARY", "_LIBRARIES") + # Allow explicit control of plugins via OSG_WITH_* variables + # e.g. replace IF(FFMPEG_FOUND) with IF(OSG_WITH_FFMPEG) + content = re.sub(r"\b([A-Z]+)_FOUND\b", r"OSG_WITH_\1", content) + path.write_text(content) + for path in self.source_path.joinpath(self.source_folder, "CMakeModules").rglob("*.cmake"): + content = path.read_text(encoding='utf-8', errors='ignore') + lib_match = re.search(r'FIND_LIBRARY\(([^ ]+)_LIBRARY', content) + if lib_match: + library_name = lib_match.group(1) + new_content = re.sub(rf'\b{library_name}_LIBRARY\b', rf'{library_name}_LIBRARIES', content) + path.write_text(new_content) + + apply_conandata_patches(self) + + # Not sure why, but CMake fails to find the EXPAT::EXPAT target created by Conan when Fontconfig is found as a module. + replace_in_file(self, os.path.join(self.source_folder, "src", "osgText", "CMakeLists.txt"), + "find_package(Fontconfig MODULE)", "find_package(Fontconfig CONFIG REQUIRED)") + replace_in_file(self, os.path.join(self.source_folder, "src", "osgPlugins", "freetype", "CMakeLists.txt"), + "SET(TARGET_EXTERNAL_LIBRARIES ${FREETYPE_LIBRARIES} )", "SET(TARGET_EXTERNAL_LIBRARIES Freetype::Freetype)") + + # osg uses imageio on Apple platforms. PNG_FOUND will be set by `FIND_PACKAGE(Freetype)` + # in the OSG cmake code and without this patch the png plugin will be included even though it shouldn't. + replace_in_file(self, os.path.join(self.source_folder, "src", "osgPlugins", "CMakeLists.txt"), + "PNG_FOUND", "PNG_FOUND AND OSG_WITH_PNG") + + # Only add curl plugin if actually requested. + replace_in_file(self, os.path.join(self.source_folder, "src", "osgPlugins", "CMakeLists.txt"), + "CURL_FOUND", "CURL_FOUND AND OSG_WITH_CURL") def build(self): self._patch_sources() - - self._configured_cmake().build() + cmake = CMake(self) + cmake.configure(build_script_folder=self.source_path.parent) + cmake.build() def package(self): - self._configured_cmake().install() + cmake = CMake(self) + cmake.install() - self.copy(pattern="LICENSE.txt", dst="licenses", src=self._source_subfolder) + copy(self, "LICENSE.txt", dst=os.path.join(self.package_folder, "licenses"), src=self.source_folder) + copy(self, "conan-official-osg-variables.cmake", + dst=os.path.join(self.package_folder, "lib", "cmake"), + src=os.path.join(self.source_folder, os.pardir)) rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) rm(self, "*.pdb", self.package_folder, True) def package_info(self): - # FindOpenSceneGraph.cmake is shipped with cmake and is a traditional cmake script - # It doesn't setup targets and only provides a few variables: - # - OPENSCENEGRAPH_FOUND - # - OPENSCENEGRAPH_VERSION - # - OPENSCENEGRAPH_INCLUDE_DIRS - # - OPENSCENEGRAPH_LIBRARIES - # Unfortunately, the cmake_find_package generators don't currently allow directly setting variables, - # but it will set the last three of these if the name of the package is OPENSCENEGRAPH (it uses - # the filename for the first, so OpenSceneGraph_FOUND gets set, not OPENSCENEGRAPH_FOUND) - # TODO: set OPENSCENEGRAPH_FOUND in cmake_find_package and cmake_find_package_multi - self.cpp_info.filenames["cmake_find_package"] = "OpenSceneGraph" - self.cpp_info.filenames["cmake_find_package_multi"] = "OpenSceneGraph" - self.cpp_info.names["cmake_find_package"] = "OPENSCENEGRAPH" - self.cpp_info.names["cmake_find_package_multi"] = "OPENSCENEGRAPH" + # https://github.com/openscenegraph/OpenSceneGraph/blob/master/packaging/cmake/OpenSceneGraphConfig.cmake.in + self.cpp_info.set_property("cmake_file_name", "OpenSceneGraph") + # https://github.com/openscenegraph/OpenSceneGraph/blob/master/CMakeModules/FindOSG.cmake + self.cpp_info.set_property("cmake_module_file_name", "OSG") + # Disable the automatically created targets, use the "openscenegraph" component instead + self.cpp_info.set_property("pkg_config_name", None) + self.cpp_info.set_property("cmake_target_name", None) + + # Export CMake variables set by the project + self.cpp_info.builddirs.append(os.path.join("lib", "cmake")) + cmake_vars_module = os.path.join("lib", "cmake", "conan-official-osg-variables.cmake") + self.cpp_info.set_property("cmake_build_modules", [cmake_vars_module]) + + # The main component that depends on all non-plugin components + # https://github.com/openscenegraph/OpenSceneGraph/blob/master/packaging/pkgconfig/openscenegraph.pc.in + openscenegraph = self.cpp_info.components["openscenegraph"] + openscenegraph.set_property("pkg_config_name", "openscenegraph") + # Unofficial CMake target + openscenegraph.set_property("cmake_target_name", "OpenSceneGraph::OpenSceneGraph") + openscenegraph.requires = [ + "osg", + "osgDB", + "osgFX", + "osgGA", + "osgParticle", + "osgSim", + "osgText", + "osgUtil", + "osgTerrain", + "osgManipulator", + "osgViewer", + "osgWidget", + "osgShadow", + "osgAnimation", + "osgVolume", + ] + + # TODO: to remove in conan v2 once cmake_find_package_* generators removed + self.cpp_info.names["cmake_find_package"] = "OpenSceneGraph" + self.cpp_info.names["cmake_find_package_multi"] = "OpenSceneGraph" + openscenegraph.names["cmake_find_package"] = "OpenSceneGraph" + openscenegraph.names["cmake_find_package_multi"] = "OpenSceneGraph" + self.cpp_info.build_modules["cmake_find_package"].append(cmake_vars_module) + self.cpp_info.build_modules["cmake_find_package_multi"].append(cmake_vars_module) if self.settings.build_type == "Debug": postfix = "d" @@ -275,49 +368,52 @@ def setup_plugin(plugin): plugin_library.libs = [] if self.options.shared else [lib + postfix] plugin_library.requires = ["OpenThreads", "osg", "osgDB", "osgUtil"] if not self.options.shared: - plugin_library.libdirs = [os.path.join("lib", "osgPlugins-{}".format(self.version))] + plugin_library.libdirs = [os.path.join("lib", f"osgPlugins-{self.version}")] return plugin_library def setup_serializers(lib): plugins = [] if lib not in ("osgDB", "osgWidget", "osgPresentation"): - plugins.append("serializers_{}".format(lib.lower())) + plugins.append(f"serializers_{lib.lower()}") if self.options.enable_deprecated_serializers: if lib not in ("osgUtil", "osgDB", "osgGA", "osgManipulator", "osgUI", "osgPresentation"): - plugins.append("deprecated_{}".format(lib.lower())) + plugins.append(f"deprecated_{lib.lower()}") for plugin in plugins: setup_plugin(plugin).requires.append(lib) def setup_library(lib): library = self.cpp_info.components[lib] library.libs = [lib + postfix] - library.names["pkg_config"] = "openscenegraph-{}".format(lib) + library.set_property("pkg_config_name", f"openscenegraph-{lib}") setup_serializers(lib) return library # Core libraries # requires obtained from osg's source code - # TODO: FindOpenThreads.cmake is shipped with CMake, so we should generate separate - # files for it with cmake_find_package and cmake_find_package_multi + # The project installs FindOpenThreads.cmake as a separate module. + # Conan cannot recreate that, but let's export it as a component instead. + # https://github.com/openscenegraph/OpenSceneGraph/blob/master/CMakeModules/FindOpenThreads.cmake + # https://github.com/openscenegraph/OpenSceneGraph/blob/master/packaging/pkgconfig/openthreads.pc.in library = self.cpp_info.components["OpenThreads"] library.libs = ["OpenThreads" + postfix] - library.names["pkg_config"] = "openthreads" - if self.settings.os == "Linux": + library.set_property("pkg_config_name", "openthreads") + library.set_property("cmake_target_name", "OpenThreads::OpenThreads") + if self.settings.os in ["Linux", "FreeBSD"]: library.system_libs = ["pthread"] library = setup_library("osg") library.requires = ["OpenThreads", "opengl::opengl"] - if self.settings.os == "Linux": + if self.settings.os in ["Linux", "FreeBSD"]: library.system_libs = ["m", "rt", "dl"] if not self.options.shared: library.defines.append("OSG_LIBRARY_STATIC") library = setup_library("osgDB") library.requires = ["osg", "osgUtil", "OpenThreads"] - if self.settings.os == "Linux": + if self.settings.os in ["Linux", "FreeBSD"]: library.system_libs = ["dl"] - elif self.settings.os == "Macos": + elif is_apple_os(self): library.frameworks = ["Carbon", "Cocoa"] if self.options.with_zlib: library.requires.append("zlib::zlib") @@ -333,7 +429,7 @@ def setup_library(lib): library = setup_library("osgViewer") library.requires = ["osgGA", "osgText", "osgDB", "osgUtil", "osg"] if self.options.enable_windowing_system: - if self.settings.os == "Linux": + if self.settings.os in ["Linux", "FreeBSD"]: library.requires.append("xorg::xorg") elif is_apple_os(self): library.frameworks = ["Cocoa"] @@ -350,7 +446,8 @@ def setup_library(lib): setup_library("osgSim").requires = ["osgText", "osgUtil", "osgDB", "osg", "OpenThreads"] setup_library("osgTerrain").requires = ["osgUtil", "osgDB", "osg", "OpenThreads"] setup_library("osgWidget").requires = ["osgText", "osgViewer", "osgDB", "osg", "OpenThreads"] - setup_library("osgPresentation").requires = ["osgViewer", "osgUI", "osgWidget", "osgManipulator", "osgVolume", "osgFX", "osgText", "osgGA", "osgUtil", "osgDB", "osg", "OpenThreads"] + setup_library("osgPresentation").requires = ["osgViewer", "osgUI", "osgWidget", "osgManipulator", "osgVolume", + "osgFX", "osgText", "osgGA", "osgUtil", "osgDB", "osg", "OpenThreads"] # Start of plugins @@ -369,7 +466,7 @@ def setup_library(lib): setup_plugin("osg") plugin = setup_plugin("ive") - plugin.requires.extend(("osgSim", "osgFX", "osgText", "osgTerrain", "osgVolume")) + plugin.requires.extend(["osgSim", "osgFX", "osgText", "osgTerrain", "osgVolume"]) if self.options.with_zlib: plugin.requires.append("zlib::zlib") @@ -390,8 +487,12 @@ def setup_library(lib): setup_plugin("vtf") setup_plugin("ktx") - if self.options.get_safe("with_jpeg"): + if self.options.get_safe("with_jpeg") == "libjpeg": setup_plugin("jpeg").requires.append("libjpeg::libjpeg") + elif self.options.get_safe("with_jpeg") == "libjpeg-turbo": + setup_plugin("jpeg").requires.append("libjpeg-turbo::jpeg") + elif self.options.get_safe("with_jpeg") == "mozjpeg": + setup_plugin("jpeg").requires.append("mozjpeg::libjpeg") if self.options.with_jasper: setup_plugin("jp2").requires.append("jasper::jasper") @@ -403,13 +504,13 @@ def setup_library(lib): setup_plugin("gif").requires.append("giflib::giflib") if self.options.get_safe("with_png"): - setup_plugin("png").requires.extend(("libpng::libpng", "zlib::zlib")) + setup_plugin("png").requires.extend(["libpng::libpng", "zlib::zlib"]) if self.options.with_tiff: setup_plugin("tiff").requires.append("libtiff::libtiff") if self.options.with_gdal: - setup_plugin("gdal").requires.extend(("osgTerrain", "gdal::gdal")) + setup_plugin("gdal").requires.extend(["osgTerrain", "gdal::gdal"]) setup_plugin("ogr").requires.append("gdal::gdal") if self.options.with_gta: @@ -418,13 +519,13 @@ def setup_library(lib): # 3D Image plugins if self.options.get_safe("with_dcmtk"): plugin = setup_plugin("dicom") - plugin.requires.extend(("osgVolume", "dcmtk::dcmtk")) + plugin.requires.extend(["osgVolume", "dcmtk::dcmtk"]) if self.settings.os == "Windows": plugin.system_libs = ["wsock32", "ws2_32"] # 3rd party 3d plugins setup_plugin("3dc") - setup_plugin("p3d").requires.extend(("osgGA", "osgText", "osgVolume", "osgFX", "osgViewer", "osgPresentation")) + setup_plugin("p3d").requires.extend(["osgGA", "osgText", "osgVolume", "osgFX", "osgViewer", "osgPresentation"]) if self.options.with_curl: plugin = setup_plugin("curl") @@ -462,15 +563,15 @@ def setup_library(lib): setup_plugin("md2") setup_plugin("osgtgz") setup_plugin("tgz") - setup_plugin("shp").requires.extend(("osgSim", "osgTerrain")) + setup_plugin("shp").requires.extend(["osgSim", "osgTerrain"]) setup_plugin("txf").requires.append("osgText") setup_plugin("bsp") setup_plugin("mdl") - setup_plugin("gles").requires.extend(("osgUtil", "osgAnimation")) - setup_plugin("osgjs").requires.extend(("osgAnimation", "osgSim")) + setup_plugin("gles").requires.extend(["osgUtil", "osgAnimation"]) + setup_plugin("osgjs").requires.extend(["osgAnimation", "osgSim"]) setup_plugin("lwo").requires.append("osgFX") setup_plugin("ply") - setup_plugin("txp").requires.extend(("osgSim", "osgText")) + setup_plugin("txp").requires.extend(["osgSim", "osgText"]) # with_ffmpeg # setup_plugin("ffmpeg") @@ -484,16 +585,20 @@ def setup_library(lib): if is_apple_os(self): setup_plugin("imageio").frameworks = ["Accelerate"] - if ((self.settings.os == "Macos" and self.settings.os.version and Version(self.settings.os.version) >= "10.8") - or (self.settings.os == "iOS" and Version(self.settings.os.version) >= "6.0")): + if (self.options.get_safe("with_avfoundation")): plugin = setup_plugin("avfoundation") plugin.requires.append("osgViewer") plugin.frameworks = ["AVFoundation", "Cocoa", "CoreVideo", "CoreMedia", "QuartzCore"] - if self.settings.os == "Macos" and self.settings.os.version and Version(self.settings.os.version) <= "10.6" and self.settings.arch == "x86": + if ( + is_apple_os(self) + and self.settings.os.version + and Version(self.settings.os.version) <= "10.6" + and self.settings.arch == "x86" + ): setup_plugin("qt").frameworks = ["QuickTime"] - if self.settings.os == "Macos" and self.settings.arch == "x86": + if is_apple_os(self) and self.settings.arch == "x86": plugin = setup_plugin("QTKit") plugin.requires.append("osgViewer") plugin.frameworks = ["QTKit", "Cocoa", "QuickTime", "CoreVideo"] @@ -502,7 +607,7 @@ def setup_library(lib): # setup_plugin("nvtt") if self.options.with_freetype: - setup_plugin("freetype").requires.extend(("osgText", "freetype::freetype")) + setup_plugin("freetype").requires.extend(["osgText", "freetype::freetype"]) if self.options.with_zlib: setup_plugin("zip") @@ -535,7 +640,7 @@ def setup_library(lib): # setup_plugin("sdl") if self.options.get_safe("with_asio", False): - setup_plugin("resthttp").requires.extend(("osgPresentation", "asio::asio", "boost::boost")) + setup_plugin("resthttp").requires.extend(["osgPresentation", "asio::asio", "boost::boost"]) # with_zeroconf # setup_plugin("zeroconf") diff --git a/recipes/openscenegraph/all/patches/0002-Use-standard-CMake-name-for-gif.patch b/recipes/openscenegraph/all/patches/0002-Use-standard-CMake-name-for-gif.patch deleted file mode 100644 index 7a75a5c3262282..00000000000000 --- a/recipes/openscenegraph/all/patches/0002-Use-standard-CMake-name-for-gif.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 17ad9caac56282e89d0e6a62c9564b99e2736225 Mon Sep 17 00:00:00 2001 -From: "R. Andrew Ohana" -Date: Thu, 17 Sep 2020 16:51:45 -0700 -Subject: [PATCH 2/5] Use standard CMake name for gif - ---- - CMakeLists.txt | 2 +- - src/osgPlugins/CMakeLists.txt | 2 +- - src/osgPlugins/gif/CMakeLists.txt | 4 ++-- - 3 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0ef2edd33..5e0c8f349 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -813,7 +813,7 @@ ENDIF(BUILD_OSG_EXAMPLES AND NOT ANDROID) - # can use Quicktime. - IF(NOT ANDROID) - IF(NOT APPLE) -- FIND_PACKAGE(GIFLIB) -+ FIND_PACKAGE(GIF) - FIND_PACKAGE(JPEG) - FIND_PACKAGE(PNG) - FIND_PACKAGE(TIFF) -diff --git a/src/osgPlugins/CMakeLists.txt b/src/osgPlugins/CMakeLists.txt -index 812550412..2a88684b5 100644 ---- a/src/osgPlugins/CMakeLists.txt -+++ b/src/osgPlugins/CMakeLists.txt -@@ -108,7 +108,7 @@ ENDIF() - IF(OPENEXR_FOUND AND ZLIB_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) - ADD_PLUGIN_DIRECTORY(exr) - ENDIF() --IF(GIFLIB_FOUND) -+IF(GIF_FOUND) - ADD_PLUGIN_DIRECTORY(gif) - ENDIF() - IF(PNG_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -diff --git a/src/osgPlugins/gif/CMakeLists.txt b/src/osgPlugins/gif/CMakeLists.txt -index 642339af1..0db0296cc 100644 ---- a/src/osgPlugins/gif/CMakeLists.txt -+++ b/src/osgPlugins/gif/CMakeLists.txt -@@ -1,7 +1,7 @@ --INCLUDE_DIRECTORIES( ${GIFLIB_INCLUDE_DIR} ) -+INCLUDE_DIRECTORIES( ${GIF_INCLUDE_DIR} ) - - SET(TARGET_SRC ReaderWriterGIF.cpp ) --SET(TARGET_LIBRARIES_VARS GIFLIB_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS GIF_LIBRARY ) - #### end var setup ### - SETUP_PLUGIN(gif) - --- -2.21.0.windows.1 - diff --git a/recipes/openscenegraph/all/patches/0003-Correct-usage-of-_LIBRARY-to-_LIBRARIES.patch b/recipes/openscenegraph/all/patches/0003-Correct-usage-of-_LIBRARY-to-_LIBRARIES.patch deleted file mode 100644 index b3965bd4897ebf..00000000000000 --- a/recipes/openscenegraph/all/patches/0003-Correct-usage-of-_LIBRARY-to-_LIBRARIES.patch +++ /dev/null @@ -1,155 +0,0 @@ -From 4925ff028681f79b8c0cb1d8e0772ca026c6e63e Mon Sep 17 00:00:00 2001 -From: "R. Andrew Ohana" -Date: Thu, 17 Sep 2020 17:06:49 -0700 -Subject: [PATCH 3/5] Correct usage of *_LIBRARY to *_LIBRARIES - ---- - src/osgPlugins/curl/CMakeLists.txt | 4 ++-- - src/osgPlugins/gdal/CMakeLists.txt | 2 +- - src/osgPlugins/gif/CMakeLists.txt | 2 +- - src/osgPlugins/gta/CMakeLists.txt | 2 +- - src/osgPlugins/jp2/CMakeLists.txt | 2 +- - src/osgPlugins/jpeg/CMakeLists.txt | 2 +- - src/osgPlugins/ogr/CMakeLists.txt | 2 +- - src/osgPlugins/png/CMakeLists.txt | 2 +- - src/osgPlugins/tiff/CMakeLists.txt | 2 +- - src/osgPlugins/vnc/CMakeLists.txt | 2 +- - 10 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/src/osgPlugins/curl/CMakeLists.txt b/src/osgPlugins/curl/CMakeLists.txt -index 667631f07..4afb738c7 100644 ---- a/src/osgPlugins/curl/CMakeLists.txt -+++ b/src/osgPlugins/curl/CMakeLists.txt -@@ -23,11 +23,11 @@ SET(TARGET_H - - IF(ZLIB_FOUND) - SET(TARGET_LIBRARIES_VARS -- CURL_LIBRARY -+ CURL_LIBRARIES - ZLIB_LIBRARIES) - ELSE() - SET(TARGET_LIBRARIES_VARS -- CURL_LIBRARY) -+ CURL_LIBRARIES) - ENDIF() - - IF(WIN32 OR MINGW) -diff --git a/src/osgPlugins/gdal/CMakeLists.txt b/src/osgPlugins/gdal/CMakeLists.txt -index f1b670701..353bc9fc6 100644 ---- a/src/osgPlugins/gdal/CMakeLists.txt -+++ b/src/osgPlugins/gdal/CMakeLists.txt -@@ -9,7 +9,7 @@ SET(TARGET_H - DataSetLayer.h - ) - --SET(TARGET_LIBRARIES_VARS GDAL_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS GDAL_LIBRARIES ) - SET(TARGET_ADDED_LIBRARIES osgTerrain ) - - IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -diff --git a/src/osgPlugins/gif/CMakeLists.txt b/src/osgPlugins/gif/CMakeLists.txt -index 0db0296cc..99d1e26dc 100644 ---- a/src/osgPlugins/gif/CMakeLists.txt -+++ b/src/osgPlugins/gif/CMakeLists.txt -@@ -1,7 +1,7 @@ - INCLUDE_DIRECTORIES( ${GIF_INCLUDE_DIR} ) - - SET(TARGET_SRC ReaderWriterGIF.cpp ) --SET(TARGET_LIBRARIES_VARS GIF_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS GIF_LIBRARIES ) - #### end var setup ### - SETUP_PLUGIN(gif) - -diff --git a/src/osgPlugins/gta/CMakeLists.txt b/src/osgPlugins/gta/CMakeLists.txt -index 2b910a628..16466fefc 100644 ---- a/src/osgPlugins/gta/CMakeLists.txt -+++ b/src/osgPlugins/gta/CMakeLists.txt -@@ -2,7 +2,7 @@ INCLUDE_DIRECTORIES( ${GTA_INCLUDE_DIRS} ) - - SET(TARGET_SRC ReaderWriterGTA.cpp ) - --SET(TARGET_LIBRARIES_VARS GTA_LIBRARY) -+SET(TARGET_LIBRARIES_VARS GTA_LIBRARIES) - - #### end var setup ### - SETUP_PLUGIN(gta) -diff --git a/src/osgPlugins/jp2/CMakeLists.txt b/src/osgPlugins/jp2/CMakeLists.txt -index b95537680..adcd84f64 100644 ---- a/src/osgPlugins/jp2/CMakeLists.txt -+++ b/src/osgPlugins/jp2/CMakeLists.txt -@@ -2,7 +2,7 @@ INCLUDE_DIRECTORIES( ${JASPER_INCLUDE_DIR} ) - - SET(TARGET_SRC ReaderWriterJP2.cpp ) - --SET(TARGET_LIBRARIES_VARS JASPER_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS JASPER_LIBRARIES ) - - IF(WIN32) - ADD_DEFINITIONS(-DJAS_WIN_MSVC_BUILD) -diff --git a/src/osgPlugins/jpeg/CMakeLists.txt b/src/osgPlugins/jpeg/CMakeLists.txt -index 7117713a0..2d290a29d 100644 ---- a/src/osgPlugins/jpeg/CMakeLists.txt -+++ b/src/osgPlugins/jpeg/CMakeLists.txt -@@ -5,6 +5,6 @@ SET(TARGET_SRC - ReaderWriterJPEG.cpp - ) - --SET(TARGET_LIBRARIES_VARS JPEG_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS JPEG_LIBRARIES ) - #### end var setup ### - SETUP_PLUGIN(jpeg) -diff --git a/src/osgPlugins/ogr/CMakeLists.txt b/src/osgPlugins/ogr/CMakeLists.txt -index 01b71e360..ea8b9706a 100644 ---- a/src/osgPlugins/ogr/CMakeLists.txt -+++ b/src/osgPlugins/ogr/CMakeLists.txt -@@ -2,7 +2,7 @@ INCLUDE_DIRECTORIES( ${GDAL_INCLUDE_DIR} ) - - SET(TARGET_SRC ReaderWriterOGR.cpp) - --SET(TARGET_LIBRARIES_VARS GDAL_LIBRARY ) -+SET(TARGET_LIBRARIES_VARS GDAL_LIBRARIES ) - - IF(CMAKE_COMPILER_IS_GNUCXX) - # Remove -Wshadow flag as it barfs on ffmoeg headers -diff --git a/src/osgPlugins/png/CMakeLists.txt b/src/osgPlugins/png/CMakeLists.txt -index 33df903d2..c4a6a2acc 100644 ---- a/src/osgPlugins/png/CMakeLists.txt -+++ b/src/osgPlugins/png/CMakeLists.txt -@@ -5,7 +5,7 @@ IF(OSG_CPP_EXCEPTIONS_AVAILABLE) - ENDIF() - - SET(TARGET_SRC ReaderWriterPNG.cpp ) --SET(TARGET_LIBRARIES_VARS PNG_LIBRARY ZLIB_LIBRARIES ) -+SET(TARGET_LIBRARIES_VARS PNG_LIBRARIES ZLIB_LIBRARIES ) - - - #### end var setup ### -diff --git a/src/osgPlugins/tiff/CMakeLists.txt b/src/osgPlugins/tiff/CMakeLists.txt -index fc945d68e..6b856eab2 100644 ---- a/src/osgPlugins/tiff/CMakeLists.txt -+++ b/src/osgPlugins/tiff/CMakeLists.txt -@@ -2,7 +2,7 @@ INCLUDE_DIRECTORIES( ${TIFF_INCLUDE_DIR} ) - - SET(TARGET_SRC ReaderWriterTIFF.cpp ) - --SET(TARGET_LIBRARIES_VARS TIFF_LIBRARY) -+SET(TARGET_LIBRARIES_VARS TIFF_LIBRARIES) - - #### end var setup ### - SETUP_PLUGIN(tiff) -diff --git a/src/osgPlugins/vnc/CMakeLists.txt b/src/osgPlugins/vnc/CMakeLists.txt -index 9a54b2bf2..49bb2dce4 100644 ---- a/src/osgPlugins/vnc/CMakeLists.txt -+++ b/src/osgPlugins/vnc/CMakeLists.txt -@@ -5,7 +5,7 @@ INCLUDE_DIRECTORIES(${LIBVNCSERVER_INCLUDE_DIR}) - SET(TARGET_EXTERNAL_LIBRARIES - ${LIBVNCCLIENT_LIBRARY} - ${ZLIB_LIBRARIES} -- ${JPEG_LIBRARY} ) -+ ${JPEG_LIBRARIES} ) - - SET(TARGET_ADDED_LIBRARIES osgWidget ) - --- -2.21.0.windows.1 - diff --git a/recipes/openscenegraph/all/patches/0004-Allow-explicit-control-of-plugins.patch b/recipes/openscenegraph/all/patches/0004-Allow-explicit-control-of-plugins.patch deleted file mode 100644 index 19caf4dfed5372..00000000000000 --- a/recipes/openscenegraph/all/patches/0004-Allow-explicit-control-of-plugins.patch +++ /dev/null @@ -1,259 +0,0 @@ -From 04859156034c6762338411d5f2c07d02d0a7b814 Mon Sep 17 00:00:00 2001 -From: "R. Andrew Ohana" -Date: Thu, 17 Sep 2020 17:25:12 -0700 -Subject: [PATCH 4/5] Allow explicit control of plugins - ---- - src/osgDB/CMakeLists.txt | 8 ++-- - src/osgPlugins/CMakeLists.txt | 58 ++++++++++++++--------------- - src/osgPlugins/curl/CMakeLists.txt | 4 +- - src/osgPlugins/dicom/CMakeLists.txt | 2 +- - src/osgPlugins/ive/CMakeLists.txt | 2 +- - 5 files changed, 37 insertions(+), 37 deletions(-) - -diff --git a/src/osgDB/CMakeLists.txt b/src/osgDB/CMakeLists.txt -index 340aae095..59b8b3a0d 100644 ---- a/src/osgDB/CMakeLists.txt -+++ b/src/osgDB/CMakeLists.txt -@@ -147,19 +147,19 @@ IF(AV_FOUNDATION_FOUND) - ADD_DEFINITIONS(-DUSE_AV_FOUNDATION) - ENDIF() - --IF(FFMPEG_FOUND) -+IF(OSG_WITH_FFMPEG) - ADD_DEFINITIONS(-DUSE_FFMPEG) - ENDIF() - --IF(INVENTOR_FOUND) -+IF(OSG_WITH_INVENTOR) - ADD_DEFINITIONS(-DUSE_INVENTOR) - ENDIF() - --IF(OPENVRML_FOUND) -+IF(OSG_WITH_OPENVRML) - ADD_DEFINITIONS(-DUSE_VRML) - ENDIF() - --IF( ZLIB_FOUND ) -+IF(OSG_WITH_ZLIB) - ADD_DEFINITIONS( -DUSE_ZLIB ) - INCLUDE_DIRECTORIES( ${ZLIB_INCLUDE_DIR} ) - SET(COMPRESSION_LIBRARIES ZLIB_LIBRARIES) -diff --git a/src/osgPlugins/CMakeLists.txt b/src/osgPlugins/CMakeLists.txt -index 2a88684b5..24dc68667 100644 ---- a/src/osgPlugins/CMakeLists.txt -+++ b/src/osgPlugins/CMakeLists.txt -@@ -99,29 +99,29 @@ ADD_PLUGIN_DIRECTORY(dot) - ADD_PLUGIN_DIRECTORY(vtf) - ADD_PLUGIN_DIRECTORY(ktx) - --IF(JPEG_FOUND) -+IF(OSG_WITH_JPEG) - ADD_PLUGIN_DIRECTORY(jpeg) - ENDIF() --IF(JASPER_FOUND) -+IF(OSG_WITH_JASPER) - ADD_PLUGIN_DIRECTORY(jp2) - ENDIF() --IF(OPENEXR_FOUND AND ZLIB_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_OPENEXR) - ADD_PLUGIN_DIRECTORY(exr) - ENDIF() --IF(GIF_FOUND) -+IF(OSG_WITH_GIF) - ADD_PLUGIN_DIRECTORY(gif) - ENDIF() --IF(PNG_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_PNG) - ADD_PLUGIN_DIRECTORY(png) - ENDIF() --IF(TIFF_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_TIFF) - ADD_PLUGIN_DIRECTORY(tiff) - ENDIF() --IF(GDAL_FOUND) -+IF(OSG_WITH_GDAL) - ADD_PLUGIN_DIRECTORY(gdal) - ADD_PLUGIN_DIRECTORY(ogr) - ENDIF() --IF(GTA_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_GTA) - ADD_PLUGIN_DIRECTORY(gta) - ENDIF() - -@@ -130,9 +130,9 @@ ENDIF() - # - # 3D Image plugins - # --IF(DCMTK_FOUND AND ZLIB_FOUND) -+IF(OSG_WITH_DCMTK) - ADD_PLUGIN_DIRECTORY(dicom) --ELSE() -+ELSEIF(FALSE) - IF(ITK_FOUND) - ADD_PLUGIN_DIRECTORY(dicom) - ENDIF() -@@ -147,29 +147,29 @@ ADD_PLUGIN_DIRECTORY(3dc) - - ADD_PLUGIN_DIRECTORY(p3d) - --IF(CURL_FOUND) -+IF(OSG_WITH_CURL) - ADD_PLUGIN_DIRECTORY(curl) - ENDIF() - --IF(ZLIB_FOUND) -+IF(OSG_WITH_ZLIB) - ADD_PLUGIN_DIRECTORY(gz) - ENDIF() - - IF(NOT OSG_GLES1_AVAILABLE AND NOT OSG_GLES2_AVAILABLE) -- IF(INVENTOR_FOUND) -+ IF(OSG_WITH_INVENTOR) - ADD_PLUGIN_DIRECTORY(Inventor) - ENDIF() - ENDIF() - --IF(COLLADA_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_COLLADA) - ADD_PLUGIN_DIRECTORY(dae) - ENDIF() - --IF(FBX_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_FBX) - ADD_PLUGIN_DIRECTORY(fbx) - ENDIF() - --IF(OPENCASCADE_FOUND) -+IF(OSG_WITH_OPENCASCADE) - ADD_PLUGIN_DIRECTORY(OpenCASCADE) - ENDIF() - -@@ -209,15 +209,15 @@ IF(OSG_CPP_EXCEPTIONS_AVAILABLE) - ADD_PLUGIN_DIRECTORY(txp) - ENDIF() - --IF(FFMPEG_FOUND AND OSG_CPP_EXCEPTIONS_AVAILABLE) -+IF(OSG_WITH_FFMPEG) - ADD_PLUGIN_DIRECTORY(ffmpeg) - ENDIF() - --IF(GSTREAMER_FOUND AND GLIB_FOUND) -+IF(OSG_WITH_GSTREAMER) - ADD_PLUGIN_DIRECTORY(gstreamer) - ENDIF() - --IF(DIRECTSHOW_FOUND) -+IF(OSG_WITH_DIRECTSHOW) - ADD_PLUGIN_DIRECTORY(directshow) - ENDIF() - -@@ -241,28 +241,28 @@ IF(QTKIT_FOUND) - ADD_PLUGIN_DIRECTORY(QTKit) - ENDIF() - --IF(NVTT_FOUND) -+IF(OSG_WITH_NVTT) - ADD_PLUGIN_DIRECTORY(nvtt) - ENDIF() - - --IF(FREETYPE_FOUND) -+IF(OSG_WITH_FREETYPE) - ADD_PLUGIN_DIRECTORY(freetype) - ENDIF() - --IF(ZLIB_FOUND) -+IF(OSG_WITH_ZLIB) - ADD_PLUGIN_DIRECTORY(zip) - ENDIF() - --IF(RSVG_FOUND) -+IF(OSG_WITH_RSVG) - ADD_PLUGIN_DIRECTORY(svg) - ENDIF() - --IF(POPPLER_FOUND) -+IF(OSG_WITH_POPPLER) - ADD_PLUGIN_DIRECTORY(pdf) - ENDIF() - --IF(LIBVNCSERVER_FOUND) -+IF(OSG_WITH_LIBVNCSERVER) - ADD_PLUGIN_DIRECTORY(vnc) - ENDIF() - -@@ -272,7 +272,7 @@ ADD_PLUGIN_DIRECTORY(osc) - ADD_PLUGIN_DIRECTORY(trk) - ADD_PLUGIN_DIRECTORY(tf) - --IF(LIBLAS_FOUND) -+IF(OSG_WITH_LIBLAS) - ADD_PLUGIN_DIRECTORY(las) - ENDIF() - -@@ -299,16 +299,16 @@ ENDIF() - # - # Device integration plugins - # --IF (SDL_FOUND) -+IF(OSG_WITH_SDL) - ADD_PLUGIN_DIRECTORY(sdl) - ENDIF(SDL_FOUND) - --IF(ASIO_FOUND) -+IF(OSG_WITH_ASIO) - ADD_PLUGIN_DIRECTORY(RestHttpDevice) - ENDIF(ASIO_FOUND) - - --IF(ZEROCONF_FOUND) -+IF(OSG_WITH_ZEROCONF) - ADD_PLUGIN_DIRECTORY(ZeroConfDevice) - ENDIF() - -diff --git a/src/osgPlugins/curl/CMakeLists.txt b/src/osgPlugins/curl/CMakeLists.txt -index 4afb738c7..fb5b98498 100644 ---- a/src/osgPlugins/curl/CMakeLists.txt -+++ b/src/osgPlugins/curl/CMakeLists.txt -@@ -5,7 +5,7 @@ IF(WIN32) - SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:MSVCRT") - ENDIF() - --IF(ZLIB_FOUND) -+IF(OSG_WITH_ZLIB) - ADD_DEFINITIONS(-DUSE_ZLIB) - INCLUDE_DIRECTORIES( ${CURL_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) - ELSE() -@@ -21,7 +21,7 @@ SET(TARGET_H - ReaderWriterCURL.h - ) - --IF(ZLIB_FOUND) -+IF(OSG_WITH_ZLIB) - SET(TARGET_LIBRARIES_VARS - CURL_LIBRARIES - ZLIB_LIBRARIES) -diff --git a/src/osgPlugins/dicom/CMakeLists.txt b/src/osgPlugins/dicom/CMakeLists.txt -index 3f159a9c5..06ccd17ed 100644 ---- a/src/osgPlugins/dicom/CMakeLists.txt -+++ b/src/osgPlugins/dicom/CMakeLists.txt -@@ -1,4 +1,4 @@ --IF (DCMTK_FOUND) -+IF (TRUE) - - # note, we have to include a '/' in front of the directory string to prevent a CMake bug from ignoring the directory - INCLUDE_DIRECTORIES(${DCMTK_INCLUDE_DIRS}) -diff --git a/src/osgPlugins/ive/CMakeLists.txt b/src/osgPlugins/ive/CMakeLists.txt -index 784a79c7e..40030b27d 100644 ---- a/src/osgPlugins/ive/CMakeLists.txt -+++ b/src/osgPlugins/ive/CMakeLists.txt -@@ -1,4 +1,4 @@ --IF(ZLIB_FOUND) -+IF(OSG_WITH_ZLIB) - ADD_DEFINITIONS(-DUSE_ZLIB) - INCLUDE_DIRECTORIES( ${ZLIB_INCLUDE_DIR}) - ENDIF() --- -2.21.0.windows.1 - diff --git a/recipes/openscenegraph/all/patches/0007-fix-msvc-with-std-c++17.patch b/recipes/openscenegraph/all/patches/0007-fix-msvc-with-std-c++17.patch new file mode 100644 index 00000000000000..39046ed3994aa6 --- /dev/null +++ b/recipes/openscenegraph/all/patches/0007-fix-msvc-with-std-c++17.patch @@ -0,0 +1,50 @@ +diff --git a/src/osg/DisplaySettings.cpp b/src/osg/DisplaySettings.cpp +index 5c699c8b0..5c097cf66 100644 +--- a/src/osg/DisplaySettings.cpp ++++ b/src/osg/DisplaySettings.cpp +@@ -22,9 +22,6 @@ + #include + #include + +-using namespace osg; +-using namespace std; +- + #if defined(WIN32) && !defined(__CYGWIN__) + #include + extern "C" { OSG_EXPORT DWORD NvOptimusEnablement=0x00000001; } +@@ -32,6 +29,9 @@ extern "C" { OSG_EXPORT DWORD NvOptimusEnablement=0x00000001; } + extern "C" { int NvOptimusEnablement=0x00000001; } + #endif + ++using namespace osg; ++using namespace std; ++ + void DisplaySettings::setNvOptimusEnablement(int value) + { + NvOptimusEnablement = value; +diff --git a/src/osgPlugins/cfg/ConfigParser.cpp b/src/osgPlugins/cfg/ConfigParser.cpp +index 263c82896..4247cc2af 100644 +--- a/src/osgPlugins/cfg/ConfigParser.cpp ++++ b/src/osgPlugins/cfg/ConfigParser.cpp +@@ -235,7 +235,7 @@ + #include "CameraConfig.h" + + +-using namespace std; ++ + using namespace osgProducer; + + static void ConfigParser_error( const char * ); +diff --git a/src/osgPlugins/cfg/ConfigParser.y b/src/osgPlugins/cfg/ConfigParser.y +index cf9adf507..5221be184 100644 +--- a/src/osgPlugins/cfg/ConfigParser.y ++++ b/src/osgPlugins/cfg/ConfigParser.y +@@ -34,7 +34,7 @@ + #include + + +-using namespace std; ++ + using namespace Producer; + + static void ConfigParser_error( const char * ); diff --git a/recipes/openscenegraph/all/patches/0008-replace-mem-fun-ref.patch b/recipes/openscenegraph/all/patches/0008-replace-mem-fun-ref.patch new file mode 100644 index 00000000000000..5f86f332a80cf1 --- /dev/null +++ b/recipes/openscenegraph/all/patches/0008-replace-mem-fun-ref.patch @@ -0,0 +1,13 @@ +diff --git a/src/osgUtil/tristripper/include/detail/graph_array.h b/src/osgUtil/tristripper/include/detail/graph_array.h +index dc1f38027..ce7000cc8 100644 +--- a/src/osgUtil/tristripper/include/detail/graph_array.h ++++ b/src/osgUtil/tristripper/include/detail/graph_array.h +@@ -446,7 +446,7 @@ inline void graph_array::swap(graph_type & Right) + template + inline void unmark_nodes(graph_array & G) + { +- std::for_each(G.begin(), G.end(), std::mem_fun_ref(&graph_array::node::unmark)); ++ for(typename graph_array::node_iterator itr = G.begin(); itr != G.end(); ++itr) itr->unmark(); + } + + diff --git a/recipes/openscenegraph/all/patches/0009-replace-auto-ptr-in-plugins.patch b/recipes/openscenegraph/all/patches/0009-replace-auto-ptr-in-plugins.patch new file mode 100644 index 00000000000000..de0f3ee7139ef9 --- /dev/null +++ b/recipes/openscenegraph/all/patches/0009-replace-auto-ptr-in-plugins.patch @@ -0,0 +1,75 @@ +diff --git a/src/osgPlugins/dae/ReaderWriterDAE.cpp b/src/osgPlugins/dae/ReaderWriterDAE.cpp +index fc1a448d4..3b883f19a 100644 +--- a/src/osgPlugins/dae/ReaderWriterDAE.cpp ++++ b/src/osgPlugins/dae/ReaderWriterDAE.cpp +@@ -32,7 +32,7 @@ + + #define SERIALIZER() OpenThreads::ScopedLock lock(_serializerMutex) + +-#if __cplusplus > 199711L ++#if ((defined(_MSVC_LANG) && _MSVC_LANG > 199711L) || __cplusplus > 199711L) + #define smart_ptr std::unique_ptr + #else + #define smart_ptr std::auto_ptr +diff --git a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp +index 69826c456..9bba5532a 100644 +--- a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp ++++ b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp +@@ -10,6 +10,11 @@ + + #define STREAM_TIMEOUT_IN_SECONDS_TO_CONSIDER_IT_DEAD 10 + ++#if ((defined(_MSVC_LANG) && _MSVC_LANG > 199711L) || __cplusplus > 199711L) ++ template using smart_ptr = std::unique_ptr; ++#else ++ #define smart_ptr std::auto_ptr ++#endif + + namespace osgFFmpeg { + +@@ -23,8 +28,8 @@ FFmpegImageStream::FFmpegImageStream() : + { + setOrigin(osg::Image::TOP_LEFT); + +- std::auto_ptr decoder(new FFmpegDecoder); +- std::auto_ptr commands(new CommandQueue); ++ smart_ptr decoder(new FFmpegDecoder); ++ smart_ptr commands(new CommandQueue); + + m_decoder = decoder.release(); + m_commands = commands.release(); +diff --git a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp +index 298e02fcc..113c9c45f 100644 +--- a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp ++++ b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp +@@ -34,6 +34,12 @@ + + #define SERIALIZER() OpenThreads::ScopedLock lock(_serializerMutex) + ++#if ((defined(_MSVC_LANG) && _MSVC_LANG > 199711L) || __cplusplus > 199711L) ++ #define smart_ptr std::unique_ptr ++#else ++ #define smart_ptr std::auto_ptr ++#endif ++ + // From easyrgb.com + float Hue_2_RGB( float v1, float v2, float vH ) + { +@@ -123,7 +129,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter + + initGDAL(); + +- std::auto_ptr dataset((GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly)); ++ smart_ptr dataset((GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly)); + if (!dataset.get()) return ReadResult::FILE_NOT_HANDLED; + + int dataWidth = dataset->GetRasterXSize(); +@@ -577,7 +583,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter + + initGDAL(); + +- std::auto_ptr dataset((GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly)); ++ smart_ptr dataset((GDALDataset*)GDALOpen(fileName.c_str(),GA_ReadOnly)); + if (!dataset.get()) return ReadResult::FILE_NOT_HANDLED; + + int dataWidth = dataset->GetRasterXSize(); diff --git a/recipes/openscenegraph/all/patches/0010-replace-ptr-fun-in-obj-plugin.patch b/recipes/openscenegraph/all/patches/0010-replace-ptr-fun-in-obj-plugin.patch new file mode 100644 index 00000000000000..139031361bc285 --- /dev/null +++ b/recipes/openscenegraph/all/patches/0010-replace-ptr-fun-in-obj-plugin.patch @@ -0,0 +1,24 @@ +diff --git a/src/osgPlugins/obj/obj.cpp b/src/osgPlugins/obj/obj.cpp +index 859add652..3580e5181 100644 +--- a/src/osgPlugins/obj/obj.cpp ++++ b/src/osgPlugins/obj/obj.cpp +@@ -37,10 +37,15 @@ using namespace obj; + + static std::string strip( const std::string& ss ) + { +- std::string result; +- result.assign( std::find_if( ss.begin(), ss.end(), std::not1( std::ptr_fun< int, int >( isspace ) ) ), +- std::find_if( ss.rbegin(), ss.rend(), std::not1( std::ptr_fun< int, int >( isspace ) ) ).base() ); +- return( result ); ++ std::string::const_iterator it = ss.begin(); ++ while (it != ss.end() && isspace(*it)) ++ it++; ++ ++ std::string::const_reverse_iterator rit = ss.rbegin(); ++ while (rit.base() != it && isspace(*rit)) ++ rit++; ++ ++ return std::string(it, rit.base()); + } + + /* diff --git a/recipes/openscenegraph/all/patches/0011-remove-deprecated-register.patch b/recipes/openscenegraph/all/patches/0011-remove-deprecated-register.patch new file mode 100644 index 00000000000000..9a1ea80d16a656 --- /dev/null +++ b/recipes/openscenegraph/all/patches/0011-remove-deprecated-register.patch @@ -0,0 +1,187 @@ +From b9f32bf6df5af101624bb065175097d8d96067c2 Mon Sep 17 00:00:00 2001 +From: czoido +Date: Thu, 25 Jan 2024 09:32:10 +0100 +Subject: [PATCH] remove deprecated register + +--- + src/osgPlugins/cfg/ConfigLexer.cpp | 40 ++++++++++++++--------------- + src/osgPlugins/cfg/ConfigParser.cpp | 16 ++++++------ + 2 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/src/osgPlugins/cfg/ConfigLexer.cpp b/src/osgPlugins/cfg/ConfigLexer.cpp +index 4e169efe4..cba6d6f9e 100644 +--- a/src/osgPlugins/cfg/ConfigLexer.cpp ++++ b/src/osgPlugins/cfg/ConfigLexer.cpp +@@ -832,9 +832,9 @@ YY_MALLOC_DECL + + YY_DECL + { +- register yy_state_type yy_current_state; +- register char *yy_cp, *yy_bp; +- register int yy_act; ++ yy_state_type yy_current_state; ++ char *yy_cp, *yy_bp; ++ int yy_act; + + #line 35 ".././ConfigLexer.l" + +@@ -881,7 +881,7 @@ YY_DECL + yy_match: + do + { +- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; ++ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; +@@ -1598,9 +1598,9 @@ void yyFlexLexer::LexerOutput( const char* buf, int size ) + + int yyFlexLexer::yy_get_next_buffer() + { +- register char *dest = yy_current_buffer->yy_ch_buf; +- register char *source = yytext_ptr; +- register int number_to_move, i; ++ char *dest = yy_current_buffer->yy_ch_buf; ++ char *source = yytext_ptr; ++ int number_to_move, i; + int ret_val; + + if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) +@@ -1730,14 +1730,14 @@ int yyFlexLexer::yy_get_next_buffer() + + yy_state_type yyFlexLexer::yy_get_previous_state() + { +- register yy_state_type yy_current_state; +- register char *yy_cp; ++ yy_state_type yy_current_state; ++ char *yy_cp; + + yy_current_state = yy_start; + + for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) + { +- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); ++ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; +@@ -1764,10 +1764,10 @@ yy_state_type yyFlexLexer::yy_get_previous_state() + + yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) + { +- register int yy_is_jam; +- register char *yy_cp = yy_c_buf_p; ++ int yy_is_jam; ++ char *yy_cp = yy_c_buf_p; + +- register YY_CHAR yy_c = 1; ++ YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yy_last_accepting_state = yy_current_state; +@@ -1786,9 +1786,9 @@ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) + } + + +-void yyFlexLexer::yyunput( int c, register char* yy_bp ) ++void yyFlexLexer::yyunput( int c, char* yy_bp ) + { +- register char *yy_cp = yy_c_buf_p; ++ char *yy_cp = yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yy_hold_char; +@@ -1796,10 +1796,10 @@ void yyFlexLexer::yyunput( int c, register char* yy_bp ) + if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ +- register int number_to_move = yy_n_chars + 2; +- register char *dest = &yy_current_buffer->yy_ch_buf[ ++ int number_to_move = yy_n_chars + 2; ++ char *dest = &yy_current_buffer->yy_ch_buf[ + yy_current_buffer->yy_buf_size + 2]; +- register char *source = ++ char *source = + &yy_current_buffer->yy_ch_buf[number_to_move]; + + while ( source > yy_current_buffer->yy_ch_buf ) +@@ -2119,7 +2119,7 @@ yyconst char *s2; + int n; + #endif + { +- register int i; ++ int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; + } +@@ -2133,7 +2133,7 @@ static int yy_flex_strlen( s ) + yyconst char *s; + #endif + { +- register int n; ++ int n; + for ( n = 0; s[n]; ++n ) + ; + +diff --git a/src/osgPlugins/cfg/ConfigParser.cpp b/src/osgPlugins/cfg/ConfigParser.cpp +index 263c82896..62d30c3f5 100644 +--- a/src/osgPlugins/cfg/ConfigParser.cpp ++++ b/src/osgPlugins/cfg/ConfigParser.cpp +@@ -351,7 +351,7 @@ union yyalloc + # define YYCOPY(To, From, Count) \ + do \ + { \ +- register YYSIZE_T yyi; \ ++ YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ +@@ -1025,7 +1025,7 @@ yystrlen (yystr) + const char *yystr; + # endif + { +- register const char *yys = yystr; ++ const char *yys = yystr; + + while (*yys++ != '\0') + continue; +@@ -1050,8 +1050,8 @@ yystpcpy (yydest, yysrc) + const char *yysrc; + # endif + { +- register char *yyd = yydest; +- register const char *yys = yysrc; ++ char *yyd = yydest; ++ const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; +@@ -1175,8 +1175,8 @@ yyparse () + #endif + { + +- register int yystate; +- register int yyn; ++ int yystate; ++ int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; +@@ -1194,12 +1194,12 @@ yyparse () + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; +- register short *yyssp; ++ short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; +- register YYSTYPE *yyvsp; ++ YYSTYPE *yyvsp; + + + +-- +2.39.3 (Apple Git-145) + diff --git a/recipes/openscenegraph/all/test_package/CMakeLists.txt b/recipes/openscenegraph/all/test_package/CMakeLists.txt index c2aca0be1b70aa..fcd48ccf6e39d7 100644 --- a/recipes/openscenegraph/all/test_package/CMakeLists.txt +++ b/recipes/openscenegraph/all/test_package/CMakeLists.txt @@ -1,21 +1,58 @@ -cmake_minimum_required(VERSION 3.1.2) -project(test_package) - -include(${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -find_package(OpenSceneGraph REQUIRED) - -include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) -link_libraries(${OPENSCENEGRAPH_LIBRARIES}) -add_compile_definitions(${OPENSCENEGRAPH_COMPILE_DEFINITIONS}) +cmake_minimum_required(VERSION 3.15) +project(test_package LANGUAGES CXX) +find_package(OpenSceneGraph REQUIRED CONFIG) +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} OpenSceneGraph::OpenSceneGraph) -get_property(cache_variables DIRECTORY PROPERTY CACHE_VARIABLES) -foreach(cache_variable ${cache_variables}) - if("${cache_variable}" MATCHES "^OSG_HAS_(WITH_.+)$") - add_compile_definitions("${CMAKE_MATCH_1}=${${cache_variable}}") - endif() +get_directory_property(compile_definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) +foreach(compile_definition ${compile_definitions}) + if("${compile_definition}" MATCHES "(WITH_.+)=(1)$") + string(REPLACE "=" ";" definition_list ${compile_definition}) + list(GET definition_list 0 definition_key) + list(GET definition_list 1 definition_value) + message("Defined: ${definition_key}=${definition_value}") + if("${definition_key}" STREQUAL "WITH_BMP") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_bmp) + endif() + if("${definition_key}" STREQUAL "WITH_JPEG") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_jpeg) + endif() + if("${definition_key}" STREQUAL "WITH_JASPER") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_jp2) + endif() + if("${definition_key}" STREQUAL "WITH_OPENEXR") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_exr) + endif() + if("${definition_key}" STREQUAL "WITH_GIF") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_gif) + endif() + if("${definition_key}" STREQUAL "WITH_PNG") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_png) + endif() + if("${definition_key}" STREQUAL "WITH_TIFF") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_tiff) + endif() + if("${definition_key}" STREQUAL "WITH_GDAL") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_gdal) + endif() + if("${definition_key}" STREQUAL "WITH_GTA") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_gta) + endif() + if("${definition_key}" STREQUAL "WITH_DCMTK") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_dicom) + endif() + if("${definition_key}" STREQUAL "WITH_CURL") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_curl) + endif() + if("${definition_key}" STREQUAL "WITH_ZLIB") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_gz) + endif() + if("${definition_key}" STREQUAL "WITH_FREETYPE") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_freetype) + endif() + if("${definition_key}" STREQUAL "WITH_IMAGEIO") + target_link_libraries(${PROJECT_NAME} openscenegraph::osgdb_imageio) + endif() + endif() endforeach() - -add_executable(${PROJECT_NAME} test_package.cpp) diff --git a/recipes/openscenegraph/all/test_package/conanfile.py b/recipes/openscenegraph/all/test_package/conanfile.py index 0e02c2d008408d..b27efd09cb3f16 100644 --- a/recipes/openscenegraph/all/test_package/conanfile.py +++ b/recipes/openscenegraph/all/test_package/conanfile.py @@ -1,25 +1,43 @@ -from conans import CMake, ConanFile, tools +from conan import ConanFile +from conan.tools.apple import is_apple_os +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake, CMakeToolchain import os class TestPackageConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake", "cmake_find_package" + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "VirtualRunEnv" + test_type = "explicit" - def build(self): - cmake = CMake(self) - for key, value in self.options["openscenegraph"].items(): + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def generate(self): + tc = CMakeToolchain(self) + for key, value in self.dependencies["openscenegraph"].options.items(): if key.startswith("with_"): - cmake.definitions["OSG_HAS_" + key.upper()] = 1 if value else 0 - if self.settings.os == "Macos": - cmake.definitions["OSG_HAS_WITH_GIF"] = 0 - cmake.definitions["OSG_HAS_WITH_JPEG"] = 0 - cmake.definitions["OSG_HAS_WITH_PNG"] = 0 + tc.preprocessor_definitions[key.upper()] = 1 if str(value) != "False" else 0 + #OSG always builds the bmp plugin + tc.preprocessor_definitions["WITH_BMP"] = 1 + if is_apple_os(self): + tc.preprocessor_definitions["WITH_GIF"] = 0 + tc.preprocessor_definitions["WITH_JPEG"] = 0 + tc.preprocessor_definitions["WITH_PNG"] = 0 + # OSG builds the imageio plugin on apple platforms + tc.preprocessor_definitions["WITH_IMAGEIO"] = 1 + tc.generate() + + def build(self): + cmake = CMake(self) cmake.configure() cmake.build() def test(self): - if not tools.cross_building(self): - bin_path = os.path.join("bin", "test_package") - self.run(bin_path, run_environment=True) + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/openscenegraph/all/test_package/test_package.cpp b/recipes/openscenegraph/all/test_package/test_package.cpp index d165af7b347332..c833eb8e3caee0 100644 --- a/recipes/openscenegraph/all/test_package/test_package.cpp +++ b/recipes/openscenegraph/all/test_package/test_package.cpp @@ -4,14 +4,8 @@ #include #include -// OSG always builds the bmp plugin -#define WITH_BMP 1 - -// OSG builds the imageio plugin on apple platforms -#ifdef __APPLE__ -# define WITH_IMAGEIO 1 -#else -# define WITH_IMAGEIO 0 +#ifndef WITH_IMAGEIO +#define WITH_IMAGEIO 0 #endif #ifdef OSG_LIBRARY_STATIC From 75fcfaac81f27e7edcc35597188ac8bde589491c Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 21 May 2024 09:45:58 +0300 Subject: [PATCH 02/83] (#21989) libmd: new recipe * libmd: new recipe * libmd: chdir to source folder for build * libmd: add Windows support * libmd: add /FS --- recipes/libmd/all/conandata.yml | 6 + recipes/libmd/all/conanfile.py | 114 ++++++++++++++++++ recipes/libmd/all/test_package/CMakeLists.txt | 7 ++ recipes/libmd/all/test_package/conanfile.py | 27 +++++ recipes/libmd/all/test_package/test_package.c | 12 ++ recipes/libmd/config.yml | 3 + 6 files changed, 169 insertions(+) create mode 100644 recipes/libmd/all/conandata.yml create mode 100644 recipes/libmd/all/conanfile.py create mode 100644 recipes/libmd/all/test_package/CMakeLists.txt create mode 100644 recipes/libmd/all/test_package/conanfile.py create mode 100644 recipes/libmd/all/test_package/test_package.c create mode 100644 recipes/libmd/config.yml diff --git a/recipes/libmd/all/conandata.yml b/recipes/libmd/all/conandata.yml new file mode 100644 index 00000000000000..6433755dc33652 --- /dev/null +++ b/recipes/libmd/all/conandata.yml @@ -0,0 +1,6 @@ +sources: + "1.1.0": + url: + - "https://libbsd.freedesktop.org/releases/libmd-1.1.0.tar.xz" + - "https://archive.hadrons.org/software/libmd/libmd-1.1.0.tar.xz" + sha256: "1bd6aa42275313af3141c7cf2e5b964e8b1fd488025caf2f971f43b00776b332" diff --git a/recipes/libmd/all/conanfile.py b/recipes/libmd/all/conanfile.py new file mode 100644 index 00000000000000..b7ad5096688cdc --- /dev/null +++ b/recipes/libmd/all/conanfile.py @@ -0,0 +1,114 @@ +import os + +from conan import ConanFile +from conan.tools.apple import fix_apple_shared_install_name +from conan.tools.env import Environment, VirtualBuildEnv +from conan.tools.files import chdir, rename, copy, get, rm, rmdir +from conan.tools.gnu import Autotools, AutotoolsToolchain +from conan.tools.layout import basic_layout +from conan.tools.microsoft import is_msvc, unix_path + +required_conan_version = ">=1.53.0" + + +class LibMDConan(ConanFile): + name = "libmd" + description = "Message Digest functions from BSD systems" + license = "BSD-2-Clause AND BSD-3-Clause AND ISC AND Beerware AND DocumentRef-COPYING:LicenseRef-libmd-Public-Domain" + homepage = "https://gitlab.freedesktop.org/libbsd/libmd" + url = "https://github.com/conan-io/conan-center-index" + topics = ("message-digest", "hash", "bsd", + "md2", "md4", "md5", "ripemd", "rmd160", + "sha", "sha1", "sha2", "sha256", "sha512") + + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + } + + @property + def _settings_build(self): + return getattr(self, "settings_build", self.settings) + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + self.settings.rm_safe("compiler.cppstd") + self.settings.rm_safe("compiler.libcxx") + + def build_requirements(self): + if self._settings_build.os == "Windows": + self.win_bash = True + if not self.conf.get("tools.microsoft.bash:path", check_type=str): + self.tool_requires("msys2/cci.latest") + if is_msvc(self): + self.tool_requires("automake/1.16.5") + + def generate(self): + venv = VirtualBuildEnv(self) + venv.generate() + + tc = AutotoolsToolchain(self) + if is_msvc(self): + tc.extra_cflags.append("-FS") + tc.extra_cxxflags.append("-FS") + tc.generate() + + if is_msvc(self): + env = Environment() + automake_conf = self.dependencies.build["automake"].conf_info + compile_wrapper = unix_path(self, automake_conf.get("user.automake:compile-wrapper", check_type=str)) + ar_wrapper = unix_path(self, automake_conf.get("user.automake:lib-wrapper", check_type=str)) + env.define("CC", f"{compile_wrapper} cl -nologo") + env.define("CXX", f"{compile_wrapper} cl -nologo") + env.define("LD", "link -nologo") + env.define("AR", f"{ar_wrapper} lib") + env.define("NM", "dumpbin -symbols") + env.define("OBJDUMP", ":") + env.define("RANLIB", ":") + env.define("STRIP", ":") + env.vars(self).save_script("conanbuild_msvc") + + def layout(self): + basic_layout(self, src_folder="src") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def build(self): + with chdir(self, self.source_folder): + autotools = Autotools(self) + autotools.configure() + autotools.make() + + def package(self): + copy(self, "COPYING", self.source_folder, os.path.join(self.package_folder, "licenses")) + with chdir(self, self.source_folder): + autotools = Autotools(self) + autotools.install() + if self.settings.os == "Windows" and self.options.shared: + rename(self, os.path.join(self.package_folder, "lib", "md.dll.lib"), + os.path.join(self.package_folder, "lib", "md-0.lib")) + rm(self, "*.la", os.path.join(self.package_folder, "lib")) + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + rmdir(self, os.path.join(self.package_folder, "share")) + fix_apple_shared_install_name(self) + + def package_info(self): + self.cpp_info.set_property("pkg_config_name", "libmd") + + if self.settings.os == "Windows" and self.options.shared: + lib = "md-0" + else: + lib = "md" + self.cpp_info.libs = [lib] diff --git a/recipes/libmd/all/test_package/CMakeLists.txt b/recipes/libmd/all/test_package/CMakeLists.txt new file mode 100644 index 00000000000000..6bdd5550a5b87d --- /dev/null +++ b/recipes/libmd/all/test_package/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package C) + +find_package(libmd REQUIRED) + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} PRIVATE libmd::libmd) diff --git a/recipes/libmd/all/test_package/conanfile.py b/recipes/libmd/all/test_package/conanfile.py new file mode 100644 index 00000000000000..0f2d20bbcb70af --- /dev/null +++ b/recipes/libmd/all/test_package/conanfile.py @@ -0,0 +1,27 @@ +import os + +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake + + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/libmd/all/test_package/test_package.c b/recipes/libmd/all/test_package/test_package.c new file mode 100644 index 00000000000000..a7d2d1ef0b2453 --- /dev/null +++ b/recipes/libmd/all/test_package/test_package.c @@ -0,0 +1,12 @@ +#include +#include + +int main() { + const char data[] = "12345"; + uint8_t hash[MD5_DIGEST_LENGTH]; + MD5_CTX md5_ctx; + MD5Init(&md5_ctx); + MD5Update(&md5_ctx, (const uint8_t *)data, strlen(data)); + MD5Final(hash, &md5_ctx); + return 0; +} diff --git a/recipes/libmd/config.yml b/recipes/libmd/config.yml new file mode 100644 index 00000000000000..11b7aff3a5ac43 --- /dev/null +++ b/recipes/libmd/config.yml @@ -0,0 +1,3 @@ +versions: + "1.1.0": + folder: "all" From 0ef4f6996830fb85393dcbd174616c20b241c24c Mon Sep 17 00:00:00 2001 From: Dmitry Baryshev Date: Tue, 21 May 2024 10:52:00 +0300 Subject: [PATCH 03/83] (#23639) [sail] Bump version to 0.9.5, bump dependencies * [sail] Bump version to 0.9.4 * [sail] Bump dependencies * [sail] Bump version to 0.9.5 * [sail] Bump version to 0.9.5 --- recipes/sail/all/conandata.yml | 3 +++ recipes/sail/all/conanfile.py | 8 ++++---- recipes/sail/config.yml | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/recipes/sail/all/conandata.yml b/recipes/sail/all/conandata.yml index 912a033d71e011..0afb569405de94 100644 --- a/recipes/sail/all/conandata.yml +++ b/recipes/sail/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.9.5": + url: "https://github.com/HappySeaFox/sail/archive/v0.9.5.tar.gz" + sha256: "28c601c0399be1940710afc150b5836f8b3f5f6a35b98d7ac1467e62bc568e20" "0.9.4": url: "https://github.com/HappySeaFox/sail/archive/v0.9.4.tar.gz" sha256: "9a8b93c15c4a1afe07c760d2087895a18626034f55917f333aaabe9c9704438f" diff --git a/recipes/sail/all/conanfile.py b/recipes/sail/all/conanfile.py index 7651e9b295a4eb..13e75918fc7c20 100644 --- a/recipes/sail/all/conanfile.py +++ b/recipes/sail/all/conanfile.py @@ -56,7 +56,7 @@ def configure(self): def requirements(self): if self.options.with_highest_priority_codecs: - self.requires("giflib/5.2.1") + self.requires("giflib/5.2.2") self.requires("libjpeg/9e") self.requires("libpng/[>=1.6 <2]") self.requires("libtiff/4.6.0") @@ -64,12 +64,12 @@ def requirements(self): if Version(self.version) >= "0.9.1": self.requires("nanosvg/cci.20231025") if self.options.with_medium_priority_codecs: - self.requires("libavif/1.0.3") - self.requires("jasper/4.1.1") + self.requires("libavif/1.0.4") + self.requires("jasper/4.2.0") # TODO Re-enable JPEG XL after merging either of the following: # - https://github.com/conan-io/conan-center-index/pull/13898 # - https://github.com/conan-io/conan-center-index/pull/18812 - # self.requires("libjxl/0.6.1") + # self.requires("libjxl/0.10.2") self.requires("libwebp/1.3.2") def layout(self): diff --git a/recipes/sail/config.yml b/recipes/sail/config.yml index 2a8dad7a0ab375..5d13176650afec 100644 --- a/recipes/sail/config.yml +++ b/recipes/sail/config.yml @@ -1,4 +1,6 @@ versions: + "0.9.5": + folder: all "0.9.4": folder: all "0.9.1": From 2ed4ad34686b33f1018679408198f860069c2743 Mon Sep 17 00:00:00 2001 From: Ivo Hedtke Date: Tue, 21 May 2024 10:32:54 +0200 Subject: [PATCH 04/83] (#24008) [scip] bump version to 9.0.1 * Add SCIP version 9.0.0 * Update to v9.0.1 * Do not build documentation and examples * Do not build in Debug on Windows --- recipes/scip/all/conandata.yml | 3 +++ recipes/scip/all/conanfile.py | 5 +++++ recipes/scip/config.yml | 2 ++ 3 files changed, 10 insertions(+) diff --git a/recipes/scip/all/conandata.yml b/recipes/scip/all/conandata.yml index aacd6d1a319fe3..a8bf84f8787de0 100644 --- a/recipes/scip/all/conandata.yml +++ b/recipes/scip/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "9.0.1": + url: "https://github.com/scipopt/scip/archive/refs/tags/v901.tar.gz" + sha256: "08ad3e7ad6f84f457d95bb70ab21fa7fc648dd43103099359ef8a8f30fcce32e" "8.1.0": url: "https://github.com/scipopt/scip/archive/refs/tags/v810.tar.gz" sha256: "b6daf54c37d02564b12fb32ec3bb7a105710eb0026adeafc602af4435fa94685" diff --git a/recipes/scip/all/conanfile.py b/recipes/scip/all/conanfile.py index 30a113fa5330e1..0fea9f21ddc939 100644 --- a/recipes/scip/all/conanfile.py +++ b/recipes/scip/all/conanfile.py @@ -35,6 +35,7 @@ class SCIPConan(ConanFile): "with_sym": "bliss", } soplex_version_belonging_to_me = { + "9.0.1": "7.0.1", "8.1.0": "6.0.4", "8.0.4": "6.0.4", "8.0.3": "6.0.3" @@ -71,6 +72,9 @@ def validate(self): raise ConanInvalidConfiguration("Bliss does not support libc++.") if self.dependencies["soplex"].options.with_gmp and not self.options.with_gmp: raise ConanInvalidConfiguration("The options 'with_gmp' should be aligned with 'soplex:with_gmp' too.") + if Version(self.version) >= "9.0.1" and is_msvc(self) and self.settings.build_type == "Debug": + # lpi_spx2.cpp : error C1128: number of sections exceeded object file format limit: compile with /bigobj + raise ConanInvalidConfiguration(f"{self.ref} can not be build in Debug with MSVC.") def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -120,6 +124,7 @@ def generate(self): tc.variables["PAPILO"] = False # LGPL tc.variables["ZIMPL"] = False # LPGL tc.variables["IPOPT"] = False # no such coin package on conan center yet + tc.variables["BUILD_TESTING"] = False # do not build documentation and examples tc.generate() deps = CMakeDeps(self) deps.set_property("sopex", "cmake_file_name", "SOPEX") diff --git a/recipes/scip/config.yml b/recipes/scip/config.yml index f70b85bc6cf446..06d899dbf8431c 100644 --- a/recipes/scip/config.yml +++ b/recipes/scip/config.yml @@ -1,4 +1,6 @@ versions: + "9.0.1": + folder: all "8.1.0": folder: all "8.0.4": From 7fa663df18e85679459a187094125ae10c553330 Mon Sep 17 00:00:00 2001 From: Klaus Holst Jacobsen <48069914+klausholstjacobsen@users.noreply.github.com> Date: Tue, 21 May 2024 10:52:40 +0200 Subject: [PATCH 05/83] (#24029) openssh: Added ability to control "--disable-strip" configure argument --- recipes/openssh/all/conanfile.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/recipes/openssh/all/conanfile.py b/recipes/openssh/all/conanfile.py index 15aec4e4327536..193d5c2993c516 100644 --- a/recipes/openssh/all/conanfile.py +++ b/recipes/openssh/all/conanfile.py @@ -25,6 +25,7 @@ class PackageConan(ConanFile): "with_pam": [False, "openpam"], # linux-pam and Solaris PAM are also supported "with_selinux": [True, False], "with_libedit": [True, False], + "with_strip": [True, False], "with_sandbox": [False, "auto", "capsicum", "darwin", "rlimit", "seccomp_filter", "systrace", "pledge"] } default_options = { @@ -32,6 +33,7 @@ class PackageConan(ConanFile): "with_pam": False, "with_selinux": False, "with_libedit": False, + "with_strip": True, "with_sandbox": "auto" } @@ -81,6 +83,9 @@ def generate(self): tc = AutotoolsToolchain(self) tc.configure_args.append("--without-zlib-version-check") + if not self.options.with_strip: + tc.configure_args.append("--disable-strip") + if self.options.with_selinux: tc.configure_args.append("--with-selinux") From 4d6245c3144b1364d99b01bdb369ef072b632cbc Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 21 May 2024 18:12:44 +0900 Subject: [PATCH 06/83] (#24039) glaze: add version 2.6.5 --- recipes/glaze/all/conandata.yml | 3 +++ recipes/glaze/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/glaze/all/conandata.yml b/recipes/glaze/all/conandata.yml index 64d0781a702acc..e60b51ec31f194 100644 --- a/recipes/glaze/all/conandata.yml +++ b/recipes/glaze/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.6.5": + url: "https://github.com/stephenberry/glaze/archive/v2.6.5.tar.gz" + sha256: "5d5f3b41c7803cded9602ee93c80ea38fd3521cdaad6ea1836f818046d21e504" "2.6.4": url: "https://github.com/stephenberry/glaze/archive/v2.6.4.tar.gz" sha256: "79aff3370c6fe79be8e1774c4fab3e450a10444b91c2aa15aeebf5f54efedc5d" diff --git a/recipes/glaze/config.yml b/recipes/glaze/config.yml index 6f089f80d0b1b2..b5f221fac5610f 100644 --- a/recipes/glaze/config.yml +++ b/recipes/glaze/config.yml @@ -1,4 +1,6 @@ versions: + "2.6.5": + folder: all "2.6.4": folder: all "2.6.3": From f0684abf1792cc33b152e5433dc1d3fb8cb99087 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 21 May 2024 12:54:10 +0300 Subject: [PATCH 07/83] (#23680) flac: ignore DLL_EXPORT define in export.h * flac: set CMP0077 * flac: ignore DLL_EXPORT define in export.h --- recipes/flac/all/conandata.yml | 8 +++++++ recipes/flac/all/conanfile.py | 2 +- .../1.4.2-002-ignore-dll_export-define.patch | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 recipes/flac/all/patches/1.4.2-002-ignore-dll_export-define.patch diff --git a/recipes/flac/all/conandata.yml b/recipes/flac/all/conandata.yml index e2b6d7651827c2..da984a86264a90 100644 --- a/recipes/flac/all/conandata.yml +++ b/recipes/flac/all/conandata.yml @@ -9,6 +9,14 @@ sources: url: "https://github.com/xiph/flac/archive/1.3.3.tar.gz" sha256: "668cdeab898a7dd43cf84739f7e1f3ed6b35ece2ef9968a5c7079fe9adfe1689" patches: + "1.4.3": + - patch_file: "patches/1.4.2-002-ignore-dll_export-define.patch" + patch_description: "Ignore autotools-specific DLL_EXPORT define in export.h" + patch_type: "conan" + "1.4.2": + - patch_file: "patches/1.4.2-002-ignore-dll_export-define.patch" + patch_description: "Ignore autotools-specific DLL_EXPORT define in export.h" + patch_type: "conan" "1.3.3": - patch_file: "patches/fix-cmake-1.3.3.patch" patch_description: "Various adaptations in CMakeLists.txt files to improve compatibility with Conan." diff --git a/recipes/flac/all/conanfile.py b/recipes/flac/all/conanfile.py index e8bc14ed2a18c2..2e622f2d8d1251 100644 --- a/recipes/flac/all/conanfile.py +++ b/recipes/flac/all/conanfile.py @@ -56,6 +56,7 @@ def generate(self): tc.variables["BUILD_EXAMPLES"] = False tc.variables["BUILD_DOCS"] = False tc.variables["BUILD_TESTING"] = False + tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0077"] = "NEW" tc.generate() cd = CMakeDeps(self) cd.generate() @@ -105,7 +106,6 @@ def package_info(self): self.cpp_info.components["libflac"].system_libs += ["m"] bin_path = os.path.join(self.package_folder, "bin") - self.output.info("Appending PATH environment variable: {}".format(bin_path)) self.env_info.PATH.append(bin_path) # TODO: to remove in conan v2 diff --git a/recipes/flac/all/patches/1.4.2-002-ignore-dll_export-define.patch b/recipes/flac/all/patches/1.4.2-002-ignore-dll_export-define.patch new file mode 100644 index 00000000000000..0ce0853b69c7ef --- /dev/null +++ b/recipes/flac/all/patches/1.4.2-002-ignore-dll_export-define.patch @@ -0,0 +1,22 @@ +--- include/FLAC/export.h ++++ include/FLAC/export.h +@@ -74,7 +74,7 @@ + */ + #if defined(_WIN32) + +-#if defined(FLAC__NO_DLL) && !(defined(DLL_EXPORT)) ++#if defined(FLAC__NO_DLL) + #define FLAC_API + #else + #ifdef FLAC_API_EXPORTS +--- include/FLAC++/export.h ++++ include/FLAC++/export.h +@@ -73,7 +73,7 @@ + * by libtool, must override FLAC__NO_DLL on building shared components + */ + #if defined(_WIN32) +-#if defined(FLAC__NO_DLL) && !(defined(DLL_EXPORT)) ++#if defined(FLAC__NO_DLL) + #define FLACPP_API + #else + #ifdef FLACPP_API_EXPORTS From 34179869b7137ae40a92b00692c45fd857df8c4e Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 21 May 2024 19:33:36 +0900 Subject: [PATCH 08/83] (#24040) behaviortree.cpp: add version 4.6.1, add package_type --- recipes/behaviortree.cpp/all/conandata.yml | 3 +++ recipes/behaviortree.cpp/all/conanfile.py | 1 + recipes/behaviortree.cpp/config.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/recipes/behaviortree.cpp/all/conandata.yml b/recipes/behaviortree.cpp/all/conandata.yml index 83362c25cf1791..25beb0006c60f1 100644 --- a/recipes/behaviortree.cpp/all/conandata.yml +++ b/recipes/behaviortree.cpp/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "4.6.1": + url: "https://github.com/BehaviorTree/BehaviorTree.CPP/archive/refs/tags/4.6.1.tar.gz" + sha256: "a4e0dd92b200eedfbc6a16bebe613aeeb84b685416211b68fd097d21254f324b" "4.6.0": url: "https://github.com/BehaviorTree/BehaviorTree.CPP/archive/refs/tags/4.6.0.tar.gz" sha256: "b24fed4f51212ea40bc492f7d4a310b1672bc05df6a83f2341c41ccf233307a9" diff --git a/recipes/behaviortree.cpp/all/conanfile.py b/recipes/behaviortree.cpp/all/conanfile.py index abd62b04171b48..219b2a799c6c65 100644 --- a/recipes/behaviortree.cpp/all/conanfile.py +++ b/recipes/behaviortree.cpp/all/conanfile.py @@ -17,6 +17,7 @@ class BehaviorTreeCPPConan(ConanFile): url = "https://github.com/conan-io/conan-center-index" homepage = "https://github.com/BehaviorTree/BehaviorTree.CPP" topics = ("ai", "robotics", "games", "coordination") + package_type = "library" settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], diff --git a/recipes/behaviortree.cpp/config.yml b/recipes/behaviortree.cpp/config.yml index c9c4fe10751ca0..6056a1ddad4882 100644 --- a/recipes/behaviortree.cpp/config.yml +++ b/recipes/behaviortree.cpp/config.yml @@ -1,4 +1,6 @@ versions: + "4.6.1": + folder: all "4.6.0": folder: all "4.5.2": From 3b1304cbb73ef9dd2b5bd8ec896e85fd87303d16 Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 21 May 2024 20:13:31 +0900 Subject: [PATCH 09/83] (#24041) samurai: add version 0.13.0, solve version conflict --- recipes/samurai/all/conandata.yml | 3 +++ recipes/samurai/all/conanfile.py | 4 ++-- recipes/samurai/config.yml | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/recipes/samurai/all/conandata.yml b/recipes/samurai/all/conandata.yml index b4ff07102a6733..a3cf7b7eb4b885 100644 --- a/recipes/samurai/all/conandata.yml +++ b/recipes/samurai/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.13.0": + url: "https://github.com/hpc-maths/samurai/archive/v0.13.0.tar.gz" + sha256: "f38e379218b1206fc5c5e157ee5e80687721a896f70b892623d9f30280529448" "0.9.0": url: "https://github.com/hpc-maths/samurai/archive/v0.9.0.tar.gz" sha256: "49f94a7451b1b50cab335a62e294e612fea27cbf5b131827eb69a8e228ad8010" diff --git a/recipes/samurai/all/conanfile.py b/recipes/samurai/all/conanfile.py index 9bbf83edd69852..a025722b585471 100644 --- a/recipes/samurai/all/conanfile.py +++ b/recipes/samurai/all/conanfile.py @@ -43,8 +43,8 @@ def requirements(self): self.requires("fmt/10.1.1") self.requires("highfive/2.7.1") self.requires("pugixml/1.14") - self.requires("xsimd/11.1.0") - self.requires("xtensor/0.24.6") + self.requires("xsimd/12.0.0") + self.requires("xtensor/0.24.7") def package_id(self): self.info.clear() diff --git a/recipes/samurai/config.yml b/recipes/samurai/config.yml index b54c9224b6c190..e6692765cde8a1 100644 --- a/recipes/samurai/config.yml +++ b/recipes/samurai/config.yml @@ -1,4 +1,6 @@ versions: + "0.13.0": + folder: all "0.9.0": folder: all "0.8.0": From a63cb57ee2cfed43206237bcc77df10eb352b16e Mon Sep 17 00:00:00 2001 From: Elvis Dukaj Date: Tue, 21 May 2024 14:10:34 +0200 Subject: [PATCH 10/83] (#23481) mingw-builds: added 13.2.0 * mingw-builds: added 13.2 * Added version 13.2 in config.yml * mingw-build: fix mfc instead of mcf typo * mingw-build: for version <13 del self.options.runtime * mingw-build: for version <13 del self.options.runtime * mingw-build: refactoring * mingw-build: adding configure method to remove options.runtime for version <= 12.2.0 * mingw-build: refactoring --- recipes/mingw-builds/all/conandata.yml | 22 +++++++++++++++++++++ recipes/mingw-builds/all/conanfile.py | 27 ++++++++++++++++++++++---- recipes/mingw-builds/config.yml | 2 ++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/recipes/mingw-builds/all/conandata.yml b/recipes/mingw-builds/all/conandata.yml index 6703f0f20681db..4f44c4f7671248 100644 --- a/recipes/mingw-builds/all/conandata.yml +++ b/recipes/mingw-builds/all/conandata.yml @@ -1,4 +1,26 @@ sources: + "13.2.0": + mcf: + seh: + ucrt: + url: "https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev1/x86_64-13.2.0-release-mcf-seh-ucrt-rt_v11-rev1.7z" + sha256: "9ae11d0b00f4deae7246471193191de62d9e0318917d3577b568e0974c3069bc" + posix: + seh: + ucrt: + url: "https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev1/x86_64-13.2.0-release-posix-seh-ucrt-rt_v11-rev1.7z" + sha256: "475ee72c5ce1bd54a3e3c334bdd3be5e6575334184fd9718013aa362c9819d2f" + msvcrt: + url: "https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev1/x86_64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev1.7z" + sha256: "7d3f84b17b235aa233f0fb5df9765bf79dbea950177a69ff99f8ad1d75b0aa6e" + win32: + seh: + ucrt: + url: "https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev1/x86_64-13.2.0-release-win32-seh-ucrt-rt_v11-rev1.7z" + sha256: "74ca64c55220edd3196681782fbff653c2b9cb4f427f9e532ab6e9a0823dc997" + msvcrt: + url: "https://github.com/niXman/mingw-builds-binaries/releases/download/13.2.0-rt_v11-rev1/x86_64-13.2.0-release-win32-seh-msvcrt-rt_v11-rev1.7z" + sha256: "15b914f38f2f2e2d6f7b9b8425ff22b7e406878b01920190b09ce0dd8259c6aa" "12.2.0": posix: seh: diff --git a/recipes/mingw-builds/all/conanfile.py b/recipes/mingw-builds/all/conanfile.py index 8b875ba354b427..913b244a11774c 100644 --- a/recipes/mingw-builds/all/conanfile.py +++ b/recipes/mingw-builds/all/conanfile.py @@ -2,6 +2,7 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.files import copy, download, rmdir +from conan.tools.scm import Version required_conan_version = ">=1.47.0" @@ -14,14 +15,27 @@ class MingwConan(ConanFile): license = "ZPL-2.1", "MIT", "GPL-2.0-or-later" topics = ("gcc", "gnu", "unix", "mingw32", "binutils") settings = "os", "arch" - options = {"threads": ["posix", "win32"], "exception": ["seh", "sjlj"]} - default_options = {"threads": "posix", "exception": "seh"} + options = { + "threads": ["posix", "win32", "mcf"], + "exception": ["seh", "sjlj"], + "runtime": ["msvcrt", "ucrt"] + } + default_options = { + "threads": "posix", + "exception": "seh", + "runtime": "ucrt" + } provides = "mingw-w64" @property def _settings_build(self): return getattr(self, "settings_build", self.settings) + def config_options(self): + # Before version 12 (included) the only possible runtime was msvcrt + if Version(self.version) <= Version("12.2.0"): + del self.options.runtime + def validate(self): valid_os = ["Windows"] if str(self.settings.os) not in valid_os: @@ -52,15 +66,20 @@ def validate(self): def build_requirements(self): self.build_requires("7zip/19.00") + def _get_source(self): + if Version(self.version) <= Version("12.2.0"): + return self.conan_data["sources"][self.version][str(self.options.threads)][str(self.options.exception)] + else: + return self.conan_data["sources"][self.version][str(self.options.threads)][str(self.options.exception)][str(self.options.runtime)] + def build(self): # Source should be downloaded in the build step since it depends on specific options - url = self.conan_data["sources"][self.version][str(self.options.threads)][str(self.options.exception)] + url = self._get_source() self.output.info(f"Downloading: {url['url']}") download(self, url["url"], "file.7z", sha256=url["sha256"]) self.run("7z x file.7z") os.remove('file.7z') - def package(self): target = "mingw64" if self.settings.arch == "x86_64" else "mingw32" copy(self, "*", src=target, dst=self.package_folder) diff --git a/recipes/mingw-builds/config.yml b/recipes/mingw-builds/config.yml index 6ceaf5fe4c1642..337b953faeff98 100644 --- a/recipes/mingw-builds/config.yml +++ b/recipes/mingw-builds/config.yml @@ -1,4 +1,6 @@ versions: + "13.2.0": + folder: "all" "12.2.0": folder: "all" "12.1.0": From 767fd379a28eff2ff0139f445a1aec16501ca3f2 Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 21 May 2024 21:32:28 +0900 Subject: [PATCH 11/83] (#24048) wasmtime: add version 21.0.0 --- recipes/wasmtime/all/conandata.yml | 30 ++++++++++++++++++++++++++++++ recipes/wasmtime/config.yml | 2 ++ 2 files changed, 32 insertions(+) diff --git a/recipes/wasmtime/all/conandata.yml b/recipes/wasmtime/all/conandata.yml index c815513be0c337..f552bb5d07af33 100644 --- a/recipes/wasmtime/all/conandata.yml +++ b/recipes/wasmtime/all/conandata.yml @@ -1,4 +1,34 @@ sources: + "21.0.0": + Windows: + "x86_64": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-x86_64-windows-c-api.zip" + sha256: "aee0fb2d792f93d16cc3ae2857a384c1f3b105374dfdecb6ab3f3b2823e6acaf" + MinGW: + "x86_64": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-x86_64-mingw-c-api.zip" + sha256: "d4253540cc201c12d356a0806786ea518577c486d66d83a0144b4227d559c507" + Linux: + "x86_64": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-x86_64-linux-c-api.tar.xz" + sha256: "e91b15f242454ab916dd895d326f6c2585a1f93f0df5aeb079e6f0511c90b37d" + "armv8": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-aarch64-linux-c-api.tar.xz" + sha256: "b3e77e3eab5c0c4c3085364701bdb5cdd05e5ac4e3308d40263b06ac67bae610" + "s390x": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-s390x-linux-c-api.tar.xz" + sha256: "dad2b4c43aaaa6734ac0d2825767759338b0273c46500b46ac071ddc7e853bec" + Macos: + "x86_64": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-x86_64-macos-c-api.tar.xz" + sha256: "f99c5682ce85f353645b2b642a90104d43f77eafe8a90faa2ecd9421c4d48d2f" + "armv8": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-aarch64-macos-c-api.tar.xz" + sha256: "0414332f1d6c90e6226102a27e8b8767eba845f34f4c8cabab575b094a0500f1" + Android: + "armv8": + url: "https://github.com/bytecodealliance/wasmtime/releases/download/v21.0.0/wasmtime-v21.0.0-aarch64-linux-c-api.tar.xz" + sha256: "b3e77e3eab5c0c4c3085364701bdb5cdd05e5ac4e3308d40263b06ac67bae610" "20.0.1": Windows: "x86_64": diff --git a/recipes/wasmtime/config.yml b/recipes/wasmtime/config.yml index 0ec0909d84a80b..5bcf55a2755caa 100644 --- a/recipes/wasmtime/config.yml +++ b/recipes/wasmtime/config.yml @@ -1,4 +1,6 @@ versions: + "21.0.0": + folder: all "20.0.1": folder: all "19.0.2": From c9238629e382f7a31a04522af4a9e882d3c79333 Mon Sep 17 00:00:00 2001 From: Mi-La Date: Tue, 21 May 2024 16:32:17 +0200 Subject: [PATCH 12/83] (#23846) Zserio 2.14.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * zserio: Add new Zserio release 2.14.0 * zserio: zserio_compiler.cmake is available in compiler release from 2.14.0 * Add forgotten version in config.yml * zserio: Define minimum supported compiler versions * zserio: Force C++11 on all compilers * zserio: Update minimum required gcc version (accidentally changed) * Update recipes/zserio/all/conanfile.py Co-authored-by: Uilian Ries * Allow gcc 5 as a minimum compiler version * Update recipes/zserio/all/conanfile.py Co-authored-by: Rubén Rincón Blanco * Fix indentation --------- Co-authored-by: Uilian Ries Co-authored-by: Rubén Rincón Blanco --- recipes/zserio/all/conandata.yml | 10 +++++++++ recipes/zserio/all/conanfile.py | 35 +++++++++++++++++++++++++++++--- recipes/zserio/config.yml | 2 ++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/recipes/zserio/all/conandata.yml b/recipes/zserio/all/conandata.yml index 9a65ed8b0e67c6..252e1a38c700d4 100644 --- a/recipes/zserio/all/conandata.yml +++ b/recipes/zserio/all/conandata.yml @@ -1,4 +1,14 @@ sources: + "2.14.0": + runtime: + url: "https://github.com/ndsev/zserio/releases/download/v2.14.0/zserio-2.14.0-runtime-libs.zip" + sha256: "6002bfe179333435c84d3be2cfb612c008bd52837512aecea8a888e4a3139564" + compiler: + url: "https://github.com/ndsev/zserio/releases/download/v2.14.0/zserio-2.14.0-bin.zip" + sha256: "c1d4668371ad3543cb24f86b218640da7f720f31afe3f8af2d427114d7c7ae5c" + license: + url: "https://raw.githubusercontent.com/ndsev/zserio/v2.14.0/LICENSE" + sha256: "8fd7b040fc223bb07551dfed490df0d55d6af25e331e58bc7c7599163ed1bb5a" "2.13.0": runtime: url: "https://github.com/ndsev/zserio/releases/download/v2.13.0/zserio-2.13.0-runtime-libs.zip" diff --git a/recipes/zserio/all/conanfile.py b/recipes/zserio/all/conanfile.py index 2ab5a23336294e..6a69b2c8144016 100644 --- a/recipes/zserio/all/conanfile.py +++ b/recipes/zserio/all/conanfile.py @@ -5,6 +5,7 @@ from conan.tools.files import copy, download, get from conan.tools.build import check_min_cppstd from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout +from conan.tools.scm import Version required_conan_version = ">=1.54.0" @@ -25,12 +26,24 @@ class ZserioConanFile(ConanFile): "fPIC": True } + @property + def _compilers_minimum_version(self): + # https://github.com/ndsev/zserio/tree/master/compiler/extensions/cpp#supported-compilers + return { + "apple-clang": "11", + "clang": "11", + "gcc": "5", + "msvc": "191", + "Visual Studio": "15", + } + @property def _min_cppstd(self): return 11 def export_sources(self): - copy(self, "zserio_compiler.cmake", self.recipe_folder, self.export_sources_folder) + if Version(self.version) < "2.14.0": + copy(self, "zserio_compiler.cmake", self.recipe_folder, self.export_sources_folder) def config_options(self): if self.settings.os == "Windows": @@ -50,6 +63,13 @@ def validate(self): if self.settings.compiler.cppstd: check_min_cppstd(self, self._min_cppstd) + minimum_compiler_version = self._compilers_minimum_version.get(str(self.settings.compiler), False) + if minimum_compiler_version and Version(self.settings.compiler.version) < minimum_compiler_version: + raise ConanInvalidConfiguration( + f"Compiler version '{self.settings.compiler.version}' not supported, " + f"minumum is '{minimum_compiler_version}'!" + ) + def source(self): sources = self.conan_data["sources"][self.version] get(self, **sources["runtime"], strip_root=True) @@ -57,6 +77,8 @@ def source(self): def generate(self): tc = CMakeToolchain(self) + if not self.settings.get_safe("compiler.cppstd"): + tc.variables["CMAKE_CXX_STANDARD"] = str(self._min_cppstd) tc.generate() def build(self): @@ -65,6 +87,8 @@ def build(self): cmake.build() sources = self.conan_data["sources"][self.version] get(self, **sources["compiler"], pattern="zserio.jar") + if Version(self.version) >= "2.14.0": + get(self, **sources["compiler"], pattern="cmake/zserio_compiler.cmake") @property def _cmake_module_path(self): @@ -80,8 +104,13 @@ def package(self): copy(self, "*.a", self.build_folder, lib_dir, keep_path=False) copy(self, "zserio.jar", self.build_folder, os.path.join(self.package_folder, "bin")) - copy(self, "zserio_compiler.cmake", self.export_sources_folder, - os.path.join(self.package_folder, self._cmake_module_path)) + if Version(self.version) >= "2.14.0": + # from 2.14.0 the cmake script is available directly in zserio repository + copy(self, "zserio_compiler.cmake", os.path.join(self.build_folder, "cmake"), + os.path.join(self.package_folder, self._cmake_module_path)) + else: + copy(self, "zserio_compiler.cmake", self.export_sources_folder, + os.path.join(self.package_folder, self._cmake_module_path)) def package_info(self): self.cpp_info.libs = ["ZserioCppRuntime"] diff --git a/recipes/zserio/config.yml b/recipes/zserio/config.yml index 319f45f887837f..24ddb8ef2b935f 100644 --- a/recipes/zserio/config.yml +++ b/recipes/zserio/config.yml @@ -1,3 +1,5 @@ versions: + "2.14.0": + folder: all "2.13.0": folder: all From 09ccea471b4a5ed2cd81098aa673e5acb19f0874 Mon Sep 17 00:00:00 2001 From: Ulrich Telle Date: Tue, 21 May 2024 20:29:25 +0200 Subject: [PATCH 13/83] (#23227) Add recent versions of SQLite3 Multiple Ciphers * Add recent versions of SQLite3 Multiple Ciphers * Adjust recipe - Comment out versions 1.8.1 to 1.8.3 (uncomment if there is a demand for those versions in the future) - Change default of option 'user_authentication' zo False (extension 'User Authentication' is deprecated) - Use default True for option 'user_authentication' for versions below 1.8.4 * Indent comments * Add import for Version function * Remove commented version entries --- recipes/sqlite3mc/all/conandata.yml | 3 +++ recipes/sqlite3mc/all/conanfile.py | 6 +++++- recipes/sqlite3mc/config.yml | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/recipes/sqlite3mc/all/conandata.yml b/recipes/sqlite3mc/all/conandata.yml index 462228eb46b296..9592c1863bcbed 100644 --- a/recipes/sqlite3mc/all/conandata.yml +++ b/recipes/sqlite3mc/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.8.4": + url: "https://github.com/utelle/SQLite3MultipleCiphers/archive/refs/tags/v1.8.4.tar.gz" + sha256: "453e1938a02c91796a013169d56f746f153d7c7a77b59894bf8462b341a343ca" "1.8.0": url: "https://github.com/utelle/SQLite3MultipleCiphers/archive/refs/tags/v1.8.0.tar.gz" sha256: "13D9B939BEF7C7371D58A3874F83B18CF330EB2171205B3680ACDDB2215BE0E5" diff --git a/recipes/sqlite3mc/all/conanfile.py b/recipes/sqlite3mc/all/conanfile.py index eddb5a88de8903..f99b4eebdebe5c 100644 --- a/recipes/sqlite3mc/all/conanfile.py +++ b/recipes/sqlite3mc/all/conanfile.py @@ -2,6 +2,7 @@ from conan import ConanFile from conan.tools.cmake import cmake_layout, CMakeDeps, CMakeToolchain, CMake from conan.tools.files import get, copy +from conan.tools.scm import Version required_conan_version = ">=1.53.0" @@ -84,7 +85,7 @@ class sqlite3mc(ConanFile): "enable_rtree": True, "enable_uuid": True, "use_uri": True, - "user_authentication": True, + "user_authentication": False, "enable_preupdate_hook": False, "enable_session": False, "shell_is_utf8": True, @@ -114,6 +115,9 @@ def build_requirements(self): def config_options(self): if self.settings.os == "Windows": del self.options.fPIC + if Version(self.version) < "1.8.4": + # INFO: https://github.com/utelle/SQLite3MultipleCiphers/commit/3bb033956816b3301f026abb5e83087799de5bee + self.options.user_authentication = True def configure(self): if self.options.shared: diff --git a/recipes/sqlite3mc/config.yml b/recipes/sqlite3mc/config.yml index 4d72270a880489..b8d82dd8119c12 100644 --- a/recipes/sqlite3mc/config.yml +++ b/recipes/sqlite3mc/config.yml @@ -1,3 +1,5 @@ versions: + "1.8.4": + folder: all "1.8.0": folder: all From e0f60b49d80fd045216bd5ea68ecd5f3239c799c Mon Sep 17 00:00:00 2001 From: Cameron Miller Date: Tue, 21 May 2024 13:48:14 -0500 Subject: [PATCH 14/83] (#22923) paho-mqtt-cpp: Add support for version 1.3.2 * Add support for paho 1.3.0, 1.3.1, and 1.3.2 * Only add newest version --------- Co-authored-by: Uilian Ries --- recipes/paho-mqtt-cpp/all/conandata.yml | 7 +++++ .../all/patches/1.3.2-0001-fix-cmake.patch | 26 +++++++++++++++++++ recipes/paho-mqtt-cpp/config.yml | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 recipes/paho-mqtt-cpp/all/patches/1.3.2-0001-fix-cmake.patch diff --git a/recipes/paho-mqtt-cpp/all/conandata.yml b/recipes/paho-mqtt-cpp/all/conandata.yml index ea7973a9092f9b..b3a853f5872bf5 100644 --- a/recipes/paho-mqtt-cpp/all/conandata.yml +++ b/recipes/paho-mqtt-cpp/all/conandata.yml @@ -1,8 +1,15 @@ sources: + "1.3.2": + sha256: c271d521287f417102b447b3d1e8d17be0e0f6a3b0b653334ebcd2ccd20d1e46 + url: https://github.com/eclipse/paho.mqtt.cpp/archive/v1.3.2.tar.gz "1.2.0": sha256: 435e97e4d5b1da13daa26cadd3e83fe9d154930abaa78b8ff1b8c854b5345d8b url: https://github.com/eclipse/paho.mqtt.cpp/archive/v1.2.0.tar.gz patches: + "1.3.2": + - patch_file: "patches/1.3.2-0001-fix-cmake.patch" + patch_description: "CMake: Honor fPIC option and properly link paho-mqtt-c to object target" + patch_type: "conan" "1.2.0": - patch_file: "patches/1.2.0-0001-fix-cmake.patch" patch_description: "CMake: Honor fPIC option and properly link paho-mqtt-c to object target" diff --git a/recipes/paho-mqtt-cpp/all/patches/1.3.2-0001-fix-cmake.patch b/recipes/paho-mqtt-cpp/all/patches/1.3.2-0001-fix-cmake.patch new file mode 100644 index 00000000000000..f2fe425491b502 --- /dev/null +++ b/recipes/paho-mqtt-cpp/all/patches/1.3.2-0001-fix-cmake.patch @@ -0,0 +1,26 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -58,7 +58,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) + + # Generate position-independent code (-fPIC on UNIX) +-set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + # --- System Libraries --- + +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -82,9 +82,12 @@ target_include_directories(paho-cpp-objs + $ + $ + PRIVATE +- ${PAHO_MQTT_C_INCLUDE_DIRS} + src + ) ++target_link_libraries(paho-cpp-objs PUBLIC PahoMqttC::PahoMqttC) ++if(PAHO_BUILD_SHARED) ++ set_target_properties(paho-cpp-objs PROPERTIES POSITION_INDEPENDENT_CODE ON) ++endif() + + target_compile_definitions(paho-cpp-objs PRIVATE PAHO_MQTTPP_EXPORTS) + diff --git a/recipes/paho-mqtt-cpp/config.yml b/recipes/paho-mqtt-cpp/config.yml index b8ea8afb5a3535..01476444007d24 100644 --- a/recipes/paho-mqtt-cpp/config.yml +++ b/recipes/paho-mqtt-cpp/config.yml @@ -1,3 +1,5 @@ versions: + "1.3.2": + folder: "all" "1.2.0": folder: "all" From e1a76000e3a33d71f9f49ae88b36415ca5f9e861 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 21 May 2024 22:11:26 +0300 Subject: [PATCH 15/83] (#23735) assimp: add v5.4.1 * assimp: add v5.4.0 * assimp: set all CMake options explicitly * assimp: bump to v5.4.1 * assimp: drop a possibly unnecessary rmdir * Revert "assimp: drop a possibly unnecessary rmdir" This reverts commit 83c15acef92b0f03873b02fd92768f291e20b12d. * assimp: drop v5.2.2 * assimp: don't use replace_in_file(strict=False) --- recipes/assimp/5.x/conandata.yml | 8 ++--- recipes/assimp/5.x/conanfile.py | 60 +++++++++++++++++++++----------- recipes/assimp/config.yml | 4 +-- 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/recipes/assimp/5.x/conandata.yml b/recipes/assimp/5.x/conandata.yml index 42aa3dd3fee858..503614eeac72ad 100644 --- a/recipes/assimp/5.x/conandata.yml +++ b/recipes/assimp/5.x/conandata.yml @@ -1,18 +1,16 @@ sources: + "5.4.1": + url: "https://github.com/assimp/assimp/archive/refs/tags/v5.4.1.tar.gz" + sha256: "a1bf71c4eb851ca336bba301730cd072b366403e98e3739d6a024f6313b8f954" "5.3.1": url: "https://github.com/assimp/assimp/archive/refs/tags/v5.3.1.tar.gz" sha256: "a07666be71afe1ad4bc008c2336b7c688aca391271188eb9108d0c6db1be53f1" "5.2.5": url: "https://github.com/assimp/assimp/archive/refs/tags/v5.2.5.tar.gz" sha256: "b5219e63ae31d895d60d98001ee5bb809fb2c7b2de1e7f78ceeb600063641e1a" - "5.2.2": - url: "https://github.com/assimp/assimp/archive/refs/tags/v5.2.2.tar.gz" - sha256: "ad76c5d86c380af65a9d9f64e8fc57af692ffd80a90f613dfc6bd945d0b80bb4" "5.1.6": url: "https://github.com/assimp/assimp/archive/refs/tags/v5.1.6.tar.gz" sha256: "52ad3a3776ce320c8add531dbcb2d3b93f2e1f10fcff5ac30178b09ba934d084" patches: - "5.2.2": - - patch_file: "patches/0005-fix-unzip.patch" "5.1.6": - patch_file: "patches/0005-fix-unzip.patch" diff --git a/recipes/assimp/5.x/conanfile.py b/recipes/assimp/5.x/conanfile.py index 9d8d654edce033..67b7cd93c924b5 100644 --- a/recipes/assimp/5.x/conanfile.py +++ b/recipes/assimp/5.x/conanfile.py @@ -2,8 +2,9 @@ from conan.errors import ConanInvalidConfiguration from conan.tools.build import stdcpp_library, check_min_cppstd from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.env import VirtualBuildEnv from conan.tools.files import apply_conandata_patches, collect_libs, copy, export_conandata_patches, get, replace_in_file, rmdir, save -from conan.tools.microsoft import is_msvc +from conan.tools.microsoft import is_msvc, is_msvc_static_runtime from conan.tools.scm import Version import os @@ -205,31 +206,47 @@ def validate(self): if Version(self.version) < "5.3.0" and self._depends_on_clipper and Version(self.dependencies["clipper"].ref.version).major != "4": raise ConanInvalidConfiguration("Only 'clipper/4.x' is supported") + def build_requirements(self): + if Version(self.version) >= "5.4.0": + self.tool_requires("cmake/[>=3.22 <4]") + def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): tc = CMakeToolchain(self) - tc.variables["ASSIMP_HUNTER_ENABLED"] = False - tc.variables["ASSIMP_IGNORE_GIT_HASH"] = True - tc.variables["ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR"] = False tc.variables["ASSIMP_ANDROID_JNIIOSYSTEM"] = False tc.variables["ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT"] = False tc.variables["ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT"] = False tc.variables["ASSIMP_BUILD_ASSIMP_TOOLS"] = False + tc.variables["ASSIMP_BUILD_DOCS"] = False + tc.variables["ASSIMP_BUILD_DRACO"] = False + tc.variables["ASSIMP_BUILD_FRAMEWORK"] = False + tc.variables["ASSIMP_BUILD_MINIZIP"] = False tc.variables["ASSIMP_BUILD_SAMPLES"] = False tc.variables["ASSIMP_BUILD_TESTS"] = False + tc.variables["ASSIMP_BUILD_ZLIB"] = False tc.variables["ASSIMP_DOUBLE_PRECISION"] = self.options.double_precision + tc.variables["ASSIMP_HUNTER_ENABLED"] = False + tc.variables["ASSIMP_IGNORE_GIT_HASH"] = True + tc.variables["ASSIMP_INJECT_DEBUG_POSTFIX"] = False + tc.variables["ASSIMP_INSTALL"] = True tc.variables["ASSIMP_INSTALL_PDB"] = False tc.variables["ASSIMP_NO_EXPORT"] = False - tc.variables["ASSIMP_BUILD_MINIZIP"] = False + tc.variables["ASSIMP_OPT_BUILD_PACKAGES"] = False + tc.variables["ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR"] = False + tc.variables["ASSIMP_UBSAN"] = False + tc.variables["ASSIMP_WARNINGS_AS_ERRORS"] = False + tc.variables["USE_STATIC_CRT"] = is_msvc_static_runtime(self) + for option, (definition, _) in self._format_option_map.items(): value = self.options.get_safe(option) if value is not None: tc.variables[definition] = value if self.settings.os == "Windows": tc.preprocessor_definitions["NOMINMAX"] = 1 - tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0077"] = "NEW" # to avoid warnings + if Version(self.version) < "5.4.0": + tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0077"] = "NEW" tc.cache_variables["CMAKE_PROJECT_Assimp_INCLUDE"] = "conan_deps.cmake" tc.cache_variables["WITH_CLIPPER"] = self._depends_on_clipper @@ -246,24 +263,25 @@ def generate(self): cd.set_property("utfcpp", "cmake_target_name", "utf8cpp::utf8cpp") cd.generate() + venv = VirtualBuildEnv(self) + venv.generate() + def _patch_sources(self): apply_conandata_patches(self) # Don't force several compiler and linker flags - replace_mapping = [ - ("-fPIC", ""), - ("-g ", ""), - ("/WX", ""), - ("-Werror", ""), - ("SET(CMAKE_POSITION_INDEPENDENT_CODE ON)", ""), - ('SET(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MDd /Ob2 /DEBUG:FULL /Zi")', ""), - ('SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")', ""), - ('SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")', ""), - ('SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")', ""), - ] - for before, after in replace_mapping: - replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), before, after, strict=False) - replace_in_file(self, os.path.join(self.source_folder, "code", "CMakeLists.txt"), before, after, strict=False) + for pattern in [ + "-fPIC", + "-g ", + "SET(CMAKE_POSITION_INDEPENDENT_CODE ON)", + 'SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")', + 'SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")', + ]: + replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), pattern, "") + + for pattern in ["-Werror", "/WX"]: + replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), pattern, "") + replace_in_file(self, os.path.join(self.source_folder, "code", "CMakeLists.txt"), pattern, "") # Make sure vendored libs are not used by accident by removing their subdirs allow_vendored = ["Open3DGC"] @@ -298,6 +316,8 @@ def _patch_sources(self): ]: save(self, os.path.join(self.source_folder, "contrib", contrib_header), f"#include <{include}>\n") + if Version(self.version) >= "5.4.0": + rmdir(self, self.source_path.joinpath("contrib", "utf8cpp")) # minizip is provided via conan_deps.cmake, no need to use pkgconfig replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), diff --git a/recipes/assimp/config.yml b/recipes/assimp/config.yml index c3337bd62baf17..e3725a7b778880 100644 --- a/recipes/assimp/config.yml +++ b/recipes/assimp/config.yml @@ -1,9 +1,9 @@ versions: + "5.4.1": + folder: "5.x" "5.3.1": folder: "5.x" "5.2.5": folder: "5.x" - "5.2.2": - folder: "5.x" "5.1.6": folder: "5.x" From 4021754e0b73d4f1ecddcc58550e9fc88f35938c Mon Sep 17 00:00:00 2001 From: toge Date: Wed, 22 May 2024 04:31:47 +0900 Subject: [PATCH 16/83] (#23951) thorvg: add version 0.13.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * thorvg: add version 0.13.3 * add short_paths for MSVC * add with_extra * remove static project_option * update 0.13.4 * drop support msvc debug shared build * drop support static debug build * Update recipes/thorvg/all/conanfile.py Co-authored-by: Rubén Rincón Blanco * Update recipes/thorvg/all/conanfile.py --------- Co-authored-by: Francisco Ramírez Co-authored-by: Rubén Rincón Blanco --- recipes/thorvg/all/conandata.yml | 3 +++ recipes/thorvg/all/conanfile.py | 19 ++++++++++++++++--- recipes/thorvg/config.yml | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/recipes/thorvg/all/conandata.yml b/recipes/thorvg/all/conandata.yml index 7b77209eae819c..ced4bf8389c62f 100644 --- a/recipes/thorvg/all/conandata.yml +++ b/recipes/thorvg/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.13.4": + url: "https://github.com/thorvg/thorvg/archive/refs/tags/v0.13.4.tar.gz" + sha256: "2521adf99fb04ae543f5c14bb5fafd5ba7df0ea2e2a9e61351105c27059fc9e6" "0.13.2": url: "https://github.com/thorvg/thorvg/archive/refs/tags/v0.13.2.tar.gz" sha256: "03b5dbb4c73ff221a4bd7243cc0ad377aecff4c3077f5a57ee2902e4122d3218" diff --git a/recipes/thorvg/all/conanfile.py b/recipes/thorvg/all/conanfile.py index a16ce4127352ff..41c5d63ea4a2dd 100644 --- a/recipes/thorvg/all/conanfile.py +++ b/recipes/thorvg/all/conanfile.py @@ -35,7 +35,8 @@ class ThorvgConan(ConanFile): "with_threads": [True, False], "with_vector": [True, False], # removed in thorvg 0.13.1. Renamed to simd "with_simd": [True, False], # legacy with_vector - "with_examples": [True, False] + "with_examples": [True, False], + "with_extra": [False, 'lottie_expressions'], } default_options = { "shared": False, @@ -48,7 +49,8 @@ class ThorvgConan(ConanFile): "with_threads": True, "with_vector": False, "with_simd": False, - "with_examples": False + "with_examples": False, + "with_extra": 'lottie_expressions', } # See more here: https://github.com/thorvg/thorvg/blob/main/meson_options.txt options_description = { @@ -61,7 +63,9 @@ class ThorvgConan(ConanFile): "with_bindings": "Enable API bindings", "with_tools": "Enable building thorvg tools", "with_examples": "Enable building examples", + "with_extra": "Enable support for exceptionally advanced features", } + short_paths = True @property def _min_cppstd(self): @@ -85,6 +89,8 @@ def config_options(self): del self.options.with_vector else: del self.options.with_simd + if Version(self.version) < "0.13.3": + del self.options.with_extra def configure(self): if self.options.shared: @@ -102,6 +108,11 @@ def validate(self): f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." ) + if is_msvc(self) and self.settings.build_type == "Debug": + raise ConanInvalidConfiguration( + f"{self.ref} doesn't support debug build on MSVC." + ) + def requirements(self): loaders_opt = str(self.options.with_loaders) if loaders_opt in ("all", "jpg"): @@ -131,7 +142,7 @@ def generate(self): "threads": bool(self.options.with_threads), "examples": bool(self.options.with_examples), "tests": False, - "log": is_debug + "log": is_debug, }) # Workaround to avoid: error D8016: '/O1' and '/RTC1' command-line options are incompatible if is_msvc(self) and is_debug: @@ -141,6 +152,8 @@ def generate(self): tc.project_options["simd"] = bool(self.options.with_simd) else: tc.project_options["vector"] = bool(self.options.with_vector) + if self.options.get_safe("with_extra") is not None: + tc.project_options["extra"] = str(self.options.with_extra) if self.options.with_extra else '' tc.generate() tc = PkgConfigDeps(self) tc.generate() diff --git a/recipes/thorvg/config.yml b/recipes/thorvg/config.yml index f404076e3daf53..79367323ed8286 100644 --- a/recipes/thorvg/config.yml +++ b/recipes/thorvg/config.yml @@ -1,4 +1,6 @@ versions: + "0.13.4": + folder: all "0.13.2": folder: all "0.13.0": From 7c416a232a470fd5edb20afa4bd97e7eddb251a0 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Tue, 21 May 2024 21:51:49 +0200 Subject: [PATCH 17/83] (#23998) artery-font-format: refactor test package * artery-font-format: refactor test package * new test --- .../all/test_package/conanfile.py | 3 +- .../all/test_package/example.arfont | Bin 66580 -> 0 bytes .../all/test_package/test_package.cpp | 29 ++---------------- 3 files changed, 4 insertions(+), 28 deletions(-) delete mode 100644 recipes/artery-font-format/all/test_package/example.arfont diff --git a/recipes/artery-font-format/all/test_package/conanfile.py b/recipes/artery-font-format/all/test_package/conanfile.py index 26110ca175735d..0a808db45f2453 100644 --- a/recipes/artery-font-format/all/test_package/conanfile.py +++ b/recipes/artery-font-format/all/test_package/conanfile.py @@ -24,5 +24,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindir, "test_package") - arfont = os.path.join(self.source_folder, "example.arfont") - self.run(f"{bin_path} {arfont}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/artery-font-format/all/test_package/example.arfont b/recipes/artery-font-format/all/test_package/example.arfont deleted file mode 100644 index a1530434762b659980ec1494c080c2f55b5c68b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66580 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 S000000000K1OWg(hk18jFr>Nw diff --git a/recipes/artery-font-format/all/test_package/test_package.cpp b/recipes/artery-font-format/all/test_package/test_package.cpp index 8e85c6f96e501d..ff1d420aff0b04 100644 --- a/recipes/artery-font-format/all/test_package/test_package.cpp +++ b/recipes/artery-font-format/all/test_package/test_package.cpp @@ -1,32 +1,9 @@ -#include -#include #include #include -#include int main(int argc, char *argv[]) { - if (argc < 2) { - std::cerr << "usage: test_package \n"; - return EXIT_FAILURE; - } - - FILE *const font_file = fopen(argv[1], "rb"); - if (font_file == nullptr) { - std::cerr << "couldn't open font file" << std::endl; - return EXIT_FAILURE; - } - - artery_font::StdArteryFont font; - if (!artery_font::read(font, font_file)) { - std::cerr << "couldn't read artery font" << std::endl; - return EXIT_FAILURE; - } - - if (fclose(font_file) != 0) { - std::cerr << "an error occured when closing font file" << std::endl; - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; + auto list = artery_font::StdList(5); + std::cout << "There are " << list.length() << " elements in the list" << std::endl; + return EXIT_SUCCESS; } From edc178dd4f0261b0b6ef82e1eddd8f73f1bf8656 Mon Sep 17 00:00:00 2001 From: toge Date: Wed, 22 May 2024 14:52:24 +0900 Subject: [PATCH 18/83] (#24052) ring-span-lite: add version 0.7.0 --- recipes/ring-span-lite/all/conandata.yml | 3 +++ recipes/ring-span-lite/all/conanfile.py | 13 +++++-------- .../ring-span-lite/all/test_package/conanfile.py | 1 + recipes/ring-span-lite/config.yml | 2 ++ 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/recipes/ring-span-lite/all/conandata.yml b/recipes/ring-span-lite/all/conandata.yml index ecb24a4b876e4d..4919bacb7f2d02 100644 --- a/recipes/ring-span-lite/all/conandata.yml +++ b/recipes/ring-span-lite/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.7.0": + url: "https://github.com/martinmoene/ring-span-lite/archive/v0.7.0.tar.gz" + sha256: "7650bb1bcf76cb0f7ac75240c5346203cbe7eb7027c0843c60253f6db08a93c1" "0.6.0": url: "https://github.com/martinmoene/ring-span-lite/archive/v0.6.0.tar.gz" sha256: "3248ee40a3147e6ba3cee051a838f727770654ade0c9852b1640f0f40d2e0573" diff --git a/recipes/ring-span-lite/all/conanfile.py b/recipes/ring-span-lite/all/conanfile.py index 91e2240703f2a4..fa9939f4bd005c 100644 --- a/recipes/ring-span-lite/all/conanfile.py +++ b/recipes/ring-span-lite/all/conanfile.py @@ -8,12 +8,13 @@ class RingSpanLiteConan(ConanFile): name = "ring-span-lite" - url = "https://github.com/conan-io/conan-center-index" - homepage = "https://github.com/martinmoene/ring-span-lite" description = ( "ring-span lite - A ring_span type for C++98, C++11 and later in a single-file header-only library ") - topics = ("cpp98", "cpp11", "cpp14", "cpp17", "ring-span") license = "BSL-1.0" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/martinmoene/ring-span-lite" + topics = ("cpp98", "cpp11", "cpp14", "cpp17", "ring-span", "header-only") + package_type = "header-library" settings = "os", "arch", "compiler", "build_type" no_copy_source = True @@ -24,11 +25,7 @@ def layout(self): basic_layout(self, src_folder="src") def source(self): - get(self, **self.conan_data["sources"][self.version], - destination=self.source_folder, strip_root=True) - - def build(self): - pass + get(self, **self.conan_data["sources"][self.version], strip_root=True) def package(self): copy(self, "*.hpp", src=os.path.join(self.source_folder, "include"), diff --git a/recipes/ring-span-lite/all/test_package/conanfile.py b/recipes/ring-span-lite/all/test_package/conanfile.py index d120a992c06a69..8a5bb47f50c4ce 100644 --- a/recipes/ring-span-lite/all/test_package/conanfile.py +++ b/recipes/ring-span-lite/all/test_package/conanfile.py @@ -7,6 +7,7 @@ class TestPackageConan(ConanFile): settings = "os", "arch", "compiler", "build_type" generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv" + test_type = "explicit" def requirements(self): self.requires(self.tested_reference_str) diff --git a/recipes/ring-span-lite/config.yml b/recipes/ring-span-lite/config.yml index babcbfb79d964b..a0804c43130f12 100644 --- a/recipes/ring-span-lite/config.yml +++ b/recipes/ring-span-lite/config.yml @@ -1,4 +1,6 @@ versions: + "0.7.0": + folder: all "0.6.0": folder: all "0.5.0": From fefb24eb626b8aac4549b51c9d089f44f0394058 Mon Sep 17 00:00:00 2001 From: Conan Center Index Bot <54393557+conan-center-bot@users.noreply.github.com> Date: Wed, 22 May 2024 10:21:26 +0200 Subject: [PATCH 19/83] (#24050) [bot] Update authorized users list (2024-05-21) Co-authored-by: conan-center-bot Co-authored-by: Daniel --- .c3i/authorized_users.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.c3i/authorized_users.yml b/.c3i/authorized_users.yml index 18f375cb01b058..c7e52eed7c49e6 100644 --- a/.c3i/authorized_users.yml +++ b/.c3i/authorized_users.yml @@ -1352,3 +1352,5 @@ authorized_users: - inPhraZ - nikolay-pv - Julianiolo +- ErikHons +- enzo-pellegrini From 57d9ca51ca2ed465a3a6a347ddb0b7ea510be0b4 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Wed, 22 May 2024 13:25:04 +0200 Subject: [PATCH 20/83] (#24064) [config] Update Conan versions 2.3.1 and 1.64.1 Signed-off-by: Uilian Ries --- .c3i/config_v1.yml | 2 +- .c3i/config_v2.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.c3i/config_v1.yml b/.c3i/config_v1.yml index 68c6f4fbb39ea8..f8b9141cf85241 100644 --- a/.c3i/config_v1.yml +++ b/.c3i/config_v1.yml @@ -3,7 +3,7 @@ id: 'conan-io/conan-center-index' conan: - version: 1.64.0 + version: 1.64.1 artifactory: url: "https://c3i.jfrog.io/c3i" diff --git a/.c3i/config_v2.yml b/.c3i/config_v2.yml index c4ac212386ed74..fcc11dc1b0cb1e 100644 --- a/.c3i/config_v2.yml +++ b/.c3i/config_v2.yml @@ -3,7 +3,7 @@ id: 'conan-io/conan-center-index' conan: - version: 2.2.2 + version: 2.3.1 backup_sources: upload_url: "https://c3i.jfrog.io/artifactory/conan-center-backup-sources/" download_url: "https://c3i.jfrog.io/artifactory/conan-center-backup-sources/" From e3fdf69780e8580996bdb65e69af430363fea4bf Mon Sep 17 00:00:00 2001 From: Jordan Williams Date: Wed, 22 May 2024 07:39:44 -0500 Subject: [PATCH 21/83] (#24061) elfutils: Correctly set pkg-config names for libraries The pkg-config names should be set as provided by the project. See https://sourceware.org/git/?p=elfutils.git;a=tree;f=config;hb=HEAD. --- recipes/elfutils/all/conanfile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/recipes/elfutils/all/conanfile.py b/recipes/elfutils/all/conanfile.py index 7d15bdd2937ed9..759afadd553ee8 100644 --- a/recipes/elfutils/all/conanfile.py +++ b/recipes/elfutils/all/conanfile.py @@ -171,6 +171,7 @@ def package_info(self): # library components self.cpp_info.components["libelf"].libs = ["elf"] self.cpp_info.components["libelf"].requires = ["zlib::zlib"] + self.cpp_info.components["libelf"].set_property("pkg_config_name", "libelf") if self.options.with_bzlib: self.cpp_info.components["libelf"].requires.append("bzip2::bzip2") if self.options.with_lzma: @@ -182,6 +183,7 @@ def package_info(self): self.cpp_info.components["libdw"].libs = ["dw"] self.cpp_info.components["libdw"].requires = ["libelf"] + self.cpp_info.components["libdw"].set_property("pkg_config_name", "libdw") if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["libdw"].system_libs.extend(["dl"]) @@ -192,6 +194,7 @@ def package_info(self): if self.options.get_safe("libdebuginfod"): self.cpp_info.components["libdebuginfod"].libs = ["debuginfod"] self.cpp_info.components["libdebuginfod"].requires = ["libcurl::curl"] + self.cpp_info.components["libdebuginfod"].set_property("pkg_config_name", "libdebuginfod") # utilities bin_path = os.path.join(self.package_folder, "bin") From 1d2d55d0776fb16f548b0282fcf367810210ba9d Mon Sep 17 00:00:00 2001 From: Alex E <36134278+chusitoo@users.noreply.github.com> Date: Wed, 22 May 2024 09:34:34 -0400 Subject: [PATCH 22/83] (#24063) flatbush: add release v1.2.1 --- recipes/flatbush/all/conandata.yml | 3 +++ recipes/flatbush/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/flatbush/all/conandata.yml b/recipes/flatbush/all/conandata.yml index f43d2fb04fed7b..4382ecd215405e 100644 --- a/recipes/flatbush/all/conandata.yml +++ b/recipes/flatbush/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.2.1": + url: "https://github.com/chusitoo/flatbush/archive/refs/tags/v1.2.1.zip" + sha256: "7f8226cb9a58cc75c99800a8fb213b1c2c5df81051ec559d5ff7b4ed0e8c097a" "1.2.0": url: "https://github.com/chusitoo/flatbush/archive/refs/tags/v1.2.0.zip" sha256: "d8d0471ad6aba1e4b1160abc38a0fe21a35e3ea1c2a9509ce9910072f7fc24bb" diff --git a/recipes/flatbush/config.yml b/recipes/flatbush/config.yml index 2424e32f70b3e4..7b2fedacd73876 100644 --- a/recipes/flatbush/config.yml +++ b/recipes/flatbush/config.yml @@ -1,4 +1,6 @@ versions: + "1.2.1": + folder: "all" "1.2.0": folder: "all" "1.1.0": From 2587e89c258640a1d169298aecb85e1b318db37f Mon Sep 17 00:00:00 2001 From: Vincenzo Pellegrini Date: Wed, 22 May 2024 19:33:24 +0200 Subject: [PATCH 23/83] (#24013) qt6: use absolute paths for CMAKE_TOOLCHAIN_FILE path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Rincón Blanco --- recipes/qt/6.x.x/conanfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recipes/qt/6.x.x/conanfile.py b/recipes/qt/6.x.x/conanfile.py index 4a2fb7512fa859..f1f5551a4201c4 100644 --- a/recipes/qt/6.x.x/conanfile.py +++ b/recipes/qt/6.x.x/conanfile.py @@ -477,6 +477,8 @@ def generate(self): tc = CMakeToolchain(self, generator="Ninja") + tc.absolute_paths = True + package_folder = self.package_folder.replace('\\', '/') tc.variables["INSTALL_MKSPECSDIR"] = f"{package_folder}/res/archdatadir/mkspecs" tc.variables["INSTALL_ARCHDATADIR"] = f"{package_folder}/res/archdatadir" From bb85e4c0b7d639432b6f35659db4b52ba3996807 Mon Sep 17 00:00:00 2001 From: toge Date: Thu, 23 May 2024 16:22:52 +0900 Subject: [PATCH 24/83] (#24076) glaze: add version 2.6.6 --- recipes/glaze/all/conandata.yml | 3 +++ recipes/glaze/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/glaze/all/conandata.yml b/recipes/glaze/all/conandata.yml index e60b51ec31f194..41adcfedee6fdf 100644 --- a/recipes/glaze/all/conandata.yml +++ b/recipes/glaze/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.6.6": + url: "https://github.com/stephenberry/glaze/archive/v2.6.6.tar.gz" + sha256: "c8a6b20401eb88419621c8ed25cd69bfee72e27982c1bdc3cec376922c08c2dd" "2.6.5": url: "https://github.com/stephenberry/glaze/archive/v2.6.5.tar.gz" sha256: "5d5f3b41c7803cded9602ee93c80ea38fd3521cdaad6ea1836f818046d21e504" diff --git a/recipes/glaze/config.yml b/recipes/glaze/config.yml index b5f221fac5610f..1675f9e4883427 100644 --- a/recipes/glaze/config.yml +++ b/recipes/glaze/config.yml @@ -1,4 +1,6 @@ versions: + "2.6.6": + folder: all "2.6.5": folder: all "2.6.4": From 653cc79441106237bc0571e9a0db1f7bc7df8571 Mon Sep 17 00:00:00 2001 From: toge Date: Thu, 23 May 2024 16:52:40 +0900 Subject: [PATCH 25/83] (#24077) snappy: add version 1.2.1 --- recipes/snappy/all/conandata.yml | 16 ++++++++++++++++ recipes/snappy/config.yml | 2 ++ 2 files changed, 18 insertions(+) diff --git a/recipes/snappy/all/conandata.yml b/recipes/snappy/all/conandata.yml index 4e4827d4134536..501018a1c41744 100644 --- a/recipes/snappy/all/conandata.yml +++ b/recipes/snappy/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.2.1": + url: "https://github.com/google/snappy/archive/1.2.1.tar.gz" + sha256: "736aeb64d86566d2236ddffa2865ee5d7a82d26c9016b36218fcc27ea4f09f86" "1.2.0": url: "https://github.com/google/snappy/archive/1.2.0.tar.gz" sha256: "9b8f10fbb5e3bc112f2e5e64f813cb73faea42ec9c533a5023b5ae08aedef42e" @@ -15,6 +18,19 @@ sources: url: "https://github.com/google/snappy/archive/1.1.7.tar.gz" sha256: "3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4" patches: + "1.2.1": + - patch_file: "patches/1.1.10-0001-fix-inlining-failure.patch" + patch_description: "disable inlining for compilation error" + patch_type: "portability" + - patch_file: "patches/1.1.9-0002-no-Werror.patch" + patch_description: "disable 'warning as error' options" + patch_type: "portability" + - patch_file: "patches/1.2.0-0003-fix-clobber-list-older-llvm.patch" + patch_description: "disable inline asm on apple-clang" + patch_type: "portability" + - patch_file: "patches/1.2.0-0004-rtti-by-default.patch" + patch_description: "remove 'disable rtti'" + patch_type: "conan" "1.2.0": - patch_file: "patches/1.1.10-0001-fix-inlining-failure.patch" patch_description: "disable inlining for compilation error" diff --git a/recipes/snappy/config.yml b/recipes/snappy/config.yml index 063d5899e0fa9c..4059143be6e19d 100644 --- a/recipes/snappy/config.yml +++ b/recipes/snappy/config.yml @@ -1,4 +1,6 @@ versions: + "1.2.1": + folder: all "1.2.0": folder: all "1.1.10": From 1292b4730c8e3de68c397b09c62201c11bb7cd5a Mon Sep 17 00:00:00 2001 From: Julianiolo <50519317+Julianiolo@users.noreply.github.com> Date: Thu, 23 May 2024 11:52:05 +0200 Subject: [PATCH 26/83] (#24000) Add nifti_clib MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * working recipe, shared not working though * fixed shared build * fixed system libs and added fslio option * added license, removed comments and disabled tests * fixed homepage and removed unused stuff * incorperated requested changes * forgot one change... * added msvc shared being unsupported to validate * Force static-library for Windows * Revert "Force static-library for Windows" This reverts commit d23de317d0629e35cdceb8e4c773498ebdabdf89. * Update recipes/nifti_clib/all/conanfile.py Co-authored-by: Uilian Ries --------- Co-authored-by: Rubén Rincón Blanco Co-authored-by: Uilian Ries --- recipes/nifti_clib/all/conandata.yml | 4 + recipes/nifti_clib/all/conanfile.py | 151 ++++++++++++++++++ .../all/test_package/CMakeLists.txt | 9 ++ .../nifti_clib/all/test_package/conanfile.py | 26 +++ .../all/test_package/test_package.c | 9 ++ recipes/nifti_clib/config.yml | 4 + 6 files changed, 203 insertions(+) create mode 100644 recipes/nifti_clib/all/conandata.yml create mode 100644 recipes/nifti_clib/all/conanfile.py create mode 100644 recipes/nifti_clib/all/test_package/CMakeLists.txt create mode 100644 recipes/nifti_clib/all/test_package/conanfile.py create mode 100644 recipes/nifti_clib/all/test_package/test_package.c create mode 100644 recipes/nifti_clib/config.yml diff --git a/recipes/nifti_clib/all/conandata.yml b/recipes/nifti_clib/all/conandata.yml new file mode 100644 index 00000000000000..1821fa5866772a --- /dev/null +++ b/recipes/nifti_clib/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "3.0.0": + url: "https://github.com/NIFTI-Imaging/nifti_clib/archive/refs/tags/v3.0.0.tar.gz" + sha256: "fe6cb1076974df01844f3f4dab1aa844953b3bc1d679126c652975158573d03d" diff --git a/recipes/nifti_clib/all/conanfile.py b/recipes/nifti_clib/all/conanfile.py new file mode 100644 index 00000000000000..14e3e3f3e49601 --- /dev/null +++ b/recipes/nifti_clib/all/conanfile.py @@ -0,0 +1,151 @@ +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import copy, get, rm, rmdir +from conan.tools.microsoft import is_msvc, is_msvc_static_runtime +import os + + +required_conan_version = ">=1.53.0" + + +class NiftiClibConan(ConanFile): + name = "nifti_clib" + description = "C libraries for NIFTI support" + license = "LicenseRef-LICENSE" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/NIFTI-Imaging/nifti_clib" + topics = ("image") + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + "use_nifti2": [True, False], + "use_cifti": [True, False], + "use_fslio": [True, False] + } + default_options = { + "shared": False, + "fPIC": True, + "use_nifti2": True, + "use_cifti": False, # seems to be beta? + "use_fslio": False # Note in CMakeLists.txt: "If OFF, The copyright of this code is questionable for inclusion with nifti." + } + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def validate(self): + if is_msvc(self) and self.options.shared: + # not supported due to not having dllexport definitions + raise ConanInvalidConfiguration(f"{self.ref} does not support -o {self.ref}:shared=True with MSVC compiler.") + if not self.options.use_nifti2 and self.options.use_cifti: + raise ConanInvalidConfiguration(f"{self.ref} -o '&:use_cifti=True' requires -o '&:use_nifti2=True'") + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + self.settings.rm_safe("compiler.cppstd") + self.settings.rm_safe("compiler.libcxx") + + def layout(self): + cmake_layout(self, src_folder="src") + + def requirements(self): + self.requires("zlib/[>=1.2.11 <2]") + if self.options.use_cifti: + self.requires("expat/[>=2.6.2 <3]") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["NIFTI_INSTALL_NO_DOCS"] = True + tc.variables["USE_NIFTI2_CODE"] = self.options.use_nifti2 + tc.variables["USE_CIFTI_CODE"] = self.options.use_cifti + tc.variables["USE_FSL_CODE"] = self.options.use_fslio + tc.variables["NIFTI_BUILD_TESTING"] = False # disable building tests + if is_msvc(self): + tc.variables["USE_MSVC_RUNTIME_LIBRARY_DLL"] = not is_msvc_static_runtime(self) + tc.preprocessor_definitions["_CRT_SECURE_NO_WARNINGS"] = 1 + tc.generate() + tc = CMakeDeps(self) + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) + cmake.install() + + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rmdir(self, os.path.join(self.package_folder, "share")) + rm(self, "*.la", os.path.join(self.package_folder, "lib")) + rm(self, "*.pdb", os.path.join(self.package_folder, "lib")) + rm(self, "*.pdb", os.path.join(self.package_folder, "bin")) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "nifti") + self.cpp_info.set_property("cmake_target_name", "NIFTI::NIFTI") + self.cpp_info.set_property("pkg_config_name", "nifti") + self.cpp_info.includedirs += [ os.path.join("include", "nifti") ] + + sys_libs = [] + if self.settings.os in ["Linux", "FreeBSD"]: + sys_libs += ["m"] + + self.cpp_info.required_components = ["ZLIB::ZLIB"] + if self.options.use_cifti: + self.cpp_info.required_components += ["EXPAT::EXPAT"] + + self.cpp_info.components["znz"].libs = ["znz"] + self.cpp_info.components["znz"].set_property("pkg_config_name", "znz") + self.cpp_info.components["znz"].set_property("cmake_target_name", "NIFTI::znz") + self.cpp_info.components["znz"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["znz"].system_libs += sys_libs + + # inside the niftilib folder + self.cpp_info.components["niftiio"].libs = ["niftiio"] + self.cpp_info.components["niftiio"].set_property("pkg_config_name", "niftiio") + self.cpp_info.components["niftiio"].set_property("cmake_target_name", "NIFTI::niftiio") + self.cpp_info.components["niftiio"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["niftiio"].system_libs += sys_libs + + self.cpp_info.components["nifticdf"].libs = ["nifticdf"] + self.cpp_info.components["nifticdf"].requires = ["niftiio"] + self.cpp_info.components["nifticdf"].set_property("pkg_config_name", "nifticdf") + self.cpp_info.components["nifticdf"].set_property("cmake_target_name", "NIFTI::nifticdf") + self.cpp_info.components["nifticdf"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["nifticdf"].system_libs += sys_libs + + if self.options.use_nifti2: + self.cpp_info.components["nifti2"].libs = ["nifti2"] + self.cpp_info.components["nifti2"].requires = ["znz"] + self.cpp_info.components["nifti2"].set_property("pkg_config_name", "nifti2") + self.cpp_info.components["nifti2"].set_property("cmake_target_name", "NIFTI::nifti2") + self.cpp_info.components["nifti2"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["nifti2"].system_libs += sys_libs + + if self.options.use_cifti: + self.cpp_info.components["cifti"].libs = ["cifti"] + self.cpp_info.components["cifti"].requires = ["nifti2"] + self.cpp_info.components["cifti"].set_property("pkg_config_name", "cifti") + self.cpp_info.components["cifti"].set_property("cmake_target_name", "NIFTI::cifti") + self.cpp_info.components["cifti"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["cifti"].system_libs += sys_libs + + if self.options.use_fslio: + self.cpp_info.components["fslio"].libs = ["fslio"] + self.cpp_info.components["fslio"].requires = ["nifti2"] + self.cpp_info.components["fslio"].set_property("pkg_config_name", "fslio") + self.cpp_info.components["fslio"].set_property("cmake_target_name", "NIFTI::fslio") + self.cpp_info.components["fslio"].includedirs += [os.path.join("include", "nifti")] + self.cpp_info.components["fslio"].system_libs += sys_libs diff --git a/recipes/nifti_clib/all/test_package/CMakeLists.txt b/recipes/nifti_clib/all/test_package/CMakeLists.txt new file mode 100644 index 00000000000000..a63a2b6d3fe162 --- /dev/null +++ b/recipes/nifti_clib/all/test_package/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.15) + +project(test_package LANGUAGES C) + +find_package(NIFTI 3 REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.c) + +target_link_libraries(${PROJECT_NAME} PRIVATE NIFTI::nifticdf) diff --git a/recipes/nifti_clib/all/test_package/conanfile.py b/recipes/nifti_clib/all/test_package/conanfile.py new file mode 100644 index 00000000000000..ef5d7042163ecc --- /dev/null +++ b/recipes/nifti_clib/all/test_package/conanfile.py @@ -0,0 +1,26 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/nifti_clib/all/test_package/test_package.c b/recipes/nifti_clib/all/test_package/test_package.c new file mode 100644 index 00000000000000..c1c849f8faf184 --- /dev/null +++ b/recipes/nifti_clib/all/test_package/test_package.c @@ -0,0 +1,9 @@ +#include "nifticdf.h" + +// taken from nifti_clib/real_easy/minimal_example_of_downstream_usage +int main(void) { + double input= 7.0; + const double output = alnrel(&input); + + return (output > 0.0) ? EXIT_SUCCESS: EXIT_FAILURE ; +} diff --git a/recipes/nifti_clib/config.yml b/recipes/nifti_clib/config.yml new file mode 100644 index 00000000000000..3a44950f9d81d1 --- /dev/null +++ b/recipes/nifti_clib/config.yml @@ -0,0 +1,4 @@ +versions: + # Newer versions at the top + "3.0.0": + folder: all From 89f3e4df260b3f34b7ebc3284b2fdd6697c9f677 Mon Sep 17 00:00:00 2001 From: toge Date: Thu, 23 May 2024 21:29:30 +0900 Subject: [PATCH 27/83] (#22574) reflect-cpp: add version 0.10.0 * reflecet-cpp: add version 0.7.0 * update 0.8.0 * Set CMAKE_CXX_STANDARD 20 * update 0.9.0 * try to fix MSVC compilation error * simplify patch, drop support toml and msgpack * add patch_source, downgrade flatbuffers * update 0.10.0 * remove patches --------- Co-authored-by: Francisco Ramirez de Anton --- recipes/reflect-cpp/all/conandata.yml | 3 +++ recipes/reflect-cpp/all/conanfile.py | 12 +++--------- recipes/reflect-cpp/all/test_package/CMakeLists.txt | 6 +++++- recipes/reflect-cpp/config.yml | 2 ++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/recipes/reflect-cpp/all/conandata.yml b/recipes/reflect-cpp/all/conandata.yml index e8f0dda4360884..99aed4ef3704c8 100644 --- a/recipes/reflect-cpp/all/conandata.yml +++ b/recipes/reflect-cpp/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.10.0": + url: "https://github.com/getml/reflect-cpp/archive/v0.10.0.tar.gz" + sha256: "d2c8876d993ddc8c57c5804e767786bdb46a2bdf1a6cd81f4b14f57b1552dfd7" "0.6.0": url: "https://github.com/getml/reflect-cpp/archive/v0.6.0.tar.gz" sha256: "D8231B91989397A67E841B56A0673FDCDF969DBE956D54BB629F14100B030664" diff --git a/recipes/reflect-cpp/all/conanfile.py b/recipes/reflect-cpp/all/conanfile.py index 4952fc02f03a6e..ddf0ede842e033 100644 --- a/recipes/reflect-cpp/all/conanfile.py +++ b/recipes/reflect-cpp/all/conanfile.py @@ -1,6 +1,6 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration -from conan.tools.files import get, copy, export_conandata_patches, apply_conandata_patches +from conan.tools.files import get, copy from conan.tools.build import check_min_cppstd from conan.tools.scm import Version from conan.tools.layout import basic_layout @@ -14,7 +14,7 @@ class ReflectCppConan(ConanFile): license = "MIT" url = "https://github.com/conan-io/conan-center-index" homepage = "https://github.com/getml/reflect-cpp" - topics = ("reflection", "serialization", "memory", "json", "xml", "flatbuffers", "header-only") + topics = ("reflection", "serialization", "memory", "json", "xml", "flatbuffers", "yaml", "toml", "msgpack", "header-only") package_type = "header-library" settings = "os", "arch", "compiler", "build_type" options = { @@ -44,9 +44,6 @@ def _compilers_minimum_version(self): "apple-clang": "15", } - def export_sources(self): - export_conandata_patches(self) - def layout(self): basic_layout(self, src_folder="src") @@ -59,7 +56,7 @@ def requirements(self): self.requires("flatbuffers/23.5.26", transitive_headers=True) if self.options.with_yaml: self.requires("yaml-cpp/0.8.0", transitive_headers=True) - + def package_id(self): self.info.clear() @@ -75,9 +72,6 @@ def validate(self): def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) - def build(self): - apply_conandata_patches(self) - def package(self): copy(self, pattern="LICENSE*", dst=os.path.join(self.package_folder, "licenses"), src=self.source_folder) copy( diff --git a/recipes/reflect-cpp/all/test_package/CMakeLists.txt b/recipes/reflect-cpp/all/test_package/CMakeLists.txt index 66b58d7b20ff52..1a6253f9dc61a7 100644 --- a/recipes/reflect-cpp/all/test_package/CMakeLists.txt +++ b/recipes/reflect-cpp/all/test_package/CMakeLists.txt @@ -1,8 +1,12 @@ cmake_minimum_required(VERSION 3.12) project(test_package LANGUAGES CXX) +if (NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 20) +endif() +set(CMAKE_CXX_STANDARD_REQUIRED ON) + find_package(reflect-cpp REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE reflect-cpp::reflect-cpp) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) diff --git a/recipes/reflect-cpp/config.yml b/recipes/reflect-cpp/config.yml index 7d9ba9dbc8ac92..20f0e943b9aeb9 100644 --- a/recipes/reflect-cpp/config.yml +++ b/recipes/reflect-cpp/config.yml @@ -1,3 +1,5 @@ versions: + "0.10.0": + folder: all "0.6.0": folder: all From 7e1811a5650be5cffeb549db68172f46c0bf3c3c Mon Sep 17 00:00:00 2001 From: Conan Center Index Bot <54393557+conan-center-bot@users.noreply.github.com> Date: Thu, 23 May 2024 16:01:33 +0200 Subject: [PATCH 28/83] (#24082) [bot] Update authorized users list (2024-05-23) Co-authored-by: conan-center-bot --- .c3i/authorized_users.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.c3i/authorized_users.yml b/.c3i/authorized_users.yml index c7e52eed7c49e6..873a66c9726eec 100644 --- a/.c3i/authorized_users.yml +++ b/.c3i/authorized_users.yml @@ -1354,3 +1354,6 @@ authorized_users: - Julianiolo - ErikHons - enzo-pellegrini +- BLumia +- ydcpp +- tttapa From 864eb2f0b4d707c1ef316020f8da1ddfb81a2c1c Mon Sep 17 00:00:00 2001 From: ericLemanissier Date: Thu, 23 May 2024 21:15:48 +0200 Subject: [PATCH 29/83] (#24080) xege: fix url the tag does not exist any more caught by https://ericlemanissier.github.io/conan-center-lint-conandata/ --- recipes/xege/all/conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/xege/all/conandata.yml b/recipes/xege/all/conandata.yml index 2f7535221dfb9d..fecd7fb3567660 100644 --- a/recipes/xege/all/conandata.yml +++ b/recipes/xege/all/conandata.yml @@ -1,4 +1,4 @@ sources: "20.08": - url: "https://github.com/wysaid/xege/archive/refs/tags/20.08.tar.gz" + url: "https://github.com/wysaid/xege/archive/refs/tags/v20.08.tar.gz" sha256: "33bc63366d093902b5bc68d3d613ebd90e449bc22800b40f2dd98e2b5c44b88a" From f1c365211670a7768e0901ea5a33b4eb359c58d4 Mon Sep 17 00:00:00 2001 From: Jordan Williams Date: Fri, 24 May 2024 05:14:00 -0500 Subject: [PATCH 30/83] (#24087) pixman: Fix license Pixman is licensed under the MIT license: https://gitlab.freedesktop.org/pixman/pixman/-/tree/master?ref_type=heads --- recipes/pixman/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/pixman/all/conanfile.py b/recipes/pixman/all/conanfile.py index c0b64456bcee2a..793b62a21beb50 100644 --- a/recipes/pixman/all/conanfile.py +++ b/recipes/pixman/all/conanfile.py @@ -20,7 +20,7 @@ class PixmanConan(ConanFile): topics = ("graphics", "compositing", "rasterization") url = "https://github.com/conan-io/conan-center-index" homepage = "https://gitlab.freedesktop.org/pixman/pixman" - license = ("LGPL-2.1-only", "MPL-1.1") + license = ("MIT") package_type = "library" settings = "os", "arch", "compiler", "build_type" options = { From c68bef479f1b8fcc64033a10948157524e498580 Mon Sep 17 00:00:00 2001 From: toge Date: Fri, 24 May 2024 21:52:34 +0900 Subject: [PATCH 31/83] (#24090) sqlite3: add version 3.46.0 --- recipes/sqlite3/all/conandata.yml | 3 +++ recipes/sqlite3/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/sqlite3/all/conandata.yml b/recipes/sqlite3/all/conandata.yml index 7897a31f612113..ac208fb3cac3ab 100644 --- a/recipes/sqlite3/all/conandata.yml +++ b/recipes/sqlite3/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "3.46.0": + url: "https://sqlite.org/2024/sqlite-amalgamation-3460000.zip" + sha256: "712a7d09d2a22652fb06a49af516e051979a3984adb067da86760e60ed51a7f5" "3.45.3": url: "https://sqlite.org/2024/sqlite-amalgamation-3450300.zip" sha256: "ea170e73e447703e8359308ca2e4366a3ae0c4304a8665896f068c736781c651" diff --git a/recipes/sqlite3/config.yml b/recipes/sqlite3/config.yml index a320cb91df08ab..8482b7cd3dae37 100644 --- a/recipes/sqlite3/config.yml +++ b/recipes/sqlite3/config.yml @@ -1,4 +1,6 @@ versions: + "3.46.0": + folder: all "3.45.3": folder: all "3.45.2": From 34be6199327b4cd85565ebc16519b55455741971 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Fri, 24 May 2024 15:11:59 +0200 Subject: [PATCH 32/83] (#24091) onnx: add version 1.16.1 --- recipes/onnx/all/conandata.yml | 3 +++ recipes/onnx/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/onnx/all/conandata.yml b/recipes/onnx/all/conandata.yml index f058303147df0b..0ac824c98a00db 100644 --- a/recipes/onnx/all/conandata.yml +++ b/recipes/onnx/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.16.1": + url: "https://github.com/onnx/onnx/archive/v1.16.1.tar.gz" + sha256: "0e6aa2c0a59bb2d90858ad0040ea1807117cc2f05b97702170f18e6cd6b66fb3" "1.16.0": url: "https://github.com/onnx/onnx/archive/v1.16.0.tar.gz" sha256: "0ce153e26ce2c00afca01c331a447d86fbf21b166b640551fe04258b4acfc6a4" diff --git a/recipes/onnx/config.yml b/recipes/onnx/config.yml index 075fe1cfd61f08..9f508d50a4d4bd 100644 --- a/recipes/onnx/config.yml +++ b/recipes/onnx/config.yml @@ -1,4 +1,6 @@ versions: + "1.16.1": + folder: all "1.16.0": folder: all "1.15.0": From 3e398ded317121662f11f4553d3cb071915bc8db Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Fri, 24 May 2024 16:01:26 +0200 Subject: [PATCH 33/83] (#24066) [docs] Add changelog 2024-05-22 Signed-off-by: Uilian Ries --- docs/changelog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 3d6b985571d207..b1227371013416 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,10 @@ # Changelog +### 22-May-2024 - 12:04 CEST + +- [feature] Add support for Conan 2.3.1 in the CI +- [feature] Add support for Conan 1.64.1 in the CI + ### 03-April-2024 - 13:53 CEST - [feature] Add support for Conan 2.2.2 in the CI From a78bd93ba872b241d5dcd9c8e82bb00b5c05dbb4 Mon Sep 17 00:00:00 2001 From: toge Date: Fri, 24 May 2024 23:32:15 +0900 Subject: [PATCH 34/83] (#24085) lely-core: add version 2.3.4 --- recipes/lely-core/all/conandata.yml | 3 +++ recipes/lely-core/all/conanfile.py | 11 ++++++++--- recipes/lely-core/all/test_package/CMakeLists.txt | 2 +- recipes/lely-core/config.yml | 2 ++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/recipes/lely-core/all/conandata.yml b/recipes/lely-core/all/conandata.yml index 365fdf916f6148..a02c4e51288f28 100644 --- a/recipes/lely-core/all/conandata.yml +++ b/recipes/lely-core/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.3.4": + url: "https://gitlab.com/lely_industries/lely-core/-/archive/v2.3.4/lely-core-v2.3.4.tar.gz" + sha256: "6f31b4fd7ea6aafb1a62b9d956a12a900386564859099e97af1c6bd1d10bdaf2" "2.3.3": url: "https://gitlab.com/lely_industries/lely-core/-/archive/v2.3.3/lely-core-v2.3.3.tar.gz" sha256: "6d0810f9e835543f0aeb5f86dcdc7a24578041f5d0a714bf5a14db2cb24ce373" diff --git a/recipes/lely-core/all/conanfile.py b/recipes/lely-core/all/conanfile.py index 9ed8f191a0a192..7e88aacc941439 100644 --- a/recipes/lely-core/all/conanfile.py +++ b/recipes/lely-core/all/conanfile.py @@ -12,13 +12,18 @@ class LelyConan(ConanFile): name = "lely-core" + description = ( + "The Lely core libraries are a collection of C and C++ libraries and tools, " + "providing high-performance I/O and sensor/actuator control for robotics and IoT applications. " + "The libraries are cross-platform and have few dependencies. " + "They can be even be used on bare-metal microcontrollers with as little as 32 kB RAM." + ) license = "Apache-2.0" - homepage = "https://gitlab.com/lely_industries/lely-core/" url = "https://github.com/conan-io/conan-center-index" - description = "The Lely core libraries are a collection of C and C++ libraries and tools, providing high-performance I/O and sensor/actuator control for robotics and IoT applications. The libraries are cross-platform and have few dependencies. They can be even be used on bare-metal microcontrollers with as little as 32 kB RAM." + homepage = "https://gitlab.com/lely_industries/lely-core/" topics = ("canopen",) package_type = "library" - settings = "os", "compiler", "build_type", "arch" + settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], "fPIC": [True, False], diff --git a/recipes/lely-core/all/test_package/CMakeLists.txt b/recipes/lely-core/all/test_package/CMakeLists.txt index c8be0aec2f07e6..f6bd04d2f5aad8 100644 --- a/recipes/lely-core/all/test_package/CMakeLists.txt +++ b/recipes/lely-core/all/test_package/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.2) -project(test_package) +project(test_package LANGUAGES CXX) find_package(lely-core REQUIRED) diff --git a/recipes/lely-core/config.yml b/recipes/lely-core/config.yml index 5ca4acfdc4f7b4..e8d99700ff1a05 100644 --- a/recipes/lely-core/config.yml +++ b/recipes/lely-core/config.yml @@ -1,4 +1,6 @@ versions: + "2.3.4": + folder: all "2.3.3": folder: all "2.3.2": From 25fa8127e6ca1ec923db89b5617cf14a9c160172 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Sat, 25 May 2024 00:58:08 +0200 Subject: [PATCH 35/83] (#23942) sdf: refactor test package * sdf: refactor test package * evade UB * use sdf function * minimal test with img_data null * remove stb from conanfile * fix * remove stb from test_v1 * fix --- recipes/sdf/all/test_package/CMakeLists.txt | 3 +- recipes/sdf/all/test_package/conanfile.py | 4 +-- recipes/sdf/all/test_package/test.png | Bin 8484 -> 0 bytes recipes/sdf/all/test_package/test_package.c | 29 +++--------------- .../sdf/all/test_v1_package/CMakeLists.txt | 3 +- recipes/sdf/all/test_v1_package/conanfile.py | 6 +--- 6 files changed, 8 insertions(+), 37 deletions(-) delete mode 100644 recipes/sdf/all/test_package/test.png diff --git a/recipes/sdf/all/test_package/CMakeLists.txt b/recipes/sdf/all/test_package/CMakeLists.txt index afcf11bbd87760..0e0a1b879f4366 100644 --- a/recipes/sdf/all/test_package/CMakeLists.txt +++ b/recipes/sdf/all/test_package/CMakeLists.txt @@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.1) project(test_package LANGUAGES C) find_package(sdf REQUIRED CONFIG) -find_package(stb REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.c) -target_link_libraries(${PROJECT_NAME} PRIVATE sdf::sdf stb::stb) +target_link_libraries(${PROJECT_NAME} PRIVATE sdf::sdf) diff --git a/recipes/sdf/all/test_package/conanfile.py b/recipes/sdf/all/test_package/conanfile.py index ad5b8f9465ed63..0a6bc68712d901 100644 --- a/recipes/sdf/all/test_package/conanfile.py +++ b/recipes/sdf/all/test_package/conanfile.py @@ -14,7 +14,6 @@ def layout(self): def requirements(self): self.requires(self.tested_reference_str) - self.requires("stb/cci.20210910") def build(self): cmake = CMake(self) @@ -24,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - img_path = os.path.join(self.source_folder, "test.png") - self.run(f"{bin_path} {img_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/sdf/all/test_package/test.png b/recipes/sdf/all/test_package/test.png deleted file mode 100644 index 568aa3449320a47d6daad61b3adc56941df221a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8484 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 S`x5a00000 Date: Sat, 25 May 2024 20:12:15 +0900 Subject: [PATCH 36/83] (#24088) wasmedge: add version 0.14.0 --- recipes/wasmedge/all/conandata.yml | 41 ++++++++++++++++++++++++++++++ recipes/wasmedge/config.yml | 2 ++ 2 files changed, 43 insertions(+) diff --git a/recipes/wasmedge/all/conandata.yml b/recipes/wasmedge/all/conandata.yml index b7eef0f907d2e1..d88f2037f15aa6 100644 --- a/recipes/wasmedge/all/conandata.yml +++ b/recipes/wasmedge/all/conandata.yml @@ -1,4 +1,45 @@ sources: + "0.14.0": + Windows: + "x86_64": + Visual Studio: + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-windows.zip" + sha256: "cd0dd57df8f3e8cb7ef0e57d2d09f1740093c2179fad933b270979bafe8295a1" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.14.0/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + Linux: + "x86_64": + "gcc": + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-manylinux2014_x86_64.tar.gz" + sha256: "73b3892f94c143dc09d53415c6848bb8e87206a1f614fd0edfc89957a0f1b027" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.14.0/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + "armv8": + "gcc": + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-manylinux2014_aarch64.tar.gz" + sha256: "6136c42066cdd9a96170285af2613dc00f262f5758a03d7afb3ab12a36363c79" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.11.1/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + Macos: + "x86_64": + "gcc": + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-darwin_x86_64.tar.gz" + sha256: "03c5d77be63ecad54ed33a1885f170bc854246ed8f9ae8e366b114bc8c0c2422" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.14.0/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + "armv8": + "gcc": + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-darwin_arm64.tar.gz" + sha256: "4f2f34545a97768e28700099ac9cbb18e7b434779d237de860324de400922546" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.14.0/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + Android: + "armv8": + "gcc": + - url: "https://github.com/WasmEdge/WasmEdge/releases/download/0.14.0/WasmEdge-0.14.0-android_aarch64.tar.gz" + sha256: "58b834db8814b27051494df60588dc56f3a5d740604e92c1eac9e5021b311c03" + - url: "https://raw.githubusercontent.com/WasmEdge/WasmEdge/0.14.0/LICENSE" + sha256: "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" "0.13.5": Windows: "x86_64": diff --git a/recipes/wasmedge/config.yml b/recipes/wasmedge/config.yml index 13b6ff12faa84a..4d4208e046a5e5 100644 --- a/recipes/wasmedge/config.yml +++ b/recipes/wasmedge/config.yml @@ -1,4 +1,6 @@ versions: + "0.14.0": + folder: "all" "0.13.5": folder: "all" "0.11.2": From 236a1983cb6c1cecb0c8327c5b82dc96564a8cea Mon Sep 17 00:00:00 2001 From: toge Date: Mon, 27 May 2024 15:53:22 +0900 Subject: [PATCH 37/83] (#24109) thorvg: add version 0.13.5 --- recipes/thorvg/all/conandata.yml | 3 +++ recipes/thorvg/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/thorvg/all/conandata.yml b/recipes/thorvg/all/conandata.yml index ced4bf8389c62f..68268a5d2d990f 100644 --- a/recipes/thorvg/all/conandata.yml +++ b/recipes/thorvg/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.13.5": + url: "https://github.com/thorvg/thorvg/archive/refs/tags/v0.13.5.tar.gz" + sha256: "977ed74c3846c9a6acd5765aff776745d40e3c91507b22e51177d59c69afd198" "0.13.4": url: "https://github.com/thorvg/thorvg/archive/refs/tags/v0.13.4.tar.gz" sha256: "2521adf99fb04ae543f5c14bb5fafd5ba7df0ea2e2a9e61351105c27059fc9e6" diff --git a/recipes/thorvg/config.yml b/recipes/thorvg/config.yml index 79367323ed8286..ebe3fa467b911a 100644 --- a/recipes/thorvg/config.yml +++ b/recipes/thorvg/config.yml @@ -1,4 +1,6 @@ versions: + "0.13.5": + folder: all "0.13.4": folder: all "0.13.2": From 38c0190dda9112a01a815d8606b8ab7d3a66fe7f Mon Sep 17 00:00:00 2001 From: Conan Center Index Bot <54393557+conan-center-bot@users.noreply.github.com> Date: Mon, 27 May 2024 09:39:24 +0100 Subject: [PATCH 38/83] (#24119) [bot] Update authorized users list (2024-05-27) Co-authored-by: conan-center-bot --- .c3i/authorized_users.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.c3i/authorized_users.yml b/.c3i/authorized_users.yml index 873a66c9726eec..b28163cd329936 100644 --- a/.c3i/authorized_users.yml +++ b/.c3i/authorized_users.yml @@ -1357,3 +1357,5 @@ authorized_users: - BLumia - ydcpp - tttapa +- zeeshancs07 +- jll63 From 0c78eb2e4a4a91f99749344ee691283a87eed1e8 Mon Sep 17 00:00:00 2001 From: Sneder89 <45610045+Sneder89@users.noreply.github.com> Date: Mon, 27 May 2024 11:13:28 +0200 Subject: [PATCH 39/83] (#24114) Add cppcheck 2.14.1 * Merge branch 'master' of https://github.com/Sneder89/conan-center-index add 2.14.1 * Update conandata.yml --- recipes/cppcheck/all/conandata.yml | 3 +++ recipes/cppcheck/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/cppcheck/all/conandata.yml b/recipes/cppcheck/all/conandata.yml index 51d7be47f0134e..48ffe24a028f59 100644 --- a/recipes/cppcheck/all/conandata.yml +++ b/recipes/cppcheck/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.14.1": + url: "https://github.com/danmar/cppcheck/archive/2.14.1.tar.gz" + sha256: "22d1403fbc3158f35b5216d7b0a50bbaf0c80bf6663933a71f65cc4fc307ff3d" "2.14": url: "https://github.com/danmar/cppcheck/archive/2.14.0.tar.gz" sha256: "2d2ead75db10c5993d77c8dfe854dc42b00fac65953611bb6c83e25fc74b9d50" diff --git a/recipes/cppcheck/config.yml b/recipes/cppcheck/config.yml index 939fbf2adada0d..c85ff5b73f834b 100644 --- a/recipes/cppcheck/config.yml +++ b/recipes/cppcheck/config.yml @@ -1,6 +1,8 @@ versions: "2.14": folder: all + "2.14.1": + folder: all "2.13.4": folder: all "2.13.3": From 79dacca15ce38b6b59d51d7121c491ee27c65b91 Mon Sep 17 00:00:00 2001 From: toge Date: Mon, 27 May 2024 19:16:16 +0900 Subject: [PATCH 40/83] (#24108) sqlcipher: add version 4.6.0 * sqlcipher: add version 4.6.0 * revert patches for 4.5.7 --- recipes/sqlcipher/all/conandata.yml | 7 +++++++ recipes/sqlcipher/config.yml | 2 ++ 2 files changed, 9 insertions(+) diff --git a/recipes/sqlcipher/all/conandata.yml b/recipes/sqlcipher/all/conandata.yml index e77eae3f0547e0..3d9822ef95d644 100644 --- a/recipes/sqlcipher/all/conandata.yml +++ b/recipes/sqlcipher/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "4.6.0": + url: "https://github.com/sqlcipher/sqlcipher/archive/v4.6.0.zip" + sha256: "2d41ba2bf09c74a488f546551f65f0fa8517413307a0509dd2c87d66df6bff95" "4.5.7": url: "https://github.com/sqlcipher/sqlcipher/archive/v4.5.7.zip" sha256: "4f7e00e4b485d162d638094daba354d04aabb0ca68b72cc1826f082b40c9fd7d" @@ -24,6 +27,10 @@ sources: url: "https://github.com/sqlcipher/sqlcipher/archive/v4.3.0.zip" sha256: "41e1408465488e9c478ca5b7c5f8410405a10caa73b82db60ac115a76c563c05" patches: + "4.6.0": + - patch_file: patches/Makefile.in-v4.5.7.patch + - patch_file: patches/Makefile.msc-v4.5.7.patch + - patch_file: patches/fix_configure-v4.5.7.patch "4.5.7": - patch_file: patches/Makefile.in-v4.5.7.patch - patch_file: patches/Makefile.msc-v4.5.7.patch diff --git a/recipes/sqlcipher/config.yml b/recipes/sqlcipher/config.yml index 06f44a175119e2..05e71e56405516 100644 --- a/recipes/sqlcipher/config.yml +++ b/recipes/sqlcipher/config.yml @@ -1,4 +1,6 @@ versions: + "4.6.0": + folder: all "4.5.7": folder: all "4.5.6": From adae3dfc85af2dcbd443a46de5043e6e1663c3c9 Mon Sep 17 00:00:00 2001 From: SpaceIm <30052553+SpaceIm@users.noreply.github.com> Date: Mon, 27 May 2024 12:54:02 +0200 Subject: [PATCH 41/83] (#24100) cpprestsdk: only propagate boost components cpprestsdk depends on --- recipes/cpprestsdk/all/conanfile.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/recipes/cpprestsdk/all/conanfile.py b/recipes/cpprestsdk/all/conanfile.py index c75c41fcad7c4f..c8ac42529d53c2 100644 --- a/recipes/cpprestsdk/all/conanfile.py +++ b/recipes/cpprestsdk/all/conanfile.py @@ -112,7 +112,13 @@ def package_info(self): # cpprestsdk_boost_internal self.cpp_info.components["cpprestsdk_boost_internal"].set_property("cmake_target_name", "cpprestsdk::cpprestsdk_boost_internal") self.cpp_info.components["cpprestsdk_boost_internal"].includedirs = [] - self.cpp_info.components["cpprestsdk_boost_internal"].requires = ["boost::boost"] + ## List of Boost components cpprestsdk depends on: + ## see https://github.com/microsoft/cpprestsdk/blob/v2.10.19/Release/cmake/cpprest_find_boost.cmake#L77-L106 + self.cpp_info.components["cpprestsdk_boost_internal"].requires = ["boost::headers", "boost::system"] + if self.settings.os != "Windows": + self.cpp_info.components["cpprestsdk_boost_internal"].requires.extend(["boost::random", "boost::thread", "boost::filesystem", "boost::chrono", "boost::atomic"]) + if self.settings.os != "Android": + self.cpp_info.components["cpprestsdk_boost_internal"].requires.extend(["boost::date_time", "boost::regex"]) # cpprestsdk_openssl_internal self.cpp_info.components["cpprestsdk_openssl_internal"].set_property("cmake_target_name", "cpprestsdk::cpprestsdk_openssl_internal") self.cpp_info.components["cpprestsdk_openssl_internal"].includedirs = [] From 38cd204d0846c4f404e27d3f0ea04a1e95024d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20ZANGLA?= <5780920+gagoi@users.noreply.github.com> Date: Mon, 27 May 2024 13:39:21 +0200 Subject: [PATCH 42/83] (#24094) Update STB to cci.20240213 --- recipes/stb/all/conandata.yml | 3 +++ recipes/stb/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/stb/all/conandata.yml b/recipes/stb/all/conandata.yml index c0c0739831fe06..475c92e1a56fda 100644 --- a/recipes/stb/all/conandata.yml +++ b/recipes/stb/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "cci.20240213": + url: "https://github.com/nothings/stb/archive/ae721c50eaf761660b4f90cc590453cdb0c2acd0.zip" + sha256: "5d075769721e676746d0c25b698a0f00741f68252f9ab4b7ee245c513aeec3de" "cci.20230920": url: "https://github.com/nothings/stb/archive/5736b15f7ea0ffb08dd38af21067c314d6a3aae9.zip" sha256: "b6601f182fa4bc04dd0f135e38231e8a2c6c9e7901c66a942871f03285713b05" diff --git a/recipes/stb/config.yml b/recipes/stb/config.yml index a0248de0acece5..6df647ee3d6a75 100644 --- a/recipes/stb/config.yml +++ b/recipes/stb/config.yml @@ -1,4 +1,6 @@ versions: + "cci.20240213": + folder: all "cci.20230920": folder: all "cci.20220909": From 3811fe7f4469571550dbfde1a98fb81b1fd001dc Mon Sep 17 00:00:00 2001 From: Martin Delille Date: Mon, 27 May 2024 14:54:07 +0200 Subject: [PATCH 43/83] (#24098) [uncrustify] Add version 0.79.0 and remove 0.75.1 and 0.74.0 --- recipes/uncrustify/all/conandata.yml | 12 +++--------- recipes/uncrustify/config.yml | 8 ++------ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/recipes/uncrustify/all/conandata.yml b/recipes/uncrustify/all/conandata.yml index b95a9b875d7e40..e46325da0f3423 100644 --- a/recipes/uncrustify/all/conandata.yml +++ b/recipes/uncrustify/all/conandata.yml @@ -1,16 +1,10 @@ sources: + "0.79.0": + url: "https://github.com/uncrustify/uncrustify/archive/uncrustify-0.79.0.tar.gz" + sha256: "e7afaeabf636b7f0ce4e3e9747b95f7bd939613a8db49579755dddf44fedca5f" "0.78.1": url: "https://github.com/uncrustify/uncrustify/archive/uncrustify-0.78.1.tar.gz" sha256: "ecaf4c0adca14c36dfffa30bc28e69865115ecd602c90eb16a8cddccb41caad2" - "0.78.0": - url: "https://github.com/uncrustify/uncrustify/archive/refs/tags/uncrustify-0.78.0.tar.gz" - sha256: "377efec187c26c7ad77900d94032fa51b029831c69442d607a6e53ef2115928f" "0.77.1": url: "https://github.com/uncrustify/uncrustify/archive/refs/tags/uncrustify-0.77.1.tar.gz" sha256: "414bbc9f7860eb18a53074f9af14ed04638a633b2216a73f2629291300d37c1b" - "0.75.1": - url: "https://github.com/uncrustify/uncrustify/archive/refs/tags/uncrustify-0.75.1.tar.gz" - sha256: "fd14acc0a31ed88b33137bdc26d32964327488c835f885696473ef07caf2e182" - "0.74.0": - url: "https://github.com/uncrustify/uncrustify/archive/refs/tags/uncrustify-0.74.0.tar.gz" - sha256: "b7d24e256e7f919aa96289ac8167ac98340df7faa2d34b60d2242dc54700caaa" diff --git a/recipes/uncrustify/config.yml b/recipes/uncrustify/config.yml index d0d1205acdb6ee..2c75346920bc68 100644 --- a/recipes/uncrustify/config.yml +++ b/recipes/uncrustify/config.yml @@ -1,11 +1,7 @@ versions: - "0.78.1": + "0.79.0": folder: all - "0.78.0": + "0.78.1": folder: all "0.77.1": folder: all - "0.75.1": - folder: all - "0.74.0": - folder: all From d7c9b4bb73fe899300eccbcee4badea2c61821f2 Mon Sep 17 00:00:00 2001 From: Joel Johnson Date: Mon, 27 May 2024 07:15:43 -0600 Subject: [PATCH 44/83] (#24099) md4c: expose md2html option --- recipes/md4c/all/conanfile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/recipes/md4c/all/conanfile.py b/recipes/md4c/all/conanfile.py index 554edcc0d20574..40333503038dd2 100644 --- a/recipes/md4c/all/conanfile.py +++ b/recipes/md4c/all/conanfile.py @@ -20,11 +20,13 @@ class Md4cConan(ConanFile): options = { "shared": [True, False], "fPIC": [True, False], + "md2html": [True, False], "encoding": ["utf-8", "utf-16", "ascii"], } default_options = { "shared": False, "fPIC": True, + "md2html": True, "encoding": "utf-8", } @@ -53,6 +55,7 @@ def source(self): def generate(self): tc = CMakeToolchain(self) + tc.variables["BUILD_MD2HTML_EXECUTABLE"] = self.options.md2html if self.options.encoding == "utf-8": tc.preprocessor_definitions["MD4C_USE_UTF8"] = "1" elif self.options.encoding == "utf-16": From 132b01004c32234f5e29f577318dd3970688eaff Mon Sep 17 00:00:00 2001 From: Andrey Filipenkov Date: Mon, 27 May 2024 16:55:14 +0300 Subject: [PATCH 45/83] (#24103) add Qt 5.15.14 * add Qt 5.15.14 * remove Android backtrace patch for 5.15.14 https://code.qt.io/cgit/qt/qtbase.git/commit/?h=5.15&id=1f154eec608db6caa027db534856f40d2c7ccf87 --- recipes/qt/5.x.x/conandata.yml | 45 ++++ recipes/qt/5.x.x/qtmodules5.15.14.conf | 326 +++++++++++++++++++++++++ recipes/qt/config.yml | 2 + 3 files changed, 373 insertions(+) create mode 100644 recipes/qt/5.x.x/qtmodules5.15.14.conf diff --git a/recipes/qt/5.x.x/conandata.yml b/recipes/qt/5.x.x/conandata.yml index a8c2e2c8e2a719..cd9975047fd935 100644 --- a/recipes/qt/5.x.x/conandata.yml +++ b/recipes/qt/5.x.x/conandata.yml @@ -1,4 +1,27 @@ sources: + "5.15.14": + url: + - "https://download.qt.io/official_releases/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://download.qt.io/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://qt-mirror.dannhauer.de/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirror.netcologne.de/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.fau.de/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.nluug.nl/languages/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.dotsrc.org/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.20i.com/pub/qt.io/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.ukfast.co.uk/sites/qt.io/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.icm.edu.pl/packages/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.acc.umu.se/mirror/qt.io/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://qt.mirror.constant.com/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.sau.edu.cn/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.cloud.tencent.com/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirror.bjtu.edu.cn/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirrors.sjtug.sjtu.edu.cn/qt/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.jaist.ac.jp/pub/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + - "https://mirror.aarnet.edu.au/pub/qtproject/archive/qt/5.15/5.15.14/single/qt-everywhere-opensource-src-5.15.14.tar.xz" + sha256: "fdd3a4f197d2c800ee0085c721f4bef60951cbda9e9c46e525d1412f74264ed7" "5.15.13": url: - "https://download.qt.io/official_releases/qt/5.15/5.15.13/single/qt-everywhere-opensource-src-5.15.13.tar.xz" @@ -94,6 +117,28 @@ sources: - "https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/archive/qt/5.15/5.15.9/single/qt-everywhere-opensource-src-5.15.9.tar.xz" sha256: "26d5f36134db03abe4a6db794c7570d729c92a3fc1b0bf9b1c8f86d0573cd02f" patches: + "5.15.14": + - "base_path": "qt5/qtbase" + "patch_file": "patches/aa2a39dea5.diff" + - "base_path": "qt5/qtwebengine" + "patch_file": "patches/c72097e.diff" + - "base_path": "qt5/qttools" + "patch_file": "patches/fix-macdeployqt.diff" + - "base_path": "qt5/qtwebengine/src/3rdparty" + "patch_file": "patches/0001-Find-fontconfig-using-pkg-config.patch" + - "base_path": "qt5/qtbase" + "patch_file": "patches/android-openssl.diff" + - "base_path": "qt5/qtbase" + "patch_description": "Fix qmake build with apple-clang>=15" + "patch_file": "patches/5.15.8-fix-qmake-default-libdirs-apple-clang-15.patch" + "patch_source": "https://codereview.qt-project.org/c/qt/qtbase/+/503916" + "patch_type": "portability" + - "base_path": "qt5/qtbase" + "patch_description": "Fix usage of memory_resource with apple-clang>=15 and deployment\ + \ target of macOS < 14" + "patch_file": "patches/5.15.12-fix-macos-cpp-lib-memory-resource.patch" + "patch_source": "https://codereview.qt-project.org/c/qt/qtbase/+/482392" + "patch_type": "portability" "5.15.13": - "base_path": "qt5/qtbase" "patch_file": "patches/aa2a39dea5.diff" diff --git a/recipes/qt/5.x.x/qtmodules5.15.14.conf b/recipes/qt/5.x.x/qtmodules5.15.14.conf new file mode 100644 index 00000000000000..452233655f279d --- /dev/null +++ b/recipes/qt/5.x.x/qtmodules5.15.14.conf @@ -0,0 +1,326 @@ +[submodule "qtbase"] + path = qtbase + url = ../qtbase.git + branch = 5.15 + status = essential +[submodule "qtsvg"] + depends = qtbase + path = qtsvg + url = ../qtsvg.git + branch = 5.15 + status = addon +[submodule "qtdeclarative"] + depends = qtbase + recommends = qtsvg + path = qtdeclarative + url = ../qtdeclarative.git + branch = 5.15 + status = essential +[submodule "qtactiveqt"] + depends = qtbase + path = qtactiveqt + url = ../qtactiveqt.git + branch = 5.15 + status = addon +[submodule "qtscript"] + depends = qtbase + recommends = qttools + path = qtscript + url = ../qtscript.git + branch = 5.15 + status = deprecated +[submodule "qtmultimedia"] + depends = qtbase + recommends = qtdeclarative + path = qtmultimedia + url = ../qtmultimedia.git + branch = 5.15 + status = essential +[submodule "qttools"] + depends = qtbase + recommends = qtdeclarative qtactiveqt + path = qttools + url = ../qttools.git + branch = 5.15 + status = essential +[submodule "qtxmlpatterns"] + depends = qtbase + recommends = qtdeclarative + path = qtxmlpatterns + url = ../qtxmlpatterns.git + branch = 5.15 + status = deprecated +[submodule "qttranslations"] + depends = qttools + path = qttranslations + url = ../qttranslations.git + branch = 5.15 + status = essential + priority = 30 +[submodule "qtdoc"] + depends = qtdeclarative qttools + recommends = qtmultimedia qtquickcontrols qtquickcontrols2 + path = qtdoc + url = ../qtdoc.git + branch = 5.15 + status = essential + priority = 40 +[submodule "qtrepotools"] + path = qtrepotools + url = ../qtrepotools.git + branch = master + status = essential + project = - +[submodule "qtqa"] + depends = qtbase + path = qtqa + url = ../qtqa.git + branch = master + status = essential + priority = 50 +[submodule "qtlocation"] + depends = qtbase + recommends = qtdeclarative qtquickcontrols qtquickcontrols2 qtserialport + path = qtlocation + url = ../qtlocation.git + branch = 5.15 + status = addon +[submodule "qtsensors"] + depends = qtbase + recommends = qtdeclarative + path = qtsensors + url = ../qtsensors.git + branch = 5.15 + status = addon +[submodule "qtsystems"] + depends = qtbase + recommends = qtdeclarative + path = qtsystems + url = ../qtsystems.git + branch = dev + status = ignore +[submodule "qtfeedback"] + depends = qtdeclarative + recommends = qtmultimedia + path = qtfeedback + url = ../qtfeedback.git + branch = master + status = ignore +[submodule "qtdocgallery"] + depends = qtdeclarative + path = qtdocgallery + url = ../qtdocgallery.git + branch = master + status = ignore +[submodule "qtpim"] + depends = qtdeclarative + path = qtpim + url = ../qtpim.git + branch = dev + status = ignore +[submodule "qtconnectivity"] + depends = qtbase + recommends = qtdeclarative qtandroidextras + path = qtconnectivity + url = ../qtconnectivity.git + branch = 5.15 + status = addon +[submodule "qtwayland"] + depends = qtbase + recommends = qtdeclarative + path = qtwayland + url = ../qtwayland.git + branch = 5.15 + status = addon +[submodule "qt3d"] + depends = qtbase + recommends = qtdeclarative qtimageformats qtgamepad + path = qt3d + url = ../qt3d.git + branch = 5.15 + status = addon +[submodule "qtimageformats"] + depends = qtbase + path = qtimageformats + url = ../qtimageformats.git + branch = 5.15 + status = addon +[submodule "qtgraphicaleffects"] + depends = qtdeclarative + path = qtgraphicaleffects + url = ../qtgraphicaleffects.git + branch = 5.15 + status = essential +[submodule "qtquickcontrols"] + depends = qtdeclarative + recommends = qtgraphicaleffects + path = qtquickcontrols + url = ../qtquickcontrols.git + branch = 5.15 + status = addon +[submodule "qtserialbus"] + depends = qtbase + recommends = qtserialport + path = qtserialbus + url = ../qtserialbus.git + branch = 5.15 + status = addon +[submodule "qtserialport"] + depends = qtbase + path = qtserialport + url = ../qtserialport.git + branch = 5.15 + status = addon +[submodule "qtx11extras"] + depends = qtbase + path = qtx11extras + url = ../qtx11extras.git + branch = 5.15 + status = addon +[submodule "qtmacextras"] + depends = qtbase + path = qtmacextras + url = ../qtmacextras.git + branch = 5.15 + status = addon +[submodule "qtwinextras"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtwinextras + url = ../qtwinextras.git + branch = 5.15 + status = addon +[submodule "qtandroidextras"] + depends = qtbase + path = qtandroidextras + url = ../qtandroidextras.git + branch = 5.15 + status = addon +[submodule "qtwebsockets"] + depends = qtbase + recommends = qtdeclarative + path = qtwebsockets + url = ../qtwebsockets.git + branch = 5.15 + status = addon +[submodule "qtwebchannel"] + depends = qtbase + recommends = qtdeclarative qtwebsockets + path = qtwebchannel + url = ../qtwebchannel.git + branch = 5.15 + status = addon +[submodule "qtwebengine"] + depends = qtdeclarative + recommends = qtquickcontrols qtquickcontrols2 qtlocation qtwebchannel qttools + path = qtwebengine + url = ../qtwebengine.git + branch = 5.15 + status = addon + priority = 10 +[submodule "qtcanvas3d"] + depends = qtdeclarative + path = qtcanvas3d + url = ../qtcanvas3d.git + branch = dev + status = ignore +[submodule "qtwebview"] + depends = qtdeclarative + recommends = qtwebengine + path = qtwebview + url = ../qtwebview.git + branch = 5.15 + status = addon +[submodule "qtquickcontrols2"] + depends = qtgraphicaleffects + recommends = qtimageformats + path = qtquickcontrols2 + url = ../qtquickcontrols2.git + branch = 5.15 + status = essential +[submodule "qtpurchasing"] + depends = qtbase + recommends = qtdeclarative qtandroidextras + path = qtpurchasing + url = ../qtpurchasing.git + branch = 5.15 + status = addon +[submodule "qtcharts"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtcharts + url = ../qtcharts.git + branch = 5.15 + status = addon +[submodule "qtdatavis3d"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtdatavis3d + url = ../qtdatavis3d.git + branch = 5.15 + status = addon +[submodule "qtvirtualkeyboard"] + depends = qtbase qtdeclarative qtsvg + recommends = qtmultimedia qtquickcontrols + path = qtvirtualkeyboard + url = ../qtvirtualkeyboard.git + branch = 5.15 + status = addon +[submodule "qtgamepad"] + depends = qtbase + recommends = qtdeclarative + path = qtgamepad + url = ../qtgamepad.git + branch = 5.15 + status = addon +[submodule "qtscxml"] + depends = qtbase qtdeclarative + path = qtscxml + url = ../qtscxml.git + branch = 5.15 + status = addon +[submodule "qtspeech"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtspeech + url = ../qtspeech.git + branch = 5.15 + status = addon +[submodule "qtnetworkauth"] + depends = qtbase + path = qtnetworkauth + url = ../qtnetworkauth.git + branch = 5.15 + status = addon +[submodule "qtremoteobjects"] + depends = qtbase + recommends = qtdeclarative + path = qtremoteobjects + url = ../qtremoteobjects.git + branch = 5.15 + status = addon +[submodule "qtwebglplugin"] + depends = qtbase qtwebsockets + recommends = qtdeclarative + path = qtwebglplugin + url = ../qtwebglplugin.git + branch = 5.15 + status = addon +[submodule "qtlottie"] + depends = qtbase qtdeclarative + path = qtlottie + url = ../qtlottie.git + branch = 5.15 + status = addon +[submodule "qtquicktimeline"] + depends = qtbase qtdeclarative + path = qtquicktimeline + url = ../qtquicktimeline + branch = 5.15 + status = addon +[submodule "qtquick3d"] + depends = qtbase qtdeclarative + path = qtquick3d + url = ../qtquick3d.git + branch = 5.15 + status = addon diff --git a/recipes/qt/config.yml b/recipes/qt/config.yml index 238dd7a439c7d4..4a2228a7dc1f61 100644 --- a/recipes/qt/config.yml +++ b/recipes/qt/config.yml @@ -15,6 +15,8 @@ versions: folder: 6.x.x "6.3.2": folder: 6.x.x + "5.15.14": + folder: 5.x.x "5.15.13": folder: 5.x.x "5.15.12": From 65d9b250f95034c5869b5c813b951ffa7e1de13b Mon Sep 17 00:00:00 2001 From: toge Date: Mon, 27 May 2024 23:34:43 +0900 Subject: [PATCH 46/83] (#24104) benchmark: add version 1.8.4 --- recipes/benchmark/all/conandata.yml | 3 +++ recipes/benchmark/all/conanfile.py | 1 - recipes/benchmark/config.yml | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/recipes/benchmark/all/conandata.yml b/recipes/benchmark/all/conandata.yml index 8a3c24a77b927d..102609d9c75c2a 100644 --- a/recipes/benchmark/all/conandata.yml +++ b/recipes/benchmark/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.8.4": + url: "https://github.com/google/benchmark/archive/refs/tags/v1.8.4.tar.gz" + sha256: "3e7059b6b11fb1bbe28e33e02519398ca94c1818874ebed18e504dc6f709be45" "1.8.3": url: "https://github.com/google/benchmark/archive/refs/tags/v1.8.3.tar.gz" sha256: "6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce" diff --git a/recipes/benchmark/all/conanfile.py b/recipes/benchmark/all/conanfile.py index 4143dd1a1d5dd1..65bfbc736fc66e 100644 --- a/recipes/benchmark/all/conanfile.py +++ b/recipes/benchmark/all/conanfile.py @@ -113,7 +113,6 @@ def package_info(self): self.cpp_info.components["_benchmark"].system_libs.append("kstat") if self.options.get_safe("enable_libpfm"): self.cpp_info.components["_benchmark"].requires.append("libpfm4::libpfm4") - self.cpp_info.components["benchmark_main"].set_property("cmake_target_name", "benchmark::benchmark_main") self.cpp_info.components["benchmark_main"].libs = ["benchmark_main"] diff --git a/recipes/benchmark/config.yml b/recipes/benchmark/config.yml index f3ed1f1e957435..13430070c77977 100644 --- a/recipes/benchmark/config.yml +++ b/recipes/benchmark/config.yml @@ -1,4 +1,6 @@ versions: + "1.8.4": + folder: all "1.8.3": folder: all "1.8.2": From fc0dc900763e2b4283fcb442827cb44dc551d964 Mon Sep 17 00:00:00 2001 From: Julianiolo <50519317+Julianiolo@users.noreply.github.com> Date: Mon, 27 May 2024 17:12:45 +0200 Subject: [PATCH 47/83] (#24072) raylib: fix problems with glfw version --- recipes/raylib/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/raylib/all/conanfile.py b/recipes/raylib/all/conanfile.py index b00589d9af8ba2..a957d233f1a527 100644 --- a/recipes/raylib/all/conanfile.py +++ b/recipes/raylib/all/conanfile.py @@ -49,7 +49,7 @@ def layout(self): def requirements(self): if self.settings.os != "Android": - self.requires("glfw/3.3.8") + self.requires("glfw/3.4") self.requires("opengl/system") if self.settings.os == "Linux": self.requires("xorg/system") From 5e495fa850668d28bbba2ac969d72d77cf6ddf9b Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 28 May 2024 00:52:25 +0900 Subject: [PATCH 48/83] (#24107) sonic-cpp: add version 1.0.1 --- recipes/sonic-cpp/all/conandata.yml | 7 +++++++ recipes/sonic-cpp/all/conanfile.py | 8 ++++++-- recipes/sonic-cpp/config.yml | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/recipes/sonic-cpp/all/conandata.yml b/recipes/sonic-cpp/all/conandata.yml index d309d05a897b82..1b94133aa026e3 100644 --- a/recipes/sonic-cpp/all/conandata.yml +++ b/recipes/sonic-cpp/all/conandata.yml @@ -1,8 +1,15 @@ sources: + "1.0.1": + url: "https://github.com/bytedance/sonic-cpp/archive/refs/tags/v1.0.1.tar.gz" + sha256: "c78fb90c56ba235e8867888c0b1af0e96d7b0b86829381b3cca94f61f83d41e5" "1.0.0": url: "https://github.com/bytedance/sonic-cpp/archive/refs/tags/v1.0.0.tar.gz" sha256: "78af626fa070a2702fe9586d90617292b421d97d7ab1fe27a02cc20434467a80" patches: + "1.0.1": + - patch_file: "patches/1.0.0-0001-use-cci.patch" + patch_description: "use cci recipes" + patch_type: "conan" "1.0.0": - patch_file: "patches/1.0.0-0001-use-cci.patch" patch_description: "use cci recipes" diff --git a/recipes/sonic-cpp/all/conanfile.py b/recipes/sonic-cpp/all/conanfile.py index 8490a3d80c51bb..533e9e8146a77b 100644 --- a/recipes/sonic-cpp/all/conanfile.py +++ b/recipes/sonic-cpp/all/conanfile.py @@ -4,6 +4,7 @@ from conan.tools.files import apply_conandata_patches, export_conandata_patches, get, copy from conan.tools.layout import basic_layout from conan.tools.microsoft import is_msvc +from conan.tools.scm import Version import os required_conan_version = ">=1.53.0" @@ -50,8 +51,11 @@ def validate(self): if self.settings.compiler.cppstd: check_min_cppstd(self, self._min_cppstd) - if self.settings.arch not in ["x86", "x86_64"]: - raise ConanInvalidConfiguration(f"{self.ref} support x86, x86_64 only.") + supported_archs = ["x86", "x86_64"] + if Version(self.version) >= "1.0.1": + supported_archs.extend(["armv8", "armv8.3"]) + if self.settings.arch not in supported_archs: + raise ConanInvalidConfiguration(f"{self.ref} doesn't support {self.settings.arch}.") if is_msvc(self): raise ConanInvalidConfiguration(f"{self.ref} doesn't support MSVC now.") diff --git a/recipes/sonic-cpp/config.yml b/recipes/sonic-cpp/config.yml index 40341aa3db6cd3..af3bb0714e65c0 100644 --- a/recipes/sonic-cpp/config.yml +++ b/recipes/sonic-cpp/config.yml @@ -1,3 +1,5 @@ versions: + "1.0.1": + folder: all "1.0.0": folder: all From 0c3854c1663581cec3f3dbf7bb4f60cfb2b332c2 Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 28 May 2024 01:12:33 +0900 Subject: [PATCH 49/83] (#24117) vincentlaucsb-csv-parser: add version 2.2.3 --- recipes/vincentlaucsb-csv-parser/all/conandata.yml | 3 +++ recipes/vincentlaucsb-csv-parser/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/vincentlaucsb-csv-parser/all/conandata.yml b/recipes/vincentlaucsb-csv-parser/all/conandata.yml index a43372f1aedb37..281a7a85b53e02 100644 --- a/recipes/vincentlaucsb-csv-parser/all/conandata.yml +++ b/recipes/vincentlaucsb-csv-parser/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.2.3": + url: "https://github.com/vincentlaucsb/csv-parser/archive/refs/tags/2.2.3.tar.gz" + sha256: "e70ea75612fb45f9a9dd83145fb3fbf0b5929a32683de478ad429cdd85f10e4e" "2.2.2": url: "https://github.com/vincentlaucsb/csv-parser/archive/refs/tags/2.2.2.tar.gz" sha256: "8d7720021d19cf03880eb768d82d7f7e0a240b6d564bc6b495fceb4775b8f0c7" diff --git a/recipes/vincentlaucsb-csv-parser/config.yml b/recipes/vincentlaucsb-csv-parser/config.yml index dd347c3f0995e8..f199f8386c5f4b 100644 --- a/recipes/vincentlaucsb-csv-parser/config.yml +++ b/recipes/vincentlaucsb-csv-parser/config.yml @@ -1,4 +1,6 @@ versions: + "2.2.3": + folder: all "2.2.2": folder: all "2.2.0": From 07fe71553e9dbb8bfa4e6ca5c579ae73e0c85e03 Mon Sep 17 00:00:00 2001 From: ericLemanissier Date: Mon, 27 May 2024 18:35:37 +0200 Subject: [PATCH 50/83] (#24049) qt 6.7.1 generated using: - conan config install https://github.com/conan-io/conan-extensions.git - conan cci:upgrade-qt-recipe 6.7.1 --- recipes/qt/6.x.x/conandata.yml | 28 +++ recipes/qt/6.x.x/qtmodules6.7.1.conf | 338 +++++++++++++++++++++++++++ recipes/qt/config.yml | 2 + 3 files changed, 368 insertions(+) create mode 100644 recipes/qt/6.x.x/qtmodules6.7.1.conf diff --git a/recipes/qt/6.x.x/conandata.yml b/recipes/qt/6.x.x/conandata.yml index 4481994aa27cad..8467da32623a7c 100644 --- a/recipes/qt/6.x.x/conandata.yml +++ b/recipes/qt/6.x.x/conandata.yml @@ -1,4 +1,26 @@ sources: + "6.7.1": + url: + - "https://download.qt.io/official_releases/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://download.qt.io/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.ukfast.co.uk/sites/qt.io/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.20i.com/pub/qt.io/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.nluug.nl/languages/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirror.netcologne.de/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://qt-mirror.dannhauer.de/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.fau.de/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.dotsrc.org/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.icm.edu.pl/packages/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.acc.umu.se/mirror/qt.io/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://www.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://qt.mirror.constant.com/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.sau.edu.cn/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.cloud.tencent.com/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirror.bjtu.edu.cn/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://mirrors.sjtug.sjtu.edu.cn/qt/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.jaist.ac.jp/pub/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + - "https://ftp.yz.yamagata-u.ac.jp/pub/qtproject/archive/qt/6.7/6.7.1/single/qt-everywhere-src-6.7.1.tar.xz" + sha256: "38dbf2768776e875ed5cdea8cccf1a240512a29769768084430914c4a33bedc4" "6.7.0": url: - "https://download.qt.io/official_releases/qt/6.7/6.7.0/single/qt-everywhere-src-6.7.0.tar.xz" @@ -123,6 +145,12 @@ sources: - "https://mirrors.ustc.edu.cn/qtproject/archive/qt/6.3/6.3.2/single/qt-everywhere-src-6.3.2.tar.xz" sha256: "b90524f686224a0e5a945c1d65307e16a375348dbe275c9ac11de171fe31374a" patches: + "6.7.1": + - "base_path": "qtwebengine" + "patch_description": "Workaround for too long .rps file name" + "patch_file": "patches/c72097e_6.6.0.diff" + "patch_source": "https://codereview.qt-project.org/c/yocto/meta-qt5/+/192172" + "patch_type": "bugfix" "6.7.0": - "base_path": "qtwebengine" "patch_description": "Workaround for too long .rps file name" diff --git a/recipes/qt/6.x.x/qtmodules6.7.1.conf b/recipes/qt/6.x.x/qtmodules6.7.1.conf new file mode 100644 index 00000000000000..9e00dc76387681 --- /dev/null +++ b/recipes/qt/6.x.x/qtmodules6.7.1.conf @@ -0,0 +1,338 @@ +[submodule "qtbase"] + path = qtbase + url = ../qtbase.git + branch = 6.7.1 + status = essential +[submodule "qtsvg"] + depends = qtbase + path = qtsvg + url = ../qtsvg.git + branch = 6.7.1 + status = addon +[submodule "qtdeclarative"] + depends = qtbase + recommends = qtimageformats qtshadertools qtsvg qtlanguageserver + path = qtdeclarative + url = ../qtdeclarative.git + branch = 6.7.1 + status = essential +[submodule "qtactiveqt"] + depends = qtbase + path = qtactiveqt + url = ../qtactiveqt.git + branch = 6.7.1 + status = addon +[submodule "qtmultimedia"] + depends = qtbase qtshadertools + recommends = qtdeclarative qtquick3d + path = qtmultimedia + url = ../qtmultimedia.git + branch = 6.7.1 + status = addon +[submodule "qttools"] + depends = qtbase + recommends = qtdeclarative qtactiveqt + path = qttools + url = ../qttools.git + branch = 6.7.1 + status = essential +[submodule "qtxmlpatterns"] + depends = qtbase + recommends = qtdeclarative + path = qtxmlpatterns + url = ../qtxmlpatterns.git + branch = dev + status = ignore +[submodule "qttranslations"] + depends = qttools + path = qttranslations + url = ../qttranslations.git + branch = 6.7.1 + status = essential + priority = 30 +[submodule "qtdoc"] + depends = qtdeclarative qttools + recommends = qtmultimedia qtshadertools qtwebengine + path = qtdoc + url = ../qtdoc.git + branch = 6.7.1 + status = essential + priority = 40 +[submodule "qtrepotools"] + path = qtrepotools + url = ../qtrepotools.git + branch = master + status = essential + project = - +[submodule "qtqa"] + depends = qtbase + path = qtqa + url = ../qtqa.git + branch = dev + status = essential + priority = 50 +[submodule "qtlocation"] + depends = qtbase qtpositioning + recommends = qtdeclarative + path = qtlocation + url = ../qtlocation.git + branch = 6.7.1 + status = preview +[submodule "qtpositioning"] + depends = qtbase + recommends = qtdeclarative qtserialport + path = qtpositioning + url = ../qtpositioning.git + branch = 6.7.1 + status = addon +[submodule "qtsensors"] + depends = qtbase + recommends = qtdeclarative + path = qtsensors + url = ../qtsensors.git + branch = 6.7.1 + status = addon +[submodule "qtsystems"] + depends = qtbase + recommends = qtdeclarative + path = qtsystems + url = ../qtsystems.git + branch = dev + status = ignore +[submodule "qtfeedback"] + depends = qtdeclarative + recommends = qtmultimedia + path = qtfeedback + url = ../qtfeedback.git + branch = master + status = ignore +[submodule "qtpim"] + depends = qtdeclarative + path = qtpim + url = ../qtpim.git + branch = dev + status = ignore +[submodule "qtconnectivity"] + depends = qtbase + recommends = qtdeclarative + path = qtconnectivity + url = ../qtconnectivity.git + branch = 6.7.1 + status = addon +[submodule "qtwayland"] + depends = qtbase + recommends = qtdeclarative + path = qtwayland + url = ../qtwayland.git + branch = 6.7.1 + status = addon +[submodule "qt3d"] + depends = qtbase + recommends = qtdeclarative qtshadertools qtmultimedia + path = qt3d + url = ../qt3d.git + branch = 6.7.1 + status = addon +[submodule "qtimageformats"] + depends = qtbase + path = qtimageformats + url = ../qtimageformats.git + branch = 6.7.1 + status = addon +[submodule "qtserialbus"] + depends = qtbase + recommends = qtserialport + path = qtserialbus + url = ../qtserialbus.git + branch = 6.7.1 + status = addon +[submodule "qtserialport"] + depends = qtbase + path = qtserialport + url = ../qtserialport.git + branch = 6.7.1 + status = addon +[submodule "qtwebsockets"] + depends = qtbase + recommends = qtdeclarative + path = qtwebsockets + url = ../qtwebsockets.git + branch = 6.7.1 + status = addon +[submodule "qtwebchannel"] + depends = qtbase + recommends = qtdeclarative qtwebsockets + path = qtwebchannel + url = ../qtwebchannel.git + branch = 6.7.1 + status = addon +[submodule "qtwebengine"] + depends = qtdeclarative + recommends = qtwebchannel qttools qtpositioning + path = qtwebengine + url = ../qtwebengine.git + branch = 6.7.1 + status = addon + priority = 10 +[submodule "qtcanvas3d"] + depends = qtdeclarative + path = qtcanvas3d + url = ../qtcanvas3d.git + branch = dev + status = ignore +[submodule "qtwebview"] + depends = qtdeclarative + recommends = qtwebengine + path = qtwebview + url = ../qtwebview.git + branch = 6.7.1 + status = addon +[submodule "qtcharts"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtcharts + url = ../qtcharts.git + branch = 6.7.1 + status = addon +[submodule "qtdatavis3d"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtdatavis3d + url = ../qtdatavis3d.git + branch = 6.7.1 + status = addon +[submodule "qtvirtualkeyboard"] + depends = qtbase qtdeclarative qtsvg + recommends = qtmultimedia + path = qtvirtualkeyboard + url = ../qtvirtualkeyboard.git + branch = 6.7.1 + status = addon +[submodule "qtgamepad"] + depends = qtbase + recommends = qtdeclarative + path = qtgamepad + url = ../qtgamepad.git + branch = dev + status = ignore +[submodule "qtscxml"] + depends = qtbase qtdeclarative + path = qtscxml + url = ../qtscxml.git + branch = 6.7.1 + status = addon +[submodule "qtspeech"] + depends = qtbase qtmultimedia + recommends = qtdeclarative + path = qtspeech + url = ../qtspeech.git + branch = 6.7.1 + status = addon +[submodule "qtnetworkauth"] + depends = qtbase + path = qtnetworkauth + url = ../qtnetworkauth.git + branch = 6.7.1 + status = addon +[submodule "qtremoteobjects"] + depends = qtbase + recommends = qtdeclarative + path = qtremoteobjects + url = ../qtremoteobjects.git + branch = 6.7.1 + status = addon +[submodule "qtwebglplugin"] + depends = qtbase qtwebsockets + recommends = qtdeclarative + path = qtwebglplugin + url = ../qtwebglplugin.git + branch = dev + status = ignore +[submodule "qtlottie"] + depends = qtbase qtdeclarative + path = qtlottie + url = ../qtlottie.git + branch = 6.7.1 + status = addon +[submodule "qtquicktimeline"] + depends = qtbase qtdeclarative + path = qtquicktimeline + url = ../qtquicktimeline + branch = 6.7.1 + status = addon +[submodule "qtquick3d"] + depends = qtbase qtdeclarative qtshadertools + recommends = qtquicktimeline + path = qtquick3d + url = ../qtquick3d.git + branch = 6.7.1 + status = addon +[submodule "qtshadertools"] + depends = qtbase + path = qtshadertools + url = ../qtshadertools.git + branch = 6.7.1 + status = addon +[submodule "qt5compat"] + depends = qtbase qtdeclarative + path = qt5compat + url = ../qt5compat.git + branch = 6.7.1 + status = deprecated +[submodule "qtcoap"] + depends = qtbase + path = qtcoap + url = ../qtcoap.git + branch = 6.7.1 + status = addon +[submodule "qtmqtt"] + depends = qtbase qtdeclarative + path = qtmqtt + url = ../qtmqtt.git + branch = 6.7.1 + status = addon +[submodule "qtopcua"] + depends = qtbase qtdeclarative + path = qtopcua + url = ../qtopcua.git + branch = 6.7.1 + status = addon +[submodule "qtlanguageserver"] + depends = qtbase + path = qtlanguageserver + url = ../qtlanguageserver.git + branch = 6.7.1 + status = preview +[submodule "qthttpserver"] + depends = qtbase + recommends = qtwebsockets + path = qthttpserver + url = ../qthttpserver.git + branch = 6.7.1 + status = preview +[submodule "qtquick3dphysics"] + depends = qtbase qtdeclarative qtquick3d qtshadertools + path = qtquick3dphysics + url = ../qtquick3dphysics.git + branch = 6.7.1 + status = addon +[submodule "qtgrpc"] + depends = qtbase + recommends = qtdeclarative + path = qtgrpc + url = ../qtgrpc.git + branch = 6.7.1 + status = preview +[submodule "qtquickeffectmaker"] + depends = qtbase qtdeclarative qtshadertools + recommends = qtquick3d + path = qtquickeffectmaker + url = ../qtquickeffectmaker.git + branch = 6.7.1 + status = addon +[submodule "qtgraphs"] + depends = qtbase qtdeclarative qtquick3d + path = qtgraphs + url = ../qtgraphs.git + branch = 6.7.1 + status = preview diff --git a/recipes/qt/config.yml b/recipes/qt/config.yml index 4a2228a7dc1f61..ec175ded01c5c7 100644 --- a/recipes/qt/config.yml +++ b/recipes/qt/config.yml @@ -1,4 +1,6 @@ versions: + "6.7.1": + folder: 6.x.x "6.7.0": folder: 6.x.x "6.6.3": From fa7c6500473cfad687857c7a54a5f186ff0816ba Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 28 May 2024 02:12:31 +0900 Subject: [PATCH 51/83] (#24105) dfp: add version 1.0.3 --- recipes/dfp/all/conandata.yml | 3 +++ recipes/dfp/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/dfp/all/conandata.yml b/recipes/dfp/all/conandata.yml index ef5dd3970cc875..753d76e24d8132 100644 --- a/recipes/dfp/all/conandata.yml +++ b/recipes/dfp/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.0.3": + url: "https://github.com/epam/DFP/releases/download/1.0.3/native-sources.tar.gz" + sha256: "362e324687d6b8ca42490811331052c46cccb64a2cf078f3b6c8df92a374497c" "1.0.2": url: "https://github.com/epam/DFP/releases/download/1.0.2-cxx/native-sources.tar.gz" sha256: "f62acab311086c1207f7d58185232c7e86e11ed606596d9afcff49703c196058" diff --git a/recipes/dfp/config.yml b/recipes/dfp/config.yml index 8457ca9a4a8cd8..f625d5d2b747ff 100644 --- a/recipes/dfp/config.yml +++ b/recipes/dfp/config.yml @@ -1,3 +1,5 @@ versions: + "1.0.3": + folder: all "1.0.2": folder: all From 2774da40fda41f9e8063e444d3e92c7540639ba6 Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 28 May 2024 02:32:41 +0900 Subject: [PATCH 52/83] (#24120) watcher: add version 0.10.1 --- recipes/watcher/all/conandata.yml | 3 +++ recipes/watcher/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/watcher/all/conandata.yml b/recipes/watcher/all/conandata.yml index 533a3689631b9d..b164bc68a1b900 100644 --- a/recipes/watcher/all/conandata.yml +++ b/recipes/watcher/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.10.1": + url: "https://github.com/e-dant/watcher/archive/release/0.10..tar.gz" + sha256: "3c2d3318f64d79437b1305a83382aa26e5054444ac4aed1821937cb97fedc03a" "0.10.0": url: "https://github.com/e-dant/watcher/archive/release/0.10.0.tar.gz" sha256: "c15f088ddc41b58100921ea0b630bcbde83c9960aefecf82221da997f4d4b4ec" diff --git a/recipes/watcher/config.yml b/recipes/watcher/config.yml index 83559e08c8922f..573bce3b91e258 100644 --- a/recipes/watcher/config.yml +++ b/recipes/watcher/config.yml @@ -1,4 +1,6 @@ versions: + "0.10.1": + folder: all "0.10.0": folder: all "0.9.5": From ccce15f0133d6ba0aa938c661d9f15de1f6866f5 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Mon, 27 May 2024 19:52:16 +0200 Subject: [PATCH 53/83] (#24125) lodepng: refactor test package --- recipes/lodepng/all/test_package/bees.png | Bin 177424 -> 0 bytes recipes/lodepng/all/test_package/conanfile.py | 3 +-- .../lodepng/all/test_package/test_package.cpp | 25 +++--------------- .../lodepng/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 5 insertions(+), 26 deletions(-) delete mode 100644 recipes/lodepng/all/test_package/bees.png diff --git a/recipes/lodepng/all/test_package/bees.png b/recipes/lodepng/all/test_package/bees.png deleted file mode 100644 index 11640c7488fb114127f869572d7ffec132e77746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177424 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%0D2&3f5zx%5uXh+B#w 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

slNF9=bRxAin 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 -#include -#include -#include - #include "lodepng.h" int main(int argc, const char *argv[]) { - if (argc < 2) { - std::cerr << "Need at least one argument\n"; - } - std::ifstream stream(argv[1], std::ios::in | std::ios::binary); - std::vector data((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); - - std::cout << "file name " << argv[1] << "\n"; - std::cout << "file size " << data.size() << " bytes\n"; - - std::vector decoded; - unsigned width = 0, height = 0; - unsigned error = lodepng::decode(decoded, width, height, data); - if (error != 0) { - std::cerr << "lodepng::decode returned with error code " << error << "\n"; - return 1; - } - std::cout << "image size: " << width << " x " << height << " pixels.\n"; + LodePNGCompressSettings compress_settings; + lodepng_compress_settings_init(&compress_settings); - stream.close(); + printf("compress_settings.btype = %d\n", compress_settings.btype); return 0; } diff --git a/recipes/lodepng/all/test_v1_package/conanfile.py b/recipes/lodepng/all/test_v1_package/conanfile.py index 4441530a937bab..38f4483872d47f 100644 --- a/recipes/lodepng/all/test_v1_package/conanfile.py +++ b/recipes/lodepng/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - bees = os.path.join(self.source_folder, os.pardir, "test_package", "bees.png") - self.run(f"{bin_path} {bees}", run_environment=True) + self.run(bin_path, run_environment=True) From 37bd523ac2075ac79e6a1bf1176737993d839b30 Mon Sep 17 00:00:00 2001 From: Conan Center Index Bot <54393557+conan-center-bot@users.noreply.github.com> Date: Mon, 27 May 2024 20:41:27 +0100 Subject: [PATCH 54/83] (#24127) [bot] Update list of references (prod-v2/ListPackages) Co-authored-by: conan-center-bot --- .c3i/conan_v2_ready_references.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.c3i/conan_v2_ready_references.yml b/.c3i/conan_v2_ready_references.yml index 313bee884519a9..dcc1b04214f076 100644 --- a/.c3i/conan_v2_ready_references.yml +++ b/.c3i/conan_v2_ready_references.yml @@ -292,6 +292,7 @@ required_for_references: - dbg-macro - dbus - dcmtk +- dd-opentracing-cpp - debug_assert - decimal_for_cpp - deco @@ -734,6 +735,7 @@ required_for_references: - libmagic - libmaxminddb - libmbus +- libmd - libmediainfo - libmemcached - libmetalink @@ -990,6 +992,7 @@ required_for_references: - nextsilicon-cpp-subprocess - nfrechette-acl - nghttp3 +- nifti_clib - ninja - nlohmann_json - nlopt @@ -1069,6 +1072,7 @@ required_for_references: - openmesh - openmvg - openpam +- openscenegraph - openssh - openssl - opensubdiv @@ -1136,6 +1140,7 @@ required_for_references: - platform.exceptions - platform.hashing - platform.interfaces +- platformfolders - playrho - plf_colony - plf_indiesort From 2ac82372f1964e837f035f9688c10758912ae945 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Tue, 28 May 2024 09:33:11 +0200 Subject: [PATCH 55/83] (#24128) astc-codec: refactor test package --- .../all/test_package/atlas_small_4x4.astc | Bin 65552 -> 0 bytes .../astc-codec/all/test_package/conanfile.py | 3 +-- .../all/test_package/test_package.cpp | 16 ++++------------ .../astc-codec/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 6 insertions(+), 16 deletions(-) delete mode 100644 recipes/astc-codec/all/test_package/atlas_small_4x4.astc diff --git a/recipes/astc-codec/all/test_package/atlas_small_4x4.astc b/recipes/astc-codec/all/test_package/atlas_small_4x4.astc deleted file mode 100644 index 0dd080b12d23fa6b1227b676c7fe7e53eb8ab3fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65552 zcmZU52{=@3{PuIs48~StD@$3%o)%2Xl9)4O$u=|DiIl9BU6vS94XLb^>`9iAL`n8Z zMMQ;!m{hW7OG3!>{t(c3$ z7}p_pJFY%vQxoPl5(_xN768Co^dCB?$dD=r5as|$80k|@{RgOiI_Eu;T<%E0swaH= zPKpY(#;X}xKHE^M`y%Dy@(ByQ=B9}UzaNcI(HN*!HYcgKauZVrO-*X3Eb`5PbMk~% z?(Y60Usy{!G*&Og#u}+xks+(k?;T8eyaa91e*l&;{MhUIpehd-$BnWNf-Ysa*EhwG zk_PCPe1kp!7j*u4+gtf$E-)82&a9Y( z>=%PsTWOq}N~Z0N2z8nm*eF*g=H3pB>&J`|rxd}xGGx7q_)xu!VS zQ*F1t&TosN!7gEU`ER-Y5mg{d6S(it;GwWqfo1-!?dvxSVQCpET){VVO04;MB$e|b z9}r-XS*y=*xQ%%>o6TZ_3!Q45=H+pN+bJE`rqZAo3|R?YT#3R7Skcd?WcIpKLR9xplNs-Fd29Gh>X^7otH(o6m9sGO}pY-y;@SSC$u>`ENMdp$cq@#MwZ9KTU@ zR`c4Z!0)r67F>g~ufnp^O1!sEZl45tq@9t8x3pJt!&g^wh57WXkG?9sSGWk-txsP& zmk^j7LW0XO%d!hoAB!vO^K8xo^UV^jGARl@UuTT4>$nm#Jm6xo_E$AWP-~FLf zUH{0jlDrROPm%QRk9rME{ZBlp-YuC%G-!M)zQpPZ%w?_W-nuKOt{U9DP$z3Jwawwu zMYz}tVI1vtefwBtpJ-4FkM8;(DqK`IepzdxA@~EW=gY&3WZ39c+-+>-wKr|i#5o(aI8b@aue<6ktPctg6BL8Nr#`PsNtiMLy^)D~ua?ux*j%OW|~*ins% z)Rv~&>=nv&cp|jFy)k!?0+03ecjcx+Z??z^zGEOHc%*l*Ei)N9v3=mV&d#afws?W( z{2-*OM1yC1$!#;SmAe_VjXob?-aotm$X{e$bIa)KpH)aT&f0qmtAB;q8ebs{10Rce zw!HwaY7!;kXsh%(36=nO;0lCcnbObibgplgQ^v-~a2w!Ixh>wV6I>Kzmu9Tt{MM5EEFHNKcU*$P4X>k{5@#QmxnE`EbZhKxPkZQ7P!HB z;bd<)7IS4u=#D{>Ajy=4i8&qT>1#C?JATyfklcA9eBSM%>uIy5vvoHIa11M1Y>md= zn_Eo2T%U4L`E3Faxc;HmO;J;XaC&#TBatQ4${pBUBA4NaK45+9gdgH5!Xb?@X}`0_ zCjtFaAO*GcL8PLvalfeo0H#PQ_lWdJh$fH*0DUbt$xPhVp*W}}r0}s;0aFM}WcMvc*#ut*=Jr2dakz`4%iBZu>_`2dq)D$-@oc0R zvoui|c*B~DOh2$|)|A@vvbkWzL{5aj(ex%a-KC3z_gZRuAAhM!mMx->xRT)ro9Hp~ zz>Eh)J9UMgrqNnO?^i}tHyj(?r;_iwqi~p`u&A&oyD+A#sW+s4E^?UTUO`DgL1v8c z;gRE?&*@QGx%|Vm2lTX8`=z8ycu5F+uUw_?1|I-Fez0c&aKSkCS@bD9N1yd_xw|4@ zVQl*j^+`T|*fq55dKdcZzvok^?+(tGCFcBko4wXGfvp^j&R6}-{t=&-i~$sQm%z-Y zst5XlwZ`8FvL{I$+-47Uwo7d`ZNNOuyIm+!sEm8HpIJ!b!C@3wC1 zeeaz9`;QAv$&~N1gY}Wh?5Mm;9}COL%umyIlt>$!uB>`b5ccgM!{&;olnm*YWU!D7 zXPhbm>)x-qeuP_hxu2Mm{lJ&T^jo3S(@m7C{FOP@Eo_J|*BQdO*nVyh4T_ zpN!av?H5r@U;tw*VVGO?^0nFfg2r!dZ5p32y+SnzlTuUuNL|ow;D32--~kyCkr(*u z-vkN5+yZGA$w)c}M3-vG-A7kOpAn!M<9f1?);$-#tzPK5VVN<^@wIpGU1mCI!&=1{ zpJwqd{*@QkSsS(GpMPIQ{d~FWZ*NfX&!a z!)DKqmxGMH=v_qkibV=Fz_jUtB%Zk$c%yhxI*_)-Wa7uz>7oRSL@1{%BqI9U*nFklXVF?cR_$|9}_;@#Xi zffeC#UvOR*VPg!qU-`TIV{aS}6Vdx=G#>0sg0Gl|nR}=~z(AvM_DME0iJe~*>Xv#U zvLuO@z51KRtgF+^@31Pa3#`-*d`2TP1A@FQNDOz#q@X9Y?E;lh7U^WU$WT6#et&VR zb6gjfI7jJ?xFk>VbCP(T6)m7Ic|6H{xw~?0EPC0-hKEI=!j| zOs;-%$}fgMjwk?xIdfB)yHEA6N}`{)0)Wh1fZM7_tlE7cx0LtP&7k;S_L4a2=xF+; zAnaKtKo~f+El7;ztyPZ$!(u_cDMemAHzEKT_pyOt(;SfdA2NZ z-f1076T)MCue)TOI_&srO3HNucHzeOhl@M7I1JcJ(Y5=~NN_LvUT$s%B*#vWG%A}Y z|6aG6d_rRiZY}a+XB*u#kHf>#1_V6T%)E=e*CeWMM)K|3&lDv%`N7W1tWLhmQhCmr zpN2UUrN+KJdO)YUs$a&1eC_0rmzw!r^#A}y>&eoTT4Kxe+p0+@RdjIAh=HOjSRQFJaN|mcZ@`j5!lj_L4wbRgaacoOpsJEI3HEo34YD{0Iz;LP4Jg>e>d>efT+_HT>_HB=qg`%3pPk~T-mJ7?pJJCB4 zeV^}odT4sWdn=`+zn*iU8bkLV>+bs*l_@qkB>AHXjSnXFCR)2HChdZi?hD(n$j%NZ z3^yQv^Z%PFQSfdtauYb$k95Qz#&aD*lwf`U%iU6tx21!*pKO<8Au#|Fm2cn!juipA z1*vDhTA~ToUI?4CWqA>hEsac4z~@IgL!)Y?i<0s>^_Pu!c3n490@G~f6*FMc31v0{TxG0Q^fj`QV}Lq61&X>4=LM1uC8 zgXJ#17%K#JTr}Esc7KQQ1HuinR2-Sv(vu<@W0l=HE7_N5rc5T>`|f=kgToT)&z~pW z>?1RMLu>>|O6<|-Jzb}=>&Q$8H{-Y%{zsMR$20XkY!HOvYyjw+P;Z0|OWg3gom^d> z!w-NYpx@=2Tyddrf7Q6|l{@bR^gTIUgwc4qIO_*oJ2YHk!AM>iOMW?XxXZa|P3X<= z{k4W4EX-0NE5FDeDwKbD!DhA}wXd))6*|YrVCZUMzrtwDt6K{s3Um%!!~}Y1FP|Rf zs3@r@Da?*R44@ph>zR$X^mS%mo1As0JNrro(=ROcUe)7}o1>n-g z9c<(?V>yp(WRXw7KdFR#UYTCILNnzsTc^gG%7nk`0|3pOguc~FrDAOLoiNAEDh-c^ z0K~DsuHG3^fgydYr(lmYFZecsP=^I<(0WbQfR&=WiBproL4l7S2|8(^NpBVO7<6l_ zCBXhRbZ@hR0I+zf+j86ym{jq`X$wwgWcl=3r+oqy_URBmn%}gU?u^aE{jHDZwM7Be z7@}i<5O4=XgOW*z!MeurlZAQBu5F{NhNp5K^p45f(|8 zs!IEr!^QRB0m4vH6V}jZr0uQB{k=Llipcdclkg@t<=sA<>RIm@l7-Jmo!Nhw1X=Zw zw&V7h(hw6F5GlTMeEvDK+onlS9U*G&1i%lyA3>l5KGTf3aQe_@eXOt4TSzMjB26ko z9C_*LgUvWRjEw9gW-6L-w>w2<&EdAm^+gk+fDAT_CV^zf&$xCMA)@A zm!!t2;+mxCg|uZmFgIII!NDqLQoq@T zkNqt5NPnXRCBTOlPQD0RD-#{MvHo^Hk%5`l@o`AYh&yzGx4Bw5 z8WO<*kpM`ir?A;)s{DoCVn)}7vwhS_0C=89Qc?Rw=*CzYKLxcj$PAau*h(KMaLX?- z75t29tRPr%hrQ8&KwfCW+6}2aK*)+);0=Wnh;km|NumhkmQ%PfgU`x20DU$r_v(Ed zI-l$lhCZnle_T?|h?u2fws*Q0fpyPns?X@0zM4y04tMvPZNpm6TAZDa?#X0f?48pu zHJ2a5{q#CM!MzoMExW68yAJoIZx7h zHzIhj{pQVSv)Wtyd0)b%AId7hl}^25z9=^I1yx0W%nrD6_iJ=v1AT{<-U^1&Tks>%n*w)_wvUw6$8>X58;B}CmNnR%Qh<3* z*DBdX$VvL?M+Jqsg}K?8==aA3obUflfy)X@3Q>P7s*k~=mp0tyDj>dE^H2TNTJTPj zh%1meW3Ex3wy@rIs^!CJ${nF!%~|WKxz4kXjH07m$jo1J121D1I^t)ycrW^1r4qOg zyS|%jQF!TcBGh;nH<{tyt9qZ!`g4_D9FMi{CBdvWUCp^yAXlzvubDT0pRd{q;swkDTP47eJ#Gz;+ywp4Psv`ZJ&yj5GguzW~%-{ zrWC?5*);#SK7G!?S%;x0Ebq&b7n7Ql-`>by<#lWNT=~h)_*5@Q#^sB|5-FFWdU06Y zkBFnwm0twGcq(+k{5Iv`9!OzKp^$(sX<Ov!oUrH)yrXp{Jtxs~t)3;};jwY3`6x=8RMrW`oLXN_LrninT`*CA_Y? zpG1tI$C2Oj4``Vmr#qQ1u_+Aiy%auhHt{?Fynw!sRLa$z2t={?rtnX(`UVapo~<05 z8xIMRxAhbITu<9k{lcMR74&(3g{|;;fez^hT#NkdAE`ihd3tdmCmtogdPYwEzqT zzI-B%wDGM%_k6@VHRqdTBMQtts><)KLpp(%d*A;gb6A-<|8(&{!Th&HU2C_eEE*2x zP|fSM(ZH}a;po`8zxR8BaDlV~yoEQ=(7N0Tob6o2TT zpF#QS5$R(;|KW$|#*Z{m8#;FE_W>Y{&KlpfM*RUF8VCLzb3caOv~&C3Pvfa|u6&Qr z@SRL%wQ^Y`PJv7E zOY-wGND)cOghy(LWN@$GUO_=F8fpxS{?wOKVARep$c8fGJ>>}Pp9xlb41H$Q3WuW2 zyvk45G7#g(@6>~~jj;Qk2=elV+IGdmYF($VNOoTF&H2!^ya+3_eaPz($zc;u=Idtc zcu8hp?pJ5JyH~ukEqiQ9qszi$?}nNSk|9yTbjH$Y0a@(jt3vTNc7{oSS^I@!0Ogk& z3s;n#yRxG)Ld_#BsD#7ME1fpKTTfd%vnS9ngv>Tvz&_qCi}&o^h$nA{o)qF^$=`^6Uy}7izR(2*YTSD%-hN7n7f3)z73^k6 zV{vMe9JCVh8W-j)Q02r!5Xx_GfS6;u27(}1+Lg{l;^D;M=_)NF(Dk!?D|CJeT=6O< zo#GXW#>7G10z9tAzTXps-W5CXfX)$7c7z}}?^!Z&Ph&q&zvpIBR>sgqh zY7gP*&@nMDz7=VhP7z{Ymex;>745s9G=<%kSWATYC-!YUV>o|{UaPEG00^+HNVHy2 zAO!YbV8z_vq!P3WRciLhby1@(sq;SEO=EfwgcZcP<<;Ak{xVI}A;GectyJ>^;CkbM zydnjQ#uNB?6O{EKY5UCdj@#x?3J1Sh?!dt1)L{OvLtjyTHK$;AS&=&RKyxgdM8l!{ ze&9@&$t8P=w>KSx*0L}eq;x%hiR8d{1NyjOv>wPe%Fy!{qWHXX5aR1RM@B-|Iq6bI z!86#E7pRE-H(z{n8MAn>^YI}REt(?uIQlrSbE!$)mK$}PVrz=^%YRO=cD*W`4s()S*&CR#dw>Vw)m}o>aV=~-~a?x zd9cIw#?FqH^o|U#lh+Ydg1bjt|KrTsulY^sy?+qK`F9>WHbJXxg9d7W#Kn3=fe$io zu3u`Y)eY>8&$=qhz`VO+&KJG;41Z3dR4>YJhz;?*`|Ovr@RYuM*j<-`9UU3$&CiD7 z?#0VHMMe{pf{B}q#unL{2Zk;s7b(IDmrdK>hMRy9Jt=D)=TwO2RPWI=_zQo$1^HZ-DWIaNk-uNQ|+Km{%BXLNUWpw!uzrSPtJ9HqN^QL5_a&m6uzeQ!~| zSDw7zP%GwyddxlcucPSm%>su%9|s4a&pW^aPAbBG2!$VL-ITYrX&uZ`a4Lb#C_%7F z%D;6<8esq8A2e?sA>N`xc8v3>M7Z+Bg=C65bn~&9-5w-bRw*($)6TlF_NI02iM9Ft zEX?Ej^Vev{NT4ar(@V8P{Z8n9U9QlCwPz3ZOgVl$OVQ`&L(4dn8T@B({?qS3|M2hN zLf6NZcn00pM?F9%@SksLl4YFtdaZLn$fuNGsq|9tB@q^x zMTE|g=QH7IKTRPc1nvuYUfxHo=Gh;wW2o~6R+w1pz3`29gP>Da z*gqtNzrPbl;KkpzVF5>s{I5JaMEQ=^1AjulWxk!1t<#gQen*}g_7|SeYiA#wnL%PM<5+%jv(=NRvc}R&4w`^s#VwO?D6LZ74J+$VQD1`E z`3a^;mGS}CD@Bd!cA@x2>u0Odg6Px>XQ?JK|HXe-JZ3RK;c*?B|LPapO+EaJe^;P$ zQEi;}Hx%H{*~RgEu$*;`hXVklZ7eILi=+L+zT9g($t^ta36n4u3v-5+AJ(25lmDgX zSD2BH<*Qp2uLeoCtr~m%Uxt-mM8x)!jCV&F!kQF-wF? za?$vo*<6>Voc@Qcg}_qfxqa`ZY3Oe z99Y%)3Y|ZAygJIsF+bZPy)=Cb0+%D%}CNUmu5M z5-?vWnOD{5K(YbLN$)`Wd#ObO3+<{u^TEt&Ixht$o6f=8X1g07a8ogQ*OmWX-+yf~ z1ID?6JEAEwQebxy9Y)WenEocK^1VA7j5J6q(?H2T^&SKS^Audx8Y$QkwEvc$3&qvT zD9go^p*A{?`ez*AGpP;Dbg5{bjyy?-Uk?(WDKbdBjrJpVx@kLp^u8h`x31%@#=>}6 zx>F2^$4u`klkP&o6xi0#k-T4pw7LIf+Pd()z$vABzWwQkt@vif`q3eVvi&TxlT*ZeOe!%&mc>DJNoo zSI$!4MRxy8O&jU?5otn_-(C_t#qOQD*9Or)SRM3#-9V_#OmrA&@`BAbb$K-+T#%s)IGIRRR{nIg}vQzsYUUrrqjd{Yet;FHR zR29!feN*WkBDT4;VCTi?(r}<0Ay=q`z>PCxO|R|6kAa$T@QFYo%sVAMuMP<$V0>)q zLI`L-e=KOxf-5-+cnJN}O_E8#EqO&$tiM^7I>6u*j-w*M2gFc`0pQUWZ2C!G_%D9` zYoq@74zL7qxTbWl9UMXVz8moxD$A4fqOgFMGH-mz%tK;JA0Y$QP;J>)y~J`9|Bc5( z4?1PIoi-T7vP@AvyVfN*%K7W=DGjq=(|L-Y0QB74Vp^67&&8&E+(Ak_`odT#>~_vp zc7^r&$|AWKisz4Q*m=00K%bmy%RrLkNXmPgfgrvK2bxqPX}AKldElgRE}gtd8h!t0 zK6$)sF-tlbgU7*WW*AFzEw-3!x#{O5 zwEj?wl(;qA)6*?U-@g^r4_FRbmQ{#LKWh3leNeI&#lMlQ;r?BuhKHxa3lA5|V!H>s zXDa%cFtwa_wSkYqz=@pOmwKc5voqTxd}AH$_hl4ipn8*x{^_695P<^crst;LNQT~D zIV}8+6V?CZr{||r$SeEU9o=o zD~$-(4^?($)-)H{Mrz|qMTqd|oBkL1$@3m?zln4e$MA%*fY5?phGplpRPm|3;$+xb zea7OlMuXYv&2?9RrvYnu>lNc>02-Gh8s{a5aG-O9eFSA*9ivB_BXW=t|4g)gIm9cx z@Gy+z&LxuoF9z#^fr_+bH9AidAfkMLC%{!tluw2Igbo4qIXpD?S*L_Y%So)2Zv#*n z#GN%Y;Xkv6w+RM%OB^D?ti|?`lKT1Bv_bu|ascykW9G#Y}4+cZ#oBa{NqE)R`X zG{)S)J>(FEE>It0An7Dr*bW?q)M=m(Xv_n3S`Q0C>&9A^b+y8IDR8y-(}0|lbaOJVd^I=8&Y^om6Np&^a5Ul}^FJ2)q7!v%r6qHG&=9q6?!wUX9DKZvmH40VFD z4dC7ILYMD2B5>GJ*y>)fMvV1~1m)5R8d#rRogU~wE0_1C+%f{{w^f`q_FdDG6K+aQ z@+i1UW`6vU6BV;CZmh(LwDM zrPPd1l&4ih9k@DFn{%279vq4ywrpu`xa;Sfp-L|-w zYkt|r%jU=>I)coHy#sVIa0N-I=FsoIc&DKJA0b})+;Ox*M{{^Uc(?~gnPeI3ZEaK2mJ?8|g~mul{J(kzeI#em3vUik=%D+x4tQ`4fu& z%Eqrtkxn~{D+-njk0x{~Gu0?~uYr1#G$r%s2V1B~(mUmkTv5(^93-Da=_(@Q2^@Hz zYU_?5B|2Tf7yIAqBUtGu8uUyE*eV`&rf*K?A{+CmUf|p6`!tV>{}d`Wp|!@pyML3t zgtCO}K0!(pV#TXSm{0houy0S^Z?^R|l>hlB{*%^v_*E4@4pCd~78R_^qo)b~h$ zRx+q4s3<7>%LmOluALI0;9@J*ougs{(r15z@S~wbc$U&jDN!T2vP2Wlk9UKKEKl6{}11sw=2(|@YnzR?f(N}>QHJaivO~|{^$nkugZR{4{}mlUcV?= z@oMC+v%Sb({n&@v&r4QJPM_Uz@90W@%rLBw8!(?8aV;*B0I*UD2oauXA8jnUMk#>X zbOw$K|Hb=K=jABjyladupR&L4UvR18a{E4!3wCj(HrZsjFJZUxbX5p&JnLdviqSkph*zB@=*KWwO0hkjHlx6(PWyW4(W!yB&waA1wKf#k!~Qsh ztOd=<4uUVSAIVHBOVUV8h&;8=OT5L~ir8Xoq%|88_c2n=wcLLpn!tePyM-!QsD?(8 zF15aZ_M=z6hU3SLXhMnv;eh3LuV7} z0sa^M(Ri;4pbfXT+Mo-b!vVBD-vZ8}pZ+^gMF0`bkI|K7f62=aiy1hb{aqc-j?tA_ z`39P3&p-)goJv@fuf_>$<_|{o5f09?5P1J{kLt(+1*%hzB!Zi>$gu1Q?dzBf+KVdz z!+WaZ$Vvj|k665e@tzQnw!3^7L1YS1a^SBb`tQL1FZ|!!yz@o0z{$9$YKY_J=xDUR zP(aimj^VJRxXsb)Gibhr>Uu}mF@hz=@?Vm0sGe8#LYoaa?jiT>6s&PP39ins&cBz9 z>TSM^v`KAHTT1U0tsKi{jl~ro=~qGdvwP~LVtr;xB^skuADULxm83Lk>@HG`{0SB< zp?U!2cPgnzQg*WFnNOB+bW=PeJ2L9}SK7M;>Vz*ZYheq_!N? zRa;XQF?*77O{#g`3)TDl)$?RSnrOYs+4P+R|D*58hNR;q(2^OwzA{t~gz{5LA-CL9 zHTENN_n5s8ee6zNEWXRYS<}_A^J5dNk^)jyPQnd?tsJu0OV>8Hr?-D`&=jf@sQw_;n&OtUnE4|t@5rASAr;83ey zp)q+44+ zGVE3a*v7^Nx$rLX+-Cy|T3)`KM4X(76WteqO_bWMqf}}uqnL4%@sS8WwtM25jPgM*s)+S4)OF5SNmfzCB1x&C-eDi}HNNjYM|0h0J4-VywC?U=el?c64RkyxA(q@-T zhelMa3pG7-o9)?a$`J5M9iZ0xux zsz-Y6)jsNW`-n=*UH;;HD!fb`_O5LG)PBS4<=c2wBAk0kZx{E>Ot|90Qk`=4!fncsryk4odBUMdz8?K6p0$HBoz%T1qc z%8UwNY_Zsm$jP&RT6u_uR)dJY2NgKeTrAQ04uEeia`A%09QO9M)`q$+jNrQ=NBX83<(BC&0F5%@#kqu0(@om z!8x>3Ya@F+RUV`H%v!6UznHhX8Ct9DIALN%#|Oxp|ApNFDWuOSxeVh%=kn< zo6Owck*_B$C$>#oSUhlK{>`iKrh=^c@cGc=(fkk5`dQ8}Dh{u2_dArqKy{*Mek%iQ z=ipw#!(5A-G%QkOv7x_0Yoi+l-n>SE`<@Qhh5OPwlN3}bqC&$Q zgPmVKgol8Js3}h~*tnbaTw+QP8m{EzXc z&FtoVyK-NRDZ8TlMe3`{CEuX6&cq$o)<@JIt|uG{q?Ph;s+B&KmHJ8fpYI0-+Je^@ zn5O^x{owVZeZ^t{`w)1={dbVG#qt^JLhq9VH`&$VAMOtZBQ9b&{&j*w?vGvY129~k8sX$7cAW0zn4Njaq zDE|R_Fd4oAct{n_>u)--g9ewsz0J)B@HltfI|tX!vM|byb{?e&5Vbs)xYQYmAQ{O7M+@SZG z>8Vg&AuSe0USj!MOH~rmzc#C(e2Lo1ZI*krx3xM(8SbC3TtWMV)wD`2m+A)-d`w27 zF%hnar>TjpB~69Ld3PoK>cUiK*z0WPfCTr{2jPGn6`9K1gsyWV+$I4{!r3?k#eYQ^ z?V?9^)TLkherqCfyO_TOj7437U4j`n298SbKYpK&-!8IxysMTJf}voY?QQK1Nl>22 zt_kdwJQ~y2k5cX9H5U@ko{nH0ME3){^YJ^m%gH)vF?l_^9%A@s{TW@XXDdwpTAn@}u)s<&$jPIO(d*Puex_{*h zE7+sPeRtY@aeDZ`94p>^{(&TG@3rS|c)oK%3$j@E5&wPbQb|3?4tC~GoqEO8X%g=X zN`wz{<)u=^x;l2K^F;({j63Mj~PO+3^yE}#kaLb$y!GK1D2TO+^hIr~DI!Zm3r)m&*=A+;4qq`c* zbl%*E*?N@-3-xbdT|GNTO_FiniM>R|NgQt2p-`)I3S|Th2#Zv!Po-1Qtt_gfO7j^} ztufXFmP8TvdHJ>X^6D2A;7A?E#!K!c{tP>NjX9PZV~X+x7Q<#Cnsah-x$vCWO9DLf z@N?B!v?Gz%n-`YXKqaK6#eMgoe7YjBOL6PEkt_`LgCWLQP}ewKCPR><7~@2^TgtNA zT+VHHgok8MU`3JMrw`Ng+f29GnGXcXVrLgeet1%ul?NA=xqfCMa{NZ-8{1rHr^3q} z3ww8?{z8}_j^ZC1KbB(ty@m+uh#r*OO~8x6dip_%sNOsqmw(X=D^+akDRSpQi!4@v zU!;}CKmhw)R20&``rmvO^`}d{L}fk=x#3tigvm!W2KV)J)t7a#RV^7NS5Q67$ghVdc8_kF zXdZ=V95klqiC#bXME8Z+#C~Wisp?bRugN9GB4d8SY}Y~SPH4?YP%n7 zqr#ORJ3A{|bMvoA7c`IAl9}S0XKuz2v&RmUwM1bFER0I|-21u!lw7m9R{tXc)qA&A z?&eG&-La#Ui4oFR7`6Ccx0w!2z}&FBy9<3jis$C8Hyi=^DfsE3Nv(Rt#aF*Hex^_+ zdhUR6A7ONV%cH*eH9aA|8G2_EK^$S|_@}>D&3*jdFE^UyHurD*pH6f-c(tREBCvf!c{KT!BtYye z_Ne~x*QJT^5Kg>oac=(Ip*is`O>LXl2R6rP%+H?2xmkB)zkDjb&pkOoCio~_I%vjj zNY8j>#CgjBf!WT#9(kG{OPoM5CImC7aAv(m*Wd{QJ9cA^$kRZYG2irHMPZT0=7*L# zY<>X*eifj%c-A@rFpRT$7kyY5N8V7y-co$KS#uR+%T~v}X!-O3$JQ?w{_W-)8VD=6 z)EHT`aHp0s64;d)Om%Em=l5?rgkliz)MaM%6tQK4M`k2O*sCvlDl)=n53z-Z7aD`S zGVR{4u2VC$i7o%&yL0%#qfEOKpIS)pR*VpPbrMMHJf8jYVlS2OM)5XI*y`8#kF}NR zWHBEM^?3*YwGFQa;p z%TE|4GVrF&g-NUpD_OYPwZ|dgAb8e&>>@5jR2J@k_~{9Xzblp3V$aGr z=Ujf)d)k8i~H!tK(OlB5ho?wyvBOPo}Oat0xc+l3qT2U`wqQzbOXAOiZ4^1@`W zM_OHOha6fwQ(+E#(|_?##=*Vp6ZL%ub>$LXmjnqQj9hNBoxTeCJG2jJ)JGqu;kY|S z3TT~%l2QSeHJ+}JV4?iI)ptCBKI6~gtYi-vCKeELV6Ezra=B5pp%9w>K{C0OyF=*p zTfKq~iS0oHOP(~Q@w)?s4!Bfq4JnYW`UHWU4X4MCnz7H<9?uwRIf?4S-`#s<(|dQ& zp;*=IWyTv7*i3?~ljEz+5|!mnE<TyS6eR(T z%Vm=#G^O=*4;!mc8bhpO#JhLH{rWeH@2-4bP<__4hD5)8`P;0%eM4SK=zc+`vjNhZ zW*US(Z2dqNr@&ud&ke_g(4#-^j!LHNrL|(Fm*$&;12>xmfPmL*RNs0(wER??bJ$?A zll1euh(WaW?{sQY_`}dzc4#Qt-);ZX7`j)8@jcm^O%zBj<9hLQpcBXTyj%HwOVGeE zb!^+y&pkLOhO}_lb-wQz>K__De!yd5nl9r#Tk5@Gh0G-*=YWjQO2**5_BtBhLpMSi z^(0U4e+^y(Nd%w@`-yOF*%11axH_gp`1NAW%Ldajcmpl@OyBH0V?m4zoh{rnsk z4$>s2W+vJC!-h3=vBNBObJD%pskMbhmVAZNYwoP~tEN*bWqa^@s8&uR8;(sBF$p5p zOjO4gLHUFi0U19yTj>IBXc31XhA&8f?r6Ub@=&Ev68ili9|J;6{S*w3TOClxlHjq9 z$+uBK;KatjzDmdd-M>4$@Fg}}Kjq0~S$IGdF({i(szAWzAvXK(55<#fsRX;4-6nNz zqi8!o<2Ct=*eSV9_9(W2Vai6f(DEIdz z|G)gd@D5fO)$0-Da;kE3ionOp zRUU)D=RU9aZR1BuUxy~L<7&ywr%iE*G1CO?&0d#z_TY%HM4Lg^-P7RP;hWsenm2|g zuoM-uafbx&SKBpv8&SSt>EqnTkFUX*q%zkJ57GS+9=|>QMC(-ZR5k}64<17p+)L}) zWY*{#8vU(9^l?&xj?g^VHZLxIn6TOFNESs2Nv$yxKfml_eapk;sH{N@rxF9*ExFH`j`AU2KK$?> z?8uKdLqyX(`L=L&}Cn z75QbIo`tE_UO%^8*3G$!oTT;Kj1H5mbqSW?KqOD7_;6r%GB8m`@Aa>~fmX~A=>EY< z1UEYpu5PkI^$xxDPI7i8^elrch67`sh;0wtOJwMAgGwAIG^U_@@OL+@gA$aYqlV&} zQet3*nd?c<36~;LNAEV$#1g4W)gyJ)3hWwjNbt6kyDX|N{QkN%=Ct|Q%CEY|jvMGQa-Q3_K1G8TZl5dCkr{(tYECnLl}n4X&k;f3@)NwPa>O8d?7 zWqGe#bL^9W>{HoP_?)oRc{Ky;qSZSv9WO(M$vky?IadUIS5=FL?o?3?tT{t9ZqCo# znB9Dj_kJ1bzyH?0cc@B#oG$I;Nd0d-MEPbMkp5d4|2s$tMCkpFJ87qwq72iJb#y-% z+jmxTH`VrJt^i)3B@!v7dmRxv(D2^84moVOXL}b1>&HNi9G-H5@+BeF?GLLY<(PI& zQa(ldhF?`q_!4b=CtpdwkF`;D)g9@Zsc63}6k%9dDADce(gsa$o+H8T+GkBQccUsL zNJ))DMICE-$jRp5KKfNxH(z|T2WgVSP=Q@kf}w}RYYUpR(26A!$CS5aH?M1co}TWU zMvA$58Dh$;FCUBXH%0C2$jlJBLkOwVphtV^rhCzDB5Yr+S)bxYx7QVA(DCkM=G#x# z&&C`%l)j_?%$OwFKkS>R4G*x0Yc=R-IjxWGfPfR*N6>w}EmPQ6<5ip0;hFc}dU{&G zT%dsjn3f^Hx?{V?;BIv1Ep8^R4xo4q16-bSrIOf@a3R<6*RLk`K1TXJQ$~W3ICGXGX8yF!NmACLQT1O zgn{a3X21XV{^6}Ya4y{Xe+c{Xa45s}?Ps1DjGeSd5@QKbm_(_J83{>dhNOsu?6S95 z#y-~US+Yi1Ln38O_U!u-(_-I+WNW^=_xpbTyuUxbnZt2(A2W_;GWT^q*L7a!d0sDl z^njlU_vwhGzf0GzpUAQ5W5mwpGSAUugq;nqt5z(V`%EBJPB6>?y(*Uq6qfkLX@Wsm zc;Uy}JgA%pN0p4~BsI*p7yr8Fy(dAKO#WrqMZlM8f&Hv{7t4gRL}D6<#a69en#;qy z!Ygo|ZsS#e*QviQXP~|n)X5+HEnbap@gqh{wtaUCpS)`_Hav<&U32D_r+Rn1^)``H zX7DA~Tg?9rA3hzn^ioGTP?rhx`zL;GJ-LH33@(z4I{yF@Y2GOR?wC@o`_b_?3g7VH ze3N~{uI0^P-=3zMgVe(|Y%F&E@X`3i8ehhz@$1S2GhA}!MmXI*!uG^13BFf9M4 za>=M5Mmaga*rp6G-WD~(0wtS}`h5^cR!)+P0RyVWx_vk-5yrKDV~cI$;^zt?Em-8=n0GFBW&$Nbv|rN$-A4LApE%M zzuuR3a-@%N)& zzd@oOv7lcyNVY3doO50|^+okK9owLNL*=JRZ(3IWU~BZax*Uplm3USDjLL)2)`7I# z$7D2Oam$*y>#D_GI4W#zmbLtkqZkSw}@t5SXg37 zou2UI;qtCfSr=C%sbOPddQ~EhCY^e@F)bJ973hDwt1cX?yo*>3Nhy?sM`Xn^2HG%#qw8g_*2= z7DN}rg9T3yx%W@@PiAMuYa)REg7yAKrz2P_)_vR^o!2#2%ij6$O2N|yW=IRAgjh25 z;-=TKmqfDv30EDfKY{=1F_{g|Axnvj*V4kwBZM3@gCOu5(i0J+P);6<#-avvrRAxf zx8qmvP*;|dP*dzxT1t;y)TTha#DFjY#5bz~-=`k$ov+j&yRbL-oSgjJ!9YB(u%q9L zwBvLhScu`s<|v3PNIqKx0fBszlLygPPXU%P!)M|+3H8wSaEp(HA@+xggmk&vzw>(q z%bnWyY{cjE^XSO`+#e5s-~P{o6;iQQ(bc2KunLNB3bJSqQVEs}v5p9taOY5M@5eH$M&x0LxpOdwh#etrf zCrJ3>Wzd_{S_IeZLKgbgr(55IQ2q$P#tj=#?`f4~bOxAQ`9KZKjA13$e>HD()#Ck> zZQ6U`kG?1#&7}7dqo1N;PN1OE-S$Z`;{`?#T5-6A34(ReQ!4mFK$Z)sLlh)*0Q~&- zc_qgJ2&@UGRga7GnRZ`Od?5@ga4H=M^@WHhJ{yV6b731MXCu3PJdefD5A)Ei5m@-j zAu>bE6DTp+e?-MUAK+`OM{j>pnZf?1T11cfk?URd`%6oHPnjy~#v>yIfIk!m$Fw;5 zC+qv0{ab3rHDSTbJgSMB>De=hy@ooGmttZp@+`0CV|qYQ#72SyzC$g_-LpMHFt_{kt5#atVy zPHT+Md>DF@_?99Cg;b;QmqFN}!+QVKE>4`9$*2Xb{W182JAg8R=b7R%3iz$JR++ zHL1urz^Yy$Vv}ff zn*~j-<6qYQ5^0 z@bLXD`yIv8>AQo}r$ijpWZ^7$kob7&u%e46a>eYe%gP{%@))nv3 z+&l>sI)oObSUEV7eXSP3p5=2Sk~Vjg*kE{vL98#~&-evbQ9^xEo{KKx>u9R?5eszi z0TL#;81;kP>hWg#*vi=SDWY$6Y$sd_BaSUhjQ3bWBs9#kyQ~_>Ckp5>|ZhtQQobu9Jy4{T3EG+P2ttI?ecwfdO4< zYO0Xwl92MrXB29aZiS?Kk)tr+>l>Ku+|`ho(`s;6@TUd)`7~|cJ>dArX2V>;J`H2} zehrzw`Ij70mdD8Hsn_M_-9FC#5|7ARle;A4SAwush%tTKK%=)YV2-pi4GCK+#AuR} zrC#;+NBX)|mliTv-F;-QrH1Z4Ofg}d491JdUgYPjFxK1D8_2#11ka?_GYi|VfWUIW5`{TTKFbyhq(@Z&4X=)6e4hg!6V>7m)K-?A%;i9H|( z@T;8!cjJqd1}FZw+f3js#fXWwjy%zn3`wTbWn{>BD=5cb|j~A?q_&{H_t>xD8%pHik5b+2J|f900#v*!JMD_gUNW@Kx>2Y z4)=CX7^Sd|DfPG&;Ka`LcOCR|QQx(h2Es@f?j;9gE};(#6F*R^H(DU8CI49h^#VyG zyv;DEG&O7!uP&Bl!i~2K)zDN-Q45m{ziS&`B!yW$&_0&_bu4RpLFU+L{>{SI=8bwE zKQTpJ781LI!yKDneJLke{bF}tN5=fL(iMMUonQ;2fr&SB7Y|D4!s*H53;tPLvXwgq zN7Y@Sjp~nt`r_OeV?-hxX!QO15loYinuI9817kD~LjoK~F8=?H2cQ>V*MUqhJk24o z7U0GL{2<5@h+>hs0M_lC8XXAatG4utXL&V~wQC2=G2cj-(t8iY4_Y}Gv16S+S^_=g zNu}GHPcKV-U#>q!ErI|aIO?h_=QflhQf};MS49?I?g?{C3wL1dTtN?=_=;b3H_zWw z&K}Kg%5%hQTvo|L*v@(FU9J`?xw6-m8xH)1y7@mbm&aY&);DNIFk==A$~c>pSl`Q; z&;_3gIufZc`$I@@a`B9p*K4l2IxKbS`>)XBcVjy4WUb3+&w}$csJU^Kfl6IwtYmj* z2YLp!wA1HvS88tt2CCiD1pEZsK05Fx`-Oh}^vafATxETDngk4Vm$y-$kgWLO}iqfK@3sNd}$z+h9l$1oXrPx2qOL6M- z_a)U&|9WMMp#0^xOq_JGXzB>%)YD%qsc5%Co7oE$i*ylBeg3elKJ$BgGIw=Y$B}kL zC|78XHbgg~yN@fIln~pQ8Q_g#+Y@)T-Zmi^O@KaHqZ6ow(?94grI;`ReH%7LyR8{3 z*wYYL;J>1eK{IVe2WQD9G3#{&(P2sLtK0hrxp8%nv_esBk#`ZkTjcYxAj3M7t?^Lk zj|*@K`4U|8)ZOY{I=1`h>=O<-@s|>zgL|(k3;I~in70=@@)ZioHaYCeOyhBgMqGyq z95wxH_*oSK`UdfLTj%4cNWJECfzO!{R{)B_i2{Cz110?#h8Km?Aw)$R65Nma*!3f< zj>58sA3gk{KvH!azbK!uUA0%Rl*g*>i=9;?`oeEDFo_03NcSK3GEDe83~& z-vB%*=TMG?Q}V0Fl_ji4d;@rZf7{x-{?gjv=WZ#5l9JH~$t#k0 z;vQw^#ccuS+FvKBjH9N2Z@MntcTLD;#un_Dz-Iz;(>uL`i_ByT;VM45T>; za0;NebU=O0%}VdAp`dYn6?&tGNT}r6^Is1NMf&%u%#P{*k)!%C=Qb`?B~RA#pziK? zcUlEn`NW)`lv~_>oT_Qy$`gW=60P={{^g-f@4bOi#KJ%}I>7gHb*Sx<+7}^4Ed0G@ zqn&N&o6Uaj2M(EoJS?!3*yS6$8%octHhp*zLTXDVQJ*e)p#7?&j~HOWwi>Y%Bxdxvz>86hY8{e3#k|I zpMSYvrn1JHz6l*j&N#k0R%d5lR19mzCUyq<{!_vhPq@9VX8Obh{00pE4#+22k#iq& z)H$mH#+vy{{@8(OZJI6h1kM|Wg%igwzD5NVBh}8E{K3NDe3`bzp%PM>Gsh(ca{WoL ztJ*P%qg>p=rkdysDv^c^x*Vo;TaLn&iIVi813iE~@&Pi}tDE7$9kR6uN*Gp-QHx2v z38feDKPyoJ^=KomUDN(7RF@rhB&I4J3(NB>Vx$0m&3ur|N!_L~Ja}hRtJ$>`^-4pG zBl0N`_7ToF-;)UqKmGfWUZ+JyBg48(UvGUEi073Q4?=)?%J!CRiNPD-5~`skc#kl9 zKWvlll94R&&arg=gV7+KdV(x1E=*6GCEvMt@gjNlc-T_C2^9GzDwjQbmE)fGA=1@v5tTQqmv`x2!D!O+nH zS};tE?~L!Ze$4(QX!@Xoy`tT)htoUpubfx z$#?r?n$`(b2~{Bq89qNMab)Y{M`J-Wfx-oW&)@!C;cDmA7TR*YYB=kg21-zh$`HtUPT$o2A8x#>Wctxn!(O37x{SkY7qy{OKrD!6o z+o2m^?7IndG^gv)Vv}s+6V5d{F9_#rGdcft)qar-DJNBL${U%3e4+dIo1n8Om_8&@ z!a$vf5?tKh*uT5Cb0SejHyQX9QEf5~t@Py&tlRBa8?qomkn$YHF$TilNk0TO)`x{PM_nmGa!WrSpvdr6*I+=I0r~9cO zpAXr+RwYUI(f8M&LKMI!-_$8xIcQ(0nkvj&!zAW2+npLxm3DU;3zkJ_?r$lG?<^fsL`{U$&-@&JB9cqc{*vB% z0zB?-SVe%|5~xfjIy!zdq&q%DM_X~Vx+tFO3qp6@=5tqDJxYdvF$lD) zA`CE;4_fZt%PYge3f`A}lC&W!fx0Yq{6}y;$`vb`O5yw&&k`!9X92&YUNXVg#eKAK zRoM3+7r-|b&Q;3p3|lORWZt@^M}o)3U0z@FNfc=kaq4@6Ax8$Enz%T9}S9u@uH(%xy%i7IM0W!S(L+Y5}sjLFEQ7c8SPyg!wm2~%& z`wZc_ej@50@Uv>6xsUkNoOiXuU`|dppy!Nw@?<-T%)=vK^2B=^^gm^fDcwHt&N(J+ zG&a@?<4b0e;$uL5fPt8EJO{h<$j(?Z}O>qLw1 z_7n_=|4pywq3bVeZ0KL4uVw&!)(?(N410-P!w}P+FB5_V4(%viK>Zf%X*n_xat*}) zno^a=9-V$Phrr+Vzx0Y^^`H`K%tY9)lrR-^z1=jKDjvgwh|Gx!0y|<9eg*XQeZ}Gs z{8=Z))(I3P4&em zToApE_Z|AfRD;HJQk^;7IXzhkRP;-?j>?A3Jt6j6>*>juRmE)0+54egLW9u}Cr-5j zJ-M-d^?5~k*6QR+Bjo`y^!oV~1$Ll}XI}O5ri*quO8orfV$KLbPZLwJoeMxb0lzcf znx5;96f}YZ#Q&N1JTYev*`z>9#2=axT@1qc2Uss0iPJr8*TIOykzk(LV?Bvn5DsBt zL~%I}zK?dQ0lmz-CZGFDgQ_VW?vU2y<3%SqCn)H2h_KO+`RZ?PSzmyl#z^bWj}*Z9 z<=C3sMcz5pL>E>(sRsCt+1|P)OoETaA4^qd?gIV@f*<2cy>g2A)0Zag^T4mWML*!^ z_K~`Z8%3C{X<}tylnuJx^$u2F4eeArQrr`ctfV|;Hd4;DzWo8k`^^i7 znxb}-c?j^&2*xsW_Uef01AB`n5*U9KsaAg7*>8;{^h&^(0(@ktD_;+w^`r)*cJJ@r z2l!j=rGx`a;j`Bd&ehJ<5@2GsQ2}xiet4sW#dMyRT(7E8c4>%-UR`>Xb>yI$uqsdr z)izSNL#HyTbSL|Y=GaS}q9_Y=7Bx&Do7O9#HoV@HFWCQ3}TQCyEq^*!*Ai+KFTfdpa6EIDx!+*hn8pn~9HP(Q*b z56u~C@L@maX3>{!+N%1Q6ZMF`weKdhPZ1EmP-lHVJn)?8xnHp01+I5$R7;4Jz5?`p z)0vV!G9h6zX6(-E<-)2@cRY?YQzY{1rVe(mX$j|?=$lb0Q+)VAJDBS#cO5Kt$5ncX z_r|^NZEH9U9qm z{h$AHOh$f@GRP@$S)ip0{Nsd$RMWs4%Hz{ARY&pl>E&(|1f-1?cr|4(Ga@wqWZ?1s z=XcL-7$N30!=t2z)VD6>#H{eSn@L-lBYq@IT1D^t{SmQMb5rf@jCe2);82t1h;%G7 zRP5(TM;L!$2KaHo*~areK>x+{@A`2W`LYe?5Osl!?9~vBP+MF8{6_!z?LP(n)e{Vr zd7U5QBOs>?I9)eSiv-uYa5!AUy{1G!+n)>p9_tO(UlNY;2&b2$RYCuKeZ=#j97#`m z9L8ppVrAzKBPb}TV$b&w8mE9m|9AZl{Nmn0frvkx=@O71;^6m`sb&sQZeDJlx)ifX|nuDb8@{&_{(>C%obBC;|hrV zBGgQPe_mMc8;U(8S5u+Af}s&b+YmS_0{pnv(dvOb$%`W@jmf$Yayx?r46q- zd!(e2c*kAVyx*oDiPZz=ZTdU6Jnk3l;HTN4XChfPHs?maxjy2;c#h2qep9sleH)xGo_j{^*I(OdNBsHXqBJis8zp3%2 zb?-xKlf6%Q9}|W}2l)FofY5f^zs@PLl?ZoLb=TFrqqMffp7nYB3Gn09%5{OBal=}* zi^bfEhE(oC74^T+8AABOcti%k7r#D~l;QE-MN|Ggg=bO3l_j>+FOqF3--4A({x{I=in zDBSVk;u=W*g_y*5AwRzzuFs5ypjeElaw*8amkd3M&yr%;jM;|j6Pt)_!Eo26c{78V z$vG>F@8`Q(nS~@YN&Q97p1pwX#quCV=No?h_*!G4l*(iBc7jzdGDd4*F4%IKzI%-s z*QSrhXN&VgkN`W7U@(9m5dYx(g5-{|T>9WI!v_ENc>?fiG=(c2*IWox?fmFlasZ!g zQZuWjGS3`sVHe${A)_?2Zr+wF7Br4Lu^a*NtB&+rX@?D*>6rCYP zSG$rF{ic1OM=5jRchV}t6tz20&j5Yz_Ae0MZIGD-M=qm3i0^&ZKNrrP*U{_4_RwWx zi17Z8-#>brC{#Cx!?iu_1UUP?rbvKflGPl8tF5XI33HF5Rl0JjwoX$t^(S+85#2pVp{p`2;8Xu39-MsOYAsRE5>T7k(==9_E zLUT%r)*~3qr(p|^yqrqBxV>`tENYrZCbX@uB#VQ+$+zHok!Cc|+f^G)^Rt<&@+|9b z>2Cr5*T}*05PQns%`)F$3lgC|I^DwsVf(v(2#cWx;{bl&e@+dBqEbNI$L$=bZ;>NmP7b4r)^EMe->uAk`do%kpZU=%2cacB z^zoy^HxDNQ{CvuZ6gZu-@#A6y(GbiVNEVOjM(P6mGK<7XJx&mZ28ySNf#u;o z(}7=Y-ZLSg1n8HW$vWBvLtc$WXXVbNmk`9zyNl^`;I}br7fByqU5;O2+X)Q9HnjDA z{pwSxC4VXQZ%SVw@loWU;*IQSo`vBzME!6JpzpZ({b@Wb=SNkLb;UH1sdvM=?)zB$ z6f>@F^3N+Js6)0PDO1@)!$(UYwKvD{@N=?XiW3&UX;M8x z#X&|679Hmw+Ng)PuITHCCA`AILvMRO))zyryLHW1uk&KzO4Taeceg2fV|B~S{j*)j zZ%SLl?8lRT76`<(VSR*818@D$NTNMHkHx;Z{0pADSv{dG3c4d8ieGvZCvEmncaTfQtQB+SeHfV}%7-t;u;R-A4ctuZ>wwg#cpZJ#Ab z#{jDPoWE6R&(0g!&&7AyVo!-0BVG69237&z4w`z-iQ*!``4e|P8>nCT$Re*!jT8je zk9xamZ^R*8a6FRl+Yxa6FE^W87HW;yrym#>+JpUA++LFvu`1FQEt{PM_*~x&EM+9+ zZoNrTe@jxoK`@49lMZ*TzkxfY5B zR1JnP@NoI(-OiqV)+Q<6_AHu75ctCd@4QytDXB;jy5nj8&(Hc$@WsD3_Q_tlSHJx| z_786dpB-}`aC{RZSoc5ifA$6Q#bJL4UH{+lFN`1gItoDm|AkPXXBpYWPIZ83g0;aPCp5ZeES^cMd2dlnTZZ;X9`-E?aBj z?&xPfQjwDZ^ANH}4vJs7*-@T##W2_HL1 z|9ZF+v0ty4ZK$ew@8sd(5!|epDLAXO(c0)K5fbKg_u&b0;v?SA*s#};ZNR@xBFoRV z;8mihp+Enu-2}ty=(ch<3(DzZj^-^le7YD$+HGYFPw`0jy(f;EC*t9`cF$rHwq@ox z2C}xdFo=JK`@L$}hy?Ds+t3>_367HrbF=Dc%@rheU|a)0ey~tax+;^vDa`+jh>ipN zxpvzarNGZ0l$5_Sanxf~OSH%vH2PB{&6R)4F$oL54{1sL@wRw*{(g9g8xr`Zyy>m^ z+E(na>8|NyblD&ZmT2&1G#LAk^zRbUi|NLcFEg6-Q5{;8idE`PiUWr=RT(>PdGR z#@A-aq5Sf2I+S3?d&CmxDaR^?s~U<04GkI^kh&Lm;7>OjOe-wGo;^orUo;}rQw+|` zAk2<5Mex~38UlWLb&Bg9iKB?$Mk#&GmRu_Ehi8sti6e-LKV+{N0U0@fFSwn3TU*vA zdxAQDO$GP~u%$Hen3I0yWYq=)M+(EA^QJq!?m`#yJ^9w_N{H~MH>)n1Ebl2s^3Jv*5!-4z6IMBe{{kOX%P zRgBq;m{*5Bl~&+8N<&uOw-Y_Su=@9rca^dX;9GC^?-tu1ptUUlE?gLh9|wb<#pmRt zV_Rp#>L}_Ym|o8ApyD_S-FzJ)ng_J|P2}#TlmFsOEw34KLq7d_ zOke~;`E4SUK*6Gqb0_zW1dz6N)G3fQ4%FK!16jOR^}YT*TVZgX#s|*#J^H#~xiWJ% z_=#{%;M}?KU+>Pvyt^ruL_G!S={$9FY=d=5*;B$HCLwZ8(A+|J?#nAGBZ1dvS3-#0 z#*3`ddVP6x*1}Z5bXQ@N^SzaG_S(eJN?xdY=@JQclzd^1CF-?ZTl2u6Ye?{t`km|8 zZrzq=`lCmWN?_r>TfG**$U@t0;tv{40P&xrH*Cr7U9E69xWyOn_Z%uZI%T;mB`JDP z(Wx1r7c|>lG}Ib7TK#=XQmF;tuO^cwW{Ob88LmOejtj(=gs60LS!CyfA1`TcqlT>p~Qq{%g3 zTkt%fx=rLV*6J(vek(9sk4ceKa3$2o=eWF8;R|h@6=__(br0;f9@mG0QokGjzU<95 zc?10WqSyuAT~Qkd*-5W|$qVWq!MfhlY7hmYXi<*@;vu8kbv0Vo{_zw4uC3OA_(vxX zGBqW7XBHfDOo%9wHF}vImu00rkj0Vx!UCZprLbOq)|j5#7E-dMuz9kOsWqp!Vs=YthEbN>}?;4e!vs0H4~P#s$Ebpp^!G;Z!4X?`lNY*18zsL#phI?z5fT za=@UGdU&5<{kJhir3BsbGbB}s5ZjX#qmODN={5`TNTRBS+J%D8bi@l zn{oDv%zP%+bIII^XzZx?bnce?y_*7W63qk{Xh6TJ&7t;^^80Xwuo@)+=nD+a+nR`} zkHcoUx~IN2(~v4M__K;K5NbfS_=4ju@nIqQ`}UF77~bJ5ET_AVU7$UZA1`Uq=7Km(s95~?D{y}$uR>#rt*KC6GJg@ zYu#iw8mz-mW8?2Dh2byt6Ws^apz4usExqX)e6g%~yS(gRvfE4^C(W*P;-%=TRlcoD zvn#CmMTtQsovqB|#Ea8IE{k!ugQ^405yce-ZimmOb!L0kJlJR8!neH1?K3)!*+k?T z>bRvz0Q|qL`j$q_QzH+DCi}}WWLP>c_weNp;UAKqbTm`|=H&sewH%udF^58QvcG)* z`l`5|O?3?xDD`BjC73?}@SH)@Dd|HjP@Uh) z)}%o`6zh_yVw4hkPvCN8N-c3-4WWn*vf%0UIcfr87K_4a#JmeCF)#EcK*mxMDlEaO ztGOfgB)pW>yPKc)@sd3z_j4$)x8waT9Yqus(Z=MLTjHy8kcaJ$ej7au_;oCfUU>I0 zv$VJ2=qiIL&+OK{D6#yf{Wq5J*QFJ~{l&4$bJ9$_R#lIx2kAjzzJyJ)U1x``+>?O4 zZ+*K!&wke4=~n|K*~qr3^j-* z9z_hb z*dV~~4N$0j@bgvVwG*c&IfjSvEuVw^1lGb#VqbAEG3n<6|ERe2lCOt2wI963dslRJ z1#=9T^eT*;OA>&V13QL5yi7lSi*%@ZCN%A zcvwP6rk6`BbJx1ea;ok$sR6Hgp(b7yFiKP;M~CZGLE*Cl0|@+wE(W2j zY%VUf^U{f&*EFn6NpLWierJB91k?0>iRAhTz@O?JeSi9b`}>1OO0|mb6JXh^p*g54 zOS;O(GSO5aEGm0CpYUr8fSLG_itz z+w_hEI6p8(CI{*+_4`jov{ShW;+VLM`bo8s^Fmvz&2&D1N0>Zv+cctAV#n!~I2;W* zQnfs&h%A|TV)MKP$^`hJ>p~6x>qko&18ynzegl0Z+w0w)fW~RQsVvm$0g}vv+_T>L z&T5kJYH~wYcP0S8|8QE{z!G003;JM^2bizOW0P{X>>vLgC!�#<4OZ5m3ax`x~GM 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

$4@hR|`blEKUkG95KlV#ce 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%0DEWFb@1dFyd*x zE@d^7Gq#s3LV-T+UuVD1u553tit7Kc1oY+p=yPx4iT;DP{uBQ|?-c0WZ0hBJgf87k z@gKc!pr^BWwFaH1!EgO;wBBw;FpxR1=#qZ${|0to+fpn;#5?7-MNN&zL~t*sM2cZO z?p{)pDC*TzkQ|Q5Z!*o9+6Ts$Km!q{{j;moj=ROa?WKmsnMvS>s59(xSfO$jr_Fna zw;8-|b%PSy$zhJva;x$I;7{j%&N6*LNtYwuD&Dn(MO5fETxnP*W#;lfh)>&Tg@Zr- zkdyw93jW$PW-Y0lhKm&2bsw(jH9x$&m%eqVE*N*nTxh=(U3H&|xttSqnw;e_ba=2brpfS;`-rh&CZpdxi z=We|Qd{)GJh93I_;zz>C<%ZFtbT}&yBNJcDV0uKYR7H(xz^~`zwu)YdARI(S8}|dh z%`>YFrv>&#Svg=5wN{C(Gv69{3{MXMKPE!C_C!ddp~T z1q$H7L+tMNu!t6VR&l)+GXSs9re0<;MBn#=I%7>(0e<#Ryl3pU9DRAcTOSP9BsS+a zfMYQ6Cw~84f-itS#t8}kS#5*pz+Y1e!3l59mZ8=KRT?1|%LSML5Tk@cT7wkz-|-E8 z0_dfhc8z@rar(U(+~E4N9vl0Auc@S^7Z0Y{8wiKfKbuky-k_2Z0@_}~FPEKsQ%|0s z1M|!4tMzlH8Kd2G`Kp8I4Fb%FE`Qqs>lgiF#um-mz;7|olNCb2<4@I!=OR7%!TIhz zY9zu9sr#YqnEQeMvNRt!?;(CH;a!&)?^il35LALS!(bw%!#d^<%?QLQ@LKl8hIgm` zmFjVOzYK`~ngt0d#f`CtW4P@5j5aT*H{^3 z5a7U)pmZEM{O0C|;~iU3hI&;fSut;yxz2_8iH}5g;dr&8iv1!od>pdzImQIp-;hz5 zrPbKq7tnM0FTGB1|A4;y_4LN(zxDhX2Z8=H6~uq&zv3T^PeDGrsrSDb{|pEV^fHM| zg~8c#l^XB&@{?nG1cwZH#iy*azMaWP*{HFxIiyeMc`Ey)pDv*0{CY*TQs!sm zn)cpvvw@$E!<120yujCr+0|?3LkBeB{=?Ju=k+0} zJ;Fm~=vB}^r4+dIpYV}uniriCf8LL*q14*u+e1?E(4Dhx;JmFt(N&Dl{2nB!bJ-UG z-!_)TGz(whI=4(0VdDUvey{j_te9CVx$ulcAiqBi=I6@@wS#0xUI8ZxfnputJJ*h# ziEAHwVLoSSy-tHGERQIakqdKY4BbYlVZi^Td<<_^numY0U0^Kz+h%=g%C}RPvE@|I zQ&T<$z?-MwOm`b`H^=Pw)wT@+`b>MN@yj~AP<7Yyk)6QzmJ6+hmnxB!ijl456omTu zML8BY=m<>DMBcaf8=HP~NhF%A64cC~GQk5O5|Sn%h9rryh}8j0uomLrkCG%YF*s|T zGmnmf`6L5Wf}CCP7~_WlHvC^8T+cYiL1RlZ;{yyH2F=F)^~dqR z8e1!plvGbT35$}#O9DNC_#>WW@n|HL(z!b(qPK&#n?L!PK=m)9*IsEC&l7PLr6~uP zHglS#VP6a!6#?GMEku@M(ydW)btL8s(7${*1`usGaq6k0RKHg|7{dQauT8;bO4_l%m>U3jI`C|4LhF+##`o}ra}qvckh1t zv3YOsnA2edNLeZ9{Exra1_qn)-__~xSBRvO%|D+%`;DoogF{HjCO@Ps|G}NacnB5q z9&6EhpNh)Otgen{K@8?3lP@<*24zEWP?4o7{(=e;h8|HWxQcS_R>v_>&G&v@dl(!8 z`o9lU-xeKyz}B_Y;CTb)FI5k<-j*GDNx}%t6}|_2{ybgfV+A`Ze7$(SvLt(ee_zSv zD#Kz@xZ{n!>-%p4|97=ReRu zAAZo5xQ_S#m@WCsCr3_%3ixr)PG2B1D$vM>^=aMUe7#T25i_6t<@Q$#ItJ8J7R|5o z#kOvEuvzat`^Le##V%iBtMq}MpM@GiLR2^{v@-GhQHJhQvzt}YjRd%+xPpd}SKyg* z`n9oS0Q@zr?X3v9P#fy?Y`qrHM=L2&!B}xdxqW!I_G@jO3fmcbS{v&^%)Os~1ap-U zNInY#sr2UCX%9uUujqZSkaLv zu%epTrjzEoM#Fu+zPG8v3~u3uB*`?V1p5=}{x3Z%yXpk5sxD(`xY-bjjK`%BUO{z20|wl`U0D@Y ze4IJg1&=HktTuu9IAZ-VTUzTdWbNt;rrw3In!Lj(S_m`kSkJnFMscV3p#rDH|7 zPeb1DHlo<(7R~^E^1LOl1L92le?C=BC1b()b8p^7j;sm`^!@7f{|wgng&75NXoWdR zCXw0__ZtvW7Fk=&#V;N>a00L8}in>iax)${mkk=`JF9!sK)mIBXCF;{65+l=}`WggUcCGJq-bUJ;k}3*|Rkt zSNfAqW%W{LIEP-lhBkq%1Ys2x_LxRkx-SNypkru<8Yvtp3Y>?h)6YumL+{EfwuRh( z0>9hxhRiSpJI(+E_yka4RnH*i4^N23_}kxvik6YF8f4y5?kh@^FR7@YLYwgn;vZa$ z0{?*i7=b}ko~}j@CB>}C=WBI9KlMR+{n@~P-+g-idc#OIvL>UkFg3!;Q@IW?a~=3~ z=A;EYG2FOP<&`R7qYw0E%CxJTK4@#c%ygoC;O8a4%6hk@KOC~s-B)Z-o+d$TO}=)j z-*BCnzSZpb%r$ynuO5-EC3kh`*2eNfRU8EB^?`RupX$iBco-un;TjDEzOt%^b?JPb zf$-1K5?&(nXi8y7&BRh_Vr|Bc*#H@s9lDqpO@nI8=01{ivA|Dj@|LZkw)s4Al?^S7o;y1%!h9HzAKkNd7E{i??VAt|&4T$3Gx5R$ z#6{x68*e)dIhDXffpXserc%R8V=FH6jPUiOzkDQ51%VC641 z)qgAMq2_`8*^FXltjqXu$mcU&FMS{Ate1BKhrxN>ZPK zvvP&#UR!rZ9+}@tg)NNjX>RuTXK6F4zK`B|A^7bh;p1fW!VQ_b zJ0mm|BErR^vFc34AgBb|QA|*14KK{Bd%!uWXS;(Z)`*6iayYWZ%Pzl=dF5o`$z?E) z)pa4^)ff}o!@HwSg8HpQq&yB|l=at;$IY%&EE>*3S8R)y>DuKZ=!F`Gn{+b7dsWKO z`u1)}5iYsqLu_?+u#7Ntc+tfDFkmuSiH5s)f$!i)tCMkeH*Okk0rM-5{jP6hO~Xp; zqJg8d`c zC)tIQ{_0q#FPWKJlb2-tn-gE`-W4cX}YLHR$ws{Bz_*733XWv$4Ii5v{@RPoJ z0KC+3>cWL{66VH)XoEAOGO)UDNYFPm2zrwrln~mHR_G8mR)+DWsN{$Q33>5=3!Cp+a2XYVxx&d z69E6M+hln)RB~4$l`NyYe;LeAyi0R*-qm$29BJkrILqo$4r+YM+Fh3=8bw+4VqBwQ!P8FC>G4*N@Z^TkrL;AVYyT)n5lD^`RvV4BPB!!FJh%52hpc zPQ1ti=Rfa}BO1rC!{q5Bh_+i`K4O+*o9sMq@3`y7q&W)o8Ug>;t6bA4S zPK)~z4;z*0a*af#1AkEks*3lO{ifWCnW~b@>4r*MK6wRxHAt1=))J*XW`X>im-zX& z|HCS^V@YQQf zt`wpeHgL*{o99E&-#i`S;EY&a$<~u3rVlW{d4Ao2jKY(cX#UUdc1<8k5uZ6H)-C-p z21^GS{#U8p!f1U4yG_!C5g`+i#vJ$H)V$fX&18ZPHb6}+0srJX4T^aN#pfbpTTbT- z1O4iIc(o$*>&poZg0XE=f^#He8^(CIPm>SwLW;C zO1^97Ny&GEGe!$flPw1bG)z F{trzpJG=k@ diff --git a/recipes/astc-codec/all/test_package/conanfile.py b/recipes/astc-codec/all/test_package/conanfile.py index 9f50bbe4c73b2f..98ab55852ad565 100644 --- a/recipes/astc-codec/all/test_package/conanfile.py +++ b/recipes/astc-codec/all/test_package/conanfile.py @@ -23,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - bees = os.path.join(self.source_folder, "atlas_small_4x4.astc") - self.run(f"{bin_path} {bees} 256 256", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/astc-codec/all/test_package/test_package.cpp b/recipes/astc-codec/all/test_package/test_package.cpp index ec0a2e3ad6195e..266f4473a5391c 100644 --- a/recipes/astc-codec/all/test_package/test_package.cpp +++ b/recipes/astc-codec/all/test_package/test_package.cpp @@ -8,21 +8,13 @@ int main(int argc, char **argv) { - if (argc < 4) { - std::cerr << "Need at least three argument\n"; - } - std::ifstream stream(argv[1], std::ios::in | std::ios::binary); + std::ifstream stream("fake-file.astc", std::ios::in | std::ios::binary); std::vector astc_data((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); - const size_t width = std::stoi(argv[2]); - const size_t height = std::stoi(argv[3]); - - std::vector result; - result.resize(width * height * 4); - bool success = astc_codec::ASTCDecompressToRGBA( - astc_data.data(), astc_data.size(), width, height, astc_codec::FootprintType::k4x4, - result.data(), result.size(), /* stride */ width * 4); + astc_data.data(), 100, 100, 100, astc_codec::FootprintType::k4x4, NULL, 100, 100); + + std::cout << "Test: " << success << std::endl; stream.close(); diff --git a/recipes/astc-codec/all/test_v1_package/conanfile.py b/recipes/astc-codec/all/test_v1_package/conanfile.py index 3605ef54030927..38f4483872d47f 100644 --- a/recipes/astc-codec/all/test_v1_package/conanfile.py +++ b/recipes/astc-codec/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - bees = os.path.join(self.source_folder, os.pardir, "test_package", "atlas_small_4x4.astc") - self.run(f"{bin_path} {bees} 256 256", run_environment=True) + self.run(bin_path, run_environment=True) From 029c5b45311cecc675038ef4be355e53aabeeb66 Mon Sep 17 00:00:00 2001 From: toge Date: Tue, 28 May 2024 18:53:45 +0900 Subject: [PATCH 56/83] (#24130) imgui: add vresion 1.90.7 --- recipes/imgui/all/conandata.yml | 6 ++++++ recipes/imgui/config.yml | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/recipes/imgui/all/conandata.yml b/recipes/imgui/all/conandata.yml index 243fb74f55969c..dd6a3a05e21f7e 100644 --- a/recipes/imgui/all/conandata.yml +++ b/recipes/imgui/all/conandata.yml @@ -1,4 +1,10 @@ sources: + "1.90.7": + url: "https://github.com/ocornut/imgui/archive/v1.90.7.tar.gz" + sha256: "872574217643d4ad7e9e6df420bb8d9e0d468fb90641c2bf50fd61745e05de99" + "1.90.7-docking": + url: "https://github.com/ocornut/imgui/archive/v1.90.7-docking.tar.gz" + sha256: "582a9061a508b82b0ff6504aa17af6bb449bca9edf0a0f0f33bf729252cd3194" "1.90.6": url: "https://github.com/ocornut/imgui/archive/v1.90.6.tar.gz" sha256: "70b4b05ac0938e82b4d5b8d59480d3e2ca63ca570dfb88c55023831f387237ad" diff --git a/recipes/imgui/config.yml b/recipes/imgui/config.yml index 24603cc17b199b..4147c74db48056 100644 --- a/recipes/imgui/config.yml +++ b/recipes/imgui/config.yml @@ -1,4 +1,8 @@ versions: + "1.90.7": + folder: all + "1.90.7-docking": + folder: all "1.90.6": folder: all "1.90.6-docking": From 4a3872074b12793cdb829a7bff7aced0f5d783b9 Mon Sep 17 00:00:00 2001 From: Martin Delille Date: Tue, 28 May 2024 12:32:34 +0200 Subject: [PATCH 57/83] (#24126) [whisper-cpp] Bump version 1.6.2 --- recipes/whisper-cpp/all/conandata.yml | 3 +++ recipes/whisper-cpp/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/whisper-cpp/all/conandata.yml b/recipes/whisper-cpp/all/conandata.yml index 1c610fb8c4e680..02c9106a4cf071 100644 --- a/recipes/whisper-cpp/all/conandata.yml +++ b/recipes/whisper-cpp/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.6.2": + url: "https://github.com/ggerganov/whisper.cpp/archive/refs/tags/v1.6.2.tar.gz" + sha256: "da7988072022acc3cfa61b370b3c51baad017f1900c3dc4e68cb276499f66894" "1.5.2": url: "https://github.com/ggerganov/whisper.cpp/archive/refs/tags/v1.5.2.tar.gz" sha256: "be9c4d5d4b5f28f02e36f28e602b7d2dcfd734dd1c834ddae91ae8db601e951f" diff --git a/recipes/whisper-cpp/config.yml b/recipes/whisper-cpp/config.yml index 8c62d29e8f324c..a159f6f70ca5cd 100644 --- a/recipes/whisper-cpp/config.yml +++ b/recipes/whisper-cpp/config.yml @@ -1,4 +1,6 @@ versions: + "1.6.2": + folder: "all" "1.5.2": folder: "all" "1.4.3": From f707cc7856323a5212bd262b59762c32b443fb1e Mon Sep 17 00:00:00 2001 From: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> Date: Tue, 28 May 2024 11:52:39 +0100 Subject: [PATCH 58/83] (#24132) [symengine] Add version 0.12.0. --- recipes/symengine/all/conandata.yml | 3 +++ recipes/symengine/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/symengine/all/conandata.yml b/recipes/symengine/all/conandata.yml index c52591b6474750..f1d9cf2996b495 100644 --- a/recipes/symengine/all/conandata.yml +++ b/recipes/symengine/all/conandata.yml @@ -14,3 +14,6 @@ sources: "0.11.2": url: "https://github.com/symengine/symengine/releases/download/v0.11.2/symengine-0.11.2.tar.gz" sha256: "f6972acd6a65354f6414e69460d2e175729470632bdac05919bc2f7f32e48cbd" + "0.12.0": + url: "https://github.com/symengine/symengine/archive/refs/tags/v0.12.0.tar.gz" + sha256: "1b5c3b0bc6a9f187635f93585649f24a18e9c7f2167cebcd885edeaaf211d956" diff --git a/recipes/symengine/config.yml b/recipes/symengine/config.yml index b47e71fe86741a..7edc4135e663ca 100644 --- a/recipes/symengine/config.yml +++ b/recipes/symengine/config.yml @@ -9,3 +9,5 @@ versions: folder: all "0.11.2": folder: all + "0.12.0": + folder: all From a8cbe2a0289ae67ac9f2b8930bbe14e244c99567 Mon Sep 17 00:00:00 2001 From: SpaceIm <30052553+SpaceIm@users.noreply.github.com> Date: Tue, 28 May 2024 15:04:45 +0200 Subject: [PATCH 59/83] (#21085) msdfgen: add 1.11 + package_type + bump deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add package_type * bump freetype & libpng * avoid patch in 1.10 * add msdfgen/1.11 * inject BUILD_SHARED_LIBS as cache_variables * simplify patching strategy of previous versions * restore find_package module freetype * remove pdb files * Revert "restore find_package module freetype" This reverts commit d678393a3da40e7f72801f5d927ee2f36775a737. * workaround for https://github.com/conan-io/conan/issues/13560 * bump freetype * less verbose package_info() * Update recipes/msdfgen/all/conanfile.py Co-authored-by: Matthieu Darbois --------- Co-authored-by: Rubén Rincón Blanco Co-authored-by: Matthieu Darbois --- recipes/msdfgen/all/conandata.yml | 7 +- recipes/msdfgen/all/conanfile.py | 76 ++++++++----------- .../all/patches/1.10-0001-fix-cmake.patch | 24 ------ .../1.10-0001-honor-msvc-runtime.patch | 26 +++++++ recipes/msdfgen/config.yml | 2 + 5 files changed, 64 insertions(+), 71 deletions(-) delete mode 100644 recipes/msdfgen/all/patches/1.10-0001-fix-cmake.patch create mode 100644 recipes/msdfgen/all/patches/1.10-0001-honor-msvc-runtime.patch diff --git a/recipes/msdfgen/all/conandata.yml b/recipes/msdfgen/all/conandata.yml index 2d80e884e7bf93..f68f3c7d5e83e8 100644 --- a/recipes/msdfgen/all/conandata.yml +++ b/recipes/msdfgen/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.11": + url: "https://github.com/Chlumsky/msdfgen/archive/refs/tags/v1.11.tar.gz" + sha256: "fad74e33274f591e72511bc0546189e7aec439f2a512ef1b2fde243554d457cb" "1.10": url: "https://github.com/Chlumsky/msdfgen/archive/refs/tags/v1.10.tar.gz" sha256: "2754d1687bfb80968d9c682e0c4c04c8fcf72df1421d076baf44ea0d87aa3662" @@ -10,8 +13,8 @@ sources: sha256: "909eb88c71268dc00cdda244a1fa40a0feefae45f68a779fbfddd5463559fa40" patches: "1.10": - - patch_file: "patches/1.10-0001-fix-cmake.patch" - patch_description: "move project position to top" + - patch_file: "patches/1.10-0001-honor-msvc-runtime.patch" + patch_description: "Remove hardcoded vc runtime" patch_type: "conan" "1.9.1": - patch_file: "patches/1.9-0001-unvendor-external-libs.patch" diff --git a/recipes/msdfgen/all/conanfile.py b/recipes/msdfgen/all/conanfile.py index 03f96bc253715d..3465d1f3da467e 100644 --- a/recipes/msdfgen/all/conanfile.py +++ b/recipes/msdfgen/all/conanfile.py @@ -2,7 +2,7 @@ from conan.errors import ConanInvalidConfiguration from conan.tools.build import check_min_cppstd from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout -from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, replace_in_file, rmdir +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, replace_in_file, rm, rmdir from conan.tools.microsoft import is_msvc, is_msvc_static_runtime from conan.tools.scm import Version import os @@ -17,7 +17,7 @@ class MsdfgenConan(ConanFile): topics = ("msdf", "shape", "glyph", "font") homepage = "https://github.com/Chlumsky/msdfgen" url = "https://github.com/conan-io/conan-center-index" - + package_type = "library" settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], @@ -49,11 +49,11 @@ def layout(self): cmake_layout(self, src_folder="src") def requirements(self): - self.requires("freetype/2.12.1") + self.requires("freetype/2.13.2") if Version(self.version) < "1.10": self.requires("lodepng/cci.20200615") else: - self.requires("libpng/1.6.39") + self.requires("libpng/[>=1.6 <2]") self.requires("tinyxml2/9.0.0") def validate(self): @@ -65,59 +65,45 @@ def validate(self): raise ConanInvalidConfiguration("skia recipe not available yet in CCI") def source(self): - get(self, **self.conan_data["sources"][self.version], - destination=self.source_folder, strip_root=True) + get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): tc = CMakeToolchain(self) - tc.variables["MSDFGEN_BUILD_MSDFGEN_STANDALONE"] = self.options.utility - tc.variables["MSDFGEN_USE_OPENMP"] = self.options.with_openmp - tc.variables["MSDFGEN_USE_CPP11"] = True - tc.variables["MSDFGEN_USE_SKIA"] = self.options.with_skia - tc.variables["MSDFGEN_INSTALL"] = True + tc.cache_variables["MSDFGEN_BUILD_MSDFGEN_STANDALONE"] = self.options.utility + tc.cache_variables["MSDFGEN_USE_OPENMP"] = self.options.with_openmp + tc.cache_variables["MSDFGEN_USE_CPP11"] = True + tc.cache_variables["MSDFGEN_USE_SKIA"] = self.options.with_skia + tc.cache_variables["MSDFGEN_INSTALL"] = True if Version(self.version) >= "1.10": - tc.variables["MSDFGEN_DYNAMIC_RUNTIME"] = not is_msvc_static_runtime(self) - tc.variables["MSDFGEN_USE_VCPKG"] = False + tc.cache_variables["MSDFGEN_USE_VCPKG"] = False + # Because in upstream CMakeLists, project() is called after some logic based on BUILD_SHARED_LIBS + tc.cache_variables["BUILD_SHARED_LIBS"] = self.options.shared + if Version(self.version) >= "1.11": + tc.cache_variables["MSDFGEN_DYNAMIC_RUNTIME"] = not is_msvc_static_runtime(self) + if self.settings.os == "Linux": + # Workaround for https://github.com/conan-io/conan/issues/13560 + libdirs_host = [l for dependency in self.dependencies.host.values() for l in dependency.cpp_info.aggregated_components().libdirs] + tc.variables["CMAKE_BUILD_RPATH"] = ";".join(libdirs_host) tc.generate() deps = CMakeDeps(self) deps.generate() def _patch_sources(self): apply_conandata_patches(self) - cmakelists = os.path.join(self.source_folder, "CMakeLists.txt") - # workaround against CMAKE_FIND_PACKAGE_PREFER_CONFIG ON in conan toolchain - replace_in_file(self, cmakelists, "find_package(Freetype REQUIRED)", "find_package(Freetype REQUIRED MODULE)") - # remove bundled lodepng & tinyxml2 - rmdir(self, os.path.join(self.source_folder, "lib")) - rmdir(self, os.path.join(self.source_folder, "include")) - # very weird but required for Visual Studio when libs are unvendored (at least for Ninja generator) - if is_msvc(self): - if Version(self.version) < "1.10": + + if Version(self.version) < "1.10": + # remove bundled lodepng & tinyxml2 + rmdir(self, os.path.join(self.source_folder, "lib")) + rmdir(self, os.path.join(self.source_folder, "include")) + + # very weird but required for Visual Studio when libs are unvendored (at least for Ninja generator) + if is_msvc(self): replace_in_file( self, - cmakelists, + os.path.join(self.source_folder, "CMakeLists.txt"), "set_target_properties(msdfgen-standalone PROPERTIES ARCHIVE_OUTPUT_DIRECTORY archive OUTPUT_NAME msdfgen)", "set_target_properties(msdfgen-standalone PROPERTIES OUTPUT_NAME msdfgen IMPORT_PREFIX foo)", ) - else: - replace_in_file( - self, - cmakelists, - 'set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")', - '' - ) - replace_in_file( - self, - cmakelists, - 'set_property(TARGET msdfgen-ext PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")', - '' - ) - replace_in_file( - self, - cmakelists, - 'set_property(TARGET msdfgen PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")', - '' - ) def build(self): self._patch_sources() @@ -130,6 +116,7 @@ def package(self): cmake = CMake(self) cmake.install() rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rm(self, "*.pdb", os.path.join(self.package_folder, "bin")) def package_info(self): self.cpp_info.set_property("cmake_file_name", "msdfgen") @@ -167,7 +154,6 @@ def package_info(self): if self.options.with_skia: self.cpp_info.components["msdfgen-ext"].defines.append("MSDFGEN_USE_SKIA") + # TODO: to remove once conan v1 support dropped if self.options.utility: - bin_path = os.path.join(self.package_folder, "bin") - self.output.info("Appending PATH environment variable: {}".format(bin_path)) - self.env_info.PATH.append(bin_path) + self.env_info.PATH.append(os.path.join(self.package_folder, "bin")) diff --git a/recipes/msdfgen/all/patches/1.10-0001-fix-cmake.patch b/recipes/msdfgen/all/patches/1.10-0001-fix-cmake.patch deleted file mode 100644 index 50b04c4c1e5d9c..00000000000000 --- a/recipes/msdfgen/all/patches/1.10-0001-fix-cmake.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 6dec916..432f218 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -2,6 +2,9 @@ - cmake_minimum_required(VERSION 3.15) - include(cmake/version.cmake) - -+# Version is specified in vcpkg.json -+project(msdfgen VERSION ${MSDFGEN_VERSION} LANGUAGES CXX) -+ - option(MSDFGEN_CORE_ONLY "Only build the core library with no dependencies" OFF) - option(MSDFGEN_BUILD_STANDALONE "Build the msdfgen standalone executable" ON) - option(MSDFGEN_USE_VCPKG "Use vcpkg package manager to link project dependencies" ON) -@@ -67,9 +70,6 @@ if(MSDFGEN_USE_VCPKG) - endif() - endif() - --# Version is specified in vcpkg.json --project(msdfgen VERSION ${MSDFGEN_VERSION} LANGUAGES CXX) -- - file(GLOB_RECURSE MSDFGEN_CORE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "core/*.h" "core/*.hpp") - file(GLOB_RECURSE MSDFGEN_CORE_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "core/*.cpp") - file(GLOB_RECURSE MSDFGEN_EXT_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ext/*.h" "ext/*.hpp") diff --git a/recipes/msdfgen/all/patches/1.10-0001-honor-msvc-runtime.patch b/recipes/msdfgen/all/patches/1.10-0001-honor-msvc-runtime.patch new file mode 100644 index 00000000000000..c0f9784ad23cfe --- /dev/null +++ b/recipes/msdfgen/all/patches/1.10-0001-honor-msvc-runtime.patch @@ -0,0 +1,26 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -79,7 +79,6 @@ file(GLOB_RECURSE MSDFGEN_EXT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ext/ + add_library(msdfgen-core "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" ${MSDFGEN_CORE_HEADERS} ${MSDFGEN_CORE_SOURCES}) + add_library(msdfgen::msdfgen-core ALIAS msdfgen-core) + set_target_properties(msdfgen-core PROPERTIES PUBLIC_HEADER "${MSDFGEN_CORE_HEADERS}") +-set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + target_compile_definitions(msdfgen-core PUBLIC + MSDFGEN_VERSION=${MSDFGEN_VERSION} + MSDFGEN_VERSION_MAJOR=${MSDFGEN_VERSION_MAJOR} +@@ -127,7 +126,6 @@ if(NOT MSDFGEN_CORE_ONLY) + add_library(msdfgen-ext "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" ${MSDFGEN_EXT_HEADERS} ${MSDFGEN_EXT_SOURCES}) + add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext) + set_target_properties(msdfgen-ext PROPERTIES PUBLIC_HEADER "${MSDFGEN_EXT_HEADERS}") +- set_property(TARGET msdfgen-ext PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_LIBPNG) + target_link_libraries(msdfgen-ext PRIVATE msdfgen::msdfgen-core Freetype::Freetype tinyxml2::tinyxml2 PNG::PNG) + target_include_directories(msdfgen-ext +@@ -171,7 +169,6 @@ if(MSDFGEN_BUILD_STANDALONE) + add_executable(msdfgen ${MSDFGEN_STANDALONE_SOURCES}) + target_compile_definitions(msdfgen PUBLIC MSDFGEN_STANDALONE) + target_compile_definitions(msdfgen PRIVATE MSDFGEN_VERSION_UNDERLINE=${MSDFGEN_VERSION_UNDERLINE}) +- set_property(TARGET msdfgen PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + target_link_libraries(msdfgen PRIVATE msdfgen::msdfgen) + set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT msdfgen) + endif() diff --git a/recipes/msdfgen/config.yml b/recipes/msdfgen/config.yml index 9f326bdd6e1a40..91cf4a222ec6ce 100644 --- a/recipes/msdfgen/config.yml +++ b/recipes/msdfgen/config.yml @@ -1,4 +1,6 @@ versions: + "1.11": + folder: all "1.10": folder: all "1.9.1": From ef1ae664f4dc24348a841f9c290a3d624a64f75d Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Tue, 28 May 2024 09:33:19 -0400 Subject: [PATCH 60/83] (#24113) yomm2: add version 1.5.2 --- recipes/yomm2/all/conandata.yml | 3 ++ recipes/yomm2/all/conanfile.py | 11 ++-- .../yomm2/all/test_package/test_package.cpp | 50 +++++++++++++++---- recipes/yomm2/config.yml | 2 + 4 files changed, 52 insertions(+), 14 deletions(-) diff --git a/recipes/yomm2/all/conandata.yml b/recipes/yomm2/all/conandata.yml index bb998ec99294fa..6a145498b3d66d 100644 --- a/recipes/yomm2/all/conandata.yml +++ b/recipes/yomm2/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "1.5.2": + url: "https://github.com/jll63/yomm2/archive/refs/tags/v1.5.2.tar.gz" + sha256: "12f3f735b4870606199b889a242ebfed84cf0cd392b04a1c32db11291de684be" "1.5.1": url: "https://github.com/jll63/yomm2/archive/refs/tags/v1.5.1.tar.gz" sha256: "323abba27a356555cc3ead3e3e950746ab43f90d97ad21950f2ba3afaf565ecc" diff --git a/recipes/yomm2/all/conanfile.py b/recipes/yomm2/all/conanfile.py index 770cbf94dd1df4..f02471f2e1d506 100644 --- a/recipes/yomm2/all/conanfile.py +++ b/recipes/yomm2/all/conanfile.py @@ -38,7 +38,7 @@ def _compilers_minimum_version(self): return { "gcc": "8", "clang": "5", - "apple-clang": "12", + "apple-clang": "13", "msvc": "192" } @@ -54,6 +54,10 @@ def validate(self): raise ConanInvalidConfiguration( f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." ) + if self.settings.compiler == "apple-clang" and not bool(self.options.header_only): + raise ConanInvalidConfiguration( + f"{self.ref} dynamic library builds are not supported on MacOS." + ) def build_requirements(self): self.tool_requires("cmake/[>=3.20 <4]") @@ -80,8 +84,9 @@ def generate(self): tc.generate() def _patch_sources(self): - cmakelists = os.path.join(self.source_folder, "CMakeLists.txt") - replace_in_file(self, cmakelists, "add_subdirectory(docs.in)", "") + if Version(self.version) <= "1.5.1": + cmakelists = os.path.join(self.source_folder, "CMakeLists.txt") + replace_in_file(self, cmakelists, "add_subdirectory(docs.in)", "") def build(self): self._patch_sources() diff --git a/recipes/yomm2/all/test_package/test_package.cpp b/recipes/yomm2/all/test_package/test_package.cpp index dd17d7408403d6..ea5d7313d5408a 100644 --- a/recipes/yomm2/all/test_package/test_package.cpp +++ b/recipes/yomm2/all/test_package/test_package.cpp @@ -1,25 +1,53 @@ -// Copyright (c) 2021 Jean-Louis Leroy +// Copyright (c) 2018-2024 Jean-Louis Leroy // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) +#include + #include -#include -#include -#include +class Animal { + public: + virtual ~Animal() { + } +}; + +class Dog : public Animal {}; +class Cat : public Animal {}; + +register_classes(Animal, Dog, Cat); -using std::cout; -using yorel::yomm2::virtual_; +declare_method( + void, meet, (virtual_, virtual_, std::ostream&)); + +define_method(void, meet, (Animal&, Animal&, std::ostream& os)) { + os << "ignore"; +} -// register_class(classes); +// Add definitions for specific pairs of animals. +define_method(void, meet, (Dog& dog1, Dog& dog2, std::ostream& os)) { + os << "wag tail"; +} -// declare_method(return, name, (params)); +define_method(void, meet, (Dog& dog, Cat& cat, std::ostream& os)) { + os << "chase"; +} -// define_method(return, name, (params)) { -// } +define_method(void, meet, (Cat& cat, Dog& dog, std::ostream& os)) { + os << "run"; +} int main() { + #ifndef NDEBUG + yorel::yomm2::default_policy::trace_enabled = true; + #endif + yorel::yomm2::update(); - return 0; + Animal&& snoopy = Dog(); + Animal&& felix = Cat(); + std::ostringstream os; + meet(snoopy, felix, os); // chase + + return os.str() == "chase" ? 0 : 1; } diff --git a/recipes/yomm2/config.yml b/recipes/yomm2/config.yml index f1c5e3d313178b..e13089a05a884c 100644 --- a/recipes/yomm2/config.yml +++ b/recipes/yomm2/config.yml @@ -1,3 +1,5 @@ versions: + "1.5.2": + folder: all "1.5.1": folder: all From 36dce3efc9245f60df197f3f68c2d4d83ac3db1b Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Tue, 28 May 2024 15:57:22 +0200 Subject: [PATCH 61/83] (#24133) sdl_ttf: refactor test package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sdl_ttf: refactor test package * Update recipes/sdl_ttf/all/test_package/test_package.c --------- Co-authored-by: Rubén Rincón Blanco --- .../sdl_ttf/all/test_package/OpenSans-Bold.ttf | Bin 224592 -> 0 bytes recipes/sdl_ttf/all/test_package/conanfile.py | 3 +-- .../sdl_ttf/all/test_package/test_package.c | 12 ------------ .../sdl_ttf/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 recipes/sdl_ttf/all/test_package/OpenSans-Bold.ttf diff --git a/recipes/sdl_ttf/all/test_package/OpenSans-Bold.ttf b/recipes/sdl_ttf/all/test_package/OpenSans-Bold.ttf deleted file mode 100644 index fd79d43bea0293ac1b20e8aca1142627983d2c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224592 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 diff --git a/recipes/sdl_ttf/all/test_package/conanfile.py b/recipes/sdl_ttf/all/test_package/conanfile.py index c4fdfb4dbdc982..0a6bc68712d901 100644 --- a/recipes/sdl_ttf/all/test_package/conanfile.py +++ b/recipes/sdl_ttf/all/test_package/conanfile.py @@ -23,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - ttf_path = os.path.join(self.source_folder, "OpenSans-Bold.ttf") - self.run(f"{bin_path} {ttf_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/sdl_ttf/all/test_package/test_package.c b/recipes/sdl_ttf/all/test_package/test_package.c index 2050bc43e42155..20d9fde4b5f07e 100644 --- a/recipes/sdl_ttf/all/test_package/test_package.c +++ b/recipes/sdl_ttf/all/test_package/test_package.c @@ -4,23 +4,11 @@ #include int main(int argc, char **argv) { - if (argc < 2) { - fprintf(stderr, "Need at least one argument\n"); - return 1; - } - if (TTF_Init() == -1) { fprintf(stderr, "Failed to initialize TTF: %s\n", SDL_GetError()); return 1; } - TTF_Font *font = TTF_OpenFont(argv[1], 16); - - if (font == NULL) { - fprintf(stderr, "Failed to load font: %s\n", SDL_GetError()); - return 1; - } - printf("SDL2_ttf is working!\n"); return 0; diff --git a/recipes/sdl_ttf/all/test_v1_package/conanfile.py b/recipes/sdl_ttf/all/test_v1_package/conanfile.py index 7b775db727c08e..38f4483872d47f 100644 --- a/recipes/sdl_ttf/all/test_v1_package/conanfile.py +++ b/recipes/sdl_ttf/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - ttf_path = os.path.join(self.source_folder, os.pardir, "test_package", "OpenSans-Bold.ttf") - self.run(f"{bin_path} {ttf_path}", run_environment=True) + self.run(bin_path, run_environment=True) From 5159ddfd31deb4d8020825d49fea66a911502b65 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 28 May 2024 17:29:31 +0300 Subject: [PATCH 62/83] (#23253) dav1d: add v1.4.1, drop vulnerable versions, deprecate with_avx512 Based on the vulnerability info at https://repology.org/project/dav1d/information --- recipes/dav1d/all/conandata.yml | 15 +++------------ recipes/dav1d/all/conanfile.py | 22 +++++++++++----------- recipes/dav1d/config.yml | 10 ++-------- 3 files changed, 16 insertions(+), 31 deletions(-) diff --git a/recipes/dav1d/all/conandata.yml b/recipes/dav1d/all/conandata.yml index a478887dc4fcc3..f8c452bd8a5e40 100644 --- a/recipes/dav1d/all/conandata.yml +++ b/recipes/dav1d/all/conandata.yml @@ -1,19 +1,10 @@ sources: + "1.4.1": + url: "http://ftp.videolan.org/pub/videolan/dav1d/1.4.1/dav1d-1.4.1.tar.xz" + sha256: "8d407dd5fe7986413c937b14e67f36aebd06e1fa5cfec679d10e548476f2d5f8" "1.3.0": url: "http://ftp.videolan.org/pub/videolan/dav1d/1.3.0/dav1d-1.3.0.tar.xz" sha256: "6d8be2741c505c47f8f1ced3c9cc427759243436553d01d1acce201f87b39e71" "1.2.1": url: "http://ftp.videolan.org/pub/videolan/dav1d/1.2.1/dav1d-1.2.1.tar.xz" sha256: "4e33eb61ec54c768a16da0cf8fa0928b4c4593f5f804a3c887d4a21c318340b2" - "1.1.0": - url: "http://ftp.videolan.org/pub/videolan/dav1d/1.1.0/dav1d-1.1.0.tar.xz" - sha256: "fb57aae7875f28c30fb3dbae4a3683d27e2f91dde09ce5c60c22cef9bc58dfd1" - "1.0.0": - url: "http://ftp.videolan.org/pub/videolan/dav1d/1.0.0/dav1d-1.0.0.tar.xz" - sha256: "51737db7e4897e599684f873a4725176dd3c779e639411d7c4fce134bb5ebb82" - "0.9.1": - url: "http://ftp.videolan.org/pub/videolan/dav1d/0.9.1/dav1d-0.9.1.tar.xz" - sha256: "a35d6468013eb14e8093ea463594f8b89aba1775a3005fc9ec6fa36b2d2c71d7" - "0.8.1": - url: "http://ftp.videolan.org/pub/videolan/dav1d/0.8.1/dav1d-0.8.1.tar.xz" - sha256: "a4b503063d411dd129f5eb43616675e613b36ac0aa1e449976d645c05add21ea" diff --git a/recipes/dav1d/all/conanfile.py b/recipes/dav1d/all/conanfile.py index 5882f930a7dbde..08d0c4d8be0f58 100644 --- a/recipes/dav1d/all/conanfile.py +++ b/recipes/dav1d/all/conanfile.py @@ -5,7 +5,6 @@ from conan.tools.layout import basic_layout from conan.tools.meson import Meson, MesonToolchain from conan.tools.microsoft import is_msvc -from conan.tools.scm import Version import os required_conan_version = ">=1.53.0" @@ -26,7 +25,7 @@ class Dav1dConan(ConanFile): "bit_depth": ["all", 8, 16], "with_tools": [True, False], "assembly": [True, False], - "with_avx512": [True, False], + "with_avx512": ["deprecated", True, False], } default_options = { "shared": False, @@ -34,7 +33,7 @@ class Dav1dConan(ConanFile): "bit_depth": "all", "with_tools": True, "assembly": True, - "with_avx512": False, + "with_avx512": "deprecated", } def config_options(self): @@ -43,24 +42,27 @@ def config_options(self): if is_msvc(self) and self.settings.build_type == "Debug": # debug builds with assembly often causes linker hangs or LNK1000 self.options.assembly = False - if Version(self.version) < "1.0.0": - del self.options.with_avx512 def configure(self): if self.options.shared: self.options.rm_safe("fPIC") self.settings.rm_safe("compiler.cppstd") self.settings.rm_safe("compiler.libcxx") - if not self.options.assembly: - self.options.rm_safe("with_avx512") def layout(self): basic_layout(self, src_folder="src") + def package_id(self): + del self.info.options.with_avx512 + + def validate(self): + if self.options.with_avx512 != "deprecated": + self.output.warning("The 'with_avx512' option is deprecated and has no effect") + def build_requirements(self): - self.tool_requires("meson/1.2.1") + self.tool_requires("meson/1.4.0") if self.options.assembly: - self.tool_requires("nasm/2.15.05") + self.tool_requires("nasm/2.16.01") def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -72,8 +74,6 @@ def generate(self): tc = MesonToolchain(self) tc.project_options["enable_tests"] = False tc.project_options["enable_asm"] = self.options.assembly - if Version(self.version) < "1.0.0": - tc.project_options["enable_avx512"] = self.options.get_safe("with_avx512", False) tc.project_options["enable_tools"] = self.options.with_tools if self.options.bit_depth == "all": tc.project_options["bitdepths"] = "8,16" diff --git a/recipes/dav1d/config.yml b/recipes/dav1d/config.yml index 21233fe470f83c..9202e5ce9c4a9a 100644 --- a/recipes/dav1d/config.yml +++ b/recipes/dav1d/config.yml @@ -1,13 +1,7 @@ versions: + "1.4.1": + folder: "all" "1.3.0": folder: "all" "1.2.1": folder: "all" - "1.1.0": - folder: "all" - "1.0.0": - folder: "all" - "0.9.1": - folder: "all" - "0.8.1": - folder: "all" From 578e45299306b33570b5e8b7b9b009d50a807fce Mon Sep 17 00:00:00 2001 From: Egor Tyuvaev Date: Tue, 28 May 2024 17:11:40 +0200 Subject: [PATCH 63/83] (#23754) Update openvino/2024.1.0 * Update openvino for 2024.1.0 * Update recipes/openvino/all/conanfile.py Co-authored-by: Ilya Lavrenov * Trigger new build in the CI Signed-off-by: Uilian Ries --------- Signed-off-by: Uilian Ries Co-authored-by: Ilya Lavrenov Co-authored-by: Uilian Ries --- recipes/openvino/all/conandata.yml | 74 +- recipes/openvino/all/conanfile.py | 7 +- .../dependencies/dependencies-2023.1.0.yml | 2 - .../dependencies/dependencies-2024.1.0.yml | 1 + .../0001-cpu-plugin-compilation-c++17.patch | 16 - .../0002-core-compilation-c++17.patch | 46 - .../0003-fixed-gpu-with-onednn-build.patch | 684 ---- .../0004-fixed-gpu-plugin-with-clang.patch | 2836 ----------------- .../2023.1.0/0005-dynamic-protobuf.patch | 218 -- .../all/patches/2023.1.0/0006-macos-14.patch | 12 - .../2023.1.0/0007-compilation-c++23.patch | 38 - .../patches/2024.1.0/0001-fix-cxxflags.patch | 25 + recipes/openvino/config.yml | 4 +- 13 files changed, 55 insertions(+), 3908 deletions(-) delete mode 100644 recipes/openvino/all/dependencies/dependencies-2023.1.0.yml create mode 100644 recipes/openvino/all/dependencies/dependencies-2024.1.0.yml delete mode 100644 recipes/openvino/all/patches/2023.1.0/0001-cpu-plugin-compilation-c++17.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0002-core-compilation-c++17.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0003-fixed-gpu-with-onednn-build.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0004-fixed-gpu-plugin-with-clang.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0005-dynamic-protobuf.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0006-macos-14.patch delete mode 100644 recipes/openvino/all/patches/2023.1.0/0007-compilation-c++23.patch create mode 100644 recipes/openvino/all/patches/2024.1.0/0001-fix-cxxflags.patch diff --git a/recipes/openvino/all/conandata.yml b/recipes/openvino/all/conandata.yml index dd23e75ae9252b..a47bfa540ad579 100644 --- a/recipes/openvino/all/conandata.yml +++ b/recipes/openvino/all/conandata.yml @@ -1,4 +1,20 @@ sources: + "2024.1.0": + "openvino": + url: "https://github.com/openvinotoolkit/openvino/archive/refs/tags/2024.1.0.tar.gz" + sha256: "b298a91b5aae252ef9883e0f2017e88677be88a9839b1aa2f6e9f70067d98ce6" + "arm_compute": + url: "https://github.com/ARM-software/ComputeLibrary/archive/refs/tags/v24.02.1.tar.gz" + sha256: "590d5cb710355bce2ddfe7117529c2f492cd253b548f709bbfe84702203d99c8" + "onednn_cpu": + url: "https://github.com/openvinotoolkit/oneDNN/archive/26633ae49edd4353a29b7170d9fcef6b2d79f4b3.tar.gz" + sha256: "3cd4a2aea30cd6ca689e63545cf986f8e83c88333b73d42bb750fcaf08940b17" + "mlas": + url: "https://github.com/openvinotoolkit/mlas/archive/d1bc25ec4660cddd87804fcf03b2411b5dfb2e94.tar.gz" + sha256: "0a44fbfd4b13e8609d66ddac4b11a27c90c1074cde5244c91ad197901666004c" + "onednn_gpu": + url: "https://github.com/oneapi-src/oneDNN/archive/4e6ff043c439652fcf6c400ac4e0c81bbac7c71c.tar.gz" + sha256: "c3543d560fbbb7297df91c191cc9bf682322c5554302e256f1bf4a757424a331" "2024.0.0": "openvino": url: "https://github.com/openvinotoolkit/openvino/archive/refs/tags/2024.0.0.tar.gz" @@ -47,23 +63,12 @@ sources: "onednn_gpu": url: "https://github.com/oneapi-src/oneDNN/archive/284ad4574939fa784e4ddaa1f4aa577b8eb7a017.tar.gz" sha256: "16f36078339cd08b949efea1d863344cb0b742d9f5898937d07a591b0c4da517" - "2023.1.0": - "openvino": - url: "https://github.com/openvinotoolkit/openvino/archive/refs/tags/2023.1.0.tar.gz" - sha256: "ff88596b342440185874ddbe22874b47ad7b923f14671921af760b15c98aacd6" - "arm_compute": - url: "https://github.com/ARM-software/ComputeLibrary/archive/refs/tags/v23.02.1.tar.gz" - sha256: "c3a443e26539f866969242e690cf0651ef629149741ee18732f954c734da6763" - "onednn_cpu": - url: "https://github.com/openvinotoolkit/oneDNN/archive/ae825539bd850d1ad5c83d4bb0d56c65d46d5842.tar.gz" - sha256: "1204df17785c8603f9dfa1f4f91e91e5ffd4391bf7680d2b256de2513490ebee" - "mlas": - url: "https://github.com/openvinotoolkit/mlas/archive/c7c8a631315000f17c650af34431009d2f22129c.tar.gz" - sha256: "7b790dfeef8e1dd612f920c85186c52ad3a3e2245e2a2afd6cc91ce4b1dc64a9" - "onednn_gpu": - url: "https://github.com/oneapi-src/oneDNN/archive/4b82a66ed38ecaa993352e5cc6ed7753656b8a26.tar.gz" - sha256: "cb17c003fe51bc9b4e20189573956b4446468162adf0fc4cea2ee0820cff0cd0" patches: + "2024.1.0": + - patch_file: "patches/2024.1.0/0001-fix-cxxflags.patch" + patch_description: "Fix build failure when explicitly passing different gcc ABI via cxx flags" + patch_type: "portability" + patch_source: "https://github.com/openvinotoolkit/openvino/pull/24274" "2024.0.0": - patch_file: "patches/2024.0.0/0001-Include-mutex-for-std-call_once.patch" patch_description: "Include mutex for std::call_once" @@ -82,40 +87,3 @@ patches: patch_description: "Fixed issue with version on Windows" patch_type: "portability" patch_source: "https://github.com/openvinotoolkit/openvino/pull/19628" - "2023.1.0": - - patch_file: "patches/2023.1.0/0001-cpu-plugin-compilation-c++17.patch" - patch_description: "Fixed CPU plugin compilation with C++17" - patch_type: "portability" - patch_source: "https://github.com/openvinotoolkit/openvino/pull/19628" - - patch_file: "patches/2023.1.0/0002-core-compilation-c++17.patch" - patch_description: "Fixed OpenVINO Core compilation with C++17" - patch_type: "portability" - patch_source: "https://github.com/openvinotoolkit/openvino/pull/19707" - - patch_file: "patches/2023.1.0/0003-fixed-gpu-with-onednn-build.patch" - patch_description: "Fixed Intel GPU plugin with oneDNN" - patch_type: "portability" - # severals PR are merged into a single patch including: - # https://github.com/openvinotoolkit/openvino/pull/19668, - # https://github.com/openvinotoolkit/openvino/pull/19715, - # https://github.com/openvinotoolkit/openvino/pull/19716, - # https://github.com/openvinotoolkit/openvino/pull/19762 and - patch_source: "https://github.com/openvinotoolkit/openvino/pull/19811" - - patch_file: "patches/2023.1.0/0004-fixed-gpu-plugin-with-clang.patch" - patch_description: "Fixed order of initialization of static variables in GPU plugin compiled with clang" - patch_type: "portability" - patch_source: "https://github.com/openvinotoolkit/openvino/pull/19768" - - patch_file: "patches/2023.1.0/0005-dynamic-protobuf.patch" - patch_description: "Added a workaround for OpenVINO to work with dynamic protobuf" - patch_type: "portability" - # severals PR are merged into a single patch including: - # https://github.com/openvinotoolkit/openvino/pull/19599, - # https://github.com/openvinotoolkit/openvino/pull/19758 and - patch_source: "https://github.com/openvinotoolkit/openvino/pull/20612" - - patch_file: "patches/2023.1.0/0006-macos-14.patch" - patch_description: "Support macos 14" - patch_type: "portability" - patch_source: "https://github.com/openvinotoolkit/openvino/pull/19946" - - patch_file: "patches/2023.1.0/0007-compilation-c++23.patch" - patch_description: "Compilation with C++23" - patch_type: "portability" - patch_source: "https://github.com/openvinotoolkit/openvino/pull/20724" diff --git a/recipes/openvino/all/conanfile.py b/recipes/openvino/all/conanfile.py index d5b090836295b5..fca46b7f107365 100644 --- a/recipes/openvino/all/conanfile.py +++ b/recipes/openvino/all/conanfile.py @@ -14,7 +14,6 @@ class OpenvinoConan(ConanFile): name = "openvino" - # Optional metadata license = "Apache-2.0" homepage = "https://github.com/openvinotoolkit/openvino" url = "https://github.com/conan-io/conan-center-index" @@ -100,6 +99,10 @@ def _target_x86_64(self): def _gna_option_available(self): return self.settings.os in ["Linux", "Windows"] and self._target_x86_64 and Version(self.version) < "2024.0.0" + @property + def _npu_option_available(self): + return self.settings.os in ["Linux", "Windows"] and self._target_x86_64 and Version(self.version) >= "2024.1.0" + @property def _gpu_option_available(self): return self.settings.os != "Macos" and self._target_x86_64 @@ -205,6 +208,8 @@ def generate(self): toolchain.cache_variables["ENABLE_ONEDNN_FOR_GPU"] = self.options.shared or not self.options.enable_cpu if self._gna_option_available: toolchain.cache_variables["ENABLE_INTEL_GNA"] = False + if self._npu_option_available: + toolchain.cache_variables["ENABLE_INTEL_NPU"] = False # SW plugins toolchain.cache_variables["ENABLE_AUTO"] = self.options.enable_auto toolchain.cache_variables["ENABLE_MULTI"] = self.options.enable_auto diff --git a/recipes/openvino/all/dependencies/dependencies-2023.1.0.yml b/recipes/openvino/all/dependencies/dependencies-2023.1.0.yml deleted file mode 100644 index fd126ded2ddeea..00000000000000 --- a/recipes/openvino/all/dependencies/dependencies-2023.1.0.yml +++ /dev/null @@ -1,2 +0,0 @@ -onnx: "1.13.1" -ade: "0.1.2d" diff --git a/recipes/openvino/all/dependencies/dependencies-2024.1.0.yml b/recipes/openvino/all/dependencies/dependencies-2024.1.0.yml new file mode 100644 index 00000000000000..f99604741682a5 --- /dev/null +++ b/recipes/openvino/all/dependencies/dependencies-2024.1.0.yml @@ -0,0 +1 @@ +onnx: "1.15.0" diff --git a/recipes/openvino/all/patches/2023.1.0/0001-cpu-plugin-compilation-c++17.patch b/recipes/openvino/all/patches/2023.1.0/0001-cpu-plugin-compilation-c++17.patch deleted file mode 100644 index da6548b7c91159..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0001-cpu-plugin-compilation-c++17.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/plugins/intel_cpu/src/cpu_tensor.cpp b/src/plugins/intel_cpu/src/cpu_tensor.cpp -index 48d8fdd4be..815edd9309 100644 ---- a/src/plugins/intel_cpu/src/cpu_tensor.cpp -+++ b/src/plugins/intel_cpu/src/cpu_tensor.cpp -@@ -68,8 +68,9 @@ void Tensor::update_strides() const { - OPENVINO_ASSERT(blocked_desc, "not a valid blocked memory descriptor."); - auto& strides = blocked_desc->getStrides(); - m_strides.resize(strides.size()); -- std::transform(strides.cbegin(), strides.cend(), m_strides.begin(), -- std::bind1st(std::multiplies(), m_element_type.size())); -+ std::transform(strides.cbegin(), strides.cend(), m_strides.begin(), [this] (const size_t stride) { -+ return stride * m_element_type.size(); -+ }); - } - - void* Tensor::data(const element::Type& element_type) const { diff --git a/recipes/openvino/all/patches/2023.1.0/0002-core-compilation-c++17.patch b/recipes/openvino/all/patches/2023.1.0/0002-core-compilation-c++17.patch deleted file mode 100644 index 2df86d8ed0ec68..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0002-core-compilation-c++17.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/src/frontends/common/src/utils.cpp b/src/frontends/common/src/utils.cpp -index 8ef7481551..3a0db585fd 100644 ---- a/src/frontends/common/src/utils.cpp -+++ b/src/frontends/common/src/utils.cpp -@@ -12,10 +12,6 @@ - # include - # include - # include --# ifdef OPENVINO_ENABLE_UNICODE_PATH_SUPPORT --# include --# include --# endif - #else - # if defined(WINAPI_FAMILY) && !WINAPI_PARTITION_DESKTOP - # error "Only WINAPI_PARTITION_DESKTOP is supported, because of GetModuleHandleEx[A|W]" -diff --git a/src/frontends/paddle/src/input_model.cpp b/src/frontends/paddle/src/input_model.cpp -index 6987b3285e..287fa5e54a 100644 ---- a/src/frontends/paddle/src/input_model.cpp -+++ b/src/frontends/paddle/src/input_model.cpp -@@ -13,14 +13,10 @@ - #include "openvino/frontend/paddle/node_context.hpp" - #include "openvino/opsets/opset7.hpp" - #include "openvino/util/common_util.hpp" -+#include "openvino/util/file_util.hpp" - #include "paddle_utils.hpp" - #include "place.hpp" - --#if defined(OPENVINO_ENABLE_UNICODE_PATH_SUPPORT) && defined(_WIN32) --# include --# include --#endif -- - namespace ov { - namespace frontend { - namespace paddle { -@@ -169,9 +165,7 @@ std::basic_string get_const_path(const std::basic_string& folder_with_weig - #if defined(OPENVINO_ENABLE_UNICODE_PATH_SUPPORT) && defined(_WIN32) - template <> - std::basic_string get_const_path(const std::basic_string& folder, const std::string& name) { -- std::wstring_convert> converter; -- std::wstring _name = converter.from_bytes(name); -- return folder + paddle::get_path_sep() + _name; -+ return folder + paddle::get_path_sep() + ov::util::string_to_wstring(name); - } - #endif - diff --git a/recipes/openvino/all/patches/2023.1.0/0003-fixed-gpu-with-onednn-build.patch b/recipes/openvino/all/patches/2023.1.0/0003-fixed-gpu-with-onednn-build.patch deleted file mode 100644 index e5791b37c7a7ac..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0003-fixed-gpu-with-onednn-build.patch +++ /dev/null @@ -1,684 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 461f1a209c..0b552b3da3 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -47,6 +47,7 @@ message (STATUS "CMAKE_GENERATOR ....................... " ${CMAKE_GENERATOR}) - message (STATUS "CPACK_GENERATOR ....................... " ${CPACK_GENERATOR}) - message (STATUS "CMAKE_C_COMPILER_ID ................... " ${CMAKE_C_COMPILER_ID}) - message (STATUS "CMAKE_CXX_COMPILER_ID ................. " ${CMAKE_CXX_COMPILER_ID}) -+message (STATUS "CMAKE_CXX_STANDARD .................... " ${CMAKE_CXX_STANDARD}) - if(OV_GENERATOR_MULTI_CONFIG) - string(REPLACE ";" " " config_types "${CMAKE_CONFIGURATION_TYPES}") - message (STATUS "CMAKE_CONFIGURATION_TYPES ............. " ${config_types}) -diff --git a/cmake/developer_package/plugins/plugins.cmake b/cmake/developer_package/plugins/plugins.cmake -index 436685355a..ea187411d1 100644 ---- a/cmake/developer_package/plugins/plugins.cmake -+++ b/cmake/developer_package/plugins/plugins.cmake -@@ -117,6 +117,10 @@ function(ov_add_plugin) - # install rules - if(NOT OV_PLUGIN_SKIP_INSTALL OR NOT BUILD_SHARED_LIBS) - string(TOLOWER "${OV_PLUGIN_DEVICE_NAME}" install_component) -+ if(NOT BUILD_SHARED_LIBS) -+ # in case of static libs everything is installed to 'core' -+ set(install_component ${OV_CPACK_COMP_CORE}) -+ endif() - - if(OV_PLUGIN_PSEUDO_DEVICE) - set(plugin_hidden HIDDEN) -diff --git a/cmake/features.cmake b/cmake/features.cmake -index e4b60c89e0..7327b262a2 100644 ---- a/cmake/features.cmake -+++ b/cmake/features.cmake -@@ -23,7 +23,7 @@ endif() - - ie_dependent_option (ENABLE_INTEL_GPU "GPU OpenCL-based plugin for OpenVINO Runtime" ${ENABLE_INTEL_GPU_DEFAULT} "X86_64 OR AARCH64;NOT APPLE;NOT WINDOWS_STORE;NOT WINDOWS_PHONE" OFF) - --if (ANDROID OR (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) OR NOT BUILD_SHARED_LIBS) -+if (ANDROID OR MINGW OR (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) OR (NOT BUILD_SHARED_LIBS AND ENABLE_INTEL_CPU)) - # oneDNN doesn't support old compilers and android builds for now, so we'll build GPU plugin without oneDNN - # also, in case of static build CPU's and GPU's oneDNNs will conflict, so we are disabling GPU's one in this case - set(ENABLE_ONEDNN_FOR_GPU_DEFAULT OFF) -diff --git a/cmake/templates/OpenVINOConfig.cmake.in b/cmake/templates/OpenVINOConfig.cmake.in -index 9eb1cfdd35..7dda80d8a3 100644 ---- a/cmake/templates/OpenVINOConfig.cmake.in -+++ b/cmake/templates/OpenVINOConfig.cmake.in -@@ -223,6 +223,10 @@ macro(_ov_find_tbb) - PATHS ${_tbb_bind_dir} - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) -+ if(TARGET TBBbind::tbbbind_2_5) -+ # To solve https://cmake.org/cmake/help/latest/policy/CMP0111.html warnings -+ set_property(TARGET TBBbind::tbbbind_2_5 PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG) -+ endif() - unset(_tbb_bind_dir) - endif() - unset(install_tbbbind) -@@ -343,11 +347,15 @@ endmacro() - macro(_ov_find_intel_cpu_dependencies) - set(_OV_ENABLE_CPU_ACL "@DNNL_USE_ACL@") - if(_OV_ENABLE_CPU_ACL) -- set(_ov_in_install_tree "@PACKAGE_ARM_COMPUTE_LIB_DIR@") -+ set(_ov_in_install_tree "@PACKAGE_OPENVINO_LIB_DIR@") - if(_ov_in_install_tree) -- set_and_check(ARM_COMPUTE_LIB_DIR "@PACKAGE_ARM_COMPUTE_LIB_DIR@") -+ set_and_check(ARM_COMPUTE_LIB_DIR "@PACKAGE_OPENVINO_LIB_DIR@") - set(ACL_DIR "${CMAKE_CURRENT_LIST_DIR}") - else() -+ if(NOT TARGET arm_compute::arm_compute) -+ # for case when build tree is used separately, e.g. OpenVINODeveloperPackageConfig.cmake -+ set_and_check(ARM_COMPUTE_LIB_DIR "@PACKAGE_CMAKE_ARCHIVE_OUTPUT_DIRECTORY@") -+ endif() - set_and_check(ACL_DIR "@PACKAGE_FIND_ACL_PATH@") - endif() - -@@ -363,16 +371,50 @@ macro(_ov_find_intel_gpu_dependencies) - set(_OV_ENABLE_INTEL_GPU "@ENABLE_INTEL_GPU@") - set(_OV_ENABLE_SYSTEM_OPENCL "@ENABLE_SYSTEM_OPENCL@") - if(_OV_ENABLE_INTEL_GPU AND _OV_ENABLE_SYSTEM_OPENCL) -- set(_OV_OpenCLICDLoader_FOUND "@OpenCLICDLoader_FOUND@") -- if(_OV_OpenCLICDLoader_FOUND) -- _ov_find_dependency(OpenCLICDLoader) -- else() -- _ov_find_dependency(OpenCL) -- endif() -- unset(_OV_OpenCLICDLoader_FOUND) -+ _ov_find_dependency(OpenCL) - endif() - unset(_OV_ENABLE_INTEL_GPU) - unset(_OV_ENABLE_SYSTEM_OPENCL) -+ -+ set(_OV_ENABLE_ONEDNN_FOR_GPU "@ENABLE_ONEDNN_FOR_GPU@") -+ if(_OV_ENABLE_ONEDNN_FOR_GPU AND NOT TARGET onednn_gpu_tgt) -+ set(_OV_DNNL_GPU_LIBRARY_NAME "@DNNL_GPU_LIBRARY_NAME@") -+ -+ set(_ov_in_install_tree "@PACKAGE_OPENVINO_LIB_DIR@") -+ if(_ov_in_install_tree) -+ set(onednn_gpu_lib "${CMAKE_STATIC_LIBRARY_PREFIX}${_OV_DNNL_GPU_LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") -+ set_and_check(onednn_gpu_lib_root "@PACKAGE_OPENVINO_LIB_DIR@") -+ if(WIN32) -+ if(OV_GENERATOR_MULTI_CONFIG) -+ set(extra_args PATH_SUFFIXES ${CMAKE_CONFIGURATION_TYPES}) -+ else() -+ set(extra_args PATH_SUFFIXES ${CMAKE_BUILD_TYPE}) -+ endif() -+ endif() -+ -+ find_library(onednn_gpu_lib_path -+ NAMES ${_OV_DNNL_GPU_LIBRARY_NAME} -+ PATHS ${onednn_gpu_lib_root} -+ ${extra_args}) -+ -+ if(NOT onednn_gpu_lib_path) -+ message(FATAL_ERROR "Internal error: failed to find '${_OV_DNNL_GPU_LIBRARY_NAME}' in '${onednn_gpu_lib_root}'") -+ endif() -+ -+ unset(extra_args) -+ unset(onednn_gpu_lib) -+ else() -+ set_and_check(onednn_gpu_lib_path "@PACKAGE_ONEDNN_GPU_LIB_PATH@") -+ endif() -+ -+ set_target_properties(openvino::onednn_gpu_tgt PROPERTIES -+ INTERFACE_LINK_LIBRARIES "${onednn_gpu_lib_path}") -+ -+ unset(onednn_gpu_lib_path) -+ unset(_ov_in_install_tree) -+ unset(_OV_DNNL_GPU_LIBRARY_NAME) -+ endif() -+ unset(_OV_ENABLE_ONEDNN_FOR_GPU) - endmacro() - - macro(_ov_find_intel_gna_dependencies) -@@ -455,6 +497,7 @@ set(_OV_ENABLE_OPENVINO_BUILD_SHARED "@BUILD_SHARED_LIBS@") - - if(NOT TARGET openvino) - set(_ov_as_external_package ON) -+ include("${CMAKE_CURRENT_LIST_DIR}/OpenVINOTargets.cmake") - endif() - - if(NOT _OV_ENABLE_OPENVINO_BUILD_SHARED) -@@ -487,8 +530,6 @@ set(_ov_imported_libs openvino::runtime openvino::runtime::c - openvino::frontend::pytorch openvino::frontend::tensorflow_lite) - - if(_ov_as_external_package) -- include("${CMAKE_CURRENT_LIST_DIR}/OpenVINOTargets.cmake") -- - foreach(target IN LISTS _ov_imported_libs) - if(TARGET ${target}) - get_target_property(imported_configs ${target} IMPORTED_CONFIGURATIONS) -diff --git a/src/cmake/openvino.cmake b/src/cmake/openvino.cmake -index eb9a54354e..1d2996482b 100644 ---- a/src/cmake/openvino.cmake -+++ b/src/cmake/openvino.cmake -@@ -157,9 +157,12 @@ if(ENABLE_INTEL_GNA) - list(APPEND PATH_VARS "GNA_PATH") - endif() - if(DNNL_USE_ACL) -- list(APPEND BUILD_PATH_VARS "FIND_ACL_PATH") -+ list(APPEND BUILD_PATH_VARS "FIND_ACL_PATH;CMAKE_ARCHIVE_OUTPUT_DIRECTORY") - set(FIND_ACL_PATH "${intel_cpu_thirdparty_SOURCE_DIR}") - endif() -+if(ENABLE_ONEDNN_FOR_GPU) -+ list(APPEND BUILD_PATH_VARS "ONEDNN_GPU_LIB_PATH") -+endif() - - set(PUBLIC_HEADERS_DIR "${OpenVINO_SOURCE_DIR}/src/inference/include") - set(IE_INCLUDE_DIR "${PUBLIC_HEADERS_DIR}/ie") -@@ -177,12 +180,10 @@ configure_package_config_file("${OpenVINO_SOURCE_DIR}/cmake/templates/OpenVINOCo - - # install tree - --if(DNNL_USE_ACL) -- list(APPEND INSTALL_PATH_VARS "ARM_COMPUTE_LIB_DIR") -- # remove generator expression at the end, because searching in Release / Debug will be -- # done by ACLConfig.cmake itself -- string(REPLACE "$" "" ARM_COMPUTE_LIB_DIR "${OV_CPACK_LIBRARYDIR}") --endif() -+list(APPEND INSTALL_PATH_VARS "OPENVINO_LIB_DIR") -+# remove generator expression at the end, because searching in Release / Debug -+# will be done by inside OpenVINOConfig.cmak / ACLConfig.cmake -+string(REPLACE "$" "" OPENVINO_LIB_DIR "${OV_CPACK_LIBRARYDIR}") - - set(IE_INCLUDE_DIR "${OV_CPACK_INCLUDEDIR}/ie") - set(IE_TBB_DIR "${IE_TBB_DIR_INSTALL}") -diff --git a/src/plugins/intel_cpu/thirdparty/CMakeLists.txt b/src/plugins/intel_cpu/thirdparty/CMakeLists.txt -index 98935a0792..7e8325acef 100644 ---- a/src/plugins/intel_cpu/thirdparty/CMakeLists.txt -+++ b/src/plugins/intel_cpu/thirdparty/CMakeLists.txt -@@ -117,7 +117,7 @@ function(ov_add_onednn) - add_subdirectory(onednn EXCLUDE_FROM_ALL) - - # install static libraries -- ov_install_static_lib(dnnl cpu) -+ ov_install_static_lib(dnnl ${OV_CPACK_COMP_CORE}) - - if(DNNL_USE_ACL AND NOT BUILD_SHARED_LIBS) - # use ACLConfig.cmake in OpenVINOConfig.cmake in case of static build -@@ -125,16 +125,16 @@ function(ov_add_onednn) - # but for this we need to install library files - install(FILES $ - DESTINATION ${OV_CPACK_ARCHIVEDIR} -- COMPONENT cpu) -+ COMPONENT ${OV_CPACK_COMP_CORE}) - install(FILES "${intel_cpu_thirdparty_SOURCE_DIR}/ACLConfig.cmake" - DESTINATION ${OV_CPACK_OPENVINO_CMAKEDIR} -- COMPONENT core_dev) -+ COMPONENT ${OV_CPACK_COMP_CORE_DEV}) - endif() - endfunction() - - if(ENABLE_MLAS_FOR_CPU) - add_subdirectory(mlas) -- ov_install_static_lib(mlas cpu) -+ ov_install_static_lib(mlas ${OV_CPACK_COMP_CORE}) - endif() - - ov_add_onednn() -diff --git a/src/plugins/intel_gpu/CMakeLists.txt b/src/plugins/intel_gpu/CMakeLists.txt -index 1770b34b65..4e8a9d0e68 100644 ---- a/src/plugins/intel_gpu/CMakeLists.txt -+++ b/src/plugins/intel_gpu/CMakeLists.txt -@@ -35,6 +35,7 @@ set(MAIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include") - - add_subdirectory(thirdparty) -+include(thirdparty/cmake/rapidjson.cmake) - - if(CMAKE_COMPILER_IS_GNUCXX) - ie_add_compiler_flags(-Werror) -diff --git a/src/plugins/intel_gpu/src/graph/CMakeLists.txt b/src/plugins/intel_gpu/src/graph/CMakeLists.txt -index 0b2093d2a0..fac58ec0fa 100644 ---- a/src/plugins/intel_gpu/src/graph/CMakeLists.txt -+++ b/src/plugins/intel_gpu/src/graph/CMakeLists.txt -@@ -58,7 +58,7 @@ elseif((NOT ANDROID) AND (UNIX)) - target_link_libraries(${TARGET_NAME} PRIVATE pthread) - endif() - --ov_install_static_lib(${TARGET_NAME} gpu) -+ov_install_static_lib(${TARGET_NAME} ${OV_CPACK_COMP_CORE}) - - if(ENABLE_SSE42) - ie_sse42_optimization_flags(sse4_2_flags) -diff --git a/src/plugins/intel_gpu/src/kernel_selector/CMakeLists.txt b/src/plugins/intel_gpu/src/kernel_selector/CMakeLists.txt -index b76d8ee732..99ebf5331a 100644 ---- a/src/plugins/intel_gpu/src/kernel_selector/CMakeLists.txt -+++ b/src/plugins/intel_gpu/src/kernel_selector/CMakeLists.txt -@@ -61,7 +61,8 @@ endif() - target_include_directories(${TARGET_NAME} PUBLIC $ - $ - $ -- $) -+ $ -+ PRIVATE $) - - target_compile_options(${TARGET_NAME} PRIVATE - $<$:$,/Os,-Os>>) -@@ -70,7 +71,7 @@ if(COMMAND add_cpplint_target) - add_cpplint_target(${TARGET_NAME}_cpplint FOR_TARGETS ${TARGET_NAME}) - endif() - --target_link_libraries(${TARGET_NAME} PUBLIC OpenCL::OpenCL rapidjson inference_engine_plugin_api) -+target_link_libraries(${TARGET_NAME} PUBLIC OpenCL::OpenCL inference_engine_plugin_api) - - set_target_properties(${TARGET_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${ENABLE_LTO}) - -@@ -90,8 +91,16 @@ add_custom_command( - TARGET ${TARGET_NAME} POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/cache/cache.json ${TUNING_CACHE_PATH}/cache.json) - -+if(BUILD_SHARED_LIBS) -+ set(CACHE_JSON_INSTALL_DIR ${OV_CPACK_PLUGINSDIR}) -+ set(CACHE_JSON_COMPONENT gpu) -+else() -+ set(CACHE_JSON_INSTALL_DIR ${OV_CPACK_ARCHIVEDIR}) -+ set(CACHE_JSON_COMPONENT ${OV_CPACK_COMP_CORE}) -+endif() -+ - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cache/cache.json -- DESTINATION ${OV_CPACK_PLUGINSDIR} -- COMPONENT gpu) -+ DESTINATION ${CACHE_JSON_INSTALL_DIR} -+ COMPONENT ${CACHE_JSON_COMPONENT}) - --ov_install_static_lib(${TARGET_NAME} gpu) -+ov_install_static_lib(${TARGET_NAME} ${OV_CPACK_COMP_CORE}) -diff --git a/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.cpp b/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.cpp -index cfac486cdf..a5d0711f61 100644 ---- a/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.cpp -+++ b/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.cpp -@@ -3,18 +3,21 @@ - // - - #include "auto_tuner.h" -+ - #include - #include - #include - #include - #include --#include "istreamwrapper.h" --#include "stringbuffer.h" --#include "prettywriter.h" - #include - #include - #include - -+#include "rapidjson/istreamwrapper.h" -+#include "rapidjson/stringbuffer.h" -+#include "rapidjson/prettywriter.h" -+#include "rapidjson/document.h" -+ - #ifdef _WIN32 - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN -@@ -35,32 +38,37 @@ - - namespace kernel_selector { - -+class TuningCache::Impl { -+public: -+ rapidjson::Document cache; -+}; -+ - TuningCache::TuningCache(const std::string& cacheFilePath) -- : cache() { -+ : impl(new Impl()) { - // Read cache file - std::ifstream tuningFile(cacheFilePath); - - if (tuningFile && tuningFile.good()) { - std::stringstream buffer; - buffer << tuningFile.rdbuf(); -- cache.Parse(buffer.str().c_str()); -+ impl->cache.Parse(buffer.str().c_str()); - } else { - throw std::runtime_error("Tuning file: " + cacheFilePath + " could not be read! Must provide a valid cache file in USE_CACHE mode."); - } - -- if (cache.IsNull()) { -- cache.SetObject(); -- } else if (!cache.IsObject()) { -+ if (impl->cache.IsNull()) { -+ impl->cache.SetObject(); -+ } else if (!impl->cache.IsObject()) { - throw std::runtime_error("Tuning file: " + cacheFilePath + " has incorrect format."); - } - -- auto cacheObj = cache.GetObject(); -+ auto cacheObj = impl->cache.GetObject(); - - // Update to new format with version markers - if (!cacheObj.HasMember(version2Marker)) { -- auto newName = rapidjson::Value(version2Marker, cache.GetAllocator()); -+ auto newName = rapidjson::Value(version2Marker, impl->cache.GetAllocator()); - auto newObj = rapidjson::Value(rapidjson::Type::kObjectType); -- cacheObj.AddMember(newName, newObj, cache.GetAllocator()); -+ cacheObj.AddMember(newName, newObj, impl->cache.GetAllocator()); - } - - bool needsV1 = false; -@@ -73,9 +81,9 @@ TuningCache::TuningCache(const std::string& cacheFilePath) - - if (needsV1) { - if (!cacheObj.HasMember(version1Marker)) { -- auto newName = rapidjson::Value(version1Marker, cache.GetAllocator()); -+ auto newName = rapidjson::Value(version1Marker, impl->cache.GetAllocator()); - auto newObj = rapidjson::Value(rapidjson::Type::kObjectType); -- cacheObj.AddMember(newName, newObj, cache.GetAllocator()); -+ cacheObj.AddMember(newName, newObj, impl->cache.GetAllocator()); - } - - for (auto it = cacheObj.begin(); it != cacheObj.end();) { -@@ -86,7 +94,7 @@ TuningCache::TuningCache(const std::string& cacheFilePath) - auto newValue = rapidjson::Value(rapidjson::Type::kObjectType); - newName.Swap(member.name); - newValue.Swap(member.value); -- cache[version1Marker].AddMember(newName, newValue, cache.GetAllocator()); -+ impl->cache[version1Marker].AddMember(newName, newValue, impl->cache.GetAllocator()); - it = cacheObj.EraseMember(it); - } else { - it++; -@@ -96,11 +104,11 @@ TuningCache::TuningCache(const std::string& cacheFilePath) - } - - TuningCache::TuningCache() -- : cache() { -- cache.SetObject(); -- auto v2Name = rapidjson::Value(version2Marker, cache.GetAllocator()); -+ : impl(new Impl()) { -+ impl->cache.SetObject(); -+ auto v2Name = rapidjson::Value(version2Marker, impl->cache.GetAllocator()); - auto v2Obj = rapidjson::Value(rapidjson::Type::kObjectType); -- cache.AddMember(v2Name, v2Obj, cache.GetAllocator()); -+ impl->cache.AddMember(v2Name, v2Obj, impl->cache.GetAllocator()); - } - - TuningCache::Entry TuningCache::LoadKernel(const Params& params) { -@@ -129,8 +137,8 @@ TuningCache::Entry TuningCache::LoadKernel_v1(const Params& params, uint32_t com - auto hashStr = std::to_string(create_hash(params.to_string())); - auto computeUnitsStr = std::to_string(computeUnitsCount); - -- auto v1It = cache.FindMember(version1Marker); -- if (v1It == cache.MemberEnd()) -+ auto v1It = impl->cache.FindMember(version1Marker); -+ if (v1It == impl->cache.MemberEnd()) - return result; - - auto computeUnitsIt = v1It->value.FindMember(computeUnitsStr.c_str()); -@@ -152,8 +160,8 @@ TuningCache::Entry TuningCache::LoadKernel_v2(const Params& params, uint32_t com - auto paramStr = params.to_cache_string_v2(); - auto computeUnitsStr = std::to_string(computeUnitsCount); - -- auto v2It = cache.FindMember(version2Marker); -- if (v2It == cache.MemberEnd()) -+ auto v2It = impl->cache.FindMember(version2Marker); -+ if (v2It == impl->cache.MemberEnd()) - return result; - - auto computeUnitsIt = v2It->value.FindMember(computeUnitsStr.c_str()); -diff --git a/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.h b/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.h -index 1a875b7d4d..8a9da81354 100644 ---- a/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.h -+++ b/src/plugins/intel_gpu/src/kernel_selector/auto_tuner.h -@@ -8,12 +8,12 @@ - #include - #include - #include --#include "kernel_selector_common.h" --#include "kernel_selector_params.h" --#include "document.h" - #include - #include - -+#include "kernel_selector_common.h" -+#include "kernel_selector_params.h" -+ - namespace kernel_selector { - - class TuningCache { -@@ -42,7 +42,8 @@ private: - Entry LoadKernel_v1(const Params& params, uint32_t computeUnitsCount); - Entry LoadKernel_v2(const Params& params, uint32_t computeUnitsCount); - -- rapidjson::Document cache; -+ class Impl; -+ std::shared_ptr impl; - - static constexpr const char* version1Marker = "version_1"; - static constexpr const char* version2Marker = "version_2"; -diff --git a/src/plugins/intel_gpu/src/kernel_selector/jitter.cpp b/src/plugins/intel_gpu/src/kernel_selector/jitter.cpp -index fe6ffe8008..106560f5f1 100644 ---- a/src/plugins/intel_gpu/src/kernel_selector/jitter.cpp -+++ b/src/plugins/intel_gpu/src/kernel_selector/jitter.cpp -@@ -1540,11 +1540,11 @@ JitConstants MakeActivationJitConstants(std::vector(SCHAR_MIN))); -- nl_n = toCodeString(std::min(params[i].n, static_cast(SCHAR_MAX))); -+ nl_m = toCodeString(std::max(params[i].m, std::numeric_limits::min())); -+ nl_n = toCodeString(std::min(params[i].n, std::numeric_limits::max())); - } else if (out_dt == Datatype::UINT8) { - nl_m = toCodeString(std::max(params[i].m, 0.0f)); -- nl_n = toCodeString(std::min(params[i].n, static_cast(UCHAR_MAX))); -+ nl_n = toCodeString(std::min(params[i].n, std::numeric_limits::max())); - } - } - auto jitConstants = JitConstants{MakeJitConstant("NL_M" + activation_suffix, nl_m), -@@ -1949,11 +1949,11 @@ JitConstants FusedOpsCodeGenerator::MakeOpJitConstants(const FusedOpsConfigurati - - if (activation_p.function == ActivationFunction::CLAMP) { - if (out_type == Datatype::INT8) { -- nl_m = toCodeString(std::max(activation_p.m, static_cast(SCHAR_MIN))); -- nl_n = toCodeString(std::min(activation_p.n, static_cast(SCHAR_MAX))); -+ nl_m = toCodeString(std::max(activation_p.m, std::numeric_limits::min())); -+ nl_n = toCodeString(std::min(activation_p.n, std::numeric_limits::max())); - } else if (out_type == Datatype::UINT8) { - nl_m = toCodeString(std::max(activation_p.m, 0.0f)); -- nl_n = toCodeString(std::min(activation_p.n, static_cast(UCHAR_MAX))); -+ nl_n = toCodeString(std::min(activation_p.n, std::numeric_limits::max())); - } - } - -diff --git a/src/plugins/intel_gpu/src/kernel_selector/kernel_selector_params.h b/src/plugins/intel_gpu/src/kernel_selector/kernel_selector_params.h -index 5c71c907b7..76e84e558b 100644 ---- a/src/plugins/intel_gpu/src/kernel_selector/kernel_selector_params.h -+++ b/src/plugins/intel_gpu/src/kernel_selector/kernel_selector_params.h -@@ -10,7 +10,6 @@ - #include - #include "common_types.h" - #include "tensor_type.h" --#include "document.h" - #include - #include - #include -diff --git a/src/plugins/intel_gpu/src/runtime/CMakeLists.txt b/src/plugins/intel_gpu/src/runtime/CMakeLists.txt -index c442f65575..321fc2f1b2 100644 ---- a/src/plugins/intel_gpu/src/runtime/CMakeLists.txt -+++ b/src/plugins/intel_gpu/src/runtime/CMakeLists.txt -@@ -64,4 +64,4 @@ elseif((NOT ANDROID) AND (UNIX)) - target_link_libraries(${TARGET_NAME} PRIVATE pthread) - endif() - --ov_install_static_lib(${TARGET_NAME} gpu) -+ov_install_static_lib(${TARGET_NAME} ${OV_CPACK_COMP_CORE}) -diff --git a/src/plugins/intel_gpu/thirdparty/CMakeLists.txt b/src/plugins/intel_gpu/thirdparty/CMakeLists.txt -index c7c616d0df..b7cc810a75 100644 ---- a/src/plugins/intel_gpu/thirdparty/CMakeLists.txt -+++ b/src/plugins/intel_gpu/thirdparty/CMakeLists.txt -@@ -2,14 +2,6 @@ - # SPDX-License-Identifier: Apache-2.0 - # - --add_library(rapidjson INTERFACE) -- --set_target_properties(rapidjson PROPERTIES -- INTERFACE_INCLUDE_DIRECTORIES $ --) -- --ov_install_static_lib(rapidjson gpu) -- - # - # oneDNN for GPU plugin - # -@@ -17,11 +9,12 @@ ov_install_static_lib(rapidjson gpu) - if(ENABLE_ONEDNN_FOR_GPU) - function(build_onednn_gpu) - include(ExternalProject) -- set(ONEDNN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_build/") -- set(ONEDNN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_install/") -+ set(ONEDNN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_build") -+ set(ONEDNN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_install" CACHE PATH "Installation path for oneDNN GPU library") - set(ONEDNN_PREFIX_DIR "${CMAKE_CURRENT_BINARY_DIR}/onednn_gpu_root") - set(ONEDNN_ENABLED_PRIMITIVES "CONCAT;CONVOLUTION;DECONVOLUTION;INNER_PRODUCT;MATMUL;REORDER;POOLING;REDUCTION") - set(ONEDNN_ENABLED_ISA "XEHP;XEHPG;XEHPC") -+ set(DNNL_GPU_LIBRARY_NAME "openvino_onednn_gpu" CACHE STRING "Name of oneDNN library for Intel GPU Plugin") - - if(X86_64) - set(ONEDNN_TARGET_ARCH "X64" CACHE STRING "" FORCE) -@@ -87,18 +80,16 @@ if(ENABLE_ONEDNN_FOR_GPU) - list(APPEND cmake_extra_args "-DOpenCL_INCLUDE_DIR=${OpenCL_INCLUDE_DIR}") - endif() - -+ set(onednn_gpu_lib "${CMAKE_STATIC_LIBRARY_PREFIX}${DNNL_GPU_LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") -+ set(ONEDNN_GPU_LIB_PATH ${ONEDNN_INSTALL_DIR}/lib/${onednn_gpu_lib} CACHE FILEPATH "Path to oneDNN GPU library") -+ - ExternalProject_Add(onednn_gpu_build -+ # Directory Options: -+ PREFIX "${ONEDNN_PREFIX_DIR}" - SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onednn_gpu" - BINARY_DIR "${ONEDNN_BUILD_DIR}" - INSTALL_DIR "${ONEDNN_INSTALL_DIR}" -- PREFIX "${ONEDNN_PREFIX_DIR}" -- EXCLUDE_FROM_ALL ON -- CMAKE_CACHE_ARGS -- # The arguments below requires list to be passed as argument -- # which doesn't work properly when passed to CMAKE_ARGS. -- # Thus we pass it via CMAKE_CACHE_ARGS -- "-DDNNL_ENABLE_PRIMITIVE:STRING=${ONEDNN_ENABLED_PRIMITIVES}" -- "-DDNNL_ENABLE_PRIMITIVE_GPU_ISA:STRING=${ONEDNN_ENABLED_ISA}" -+ # Configure Step Options: - CMAKE_ARGS - ${cmake_extra_args} - "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" -@@ -112,9 +103,8 @@ if(ENABLE_ONEDNN_FOR_GPU) - "-DDNNL_TARGET_ARCH=${ONEDNN_TARGET_ARCH}" - "-DDNNL_CPU_RUNTIME=NONE" - "-DDNNL_GPU_RUNTIME=OCL" -- "-DDNNL_LIBRARY_NAME=openvino_onednn_gpu" -+ "-DDNNL_LIBRARY_NAME=${DNNL_GPU_LIBRARY_NAME}" - "-DCMAKE_INSTALL_PREFIX=${ONEDNN_INSTALL_DIR}" -- "-DCMAKE_INSTALL_LIBDIR=lib/$" - "-DDNNL_ENABLE_CONCURRENT_EXEC=ON" - "-DDNNL_ENABLE_PRIMITIVE_CACHE=OFF" - "-DDNNL_ENABLE_WORKLOAD=INFERENCE" -@@ -129,16 +119,38 @@ if(ENABLE_ONEDNN_FOR_GPU) - # specifically for Conan, because it overrides CMAKE_PREFIX_PATH and oneDNN's FindOpenCL.cmake is ignored - # Conan's FindOpenCL.cmake module does not set OpenCL_INCLUDE_DIRS, so we need to set it manually - "-DOpenCL_INCLUDE_DIRS=$" -+ # Conan calls cmake with default value for CMP0091, so we have to bypass it to oneDNN build -+ # because we bypass conan_toolchain.cmake via CMAKE_TOOLCHAIN_FILE -+ "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW" -+ CMAKE_CACHE_ARGS -+ # The arguments below requires list to be passed as argument -+ # which doesn't work properly when passed to CMAKE_ARGS. -+ # Thus we pass it via CMAKE_CACHE_ARGS -+ "-DDNNL_ENABLE_PRIMITIVE:STRING=${ONEDNN_ENABLED_PRIMITIVES}" -+ "-DDNNL_ENABLE_PRIMITIVE_GPU_ISA:STRING=${ONEDNN_ENABLED_ISA}" -+ # Build Step Options: -+ BUILD_BYPRODUCTS ${ONEDNN_GPU_LIB_PATH} -+ # Target Options: -+ EXCLUDE_FROM_ALL ON - ) -+ - add_library(onednn_gpu_tgt INTERFACE) - set_target_properties(onednn_gpu_tgt PROPERTIES -- INTERFACE_LINK_DIRECTORIES "${ONEDNN_INSTALL_DIR}/lib/$" -- INTERFACE_LINK_LIBRARIES "openvino_onednn_gpu" -- INTERFACE_INCLUDE_DIRECTORIES "${ONEDNN_INSTALL_DIR}/include" -+ INTERFACE_LINK_LIBRARIES $ -+ INTERFACE_INCLUDE_DIRECTORIES $ - INTERFACE_COMPILE_DEFINITIONS ENABLE_ONEDNN_FOR_GPU - ) - add_dependencies(onednn_gpu_tgt onednn_gpu_build) -- # TODO: install onednn_gpu in static builds -+ -+ if(NOT BUILD_SHARED_LIBS) -+ ov_install_static_lib(onednn_gpu_tgt ${OV_CPACK_COMP_CORE}) -+ -+ # we need to install library explicitly and set_target_properties in OpenVINOConfig.cmake for 'onednn_gpu_tgt' -+ # to point to installation location of this file -+ install(FILES "${ONEDNN_GPU_LIB_PATH}" -+ DESTINATION ${OV_CPACK_ARCHIVEDIR} -+ COMPONENT ${OV_CPACK_COMP_CORE}) -+ endif() - endfunction() - build_onednn_gpu() - endif() -diff --git a/src/plugins/intel_gpu/thirdparty/cmake/rapidjson.cmake b/src/plugins/intel_gpu/thirdparty/cmake/rapidjson.cmake -new file mode 100644 -index 0000000000..655224dbc1 ---- /dev/null -+++ b/src/plugins/intel_gpu/thirdparty/cmake/rapidjson.cmake -@@ -0,0 +1,22 @@ -+# Copyright (C) 2018-2023 Intel Corporation -+# SPDX-License-Identifier: Apache-2.0 -+# -+ -+find_package(RapidJSON QUIET) -+ -+if(NOT TARGET rapidjson) -+ # sometimes RapidJSONConfig.cmake defines only RAPIDJSON_INCLUDE_DIRS -+ add_library(rapidjson INTERFACE) -+ -+ if(RapidJSON_FOUND) -+ if(TARGET RapidJSON) -+ target_link_libraries(rapidjson INTERFACE RapidJSON) -+ elseif(DEFINED RAPIDJSON_INCLUDE_DIRS) -+ target_include_directories(rapidjson INTERFACE $) -+ else() -+ message(FATAL_ERROR "RapidJSON does not define RAPIDJSON_INCLUDE_DIRS nor RapidJSON / rapidjson targets") -+ endif() -+ else() -+ target_include_directories(rapidjson INTERFACE $) -+ endif() -+endif() -diff --git a/src/plugins/template/backend/CMakeLists.txt b/src/plugins/template/backend/CMakeLists.txt -index 7530dd1688..a451fea900 100644 ---- a/src/plugins/template/backend/CMakeLists.txt -+++ b/src/plugins/template/backend/CMakeLists.txt -@@ -52,4 +52,4 @@ openvino_developer_export_targets(COMPONENT core TARGETS interpreter_backend) - - # install - --ov_install_static_lib(interpreter_backend template) -+ov_install_static_lib(interpreter_backend ${OV_CPACK_COMP_CORE}) -diff --git a/src/plugins/template/src/CMakeLists.txt b/src/plugins/template/src/CMakeLists.txt -index 2409bb10e0..f382f90d11 100644 ---- a/src/plugins/template/src/CMakeLists.txt -+++ b/src/plugins/template/src/CMakeLists.txt -@@ -28,7 +28,7 @@ target_include_directories(${TARGET_NAME} PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}" - "${TEMPLATE_PLUGIN_SOURCE_DIR}/include") - --# link common Inference Engine libraries -+# link common OpenVINO Runtime libraries - target_link_libraries(${TARGET_NAME} PRIVATE - openvino::interpreter_backend - openvino::reference) -@@ -42,4 +42,4 @@ endif() - # [cmake:plugin] - - install(TARGETS ${TARGET_NAME} -- LIBRARY DESTINATION tests COMPONENT tests EXCLUDE_FROM_ALL) -+ LIBRARY DESTINATION tests COMPONENT tests EXCLUDE_FROM_ALL) -diff --git a/thirdparty/ocl/CMakeLists.txt b/thirdparty/ocl/CMakeLists.txt -index f31519467f..0ebe3fd6d1 100644 ---- a/thirdparty/ocl/CMakeLists.txt -+++ b/thirdparty/ocl/CMakeLists.txt -@@ -58,4 +58,4 @@ set(opencl_root_hints "${OpenCL_INCLUDE_DIR}" PARENT_SCOPE) - - # installation - --ov_install_static_lib(OpenCL gpu) -+ov_install_static_lib(OpenCL ${OV_CPACK_COMP_CORE}) diff --git a/recipes/openvino/all/patches/2023.1.0/0004-fixed-gpu-plugin-with-clang.patch b/recipes/openvino/all/patches/2023.1.0/0004-fixed-gpu-plugin-with-clang.patch deleted file mode 100644 index 7659f10e22501b..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0004-fixed-gpu-plugin-with-clang.patch +++ /dev/null @@ -1,2836 +0,0 @@ -diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/binary_buffer.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/binary_buffer.hpp -index 9386e52400..05972d7a97 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/binary_buffer.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/binary_buffer.hpp -@@ -104,12 +104,10 @@ public: - - #define ASSIGN_TYPE_NAME(cls_name) \ - namespace cldnn { \ -- const std::string cls_name::type_for_serialization = #cls_name; \ - } - - #define BIND_BINARY_BUFFER_WITH_TYPE(cls_name) \ - namespace cldnn { \ -- const std::string cls_name::type_for_serialization = #cls_name; \ - BIND_TO_BUFFER(BinaryOutputBuffer, cls_name) \ - BIND_TO_BUFFER(BinaryInputBuffer, cls_name) \ - } -diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/bind.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/bind.hpp -index 85ed3fa803..e2a673f0ba 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/bind.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/bind.hpp -@@ -11,9 +11,12 @@ - #include "buffer.hpp" - #include "static_instance.hpp" - --#define DECLARE_OBJECT_TYPE_SERIALIZATION \ -- static const std::string type_for_serialization; \ -- std::string get_type() const override { return type_for_serialization; } -+#define DECLARE_OBJECT_TYPE_SERIALIZATION(cls_name) \ -+ static const std::string& get_type_info_s() { \ -+ static const std::string type_name = #cls_name; \ -+ return type_name; \ -+ } \ -+ const std::string& get_type_info() const override { return get_type_info_s(); } - - #define BIND_TO_BUFFER(buffer, type) \ - template <> \ -@@ -101,7 +104,7 @@ public: - - private: - buffer_binder() { -- saver_storage::instance().set_save_function({T::type_for_serialization, save}); -+ saver_storage::instance().set_save_function({T::get_type_info_s(), save}); - } - - buffer_binder(const buffer_binder&) = delete; -@@ -130,7 +133,7 @@ public: - private: - buffer_binder() { - def::instance().set_load_function( -- {T::type_for_serialization, [](BufferType& buffer, std::unique_ptr>& result_ptr) { -+ {T::get_type_info_s(), [](BufferType& buffer, std::unique_ptr>& result_ptr) { - std::unique_ptr derived_ptr = std::unique_ptr(new T()); - derived_ptr->load(buffer); - result_ptr.reset(derived_ptr.release()); -@@ -153,7 +156,7 @@ public: - private: - buffer_binder() { - dif::instance().set_load_function( -- {T::type_for_serialization, [](BufferType& buffer, std::unique_ptr>& result_ptr, engine& engine) { -+ {T::get_type_info_s(), [](BufferType& buffer, std::unique_ptr>& result_ptr, engine& engine) { - std::unique_ptr derived_ptr = std::unique_ptr(new T(engine)); - derived_ptr->load(buffer); - result_ptr.reset(derived_ptr.release()); -diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/polymorphic_serializer.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/polymorphic_serializer.hpp -index 023045b9bd..1792f5489c 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/polymorphic_serializer.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/polymorphic_serializer.hpp -@@ -18,7 +18,7 @@ template - class Serializer, typename std::enable_if, BufferType>::value>::type> { - public: - static void save(BufferType& buffer, const std::unique_ptr& ptr) { -- const auto& type = ptr->get_type(); -+ const auto& type = ptr->get_type_info(); - buffer << type; - const auto save_func = saver_storage::instance().get_save_function(type); - save_func(buffer, ptr.get()); -@@ -51,7 +51,7 @@ template - class Serializer, typename std::enable_if, BufferType>::value>::type> { - public: - static void save(BufferType& buffer, const std::shared_ptr& ptr) { -- const std::string& type = ptr->get_type(); -+ const std::string& type = ptr->get_type_info(); - buffer << type; - if (type.compare("NONE") != 0) { - const auto save_func = saver_storage::instance().get_save_function(type); -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/activation.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/activation.hpp -index 09a3f96a98..771f1b9191 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/activation.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/activation.hpp -@@ -82,8 +82,6 @@ struct activation : public primitive_base { - activation_function(activation_func::none), - additional_params({0.f, 0.f}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs Relu primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/adaptive_pooling.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/adaptive_pooling.hpp -index e54b055312..f80d7b3c62 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/adaptive_pooling.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/adaptive_pooling.hpp -@@ -20,8 +20,6 @@ struct adaptive_pooling : public primitive_base { - mode{adaptive_pooling_mode::average}, - output_size{} {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs AdaptiveAvgPooling primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/arg_max_min.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/arg_max_min.hpp -index 16ca38e746..418f8df90d 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/arg_max_min.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/arg_max_min.hpp -@@ -27,8 +27,6 @@ struct arg_max_min : public primitive_base { - values_first(false), - stable(false) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs arg_max_min primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/assign.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/assign.hpp -index 1c4021a77d..4134614504 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/assign.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/assign.hpp -@@ -17,8 +17,6 @@ struct assign : public primitive_base { - - assign() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs Assign primitive. - /// @param id This primitive id - /// @param inputs Input parameters ids -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/batch_to_space.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/batch_to_space.hpp -index fab49940fb..246853a5f3 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/batch_to_space.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/batch_to_space.hpp -@@ -42,8 +42,6 @@ struct batch_to_space : public primitive_base { - - batch_to_space() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs batch_to_space primitive. - /// @param id This primitive id. - /// @param input Input data primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/binary_convolution.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/binary_convolution.hpp -index 268f78e73a..5ba028bda7 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/binary_convolution.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/binary_convolution.hpp -@@ -16,8 +16,6 @@ struct binary_convolution : public primitive_base { - - binary_convolution() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs binary_convolution primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/border.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/border.hpp -index def9b956ff..81ad97a196 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/border.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/border.hpp -@@ -26,8 +26,6 @@ struct border : public primitive_base { - - border() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief whether the input is const or not - enum PAD_NON_CONST_INPUT { - BEGIN = 0x1, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/broadcast.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/broadcast.hpp -index 3b210c7b94..d3b17919a4 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/broadcast.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/broadcast.hpp -@@ -56,8 +56,6 @@ struct broadcast : public primitive_base { - - broadcast() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs broadcast primitive / layer. - /// - /// @param id An identifier of new primitive. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/bucketize.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/bucketize.hpp -index 11e7f8752e..dd5b8f3d93 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/bucketize.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/bucketize.hpp -@@ -13,8 +13,6 @@ struct bucketize : primitive_base { - - bucketize() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs bucketize primitive. - /// @param id This primitive id. - /// @param inputs Input primitives ids. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/concatenation.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/concatenation.hpp -index 184dbf9ceb..5f187c7422 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/concatenation.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/concatenation.hpp -@@ -35,8 +35,6 @@ struct concatenation : public primitive_base { - - concatenation() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @li Constructs concatenation primitive. - /// @param id This primitive id. - /// @param input Vector of input primitives ids. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/convert_color.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/convert_color.hpp -index f1cd6e1934..f71e73310a 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/convert_color.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/convert_color.hpp -@@ -14,8 +14,6 @@ struct convert_color : public primitive_base { - - convert_color() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - enum color_format : uint32_t { - RGB, ///< RGB color format - BGR, ///< BGR color format, default in OpenVINO -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/convolution.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/convolution.hpp -index 01291816b1..0a15e6a146 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/convolution.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/convolution.hpp -@@ -15,8 +15,6 @@ struct convolution : public primitive_base { - - convolution() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs convolution primitive - /// @param id This primitive id. - /// @param input Input primitive id. -@@ -313,8 +311,6 @@ struct deformable_interp : public primitive_base { - - deformable_interp() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - deformable_interp(const primitive_id& id, - const std::vector& inputs, - uint32_t groups, -@@ -430,8 +426,6 @@ struct deformable_conv : public primitive_base { - - deformable_conv() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - deformable_conv(const primitive_id& id, - const input_info& input, - const std::vector& weights, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/crop.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/crop.hpp -index 5c944b75d1..b8935695b2 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/crop.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/crop.hpp -@@ -46,8 +46,6 @@ struct crop : public primitive_base { - - crop() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs crop primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_greedy_decoder.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_greedy_decoder.hpp -index 9c911243d5..2cf19ca58c 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_greedy_decoder.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_greedy_decoder.hpp -@@ -13,8 +13,6 @@ struct ctc_greedy_decoder : public primitive_base { - - ctc_greedy_decoder() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs ctc_greedy_decoder primitive. - /// @param id This primitive id. - /// @param input Input primitive id (input, sequence_indicators, second_output(optional)). -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_loss.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_loss.hpp -index 0d63027cf7..55cc934195 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_loss.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/ctc_loss.hpp -@@ -15,8 +15,6 @@ struct ctc_loss : primitive_base { - - ctc_loss() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs ctc_loss primitive. - /// @param id This primitive id. - /// @param inputs Input primitives ids. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/cum_sum.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/cum_sum.hpp -index 4a038714d7..11bd653d4c 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/cum_sum.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/cum_sum.hpp -@@ -6,15 +6,11 @@ - #include "primitive.hpp" - - namespace cldnn { -- -- - struct cum_sum : public primitive_base { - CLDNN_DECLARE_PRIMITIVE(cum_sum) - - cum_sum() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs cum_sum primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/custom_gpu_primitive.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/custom_gpu_primitive.hpp -index a938e2c0ff..62dafc4ce4 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/custom_gpu_primitive.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/custom_gpu_primitive.hpp -@@ -18,8 +18,6 @@ struct custom_gpu_primitive : public primitive_base { - - custom_gpu_primitive() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Custom primitive kernel argument type - enum arg_type { - arg_input, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/data.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/data.hpp -index 8a89005102..177fbf99b7 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/data.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/data.hpp -@@ -17,8 +17,6 @@ struct data : public primitive_base { - - data() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs data primitive. - /// @param id This primitive id. - /// @param mem @ref memory object which contains data. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/deconvolution.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/deconvolution.hpp -index b149539bb6..5c507a2360 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/deconvolution.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/deconvolution.hpp -@@ -20,8 +20,6 @@ struct deconvolution : public primitive_base { - - deconvolution() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs deconvolution primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/depth_to_space.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/depth_to_space.hpp -index 6d1c430d91..577be63765 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/depth_to_space.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/depth_to_space.hpp -@@ -22,8 +22,6 @@ struct depth_to_space : public primitive_base { - - depth_to_space() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs depth_to_space primitive. - /// @param id This primitive id. - /// @param input Input dictionary primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/detection_output.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/detection_output.hpp -index 7437106428..3c39a83963 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/detection_output.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/detection_output.hpp -@@ -42,8 +42,6 @@ struct detection_output : public primitive_base { - clip_after_nms(false), - objectness_score(0.0f) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs detection output primitive. - /// @param id This primitive id. - /// @param inputs Inputs for primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/dft.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/dft.hpp -index 45042ad94b..329794e088 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/dft.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/dft.hpp -@@ -29,8 +29,6 @@ struct dft : public primitive_base { - - dft() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs DFT primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/eltwise.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/eltwise.hpp -index de1e4138c3..b4b9e8932d 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/eltwise.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/eltwise.hpp -@@ -71,8 +71,6 @@ struct eltwise : public primitive_base { - - eltwise() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs eltwise primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/embedding_bag.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/embedding_bag.hpp -index c749c3b5e2..29b3259b50 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/embedding_bag.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/embedding_bag.hpp -@@ -14,8 +14,6 @@ struct embedding_bag : public primitive_base { - - embedding_bag() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Select type of embedding_bag operation - enum embedding_bag_type { - packed_sum, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_detection_output.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_detection_output.hpp -index cb47ec86f5..f87b161e48 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_detection_output.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_detection_output.hpp -@@ -16,8 +16,6 @@ struct experimental_detectron_detection_output : public primitive_base { -@@ -17,8 +15,6 @@ struct experimental_detectron_prior_grid_generator - - experimental_detectron_prior_grid_generator() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - experimental_detectron_prior_grid_generator(const primitive_id& id, - const std::vector& inputs, - bool flatten, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_roi_feature_extractor.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_roi_feature_extractor.hpp -index a9b27fd16f..3a1e229171 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_roi_feature_extractor.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/experimental_detectron_roi_feature_extractor.hpp -@@ -14,8 +14,6 @@ struct experimental_detectron_roi_feature_extractor : public primitive_base { -@@ -19,8 +17,6 @@ struct experimental_detectron_topk_rois : public primitive_base { - - extract_image_patches() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs select primitive. - /// @param id This primitive id. - /// @param input Input primitive id containing input 4-D tensor. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/eye.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/eye.hpp -index 4137aaa2ec..9cc2c9e083 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/eye.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/eye.hpp -@@ -14,8 +14,6 @@ struct eye : public primitive_base { - - eye() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs eye primitive. - /// @param id This primitive id. - /// @param inputs List of primitive ids. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/fully_connected.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/fully_connected.hpp -index d71afd76f1..ba05829539 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/fully_connected.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/fully_connected.hpp -@@ -35,8 +35,6 @@ struct fully_connected : public primitive_base { - - fully_connected() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs fully connected layer. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather.hpp -index f754d47667..2a7dad7fe4 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather.hpp -@@ -16,8 +16,6 @@ struct gather : public primitive_base { - - gather() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gather primitive. - /// @param id This primitive id. - /// @param dict Input dictionary primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_elements.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_elements.hpp -index 0287a76877..455a40a9ea 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_elements.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_elements.hpp -@@ -14,8 +14,6 @@ struct gather_elements : public primitive_base { - - gather_elements() : primitive_base("", {}), output_format({}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gather_elements primitive. - /// @param id This primitive id. - /// @param data Input data primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_nd.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_nd.hpp -index 932fe0b167..a2c26b0545 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_nd.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_nd.hpp -@@ -14,8 +14,6 @@ struct gather_nd : public primitive_base { - - gather_nd() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gather_nd primitive. - /// - /// @param id This primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_tree.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_tree.hpp -index 5ec3339801..082b4113ab 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_tree.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/gather_tree.hpp -@@ -15,8 +15,6 @@ struct gather_tree : public primitive_base { - - gather_tree() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gather tree primitive / layer. - /// - /// @param id An identifier of new primitive. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/gemm.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/gemm.hpp -index 104b92571c..cef11bbb0b 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/gemm.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/gemm.hpp -@@ -27,8 +27,6 @@ struct gemm : public primitive_base { - - gemm() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gemm layer. - /// @brief Primitive id containing first matrix - /// @brief Primitive id containing second matrix -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/generate_proposals.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/generate_proposals.hpp -index ab57e07d0d..3524c104fd 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/generate_proposals.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/generate_proposals.hpp -@@ -15,8 +15,6 @@ struct generate_proposals - - generate_proposals() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs generate_proposals primitive - /// @param id This primitive id - /// @param input_im_info image size info -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/grid_sample.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/grid_sample.hpp -index 700140c9d2..20e308e4aa 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/grid_sample.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/grid_sample.hpp -@@ -10,8 +10,6 @@ - #include "primitive.hpp" - - namespace cldnn { -- -- - using GridSampleOp = ov::op::v9::GridSample; - - /// @brief GridSample-9 primitive. -@@ -20,8 +18,6 @@ struct grid_sample : primitive_base { - - grid_sample() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs grid_sample primitive. - /// @param id This primitive id. - /// @param inputs Input primitives ids. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/grn.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/grn.hpp -index cda1ebe160..3b629bad91 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/grn.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/grn.hpp -@@ -13,8 +13,6 @@ struct grn : public primitive_base { - - grn() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs grn primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/input_layout.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/input_layout.hpp -index c13e89a3a5..5cbba06ca4 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/input_layout.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/input_layout.hpp -@@ -20,8 +20,6 @@ struct input_layout : public primitive_base { - - input_layout() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs input layout primitive. - /// @param id This primitive id. - /// @param layout Defines layout for the data will be passed to network. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/loop.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/loop.hpp -index 49af132862..c27a88e197 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/loop.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/loop.hpp -@@ -55,8 +55,6 @@ struct loop : public primitive_base { - loop() : primitive_base("", {}), - max_iteration(0) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - struct io_primitive_map { - /// @brief Constructs a mapping from external input/output primitive to input/output primitive in body topology - /// -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/lrn.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/lrn.hpp -index 28bcf69147..f8cc1672e7 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/lrn.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/lrn.hpp -@@ -6,8 +6,6 @@ - #include "primitive.hpp" - - namespace cldnn { -- -- - typedef enum { /*:int32_t*/ - lrn_norm_region_across_channel, - lrn_norm_region_within_channel -@@ -29,8 +27,6 @@ struct lrn : public primitive_base { - - lrn() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs LRN primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm.hpp -index 7c601158d8..71922acd21 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm.hpp -@@ -53,8 +53,6 @@ struct lstm : public primitive_base { - - lstm() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs lstm layer. - /// @param id This primitive id. - /// @param input Vector of primitive id. -@@ -230,8 +228,6 @@ struct lstm_gemm : public primitive_base { - lstm_gemm() : primitive_base("", {}), - direction(0) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs lstm layer. - /// @param id This primitive id. - /// @param input input primitive id. -@@ -319,8 +315,6 @@ struct lstm_elt : public primitive_base { - - lstm_elt() : primitive_base("", {}), clip(0), input_forget(0), offset_order(lstm_weights_order::iofz), direction(0) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - using vec_activation = std::vector; - using vec_activation_param = std::vector; - -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic.hpp -index fd7e7c4a26..d459754ebc 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic.hpp -@@ -22,8 +22,6 @@ struct lstm_dynamic : public primitive_base { - - lstm_dynamic() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs lstm_dynamic layer. - /// @param id This primitive id. - /// @param input Primitive id of input layer. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_input.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_input.hpp -index bf0ddb2d43..6a8e90d9a4 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_input.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_input.hpp -@@ -22,8 +22,6 @@ struct lstm_dynamic_input : public primitive_base { - - lstm_dynamic_input() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs lstm_dynamic layer. - /// @param id This primitive id. - /// @param input Primitive id of input layer. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_timeloop.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_timeloop.hpp -index e5b5ea7661..ef184707f9 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_timeloop.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/lstm_dynamic_timeloop.hpp -@@ -23,8 +23,6 @@ struct lstm_dynamic_timeloop - - lstm_dynamic_timeloop() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs lstm_dynamic layer. - /// @param id This primitive id. - /// @param input Primitive id of input layer. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/matrix_nms.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/matrix_nms.hpp -index 72c95cae70..d4efea1d59 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/matrix_nms.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/matrix_nms.hpp -@@ -16,8 +16,6 @@ struct matrix_nms : public primitive_base { - - matrix_nms() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - enum decay_function { gaussian, linear }; - - enum sort_result_type { -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/multiclass_nms.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/multiclass_nms.hpp -index 5218488f1b..92ea0d371b 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/multiclass_nms.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/multiclass_nms.hpp -@@ -18,8 +18,6 @@ struct multiclass_nms : public primitive_base { - - multiclass_nms() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - enum class sort_result_type : int32_t { - classid, // sort selected boxes by class id (ascending) in each batch element - score, // sort selected boxes by score (descending) in each batch element -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/mutable_data.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/mutable_data.hpp -index 54c46bf785..105711b58d 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/mutable_data.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/mutable_data.hpp -@@ -18,8 +18,6 @@ struct mutable_data : public primitive_base { - - mutable_data() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Enum type to specify function for data filling. - enum filler_type { no_fill, zero, one, xavier }; - -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/mvn.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/mvn.hpp -index 72daa005b6..72e5cd67d9 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/mvn.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/mvn.hpp -@@ -14,8 +14,6 @@ struct mvn : public primitive_base { - - mvn() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs mvn primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/non_max_suppression.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/non_max_suppression.hpp -index b7aafffb55..b9614cd472 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/non_max_suppression.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/non_max_suppression.hpp -@@ -22,8 +22,6 @@ struct non_max_suppression : public primitive_base { - center_point_box(false), - sort_result_descending(false) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Creates non max suppression primitive. - /// @param id This primitive id. - /// @param boxes_positions Id of primitive with bounding boxes. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/non_zero.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/non_zero.hpp -index d243058bad..0fa4b35ff7 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/non_zero.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/non_zero.hpp -@@ -13,8 +13,6 @@ struct count_nonzero : public primitive_base { - - count_nonzero() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs count_nonzero primitive. - /// @param id This primitive id. - /// @param data Input data primitive id. -@@ -33,8 +31,6 @@ struct gather_nonzero : public primitive_base { - - gather_nonzero() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs gather_nonzero primitive. - /// @param id This primitive id. - /// @param data Input data primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/normalize.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/normalize.hpp -index b17c659d76..0f25272bce 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/normalize.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/normalize.hpp -@@ -29,8 +29,6 @@ struct normalize : public primitive_base { - - normalize() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs normalize primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/one_hot.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/one_hot.hpp -index 3a2958a0fb..b94e069fc2 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/one_hot.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/one_hot.hpp -@@ -35,8 +35,6 @@ struct one_hot : public primitive_base { - - one_hot() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs one-hot primitive layer. - /// @param id An identifier of new primitive. - /// @param input An identifier of primitive which is an input for newly created one-hot primitive. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/permute.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/permute.hpp -index 587427e6a8..91bc12df87 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/permute.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/permute.hpp -@@ -21,8 +21,6 @@ struct permute : public primitive_base { - - permute() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs permute primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/pooling.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/pooling.hpp -index 0db15d2278..df49ba46a9 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/pooling.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/pooling.hpp -@@ -34,8 +34,6 @@ struct pooling : public primitive_base { - - pooling() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs pooling primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/primitive.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/primitive.hpp -index f68aa5f6c3..0bbf589b0d 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/primitive.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/primitive.hpp -@@ -203,7 +203,7 @@ public: - - size_t num_outputs; - -- virtual std::string get_type() const { return "NONE"; } -+ virtual const std::string& get_type_info() const = 0; - virtual void save(BinaryOutputBuffer& ob) const { - ob << type_string(); - ob << id; -@@ -313,6 +313,7 @@ struct primitive_info { - } - - #define CLDNN_DECLARE_PRIMITIVE(PType) \ -+ DECLARE_OBJECT_TYPE_SERIALIZATION(PType) \ - CLDNN_DEFINE_TYPE_ID(PType) \ - CLDNN_DEFINE_TYPE_STRING(PType) - -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/prior_box.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/prior_box.hpp -index 959e6b14f0..3f78605f49 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/prior_box.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/prior_box.hpp -@@ -23,8 +23,6 @@ struct prior_box : public primitive_base { - - prior_box() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - using PriorBoxV0Op = ov::op::v0::PriorBox; - using PriorBoxV8Op = ov::op::v8::PriorBox; - using PriorBoxClusteredOp = ov::op::v0::PriorBoxClustered; -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/proposal.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/proposal.hpp -index 1278d4ff6f..a1e6768276 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/proposal.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/proposal.hpp -@@ -10,8 +10,6 @@ - #include "intel_gpu/graph/serialization/vector_serializer.hpp" - - namespace cldnn { -- -- - #define CLDNN_ROI_VECTOR_SIZE 5 - - struct proposal : public primitive_base { -@@ -37,8 +35,6 @@ struct proposal : public primitive_base { - shift_anchors(false), - normalize(false) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - proposal(const primitive_id& id, - const input_info& cls_scores, - const input_info& bbox_pred, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/pyramid_roi_align.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/pyramid_roi_align.hpp -index 6d9842227a..123faf83f2 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/pyramid_roi_align.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/pyramid_roi_align.hpp -@@ -26,8 +26,6 @@ struct pyramid_roi_align : public primitive_base { - - pyramid_roi_align() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @param id This primitive id. - /// @param rois Input RoI boxes as tuple [x1, y1, x2, y2] describing two opposite corners of the region. - /// @param P2 First level of the image pyramid. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/quantize.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/quantize.hpp -index bb5de80742..a2bb5ae3cf 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/quantize.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/quantize.hpp -@@ -38,8 +38,6 @@ struct quantize : public primitive_base { - - quantize() : primitive_base("", {}), levels(0) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief levels The number of quantization levels. - int levels; - -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/random_uniform.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/random_uniform.hpp -index 02c86cb80d..598d8171b5 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/random_uniform.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/random_uniform.hpp -@@ -10,8 +10,6 @@ - - namespace cldnn { - -- -- - /// @brief RandomUniform-8 primitive - /// @details - struct random_uniform : public primitive_base { -@@ -22,8 +20,6 @@ struct random_uniform : public primitive_base { - op_seed(0), - output_shape{} {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /** - * Construct Random Uniform privitive. - * @param id primitive id -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/range.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/range.hpp -index 005d74a6c8..3d68fd2815 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/range.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/range.hpp -@@ -12,8 +12,6 @@ struct range: public primitive_base { - - range() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs range primitive. - /// @param id This primitive id. - /// @param inputs Input primitive id vector. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/read_value.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/read_value.hpp -index 9523b416cd..095c845d07 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/read_value.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/read_value.hpp -@@ -17,8 +17,6 @@ struct read_value : public primitive_base { - - read_value() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs ReadValue primitive. - /// @param id This primitive id - /// @param inputs Input parameters ids -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reduce.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reduce.hpp -index 7af0ad1dd9..c1f687e48a 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reduce.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reduce.hpp -@@ -44,8 +44,6 @@ struct reduce : public primitive_base { - - reduce() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs reduce primitive - /// @param id This primitive id - /// @param input Input primitive id -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/region_yolo.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/region_yolo.hpp -index 7efddc3fb4..d9040d1dc2 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/region_yolo.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/region_yolo.hpp -@@ -16,8 +16,6 @@ struct region_yolo : public primitive_base { - - region_yolo() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs region_yolo primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reorder.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reorder.hpp -index 1c59eebe65..7b2ada5d77 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reorder.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reorder.hpp -@@ -69,8 +69,6 @@ struct reorder : public primitive_base { - output_format(format::any), - mean_mode(reorder_mean_mode::subtract) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief reorder memory types - enum class memory_type { - buffer, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reorg_yolo.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reorg_yolo.hpp -index b5d76e9353..96eff0012e 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reorg_yolo.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reorg_yolo.hpp -@@ -16,8 +16,6 @@ struct reorg_yolo : public primitive_base { - - reorg_yolo() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs region_yolo primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/resample.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/resample.hpp -index b95ce3c5e0..59f58c986b 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/resample.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/resample.hpp -@@ -17,8 +17,6 @@ struct resample : public primitive_base { - - resample() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - using InterpolateOp = ov::op::util::InterpolateBase; - - /// @brief Constructs Resample primitive. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reshape.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reshape.hpp -index 0f9869a2f7..00e8d9a093 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reshape.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reshape.hpp -@@ -17,8 +17,6 @@ struct reshape : public primitive_base { - - reshape() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - enum reshape_mode : uint32_t { - base, - squeeze, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse.hpp -index 0ecb598550..70864a9f1e 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse.hpp -@@ -15,8 +15,6 @@ struct reverse : public primitive_base { - - reverse() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs reverse primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse_sequence.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse_sequence.hpp -index 8058bd3a45..714e0f4a49 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse_sequence.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/reverse_sequence.hpp -@@ -15,8 +15,6 @@ struct reverse_sequence : public primitive_base { - - reverse_sequence() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs reverse_sequence primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_align.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_align.hpp -index 14b031d87f..0813c960f0 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_align.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_align.hpp -@@ -15,8 +15,6 @@ struct roi_align : public primitive_base { - - roi_align() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Pooling mode for the @ref roi_align - enum PoolingMode { max, avg }; - -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_pooling.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_pooling.hpp -index ef7fc25664..2dd22e52d3 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_pooling.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/roi_pooling.hpp -@@ -8,8 +8,6 @@ - #include - - namespace cldnn { -- -- - struct roi_pooling : public primitive_base { - CLDNN_DECLARE_PRIMITIVE(roi_pooling) - -@@ -27,8 +25,6 @@ struct roi_pooling : public primitive_base { - spatial_bins_x(1), - spatial_bins_y(1) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - roi_pooling(const primitive_id& id, - const input_info& input_data, - const input_info& input_rois, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/roll.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/roll.hpp -index 3ae8fc634e..3db154bf47 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/roll.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/roll.hpp -@@ -15,8 +15,6 @@ struct roll : primitive_base { - - roll() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs roll primitive. - /// @param id This primitive id. - /// @param input Input primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_elements_update.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_elements_update.hpp -index fa2cd6e07b..4b823a165c 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_elements_update.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_elements_update.hpp -@@ -14,8 +14,6 @@ struct scatter_elements_update : public primitive_base - - scatter_elements_update() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs scatter_elements_update primitive. - /// @param id This primitive id. - /// @param dict Input data primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_nd_update.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_nd_update.hpp -index f21691c3c7..1cc8746e9e 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_nd_update.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_nd_update.hpp -@@ -14,8 +14,6 @@ struct scatter_nd_update : public primitive_base { - - scatter_nd_update() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - /// @brief Constructs scatter_nd_update primitive. - /// @param id This primitive id. - /// @param dict Input data primitive id. -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_update.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_update.hpp -index 9563fe079e..17c09a8d8e 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_update.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/scatter_update.hpp -@@ -14,8 +14,6 @@ struct scatter_update : public primitive_base { - - scatter_update() : primitive_base("", {}) {} - -- DECLARE_OBJECT_TYPE_SERIALIZATION -- - enum scatter_update_axis { - along_b, - along_f, -diff --git a/src/plugins/intel_gpu/include/intel_gpu/primitives/select.hpp b/src/plugins/intel_gpu/include/intel_gpu/primitives/select.hpp -index 310c5ff2cb..0959fa2709 100644 ---- a/src/plugins/intel_gpu/include/intel_gpu/primitives/select.hpp -+++ b/src/plugins/intel_gpu/include/intel_gpu/primitives/select.hpp -@@ -22,8 +22,6 @@ struct select : public primitive_base { - using kernel_selector_t = kernel_selector::select_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::select_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/shape_of.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/shape_of.cpp -index 02efeee00f..b2efd25f67 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/shape_of.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/shape_of.cpp -@@ -17,7 +17,7 @@ struct shape_of_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::shape_of_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::shape_of_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/shuffle_channels.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/shuffle_channels.cpp -index 57ac2437f4..e40b1b99b8 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/shuffle_channels.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/shuffle_channels.cpp -@@ -17,7 +17,7 @@ struct shuffle_channels_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::shuffle_channels_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::shuffle_channels_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/slice.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/slice.cpp -index 07ea912d06..d7f7f9ba74 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/slice.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/slice.cpp -@@ -72,7 +72,7 @@ struct slice_impl : typed_primitive_impl_ocl { - kInputsNum - }; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::slice_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/softmax.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/softmax.cpp -index b4029ac3b3..6ad4e1d087 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/softmax.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/softmax.cpp -@@ -39,7 +39,7 @@ struct softmax_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::softmax_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::softmax_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_batch.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_batch.cpp -index 141116e04b..c9db851175 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_batch.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_batch.cpp -@@ -16,7 +16,7 @@ struct space_to_batch_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::space_to_batch_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::space_to_batch_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_depth.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_depth.cpp -index ec87100f89..5b72a5572c 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_depth.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/space_to_depth.cpp -@@ -16,7 +16,7 @@ struct space_to_depth_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::space_to_depth_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::space_to_depth_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/strided_slice.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/strided_slice.cpp -index f06ae1b72d..e64498f73f 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/strided_slice.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/strided_slice.cpp -@@ -46,7 +46,7 @@ struct strided_slice_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::strided_slice_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::strided_slice_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/tile.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/tile.cpp -index 16d2dd91cb..bc95a18f54 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/tile.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/tile.cpp -@@ -17,7 +17,7 @@ struct tile_impl : typed_primitive_impl_ocl { - using kernel_selector_t = kernel_selector::tile_kernel_selector; - using kernel_params_t = std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::tile_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/ocl/unique.cpp b/src/plugins/intel_gpu/src/graph/impls/ocl/unique.cpp -index 7018ae66a2..604619c30b 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/ocl/unique.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/ocl/unique.cpp -@@ -17,7 +17,7 @@ struct unique_count_impl : typed_primitive_impl_ocl { - using kernel_params_t = - std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::unique_count_impl) - - std::unique_ptr clone() const override { - return make_unique(*this); -@@ -88,7 +88,7 @@ struct unique_gather_impl : typed_primitive_impl_ocl { - using kernel_params_t = - std::pair; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::ocl::unique_gather) - - std::unique_ptr clone() const override { - return make_unique(*this); -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/concatenation_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/concatenation_onednn.cpp -index ed5565504f..325afd5f3c 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/concatenation_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/concatenation_onednn.cpp -@@ -21,7 +21,7 @@ struct concatenation_onednn : typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::concatenation_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/convolution_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/convolution_onednn.cpp -index 1a27f3ae29..f1d1ab0a6c 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/convolution_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/convolution_onednn.cpp -@@ -26,7 +26,7 @@ struct convolution_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::convolution_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/deconvolution_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/deconvolution_onednn.cpp -index 439b74feff..1702738598 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/deconvolution_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/deconvolution_onednn.cpp -@@ -22,7 +22,7 @@ struct deconvolution_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::deconvolution_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/fully_connected_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/fully_connected_onednn.cpp -index 4aacb2ebd5..8ee6979dec 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/fully_connected_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/fully_connected_onednn.cpp -@@ -19,7 +19,7 @@ struct fully_connected_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::fully_connected_onednn) - - private: - static std::vector reshape_to_2d(const ov::PartialShape& shape, int64_t feature) { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/gemm_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/gemm_onednn.cpp -index 7410f79961..87e7decb34 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/gemm_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/gemm_onednn.cpp -@@ -19,7 +19,7 @@ struct gemm_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::gemm_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/pooling_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/pooling_onednn.cpp -index 52f0edc797..1dc686331b 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/pooling_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/pooling_onednn.cpp -@@ -19,7 +19,7 @@ struct pooling_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::pooling_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/reduction_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/reduction_onednn.cpp -index 581c37c015..635d465fc5 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/reduction_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/reduction_onednn.cpp -@@ -41,7 +41,7 @@ struct reduction_onednn : typed_primitive_onednn_impl { - using parent = typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::reduction_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/reorder_onednn.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/reorder_onednn.cpp -index 284dd8b166..433e043067 100644 ---- a/src/plugins/intel_gpu/src/graph/impls/onednn/reorder_onednn.cpp -+++ b/src/plugins/intel_gpu/src/graph/impls/onednn/reorder_onednn.cpp -@@ -19,7 +19,7 @@ struct reorder_onednn : typed_primitive_onednn_impl; - using parent::parent; - -- DECLARE_OBJECT_TYPE_SERIALIZATION -+ DECLARE_OBJECT_TYPE_SERIALIZATION(cldnn::onednn::reorder_onednn) - - protected: - std::unique_ptr clone() const override { -diff --git a/src/plugins/intel_gpu/src/graph/include/primitive_inst.h b/src/plugins/intel_gpu/src/graph/include/primitive_inst.h -index 3244ad20b4..454c92ac97 100644 ---- a/src/plugins/intel_gpu/src/graph/include/primitive_inst.h -+++ b/src/plugins/intel_gpu/src/graph/include/primitive_inst.h -@@ -54,7 +54,7 @@ struct primitive_impl { - - virtual std::vector get_internal_buffer_layouts() const = 0; - virtual void set_node_params(const program_node&) {} -- virtual std::string get_type() const = 0; -+ virtual const std::string& get_type_info() const = 0; - virtual void set_arguments(primitive_inst& instance) = 0; - virtual void set_arguments(primitive_inst& instance, kernel_arguments_data& args) = 0; - virtual kernel_arguments_data get_arguments(const primitive_inst& instance) const = 0; diff --git a/recipes/openvino/all/patches/2023.1.0/0005-dynamic-protobuf.patch b/recipes/openvino/all/patches/2023.1.0/0005-dynamic-protobuf.patch deleted file mode 100644 index 50b087b4268b4a..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0005-dynamic-protobuf.patch +++ /dev/null @@ -1,218 +0,0 @@ -diff --git a/cmake/developer_package/frontends/frontends.cmake b/cmake/developer_package/frontends/frontends.cmake -index df3586474b..8e50b25ea3 100644 ---- a/cmake/developer_package/frontends/frontends.cmake -+++ b/cmake/developer_package/frontends/frontends.cmake -@@ -130,6 +130,10 @@ macro(ov_add_frontend) - foreach(INFILE IN LISTS proto_files) - get_filename_component(FILE_DIR ${INFILE} DIRECTORY) - get_filename_component(FILE_WE ${INFILE} NAME_WE) -+ if(FILE_WE MATCHES "^(any|wrappers)$") -+ # we need to skip standard protobuf files -+ continue() -+ endif() - set(OUTPUT_PB_SRC ${CMAKE_CURRENT_BINARY_DIR}/${FILE_WE}.pb.cc) - set(OUTPUT_PB_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${FILE_WE}.pb.h) - set(GENERATED_PROTO ${INFILE}) -diff --git a/src/frontends/common/src/manager.cpp b/src/frontends/common/src/manager.cpp -index 2fa59398b1..6194fca758 100644 ---- a/src/frontends/common/src/manager.cpp -+++ b/src/frontends/common/src/manager.cpp -@@ -20,11 +20,6 @@ class FrontEndManager::Impl { - std::mutex m_loading_mutex; - std::vector m_plugins; - -- /// \brief map of shared object per frontend -- static std::unordered_map> m_shared_objects_map; -- /// \brief Mutex to guard access the shared object map -- static std::mutex m_shared_objects_map_mutex; -- - public: - Impl() { - search_all_plugins(); -@@ -36,10 +31,6 @@ public: - auto fe_obj = std::make_shared(); - fe_obj->m_shared_object = std::make_shared(plugin.get_so_pointer()); - fe_obj->m_actual = plugin.get_creator().m_creator(); -- -- std::lock_guard guard(m_shared_objects_map_mutex); -- m_shared_objects_map.emplace(plugin.get_creator().m_name, fe_obj->m_shared_object); -- - return fe_obj; - } - -@@ -49,6 +40,7 @@ public: - {"ir", "ir"}, - {"onnx", "onnx"}, - {"tf", "tensorflow"}, -+ {"tflite", "tensorflow_lite"}, - {"paddle", "paddle"}, - {"pytorch", "pytorch"}, - }; -@@ -127,8 +119,8 @@ public: - } - - static void shutdown() { -- std::lock_guard guard(m_shared_objects_map_mutex); -- m_shared_objects_map.clear(); -+ std::lock_guard guard(get_shared_objects_mutex()); -+ get_shared_objects_map().clear(); - } - - private: -@@ -153,6 +145,7 @@ private: - {".xml", {"ir", "ir"}}, - {".onnx", {"onnx", "onnx"}}, - {".pb", {"tf", "tensorflow"}}, -+ {".pbtxt", {"tf", "tensorflow"}}, - {".tflite", {"tflite", "tensorflow_lite"}}, - {".pdmodel", {"paddle", "paddle"}}, - // {".ts", {"pytorch", "pytorch"}}, -@@ -223,9 +216,6 @@ private: - } - }; - --std::unordered_map> FrontEndManager::Impl::m_shared_objects_map{}; --std::mutex FrontEndManager::Impl::m_shared_objects_map_mutex{}; -- - FrontEndManager::FrontEndManager() : m_impl(new Impl()) {} - - FrontEndManager::FrontEndManager(FrontEndManager&&) noexcept = default; -diff --git a/src/frontends/common/src/plugin_loader.cpp b/src/frontends/common/src/plugin_loader.cpp -index a044152d8d..a98eff766b 100644 ---- a/src/frontends/common/src/plugin_loader.cpp -+++ b/src/frontends/common/src/plugin_loader.cpp -@@ -16,17 +16,32 @@ - - #include - --#include - #include - #include - - #include "openvino/util/file_util.hpp" -+#include "openvino/util/log.hpp" - #include "openvino/util/shared_object.hpp" - #include "plugin_loader.hpp" - - using namespace ov; - using namespace ov::frontend; - -+// Note, static methods below are required to create an order of initialization of static variables -+// e.g. if users (not encouraged) created ov::Model globally, we need to ensure proper order of initialization -+ -+/// \return map of shared object per frontend -+std::unordered_map>& ov::frontend::get_shared_objects_map() { -+ static std::unordered_map> shared_objects_map; -+ return shared_objects_map; -+} -+ -+/// \return Mutex to guard access the shared object map -+std::mutex& ov::frontend::get_shared_objects_mutex() { -+ static std::mutex shared_objects_map_mutex; -+ return shared_objects_map_mutex; -+} -+ - #ifdef OPENVINO_STATIC_LIBRARY - - # include "ov_frontends.hpp" -@@ -131,6 +146,10 @@ bool PluginInfo::load() { - m_load_failed = true; - return false; - } -+ -+ std::lock_guard guard(get_shared_objects_mutex()); -+ get_shared_objects_map().emplace(get_creator().m_name, get_so_pointer()); -+ - return true; - } - -diff --git a/src/frontends/common/src/plugin_loader.hpp b/src/frontends/common/src/plugin_loader.hpp -index 93e6a5cc2e..dccf8ddf7a 100644 ---- a/src/frontends/common/src/plugin_loader.hpp -+++ b/src/frontends/common/src/plugin_loader.hpp -@@ -4,7 +4,12 @@ - - #pragma once - --#include -+#include -+#include -+#include -+#include -+ -+#include "openvino/frontend/manager.hpp" - - #ifdef _WIN32 - static const char PathSeparator[] = ";"; -@@ -15,6 +20,9 @@ static const char PathSeparator[] = ":"; - namespace ov { - namespace frontend { - -+std::unordered_map>& get_shared_objects_map(); -+std::mutex& get_shared_objects_mutex(); -+ - /// \brief Internal data structure holding by each frontend. Includes library handle and extensions. - class FrontEndSharedData { - friend inline void add_extension_to_shared_data(std::shared_ptr& obj, -diff --git a/src/frontends/tensorflow/src/proto/meta_graph.proto b/src/frontends/tensorflow/src/proto/meta_graph.proto -index b6918fa853..c59c0680af 100644 ---- a/src/frontends/tensorflow/src/proto/meta_graph.proto -+++ b/src/frontends/tensorflow/src/proto/meta_graph.proto -@@ -14,7 +14,7 @@ syntax = "proto3"; - - package tensorflow; - --import "any.proto"; -+import "google/protobuf/any.proto"; - import "graph.proto"; - import "op_def.proto"; - import "tensor_shape.proto"; -diff --git a/src/frontends/tensorflow/src/proto/saved_object_graph.proto b/src/frontends/tensorflow/src/proto/saved_object_graph.proto -index 671441075c..3918a4a8d1 100644 ---- a/src/frontends/tensorflow/src/proto/saved_object_graph.proto -+++ b/src/frontends/tensorflow/src/proto/saved_object_graph.proto -@@ -14,7 +14,7 @@ syntax = "proto3"; - - package tensorflow; - --import "any.proto"; -+import "google/protobuf/any.proto"; - import "tensor_shape.proto"; - import "types.proto"; - import "variable.proto"; -diff --git a/src/frontends/tensorflow/src/proto/trackable_object_graph.proto b/src/frontends/tensorflow/src/proto/trackable_object_graph.proto -index f4a8e4da34..f0a9617432 100644 ---- a/src/frontends/tensorflow/src/proto/trackable_object_graph.proto -+++ b/src/frontends/tensorflow/src/proto/trackable_object_graph.proto -@@ -14,7 +14,7 @@ syntax = "proto3"; - - package tensorflow; - --import "wrappers.proto"; -+import "google/protobuf/wrappers.proto"; - - option cc_enable_arenas = true; - option go_package = "github.com/tensorflow/tensorflow/tensorflow/go/core/protobuf/for_core_protos_go_proto"; -diff --git a/thirdparty/dependencies.cmake b/thirdparty/dependencies.cmake -index 43e0ed671a..10042641e4 100644 ---- a/thirdparty/dependencies.cmake -+++ b/thirdparty/dependencies.cmake -@@ -415,14 +415,14 @@ if(ENABLE_OV_PADDLE_FRONTEND OR ENABLE_OV_ONNX_FRONTEND OR ENABLE_OV_TF_FRONTEND - if(CMAKE_VERBOSE_MAKEFILE) - set(Protobuf_DEBUG ON) - endif() -- if(OV_VCPKG_BUILD) -- set(protobuf_config CONFIG) -- endif() - # try to find newer version first (major is changed) - # see https://protobuf.dev/support/version-support/ and - # https://github.com/protocolbuffers/protobuf/commit/d61f75ff6db36b4f9c0765f131f8edc2f86310fa -- find_package(Protobuf 4.22.0 QUIET ${protobuf_config}) -+ find_package(Protobuf 4.22.0 QUIET CONFIG) - if(NOT Protobuf_FOUND) -+ if(OV_VCPKG_BUILD) -+ set(protobuf_config CONFIG) -+ endif() - # otherwise, fallback to existing default - find_package(Protobuf 3.20.3 REQUIRED ${protobuf_config}) - endif() diff --git a/recipes/openvino/all/patches/2023.1.0/0006-macos-14.patch b/recipes/openvino/all/patches/2023.1.0/0006-macos-14.patch deleted file mode 100644 index 4184c1832cef38..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0006-macos-14.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/plugins/intel_cpu/src/nodes/mha.cpp b/src/plugins/intel_cpu/src/nodes/mha.cpp -index d4405be5d4..19cf63ac72 100644 ---- a/src/plugins/intel_cpu/src/nodes/mha.cpp -+++ b/src/plugins/intel_cpu/src/nodes/mha.cpp -@@ -16,6 +16,7 @@ - #include "common/cpu_convert.h" - #include "transformations/cpu_opset/x64/op/mha.hpp" - #include "dnnl_extension_utils.h" -+#include "utils/bfloat16.hpp" - #include - - using namespace InferenceEngine; diff --git a/recipes/openvino/all/patches/2023.1.0/0007-compilation-c++23.patch b/recipes/openvino/all/patches/2023.1.0/0007-compilation-c++23.patch deleted file mode 100644 index 552078a68bae76..00000000000000 --- a/recipes/openvino/all/patches/2023.1.0/0007-compilation-c++23.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/src/core/src/type.cpp b/src/core/src/type.cpp -index 7d6aef2c46..c75d9a7476 100644 ---- a/src/core/src/type.cpp -+++ b/src/core/src/type.cpp -@@ -37,7 +37,7 @@ std::string DiscreteTypeInfo::get_version() const { - if (version_id) { - return std::string(version_id); - } -- return nullptr; -+ return {}; - } - - DiscreteTypeInfo::operator std::string() const { -diff --git a/src/frontends/onnx/frontend/src/ops_bridge.hpp b/src/frontends/onnx/frontend/src/ops_bridge.hpp -index bbd6bfd129..4e2d2edb2b 100644 ---- a/src/frontends/onnx/frontend/src/ops_bridge.hpp -+++ b/src/frontends/onnx/frontend/src/ops_bridge.hpp -@@ -5,6 +5,7 @@ - #pragma once - - #include -+#include - #include - #include - #include -diff --git a/src/inference/src/dev/make_tensor.cpp b/src/inference/src/dev/make_tensor.cpp -index 2e319c04c5..5e3fa241ea 100644 ---- a/src/inference/src/dev/make_tensor.cpp -+++ b/src/inference/src/dev/make_tensor.cpp -@@ -520,7 +520,7 @@ public: - } - - void allocate() noexcept override { -- if (ie::TBlob::buffer() != tensor->data()) { -+ if ((void*)ie::TBlob::buffer() != tensor->data()) { - ie::TBlob::_allocator = - ie::details::make_pre_allocator(static_cast(tensor->data()), tensor->get_byte_size()); - ie::TBlob::allocate(); diff --git a/recipes/openvino/all/patches/2024.1.0/0001-fix-cxxflags.patch b/recipes/openvino/all/patches/2024.1.0/0001-fix-cxxflags.patch new file mode 100644 index 00000000000000..ceabd157b9ce91 --- /dev/null +++ b/recipes/openvino/all/patches/2024.1.0/0001-fix-cxxflags.patch @@ -0,0 +1,25 @@ +diff --git a/cmake/developer_package/target_flags.cmake b/cmake/developer_package/target_flags.cmake +index d047a1aebd..7779b2fcf5 100644 +--- a/cmake/developer_package/target_flags.cmake ++++ b/cmake/developer_package/target_flags.cmake +@@ -118,8 +118,19 @@ function(ov_get_compiler_definition definition var) + message(FATAL_ERROR "Internal error: 'ov_get_definition' must be used only on Linux") + endif() + ++ get_directory_property(_user_defines COMPILE_DEFINITIONS) ++ foreach(_user_define IN LISTS _user_defines) ++ # older cmake versions keep -D at the beginning, trim it ++ string(REPLACE "-D" "" _user_define "${_user_define}") ++ list(APPEND _ov_user_flags "-D${_user_define}") ++ endforeach() ++ string(REPLACE " " ";" _user_cxx_flags "${CMAKE_CXX_FLAGS}") ++ foreach(_user_flag IN LISTS _user_cxx_flags) ++ list(APPEND _ov_user_flags ${_user_flag}) ++ endforeach() ++ + execute_process(COMMAND echo "#include " +- COMMAND "${CMAKE_CXX_COMPILER}" -x c++ - -E -dM ++ COMMAND "${CMAKE_CXX_COMPILER}" ${_ov_user_flags} -x c++ - -E -dM + COMMAND grep -E "^#define ${definition} " + OUTPUT_VARIABLE output_value + ERROR_VARIABLE error_message diff --git a/recipes/openvino/config.yml b/recipes/openvino/config.yml index c055e48da509b4..511bd030e9af67 100644 --- a/recipes/openvino/config.yml +++ b/recipes/openvino/config.yml @@ -1,9 +1,9 @@ versions: + "2024.1.0": + folder: "all" "2024.0.0": folder: "all" "2023.3.0": folder: "all" "2023.2.0": folder: "all" - "2023.1.0": - folder: "all" From 454cc39047101266730ddddf529a28c4616e3fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Rinc=C3=B3n=20Blanco?= Date: Tue, 28 May 2024 17:42:20 +0200 Subject: [PATCH 64/83] (#24135) whisper-cpp: Remove hardcoded cmake_cxx_standard in CMakeLists --- recipes/whisper-cpp/all/conandata.yml | 4 ++++ .../1.6.2-0001-remove_hardcoded_cxxstd.patch | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 recipes/whisper-cpp/all/patches/1.6.2-0001-remove_hardcoded_cxxstd.patch diff --git a/recipes/whisper-cpp/all/conandata.yml b/recipes/whisper-cpp/all/conandata.yml index 02c9106a4cf071..95751363604855 100644 --- a/recipes/whisper-cpp/all/conandata.yml +++ b/recipes/whisper-cpp/all/conandata.yml @@ -12,6 +12,10 @@ sources: url: "https://github.com/ggerganov/whisper.cpp/archive/refs/tags/v1.2.1.tar.gz" sha256: "69d47fc2ba982c42bd5bade4b7c827d5b3ed74b9c59323991c45a9f0f24eb6ed" patches: + "1.6.2": + - patch_file: "patches/1.6.2-0001-remove_hardcoded_cxxstd.patch" + patch_description: "Remove hardcoded CMAKE_CXX_STANDARD" + patch_type: "conan" "1.2.1": - patch_file: "patches/1.2.1-0001-find_package_openblas.patch" patch_description: "Fix OpenBlas cmake target name" diff --git a/recipes/whisper-cpp/all/patches/1.6.2-0001-remove_hardcoded_cxxstd.patch b/recipes/whisper-cpp/all/patches/1.6.2-0001-remove_hardcoded_cxxstd.patch new file mode 100644 index 00000000000000..9e041fd99d19b0 --- /dev/null +++ b/recipes/whisper-cpp/all/patches/1.6.2-0001-remove_hardcoded_cxxstd.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 82913aa..f3a2d27 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -125,8 +125,6 @@ find_package(Threads REQUIRED) + #compile flag sycl + if (WHISPER_SYCL) + set(CMAKE_CXX_STANDARD 17) +-else() +- set(CMAKE_CXX_STANDARD 11) + endif() + + if (WHISPER_FFMPEG) From 3286aeb38afcf131a39044e737d548cd5f3c976c Mon Sep 17 00:00:00 2001 From: Ahajha <44127594+Ahajha@users.noreply.github.com> Date: Tue, 28 May 2024 12:09:41 -0400 Subject: [PATCH 65/83] (#23362) libffi: Add 3.4.6, remove 3.4.2 and 3.4.3 * Add libffi 3.4.6 * Fix MSVC build * Don't define FFI_BUILDING if not necessary * ffi static defines only necessary for MSVC * Keep static defines for now * Disable Mac ARM build on 3.3 * Fix patch name * Remove some dead code * Remove unused import * Remove libffi 3.4.2 and 3.4.3 * remove unused versions from conandata.yml Signed-off-by: Uilian Ries --------- Signed-off-by: Uilian Ries Co-authored-by: Uilian Ries --- recipes/libffi/all/conandata.yml | 28 +++------- recipes/libffi/all/conanfile.py | 32 +++++------ ...atch => 0002-3.4.6-fix-libtool-path.patch} | 6 +- .../0004-3.4.6-fix-complex-type-msvc.patch | 56 +++++++++++++++++++ ...raries-to-arch-dependent-directories.patch | 11 ---- ...raries-to-arch-dependent-directories.patch | 11 ---- ...0006-3.4.2-library-no-version-suffix.patch | 11 ---- ...006-3.4.6-library-no-version-suffix.patch} | 8 ++- recipes/libffi/config.yml | 6 +- 9 files changed, 88 insertions(+), 81 deletions(-) rename recipes/libffi/all/patches/{0002-3.4.2-fix-libtool-path.patch => 0002-3.4.6-fix-libtool-path.patch} (84%) create mode 100644 recipes/libffi/all/patches/0004-3.4.6-fix-complex-type-msvc.patch delete mode 100644 recipes/libffi/all/patches/0005-3.4.2-do-not-install-libraries-to-arch-dependent-directories.patch delete mode 100644 recipes/libffi/all/patches/0005-3.4.3-do-not-install-libraries-to-arch-dependent-directories.patch delete mode 100644 recipes/libffi/all/patches/0006-3.4.2-library-no-version-suffix.patch rename recipes/libffi/all/patches/{0006-3.4.3-library-no-version-suffix.patch => 0006-3.4.6-library-no-version-suffix.patch} (80%) diff --git a/recipes/libffi/all/conandata.yml b/recipes/libffi/all/conandata.yml index 5984134b2d8b9c..4ae82714f72f8a 100644 --- a/recipes/libffi/all/conandata.yml +++ b/recipes/libffi/all/conandata.yml @@ -1,17 +1,19 @@ sources: + "3.4.6": + url: "https://github.com/libffi/libffi/releases/download/v3.4.6/libffi-3.4.6.tar.gz" + sha256: "b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e" "3.4.4": url: "https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz" sha256: "d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676" - "3.4.3": - url: "https://github.com/libffi/libffi/releases/download/v3.4.3/libffi-3.4.3.tar.gz" - sha256: "4416dd92b6ae8fcb5b10421e711c4d3cb31203d77521a77d85d0102311e6c3b8" - "3.4.2": - url: "https://github.com/libffi/libffi/releases/download/v3.4.2/libffi-3.4.2.tar.gz" - sha256: "540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620" "3.3": url: "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz" sha256: "72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056" patches: + "3.4.6": + - patch_file: "patches/0002-3.4.6-fix-libtool-path.patch" + - patch_file: "patches/0004-3.4.6-fix-complex-type-msvc.patch" + - patch_file: "patches/0005-3.4.4-do-not-install-libraries-to-arch-dependent-directories.patch" + - patch_file: "patches/0006-3.4.6-library-no-version-suffix.patch" "3.4.4": - patch_file: "patches/0002-3.4.3-fix-libtool-path.patch" - patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch" @@ -21,20 +23,6 @@ patches: patch_type: "portability" patch_source: "https://github.com/libffi/libffi/pull/764" patch_description: "Forward declare the open_temp_exec_file function which is required by the C99 standard" - "3.4.3": - - patch_file: "patches/0002-3.4.3-fix-libtool-path.patch" - - patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch" - - patch_file: "patches/0005-3.4.3-do-not-install-libraries-to-arch-dependent-directories.patch" - - patch_file: "patches/0006-3.4.3-library-no-version-suffix.patch" - - patch_file: "patches/0007-3.4.3-forward-declare-open_temp_exec_file.patch" - patch_type: "portability" - patch_source: "https://github.com/libffi/libffi/pull/764" - patch_description: "Forward declare the open_temp_exec_file function which is required by the C99 standard" - "3.4.2": - - patch_file: "patches/0002-3.4.2-fix-libtool-path.patch" - - patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch" - - patch_file: "patches/0005-3.4.2-do-not-install-libraries-to-arch-dependent-directories.patch" - - patch_file: "patches/0006-3.4.2-library-no-version-suffix.patch" "3.3": - patch_file: "patches/0002-3.3-fix-libtool-path.patch" - patch_file: "patches/0004-3.3-fix-complex-type-msvc.patch" diff --git a/recipes/libffi/all/conanfile.py b/recipes/libffi/all/conanfile.py index e46a94d1b4462a..cc062fca089043 100644 --- a/recipes/libffi/all/conanfile.py +++ b/recipes/libffi/all/conanfile.py @@ -1,7 +1,8 @@ from conan import ConanFile -from conan.tools.apple import fix_apple_shared_install_name +from conan.errors import ConanInvalidConfiguration +from conan.tools.apple import fix_apple_shared_install_name, is_apple_os from conan.tools.env import VirtualBuildEnv -from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, mkdir, replace_in_file, rm, rmdir +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, mkdir, rm, rmdir from conan.tools.gnu import Autotools, AutotoolsToolchain from conan.tools.layout import basic_layout from conan.tools.microsoft import check_min_vs, is_msvc, is_msvc_static_runtime, msvc_runtime_flag, unix_path @@ -42,6 +43,10 @@ def export_sources(self): def config_options(self): if self.settings.os == "Windows": del self.options.fPIC + + def validate(self): + if is_apple_os(self) and self.settings.arch == "armv8" and Version(self.version) < "3.4.0": + raise ConanInvalidConfiguration(f"{self.ref} does not support Apple ARM CPUs") def configure(self): if self.options.shared: @@ -78,9 +83,12 @@ def generate(self): if self._settings_build.compiler == "apple-clang": tc.configure_args.append("--disable-multi-os-directory") - tc.extra_defines.append("FFI_BUILDING") if self.options.shared: tc.extra_defines.append("FFI_BUILDING_DLL") + if Version(self.version) < "3.4.6": + tc.extra_defines.append("FFI_BUILDING") + elif not self.options.shared: + tc.extra_defines.append("FFI_STATIC_BUILD") env = tc.environment() if self._settings_build.os == "Windows" and (is_msvc(self) or self.settings.compiler == "clang"): @@ -134,22 +142,9 @@ def generate(self): env.define("INSTALL", unix_path(self, os.path.join(self.source_folder, "install-sh"))) tc.generate(env=env) - def _patch_source(self): + def build(self): apply_conandata_patches(self) - if Version(self.version) < "3.3": - if self.settings.compiler == "clang" and Version(str(self.settings.compiler.version)) >= 7.0: - # https://android.googlesource.com/platform/external/libffi/+/ca22c3cb49a8cca299828c5ffad6fcfa76fdfa77 - sysv_s_src = os.path.join(self.source_folder, "src", "arm", "sysv.S") - replace_in_file(self, sysv_s_src, "fldmiad", "vldmia") - replace_in_file(self, sysv_s_src, "fstmiad", "vstmia") - replace_in_file(self, sysv_s_src, "fstmfdd\tsp!,", "vpush") - - # https://android.googlesource.com/platform/external/libffi/+/7748bd0e4a8f7d7c67b2867a3afdd92420e95a9f - replace_in_file(self, sysv_s_src, "stmeqia", "stmiaeq") - - def build(self): - self._patch_source() autotools = Autotools(self) autotools.configure() autotools.make() @@ -170,4 +165,5 @@ def package_info(self): self.cpp_info.libs = ["{}ffi".format("lib" if is_msvc(self) else "")] self.cpp_info.set_property("pkg_config_name", "libffi") if not self.options.shared: - self.cpp_info.defines = ["FFI_BUILDING"] + static_define = "FFI_STATIC_BUILD" if Version(self.version) >= "3.4.6" else "FFI_BUILDING" + self.cpp_info.defines = [static_define] diff --git a/recipes/libffi/all/patches/0002-3.4.2-fix-libtool-path.patch b/recipes/libffi/all/patches/0002-3.4.6-fix-libtool-path.patch similarity index 84% rename from recipes/libffi/all/patches/0002-3.4.2-fix-libtool-path.patch rename to recipes/libffi/all/patches/0002-3.4.6-fix-libtool-path.patch index fad9e64adff17c..e557baacf2699d 100644 --- a/recipes/libffi/all/patches/0002-3.4.2-fix-libtool-path.patch +++ b/recipes/libffi/all/patches/0002-3.4.6-fix-libtool-path.patch @@ -1,6 +1,6 @@ --- configure +++ configure -@@ -8979,7 +8979,7 @@ +@@ -9882,7 +9882,7 @@ LIBTOOL_DEPS=$ltmain # Always use our own libtool. @@ -9,7 +9,7 @@ -@@ -9072,7 +9072,7 @@ +@@ -9974,7 +9974,7 @@ esac # Global variables: @@ -17,4 +17,4 @@ +ofile=libtool.sh can_build_shared=yes - # All known linkers require a '.a' archive for static linking (except MSVC, + # All known linkers require a '.a' archive for static linking (except MSVC and diff --git a/recipes/libffi/all/patches/0004-3.4.6-fix-complex-type-msvc.patch b/recipes/libffi/all/patches/0004-3.4.6-fix-complex-type-msvc.patch new file mode 100644 index 00000000000000..4779afe0a2e854 --- /dev/null +++ b/recipes/libffi/all/patches/0004-3.4.6-fix-complex-type-msvc.patch @@ -0,0 +1,56 @@ +diff --git a/src/types.c b/src/types.c +index c1c27f3..d5d52bb 100644 +--- a/src/types.c ++++ b/src/types.c +@@ -31,6 +31,8 @@ + #include + #include + ++#include ++ + /* Type definitions */ + + #define FFI_TYPEDEF(name, type, id, maybe_const)\ +@@ -45,17 +47,17 @@ maybe_const ffi_type ffi_type_##name = { \ + id, NULL \ + } + +-#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ ++#define FFI_COMPLEX_TYPEDEF(name, complex_type, maybe_const) \ + static ffi_type *ffi_elements_complex_##name [2] = { \ + (ffi_type *)(&ffi_type_##name), NULL \ + }; \ + struct struct_align_complex_##name { \ + char c; \ +- _Complex type x; \ ++ complex_type x; \ + }; \ + FFI_EXTERN \ + maybe_const ffi_type ffi_type_complex_##name = { \ +- sizeof(_Complex type), \ ++ sizeof(complex_type), \ + offsetof(struct struct_align_complex_##name, x), \ + FFI_TYPE_COMPLEX, \ + (ffi_type **)ffi_elements_complex_##name \ +@@ -99,8 +101,18 @@ const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; + FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); + #endif + ++#ifdef _MSC_VER ++# define FLOAT_COMPLEX _C_float_complex ++# define DOUBLE_COMPLEX _C_double_complex ++# define LDOUBLE_COMPLEX _C_ldouble_complex ++#else ++# define FLOAT_COMPLEX float _Complex ++# define DOUBLE_COMPLEX double _Complex ++# define LDOUBLE_COMPLEX long double _Complex ++#endif ++ + #ifdef FFI_TARGET_HAS_COMPLEX_TYPE +-FFI_COMPLEX_TYPEDEF(float, float, const); +-FFI_COMPLEX_TYPEDEF(double, double, const); +-FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); ++FFI_COMPLEX_TYPEDEF(float, FLOAT_COMPLEX, const); ++FFI_COMPLEX_TYPEDEF(double, DOUBLE_COMPLEX, const); ++FFI_COMPLEX_TYPEDEF(longdouble, LDOUBLE_COMPLEX, FFI_LDBL_CONST); + #endif diff --git a/recipes/libffi/all/patches/0005-3.4.2-do-not-install-libraries-to-arch-dependent-directories.patch b/recipes/libffi/all/patches/0005-3.4.2-do-not-install-libraries-to-arch-dependent-directories.patch deleted file mode 100644 index 8e14796ab662af..00000000000000 --- a/recipes/libffi/all/patches/0005-3.4.2-do-not-install-libraries-to-arch-dependent-directories.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Makefile.in -+++ Makefile.in -@@ -517,7 +517,7 @@ - target_os = @target_os@ - target_vendor = @target_vendor@ - toolexecdir = @toolexecdir@ --toolexeclibdir = @toolexeclibdir@ -+toolexeclibdir = @libdir@ - top_build_prefix = @top_build_prefix@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ diff --git a/recipes/libffi/all/patches/0005-3.4.3-do-not-install-libraries-to-arch-dependent-directories.patch b/recipes/libffi/all/patches/0005-3.4.3-do-not-install-libraries-to-arch-dependent-directories.patch deleted file mode 100644 index e82abf24a4fb1e..00000000000000 --- a/recipes/libffi/all/patches/0005-3.4.3-do-not-install-libraries-to-arch-dependent-directories.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Makefile.in -+++ Makefile.in -@@ -520,7 +520,7 @@ - target_vendor = @target_vendor@ - tmake_file = @tmake_file@ - toolexecdir = @toolexecdir@ --toolexeclibdir = @toolexeclibdir@ -+toolexeclibdir = @libdir@ - top_build_prefix = @top_build_prefix@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ diff --git a/recipes/libffi/all/patches/0006-3.4.2-library-no-version-suffix.patch b/recipes/libffi/all/patches/0006-3.4.2-library-no-version-suffix.patch deleted file mode 100644 index 80c36df06441e4..00000000000000 --- a/recipes/libffi/all/patches/0006-3.4.2-library-no-version-suffix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Makefile.in -+++ Makefile.in -@@ -610,7 +610,7 @@ - @LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep = - @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map - @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun --libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -+libffi_version_info = -avoid-version - libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) - libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep) - AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src diff --git a/recipes/libffi/all/patches/0006-3.4.3-library-no-version-suffix.patch b/recipes/libffi/all/patches/0006-3.4.6-library-no-version-suffix.patch similarity index 80% rename from recipes/libffi/all/patches/0006-3.4.3-library-no-version-suffix.patch rename to recipes/libffi/all/patches/0006-3.4.6-library-no-version-suffix.patch index 0ad4d29b1c4ce5..726e8c1eb4a478 100644 --- a/recipes/libffi/all/patches/0006-3.4.3-library-no-version-suffix.patch +++ b/recipes/libffi/all/patches/0006-3.4.6-library-no-version-suffix.patch @@ -1,6 +1,8 @@ ---- Makefile.in -+++ Makefile.in -@@ -615,7 +615,7 @@ +diff --git a/Makefile.in b/Makefile.in +index 450200a..abcee85 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -618,7 +618,7 @@ AM_CFLAGS = $(am__append_3) @LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_dep = @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_dep = libffi.map-sun diff --git a/recipes/libffi/config.yml b/recipes/libffi/config.yml index af3a9af92b3063..e6382ec734d6d5 100644 --- a/recipes/libffi/config.yml +++ b/recipes/libffi/config.yml @@ -1,9 +1,7 @@ versions: - "3.4.4": - folder: "all" - "3.4.3": + "3.4.6": folder: "all" - "3.4.2": + "3.4.4": folder: "all" "3.3": folder: "all" From 61f21ae3e1e62d145cf0069cafcd53be0a55518a Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 28 May 2024 19:32:48 +0300 Subject: [PATCH 66/83] (#24112) sioclient: new recipe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sioclient: new recipe * sioclient: Windows shared builds are not supported * sioclient: require CMake 3.15+ * Update recipes/sioclient/all/conanfile.py --------- Co-authored-by: Rubén Rincón Blanco --- recipes/sioclient/all/conandata.yml | 4 + recipes/sioclient/all/conanfile.py | 112 ++++++++++++++++++ .../sioclient/all/test_package/CMakeLists.txt | 8 ++ .../sioclient/all/test_package/conanfile.py | 26 ++++ .../all/test_package/test_package.cpp | 6 + recipes/sioclient/config.yml | 3 + 6 files changed, 159 insertions(+) create mode 100644 recipes/sioclient/all/conandata.yml create mode 100644 recipes/sioclient/all/conanfile.py create mode 100644 recipes/sioclient/all/test_package/CMakeLists.txt create mode 100644 recipes/sioclient/all/test_package/conanfile.py create mode 100644 recipes/sioclient/all/test_package/test_package.cpp create mode 100644 recipes/sioclient/config.yml diff --git a/recipes/sioclient/all/conandata.yml b/recipes/sioclient/all/conandata.yml new file mode 100644 index 00000000000000..ae83b98849ee1f --- /dev/null +++ b/recipes/sioclient/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "cci.20240405": + url: "https://github.com/socketio/socket.io-client-cpp/archive/c6be96b226f0fe3853beaeaa99c06834342a78db.zip" + sha256: "7c68117185dbc49579bba09a3e877f2a716cc331c28b3d8b6d3f867c4346b639" diff --git a/recipes/sioclient/all/conanfile.py b/recipes/sioclient/all/conanfile.py new file mode 100644 index 00000000000000..4af93cba3d64c2 --- /dev/null +++ b/recipes/sioclient/all/conanfile.py @@ -0,0 +1,112 @@ +import os + +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.build import check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.env import VirtualBuildEnv +from conan.tools.files import copy, get, replace_in_file, rm, rmdir, save + +required_conan_version = ">=1.53.0" + + +class SioclientConan(ConanFile): + name = "sioclient" + description = "C++11 implementation of Socket.IO client" + license = "MIT" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/socketio/socket.io-client-cpp" + topics = ("websocket", "client") + + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + "with_openssl": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + "with_openssl": True, + } + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def layout(self): + cmake_layout(self, src_folder="src") + + def requirements(self): + self.requires("websocketpp/0.8.2") + self.requires("asio/1.30.2") + self.requires("rapidjson/cci.20230929") + if self.options.with_openssl: + self.requires("openssl/[>=1.1 <4]") + + def validate(self): + if self.settings.compiler.cppstd: + check_min_cppstd(self, 11) + if self.settings.os == "Windows": + raise ConanInvalidConfiguration("Shared builds on Windows are not supported") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["USE_SUBMODULES"] = False + tc.generate() + + deps = CMakeDeps(self) + deps.generate() + + VirtualBuildEnv(self).generate() + + def _patch_sources(self): + replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), + "asio asio::asio", "asio::asio") + save(self, os.path.join(self.source_folder, "test", "CMakeLists.txt"), "") + + def build(self): + self._patch_sources() + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) + cmake.install() + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rm(self, "*.pdb", self.package_folder, recursive=True) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "sioclient") + + self.cpp_info.components["sioclient_"].set_property("cmake_target_name", "sioclient::sioclient") + self.cpp_info.components["sioclient_"].libs = ["sioclient"] + self.cpp_info.components["sioclient_"].requires = [ + "websocketpp::websocketpp", + "asio::asio", + "rapidjson::rapidjson", + ] + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.components["sioclient_"].system_libs.extend(["m", "pthread"]) + + if self.options.with_openssl: + self.cpp_info.components["sioclient_tls"].set_property("cmake_target_name", "sioclient::sioclient_tls") + self.cpp_info.components["sioclient_tls"].libs = ["sioclient_tls"] + self.cpp_info.components["sioclient_tls"].requires = [ + "websocketpp::websocketpp", + "asio::asio", + "rapidjson::rapidjson", + "openssl::openssl", + ] + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.components["sioclient_tls"].system_libs.extend(["m", "pthread"]) diff --git a/recipes/sioclient/all/test_package/CMakeLists.txt b/recipes/sioclient/all/test_package/CMakeLists.txt new file mode 100644 index 00000000000000..4985d53cb13caf --- /dev/null +++ b/recipes/sioclient/all/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package LANGUAGES CXX) + +find_package(sioclient REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PRIVATE sioclient::sioclient) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11) diff --git a/recipes/sioclient/all/test_package/conanfile.py b/recipes/sioclient/all/test_package/conanfile.py new file mode 100644 index 00000000000000..3a91c9439218e3 --- /dev/null +++ b/recipes/sioclient/all/test_package/conanfile.py @@ -0,0 +1,26 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/sioclient/all/test_package/test_package.cpp b/recipes/sioclient/all/test_package/test_package.cpp new file mode 100644 index 00000000000000..646e232b2bda03 --- /dev/null +++ b/recipes/sioclient/all/test_package/test_package.cpp @@ -0,0 +1,6 @@ +#include + +int main() { + sio::client h; + h.socket(); +} diff --git a/recipes/sioclient/config.yml b/recipes/sioclient/config.yml new file mode 100644 index 00000000000000..f1cb71fea7cad5 --- /dev/null +++ b/recipes/sioclient/config.yml @@ -0,0 +1,3 @@ +versions: + "cci.20240405": + folder: all From d6319bdf5f68a2d3514d1b55070e4cce0ec3a7c4 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Tue, 28 May 2024 18:54:36 +0200 Subject: [PATCH 67/83] (#24134) msdfgen: refactor test package Co-authored-by: Uilian Ries --- .../all/test_package/OpenSans-Bold.ttf | Bin 224592 -> 0 bytes recipes/msdfgen/all/test_package/conanfile.py | 3 +-- .../msdfgen/all/test_package/test_package.cpp | 19 +----------------- .../msdfgen/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 3 insertions(+), 22 deletions(-) delete mode 100644 recipes/msdfgen/all/test_package/OpenSans-Bold.ttf diff --git a/recipes/msdfgen/all/test_package/OpenSans-Bold.ttf b/recipes/msdfgen/all/test_package/OpenSans-Bold.ttf deleted file mode 100644 index fd79d43bea0293ac1b20e8aca1142627983d2c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224592 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 diff --git a/recipes/msdfgen/all/test_package/conanfile.py b/recipes/msdfgen/all/test_package/conanfile.py index c4fdfb4dbdc982..0a6bc68712d901 100644 --- a/recipes/msdfgen/all/test_package/conanfile.py +++ b/recipes/msdfgen/all/test_package/conanfile.py @@ -23,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - ttf_path = os.path.join(self.source_folder, "OpenSans-Bold.ttf") - self.run(f"{bin_path} {ttf_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/msdfgen/all/test_package/test_package.cpp b/recipes/msdfgen/all/test_package/test_package.cpp index d169064c206c28..fc8e183067d7ea 100644 --- a/recipes/msdfgen/all/test_package/test_package.cpp +++ b/recipes/msdfgen/all/test_package/test_package.cpp @@ -4,26 +4,9 @@ #include int main(int argc, char **argv) { - if (argc < 2) { - std::cerr << "Need at least one argument\n"; - return 1; - } - msdfgen::FreetypeHandle *ft = msdfgen::initializeFreetype(); if (ft) { - msdfgen::FontHandle *font = msdfgen::loadFont(ft, argv[1]); - if (font) { - msdfgen::Shape shape; - if (msdfgen::loadGlyph(shape, font, 'A')) { - shape.normalize(); - msdfgen::edgeColoringSimple(shape, 3.0); - msdfgen::Bitmap msdf(32, 32); - msdfgen::generateMSDF(msdf, shape, 4.0, 1.0, msdfgen::Vector2(4.0, 4.0)); - msdfgen::savePng(msdf, "output.png"); - } - msdfgen::destroyFont(font); - } - msdfgen::deinitializeFreetype(ft); + std::cout << "Test" << std::endl; // This should be printed } return 0; } diff --git a/recipes/msdfgen/all/test_v1_package/conanfile.py b/recipes/msdfgen/all/test_v1_package/conanfile.py index 7b775db727c08e..38f4483872d47f 100644 --- a/recipes/msdfgen/all/test_v1_package/conanfile.py +++ b/recipes/msdfgen/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - ttf_path = os.path.join(self.source_folder, os.pardir, "test_package", "OpenSans-Bold.ttf") - self.run(f"{bin_path} {ttf_path}", run_environment=True) + self.run(bin_path, run_environment=True) From 289b9b51a55e211c33b841b405e1381f6d9756fb Mon Sep 17 00:00:00 2001 From: toge Date: Wed, 29 May 2024 02:12:59 +0900 Subject: [PATCH 68/83] (#24136) libliftoff: add version 0.5.0, fix homepage url --- recipes/libliftoff/all/conandata.yml | 3 +++ recipes/libliftoff/all/conanfile.py | 2 +- recipes/libliftoff/config.yml | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/recipes/libliftoff/all/conandata.yml b/recipes/libliftoff/all/conandata.yml index 9cc2caed8889e3..18f54d8b034f20 100644 --- a/recipes/libliftoff/all/conandata.yml +++ b/recipes/libliftoff/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.5.0": + url: "https://gitlab.freedesktop.org/emersion/libliftoff/-/archive/v0.5.0/libliftoff-v0.5.0.tar.bz2" + sha256: "2ed21be3c563b129bd8f188195a23256017e15908c195f3edcd3697584caf1c8" "0.4.1": url: "https://gitlab.freedesktop.org/emersion/libliftoff/-/archive/v0.4.1/libliftoff-v0.4.1.tar.bz2" sha256: "2ec4a6b467dda20476acb4d6bd864538ccdaa946e8666f96efa98156bf25cfb5" diff --git a/recipes/libliftoff/all/conanfile.py b/recipes/libliftoff/all/conanfile.py index 372fffe6e790f3..792e87c5ed4a91 100644 --- a/recipes/libliftoff/all/conanfile.py +++ b/recipes/libliftoff/all/conanfile.py @@ -16,7 +16,7 @@ class LibliftoffConan(ConanFile): description = "Lightweight KMS plane library." license = "MIT" url = "https://github.com/conan-io/conan-center-index" - homepage = "https://github.com/project/package" + homepage = "https://gitlab.freedesktop.org/emersion/libliftoff" topics = ("drm", "KMS", "plane") package_type = "library" settings = "os", "arch", "compiler", "build_type" diff --git a/recipes/libliftoff/config.yml b/recipes/libliftoff/config.yml index 3a9d5538921fcd..bdf259c14aca40 100644 --- a/recipes/libliftoff/config.yml +++ b/recipes/libliftoff/config.yml @@ -1,3 +1,5 @@ versions: + "0.5.0": + folder: all "0.4.1": folder: all From 950d544cb32e3bc9e0b60b27849ea6789d03c333 Mon Sep 17 00:00:00 2001 From: Clare Macrae Date: Tue, 28 May 2024 21:14:26 +0100 Subject: [PATCH 69/83] (#24143) approvaltests.cpp: add 10.13.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * approvaltests.cpp: add 10.13.0 * Minor recipe improvements --------- Co-authored-by: Rubén Rincón Blanco --- recipes/approvaltests.cpp/all/conandata.yml | 5 +++++ recipes/approvaltests.cpp/all/conanfile.py | 10 +++++++++- recipes/approvaltests.cpp/config.yml | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/recipes/approvaltests.cpp/all/conandata.yml b/recipes/approvaltests.cpp/all/conandata.yml index b3f371f3d0cdd0..f5f47fc15d2ea6 100644 --- a/recipes/approvaltests.cpp/all/conandata.yml +++ b/recipes/approvaltests.cpp/all/conandata.yml @@ -1,4 +1,9 @@ sources: + "10.13.0": + - url: https://github.com/approvals/ApprovalTests.cpp/releases/download/v.10.13.0/ApprovalTests.v.10.13.0.hpp + sha256: c00f6390b81d9924dc646e9d32b61e1e09abda106c13704f714ac349241bb9ff + - url: "https://raw.githubusercontent.com/approvals/ApprovalTests.cpp/v.10.13.0/LICENSE" + sha256: c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 "10.12.2": - url: https://github.com/approvals/ApprovalTests.cpp/releases/download/v.10.12.2/ApprovalTests.v.10.12.2.hpp sha256: 4c43d0ea98669e3d6fbb5810cc47b19adaf88cabb1421b488aa306b08c434131 diff --git a/recipes/approvaltests.cpp/all/conanfile.py b/recipes/approvaltests.cpp/all/conanfile.py index 167d80165bb6d9..1bfdff95cf2457 100644 --- a/recipes/approvaltests.cpp/all/conanfile.py +++ b/recipes/approvaltests.cpp/all/conanfile.py @@ -1,11 +1,12 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration +from conan.tools.build import check_min_cppstd from conan.tools.files import copy, download, rename from conan.tools.layout import basic_layout from conan.tools.scm import Version import os -required_conan_version = ">=1.51.1" +required_conan_version = ">=1.53" class ApprovalTestsCppConan(ConanFile): @@ -38,6 +39,10 @@ class ApprovalTestsCppConan(ConanFile): @property def _header_file(self): return "ApprovalTests.hpp" + + @property + def _min_cppstd(self): + return 11 def config_options(self): if Version(self.version) < "10.4.0": @@ -62,6 +67,9 @@ def package_id(self): self.info.clear() def validate(self): + if self.settings.get_safe("compiler.cppstd"): + check_min_cppstd(self, self._min_cppstd) + if Version(self.version) >= "10.2.0": if self.settings.compiler == "gcc" and Version(self.settings.compiler.version) < "5": raise ConanInvalidConfiguration(f"{self.ref} with compiler gcc requires at least compiler version 5") diff --git a/recipes/approvaltests.cpp/config.yml b/recipes/approvaltests.cpp/config.yml index caf3f177e07c72..6e7a92b2ed85ab 100644 --- a/recipes/approvaltests.cpp/config.yml +++ b/recipes/approvaltests.cpp/config.yml @@ -1,4 +1,6 @@ versions: + "10.13.0": + folder: all "10.12.2": folder: all "10.12.1": From 830347722fd294cdc83710f08ac4705c1135df44 Mon Sep 17 00:00:00 2001 From: Luis Caro Campos <3535649+jcar87@users.noreply.github.com> Date: Tue, 28 May 2024 22:02:29 +0100 Subject: [PATCH 70/83] (#24144) abseil: support shared on msvc --- recipes/abseil/all/conanfile.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes/abseil/all/conanfile.py b/recipes/abseil/all/conanfile.py index bcfa3c446e4263..6c10812e384528 100644 --- a/recipes/abseil/all/conanfile.py +++ b/recipes/abseil/all/conanfile.py @@ -70,9 +70,9 @@ def validate(self): f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." ) - if self.options.shared and is_msvc(self): + if self.options.shared and is_msvc(self) and Version(self.version) < "20230802.1": # upstream tries its best to export symbols, but it's broken for the moment - raise ConanInvalidConfiguration(f"{self.ref} shared not availabe for Visual Studio (yet)") + raise ConanInvalidConfiguration(f"{self.ref} shared not availabe for Visual Studio, please use version 20230802.1 or newer") def layout(self): cmake_layout(self, src_folder="src") @@ -161,7 +161,7 @@ def _load_components_from_cmake_target_file(self, absl_target_file_path): if cmake_function_name == "add_library": cmake_imported_target_type = cmake_function_args[1] if cmake_imported_target_type in ["STATIC", "SHARED"]: - components[potential_lib_name]["libs"] = [potential_lib_name] if cmake_target_nonamespace != "abseil_dll" else [] + components[potential_lib_name]["libs"] = [potential_lib_name] if cmake_target_nonamespace != "abseil_dll" else ['abseil_dll'] elif cmake_function_name == "set_target_properties": target_properties = re.findall(r"(?PINTERFACE_COMPILE_DEFINITIONS|INTERFACE_INCLUDE_DIRECTORIES|INTERFACE_LINK_LIBRARIES)[\n|\s]+(?P.+)", cmake_function_args[2]) for target_property in target_properties: From e963286bea45164f2c44e2d2844bf3003ea1c446 Mon Sep 17 00:00:00 2001 From: Sahnvour Date: Wed, 29 May 2024 10:13:25 +0200 Subject: [PATCH 71/83] (#24115) msdfgen: update tinyxml2 dependency to 10.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Rincón Blanco --- recipes/msdfgen/all/conanfile.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/recipes/msdfgen/all/conanfile.py b/recipes/msdfgen/all/conanfile.py index 3465d1f3da467e..4c27f23e5fccf4 100644 --- a/recipes/msdfgen/all/conanfile.py +++ b/recipes/msdfgen/all/conanfile.py @@ -54,7 +54,8 @@ def requirements(self): self.requires("lodepng/cci.20200615") else: self.requires("libpng/[>=1.6 <2]") - self.requires("tinyxml2/9.0.0") + self.requires("tinyxml2/10.0.0") + def validate(self): if self.settings.compiler.get_safe("cppstd"): From 0d5567dc6e825303a3941234726ce2b24fb442fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Rinc=C3=B3n=20Blanco?= Date: Wed, 29 May 2024 10:43:31 +0200 Subject: [PATCH 72/83] (#24142) strawberryperl: Fix binaries not supporting non x86 archs --- recipes/strawberryperl/all/conanfile.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/recipes/strawberryperl/all/conanfile.py b/recipes/strawberryperl/all/conanfile.py index e5d600869e82fa..f6b47f3dd18e04 100644 --- a/recipes/strawberryperl/all/conanfile.py +++ b/recipes/strawberryperl/all/conanfile.py @@ -14,6 +14,7 @@ class StrawberryPerlConan(ConanFile): homepage = "http://strawberryperl.com" url = "https://github.com/conan-io/conan-center-index" topics = ("perl", "interpreter", "windows") + package_type = "application" settings = "os", "arch", "compiler", "build_type" def layout(self): @@ -24,8 +25,10 @@ def package_id(self): del self.info.settings.build_type def validate(self): - if self.info.settings.os != "Windows": - raise ConanInvalidConfiguration("Strawberry Perl is only intended to be used on Windows.") + if self.settings.os != "Windows": + raise ConanInvalidConfiguration(f"{self.ref} is only intended to be used on Windows.") + if self.settings.arch not in ("x86", "x86_64"): + raise ConanInvalidConfiguration(f"{self.ref} is only available for x86 and x86_64 architectures.") def source(self): pass From 1bd8971a09ac7e74b16b3d88ed52a71eaa1a9b3c Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Wed, 29 May 2024 11:14:47 +0200 Subject: [PATCH 73/83] (#24137) audiofile: refactor test package --- recipes/audiofile/all/test_package/conanfile.py | 3 +-- recipes/audiofile/all/test_package/sine.wav | Bin 24044 -> 0 bytes .../audiofile/all/test_package/test_package.cpp | 11 ++++------- .../audiofile/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 6 insertions(+), 11 deletions(-) delete mode 100644 recipes/audiofile/all/test_package/sine.wav diff --git a/recipes/audiofile/all/test_package/conanfile.py b/recipes/audiofile/all/test_package/conanfile.py index fb1d035fc5b120..d120a992c06a69 100644 --- a/recipes/audiofile/all/test_package/conanfile.py +++ b/recipes/audiofile/all/test_package/conanfile.py @@ -22,5 +22,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - wav_path = os.path.join(self.source_folder, "sine.wav") - self.run(f"{bin_path} {wav_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/audiofile/all/test_package/sine.wav b/recipes/audiofile/all/test_package/sine.wav deleted file mode 100644 index a3225d12bf297b5ad29e601bb30edb6466d229f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24044 zcmeI4=}VMR6vp3N+BBF-Nm4ZPgQ8_n5f%z+W|SZlrDTc=ZH7vy;Zi!Ipe)^wh{<;o^cwgG{Y+X)+wd6upX;1Kp zq1Juvz8hj(UHo$gqHEerpX!4=&ty22nI~#H({4luzbO9pefn-dO?cdsH<{H_r|NUe zsXci`)EV2OLJ&VWl5{a@-%vKVtJq6fiF9UYLC7jD^7T5o-RB&5TBCl zvu%8-X?W%6qT|+0gIBt@SB97@o-@_Sznb3d@0|QO?(=I^OivStYH(&*vAXL@Q7c$g8?Mq0TtLl2u{#~8RX!H1zcbRFWA8mrtpO| z+=&2jAR5Gk$Pgc*q;=)^x*}FuS6WxfSF@O}$nDw(wGV0^RDGrTN_G3Zt=qK^I$pQy zJgD=a`V8tbsDGvYmHMLUi>fcGe!KeZy2tsS?s0S;bo@N1dmNnybsp4taITyOm9Lbq zl&_Sp=1RU&zg_uC`AYdp`AYqE_1o2NSHJ!5_S9|m`f9G!SK0?1&sW4szaMn)_k&tjT36Z!XLlb|-LAS_x*yV$k)Din zilkE{{VVBTN&iZ^YSLAcUZ3>(qys4(Na;XIUsU>{(yf(lt@Mzkhb%p0>1_X-I@`Yi Dt1!Aa diff --git a/recipes/audiofile/all/test_package/test_package.cpp b/recipes/audiofile/all/test_package/test_package.cpp index d95bc64031cdab..906aa9efa03275 100644 --- a/recipes/audiofile/all/test_package/test_package.cpp +++ b/recipes/audiofile/all/test_package/test_package.cpp @@ -1,18 +1,15 @@ // workaround for a missing include in v1.0.9 and earlier +#include +#include #include - #include -#include + int main(int argc, char **argv) { - if (argc < 2) { - std::cerr << "Need at least one argument" << std::endl; - return 1; - } AudioFile audioFile; - audioFile.load(argv[1]); + audioFile.load("fake-file.wav"); audioFile.printSummary(); return 0; } diff --git a/recipes/audiofile/all/test_v1_package/conanfile.py b/recipes/audiofile/all/test_v1_package/conanfile.py index 21642db6ce1baa..38f4483872d47f 100644 --- a/recipes/audiofile/all/test_v1_package/conanfile.py +++ b/recipes/audiofile/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - wav_path = os.path.join(self.source_folder, os.pardir, "test_package", "sine.wav") - self.run(f"{bin_path} {wav_path}", run_environment=True) + self.run(bin_path, run_environment=True) From 6915c86a24f458e357dcae28be7acf8c4a28080d Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Wed, 29 May 2024 11:33:53 +0200 Subject: [PATCH 74/83] (#24138) openfbx: refactor test package --- recipes/openfbx/all/test_package/conanfile.py | 3 +-- recipes/openfbx/all/test_package/d.fbx | Bin 27660 -> 0 bytes .../openfbx/all/test_package/test_package.cpp | 12 +++--------- .../openfbx/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 5 insertions(+), 13 deletions(-) delete mode 100644 recipes/openfbx/all/test_package/d.fbx diff --git a/recipes/openfbx/all/test_package/conanfile.py b/recipes/openfbx/all/test_package/conanfile.py index 7635e9e2837582..0a6bc68712d901 100644 --- a/recipes/openfbx/all/test_package/conanfile.py +++ b/recipes/openfbx/all/test_package/conanfile.py @@ -23,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - fbx_path = os.path.join(self.source_folder, "d.fbx") - self.run(f"{bin_path} {fbx_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/openfbx/all/test_package/d.fbx b/recipes/openfbx/all/test_package/d.fbx deleted file mode 100644 index 147ec354d2be2eada0da183dc48bfe3e6da36496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27660 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 U{ty57-Dmf_KJKN=mu8OrUs~?e%m4rY diff --git a/recipes/openfbx/all/test_package/test_package.cpp b/recipes/openfbx/all/test_package/test_package.cpp index be802370b1f876..a45770bbd55622 100644 --- a/recipes/openfbx/all/test_package/test_package.cpp +++ b/recipes/openfbx/all/test_package/test_package.cpp @@ -5,17 +5,11 @@ #include int main(int argc, char **argv) { - if (argc < 2) { - std::cerr << "Need at least one argument" << std::endl; - return -1; - } - std::ifstream in_file(argv[1], std::ios::binary); - in_file.seekg(0, std::ios::end); - int file_size = static_cast(in_file.tellg()); - std::vector content(file_size); + std::vector content(13); + ofbx::IScene *g_scene = ofbx::load(&content[0], 13, static_cast(ofbx::LoadFlags::TRIANGULATE)); - ofbx::IScene *g_scene = ofbx::load(&content[0], file_size, static_cast(ofbx::LoadFlags::TRIANGULATE)); + std::cout << "Test: " << g_scene << std::endl; return 0; } diff --git a/recipes/openfbx/all/test_v1_package/conanfile.py b/recipes/openfbx/all/test_v1_package/conanfile.py index fad029416492df..38f4483872d47f 100644 --- a/recipes/openfbx/all/test_v1_package/conanfile.py +++ b/recipes/openfbx/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - fbx_path = os.path.join(self.source_folder, os.pardir, "test_package", "d.fbx") - self.run(f"{bin_path} {fbx_path}", run_environment=True) + self.run(bin_path, run_environment=True) From 5423f66a428a448afba08c2b082bbe5cf36d5763 Mon Sep 17 00:00:00 2001 From: Ernesto de Gracia Herranz Date: Wed, 29 May 2024 11:54:11 +0200 Subject: [PATCH 75/83] (#24141) ktx: refactor test package --- recipes/ktx/all/test_package/conanfile.py | 3 +-- recipes/ktx/all/test_package/etc1.ktx | Bin 8260 -> 0 bytes recipes/ktx/all/test_package/test_package.c | 8 ++------ recipes/ktx/all/test_v1_package/conanfile.py | 3 +-- 4 files changed, 4 insertions(+), 10 deletions(-) delete mode 100644 recipes/ktx/all/test_package/etc1.ktx diff --git a/recipes/ktx/all/test_package/conanfile.py b/recipes/ktx/all/test_package/conanfile.py index 5ec8993308c18b..98ab55852ad565 100644 --- a/recipes/ktx/all/test_package/conanfile.py +++ b/recipes/ktx/all/test_package/conanfile.py @@ -23,5 +23,4 @@ def build(self): def test(self): if can_run(self): bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") - ktx_path = os.path.join(self.source_folder, "etc1.ktx") - self.run(f"{bin_path} {ktx_path}", env="conanrun") + self.run(bin_path, env="conanrun") diff --git a/recipes/ktx/all/test_package/etc1.ktx b/recipes/ktx/all/test_package/etc1.ktx deleted file mode 100644 index ff6f8186fd1db5a827b4b1bc17a92f51f3363cbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8260 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 diff --git a/recipes/ktx/all/test_package/test_package.c b/recipes/ktx/all/test_package/test_package.c index f877690cdb0d65..ebd19452339abe 100644 --- a/recipes/ktx/all/test_package/test_package.c +++ b/recipes/ktx/all/test_package/test_package.c @@ -4,16 +4,12 @@ int main(int argc, char **argv) { - if (argc < 2) { - fprintf(stderr, "Need at least one argument\n"); - return 1; - } - ktxTexture* texture; KTX_error_code result; - result = ktxTexture_CreateFromNamedFile(argv[1], + result = ktxTexture_CreateFromNamedFile("fake-file.ktx", KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture); + printf("Test: %s\n", ktxErrorString(result)); return 0; } diff --git a/recipes/ktx/all/test_v1_package/conanfile.py b/recipes/ktx/all/test_v1_package/conanfile.py index d6484909910f33..38f4483872d47f 100644 --- a/recipes/ktx/all/test_v1_package/conanfile.py +++ b/recipes/ktx/all/test_v1_package/conanfile.py @@ -14,5 +14,4 @@ def build(self): def test(self): if not tools.cross_building(self): bin_path = os.path.join("bin", "test_package") - ktx_path = os.path.join(self.source_folder, os.pardir, "test_package", "etc1.ktx") - self.run(f"{bin_path} {ktx_path}", run_environment=True) + self.run(bin_path, run_environment=True) From 7d3a67260ba3ee4e30919d3b34a4eae433ad4bfb Mon Sep 17 00:00:00 2001 From: choll Date: Wed, 29 May 2024 12:49:37 +0100 Subject: [PATCH 76/83] (#22584) xtr: bump to 2.1.1 --- recipes/xtr/all/conandata.yml | 3 +++ recipes/xtr/config.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/recipes/xtr/all/conandata.yml b/recipes/xtr/all/conandata.yml index 1e78ef99a9e55a..2ce24b56ad5da1 100644 --- a/recipes/xtr/all/conandata.yml +++ b/recipes/xtr/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "2.1.1": + url: "https://github.com/choll/xtr/archive/refs/tags/2.1.1.tar.gz" + sha256: "dbd8d1fbb5308329fe21bbe704206e2e69a5d49696959d43a2504ea1bec00140" "2.1.0": url: "https://github.com/choll/xtr/archive/refs/tags/2.1.0.tar.gz" sha256: "5abe2e53d91a893d63998968450d9bbfc23c45f552c81e2b7d17694699ab17c4" diff --git a/recipes/xtr/config.yml b/recipes/xtr/config.yml index 4f7c23f02e7c58..06db99424bd4b8 100644 --- a/recipes/xtr/config.yml +++ b/recipes/xtr/config.yml @@ -1,4 +1,6 @@ versions: + "2.1.1": + folder: all "2.1.0": folder: all "2.0.1": From 5ed402439fee24f2c1cfe49515dfdcbbcf2edccf Mon Sep 17 00:00:00 2001 From: Luis Caro Campos <3535649+jcar87@users.noreply.github.com> Date: Wed, 29 May 2024 14:22:09 +0100 Subject: [PATCH 77/83] (#24152) arcus: update protobuf to 3.21.12 --- recipes/arcus/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/arcus/all/conanfile.py b/recipes/arcus/all/conanfile.py index 8f6e301a393139..38ae3416bb350a 100644 --- a/recipes/arcus/all/conanfile.py +++ b/recipes/arcus/all/conanfile.py @@ -45,7 +45,7 @@ def layout(self): cmake_layout(self, src_folder="src") def requirements(self): - self.requires("protobuf/3.21.9") + self.requires("protobuf/3.21.12") def validate(self): if self.settings.compiler.get_safe("cppstd"): From 59158d468684aae7c718deec3b5a80486f3c48a1 Mon Sep 17 00:00:00 2001 From: tbsuht <126770680+tbsuht@users.noreply.github.com> Date: Wed, 29 May 2024 15:50:18 +0200 Subject: [PATCH 78/83] (#23069) new recipe: libyang * Add recipe for libyang * remove import * add missing attrs * fix url * review * license file * filename, cmake dep, move share * wip windows * wip windows * wip * only yang files, windows todo * Update recipes/libyang/all/conanfile.py * Update recipes/libyang/all/conanfile.py * Update recipes/libyang/all/conanfile.py * Update recipes/libyang/all/test_package/CMakeLists.txt --------- Co-authored-by: Ernesto de Gracia Herranz --- recipes/libyang/all/conandata.yml | 4 + recipes/libyang/all/conanfile.py | 82 +++++++++++++++++++ .../libyang/all/test_package/CMakeLists.txt | 7 ++ recipes/libyang/all/test_package/conanfile.py | 27 ++++++ .../libyang/all/test_package/test_package.c | 11 +++ recipes/libyang/config.yml | 3 + 6 files changed, 134 insertions(+) create mode 100644 recipes/libyang/all/conandata.yml create mode 100644 recipes/libyang/all/conanfile.py create mode 100644 recipes/libyang/all/test_package/CMakeLists.txt create mode 100644 recipes/libyang/all/test_package/conanfile.py create mode 100644 recipes/libyang/all/test_package/test_package.c create mode 100644 recipes/libyang/config.yml diff --git a/recipes/libyang/all/conandata.yml b/recipes/libyang/all/conandata.yml new file mode 100644 index 00000000000000..f8459393ddff03 --- /dev/null +++ b/recipes/libyang/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "2.1.148": + url: "https://github.com/CESNET/libyang/archive/refs/tags/v2.1.148.tar.gz" + sha256: "77a0aaaeb3df720aeb70d6896e32e2c2be099d48df73e3cfb52567051af3e44b" diff --git a/recipes/libyang/all/conanfile.py b/recipes/libyang/all/conanfile.py new file mode 100644 index 00000000000000..2567464f946186 --- /dev/null +++ b/recipes/libyang/all/conanfile.py @@ -0,0 +1,82 @@ +import os + +from conan import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout, CMakeDeps +from conan.tools.files import get, rmdir, copy +from conan.errors import ConanInvalidConfiguration + +required_conan_version = ">=1.53.0" + + +class LibYangConan(ConanFile): + name = "libyang" + license = "BSD-3-Clause" + url = "https://github.com/conan-io/conan-center-index" + description = "YANG data modeling language library" + homepage = "https://github.com/CESNET/libyang" + topics = ("yang", "bsd", "netconf", "restconf", "yin") + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], + "fPIC": [True, False]} + default_options = { + "shared": False, + "fPIC": True + } + + + def validate(self): + # TODO For Windows support: https://github.com/CESNET/libyang?tab=readme-ov-file#windows-build-requirements + # CMake Error at CMakeLists.txt:386 (find_package): + # By not providing "Findpthreads.cmake" in CMAKE_MODULE_PATH this project has + if self.settings.os == "Windows": + raise ConanInvalidConfiguration( + f"{self.ref} Conan recipe is not prepared to work on Windows. Contributions are welcome.") + + def requirements(self): + self.requires("pcre2/10.42", transitive_headers=True) + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + self.settings.rm_safe("compiler.cppstd") + self.settings.rm_safe("compiler.libcxx") + + def layout(self): + cmake_layout(self, src_folder="src") + + def source(self): + get(self, **self.conan_data["sources"][self.version], + destination=self.source_folder, strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["ENABLE_TESTS"] = False + tc.variables["ENABLE_VALGRIND_TESTS"] = False + tc.variables["ENABLE_STATIC"] = not self.options.shared + tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0077"] = "NEW" + tc.generate() + tc = CMakeDeps(self) + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + copy(self, "LICENSE", self.source_folder, + os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) + cmake.install() + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + # move *.yang files from /share to /res + copy(self, "*.yang", os.path.join(self.package_folder, "share"), + os.path.join(self.package_folder, "res", "share")) + rmdir(self, os.path.join(self.package_folder, "share")) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "LibYANG") + self.cpp_info.libs = ["yang"] + self.cpp_info.resdirs = ["res"] + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.system_libs.extend(["pthread", "dl", "m"]) diff --git a/recipes/libyang/all/test_package/CMakeLists.txt b/recipes/libyang/all/test_package/CMakeLists.txt new file mode 100644 index 00000000000000..2a5a447e67b6b3 --- /dev/null +++ b/recipes/libyang/all/test_package/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package C) + +find_package(LibYANG REQUIRED) + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} PRIVATE libyang::libyang) diff --git a/recipes/libyang/all/test_package/conanfile.py b/recipes/libyang/all/test_package/conanfile.py new file mode 100644 index 00000000000000..ec1844a7859135 --- /dev/null +++ b/recipes/libyang/all/test_package/conanfile.py @@ -0,0 +1,27 @@ +import os + +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake + + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/libyang/all/test_package/test_package.c b/recipes/libyang/all/test_package/test_package.c new file mode 100644 index 00000000000000..b892125a1218e3 --- /dev/null +++ b/recipes/libyang/all/test_package/test_package.c @@ -0,0 +1,11 @@ +#include + +int main() +{ + struct ly_ctx *ctx = NULL; + if ( ly_ctx_new( NULL, 0, &ctx ) ) + { + return 1; + } + return 0; +} diff --git a/recipes/libyang/config.yml b/recipes/libyang/config.yml new file mode 100644 index 00000000000000..78864b67abe0f2 --- /dev/null +++ b/recipes/libyang/config.yml @@ -0,0 +1,3 @@ +versions: + "2.1.148": + folder: "all" From a170c3b9b516740ffec1336b6121c42b6b79e39a Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Wed, 29 May 2024 09:14:07 -0500 Subject: [PATCH 79/83] (#24147) cpptrace: Add 0.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cpptrace: Add 0.6.0 * Fix URL --------- Co-authored-by: Rubén Rincón Blanco --- recipes/cpptrace/all/conandata.yml | 4 ++++ recipes/cpptrace/config.yml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/recipes/cpptrace/all/conandata.yml b/recipes/cpptrace/all/conandata.yml index d5f27bb8b9c86d..7157c7a227bca8 100644 --- a/recipes/cpptrace/all/conandata.yml +++ b/recipes/cpptrace/all/conandata.yml @@ -1,5 +1,9 @@ sources: # Newer versions at the top + "0.6.0": + url: + - "https://github.com/jeremy-rifkin/cpptrace/archive/refs/tags/v0.6.0.tar.gz" + sha256: "7c2996f03d15f61016bc81fe7fa5220b1cc42498333c5c0e699ad2f96b918b96" "0.5.4": url: - "https://github.com/jeremy-rifkin/cpptrace/archive/refs/tags/v0.5.4.tar.gz" diff --git a/recipes/cpptrace/config.yml b/recipes/cpptrace/config.yml index fb96f982bc2720..7eb7efe0a9b09d 100644 --- a/recipes/cpptrace/config.yml +++ b/recipes/cpptrace/config.yml @@ -1,5 +1,7 @@ versions: # Newer versions at the top + "0.6.0": + folder: all "0.5.4": folder: all "0.5.3": From 0ff926d2b637aa4e71e4ca346f5c9e09ae576ee9 Mon Sep 17 00:00:00 2001 From: Luis Caro Campos <3535649+jcar87@users.noreply.github.com> Date: Wed, 29 May 2024 15:33:23 +0100 Subject: [PATCH 80/83] Deprecate alert-community action Remove unmaintained alert community action. Decided by the team due to: - contributes to PR comment noise - the alerted contributors rarely react to these - confuses casual contributors --- .github/actions/alert-community/action.yml | 31 -- .github/workflows/alert-community.yml | 472 --------------------- 2 files changed, 503 deletions(-) delete mode 100644 .github/actions/alert-community/action.yml delete mode 100644 .github/workflows/alert-community.yml diff --git a/.github/actions/alert-community/action.yml b/.github/actions/alert-community/action.yml deleted file mode 100644 index ca390cd38b4e74..00000000000000 --- a/.github/actions/alert-community/action.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: "Alert Community" -description: "Comment on pull request if certain files changes" -author: "prince-chrismc" -inputs: - files: - description: "Check for changes using only this list of files (Defaults to the entire repo)" - required: true - default: "" - reviewers: - description: "List of users to mention (make sure to include the @)" - required: true - default: "" - -runs: - using: "composite" - steps: - # Assume the repo checked out the code since this is running - - uses: ./.github/actions/pr_changed_files - id: changed_files - with: - files: ${{ inputs.files }} - - if: always() && steps.changed_files.outputs.any_changed == 'true' - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `:robot: **Beep Boop**! This pull request is making changes to '${{ inputs.files }}'.\n\n:wave: ${{ inputs.reviewers }} you might be interested. :wink:` - }) diff --git a/.github/workflows/alert-community.yml b/.github/workflows/alert-community.yml deleted file mode 100644 index 76a1a4165dd49b..00000000000000 --- a/.github/workflows/alert-community.yml +++ /dev/null @@ -1,472 +0,0 @@ -name: "[service] Alert Community" - -on: - pull_request_target: - types: [opened] - -env: - PYVER: "3.10" - -jobs: - comment: - if: github.repository == 'conan-io/conan-center-index' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - ref: master - - - uses: ./.github/actions/alert-community - with: - files: "docs/*/*" - reviewers: "@prince-chrismc @MartinDelille @Croydon" - - - uses: ./.github/actions/alert-community - with: - files: ".github/*/*" - reviewers: "@ericLemanissier @Croydon" - - - uses: ./.github/actions/alert-community - with: - files: "linter/*/*" - reviewers: "@ericLemanissier @Croydon" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/aaf/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/abseil/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/armadillo/*/*" - reviewers: "@samuel-emrys" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/avahi/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/b2/*/*" - reviewers: "@grafikrobot" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/bandit/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/benchmark/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/boost/*/*" - reviewers: "@grafikrobot @Hopobcn @jwillikers @paulharris" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/boost-ext-ut/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/bzip2/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/cereal/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/cmake/*/*" - reviewers: "@Croydon" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/cppcheck/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/create-dmg/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/dbus/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/double-conversion/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/eigen/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/elfio/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/ffmpeg/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/fmt/*/*" - reviewers: "@Hopobcn @jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/folly/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/foxi/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/fp16/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/g3log/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/gcc/*/*" - reviewers: "@samuel-emrys" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/geotrans/*/*" - reviewers: "@samuel-emrys" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/gflags/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/glew/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/glfw/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/glog/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/gtest/*/*" - reviewers: "@Hopobcn @jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/imath/*/*" - reviewers: "@irieger" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/imgui/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/implot/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/jemalloc/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libalsa/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libarchive/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libbacktrace/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libcap/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libcurl/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libdwarf/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libelf/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libevent/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libffi/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libiberty/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libiconv/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libltc/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libpng/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libraw/*/*" - reviewers: "@irieger" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libsodium/*/*" - reviewers: "@Hopobcn @paulharris" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libspatialite/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libunwind/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libuuid/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libxml2/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/llvm-core/*/*" - reviewers: "@Hopobcn @paulharris" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/lyra/*/*" - reviewers: "@grafikrobot" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/lz4/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/mocknetworkaccessmanager/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/ms-gsl/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/nlohmann_json/*/*" - reviewers: "@Hopobcn @jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/onnx/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/openapi-generator/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/opencolorio/*/*" - reviewers: "@irieger" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/openexr/*/*" - reviewers: "@irieger" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/opengl/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/opengl-registry/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/openimageio/*/*" - reviewers: "@irieger" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/openssl/*/*" - reviewers: "@Hopobcn @Croydon" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/protobuf/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/psimd/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/qtawesome/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/qt/*/*" - reviewers: "@ericLemanissier @jwillikers @MartinDelille @paulharris" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/quazip/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/rtmidi/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/sentry-*/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/shapelib/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/snappy/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/snowhouse/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/uncrustify/*/*" - reviewers: "@MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/wayland/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/wayland-protocols/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/xkbcommon/*/*" - reviewers: "@jwillikers" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/xorg/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/yaml-cpp/*/*" - reviewers: "@jwillikers @MartinDelille" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/xz_utils/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/zlib/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/zstd/*/*" - reviewers: "@Hopobcn" - - - uses: ./.github/actions/alert-community - with: - files: "recipes/libhal/*/*" - reviewers: "@kammce" From 5c2fcafe221487ebaacbf6ded5ad32f4c73c3f6f Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Wed, 29 May 2024 17:05:34 +0200 Subject: [PATCH 81/83] (#24121) [geographiclib] Skip packaging tools when not requested * skip packaging tool when not requested Signed-off-by: Uilian Ries * Only install tools when requested Signed-off-by: Uilian Ries * apply suffix only when shared and windows Signed-off-by: Uilian Ries * Add suffix when building with msvc Signed-off-by: Uilian Ries * Add libmath as system library Signed-off-by: Uilian Ries --------- Signed-off-by: Uilian Ries --- recipes/geographiclib/all/conanfile.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/recipes/geographiclib/all/conanfile.py b/recipes/geographiclib/all/conanfile.py index 0fb1787e608594..64388bbb926e0c 100644 --- a/recipes/geographiclib/all/conanfile.py +++ b/recipes/geographiclib/all/conanfile.py @@ -3,10 +3,11 @@ from conan.tools.build import check_min_cppstd from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout from conan.tools.files import ( - apply_conandata_patches, collect_libs, copy, export_conandata_patches, get, + apply_conandata_patches, copy, export_conandata_patches, get, replace_in_file, rm, rmdir ) from conan.tools.scm import Version +from conan.tools.microsoft import is_msvc import os required_conan_version = ">=1.53.0" @@ -105,11 +106,6 @@ def _patch_sources(self): replace_in_file(self, cmakelists, "add_subdirectory (js)", "") # Don't install system libs replace_in_file(self, cmakelists, "include (InstallRequiredSystemLibraries)", "") - # Don't build tools if asked - if not self.options.tools: - replace_in_file(self, cmakelists, "add_subdirectory (tools)", "") - replace_in_file(self, os.path.join(self.source_folder, "cmake", "CMakeLists.txt"), - "${TOOLS}", "") # Disable -Werror replace_in_file(self, cmakelists, "-Werror", "") replace_in_file(self, cmakelists, "/WX", "") @@ -132,13 +128,22 @@ def package(self): ]: rmdir(self, os.path.join(os.path.join(self.package_folder, folder))) rm(self, "*.pdb", os.path.join(self.package_folder, "bin")) + if not self.options.tools: + rmdir(self, os.path.join(self.package_folder, "sbin")) + bin_files = [it for it in os.listdir(os.path.join(self.package_folder, "bin")) if not it.endswith(".dll")] + for it in bin_files: + rm(self, it, os.path.join(self.package_folder, "bin")) def package_info(self): self.cpp_info.set_property("cmake_file_name", "geographiclib") self.cpp_info.set_property("cmake_target_name", "GeographicLib::GeographicLib") self.cpp_info.set_property("pkg_config_name", "geographiclib") - self.cpp_info.libs = collect_libs(self) + suffix = "_d" if self.settings.build_type == "Debug" and is_msvc(self) else "" + suffix += "-i" if is_msvc(self) and self.options.shared else "" + self.cpp_info.libs = [f"GeographicLib{suffix}"] if Version(self.version) >= "2" else [f"Geographic{suffix}"] self.cpp_info.defines.append("GEOGRAPHICLIB_SHARED_LIB={}".format("1" if self.options.shared else "0")) + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.system_libs = ["m"] # TODO: to remove in conan v2 once cmake_find_package_* generators removed self.cpp_info.filenames["cmake_find_package"] = "geographiclib" From 76029686e7f7ecd8782aad79f0053da59f1c895b Mon Sep 17 00:00:00 2001 From: Nicolai Grodzitski Date: Wed, 29 May 2024 17:25:40 +0200 Subject: [PATCH 82/83] (#21575) Add logr v0.7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add logr v0.7.0 * Add header-only attribute to logr * Make fmt version flexible * Update recipes/logr/v0.7/conanfile.py Co-authored-by: Uilian Ries * Change backend options arrangement * Update recipes/logr/v0.7/conanfile.py Co-authored-by: Uilian Ries * Update recipes/logr/v0.7/conanfile.py Co-authored-by: Uilian Ries * Update recipes/logr/v0.7/conanfile.py Co-authored-by: Uilian Ries * Update recipes/logr/v0.7/conanfile.py Co-authored-by: Uilian Ries * Update recipes/logr/v0.7/conanfile.py * Apply suggestions from code review * Switch to `with_xxx` dependency definition * Fix test_package * Simplify test_package --------- Co-authored-by: Uilian Ries Co-authored-by: Rubén Rincón Blanco --- recipes/logr/config.yml | 2 + recipes/logr/v0.7/conandata.yml | 4 + recipes/logr/v0.7/conanfile.py | 140 ++++++++++++++++++ recipes/logr/v0.7/test_package/CMakeLists.txt | 8 + recipes/logr/v0.7/test_package/conanfile.py | 25 ++++ .../logr/v0.7/test_package/test_package.cpp | 46 ++++++ 6 files changed, 225 insertions(+) create mode 100644 recipes/logr/v0.7/conandata.yml create mode 100644 recipes/logr/v0.7/conanfile.py create mode 100644 recipes/logr/v0.7/test_package/CMakeLists.txt create mode 100644 recipes/logr/v0.7/test_package/conanfile.py create mode 100644 recipes/logr/v0.7/test_package/test_package.cpp diff --git a/recipes/logr/config.yml b/recipes/logr/config.yml index 71c5abd93f78cc..afa3309f2914cf 100644 --- a/recipes/logr/config.yml +++ b/recipes/logr/config.yml @@ -1,4 +1,6 @@ versions: + "0.7.0": + folder: v0.7 "0.6.0": folder: all "0.5.1": diff --git a/recipes/logr/v0.7/conandata.yml b/recipes/logr/v0.7/conandata.yml new file mode 100644 index 00000000000000..745404ba635bcf --- /dev/null +++ b/recipes/logr/v0.7/conandata.yml @@ -0,0 +1,4 @@ +sources: + "0.7.0": + url: "https://github.com/ngrodzitski/logr/archive/v0.7.0.tar.gz" + sha256: "b43b6624a9223bcb0a11c83afb3df69ef4388d42abef9abb1b80fbc85b890287" diff --git a/recipes/logr/v0.7/conanfile.py b/recipes/logr/v0.7/conanfile.py new file mode 100644 index 00000000000000..7eee46ae5d249e --- /dev/null +++ b/recipes/logr/v0.7/conanfile.py @@ -0,0 +1,140 @@ +from conan import ConanFile +from conan.tools.build import check_min_cppstd +from conan.tools.files import get, copy, rm +from conan.tools.layout import basic_layout +from conan.tools.scm import Version +from conan.errors import ConanInvalidConfiguration +from conan.tools.microsoft import check_min_vs +import os + +required_conan_version = ">=1.50.0" + + +class LogrConan(ConanFile): + name = "logr" + description = ( + "Logger frontend substitution for spdlog, glog, etc " + "for server/desktop applications" + ) + license = "BSD-3-Clause" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/ngrodzitski/logr" + topics = ("logger", "development", "util", "utils", "header-only") + settings = "os", "arch", "compiler", "build_type" + package_type = "header-library" + options = { + "with_spdlog": [True, False], + "with_glog": [True, False], + "with_log4cplus": [True, False], + "with_boostlog": [True, False], + } + default_options = { + "with_spdlog": True, + "with_glog": False, + "with_log4cplus": False, + "with_boostlog": False, + } + + @property + def _min_cppstd(self): + return 17 + + @property + def _minimum_compilers_version(self): + return { + "gcc": "10", + "clang": "11", + "apple-clang": "12", + } + + def layout(self): + basic_layout(self, src_folder="src") + + def requirements(self): + self.requires("fmt/10.2.1") + + if self.options.with_spdlog: + self.requires("spdlog/1.12.0") + + if self.options.with_glog: + self.requires("glog/0.6.0") + + if self.options.with_log4cplus: + self.requires("log4cplus/2.1.0") + + if self.options.with_boostlog: + self.requires("boost/1.83.0") + + def package_id(self): + self.info.settings.clear() + + def validate(self): + if self.settings.get_safe("compiler.cppstd"): + check_min_cppstd(self, self._min_cppstd) + + check_min_vs(self, 192) + + minimum_version = self._minimum_compilers_version.get(str(self.settings.compiler), False) + if minimum_version and Version(self.settings.compiler.version) < minimum_version: + raise ConanInvalidConfiguration( + f"{self.ref} requires minimum {self.settings.compiler} version of {minimum_version}" + ) + + def build(self): + pass + + def source(self): + get(self, **self.conan_data["sources"][self.version], + destination=self.source_folder, strip_root=True) + + def package(self): + copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) + copy(self, "*.*pp", src=os.path.join(self.source_folder, "logr", "include"), dst=os.path.join(self.package_folder, "include")) + + include_folder = os.path.join(self.package_folder, "include", "logr") + if not self.options.with_spdlog: + rm(self, "spdlog_backend.hpp", include_folder) + + if not self.options.with_glog: + rm(self, "glog_backend.hpp", include_folder) + + if not self.options.with_log4cplus: + rm(self, "log4cplus_backend.hpp", include_folder) + + if not self.options.with_boostlog: + rm(self, "boostlog_backend.hpp", include_folder) + + def package_info(self): + self.cpp_info.bindirs = [] + self.cpp_info.libdirs = [] + + self.cpp_info.components["logr_base"].includedirs = ["include"] + self.cpp_info.components["logr_base"].requires = ["fmt::fmt"] + + if self.options.with_spdlog: + self.cpp_info.components["logr_spdlog"].includedirs = [] + self.cpp_info.components["logr_spdlog"].requires = [ + "logr_base", + "spdlog::spdlog", + ] + + if self.options.with_glog: + self.cpp_info.components["logr_glog"].includedirs = [] + self.cpp_info.components["logr_glog"].requires = [ + "logr_base", + "glog::glog", + ] + + if self.options.with_log4cplus: + self.cpp_info.components["logr_log4cplus"].includedirs = [] + self.cpp_info.components["logr_log4cplus"].requires = [ + "logr_base", + "log4cplus::log4cplus", + ] + + if self.options.with_boostlog: + self.cpp_info.components["logr_boostlog"].includedirs = [] + self.cpp_info.components["logr_boostlog"].requires = [ + "logr_base", + "boost::log", + ] diff --git a/recipes/logr/v0.7/test_package/CMakeLists.txt b/recipes/logr/v0.7/test_package/CMakeLists.txt new file mode 100644 index 00000000000000..5e62d2b8b4d923 --- /dev/null +++ b/recipes/logr/v0.7/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.8) +project(test_package LANGUAGES CXX) + +find_package(logr REQUIRED) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PRIVATE logr::logr) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) diff --git a/recipes/logr/v0.7/test_package/conanfile.py b/recipes/logr/v0.7/test_package/conanfile.py new file mode 100644 index 00000000000000..f5cf204295e195 --- /dev/null +++ b/recipes/logr/v0.7/test_package/conanfile.py @@ -0,0 +1,25 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake +import os + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/logr/v0.7/test_package/test_package.cpp b/recipes/logr/v0.7/test_package/test_package.cpp new file mode 100644 index 00000000000000..27d9ac363797b0 --- /dev/null +++ b/recipes/logr/v0.7/test_package/test_package.cpp @@ -0,0 +1,46 @@ +// Logger frontend library for C++. +// +// Copyright (c) 2020 - present, Nicolai Grodzitski +// See LICENSE file in the root of the project. + + +#include + +#include +#include + + +int main() { + auto logger = logr::basic_ostream_logger_t<1024u>(std::cout); + + logger.info( "Hello World! [raw message]" ); + logger.info( LOGR_SRC_LOCATION, "Hello World! [raw message]" ); + + logger.info( []() { return "Hello World! [cb]"; } ); + logger.info( LOGR_SRC_LOCATION, []() { return "Hello World! [cb]"; } ); + + logger.info( []( auto out ) { + format_to( out, "Hello {}! [{}]", "World", "cb with explicit out" ); + } ); + + logger.info( LOGR_SRC_LOCATION, []( auto out ) { + format_to( out, "Hello {}! [{}]", "World", "cb with explicit out" ); + } ); + logger.info( LOGR_SRC_LOCATION, []( auto out ) { + format_to( out, + FMT_STRING( "Hello {}! [{}]" ), + "World", + "cb with explicit out and FMT_STRING" ); + } ); + + logger.info( LOGR_SRC_LOCATION, []( auto out ) { + format_to( out, + fmt::runtime( "Hello {}! [{}]" ), + "World", + "cb with explicit out and runtime-string" ); + } ); + + logger.flush(); + + return 0; +} From 395f6e08d1f279e1b6ca03fa1954ebb403a7f282 Mon Sep 17 00:00:00 2001 From: Luis Caro Campos <3535649+jcar87@users.noreply.github.com> Date: Wed, 29 May 2024 16:41:57 +0100 Subject: [PATCH 83/83] (#24151) foxglove-schemas-protobuf: update protobuf to 3.21.12 --- recipes/foxglove-schemas-protobuf/all/conanfile.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/recipes/foxglove-schemas-protobuf/all/conanfile.py b/recipes/foxglove-schemas-protobuf/all/conanfile.py index 5a5291f2d6ec4d..c4e016879327ef 100644 --- a/recipes/foxglove-schemas-protobuf/all/conanfile.py +++ b/recipes/foxglove-schemas-protobuf/all/conanfile.py @@ -8,7 +8,7 @@ import os -required_conan_version = ">=1.53.0" +required_conan_version = ">=1.60.0" class FoxgloveSchemasProtobufConan(ConanFile): @@ -64,11 +64,11 @@ def validate(self): if self.settings.os == "Windows" and self.options.shared: raise ConanInvalidConfiguration("Windows shared builds are not supported yet.") - def build_requirements(self): - self.tool_requires("protobuf/3.21.9") - def requirements(self): - self.requires("protobuf/3.21.9", transitive_headers=True, transitive_libs=True) + self.requires("protobuf/3.21.12", transitive_headers=True, transitive_libs=True) + + def build_requirements(self): + self.tool_requires("protobuf/") def layout(self): cmake_layout(self, src_folder="src")