# Some configuration options for other environments # rpmbuild --without=bundled_zipios: don't use bundled version of zipios++ %bcond_without bundled_zipios # rpmbuild --with=bundled_pycxx: use bundled version of pycxx %bcond_with bundled_pycxx # rpmbuild --without=bundled_smesh: don't use bundled version of Salome's Mesh %bcond_without bundled_smesh # rpmbuild --without=bundled_gtest: don't use bundled version of gtest and gmock %bcond_with bundled_gtest # rpmbuild --without=tests exclude tests in %%check %bcond_without tests # rpmbuild --without=debug_info don't generate package with debug info %bcond_without debug_info Name: freecad Epoch: 1 Version: weekly.2025.06.16 Release: 1.20250623161447411079.pr13.154.gb771966cf4%{?dist} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: LGPL-2.0-or-later URL: https://www.freecad.org/ Source0: freecad-sources.tar.gz # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%%{name}/lib, less '.so' and 'Gui.so', here %global plugins AssemblyApp AssemblyGui CAMSimulator DraftUtils Fem FreeCAD Import Inspection MatGui Materials Measure Mesh MeshPart Part PartDesignGui Path PathApp PathSimulator Points QtUnitGui ReverseEngineering Robot Sketcher Spreadsheet Start Surface TechDraw Web _PartDesign area flatmesh libDriver libDriverDAT libDriverSTL libDriverUNV libE57Format libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers libarea-native %global exported_libs libOndselSolver # See FreeCAD-main/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. %global bundled_smesh_version 7.7.1.0 # See /src/3rdParty/PyCXX/CXX/Version.h to find this out. %global bundled_pycxx_version 7.1.9 # See /src/3rdParty/OndselSolver/CMakeLists.txt to find this out. %global bundled_ondsel_solver_version 1.0.1 # Utilities BuildRequires: cmake gcc-c++ gettext doxygen swig graphviz gcc-gfortran desktop-file-utils tbb-devel %if %{with tests} BuildRequires: xorg-x11-server-Xvfb %if %{without bundled_gtest} BuildRequires: gtest-devel gmock-devel %endif %endif # Development Libraries BuildRequires:boost-devel Coin4-devel eigen3-devel freeimage-devel fmt-devel libglvnd-devel libicu-devel libkdtree++-devel libspnav-devel libXmu-devel med-devel mesa-libEGL-devel mesa-libGLU-devel netgen-mesher-devel netgen-mesher-devel-private opencascade-devel openmpi-devel python3 python3-devel python3-matplotlib python3-pivy python3-pybind11 python3-pyside6-devel python3-shiboken6-devel pyside6-tools qt6-qttools-static qt6-qtsvg-devel vtk-devel xerces-c-devel yaml-cpp-devel #pcl-devel %if %{without bundled_smesh} BuildRequires: smesh-devel %endif %if %{without bundled_zipios} BuildRequires: zipios++-devel %endif %if %{without bundled_pycxx} BuildRequires: python3-pycxx-devel %endif # For appdata %if 0%{?fedora} BuildRequires: libappstream-glib %endif # Packages separated because they are noarch, but not optional so require them # here. Requires: %{name}-data = %{epoch}:%{version}-%{release} # Obsolete old doc package since it's required for functionality. Obsoletes: %{name}-doc < 0.22-1 Requires: hicolor-icon-theme fmt python3-matplotlib python3-pivy python3-collada python3-pyside6 qt6-assistant %if %{with bundled_smesh} Provides: bundled(smesh) = %{bundled_smesh_version} %endif %if %{with bundled_pycxx} Provides: bundled(python-pycxx) = %{bundled_pycxx_version} %endif Provides: bundled(libondselsolver) = %{bundled_ondsel_solver_version} Recommends: python3-pysolar IfcOpenShell-python3 # plugins and private shared libs in %%{_libdir}/freecad/lib are private; # prevent private capabilities being advertised in Provides/Requires %global plugin_exclude %( for i in %{plugins}; do echo -n "\|$i\(Gui\)\?"; done ) # prevent declaring Requires for internal FreeCAD libraries %global lib_exclude %( for i in %{exported_libs}; do echo -n "\|$i"; done ) %global __requires_exclude_from ^%{_libdir}/%{name}/(lib|Mod)/.* %global __provides_exclude_from ^%{_libdir}/%{name}/Mod/.* %global __provides_exclude ^(libFreeCAD.*%{plugin_exclude})\.so.* %global __requires_exclude ^(libFreeCAD.*%{plugin_exclude}%{lib_exclude})\.so.* %description FreeCAD is a general purpose Open Source 3D CAD/MCAD/CAx/CAE/PLM modeler, aimed directly at mechanical engineering and product design but also fits a wider range of uses in engineering, such as architecture or other engineering specialities. It is a feature-based parametric modeler with a modular software architecture which makes it easy to provide additional functionality without modifying the core system. %package data Summary: Data files for FreeCAD BuildArch: noarch Requires: %{name} = %{epoch}:%{version}-%{release} %description data Data files for FreeCAD %package libondselsolver-devel Summary: Development file for OndselSolver BuildArch: noarch Requires: %{name} = %{epoch}:%{version}-%{release} %description libondselsolver-devel Development file for OndselSolver #path that contain main FreeCAD sources for cmake %global tests_resultdir %{_datadir}/%{name}/tests_result/%{_arch} %if %{without debug_info} %global debug_package %{nil} %global _enable_debug_packages 0 %endif %prep %setup -T -a 0 -q -c -n FreeCAD-1.0.1 %build # Deal with cmake projects that tend to link excessively. LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %cmake \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DCMAKE_INSTALL_DATAROOTDIR=%{_datadir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ -DFREECAD_USE_EXTERNAL_FMT=TRUE \ -DFREECAD_USE_PCL:BOOL=OFF \ -DFREECAD_QT_VERSION:STRING=6 \ -DOpenGL_GL_PREFERENCE=GLVND \ -DUSE_OCC=TRUE \ %if %{without bundled_pycxx} -DPYCXX_INCLUDE_DIR=$(pkg-config --variable=includedir PyCXX) \ -DPYCXX_SOURCE_DIR=$(pkg-config --variable=srcdir PyCXX) \ %endif %if %{without bundled_smesh} -DFREECAD_USE_EXTERNAL_SMESH=TRUE \ %endif %if %{without bundled_zipios} -DFREECAD_USE_EXTERNAL_ZIPIOS=TRUE \ %endif %if %{with tests} -DENABLE_DEVELOPER_TESTS=TRUE \ %if %{without bundled_gtest} -DFREECAD_USE_EXTERNAL_GTEST=TRUE \ %else -DINSTALL_GTEST=OFF \ -DINSTALL_GMOCK=OFF \ %endif %else -DENABLE_DEVELOPER_TESTS=FALSE \ %endif -DONDSELSOLVER_BUILD_EXE=TRUE \ -DBUILD_GUI=TRUE %cmake_build %install %cmake_install # Symlink binaries to /usr/bin mkdir -p %{buildroot}%{_bindir} ln -s ../%{_lib}/%{name}/bin/FreeCAD %{buildroot}%{_bindir}/FreeCAD ln -s ../%{_lib}/%{name}/bin/FreeCADCmd %{buildroot}%{_bindir}/FreeCADCmd # Remove header from external library that's erroneously installed rm -rf %{buildroot}%{_libdir}/%{name}/include/E57Format rm -rf %{buildroot}%{_includedir}/gmock rm -rf %{buildroot}%{_includedir}/gtest rm -rf %{buildroot}%{_libdir}/%{name}/%{_lib}/cmake rm -rf %{buildroot}%{_libdir}/%{name}/%{_lib}/pkgconfig %check desktop-file-validate %{buildroot}%{_datadir}/applications/org.freecad.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml} %if %{with tests} mkdir -p %{buildroot}%tests_resultdir pushd %_vpath_builddir if (timeout 30m ./tests/Tests_run) &> %{buildroot}%tests_resultdir/Tests_run.result ;then echo "Test_run OK" else echo "**** Failed Test_run ****" touch %{buildroot}%tests_resultdir/Tests_run.failed cat %{buildroot}%tests_resultdir/Tests_run.result fi popd if %ctest &> %{buildroot}%tests_resultdir/ctest.result ; then echo "ctest OK" else echo "**** Failed ctest ****" touch %{buildroot}%tests_resultdir/ctest.failed cat %{buildroot}%tests_resultdir/ctest.result fi %endif # Bug maintainers to keep %%{plugins} macro up to date. # # Make sure there are no plugins that need to be added to plugins macro %define plugin_regexp /^\\\(libFreeCAD.*%(for i in %{plugins}; do echo -n "\\\|$i"; done)\\\)\\\(\\\|Gui\\\)\\.so/d %define exported_libs_regexp /^\\\(%(for i in %{exported_libs}; do echo -n "\\\|$i"; done)\\\)\\.so/d new_plugins=`ls %{buildroot}%{_libdir}/%{name}/%{_lib} | sed -e '%{plugin_regexp}' -e '%exported_libs_regexp'` if [ -n "$new_plugins" ]; then echo -e "\n\n\n**** ERROR:\n" \ "\nPlugins not caught by regexps:" \ "\n" $new_plugins \ "\n\nPlugins in %{_libdir}/%{name}/lib do not exist in" \ "\nspecfile %%{plugins} or %%{exported_libs_regexp} macro." \ "\nPlease add these to %%{plugins} or %%{exported_libs}" \ "\nmacro at top of specfile" \ "\nand rebuild.\n****\n" 1>&2 exit 1 fi # Make sure there are no entries in the plugins macro that don't match plugins for p in %{plugins}; do if [ -z "`ls %{buildroot}%{_libdir}/%{name}/%{_lib}/$p*.so`" ]; then set +x echo -e "\n\n\n**** ERROR:\n" \ "\nExtra entry in %%{plugins} macro with no matching plugin:" \ "'$p'.\n\nPlease remove from %%{plugins} macro at top of" \ "\nspecfile and rebuild.\n****\n" 1>&2 exit 1 fi done # Make sure there are no entries in the exported_libs_regexp macro that don't match plugins for d in %{exported_libs}; do if [ -z "`ls %{buildroot}%{_libdir}/%{name}/%{_lib}/$d*.so`" ]; then set +x echo -e "\n\n\n**** ERROR:\n" \ "\nExtra entry in %%{exported_libs} macro with no matching lib:" \ "'$d'.\n\nPlease remove from %%{exported_libs} macro at top of" \ "\nspecfile and rebuild.\n****\n" 1>&2 exit 1 fi done %post /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : /usr/bin/update-desktop-database &> /dev/null || : /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : %postun if [ $1 -eq 0 ] ; then /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi /usr/bin/update-desktop-database &> /dev/null || : /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor/scalable/apps &>/dev/null || : %files %{_bindir}/* %{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ %{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Ext/ %{_libdir}/%{name}/Mod/ %{_datadir}/applications/* %{_datadir}/icons/hicolor/* %{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %{_datadir}/thumbnailers/* #find a way to configure in cmake with %%name to avoid conflict with different package name %{python3_sitelib}/freecad/* %if %{with tests} %tests_resultdir/* %endif %files data %{_datadir}/%{name}/ %{_docdir}/%{name}/LICENSE.html %{_docdir}/%{name}/ThirdPartyLibraries.html %files libondselsolver-devel %{_datadir}/pkgconfig/OndselSolver.pc %{_includedir}/OndselSolver/* %changelog * Mon Jun 23 2025 Packit - 1:weekly.2025.06.16-1.20250623161447411079.pr13.154.gb771966cf4 - add git information (github-actions[bot]) - add github action (filippor) - small fix (filippor) - add tests in test-farm (filippor) - add packit configuration (filippor) - use custom macro to package the source file (filippor) - Sketcher: Implement related constraint command for non edges (Karliss) - Sketcher: Fix circle-line negative distance (Florian Foinant-Willig) - CAM: added command line arguments for finish label, (#21881) (LarryWoestman) - [Measure] Fix seg fault in MeasurePosition::execute if subElements is empty (#22016) (Syres916) - Sketcher: refactor planecgs/Constraints (#21988) (Florian Foinant-Willig) - CAM: sort tool paths for Engrave and Deburr operation (#21531) (jffmichi) - Assembly: Fix conflicting shortcuts (Max Wilfinger) - CAM: Custom gcode - Improve error messages (#21509) (tarman3) - CAM: Fix format specifier for size_t (unsigned long) (#22005) (Chris Hennes) - Update ArchComponent.py (Roy-043) - Update BimTDPage.py (Roy-043) - Update ArchSchedule.py (Roy-043) - Update ArchAxis.py (Roy-043) - BIM: fix filtering out level issue (#22059) (Roy-043) - Update BimProjectManager.py (Roy-043) - Update ArchMaterial.py (Roy-043) - BIM: fix index error in ifc_viewproviders.py (Roy-043) - BIM: fix ArchProfile update issues (Roy-043) - BIM: fix display of help menu items after WB reactivation (improved) (Roy-043) - DXF: do not ignore the setting that controls importing paper layouts (Furgo) - [ArchCurtainWall] Fix Vert-Horiz Mullion Mix-up & Support Swap (Variables name) (Paul Lee) - [ArchCurtainWall] Fix Vert-Horiz Mullion Mix-up & Support Swap (Paul Lee) - Help: Change URL sanitization to be safer (Chris Hennes) - [ArchRoof] Improve subVolume generation (Paul Lee) - [BIM] Fix Runtime Error when creating Wall (#21862) (Syres916) - Gui: Use proper placement property for Link (Kacper Donat) - Part: Align to planar curves normal direction (Bas Ruigrok) - [GUI] Remove dark fringe around letters (#21536) (xtemp09) - Sketcher: 3 Point Symmetry fixed if root is selected first (and simplify and fix the selection logic) (#21612) (matthiasdanner) - Core: Use bypass WM hint for X11 for search list in preferences (tetektoza) - Core: Handle globalPos for both Qt6 and Qt5 (tetektoza) - Core: Correct font sizes to be smaller in search box in preferences (tetektoza) - Core: Remove displayText field from search box's result (tetektoza) - Core: Move reusable parts of MixedFontDelegate to separate functions (tetektoza) - Core: Use separate roles for found item in font delegate for search (tetektoza) - Core: Use designated init for SearchResult in preferences (tetektoza) - Core: Use an enum for search bar popup in preferences (tetektoza) - Core: Extract preferences search bar to it's own class (tetektoza) - Core: Formatting changes for search in preferences (tetektoza) - Core: Introduce searching in Preferences (tetektoza) - Gui: Allow users to add groups to active objects (tetektoza) - App: Expose allowObject for groups in python (Benjamin Nauck) - Core: Add a possibility to extract active object based on extension (tetektoza) - find job in parent chain (#21742) (Balazs Nagy) - CAM: simplify Order Output By Tool logic and fix #21969 (#21970) (jffmichi) - CAM: improve Job toggleVisibility (#21802) (jffmichi) - [Spreadsheet] Replace override cursor with QGraphicsItem::setCursor (#22097) (xtemp09) - Measure: Remove redundant check for edges > 0 (Chris Hennes) - CI: Eliminate 3rd party and generated code from analysis (Chris Hennes) - Sketcher: Remove redundant checks (Chris Hennes) - Sketcher: Remove dead code (Chris Hennes) - Part: Remove remnants of code from TNP merge (Chris Hennes) - Tools: Use a safer hostname detection (Chris Hennes) - Gui: Use middle elide for text in model tree (Benjamin Nauck) - Gui: Add toggle overlay icons (Max Wilfinger) - CI: only lint on PRs. (Jacob Oursland) - Sketcher: Handle additional characters for OVP in regexp (tetektoza) - Gui: Tasks: fix in place close and ok buttons (Alfredo Monclus) - Gui: Move Submenu Commands in Tool Menu (#20864) (Kris) - CI: limit C++ lint to changed lines. (Jacob Oursland) - CI: determine modified lines in a clang-tidy compatible way. (Jacob Oursland) - Gui: Change ordering of names in Link property (tetektoza) - Bump github/issue-metrics from 3.20.1 to 3.21.0 (dependabot[bot]) - [BIM][Draft][CAM] preparation for deprecation of QCheckBox… (#21939) (Syres916) - PartDesign: Added 1 3/16 16 threaded drill hole diameter (#22000) (David Tanana) - Draft: Eliminate redundant assignment to self (#22006) (Chris Hennes) - DXF: rename "Group layers into blocks" setting (#21896) (Furgo) - BIM: Allow user to skip dialog during type conversion (tetektoza) - BIM: Fix IFC type assignment not being saved to file (tetektoza) - [pre-commit.ci] pre-commit autoupdate (pre-commit-ci[bot]) - Gui: Emit signal to EditableDatumLabel only if there's no digits (tetektoza) - Core: Add guard in Tree to ensure we don't process items during deletion (tetektoza) - Core: Fix crashes during item deletion in specific selection order (tetektoza) - Sketcher: Remove redundant comment regarding old SoAnnotation node (tetektoza) - Sketcher: Prioritize rendering geometry lines rendering over constraints (tetektoza) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - FEM: Data extraction lint updates (Stefan Tröger) - Rebase and minor adjustments (Roy-043) - Bump step-security/harden-runner from 2.12.0 to 2.12.1 (dependabot[bot]) - Bump github/codeql-action from 3.28.19 to 3.29.0 (dependabot[bot]) - Sketcher: Refactor GeoDef and ConstrDef structs (Benjamin Nauck) - BIM: Fix Arch_SectionPlane having incorrect display style upon init (tetektoza) - App: Trim “Gui::” and “NavigationStyle” more securely (Benjamin Nauck) - Sketcher: Add contextual input hints to edit tools (InputHints Phase 3) (#21806) (George Peden) - Gui: Center notification label and disable show report view by default (#21872) (Max Wilfinger) - Import: DXF, handle non-standard 8859_1 encoding (#21905) (Furgo) - BIM: fix display of help menu items after reactivation (Roy-043) - TechDraw: Add spacing preview without OCCT calls (Ryan Kembrey) - CAM: Show abbreviations next to properly labels in the toolbit editor (#21887) (Samuel) - 3rdParty: avoid warnings from libE57Format (#21818) (Furgo) - BIM: fix ArchPipe's view provider initialization (Furgo) - Part: FaceMakerRing from RealThunder's branch. (paddle) - Sketcher: ShowDimensionalName by default (Max Wilfinger) - Base: Use nested std::array for Matrix4D class (wmayer) - Base: Simplify Base::Matrix4D (wmayer) - Base: Use i,j consistently for iterations Matrix4D (wmayer) - Base: Do not use short int in Matrix4D (wmayer) - Bump prefix-dev/setup-pixi from 0.8.8 to 0.8.10 (#21973) (dependabot[bot]) - FEM: Extraction code CodeQL updated and typo fix (Stefan Tröger) - FEM: Include code quality improvements from review (Stefan Tröger) - FEM: Prevent invalid index for data extraction (Stefan Tröger) - FEM: Plot single frame index data as point (Stefan Tröger) - FEM: Data extraction code version conflicts resolved: PySide, mpl, VTK (Stefan Tröger) - FEM: Adopt data extraction code to ubuntu LTS (Stefan Tröger) - FEM: Remove VTK 9.4 only function And make sure filters task dialogs can be used if something in python fails (Stefan Tröger) - FEM: Update data extraction dialog titles and spelling errors (Stefan Tröger) - FEM: Fix impact of stylesheet min button widht (Stefan Tröger) - FEM: Ensure tests run without GUI with data extraction code (Stefan Tröger) - FEM: Data extraction ui works better with stylesheets (Stefan Tröger) - FEM: Adopt data extraction for VTK <9.3: different table filter Additionally remove unneeded includes in c++ code remaining from earlier experiments (Stefan Tröger) - FEM: Ensure post task dialogs work without VTK python build (Stefan Tröger) - FEM: Add data extraction objects to FEM test suite (Stefan Tröger) - FEM: port DataAlongLine filter to use arc length. This makes it easier for the new data extraction to also plot data over line length. (Stefan Tröger) - FEM: Data extraction objects are FEM::FeaturePython This allows them to be drag and droped in an analysis (Stefan Tröger) - FEM: Adopt post extraction code to updated main (Stefan Tröger) - FEM: Usability and UI improvements for data extraction Update icons for post data extraction Improve translatability of post data extraction Fix post data extraction commit handling (Stefan Tröger) - FEM: Allow export of post processing data tables to CSV files or to cliboard to paste into spreadsheet programs (Stefan Tröger) - FEM: Post data visualization bug fixes and quality of life updates (Stefan Tröger) - FEM: Add extraction task panel to data plot filters (Stefan Tröger) - FEM: Add table post data visualization (Stefan Tröger) - FEM: Add index over frames visualizations (Stefan Tröger) - Fem: Implement lineplot visualization (Stefan Tröger) - FEM: Draft architecture of post data extraction with histogram example (Stefan Tröger) - Gui: refactor SoLinearDragger (#21451) (Captain) - Sketcher: Fix autoscale issue with the origin (#21952) (theo-vt) - Gui: use parameter observer for locale parameter (Benjamin Bræstrup Sayoc) - Gui: Fix regression pointed out in review (Benjamin Nauck) - Gui: Refactor LCS fixes (Benjamin Nauck) - Gui: Fix crash when creating a LCS (wmayer) - Revert "Sheet: Disable zooming" (Ladislav Michl) - Spreadsheet: Fix cursor being stuck resize state when scaled (Kacper Donat) - BIM: Use PrefCheckableGroupBox in IFC exporter preferences page (Furgo) - Draft: handle reading defaults from PrefCheckableGroupBox (Furgo) - Gui: add new PrefCheckableGroupBox widget (Furgo)