from conan import ConanFile from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout from conan.tools.files import get, copy, rmdir import os class LibmysqlclientConan(ConanFile): name = "libmysqlclient" version = "8.1.0" description = "MySQL client library" license = "GPL-2.0" url = "https://dev.mysql.com/" homepage = "https://www.mysql.com" topics = ("mysql", "database", "sql") settings = "os", "compiler", "build_type", "arch" options = { "shared": [True, False], "fPIC": [True, False], } default_options = { "shared": False, "fPIC": 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 source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): tc = CMakeToolchain(self) # Критически важные настройки tc.variables["WITHOUT_SERVER"] = "ON" tc.variables["WITH_UNIT_TESTS"] = "OFF" tc.variables["DISABLE_SHARED"] = "OFF" if self.options.shared else "ON" tc.variables["DISABLE_STATIC"] = "ON" if self.options.shared else "OFF" # Настройки для Windows if self.settings.os == "Windows": tc.variables["WITH_SSL"] = "schannel" tc.variables["WITH_ZLIB"] = "bundled" if "MD" in str(self.settings.compiler.runtime): tc.variables["WINDOWS_RUNTIME_MD"] = "ON" else: tc.variables["WITH_SSL"] = "system" tc.variables["WITH_ZLIB"] = "system" tc.generate() def build(self): cmake = CMake(self) self.run("cmake --version") self.run("cmake -E chdir . ls -la", shell=True) cmake.configure() cmake.build() def package(self): cmake = CMake(self) cmake.install() # Копируем только необходимые файлы copy(self, "*.h", src=os.path.join(self.source_folder, "include"), dst=os.path.join(self.package_folder, "include")) copy(self, "*.lib", src=os.path.join(self.build_folder, "library_output_directory"), dst=os.path.join(self.package_folder, "lib")) copy(self, "*.dll", src=os.path.join(self.build_folder, "library_output_directory"), dst=os.path.join(self.package_folder, "bin")) # Удаляем ненужные файлы rmdir(self, os.path.join(self.package_folder, "docs")) rmdir(self, os.path.join(self.package_folder, "share")) rmdir(self, os.path.join(self.package_folder, "bin", "Debug")) rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) def package_info(self): self.cpp_info.libs = ["mysqlclient"] self.cpp_info.includedirs = ["include", "include/mysql"] if self.settings.os == "Windows": self.cpp_info.system_libs = ["ws2_32", "crypt32", "secur32", "shlwapi", "advapi32"] if self.options.shared: self.cpp_info.defines = ["LIBMYSQL_DYNAMIC"]