-
Notifications
You must be signed in to change notification settings - Fork 21
/
conanfile.py
128 lines (109 loc) · 4.52 KB
/
conanfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import os
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.build import check_min_cppstd
from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
from conan.tools.files import copy, get, rmdir
from conan.tools.microsoft import is_msvc
from conan.tools.scm import Version
required_conan_version = ">=1.53.0"
class PROPOSALConan(ConanFile):
name = "proposal"
homepage = "https://github.com/tudo-astroparticlephysics/PROPOSAL"
license = "LGPL-3.0"
package_type = "library"
url = "https://github.com/conan-io/conan-center-index"
description = "monte Carlo based lepton and photon propagator"
topics = ("propagator", "lepton", "photon", "stochastic")
settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False],
"fPIC": [True, False],
"with_python": [True, False],
"with_testing": [True, False],
"with_documentation": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
"with_python" : False,
"with_testing": False,
"with_documentation": False,
}
@property
def _min_cppstd(self):
return "14"
@property
def _minimum_compilers_version(self):
return {
"Visual Studio": "15",
"msvc": "191",
"gcc": "5",
"clang": "5",
"apple-clang": "5",
}
def config_options(self):
if self.settings.os == "Windows":
self.options.rm_safe("fPIC")
def configure(self):
if self.options.shared:
self.options.rm_safe("fPIC")
def layout(self):
cmake_layout(self)
self.folders.generators = "build"
def requirements(self):
# cubicinterpolation: headers are transitively included, and function calls are made
# from implementation in headers (templates)
self.requires("cubicinterpolation/0.1.5", transitive_headers=True, transitive_libs=True)
# spdlog: requires transitive_libs due to direct calls to functionality from headers
self.requires("spdlog/1.11.0", transitive_headers=True, transitive_libs=True)
# nlohmann_json: public headers include json.hpp and json_fwd.hpp
self.requires("nlohmann_json/3.11.2", transitive_headers=True)
if self.options.with_python:
self.requires("pybind11/2.10.1")
if self.options.with_testing:
self.requires("boost/1.83.0")
self.requires("gtest/1.11.0")
if self.options.with_documentation:
self.requires("doxygen/1.8.20")
def validate(self):
if is_msvc(self) and self.options.shared:
raise ConanInvalidConfiguration(
"Can not build shared library on Visual Studio."
)
if self.settings.compiler.get_safe("cppstd"):
check_min_cppstd(self, self._min_cppstd)
minimum_version = self._minimum_compilers_version.get(
str(self.settings.compiler), False
)
if minimum_version and Version(self.settings.compiler.version) < minimum_version:
raise ConanInvalidConfiguration(
f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support"
)
def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def package(self):
copy(self, "LICENSE.md", self.source_folder, os.path.join(self.package_folder, "licenses"))
cmake = CMake(self)
cmake.install()
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
def generate(self):
tc = CMakeToolchain(self)
tc.variables["BUILD_TESTING"] = self.options.with_testing
tc.variables["BUILD_PYTHON"] = self.options.with_python
tc.variables["BUILD_DOCUMENTATION"] = self.options.with_documentation
tc.variables["CMAKE_BUILD_TYPE"] = "Release" # set as default
tc.generate()
deps = CMakeDeps(self)
deps.generate()
def package_info(self):
self.cpp_info.set_property("cmake_file_name", "PROPOSAL")
self.cpp_info.set_property("cmake_target_name", "PROPOSAL::PROPOSAL")
self.cpp_info.libs = ["PROPOSAL"]
# TODO: to remove in conan v2 once cmake_find_package_* generators removed
self.cpp_info.names["cmake_find_package"] = "PROPOSAL"
self.cpp_info.names["cmake_find_package_multi"] = "PROPOSAL"