6.8 KiB
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; minimum3.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=402FreeCADApp:Boost=83,PyCXX=11,Python=3,Qt=49,Xerces-C=21,Zipios++=12,fmt=4,unresolved quoted header=62,unresolved system header=726Materials:PyCXX=9,Python=1,Qt=102,unresolved quoted header=53,unresolved system header=139,yaml-cpp=2Part:Boost=24,OpenCASCADE=1527,PyCXX=1,Qt=10,unresolved quoted header=299,unresolved system header=1343PartDesign:Boost=3,OpenCASCADE=171,Qt=1,nlohmann-json=1,unresolved quoted header=11,unresolved system header=284Sketcher: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.