From 54322daa0ac52d97e3932e2af6e49aaf94610224 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Tue, 23 May 2023 23:34:30 +0930 Subject: [PATCH 01/10] [util-linux-libuuid] Add util-linux-libuuid package * This is the most actively maintained fork of libuuid * This package should supersede the existing libuuid recipe, which should be deprecated as an inactive fork of the original libuuid. Closes #17337 --- recipes/util-linux-libuuid/all/conandata.yml | 4 + recipes/util-linux-libuuid/all/conanfile.py | 99 +++++++++++++++++++ .../all/test_package/CMakeLists.txt | 8 ++ .../all/test_package/conanfile.py | 26 +++++ .../all/test_package/test_package.c | 33 +++++++ recipes/util-linux-libuuid/config.yml | 3 + 6 files changed, 173 insertions(+) create mode 100644 recipes/util-linux-libuuid/all/conandata.yml create mode 100644 recipes/util-linux-libuuid/all/conanfile.py create mode 100644 recipes/util-linux-libuuid/all/test_package/CMakeLists.txt create mode 100644 recipes/util-linux-libuuid/all/test_package/conanfile.py create mode 100644 recipes/util-linux-libuuid/all/test_package/test_package.c create mode 100644 recipes/util-linux-libuuid/config.yml diff --git a/recipes/util-linux-libuuid/all/conandata.yml b/recipes/util-linux-libuuid/all/conandata.yml new file mode 100644 index 0000000000000..c4255b4f0fb0c --- /dev/null +++ b/recipes/util-linux-libuuid/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "1.3.0": + url: "https://github.com/util-linux/util-linux/archive/refs/tags/v2.39.tar.gz" + sha256: "186cb427cd6b4654f381357b60af7ffb0ae9bb50d7af7d87e0723858f7318b80" diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py new file mode 100644 index 0000000000000..e22eb9125c1af --- /dev/null +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -0,0 +1,99 @@ +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.apple import fix_apple_shared_install_name +from conan.tools.env import VirtualBuildEnv +from conan.tools.files import copy, get, rm, rmdir, chdir +from conan.tools.gnu import Autotools, AutotoolsToolchain +from conan.tools.layout import basic_layout +import os + +required_conan_version = ">=1.53.0" + + +class UtilLinuxLibuuidConan(ConanFile): + name = "util-linux-libuuid" + description = "Universally unique id library" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/util-linux/util-linux.git" + license = "BSD-3-Clause" + topics = "id", "identifier", "unique", "uuid" + package_type = "library" + provides = "libuuid" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + } + + @property + def _has_sys_file_header(self): + return self.settings.os in ["FreeBSD", "Linux", "Macos"] + + 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 layout(self): + basic_layout(self, src_folder="src") + + def validate(self): + if self.settings.os == "Windows": + raise ConanInvalidConfiguration(f"{self.ref} is not supported on Windows") + + def build_requirements(self): + self.tool_requires("libtool/2.4.7") + self.tool_requires("m4/1.4.19") + self.tool_requires("pkgconf/1.9.3") + self.tool_requires("bison/3.8.2") + self.tool_requires("autoconf/2.71") + self.tool_requires("automake/1.16.5") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + env = VirtualBuildEnv(self) + env.generate() + tc = AutotoolsToolchain(self) + tc.configure_args.append("--disable-all-programs") + tc.configure_args.append("--enable-libuuid") + if self._has_sys_file_header: + tc.extra_defines.append("HAVE_SYS_FILE_H") + if "x86" in self.settings.arch: + tc.extra_cflags.append("-mstackrealign") + tc.generate() + + def build(self): + with chdir(self, self.source_folder): + self.run("./autogen.sh") + autotools = Autotools(self) + autotools.configure() + autotools.make() + + def package(self): + copy(self, "COPYING.BSD-3-Clause", src=os.path.join(self.source_folder, "Documentation", "licenses"), dst=os.path.join(self.package_folder, "licenses")) + autotools = Autotools(self) + autotools.install() + 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, "bin")) + rmdir(self, os.path.join(self.package_folder, "sbin")) + 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", "uuid") + self.cpp_info.set_property("cmake_target_name", "libuuid::libuuid") + self.cpp_info.set_property("cmake_file_name", "libuuid") + self.cpp_info.libs = ["uuid"] + self.cpp_info.includedirs.append(os.path.join("include", "uuid")) diff --git a/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..75c717f769900 --- /dev/null +++ b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.8) +project(test_package LANGUAGES C) + +find_package(libuuid REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} PRIVATE libuuid::libuuid) +target_compile_features(${PROJECT_NAME} PRIVATE c_std_99) diff --git a/recipes/util-linux-libuuid/all/test_package/conanfile.py b/recipes/util-linux-libuuid/all/test_package/conanfile.py new file mode 100644 index 0000000000000..0a6bc68712d90 --- /dev/null +++ b/recipes/util-linux-libuuid/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, cmake_layout +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeToolchain", "CMakeDeps", "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.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/util-linux-libuuid/all/test_package/test_package.c b/recipes/util-linux-libuuid/all/test_package/test_package.c new file mode 100644 index 0000000000000..792d1d3fbf414 --- /dev/null +++ b/recipes/util-linux-libuuid/all/test_package/test_package.c @@ -0,0 +1,33 @@ +#include + +#include "uuid/uuid.h" + +int main(int argc, char *argv[]) { + uuid_t uuid; + uuid_generate_time_safe(uuid); + + char uuid_str[37]; + uuid_unparse_lower(uuid, uuid_str); + printf("generate uuid=%s\n", uuid_str); + + uuid_t uuid2; + uuid_parse(uuid_str, uuid2); + + int rv; + rv = uuid_compare(uuid, uuid2); + printf("uuid_compare() result=%d\n", rv); + + uuid_t uuid3; + uuid_parse("1b4e28ba-2fa1-11d2-883f-0016d3cca427", uuid3); + rv = uuid_compare(uuid, uuid3); + printf("uuid_compare() result=%d\n", rv); + + rv = uuid_is_null(uuid); + printf("uuid_null() result=%d\n", rv); + + uuid_clear(uuid); + rv = uuid_is_null(uuid); + printf("uuid_null() result=%d\n", rv); + + return 0; +} diff --git a/recipes/util-linux-libuuid/config.yml b/recipes/util-linux-libuuid/config.yml new file mode 100644 index 0000000000000..426a0e4c79e9b --- /dev/null +++ b/recipes/util-linux-libuuid/config.yml @@ -0,0 +1,3 @@ +versions: + "1.3.0": + folder: all From bea16f8145f152d83b6b227241df035cf581aa5b Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 25 May 2023 00:32:27 +0930 Subject: [PATCH 02/10] [util-linux-libuuid] Add minimum compatible compiler versions --- recipes/util-linux-libuuid/all/conanfile.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index e22eb9125c1af..b1377538b30e8 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -5,6 +5,7 @@ from conan.tools.files import copy, get, rm, rmdir, chdir from conan.tools.gnu import Autotools, AutotoolsToolchain from conan.tools.layout import basic_layout +from conan.tools.scm import Version import os required_conan_version = ">=1.53.0" @@ -46,7 +47,23 @@ def configure(self): def layout(self): basic_layout(self, src_folder="src") + def _minimum_compiler_version(self, compiler, build_type): + min_version = { + "gcc": { + "Release": "4", + "Debug": "8", + }, + "clang": { + "Release": "3", + "Debug": "3", + }, + } + return min_version[str(compiler)][str(build_type)] + def validate(self): + min_version = self._minimum_compiler_version(self.settings.compiler, self.settings.build_type) + if Version(self.settings.compiler.version) < min_version: + raise ConanInvalidConfiguration(f"{self.settings.compiler} {self.settings.compiler.version} does not meet the minimum version requirement of version {min_version}") if self.settings.os == "Windows": raise ConanInvalidConfiguration(f"{self.ref} is not supported on Windows") From 6ae778f00be32ecbd54ddc95c48f6bce4250e790 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 25 May 2023 00:46:26 +0930 Subject: [PATCH 03/10] [util-linux-libuuid] Add apple-clang to minimum compiler list --- recipes/util-linux-libuuid/all/conanfile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index b1377538b30e8..35e8509bbde83 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -57,6 +57,10 @@ def _minimum_compiler_version(self, compiler, build_type): "Release": "3", "Debug": "3", }, + "apple-clang": { + "Release": "5", + "Debug": "5", + }, } return min_version[str(compiler)][str(build_type)] From 7452b0d9b63d33faf9170e48fa91bfbf80894b38 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 25 May 2023 00:49:20 +0930 Subject: [PATCH 04/10] [util-linux-libuuid] Add failover for min_version call to return 0 if compiler or build_type don't exist --- recipes/util-linux-libuuid/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index 35e8509bbde83..1ab72c09f5c96 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -62,7 +62,7 @@ def _minimum_compiler_version(self, compiler, build_type): "Debug": "5", }, } - return min_version[str(compiler)][str(build_type)] + return min_version.get(str(compiler), {}).get(str(build_type), "0") def validate(self): min_version = self._minimum_compiler_version(self.settings.compiler, self.settings.build_type) From ed8abe6a5075dbe1fdc0205d856275ab59b12cf7 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Sun, 28 May 2023 00:43:11 +0930 Subject: [PATCH 05/10] [util-linux-libuuid] Add dependency on gettext for Macos to bring in libintl * libintl ships as part of glibc on linux and so this isn't required in that context. On Macos, this isn't the case so this has to be linked against explicitly --- recipes/util-linux-libuuid/all/conanfile.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index 1ab72c09f5c96..87cf124d1e02d 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -3,7 +3,7 @@ from conan.tools.apple import fix_apple_shared_install_name from conan.tools.env import VirtualBuildEnv from conan.tools.files import copy, get, rm, rmdir, chdir -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.scm import Version import os @@ -71,6 +71,11 @@ def validate(self): if self.settings.os == "Windows": raise ConanInvalidConfiguration(f"{self.ref} is not supported on Windows") + def requirements(self): + if self.settings.os == "Macos": + # Required because libintl.{a,dylib} is not distributed via libc on Macos + self.requires("gettext/0.21") + def build_requirements(self): self.tool_requires("libtool/2.4.7") self.tool_requires("m4/1.4.19") @@ -85,6 +90,7 @@ def source(self): def generate(self): env = VirtualBuildEnv(self) env.generate() + tc = AutotoolsToolchain(self) tc.configure_args.append("--disable-all-programs") tc.configure_args.append("--enable-libuuid") @@ -94,6 +100,9 @@ def generate(self): tc.extra_cflags.append("-mstackrealign") tc.generate() + deps = AutotoolsDeps(self) + deps.generate() + def build(self): with chdir(self, self.source_folder): self.run("./autogen.sh") From ced042b9a1e840431fa41e640129b49a9917f274 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Sun, 28 May 2023 17:27:33 +0930 Subject: [PATCH 06/10] [util-linux-libuuid] Use libgettext instead of gettext for libintl --- recipes/util-linux-libuuid/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index 87cf124d1e02d..c560760cb6d54 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -74,7 +74,7 @@ def validate(self): def requirements(self): if self.settings.os == "Macos": # Required because libintl.{a,dylib} is not distributed via libc on Macos - self.requires("gettext/0.21") + self.requires("libgettext/0.21") def build_requirements(self): self.tool_requires("libtool/2.4.7") From 26b528d05812b3c62bca4fd37ee32dd55cdca11d Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Fri, 2 Jun 2023 23:32:41 +0930 Subject: [PATCH 07/10] [util-linux-libuuid] Invalidate macos builds * Invalidate Macos builds as they are failing in a way that hasn't been able to be reproduced for debugging on the CI machine. --- recipes/util-linux-libuuid/all/conanfile.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index c560760cb6d54..83145a4513129 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -70,6 +70,11 @@ def validate(self): raise ConanInvalidConfiguration(f"{self.settings.compiler} {self.settings.compiler.version} does not meet the minimum version requirement of version {min_version}") if self.settings.os == "Windows": raise ConanInvalidConfiguration(f"{self.ref} is not supported on Windows") + if self.settings.os == "Macos": + # FIXME: Add Macos compatibility. This is currently breaking because builds are unable to find libtool-2 + # This is a bit puzzling given `libtool` is a tool_requires, and I haven't been able to replicate this error + # locally. + raise ConanInvalidConfiguration(f"{self.ref} is not currently supported on Macos. Please contribute this functionality if you require it.") def requirements(self): if self.settings.os == "Macos": From 27625d7c93968a60b8415b488b20dc01271c01d6 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 8 Jun 2023 22:38:10 +0930 Subject: [PATCH 08/10] [util-linux-libuuid] Modify version to use util-linux version rather than libuuid --- recipes/util-linux-libuuid/all/conandata.yml | 2 +- recipes/util-linux-libuuid/config.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/recipes/util-linux-libuuid/all/conandata.yml b/recipes/util-linux-libuuid/all/conandata.yml index c4255b4f0fb0c..d2ce21857c2f6 100644 --- a/recipes/util-linux-libuuid/all/conandata.yml +++ b/recipes/util-linux-libuuid/all/conandata.yml @@ -1,4 +1,4 @@ sources: - "1.3.0": + "2.39": url: "https://github.com/util-linux/util-linux/archive/refs/tags/v2.39.tar.gz" sha256: "186cb427cd6b4654f381357b60af7ffb0ae9bb50d7af7d87e0723858f7318b80" diff --git a/recipes/util-linux-libuuid/config.yml b/recipes/util-linux-libuuid/config.yml index 426a0e4c79e9b..427b3a10b7a7d 100644 --- a/recipes/util-linux-libuuid/config.yml +++ b/recipes/util-linux-libuuid/config.yml @@ -1,3 +1,3 @@ versions: - "1.3.0": + "2.39": folder: all From 431d2b1764d3af65d6bee41d1cecd544588c5391 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 8 Jun 2023 23:07:08 +0930 Subject: [PATCH 09/10] Update CMake targets to match upstream libuuid -> LibUUID Co-authored-by: ericLemanissier --- recipes/util-linux-libuuid/all/conanfile.py | 4 ++-- recipes/util-linux-libuuid/all/test_package/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes/util-linux-libuuid/all/conanfile.py b/recipes/util-linux-libuuid/all/conanfile.py index 83145a4513129..9d7a1c2bb0f08 100644 --- a/recipes/util-linux-libuuid/all/conanfile.py +++ b/recipes/util-linux-libuuid/all/conanfile.py @@ -128,7 +128,7 @@ def package(self): def package_info(self): self.cpp_info.set_property("pkg_config_name", "uuid") - self.cpp_info.set_property("cmake_target_name", "libuuid::libuuid") - self.cpp_info.set_property("cmake_file_name", "libuuid") + self.cpp_info.set_property("cmake_target_name", "LibUUID::LibUUID") + self.cpp_info.set_property("cmake_file_name", "LibUUID") self.cpp_info.libs = ["uuid"] self.cpp_info.includedirs.append(os.path.join("include", "uuid")) diff --git a/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt index 75c717f769900..8f1aa51950e7e 100644 --- a/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt +++ b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt @@ -4,5 +4,5 @@ project(test_package LANGUAGES C) find_package(libuuid REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.c) -target_link_libraries(${PROJECT_NAME} PRIVATE libuuid::libuuid) +target_link_libraries(${PROJECT_NAME} PRIVATE LibUUID::LibUUID) target_compile_features(${PROJECT_NAME} PRIVATE c_std_99) From c4a0fc851ee433c5a51879e4e2976152029444e4 Mon Sep 17 00:00:00 2001 From: Samuel Dowling Date: Thu, 8 Jun 2023 23:27:01 +0930 Subject: [PATCH 10/10] [util-linux-libuuid] Fix consumer find_package to match new target name --- recipes/util-linux-libuuid/all/test_package/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt index 8f1aa51950e7e..02a93367160a0 100644 --- a/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt +++ b/recipes/util-linux-libuuid/all/test_package/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.8) project(test_package LANGUAGES C) -find_package(libuuid REQUIRED CONFIG) +find_package(LibUUID REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.c) target_link_libraries(${PROJECT_NAME} PRIVATE LibUUID::LibUUID)