From a621e7809776f88549ae7393ef690fb1917813c9 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Fri, 28 Jul 2023 16:26:19 +0300 Subject: [PATCH 1/9] libest: migrate to Conan v2 --- recipes/libest/all/conandata.yml | 2 - recipes/libest/all/conanfile.py | 102 +++++++++--------- .../libest/all/test_package/CMakeLists.txt | 7 +- recipes/libest/all/test_package/conanfile.py | 24 +++-- .../libest/all/test_v1_package/CMakeLists.txt | 8 ++ .../libest/all/test_v1_package/conanfile.py | 16 +++ 6 files changed, 98 insertions(+), 61 deletions(-) create mode 100644 recipes/libest/all/test_v1_package/CMakeLists.txt create mode 100644 recipes/libest/all/test_v1_package/conanfile.py diff --git a/recipes/libest/all/conandata.yml b/recipes/libest/all/conandata.yml index b9d0db8b23c2b..eaebe131cc296 100644 --- a/recipes/libest/all/conandata.yml +++ b/recipes/libest/all/conandata.yml @@ -5,6 +5,4 @@ sources: patches: "3.2.0": - patch_file: "patches/0001-examples-are-broken-don-t-build-them.patch" - base_path: "source_subfolder" - patch_file: "patches/0002-add-extern.patch" - base_path: "source_subfolder" diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index c3b2b423c3d32..a0e5117fc0048 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -1,80 +1,86 @@ import os -from conans import ConanFile, tools, AutoToolsBuildEnvironment -from conans.errors import ConanInvalidConfiguration + +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.apple import is_apple_os +from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get +from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps, AutotoolsDeps +from conan.tools.layout import basic_layout + +required_conan_version = ">=1.53.0" class LibEstConan(ConanFile): name = "libest" - license = "BSD-3-Clause" description = "EST is used for secure certificate enrollment" - topics = ("conan", "EST", "RFC 7030", "certificate enrollment") - homepage = "https://github.com/cisco/libest" + license = "BSD-3-Clause" url = "https://github.com/conan-io/conan-center-index" - settings = "os", "compiler", "build_type", "arch" - exports_sources = "patches/**" - options = {"shared": [True, False], "fPIC": [True, False]} - default_options = {"shared": False, "fPIC": True} - - _autotools = None + homepage = "https://github.com/cisco/libest" + topics = ("EST", "RFC 7030", "certificate enrollment") - @property - def _source_subfolder(self): - return "source_subfolder" + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + } - @property - def _build_subfolder(self): - return "build_subfolder" + def export_sources(self): + export_conandata_patches(self) def config_options(self): if self.settings.os == "Windows": del self.options.fPIC def configure(self): - if self.settings.os in ("Windows", "Macos"): - raise ConanInvalidConfiguration( - "Platform is currently not supported by this recipe") + if self.settings.os == "Windows" or is_apple_os(self): + raise ConanInvalidConfiguration("Platform is currently not supported by this recipe") if self.options.shared: - del self.options.fPIC - del self.settings.compiler.libcxx - del self.settings.compiler.cppstd + self.options.rm_safe("fPIC") + self.settings.rm_safe("compiler.libcxx") + self.settings.rm_safe("compiler.cppstd") + + def layout(self): + basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/1.1.1q") + self.requires("openssl/[>=1.1 <4]") def source(self): - tools.get(**self.conan_data["sources"][self.version]) - extracted_dir = self.name + "-r" + self.version - os.rename(extracted_dir, self._source_subfolder) + get(self, **self.conan_data["sources"][self.version], strip_root=True) - def _configure_autotools(self): - if not self._autotools: - self._autotools = AutoToolsBuildEnvironment(self) - # TODO: - # - Static only build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L140 - # - Release build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L253 - args = [] - if self.options.shared: - args.extend(["--enable-shared", "--disable-static"]) - else: - args.extend(["--disable-shared", "--enable-static"]) - self._autotools.configure(args=args) - return self._autotools + def generate(self): + # TODO: + # - Static only build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L140 + # - Release build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L253 + tc = AutotoolsToolchain(self) + tc.generate() + tc = AutotoolsDeps(self) + tc.generate() + tc = PkgConfigDeps(self) + tc.generate() def build(self): - for patch in self.conan_data.get("patches", {}).get(self.version, []): - tools.patch(**patch) - with tools.chdir(self._source_subfolder): - autotools = self._configure_autotools() + apply_conandata_patches(self) + with chdir(self, self.source_folder): + autotools = Autotools(self) + autotools.configure() autotools.make() def package(self): - self.copy("*LICENSE", src=self._source_subfolder, dst="licenses") - with tools.chdir(self._source_subfolder): - autotools = self._configure_autotools() + copy(self, "*LICENSE", + src=self.source_folder, + dst=os.path.join(self.package_folder, "licenses")) + with chdir(self, self.source_folder): + autotools = Autotools(self) autotools.install() os.unlink(os.path.join(self.package_folder, "lib", "libest.la")) def package_info(self): self.cpp_info.libs = ["est"] - if self.settings.os == "Linux": + if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.system_libs = ["dl", "pthread"] diff --git a/recipes/libest/all/test_package/CMakeLists.txt b/recipes/libest/all/test_package/CMakeLists.txt index 48b855b8a30aa..38cd9db26265b 100644 --- a/recipes/libest/all/test_package/CMakeLists.txt +++ b/recipes/libest/all/test_package/CMakeLists.txt @@ -1,8 +1,7 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.15) project(PackageTest C) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() +find_package(libest REQUIRED CONFIG) add_executable(example example.c) -target_link_libraries(example ${CONAN_LIBS}) +target_link_libraries(example PRIVATE libest::libest) diff --git a/recipes/libest/all/test_package/conanfile.py b/recipes/libest/all/test_package/conanfile.py index 9f2b070b59136..8d52b7021efe1 100644 --- a/recipes/libest/all/test_package/conanfile.py +++ b/recipes/libest/all/test_package/conanfile.py @@ -1,9 +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 CAresTestConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake" + +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) @@ -11,6 +21,6 @@ def build(self): cmake.build() def test(self): - if not tools.cross_building(self.settings): - bin_path = os.path.join("bin", "example") - self.run(bin_path, run_environment=True) + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "example") + self.run(bin_path, env="conanrun") diff --git a/recipes/libest/all/test_v1_package/CMakeLists.txt b/recipes/libest/all/test_v1_package/CMakeLists.txt new file mode 100644 index 0000000000000..91630d79f4abb --- /dev/null +++ b/recipes/libest/all/test_v1_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) +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/libest/all/test_v1_package/conanfile.py b/recipes/libest/all/test_v1_package/conanfile.py new file mode 100644 index 0000000000000..2978938836233 --- /dev/null +++ b/recipes/libest/all/test_v1_package/conanfile.py @@ -0,0 +1,16 @@ +from conans import ConanFile, CMake, tools +import os + +class CAresTestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + 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.settings): + bin_path = os.path.join("bin", "example") + self.run(bin_path, run_environment=True) From f9b52c9441334e4ebe282366d16abe999f093257 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 25 Oct 2023 17:23:45 +0300 Subject: [PATCH 2/9] libest: transitive_libs=True --- recipes/libest/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index a0e5117fc0048..2b069b7671c22 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -48,7 +48,7 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/[>=1.1 <4]") + self.requires("openssl/[>=1.1 <4]", transitive_headers=True, transitive_libs=True) def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) From 5af17d511ec6e928b9b981cc013a05c174712244 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 1 Nov 2023 15:53:22 +0200 Subject: [PATCH 3/9] libest: strip binaries for Release builds --- recipes/libest/all/conanfile.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index 2b069b7671c22..ad43a88b03312 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -54,9 +54,6 @@ def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): - # TODO: - # - Static only build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L140 - # - Release build: https://github.com/cisco/libest/blob/70824ddc09bee661329b9416082d88566efefb32/intro.txt#L253 tc = AutotoolsToolchain(self) tc.generate() tc = AutotoolsDeps(self) @@ -77,7 +74,11 @@ def package(self): dst=os.path.join(self.package_folder, "licenses")) with chdir(self, self.source_folder): autotools = Autotools(self) - autotools.install() + if self.settings.build_type in ["Release", "MinSizeRel"]: + # https://github.com/cisco/libest/blob/r3.2.0/intro.txt#L244-L254 + autotools.install(target="install-strip") + else: + autotools.install() os.unlink(os.path.join(self.package_folder, "lib", "libest.la")) def package_info(self): From a43a822635ae2e933ac699bc038717b992767789 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 1 Nov 2023 15:58:01 +0200 Subject: [PATCH 4/9] libest: run autoreconf To hopefully fix configure: error: cannot run C compiled programs. --- recipes/libest/all/conanfile.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index ad43a88b03312..225003c29ce79 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -3,7 +3,7 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.apple import is_apple_os -from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get +from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, replace_in_file from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps, AutotoolsDeps from conan.tools.layout import basic_layout @@ -50,6 +50,9 @@ def layout(self): def requirements(self): self.requires("openssl/[>=1.1 <4]", transitive_headers=True, transitive_libs=True) + def build_requirements(self): + self.tool_requires("libtool/2.4.7") + def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -61,10 +64,17 @@ def generate(self): tc = PkgConfigDeps(self) tc.generate() - def build(self): + def _patch_sources(self): apply_conandata_patches(self) + # Remove duplicate AM_INIT_AUTOMAKE + replace_in_file(self, os.path.join(self.source_folder, "configure.ac"), + "AM_INIT_AUTOMAKE\n", "") + + def build(self): + self._patch_sources() with chdir(self, self.source_folder): autotools = Autotools(self) + autotools.autoreconf() autotools.configure() autotools.make() From d134df2129c8aae107854be9326431e8bdc7a10f Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Fri, 3 Nov 2023 13:54:14 +0200 Subject: [PATCH 5/9] libest: fix OpenSSL dependency configuration --- recipes/libest/all/conanfile.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index 225003c29ce79..fd4949fd19731 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -4,8 +4,9 @@ from conan.errors import ConanInvalidConfiguration from conan.tools.apple import is_apple_os from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, replace_in_file -from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps, AutotoolsDeps +from conan.tools.gnu import Autotools, AutotoolsToolchain from conan.tools.layout import basic_layout +from conan.tools.microsoft import unix_path required_conan_version = ">=1.53.0" @@ -58,10 +59,7 @@ def source(self): def generate(self): tc = AutotoolsToolchain(self) - tc.generate() - tc = AutotoolsDeps(self) - tc.generate() - tc = PkgConfigDeps(self) + tc.configure_args.append(f"--with-ssl-dir={self.dependencies['openssl'].package_folder}") tc.generate() def _patch_sources(self): From 46790ec88dc91d01ce0f23b79f889e17e53c90bb Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Fri, 3 Nov 2023 15:04:33 +0200 Subject: [PATCH 6/9] libest: OpenSSL flags --- recipes/libest/all/conanfile.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index fd4949fd19731..ba0d7ffd16a68 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -3,10 +3,11 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.apple import is_apple_os +from conan.tools.build import cross_building +from conan.tools.env import VirtualRunEnv from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, replace_in_file -from conan.tools.gnu import Autotools, AutotoolsToolchain +from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps from conan.tools.layout import basic_layout -from conan.tools.microsoft import unix_path required_conan_version = ">=1.53.0" @@ -49,7 +50,7 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/[>=1.1 <4]", transitive_headers=True, transitive_libs=True) + self.requires("openssl/1.1.1w", transitive_headers=True, transitive_libs=True) def build_requirements(self): self.tool_requires("libtool/2.4.7") @@ -58,9 +59,13 @@ def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): + if not cross_building(self): + env = VirtualRunEnv(self) + env.generate(scope="build") tc = AutotoolsToolchain(self) - tc.configure_args.append(f"--with-ssl-dir={self.dependencies['openssl'].package_folder}") tc.generate() + deps = AutotoolsDeps(self) + deps.generate() def _patch_sources(self): apply_conandata_patches(self) From bc821dcdf218139bba9860e37b165f4b36efefa3 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 8 Nov 2023 13:43:29 +0200 Subject: [PATCH 7/9] libest: use version range for openssl Co-authored-by: Uilian Ries --- recipes/libest/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index ba0d7ffd16a68..c46a567735694 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -50,7 +50,7 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/1.1.1w", transitive_headers=True, transitive_libs=True) + self.requires("openssl/[>=1.1 <4]", transitive_headers=True, transitive_libs=True) def build_requirements(self): self.tool_requires("libtool/2.4.7") From b689ad1a15d158a2d66e00495c479a55c1c26260 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 8 Nov 2023 13:44:20 +0200 Subject: [PATCH 8/9] libest: openssl v3 is not supported --- recipes/libest/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index c46a567735694..5652cfbe72d58 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -50,7 +50,7 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/[>=1.1 <4]", transitive_headers=True, transitive_libs=True) + self.requires("openssl/[>=1.1 <3]", transitive_headers=True, transitive_libs=True) def build_requirements(self): self.tool_requires("libtool/2.4.7") From ad516d767dfa84bff170ecc7c3ce8b55057ad4fb Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 8 Nov 2023 14:33:16 +0200 Subject: [PATCH 9/9] libest: revert openssl dep version --- recipes/libest/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/libest/all/conanfile.py b/recipes/libest/all/conanfile.py index 5652cfbe72d58..ba0d7ffd16a68 100644 --- a/recipes/libest/all/conanfile.py +++ b/recipes/libest/all/conanfile.py @@ -50,7 +50,7 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("openssl/[>=1.1 <3]", transitive_headers=True, transitive_libs=True) + self.requires("openssl/1.1.1w", transitive_headers=True, transitive_libs=True) def build_requirements(self): self.tool_requires("libtool/2.4.7")