Skip to content

Commit 5c47414

Browse files
committed
use skbuild-conan
1 parent b5a67be commit 5c47414

File tree

2 files changed

+10
-131
lines changed

2 files changed

+10
-131
lines changed

pyproject.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ requires = [
44
"wheel",
55
"ninja",
66
"cmake>=3.12",
7-
"conan",
7+
"conan>=2.0.0",
8+
"scikit-build>=0.17.3",
9+
"skbuild-conan",
810
]
911
build-backend = "setuptools.build_meta"
1012

setup.py

Lines changed: 7 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,5 @@
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
1273

1284

1295
setup(
@@ -133,13 +9,14 @@ def build_extension(self, ext: CMakeExtension) -> None:
1339
author_email="stefl.andreas@gmail.com",
13410
description="It's Android's first OpenOffice Document Reader for Python!",
13511
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"},
13916
install_requires=[],
14017
extras_require={
14118
"dev": ["black"],
14219
"test": ["pytest>=6.0"],
14320
},
144-
python_requires=">=3.7",
21+
conanfile="src/cpp/conanfile.txt",
14522
)

0 commit comments

Comments
 (0)