diff --git a/recipes/libdeflate/all/conandata.yml b/recipes/libdeflate/all/conandata.yml index 61586a615d807..a438f626651c7 100644 --- a/recipes/libdeflate/all/conandata.yml +++ b/recipes/libdeflate/all/conandata.yml @@ -20,31 +20,25 @@ sources: patches: "1.14": - patch_file: "patches/1.14-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" "1.12": - patch_file: "patches/1.12-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" "1.10": - patch_file: "patches/1.9-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" "1.9": - patch_file: "patches/1.9-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" "1.8": - patch_file: "patches/1.7-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" "1.7": - patch_file: "patches/1.7-0001-fix-makefiles.patch" - base_path: "source_subfolder" patch_description: "disable optimization and apply compiler settings on conan recipe" patch_type: "conan" diff --git a/recipes/libdeflate/all/conanfile.py b/recipes/libdeflate/all/conanfile.py index efb08d8979a19..be1a0e9944a87 100644 --- a/recipes/libdeflate/all/conanfile.py +++ b/recipes/libdeflate/all/conanfile.py @@ -1,9 +1,9 @@ from conan import ConanFile -from conan.tools.microsoft import is_msvc +from conan.tools.microsoft import is_msvc, VCVars, unix_path from conan.tools.files import export_conandata_patches, apply_conandata_patches, get, chdir, rmdir, copy, rm -from conan.tools.env import Environment -from conans import MSBuild, AutoToolsBuildEnvironment, VisualStudioBuildEnvironment -from conans.tools import vcvars, environment_append +from conan.tools.env import VirtualBuildEnv +from conan.tools.layout import basic_layout +from conan.tools.gnu import Autotools, AutotoolsToolchain import os required_conan_version = ">=1.52.0" @@ -26,10 +26,6 @@ class LibdeflateConan(ConanFile): "fPIC": True, } - @property - def _source_subfolder(self): - return "source_subfolder" - @property def _is_clangcl(self): return self.settings.compiler == "clang" and self.settings.os == "Windows" @@ -60,51 +56,66 @@ def configure(self): except Exception: pass + def layout(self): + basic_layout(self, src_folder="src") + def build_requirements(self): if self._settings_build.os == "Windows" and not is_msvc(self): - if "CONAN_BASH_PATH" not in Environment().vars(self, scope="build").keys(): + self.win_bash = True + if not self.conf.get("tools.microsoft.bash:path", default=False, check_type=str): self.tool_requires("msys2/cci.latest") def source(self): - get(self, **self.conan_data["sources"][self.version], destination=self._source_subfolder, strip_root=True) + get(self, **self.conan_data["sources"][self.version], destination=self.source_folder, strip_root=True) + + def generate(self): + env = VirtualBuildEnv(self) + env.generate() + + if is_msvc(self) or self._is_clangcl: + vc = VCVars(self) + vc.generate() + else: + tc = AutotoolsToolchain(self) + tc.generate() - def _build_msvc(self): - with chdir(self, self._source_subfolder): - with vcvars(self), environment_append(VisualStudioBuildEnvironment(self).vars): - target = "libdeflate.dll" if self.options.shared else "libdeflatestatic.lib" - self.run("nmake /f Makefile.msc {}".format(target)) + def _build_nmake(self): + with chdir(self, self.source_folder): + target = "libdeflate.dll" if self.options.shared else "libdeflatestatic.lib" + self.run(f"nmake /f Makefile.msc {target}") def _build_make(self): - autotools = AutoToolsBuildEnvironment(self, win_bash=(self._settings_build.os == "Windows")) - with chdir(self, self._source_subfolder): + autotools = Autotools(self) + with chdir(self, self.source_folder): autotools.make() def build(self): apply_conandata_patches(self) if is_msvc(self) or self._is_clangcl: - self._build_msvc() + self._build_nmake() else: self._build_make() def _package_windows(self): - self.copy("libdeflate.h", dst="include", src=self._source_subfolder) + copy(self, "libdeflate.h", dst=os.path.join(self.package_folder, "include"), src=self.source_folder) if self.options.shared: - self.copy("*deflate.lib", dst="lib", src=self._source_subfolder) - self.copy("*deflate.dll", dst="bin", src=self._source_subfolder) + copy(self, "*deflate.lib", dst=os.path.join(self.package_folder, "lib"), src=self.source_folder) + copy(self, "*deflate.dll", dst=os.path.join(self.package_folder, "bin"), src=self.source_folder) else: - self.copy("*deflatestatic.lib", dst="lib", src=self._source_subfolder) + copy(self, "*deflatestatic.lib", dst=os.path.join(self.package_folder, "lib"), src=self.source_folder) def _package_make(self): - autotools = AutoToolsBuildEnvironment(self, win_bash=(self._settings_build.os == "Windows")) - with chdir(self, self._source_subfolder): - autotools.install(args=["PREFIX={}".format(self.package_folder)]) + autotools = Autotools(self) + with chdir(self, self.source_folder): + # Note: not actually an autotools project, is a Makefile project. + autotools.install(args=[f"PREFIX={unix_path(self, self.package_folder)}"]) rmdir(self, os.path.join(self.package_folder, "bin")) rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) rm(self, "*.a" if self.options.shared else "*.[so|dylib]*", os.path.join(self.package_folder, "lib") ) def package(self): copy(self, "COPYING", - src=os.path.join(self.source_folder, self._source_subfolder), + src=os.path.join(self.source_folder, self.source_folder), dst=os.path.join(self.package_folder, "licenses" )) if self.settings.os == "Windows": @@ -116,6 +127,6 @@ def package_info(self): self.cpp_info.set_property("pkg_config_name", "libdeflate") prefix = "lib" if self.settings.os == "Windows" else "" suffix = "static" if self.settings.os == "Windows" and not self.options.shared else "" - self.cpp_info.libs = ["{0}deflate{1}".format(prefix, suffix)] + self.cpp_info.libs = [f"{prefix}deflate{suffix}"] if self.settings.os == "Windows" and self.options.shared: self.cpp_info.defines = ["LIBDEFLATE_DLL"] diff --git a/recipes/libdeflate/all/test_package/CMakeLists.txt b/recipes/libdeflate/all/test_package/CMakeLists.txt index 7605a460c5f4b..4fdc2b4814ab3 100644 --- a/recipes/libdeflate/all/test_package/CMakeLists.txt +++ b/recipes/libdeflate/all/test_package/CMakeLists.txt @@ -1,10 +1,7 @@ cmake_minimum_required(VERSION 3.1) project(test_package C) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - find_package(libdeflate REQUIRED CONFIG) -add_executable(test_package test_package.c) -target_link_libraries(test_package PRIVATE libdeflate::libdeflate) +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} PRIVATE libdeflate::libdeflate) diff --git a/recipes/libdeflate/all/test_package/conanfile.py b/recipes/libdeflate/all/test_package/conanfile.py index 697dfef261b53..e845ae751a301 100644 --- a/recipes/libdeflate/all/test_package/conanfile.py +++ b/recipes/libdeflate/all/test_package/conanfile.py @@ -1,19 +1,19 @@ -from conans import ConanFile, CMake, tools +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 = "cmake", "cmake_find_package_multi" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" - def build_requirements(self): - if self.settings.os == "Macos" and self.settings.arch == "armv8": - # Workaround for CMake bug with error message: - # Attempting to use @rpath without CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG being - # set. This could be because you are using a Mac OS X version less than 10.5 - # or because CMake's platform configuration is corrupt. - # FIXME: Remove once CMake on macOS/M1 CI runners is upgraded. - self.build_requires("cmake/3.22.0") + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str) def build(self): cmake = CMake(self) @@ -21,6 +21,6 @@ def build(self): 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.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/libdeflate/all/test_v1_package/CMakeLists.txt b/recipes/libdeflate/all/test_v1_package/CMakeLists.txt new file mode 100644 index 0000000000000..925ecbe19e448 --- /dev/null +++ b/recipes/libdeflate/all/test_v1_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.1) +project(test_package) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ + ${CMAKE_CURRENT_BINARY_DIR}/test_package/) diff --git a/recipes/libdeflate/all/test_v1_package/conanfile.py b/recipes/libdeflate/all/test_v1_package/conanfile.py new file mode 100644 index 0000000000000..38f4483872d47 --- /dev/null +++ b/recipes/libdeflate/all/test_v1_package/conanfile.py @@ -0,0 +1,17 @@ +from conans import ConanFile, CMake, tools +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "cmake", "cmake_find_package_multi" + + 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)