Skip to content

Commit 27b427e

Browse files
committed
setup.py: support pure-python cython extensions
1 parent 0df1bfc commit 27b427e

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

setup.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,15 @@ def cythonize(extensions, **kwargs):
253253
missing_c_sources = []
254254

255255
for extension in extensions:
256+
c_sources = []
256257
for source in extension.sources:
257-
if source.endswith(".pyx"):
258-
c_file = source.replace(".pyx", ".c")
258+
if source.endswith(".pyx") or source.endswith(".py"):
259+
c_file = source.replace(".pyx", ".c").replace(".py", ".c")
260+
c_sources.append(c_file)
259261

260262
if not os.path.exists(c_file):
261263
missing_c_sources.append((extension, c_file))
264+
extension.sources = c_sources
262265

263266
if missing_c_sources:
264267
for extension, source in missing_c_sources:
@@ -273,29 +276,29 @@ def cythonize(extensions, **kwargs):
273276
def register_cython_module(module_name, dependencies=None):
274277
def files_from_module(modname):
275278
basename = "src/{}".format(modname.replace(".", "/"))
279+
if os.path.exists("{}.py".format(basename)):
280+
return ("{}.py".format(basename),)
276281
return "{}.pyx".format(basename), "{}.pxd".format(basename)
277282

278283
if dependencies is None:
279284
dependencies = []
280285

281-
implementation_file, definition_file = files_from_module(module_name)
286+
cython_files = files_from_module(module_name)
282287

283-
assert os.path.exists(implementation_file)
288+
assert os.path.exists(cython_files[0])
284289

285290
depends = []
286-
if os.path.exists(definition_file):
287-
depends.append(definition_file)
291+
if len(cython_files) == 2 and os.path.exists(cython_files[1]):
292+
depends.append(cython_files[1])
288293

289294
for module in dependencies:
290-
imp_file, def_file = files_from_module(module)
291-
assert os.path.exists(imp_file), "Dependency file not found: {}".format(imp_file)
292-
assert os.path.exists(def_file), "Dependency declaration file not found: {}".format(def_file)
295+
files = files_from_module(module)
296+
assert all(os.path.exists(f) for f in files), "Missing file for module: {}".format(module)
293297

294-
depends.append(imp_file)
295-
depends.append(def_file)
298+
depends.extend(files)
296299

297300
BUILD_EXTENSIONS.append(
298-
Extension(name=module_name, sources=[implementation_file], depends=depends, define_macros=extension_macros,)
301+
Extension(name=module_name, sources=[cython_files[0]], depends=depends, define_macros=extension_macros,)
299302
)
300303

301304

0 commit comments

Comments
 (0)