# pylint: disable=not-callable import os import re from conans import CMake from conans import ConanFile from conans.tools import collect_libs from conans.tools import load class ToxConan(ConanFile): name = "c-toxcore" url = "https://tox.chat" description = "The future of online communications." license = "GPL-3.0-only" settings = "os", "compiler", "build_type", "arch" requires = "libsodium/1.0.18", "opus/1.3.1", "libvpx/1.9.0" generators = "cmake_find_package" scm = {"type": "git", "url": "auto", "revision": "auto"} options = { "shared": [True, False], "with_tests": [True, False], } default_options = { "shared": False, "with_tests": False, } _cmake = None def _create_cmake(self): if self._cmake is not None: return self._cmake self._cmake = CMake(self) self._cmake.definitions["AUTOTEST"] = self.options.with_tests self._cmake.definitions["BUILD_MISC_TESTS"] = self.options.with_tests self._cmake.definitions[ "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS"] = self.options.shared self._cmake.definitions["ENABLE_SHARED"] = self.options.shared self._cmake.definitions["ENABLE_STATIC"] = not self.options.shared self._cmake.definitions["MUST_BUILD_TOXAV"] = True if self.settings.compiler == "Visual Studio": self._cmake.definitions["MSVC_STATIC_SODIUM"] = True self._cmake.definitions[ "FLAT_OUTPUT_STRUCTURE"] = self.options.shared self._cmake.configure() return self._cmake def set_version(self): content = load(os.path.join(self.recipe_folder, "CMakeLists.txt")) version_major = re.search(r"set\(PROJECT_VERSION_MAJOR \"(.*)\"\)", content).group(1) version_minor = re.search(r"set\(PROJECT_VERSION_MINOR \"(.*)\"\)", content).group(1) version_patch = re.search(r"set\(PROJECT_VERSION_PATCH \"(.*)\"\)", content).group(1) self.version = "%s.%s.%s" % ( version_major.strip(), version_minor.strip(), version_patch.strip(), ) def requirements(self): if self.settings.os == "Windows": self.requires("pthreads4w/3.0.0") def build(self): cmake = self._create_cmake() cmake.build() if self.options.with_tests: cmake.test(output_on_failure=True) def package(self): cmake = self._create_cmake() cmake.install() def package_info(self): self.cpp_info.libs = collect_libs(self) if self.settings.os == "Windows": self.cpp_info.system_libs = ["Ws2_32", "Iphlpapi"]