(#21157) libmysqlclient: allow shared with apple-clang

* conditionally remove shared option and set package type

* remove unused files in lib folder if Windows

- remove libmysql.dll
- remove either static or import lib depending on shared option

* allow shared for macOS

* remove lib/plugin folder
This commit is contained in:
SpaceIm
2023-12-08 02:12:16 +01:00
committed by GitHub
parent 2bc3490a5f
commit 23c84b31ab

View File

@@ -4,7 +4,7 @@ from conan.tools.apple import is_apple_os
from conan.tools.build import check_min_cppstd, cross_building, stdcpp_library
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout
from conan.tools.env import VirtualRunEnv, VirtualBuildEnv
from conan.tools.files import rename, get, apply_conandata_patches, replace_in_file, rmdir, rm, export_conandata_patches, copy, mkdir
from conan.tools.files import rename, get, apply_conandata_patches, replace_in_file, rmdir, rm, export_conandata_patches, mkdir
from conan.tools.gnu import PkgConfigDeps
from conan.tools.microsoft import is_msvc, is_msvc_static_runtime
from conan.tools.scm import Version
@@ -90,11 +90,6 @@ class LibMysqlClientCConan(ConanFile):
if minimum_version and loose_lt_semver(str(self.settings.compiler.version), minimum_version):
raise ConanInvalidConfiguration(f"{self.ref} requires {self.settings.compiler} {minimum_version} or newer")
# Sice 8.0.17 this doesn't support shared library on MacOS.
# https://github.com/mysql/mysql-server/blob/mysql-8.0.17/cmake/libutils.cmake#L333-L335
if self.settings.compiler == "apple-clang" and self.options.shared:
raise ConanInvalidConfiguration(f"{self.ref} doesn't support shared library")
# mysql < 8.0.29 uses `requires` in source code. It is the reserved keyword in C++20.
# https://github.com/mysql/mysql-server/blob/mysql-8.0.0/include/mysql/components/services/dynamic_loader.h#L270
if self.settings.compiler.get_safe("cppstd") == "20" and Version(self.version) < "8.0.29":
@@ -255,16 +250,23 @@ class LibMysqlClientCConan(ConanFile):
rm(self, "README", self.package_folder)
rm(self, "*.pdb", self.package_folder, recursive=True)
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "lib", "plugin"))
rmdir(self, os.path.join(self.package_folder, "docs"))
rmdir(self, os.path.join(self.package_folder, "share"))
if self.settings.os == "Windows" and self.options.shared:
copy(self, "*.dll", src=self.build_folder, dst=os.path.join(self.package_folder, "bin"), keep_path=False)
if self.options.shared:
rm(self, "*.a", self.package_folder, recursive=True)
if self.settings.os == "Windows":
if self.options.shared:
rename(self, os.path.join(self.package_folder, "lib", "libmysql.dll"),
os.path.join(self.package_folder, "bin", "libmysql.dll"))
rm(self, "*mysqlclient.*", os.path.join(self.package_folder, "lib"))
else:
rm(self, "*.dll", os.path.join(self.package_folder, "lib"))
rm(self, "*libmysql.*", os.path.join(self.package_folder, "lib"))
else:
rm(self, "*.dll", self.package_folder, recursive=True)
rm(self, "*.dylib", self.package_folder, recursive=True)
rm(self, "*.so*", self.package_folder, recursive=True)
if self.options.shared:
rm(self, "*.a", os.path.join(self.package_folder, "lib"))
else:
rm(self, "*.dylib", os.path.join(self.package_folder, "lib"))
rm(self, "*.so*", os.path.join(self.package_folder, "lib"))
def package_info(self):
self.cpp_info.set_property("pkg_config_name", "mysqlclient")