1
- import os
2
- import subprocess
3
- import sys
4
- from pathlib import Path
5
-
6
- from setuptools import Extension , setup
7
- from setuptools .command .build_ext import build_ext
8
-
9
-
10
- class CMakeExtension (Extension ):
11
- def __init__ (self , name : str , source_dir : Path ) -> None :
12
- super ().__init__ (name , sources = [])
13
- self .source_dir = source_dir .resolve ()
14
-
15
-
16
- class CMakeBuild (build_ext ):
17
- def conan_profile (self ) -> str :
18
- subprocess .run (["conan" , "profile" , "detect" , "-e" ], check = True )
19
-
20
- default_path = Path .home () / ".conan2" / "profiles" / "default"
21
-
22
- with open (default_path , "r" ) as f :
23
- default_profile = f .read ()
24
- default_profile = default_profile .replace ("compiler.cppstd=gnu14" , "compiler.cppstd=gnu20" )
25
- with open (default_path , "w" ) as f :
26
- f .write (default_profile )
27
-
28
- def conan_remote (self ) -> str :
29
- conan_odr_remote = (
30
- "https://artifactory.opendocument.app/artifactory/api/conan/conan"
31
- )
32
-
33
- result = subprocess .run (
34
- ["conan" , "remote" , "list" ], check = True , capture_output = True , text = True
35
- )
36
- if conan_odr_remote not in result .stdout :
37
- print (f"Adding Conan remote { conan_odr_remote } " )
38
- subprocess .run (
39
- [
40
- "conan" ,
41
- "remote" ,
42
- "add" ,
43
- "odr" ,
44
- conan_odr_remote ,
45
- ],
46
- check = True ,
47
- )
48
-
49
- def conan_install (self , source_dir : Path , build_dir : Path ) -> None :
50
- subprocess .run (
51
- [
52
- "conan" ,
53
- "install" ,
54
- str (source_dir ),
55
- f"--output-folder={ str (build_dir )} " ,
56
- "--build=missing" ,
57
- "-s" ,
58
- "build_type=Release" ,
59
- ],
60
- check = True ,
61
- )
62
-
63
- def cmake_configure (self , source_dir : Path , build_dir : Path , install_dir : Path ) -> None :
64
- subprocess .run (
65
- [
66
- "cmake" ,
67
- "-S" ,
68
- str (source_dir ),
69
- "-B" ,
70
- str (build_dir ),
71
- "-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake" ,
72
- f"-DCMAKE_INSTALL_PREFIX={ str (install_dir )} " ,
73
- f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={ str (install_dir )} " ,
74
- "-DCMAKE_BUILD_TYPE=Release" ,
75
- f"-DPYTHON_EXECUTABLE={ sys .executable } " ,
76
- ],
77
- check = True ,
78
- )
79
-
80
- def cmake_build (self , build_dir : Path ) -> None :
81
- subprocess .run (
82
- [
83
- "cmake" ,
84
- "--build" ,
85
- str (build_dir ),
86
- "--config" ,
87
- "Release" ,
88
- ],
89
- check = True ,
90
- )
91
-
92
- def cmake_install (self , build_dir : Path ) -> None :
93
- subprocess .run (
94
- [
95
- "cmake" ,
96
- "--install" ,
97
- str (build_dir ),
98
- "--config" ,
99
- "Release" ,
100
- ],
101
- check = True ,
102
- )
103
-
104
- def build_extension (self , ext : CMakeExtension ) -> None :
105
- source_dir = Path (ext .source_dir )
106
-
107
- build_temp = Path (self .build_temp ) / ext .name
108
- build_temp .mkdir (parents = True , exist_ok = True )
109
-
110
- ext_fullpath = Path (self .get_ext_fullpath (ext .name ))
111
- install_dir = ext_fullpath .parent
112
-
113
- self .conan_profile ()
114
- self .conan_remote ()
115
- self .conan_install (source_dir , build_temp )
116
-
117
- self .cmake_configure (source_dir , build_temp , install_dir )
118
- self .cmake_build (build_temp )
119
- self .cmake_install (build_temp )
120
-
121
- # list build directory for debugging purposes
122
- print (f"Build directory: { build_temp } " )
123
- subprocess .run (["ls" , "-la" , str (build_temp )], check = True )
124
-
125
- print (f"Install directory: { install_dir } " )
126
- subprocess .run (["ls" , "-la" , str (install_dir )], check = True )
1
+ from skbuild_conan import setup
2
+ from setuptools import find_packages
127
3
128
4
129
5
setup (
@@ -133,13 +9,14 @@ def build_extension(self, ext: CMakeExtension) -> None:
133
9
author_email = "stefl.andreas@gmail.com" ,
134
10
description = "It's Android's first OpenOffice Document Reader for Python!" ,
135
11
long_description = "" ,
136
- ext_modules = [CMakeExtension ("pyodr" , Path ("src/cpp" ))],
137
- cmdclass = {"build_ext" : CMakeBuild },
138
- zip_safe = False ,
12
+ python_requires = ">=3.7" ,
13
+ cmake_minimum_required_version = "3.12" ,
14
+ packages = find_packages ("src" ),
15
+ package_dir = {"" : "src" },
139
16
install_requires = [],
140
17
extras_require = {
141
18
"dev" : ["black" ],
142
19
"test" : ["pytest>=6.0" ],
143
20
},
144
- python_requires = ">=3.7 " ,
21
+ conanfile = "src/cpp/conanfile.txt " ,
145
22
)
0 commit comments