# CAD-Quellen vorbereiten und die Bibliothek neu bauen

Diese Dateien stellen die Quellen der dokumentierten Build-Herkunft von
`replicad-opencascadejs 1.1.0` bereit. Sie enthalten die CAD-Quellen selbst,
die originalen Build-Skripte, Patches, Schnittstellenauswahl und C++-Wrapper.
Die Quellpakete bleiben auf die im Manifest genannten Revisionen festgelegt.

Die Wiederherstellung der Quellen, Git-Revisionen und Prüfsummen sowie die
Anwendung der Upstream-Patches wurden geprüft. Ein vollständiger neuer
WASM-Build mit anschließendem Bytevergleich wurde nicht ausgeführt. Daher
wird kein unabhängig nachgewiesener bitidentischer Nachbau versprochen.

## 1. Quellen herunterladen und prüfen

Voraussetzungen für die Vorbereitung: Python ab 3.12 und Git. Laden Sie
`prepare-cad-sources.py`, `SOURCES-MANIFEST.json` und alle im Manifest unter
`downloads` aufgeführten Dateien in einen Ordner. Führen Sie dort aus:

```sh
python3 prepare-cad-sources.py --work-dir layerdream-cad-source
```

Alternativ lädt der Helfer fehlende Dateien vom selben Downloadverzeichnis:

```sh
python3 prepare-cad-sources.py --base-url "https://IHRE-STUDIO-ADRESSE/sources/" --work-dir layerdream-cad-source
```

Ersetzen Sie die Beispieladresse durch das Verzeichnis, aus dem Sie diese
Anleitung heruntergeladen haben. Der Helfer benötigt einen neuen Zielordner
und überschreibt keine vorhandenen eigenen Änderungen. Er prüft jeden Teil
und jedes wieder zusammengesetzte Archiv mit SHA-256.

Größere Archive sind in nummerierte Teile von höchstens 24.000.000 Byte
zerlegt. Es handelt sich um aufeinanderfolgende Bytes eines gzip-Tararchivs,
nicht um separat entpackbare Archive. Der Helfer setzt sie automatisch
zusammen. Alle Quelldownloads zusammen sind ungefähr 73 MB groß.

Im Zielordner entstehen:

| Pfad | Inhalt |
| --- | --- |
| `ocjs/` | OCJS-Buildsystem mit ursprünglicher Git-Revision |
| `ocjs/deps/OCCT/` | OCCT mit ursprünglicher Git-Revision |
| `ocjs/deps/rapidjson/` | RapidJSON mit ursprünglicher Git-Revision |
| `ocjs/deps/freetype/` | FreeType mit ursprünglicher Git-Revision |
| `ocjs/deps/emsdk/` | Gepinnter emsdk-Installer samt Manifesten |
| `replicad/` | Replicad-WASM-Buildpaket mit YAML, C++-Wrappern, Templates und Lizenz-/Paketmetadaten |
| `emscripten-source/` | Emscripten-5.0.1-Build-/Runtime-Quellen einschließlich Lizenzen, ohne das Upstream-Verzeichnis `test/` |
| `archives/`, `snapshots/` | Verifizierte Ausgangsarchive und unveränderte Auszüge |

Die Git-Metadaten sind erforderlich: Das unveränderte OCJS-Buildsystem fragt
die Revisionen von OCCT, RapidJSON und FreeType ab. Diese Pakete werden als
vollständige flache Git-Snapshots geliefert; ältere Projektgeschichte ist
für diesen Build nicht erforderlich.

Zwei Archivlieferungen sind ausdrücklich auf den CAD-Build begrenzt. Bei
Emscripten wurde das oberste Verzeichnis `test/` mit Testfällen, Benchmarks
und Testmedien ausgelassen. Die benötigten Compiler- und Runtime-Quellen
unter anderem in `tools/`, `src/` und `system/` bleiben erhalten. Dieser
Buildweg führt die Emscripten-Testsuite nicht aus. Bei Replicad werden die
Root-Lizenz und das WASM-Buildpaket mit Lizenzen, Paketmetadaten, YAML,
Wrappern und Templates geliefert; andere Workspace-Pakete, Dokumentations-
und Beispielassets, vorgebaute Dateien und Tests sind ausgelassen. Diese
Auswahl unterstützt den hier beschriebenen direkten OCJS-Build, nicht den
separaten Replicad-TypeScript-Build oder sämtliche Monorepo-Tests.

Die ursprünglichen Upstream-Archivhashes bleiben als Herkunftsbelege im
Manifest erhalten. Die davon getrennten Lieferhashes kennzeichnen die
gefilterten Archive. Alle beibehaltenen regulären Quelldateien wurden
byteweise mit den Originalarchiven verglichen und sind unverändert.

## 2. Build-Werkzeuge installieren

Als Host unterstützt dieser native Upstream-Build Linux x86_64/aarch64 oder
macOS arm64. Er benötigt Bash, Git, einen C/C++-Hostcompiler samt Systemheadern, Doxygen, `uv`, Python
3.14.4 sowie Node.js ab Version 22 und npm. Das ursprüngliche Dockerfile
verwendet Node.js 24. Prüfen Sie die lokalen Versionen mit `node --version`,
`npm --version` und `doxygen --version`.

Die folgenden Schritte laden Compiler und übliche Entwicklungswerkzeuge
nach; sie laden die bereits bereitgestellten CAD-Quellen nicht erneut.
Das Upstream-Skript installiert emsdk 5.0.1, die in `uv.lock` fixierten
Python-Pakete und die in `DEPS.json` gehashten LLVM-17.0.6-Werkzeugpakete.
Diese Werkzeugpakete können mehrere GB Speicherplatz benötigen. Die
Compiler-Werkzeuge sind von den hier bereitgestellten CAD-Quellen zu
unterscheiden; dies ist kein vollständig offline installiertes SDK.

```sh
cd layerdream-cad-source/ocjs
uv python install 3.14.4
uv venv --python 3.14.4 .venv
export OCJS_STRICT_DEPS=1
./scripts/clone-deps.sh --dest deps
source deps/emsdk/emsdk_env.sh
export PATH="$PWD/.venv/bin:$PATH"
npm ci
```

`clone-deps.sh` erkennt die mitgelieferten Git-Snapshots an ihren exakten
Revisionen. Der emsdk-Installer ist ebenfalls bereits vorhanden. Die
mitgelieferten Emscripten-Quellen stehen zusätzlich unter `../emscripten-source`;
das emsdk-5.0.1-Werkzeugpaket installiert seinen dazugehörigen Arbeitsbaum
unter `deps/emsdk/upstream/emscripten`. Für den gepatchten `libembind.js`-Code
sind der unveränderte Ausgangstext, die Patchdatei und erwartete
Vorher-/Nachher-Hashes im OCJS-Quellpaket enthalten.

## 3. CAD-Bibliothek aus den Quellen bauen

Weiter im Ordner `ocjs/`:

```sh
mkdir -p ../replacement-output
export OCJS_OUTPUT_DIR="$(cd ../replacement-output && pwd)"
./build-wasm.sh --config single-threaded full ../replicad/packages/replicad-opencascadejs/build-config/custom_build_single.yml
```

Dieser Weg kompiliert OCCT und die Bindings neu; er setzt kein vorgebautes
OCJS-Containerimage voraus. `full` wendet die vier Upstream-OCCT-Patches und
den `libembind`-Patch an, generiert Bindings und kompiliert sowie verknüpft
die ausgewählten Funktionen. Die sechs Dateien im benachbarten Ordner
`build-config/wrappers/` müssen erhalten bleiben. Die fertig generierte YAML
ist mitgeliefert; `ytt` ist nur für die optionale Neugenerierung aus den
Templates erforderlich und wird hier nicht vorausgesetzt.

Ergebnisse sind insbesondere `replicad_single.js`, `replicad_single.wasm`,
`replicad_single.d.ts` und die vom Upstream-Build erzeugten Herkunftsdateien.
Bewahren Sie diese Herkunftsdateien und das Build-Protokoll auf. Der originale
WASM-Hash zum Vergleich lautet:

```text
4c9f22e9f3828dca6f3c95405934cdbe624e593c35266f47f392ab337478dbde
```

Ein anderer Hash beweist für sich genommen keine falschen Quellen; Umgebung,
Generatoren oder eigene Änderungen können das Ergebnis beeinflussen. Ein
erfolgreicher eigener Build und dessen Funktion sollten unabhängig geprüft
werden. Die Anwendung benötigt bei einem neuen Build gegebenenfalls das
passende Paar aus JavaScript-Loader und WASM. Folgen Sie anschließend der
Austauschanleitung des Studios für dieses Paar.

## 4. Eigene Änderungen

Sie können die bereitgestellten Bibliotheksquellen nach ihren jeweiligen
Lizenzen bearbeiten und einen kompatiblen Ersatz bauen. Legen Sie vor dem
ersten Build eine Arbeitskopie an und bewahren Sie die Ausgangsarchive auf.
OCJS verwaltet seine eigenen Patches und kann nicht zugeordnete, ungesicherte
OCCT-Änderungen ablehnen. Sichern Sie absichtliche eigene Änderungen daher als
lokalen Git-Commit. Verwenden Sie bei einer solchen absichtlich geänderten
Revision `OCJS_STRICT_DEPS=0`.

Führen Sie nach eigenen Änderungen nicht erneut `clone-deps.sh` aus: dieses
Skript würde zu den ursprünglichen Abhängigkeitsrevisionen zurückwechseln.
Verwenden Sie die bereits installierten Werkzeuge und den `full`-Buildschritt.
Änderungen an Dateien, die OCJS selbst patcht, müssen mit diesen Patches
abgestimmt werden; fehlgeschlagene Patches sind zu prüfen und nicht zu
übergehen. Veröffentlichen Sie bei eigener Weitergabe die nötigen geänderten
Quellen, Änderungsvermerke und Lizenzhinweise mit.

## Herkunft, Patches und Hinweise

`CAD-BUILD-PROVENANCE.json` beschreibt die festgestellte Verbindung zwischen
NPM-Paket, Build-Pins, Container-Metadaten und ausgelieferter Binärdatei.
`UPSTREAM-PATCH-LEDGER.md` und `upstream-occt-patches.diff` zeigen die
nachvollzogenen Änderungen. Der zusätzlich bereitgestellte markierte
OCCT-Dateiauszug enthält dieselben fachlichen Änderungen mit datierten
Quellhinweisen; die ursprünglichen Quellen und Patchskripte bleiben separat
unverändert verfügbar. Die Datumsangaben der Prüfung sind keine Behauptung
über das Herstellungsdatum der NPM-Binärdatei.

Der Helfer legt diese ergänzenden Dateien unter `source-notices/` ab. Das
Archiv `occt-dated-source-supplement-2026-09-23.tar.gz` enthält die 19 von
Upstream geänderten OCCT-Dateien mit ergänzten Vermerken vom 23.09.2026,
einer Erläuterung und Vorher-/Nachher-Prüfsummen. Es ist ein lesbarer
Quellauszug, kein zusätzliches Binärmodul. Die Kommentarergänzungen bewahren
die ursprünglichen Copyright-Zeilen und die Zeilenzahl. Für eine eigene
geänderte Bibliotheksfassung können diese Dateien als dokumentierter
Ausgangsstand übernommen und lokal committed werden; beachten Sie dabei
Abschnitt 4.

Lizenztexte liegen neben den Quellen und in der Lizenzübersicht des Studios.
OCCT steht unter LGPL 2.1 mit OCCT-Ausnahme; der OCJS-/Replicad-WASM-Wrapper
unter den im jeweiligen Paket enthaltenen Bedingungen. Die restlichen
Quellpakete behalten ihre eigenen Lizenzen. Die Aufnahme von FreeType oder
RapidJSON in dieses Quellangebot beweist nicht, dass jede ihrer Funktionen
in der ausgelieferten WASM-Datei enthalten ist.
