FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

win: collect underscore-prefixed runtime plugin DLLs in build artifacts by DesertSpringsCivil · Pull Request #9305 · IfcOpenShell/IfcOpenShell · GitHub

win: collect underscore-prefixed runtime plugin DLLs in build artifacts - #9305

Open
DesertSpringsCivil wants to merge 1 commit into
v0.9.0from
fix/win-runtime-plugin-collection
Open

win: collect underscore-prefixed runtime plugin DLLs in build artifacts#9305
DesertSpringsCivil wants to merge 1 commit into
v0.9.0from
fix/win-runtime-plugin-collection

Conversation

Copy link
Copy Markdown
Contributor

Fixes #9301.

Problem

Runtime plugins are canonically underscore-prefixed: decorated_basename() in src/plugin/plugin.cpp prepends ifcopenshell_, and the plugin targets set OUTPUT_NAME to match — ifcopenshell_parse_schema_ifc${schema}, ifcopenshell_geometry_mapping_ifc${schema}, ifcopenshell_geometry_kernel_${kernel}, ifcopenshell_geometry_writer_ifc${schema}, ifcopenshell_${plugin_output_name} for the document/geometry serializers. Only the core shared libraries keep dotted names (ifcopenshell.parse, ifcopenshell.geometry, ifcopenshell.geometry.writer, ifcopenshell.plugin).

win/build-all-win.py collected runtime plugins with a dot-prefix filter, in both archive_executables() and archive_python_package():

if d.name.startswith("ifcopenshell.") and not d.name.startswith("ifcopenshell.geometry.writer.")

The trailing dot only matches the core libraries, so every load-by-name plugin was silently dropped from every win64 and win-arm64 zip.

The handful of underscore-named DLLs that did make it into the shipped artifacts (ifcopenshell_document_rdb.dll, ifcopenshell_geometry_kernel_opencascade.dll, and the parse_schema set in the BonsaiViewer zip) got there via trace_runtime_dependencies() as link-time dependencies, not via the plugin filter — which is also why the geometry_mapping plugins, loaded purely by name and invisible to dumpbin, are absent from every artifact.

On the shipped v0.9.0alpha0 win64 artifacts this means:

>>> ifcopenshell.file(schema="IFC4X3_ADD2")
RuntimeError: No schema named IFC4X3_ADD2

and, with the parse_schema DLLs supplied manually:

RuntimeError: No geometry mapping registered for ifc4x3_add2

linux64 and pyodide artifacts are unaffected.

Change

Both collection sites now share one helper that accepts both prefixes, and the geometry-writer exclusion is extended to the underscore form so the per-schema writers keep their existing Python-package-only treatment.

One question for review

ifcopenshell_geometry_writer_ifc*.dll stays excluded from the executable zips, which preserves current behaviour — but that exclusion predates the rename, and under the old naming ifcopenshell.geometry.writer. would have matched only the core library. If IfcConvert is meant to load the per-schema writers at runtime, they should be bundled with the executables too. Happy to change it either way.

Testing

I don't have a Windows build environment to run the full script, so the filter was verified against a reconstruction of the installed bin/ DLL set: all load-by-name plugins are now collected, the per-schema writers still route to the Python package only, and third-party DLLs are unaffected. Happy to test the resulting artifacts once CI produces them.

Runtime plugins are canonically named `ifcopenshell_<kind>_<name>` (decorated_basename() in src/plugin/plugin.cpp, and the OUTPUT_NAME properties of the plugin targets), but the archive collection filtered on the dotted `ifcopenshell.` prefix, which matches only the core shared libraries. Every load-by-name plugin was therefore silently dropped from every win64 / win-arm64 zip.

Accept both prefixes, and extend the geometry-writer exclusion to the underscore form so the per-schema writers keep their existing Python-package-only treatment.

Fixes #9301

Copy link
Copy Markdown
Contributor Author

CI triage: both failing checks are pre-existing on the v0.9.0 base, not introduced here — the branch's own last four ci runs and last three ci-lint runs (Aug 10–14) all fail identically. The lint failure is Black 26.5.1 wanting to reformat pyodide/build-all-pack-wheel-local.py, which this PR doesn't touch; this PR's only file (win/build-all-win.py) passes Black/ruff cleanly. Happy to rebase or adjust if anything else is wanted.

DesertSpringsCivil added a commit to DesertSpringsCivil/IfcOpenShell that referenced this pull request Aug 15, 2026
The locally built 0.9 runtime (all 59 DLLs incl. the 8 geometry-mapping
plugins missing from official win64 artifacts, upstream IfcOpenShell#9301/IfcOpenShell#9305)
un-gated 84 geometry-dependent tests. Running them surfaced:

- _add_segment_to_curve: only refresh EndPoint via update_end_point when
  the gradient/segmented-reference curve already carries its zero-length
  terminal segment; mid-construction flows (create_representation) add
  segments before the terminal exists and the fallback path cannot
  resolve transition codes against a curve still being assembled.
- segment_vertices (+ API test): entity_instance no longer exposes
  .wrapped_data in the 0.9 wrapper; pass instances directly to map_shape.
- _map_linear_transition: guard start_direction against A1 == 0 — a
  LINEARTRANSITION cant segment with equal start/end cant is schema-legal
  and the expression's limit as the cant change goes to 0 is 0 (was
  ZeroDivisionError).
- CIVIL_OT_add_cant_point: move the display-row selection to the point
  just added; insert-after resolution reads active_cant_display_row_index,
  so leaving it behind made every subsequent Add insert midpoints after
  the original point instead of appending.
- Operator-test fixtures: create_alignment_with_horizontal_and_vertical
  now lays out a real 1000 m tangent (cant validation correctly refused
  the old zero-extent bare alignment); equal back/ahead station-equation
  test asserts the RuntimeError bpy.ops raises in background mode.

Bonsai alignment suites: 503 passed / 0 failed / 0 skipped (was 499/4,
with 84 tests formerly skip-gated). API alignment: 110 passed. Core: 121.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DesertSpringsCivil added a commit to DesertSpringsCivil/IfcOpenShell that referenced this pull request Aug 15, 2026
…ment_vertices helpers

Fixes found while building Bonsai alignment authoring on top of the
alignment API:

- _create_geometric_representation: typo creatIfcShapeRepresentation ->
  createIfcShapeRepresentation (crashed 3D representation of gradient
  curves).
- get_mapped_segments: off-by-one — the second mapped segment of a
  two-segment mapping returned Segments[index] instead of
  Segments[index - 1].
- get_stationing_nest: matched the first nest containing any IfcReferent;
  now requires PredefinedType == "STATION" so position referents don't
  shadow the stationing nest.
- create_as_offset_curve: offset-curve alignments never received a
  stationing referent; now establishes the stationing scheme exactly as
  create() does for start_station.
- _get_segment_start_point_label: vertical CONSTANTGRADIENT/
  CONSTANTGRADIENT label "P.V.I" -> "P.V.I.".
- segment_vertices: restored helper returning (Start, End, TI, NI)
  control points per segment — needed by any PI-based editor and gone
  from the current API surface.

New Saikei helper: clear_layout_segments — the layout functions only
append and expose no clear/remove, so editing a layout (PI recalc, edit
mode) needs a safe way to drop real segments while keeping the
zero-length terminator and cleaning up mapped geometry without orphans.

Tests included for all of the above (test/api/alignment).
- segment_vertices: pass the entity_instance to map_shape directly —
  entity_instance.wrapped_data is gone in the 0.9 modular wrapper
  (verified against a locally built 0.9 runtime with the per-schema
  geometry-mapping plugins that the official win64 artifacts omit,
  upstream IfcOpenShell#9301/IfcOpenShell#9305).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DesertSpringsCivil added a commit to DesertSpringsCivil/IfcOpenShell that referenced this pull request Aug 15, 2026
The locally built 0.9 runtime (all 59 DLLs incl. the 8 geometry-mapping
plugins missing from official win64 artifacts, upstream IfcOpenShell#9301/IfcOpenShell#9305)
un-gated 84 geometry-dependent tests. Running them surfaced:

- _add_segment_to_curve: only refresh EndPoint via update_end_point when
  the gradient/segmented-reference curve already carries its zero-length
  terminal segment; mid-construction flows (create_representation) add
  segments before the terminal exists and the fallback path cannot
  resolve transition codes against a curve still being assembled.
- segment_vertices (+ API test): entity_instance no longer exposes
  .wrapped_data in the 0.9 wrapper; pass instances directly to map_shape.
- _map_linear_transition: guard start_direction against A1 == 0 — a
  LINEARTRANSITION cant segment with equal start/end cant is schema-legal
  and the expression's limit as the cant change goes to 0 is 0 (was
  ZeroDivisionError).
- CIVIL_OT_add_cant_point: move the display-row selection to the point
  just added; insert-after resolution reads active_cant_display_row_index,
  so leaving it behind made every subsequent Add insert midpoints after
  the original point instead of appending.
- Operator-test fixtures: create_alignment_with_horizontal_and_vertical
  now lays out a real 1000 m tangent (cant validation correctly refused
  the old zero-extent bare alignment); equal back/ahead station-equation
  test asserts the RuntimeError bpy.ops raises in background mode.

Bonsai alignment suites: 503 passed / 0 failed / 0 skipped (was 499/4,
with 84 tests formerly skip-gated). API alignment: 110 passed. Core: 121.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DesertSpringsCivil added a commit to DesertSpringsCivil/IfcOpenShell that referenced this pull request Aug 15, 2026
The locally built 0.9 runtime supplies the eight geometry-mapping plugins
missing from official win64 artifacts (IfcOpenShell#9301/IfcOpenShell#9305), so all suites run
with zero skips. Records the build inputs kept for rebuilds, the runtime
backup path, and the TODO to swap back to official artifacts once IfcOpenShell#9305
merges (bit-parity with what reviewers and CI run).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL