Files
FreeCADWasmDev/docs/dependency-closure.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

6.8 KiB

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

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.