11import os
22
33from pathlib import Path
4- from os import path
54
65from conan import ConanFile
76from conan .errors import ConanInvalidConfiguration
87from conan .tools .cmake import CMakeToolchain , CMake , cmake_layout
9- from conan .tools .env import VirtualBuildEnv
10- from conan .tools .files import copy , mkdir
8+ from conan .tools .env import VirtualBuildEnv , VirtualRunEnv
9+ from conan .tools .files import copy , mkdir , update_conandata
1110from conan .tools .build import check_min_cppstd
1211from conan .tools .microsoft import check_min_vs , is_msvc , is_msvc_static_runtime
13- from conan .tools .scm import Version
12+ from conan .tools .scm import Version , Git
1413
15-
16- required_conan_version = ">=1.56.0"
14+ required_conan_version = ">=2.7.0"
1715
1816
1917class PySavitarConan (ConanFile ):
@@ -24,11 +22,10 @@ class PySavitarConan(ConanFile):
2422 description = "pySavitar is a c++ implementation of 3mf loading with SIP python bindings"
2523 topics = ("conan" , "cura" , "3mf" , "c++" )
2624 settings = "os" , "compiler" , "build_type" , "arch"
27- revision_mode = "scm"
2825 exports = "LICENSE*"
29- generators = "CMakeDeps" , "VirtualBuildEnv" , "VirtualRunEnv"
26+ generators = "CMakeDeps"
3027
31- python_requires = "pyprojecttoolchain/[>=0.1.7 ]@ultimaker/stable" , "sipbuildtool/[>=0.2.4 ]@ultimaker/stable"
28+ python_requires = "pyprojecttoolchain/[>=0.2.0 ]@ultimaker/stable" , "sipbuildtool/[>=0.3.0 ]@ultimaker/stable"
3229
3330 options = {
3431 "shared" : [True , False ],
@@ -45,7 +42,11 @@ class PySavitarConan(ConanFile):
4542
4643 def set_version (self ):
4744 if not self .version :
48- self .version = "5.4.0-alpha"
45+ self .version = self .conan_data ["version" ]
46+
47+ def export (self ):
48+ git = Git (self )
49+ update_conandata (self , {"version" : self .version , "commit" : git .get_commit ()})
4950
5051 @property
5152 def _min_cppstd (self ):
@@ -54,20 +55,21 @@ def _min_cppstd(self):
5455 @property
5556 def _compilers_minimum_version (self ):
5657 return {
57- "gcc" : "9 " ,
58- "clang" : "9 " ,
59- "apple-clang" : "9 " ,
58+ "gcc" : "11 " ,
59+ "clang" : "14 " ,
60+ "apple-clang" : "13 " ,
6061 "msvc" : "192" ,
61- "visual_studio" : "14 " ,
62+ "visual_studio" : "17 " ,
6263 }
6364
6465 def export_sources (self ):
6566 copy (self , "CMakeLists.txt" , self .recipe_folder , self .export_sources_folder )
66- copy (self , "*" , path .join (self .recipe_folder , "python" ), path .join (self .export_sources_folder , "python" ))
67+ copy (self , "*" , os . path .join (self .recipe_folder , "python" ), os . path .join (self .export_sources_folder , "python" ))
6768
6869 def requirements (self ):
69- self .requires ("savitar/(latest)@ultimaker/testing" )
70- self .requires ("cpython/3.10.4" )
70+ for req in self .conan_data ["requirements" ]:
71+ self .requires (req )
72+ self .requires ("cpython/3.12.2" )
7173
7274 def validate (self ):
7375 if self .settings .compiler .cppstd :
@@ -81,8 +83,8 @@ def validate(self):
8183 )
8284
8385 def build_requirements (self ):
84- self .test_requires ("standardprojectsettings/[>=0.1 .0]@ultimaker/stable" )
85- self .test_requires ("sipbuildtool/[>=0.2.4 ]@ultimaker/stable" )
86+ self .test_requires ("standardprojectsettings/[>=0.2 .0]@ultimaker/stable" )
87+ self .test_requires ("sipbuildtool/[>=0.3.0 ]@ultimaker/stable" )
8688
8789 def config_options (self ):
8890 if self .settings .os == "Windows" :
@@ -104,19 +106,13 @@ def generate(self):
104106 tc = CMakeToolchain (self )
105107 if is_msvc (self ):
106108 tc .variables ["USE_MSVC_RUNTIME_LIBRARY_DLL" ] = not is_msvc_static_runtime (self )
107- tc .cache_variables ["CMAKE_POLICY_DEFAULT_CMP0077" ] = "NEW"
108- tc .variables ["Python_EXECUTABLE" ] = self .deps_user_info ["cpython" ].python .replace ("\\ " , "/" )
109- tc .variables ["Python_USE_STATIC_LIBS" ] = not self .options ["cpython" ].shared
110- tc .variables ["Python_ROOT_DIR" ] = self .deps_cpp_info ["cpython" ].rootpath .replace ("\\ " , "/" )
111- tc .variables ["Python_FIND_FRAMEWORK" ] = "NEVER"
112- tc .variables ["Python_FIND_REGISTRY" ] = "NEVER"
113- tc .variables ["Python_FIND_IMPLEMENTATIONS" ] = "CPython"
114- tc .variables ["Python_FIND_STRATEGY" ] = "LOCATION"
115- tc .variables ["Python_SITEARCH" ] = "site-packages"
116109 tc .generate ()
117110
118111 vb = VirtualBuildEnv (self )
119- vb .generate (scope = "build" )
112+ vb .generate ()
113+
114+ vr = VirtualRunEnv (self )
115+ vr .generate (scope = "build" )
120116
121117 # Generate the Source code from SIP
122118 sip = self .python_requires ["sipbuildtool" ].module .SipBuildTool (self )
@@ -129,22 +125,21 @@ def layout(self):
129125 if self .settings .os in ["Linux" , "FreeBSD" , "Macos" ]:
130126 self .cpp .package .system_libs = ["pthread" ]
131127
128+ self .cpp .package .lib = ["pySavitar" ]
129+ self .cpp .package .libdirs = ["lib" ]
130+
131+ self .layouts .build .runenv_info .prepend_path ("PYTHONPATH" , "." )
132+ self .layouts .package .runenv_info .prepend_path ("PYTHONPATH" , "lib" )
133+
132134 def build (self ):
133135 cmake = CMake (self )
134136 cmake .configure ()
135137 cmake .build ()
136138
137139 def package (self ):
138140 copy (self , pattern = "LICENSE*" , dst = "licenses" , src = self .source_folder )
139- for ext in ("*.pyi" , "*.so" , "*.lib" , "*.a" , "*.pyd" ):
140- copy (self , ext , src = self .build_folder , dst = path .join (self .package_folder , "lib" ), keep_path = False )
141-
142- for ext in ("*.dll" , "*.so" , "*.dylib" ):
143- copy (self , ext , src = self .build_folder , dst = path .join (self .package_folder , "bin" ), keep_path = False )
141+ for ext in ("*.pyi" , "*.so" , "*.lib" , "*.a" , "*.pyd" , "*.dll" , "*.dylib" ):
142+ copy (self , ext , src = self .build_folder , dst = os .path .join (self .package_folder , "lib" ), keep_path = False )
144143
145144 def package_info (self ):
146- self .cpp_info .libdirs = [ os .path .join (self .package_folder , "lib" )]
147- if self .in_local_cache :
148- self .runenv_info .append_path ("PYTHONPATH" , os .path .join (self .package_folder , "lib" ))
149- else :
150- self .runenv_info .append_path ("PYTHONPATH" , self .build_folder )
145+ self .conf_info .define ("user.pysavitar:pythonpath" , os .path .join (self .package_folder , "lib" ))
0 commit comments