3rd Party Dependencies
Relevant source files
The following files were used as context for generating this wiki page:
The Parashell project relies on a diverse ecosystem of third-party libraries and tools to provide core functionalities ranging from 3D point cloud processing to XML parsing and geometric computations. These dependencies are integrated into the build system via CMake and are managed through both external system-wide installations and internal inclusions within the src/3rdParty directory.
The project emphasizes using open standards and encourages contributions that minimize the addition of new dependencies unless absolutely necessary. As a fork of FreeCAD, Parashell maintains compatibility with many of FreeCAD's established third-party integration patterns.
Sources: CONTRIBUTING.md:105-106, src/Mod/CAM/Roadmap/README.md:23-26
Core Build-Time Dependencies
The build system utilizes CMake to detect and configure mandatory and optional third-party components.
Essential Libraries and Tools
The following table summarizes the primary libraries detected and used by the global build system:
| Dependency | Purpose | Requirement |
|---|---|---|
| CMake | Build system generation (Minimum 3.22.0) | Mandatory |
| Python | Scripting and automation support | Mandatory |
| Boost | C++ utility libraries (e.g., ignore_unused, Smart Pointers) | Mandatory |
| Xerces-C++ | XML parsing and validation | Mandatory |
| Qt (Core/Xml) | UI framework and XML processing | Mandatory |
| fmt | Modern C++ text formatting | Mandatory |
| Eigen | Linear algebra and matrix computations | Mandatory |
| Clipper 2 | Polygon clipping and offsetting | Mandatory |
| ZLIB | Data compression | Mandatory |
Sources: CMakeLists.txt:2-104, src/App/CMakeLists.txt:104-122, src/App/Metadata.cpp:32-35
Build Process Integration
The project uses specific CMake macros and find-modules to ensure dependencies are correctly linked. The diagram below illustrates the high-level dependency discovery flow during configuration:
The configuration phase triggers specialized setup functions for each major dependency to define include paths and library targets.
Sources: CMakeLists.txt:80-140, src/App/CMakeLists.txt:104-118
Specialized 3rd Party Components
Point Cloud Processing: libE57Format
The project includes libE57Format, a C++ library providing read and write support for the ASTM-standard E57 file format. This is critical for storing 3D point cloud data, attributes (color/intensity), and 2D images.
- Internal Dependency: It requires
Xerces-C++for XML parsing. - Language Level: Requires a C++14 compatible compiler.
- Integration: The project uses a "hard fork" approach for integrating this library to allow for specific modifications and macOS compatibility fixes.
Sources: src/3rdParty/libE57Format/README.md:1-40, src/3rdParty/libE57Format/README.md:105-115
Geometric Operations: Clipper 2
The CAM (Computer-Aided Manufacturing) workbench is currently undergoing an initiative to upgrade its geometric processing backend from Clipper 1/libarea to Clipper 2. This library is essential for path generation and offset calculations in CNC workflows.
Sources: src/Mod/CAM/Roadmap/README.md:111-111, CMakeLists.txt:100-100
Documentation and Diagnostics
| Component | Functionality | File Reference |
|---|---|---|
| Doxygen | Generates technical documentation from source comments | src/Doc/CMakeLists.txt |
| Graphviz (dot) | Used by Doxygen to generate relationship diagrams | src/Doc/CMakeLists.txt |
| Tracy | Optional frame profiler for performance analysis | src/App/CMakeLists.txt |
| ccache | Speeds up compilation by caching objects | CMakeLists.txt |
Sources: src/Doc/CMakeLists.txt:13-25, src/App/CMakeLists.txt:10-12, CMakeLists.txt:38-48
Metadata and Package Management
The App::Metadata class interacts with third-party libraries (specifically Xerces-C++) to parse package.xml files. These files define dependencies for external addons and workbenches.
Dependency Specification Logic
The system supports several dependency types:
- automatic: Default type.
- internal: Dependencies within the core project.
- addon: External extensions.
- python: Python-specific packages.
The Metadata system uses Xerces-C to validate if installed components satisfy required third-party version constraints.
Sources: src/App/Metadata.h:115-144, src/App/Metadata.cpp:115-130
Summary of Integration Practices
Third-party dependencies in Parashell are managed with a focus on stability and performance. Essential libraries like Boost and Qt are linked privately to the core application, while specialized libraries like libE57Format are maintained as internal forks to ensure cross-platform compatibility. The use of ccache and AddressSanitizer (ASan) (optional) during development ensures that these external components interact safely with the project's internal C++ logic.
Sources: CMakeLists.txt:60-70, src/App/CMakeLists.txt:60-70, src/3rdParty/libE57Format/README.md:55-65