conanfile.py 3.2 KB

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