# 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.2026.01.07 Release: 1.20260114010632859279.main.147.g3060e18e3c%{?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 tsp_solver %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 ninja-build strace %if %{with tests} BuildRequires: xorg-x11-server-Xvfb python3-typing-extensions %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 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-lark 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 python3-typing-extensions python3-defusedxml %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.2 %build # Deal with cmake projects that tend to link excessively. LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS # -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ # -DCMAKE_INSTALL_DATAROOTDIR=%{_datadir} \ %cmake \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -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 \ -G Ninja %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 #Move files using `-DCMAKE_INSTALL_DATAROOTDIR=%%{_datadir}` break ctest mkdir -p %{buildroot}%{_datadir} mv %{buildroot}%{_libdir}/freecad/share/applications %{buildroot}%{_datadir}/ mkdir -p %{buildroot}%{_metainfodir} mv %{buildroot}%{_libdir}/freecad/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir -p %{buildroot}%{_datadir} mv %{buildroot}%{_libdir}/freecad/share/icons %{buildroot}%{_datadir}/ mv %{buildroot}%{_libdir}/freecad/share/pixmaps %{buildroot}%{_datadir}/ mv %{buildroot}%{_libdir}/freecad/share/mime %{buildroot}%{_datadir}/ mv %{buildroot}%{_libdir}/freecad/share/thumbnailers %{buildroot}%{_datadir}/ mv %{buildroot}%{_libdir}/freecad/share/pkgconfig %{buildroot}%{_datadir}/ %check %if %{with tests} mkdir -p %{buildroot}%tests_resultdir if %ctest -E '^QuantitySpinBox_Tests_run$' &> %{buildroot}%tests_resultdir/ctest.result ; then echo "ctest OK" else echo "**** Failed ctest ****" touch %{buildroot}%tests_resultdir/ctest.failed fi if xvfb-run \%ctest -R '^QuantitySpinBox_Tests_run$' &>> %{buildroot}%tests_resultdir/ctest_gui.result ; then echo "ctest gui OK" else echo "**** Failed ctest gui ****" touch %{buildroot}%tests_resultdir/ctest_gui.failed fi %endif desktop-file-validate %{buildroot}%{_datadir}/applications/org.freecad.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml} # 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/ %{_libdir}/%{name}/share/ %{_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 * Wed Jan 14 2026 Super User - 1:weekly.2026.01.07-1.20260114010632859279.main.147.g3060e18e3c - add git version information (github-actions[bot]) - BIM: implement baseless walls creation (#24595) (Furgo) - Part: Fix Part_Extrude taper angle regression for internal faces (#26781) (tetektoza) - Gui: Fix broken build in DlgAddProperty.cpp (#26877) (PaddleStroke) - PartDesign: Extrude: Fix upToShape document not recomputing correctly (#26696) (PaddleStroke) - Bump github/issue-metrics from 3.25.4 to 3.25.5 (dependabot[bot]) - CAM: Add threshold for treating large-radius arcs as linear in simulator (Billy Huddleston) - pixi: Add qt6-wayland dependency on Linux (Gaël Écorchard) - Draft: fix constrain error if there is no new point (#26868) (Roy-043) - BIM : Preserve Spreadsheet structure (#26736) (Yash Suthar) - PartDesign: Recompute preview only if enabled (#26805) (Kacper Donat) - Gui: Add common types to Add Property dialog (#26765) (Pieter Hijma) - Test: Add copy button (#25979) (Rahul Paul) - BIM: fix crazy edge issue with area calculation (Roy-043) - Bump actions/setup-python from 6.0.0 to 6.1.0 (dependabot[bot]) - PartDesign: Apply pattern transform in Feature not VP (Kacper Donat) - Part: Introduce PreviewUpdateScheduler (Kacper Donat) - Build: cmake: fixes #26247 update cmake to work with new required dep lark for BIM (#26407) (Chris) - fix hdf5 detection (Fabio Rossi) - Update translations from Crowdin (freecad-gh-actions-translation-bot) - Macro: Fix shortcuts in macro editor #26807 (timpieces) - CAM: fix typo in Path/Main/Gui/Job.py Fixes source comment typo (luzpaz) - CAM: Remove file added by accident. (Billy Huddleston) - Add files via upload (Roy-043) - CAM: Refactor Machine Editor UI, replace QToolBox with tabs (Billy Huddleston) - TechDraw: fix-wrong sWhatsThis for align-commands (Roy-043) - CI: Disable ubuntu run temporarily (Kacper Donat) - CI: Change github.ref into github.head_ref (Kacper Donat) - PartDesign: remove preview update on property changed (#26803) (Louis Gombert) - CAM: Adding retract annotation to drilling commands (#26584) (sliptonic) - BIM: Improve ArchStairs Landings code (Roy-043) - Assembly: Improve const correctness (wmayer) - Assembly: Minor refactor in ViewProviderAssembly::findDragMode (wmayer) - CAM: Dropped trailing percent from fanuc post processor output. (#26617) (petterreinholdtsen) - Draft Workbench: Patch for import DXF without CODE30 (Z for POINT) (#26778) (Stanislav) - Assembly: Explode radially: prevent click on item (PaddleStroke) - more machine cleanup (sliptonic) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - Revise machine (sliptonic) - Code cleanup. (sliptonic) - Rearranged some properties. added back bcnc comment output (sliptonic) - CAM: Remove colons from labels, fix lint, and update imports (Billy Huddleston) - CAM: Add Machine Library and Editor (Billy Huddleston) - Part: Fix orientation of internal shells of a solid (#26717) (Max Wilfinger) - Gui: Handle exception in showValidExpression (#26721) (Max Wilfinger) - PD: Handle reference edge in PolarPattern::getTransformations (#26722) (Max Wilfinger) - Adds an automatic compare link to the weekly release notes. (Max Wilfinger) - Sketcher: Fix crash when applying constraints during selection batching (tetektoza) - Add files via upload (PaddleStroke) - Revert "PartDesign: Bake in geometry transform after boolean" (tetektoza) - Fix sketch redundancy warning (#26064) (Saksham Malhotra) - Assembly: Ground joint tooltip update (#25852) (PaddleStroke) - Base: Remove Boost-based signals and switch to `FastSignals`. (tritao) - Merge pull request #26720 from PaddleStroke/patch-971612 (PaddleStroke) - FastSignals: Remove custom C++17 and libc++ build flags. (Joao Matos) - FastSignals: Fix Clang Tidy issues. (Joao Matos) - FastSignals: Replace ATOMIC_VAR_INIT usages with C++ 20 brace init. (Joao Matos) - FastSignals: Fix stress tests. (Joao Matos) - FastSignals: Build as static library by default. (Joao Matos) - FastSignals: Silence warning. (Joao Matos) - FastSignals: Remove MSVC autolinking. (Joao Matos) - FastSignals: Normalize namespace to `fastsignals`. (Joao Matos) - FastSignals: Update Catch2 to latest v2 version. (Joao Matos) - FastSignals: Add missing include. (Joao Matos) - FastSignals: Reorganize include and src folder. (Joao Matos) - FastSignals: Normalize CMake files. (Joao Matos) - FastSignals: Remove unused build files. (Joao Matos) - 3rdParty: Add FastSignals library. (Joao Matos) - Simplify code using xerces namespace (wmayer) - CI: Limit backports to pixi only (Kacper Donat) - CAM: fix Radius Mill TipDiameter resetting (jffmichi) - Improve error message for empty transformed features (Krrish777) - Merge pull request #23743 from xtemp09/fem-fix (xtemp09) - Merge pull request #26057 from TONY8779/fix-fem-existance-typo (aditya dubey) - TechDraw: improve draw performance (Louis Gombert) - Gui: Reorder Add Property dialog fields to Name-Value-Group-Type (#26567) (Krish Sharma) - Sketcher: Support Bezier and Offset curves as external geometry (#25144) (Leandro Heck) - FEM: Addition of "half cycle" animation (#24129) (mac-the-bike) - PartDesign: Enable drag and drop of shapeBinders (#25264) (PaddleStroke) - [Std_Measure] Add diameter measurement (#24853) (Kavin Teenakul) - Sketcher: Disable depth testing for constraint icons (tetektoza) - Gui: Render constraint text and arrowheads above geometry lines (tetektoza) - CAM: RampEntryDressup - Fix findMinZ() (tarman3) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - Sketcher: Override clang-format for some readability (Ajinkya Dahale) - Sketcher: Add test stubs for `SketchObject::addCopy()` (Ajinkya Dahale) - [Sketcher] Use `replaceGeometries()` in `join()` (Ajinkya Dahale) - [Sketcher] Use `auto` where possible (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject::updateGeometryRefs()` (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject::onChanged()` (Ajinkya Dahale) - [Sketcher] Refactor `removeAxesAlignment()` (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject::validateExpression()` (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject::migrateSketch()` (Ajinkya Dahale) - [Sketcher] Refactor some if-else statements in SketchObject (Ajinkya Dahale) - [Sketcher] Refactor `addSymmetric` and `getSymmetric` (Ajinkya Dahale) - [Sketcher] Refactor `delExternalPrivate()` (Ajinkya Dahale) - Sketcher: [test] Add test for `addExternal` and `delExternal` (Ajinkya Dahale) - [Sketcher] Move some checks to `Constraint` (Ajinkya Dahale) - [Sketcher] Use range-`for` loop where straightforward (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject::addCopy()` (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject` some more (Ajinkya Dahale) - [Sketcher] Refactor based on loops and extraction into functions (Ajinkya Dahale) - [Sketcher] Refactor some loops for understandability (Ajinkya Dahale) - [Sketcher] Refactor `SketchObject:validateExternalLinks()` (Ajinkya Dahale) - [Sketcher][test] Add tests for `replaceGeometries()` (Ajinkya Dahale) - [Sketcher] Fix issue in `replaceGeometries` when more old than new (Ajinkya Dahale) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - CAM - Experimental Waterline Minor Fix (Dimitris75) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - Fix 3D Surface Rotational Scan (Dimitris75) - CAM: Slot - Remove duplication move to clearance height in the end (tarman3) - CAM: Job - Fix setCenterOfRotation() (tarman3) - Base: Add millitesla unit (marioalexis) - Base: Insert SPDX specifier in parser script (marioalexis) - Fem: Add magnetic shielding example (marioalexis) - Fem: Add magnetic flux density boundary condition (marioalexis) - CAM: Profile - Limit value NumPasses (tarman3) - CAM: EngraveBase - Tolerance (tarman3) - CAM: Tag Dressup - Tolerance (tarman3) - also use the %% symbol for step over percent (David Kaufman) - use %% symbol in min/max helix diameter input fields, instead of the word 'percent' in the label (David Kaufman) - extract 'helix' header from property labels and make it the frame header (David Kaufman) - rename HelixIdealDiameter to HelixMaxDiameter and update documentation (David Kaufman) - [pre-commit.ci] auto fixes from pre-commit.com hooks (pre-commit-ci[bot]) - fix rebase error (David Kaufman) - update UI to label helix diameter as a percentage, reorganize (David Kaufman) - fix units bug (David Kaufman) - fix rebase errors (David Kaufman) - fix github warning (David Kaufman) - [CAM] add helix max stepdown parameter (David Kaufman) - [CAM] update/fix adaptive UI panel and parameter limits (David Kaufman) - [CAM] initial implementation of automatic helix size selection for adaptive (David Kaufman)