Skip to content

Commit 69ddca9

Browse files
committed
refactor extension module to use a dependency object instead
1 parent 69a4159 commit 69ddca9

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

src/semiwrap/cmd_genmeson.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def _render_module_stage0(
201201
else:
202202
depnames.append(f"dependency({_make_string(d)})")
203203

204-
deps = ",".join(depnames)
204+
deps = ", ".join(depnames)
205205
r.writeln(f"dependencies: [{deps}],")
206206

207207
if m.include_directories:

src/semiwrap/makeplan.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -308,18 +308,41 @@ def _process_extension_module(
308308

309309
modinit = BuildTarget(
310310
command="gen-modinit-hpp",
311-
args=(module_name, OutputFile(f"semiwrap_init.{package_name}.hpp"), *datfiles),
311+
args=(
312+
module_name,
313+
OutputFile(f"semiwrap_init.{package_name}.hpp"),
314+
*datfiles,
315+
),
312316
install_path=None,
313317
)
314318
module_sources.append(modinit)
315319
yield modinit
316320

321+
#
322+
# Emit the module
323+
#
324+
325+
# Use a local dependency to store everything so it can be referenced elsewhere
326+
cached_dep = self.pkgcache.add_local(
327+
name=varname,
328+
includes=[*includes, self.pyproject.package_root / package_path],
329+
requires=depends,
330+
libinit_py=libinit_module,
331+
)
332+
local_dep = LocalDependency(
333+
name=cached_dep.name,
334+
include_paths=tuple(cached_dep.include_path),
335+
depends=tuple(self._resolve_dep(dep) for dep in depends),
336+
)
337+
yield local_dep
338+
self.local_dependencies[local_dep.name] = local_dep
339+
317340
modobj = ExtensionModule(
318341
name=varname,
319342
package_name=package_name,
320343
sources=tuple(module_sources),
321-
depends=tuple(self._resolve_dep(dep) for dep in depends),
322-
include_directories=(*includes, self.pyproject.package_root / package_path),
344+
depends=(local_dep,),
345+
include_directories=tuple(),
323346
install_path=package_path,
324347
)
325348
yield modobj

src/semiwrap/pkgconf_cache.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,15 @@ def add_local(
9393
name: str,
9494
includes: T.List[pathlib.Path],
9595
requires: T.List[str],
96+
libinit_py: T.Optional[str] = None,
9697
) -> CacheEntry:
9798
assert name not in self._cache
9899
entry = CacheEntry(name)
99100
entry.manual = True
100101
entry._include_path = [inc.absolute() for inc in includes]
101102
entry._full_include_path = entry._include_path[:]
102-
entry._libinit_py = None
103+
entry._libinit_py = libinit_py
104+
entry._type_casters_path = None
103105
entry._requires = requires[:]
104106
for req in requires:
105107
dep = self.get(req)

0 commit comments

Comments
 (0)