conanfile.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from conans import ConanFile, CMake, tools
  2. from conans.errors import ConanInvalidConfiguration
  3. import os
  4. required_conan_version = ">=1.43.0"
  5. class RotorConan(ConanFile):
  6. name = "rotor"
  7. license = "MIT"
  8. homepage = "https://github.com/basiliscos/cpp-rotor"
  9. url = "https://github.com/conan-io/conan-center-index"
  10. description = (
  11. "Event loop friendly C++ actor micro-framework, supervisable"
  12. )
  13. topics = ("concurrency", "actor-framework", "actors", "actor-model", "erlang", "supervising", "supervisor")
  14. settings = "os", "arch", "compiler", "build_type"
  15. options = {
  16. "fPIC": [True, False],
  17. "boost_asio": [True, False],
  18. "thread": [True, False],
  19. }
  20. default_options = {
  21. "fPIC": True,
  22. "boost_asio": True,
  23. "thread": True,
  24. }
  25. exports_sources = ["CMakeLists.txt", "include*", "src*", "test_package*", "cmake*"]
  26. generators = "cmake_find_package"
  27. _cmake = None
  28. def config_options(self):
  29. if self.settings.os == "Windows":
  30. del self.options.fPIC
  31. def requirements(self):
  32. self.requires("boost/1.69.0")
  33. def validate(self):
  34. minimal_cpp_standard = "17"
  35. if self.settings.compiler.get_safe("cppstd"):
  36. tools.check_min_cppstd(self, minimal_cpp_standard)
  37. minimal_version = {
  38. "gcc": "7",
  39. "clang": "6",
  40. "apple-clang": "10",
  41. "Visual Studio": "15"
  42. }
  43. compiler = str(self.settings.compiler)
  44. if compiler not in minimal_version:
  45. self.output.warn(
  46. "%s recipe lacks information about the %s compiler standard version support" % (self.name, compiler))
  47. self.output.warn(
  48. "%s requires a compiler that supports at least C++%s" % (self.name, minimal_cpp_standard))
  49. return
  50. version = tools.Version(self.settings.compiler.version)
  51. if version < minimal_version[compiler]:
  52. raise ConanInvalidConfiguration("%s requires a compiler that supports at least C++%s" % (self.name, minimal_cpp_standard))
  53. def _configure_cmake(self):
  54. if self._cmake:
  55. return self._cmake
  56. self._cmake = CMake(self)
  57. self._cmake.definitions["BUILD_BOOST_ASIO"] = self.options.boost_asio
  58. self._cmake.definitions["BUILD_THREAD"] = self.options.thread
  59. self._cmake.definitions["BUILD_TESTING"] = False
  60. self._cmake.configure()
  61. return self._cmake
  62. def build(self):
  63. cmake = self._configure_cmake()
  64. cmake.build()
  65. def package(self):
  66. cmake = self._configure_cmake()
  67. cmake.install()
  68. def package_info(self):
  69. self.cpp_info.components["core"].libs = ["rotor"]
  70. self.cpp_info.components["core"].requires = ["boost::date_time", "boost::system", "boost::regex"]
  71. self.cpp_info.components["asio"].libs = ["rotor_asio"]
  72. self.cpp_info.components["asio"].requires = ["core"]
  73. self.cpp_info.components["thread"].libs = ["rotor_thread"]
  74. self.cpp_info.components["thread"].requires = ["core"]
  75. # TODO: to remove in conan v2 once cmake_find_package* generators removed
  76. self.cpp_info.names["cmake_find_package"] = "rotor"
  77. self.cpp_info.names["cmake_find_package_multi"] = "rotor"