# FreeCAD Web Dependency Closure This report is generated from the current FreeCAD checkout. It is an evidence inventory for the Web kernel P0 slice; it does not claim that the targets already compile under Emscripten or that Web behavior is feature-complete. - Schema: `freecad-web-dependency-closure/v1` - Generated: `2026-08-18T09:57:43+00:00` - Source HEAD: `4f4e9244e613ea2df06e70027074a562695048cb` - FreeCAD package version: `1.2.0` - CMake: `cmake version 3.28.3`; minimum `3.22.0` - Emscripten: `emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.6 ()` ## Target Inventory | Target | CMake source root | Files | Direct internal targets | |---|---|---:|---| | `FreeCADBase` | `src/Base` | 166 | - | | `FreeCADApp` | `src/App` | 203 | `FreeCADBase` | | `Materials` | `src/Mod/Material/App` | 72 | `FreeCADApp` | | `Part` | `src/Mod/Part/App` | 373 | `FreeCADApp`, `Materials` | | `PartDesign` | `src/Mod/PartDesign/App` | 77 | `FreeCADApp`, `Part` | | `Sketcher` | `src/Mod/Sketcher/App` | 67 | `FreeCADApp`, `Part` | ## Root Dependency Closure ### `FreeCADBase` - Targets: `FreeCADBase` - External packages: `Boost`, `ICU`, `POSIX libutil/libdl`, `PyCXX`, `Python3`, `Qt5::Core or Qt6::Core`, `Xerces-C`, `Zipios++`, `fmt`, `libfastsignals`, `zlib` ### `FreeCADApp` - Targets: `FreeCADApp`, `FreeCADBase` - External packages: `Boost`, `ICU`, `POSIX libutil/libdl`, `PyCXX`, `Python3`, `Qt5::Core or Qt6::Core`, `Qt5::Xml or Qt6::Xml`, `Xerces-C`, `Zipios++`, `fmt`, `libfastsignals`, `zlib` ### `Part` - Targets: `Part`, `FreeCADApp`, `FreeCADBase`, `Materials` - External packages: `Boost`, `FreeType`, `HarfBuzz`, `ICU`, `OpenCASCADE`, `POSIX libutil/libdl`, `PyCXX`, `Python3`, `Qt5::Concurrent or Qt6::Concurrent`, `Qt5::Core or Qt6::Core`, `Qt5::Xml or Qt6::Xml`, `Xerces-C`, `Zipios++`, `fmt`, `libfastsignals`, `yaml-cpp`, `zlib` ### `PartDesign` - Targets: `PartDesign`, `Part`, `FreeCADApp`, `FreeCADBase`, `Materials` - External packages: `Boost`, `FreeType`, `HarfBuzz`, `ICU`, `OpenCASCADE`, `POSIX libutil/libdl`, `PyCXX`, `Python3`, `Qt5::Concurrent or Qt6::Concurrent`, `Qt5::Core or Qt6::Core`, `Qt5::Xml or Qt6::Xml`, `Xerces-C`, `Zipios++`, `fmt`, `libfastsignals`, `nlohmann-json`, `yaml-cpp`, `zlib` ### `Sketcher` - Targets: `Sketcher`, `Part`, `FreeCADApp`, `FreeCADBase`, `Materials` - External packages: `Boost`, `Eigen3`, `FreeType`, `HarfBuzz`, `ICU`, `OpenCASCADE`, `POSIX libutil/libdl`, `PyCXX`, `Python3`, `Qt5::Concurrent or Qt6::Concurrent`, `Qt5::Core or Qt6::Core`, `Qt5::Xml or Qt6::Xml`, `Xerces-C`, `Zipios++`, `fmt`, `libfastsignals`, `nlohmann-json`, `yaml-cpp`, `zlib` `Materials` is included because `Part` links it, even though it is outside the five requested root targets. ## External Package Closure | Package | Used by | Locked source | Conditions / caveat | |---|---|---|---| | `Boost` | `FreeCADApp`, `FreeCADBase` | 1.83.0 (`boost1.83_1.83.0.orig.tar.xz`) | always | | `Eigen3` | `Sketcher` | 3.4.0 (`eigen-3.4.0.tar.gz`) | EIGEN3_FOUND | | `FreeType` | `Part` | 2.13.2 (`freetype-2.13.2.tar.xz`) | FREETYPE_FOUND | | `HarfBuzz` | `Part` | not in sources.lock.tsv | FREETYPE_FOUND | | `ICU` | `FreeCADBase` | not in sources.lock.tsv | always | | `OpenCASCADE` | `Part`, `PartDesign` | V7_6_3 (`occt-7.6.3.tar.gz`) | always | | `POSIX libutil/libdl` | `FreeCADBase` | not in sources.lock.tsv | CMAKE_SYSTEM_NAME == Linux | | `PyCXX` | `FreeCADBase` | r464 (`-`) | always; source/include | | `Python3` | `FreeCADBase` | 3.12.3 (`Python-3.12.3.tgz`) | BUILD_DYNAMIC_LINK_PYTHON | | `Qt5::Concurrent or Qt6::Concurrent` | `Materials` | 5.15.13 (`qt-everywhere-opensource-src-5.15.13.tar.xz`) | always | | `Qt5::Core or Qt6::Core` | `FreeCADApp`, `FreeCADBase` | 5.15.13 (`qt-everywhere-opensource-src-5.15.13.tar.xz`) | always | | `Qt5::Xml or Qt6::Xml` | `FreeCADApp` | 5.15.13 (`qt-everywhere-opensource-src-5.15.13.tar.xz`) | always | | `Xerces-C` | `FreeCADBase` | 3.2.4 (`xerces-c-3.2.4.tar.gz`) | always | | `Zipios++` | `FreeCADBase` | 2.2.6 (`zipios-2.2.6.tar.gz`) | FREECAD_USE_EXTERNAL_ZIPIOS selects link vs in-tree | | `fmt` | `FreeCADApp`, `FreeCADBase` | not in sources.lock.tsv | always | | `libfastsignals` | `FreeCADBase` | not in sources.lock.tsv | always; in-tree | | `nlohmann-json` | `PartDesign`, `Sketcher` | not in sources.lock.tsv | header-only; always | | `yaml-cpp` | `Materials` | not in sources.lock.tsv | always | | `zlib` | `FreeCADBase` | v1.3 (`zlib-1.3.tar.gz`) | always | ## Source Include Evidence The JSON report contains the full file lists and per-file include family evidence. The aggregate counts below show which external families are visible in the target source trees. - `FreeCADBase`: `Boost`=21, `ICU`=4, `PyCXX`=11, `Python`=5, `Qt`=48, `Xerces-C`=48, `Zipios++`=10, `fmt`=8, `unresolved quoted header`=42, `unresolved system header`=402 - `FreeCADApp`: `Boost`=83, `PyCXX`=11, `Python`=3, `Qt`=49, `Xerces-C`=21, `Zipios++`=12, `fmt`=4, `unresolved quoted header`=62, `unresolved system header`=726 - `Materials`: `PyCXX`=9, `Python`=1, `Qt`=102, `unresolved quoted header`=53, `unresolved system header`=139, `yaml-cpp`=2 - `Part`: `Boost`=24, `OpenCASCADE`=1527, `PyCXX`=1, `Qt`=10, `unresolved quoted header`=299, `unresolved system header`=1343 - `PartDesign`: `Boost`=3, `OpenCASCADE`=171, `Qt`=1, `nlohmann-json`=1, `unresolved quoted header`=11, `unresolved system header`=284 - `Sketcher`: `Boost`=34, `Eigen3`=6, `OpenCASCADE`=89, `PyCXX`=1, `Qt`=3, `fmt`=1, `nlohmann-json`=1, `unresolved quoted header`=26, `unresolved system header`=281 ## Conditions and Limits - `FreeCADBase`: BUILD_GUI is not required by this target; Python bindings are compiled in this target. - `FreeCADApp`: FreeCADBase must be built; Python bindings are compiled in this target. - `Materials`: Built when BUILD_MATERIAL is enabled; Material external manager is optional. - `Part`: BUILD_PART; Materials target must be available. - `PartDesign`: BUILD_PART_DESIGN; Part target must be available. - `Sketcher`: BUILD_SKETCHER; EIGEN3_FOUND is required by src/Mod/CMakeLists.txt; Part target must be available. - CMake conditionals, imported targets, generated sources, and platform-specific link resolution are not evaluated by this static scan. - The source lock has no checksum column; archive_sha256 is null unless --hash-archives is used. - A dependency in this report is not Web-compatible until an Emscripten configure/build probe succeeds. - The report is tied to the recorded git checkout and must be regenerated after source or build-option changes. ## Reproduction ```bash python3 FreeCAD/tools/generate_web_dependency_closure.py python3 FreeCAD/tools/generate_web_dependency_closure.py --hash-archives ``` The second command is the full checkpoint command. It reads the existing local archives and does not download anything. The first command is a faster inventory refresh that leaves archive checksums null.