# This package depends on automagic byte compilation # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3 %global py_bytecompile 1 # 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 PathApp Import Inspection Materials MatGui Measure Mesh MeshPart Part _PartDesign PartDesignGui Path PathSimulator Points QtUnitGui ReverseEngineering Robot Sketcher Spreadsheet Start Surface TechDraw Web area flatmesh libDriver libDriverDAT libDriverSTL libDriverUNV libE57Format libMEFISTO2 libOndselSolver libSMDS libSMESH libSMESHDS libStdMeshers libarea-native tsp_solver # Some configuration options for other environments # rpmbuild --without=bundled_zipios: don't use bundled version of zipios++ %global bundled_zipios %{?_without_bundled_zipios: 0} %{?!_without_bundled_zipios: 1} # rpmbuild --without=bundled_pycxx: don't use bundled version of pycxx %global bundled_pycxx %{?_without_bundled_pycxx: 0} %{?!_without_bundled_pycxx: 1} # rpmbuild --without=bundled_smesh: don't use bundled version of Salome's Mesh %global bundled_smesh %{?_without_bundled_smesh: 0} %{?!_without_bundled_smesh: 1} # Prevent RPM from doing its magical 'build' directory for now %global __cmake_in_source_build 1 # See FreeCAD-main/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. %global bundled_smesh_version 7.7.1.0 %define name freecad %define github_name FreeCAD %define branch main %define appname FreeCAD #disable debug source/info package generation %define debug_package %{nil} Name: %{name} Epoch: 1 Version: 1.2 Release: dev_45227%{?dist} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: LGPLv2+ URL: http://www.freecadweb.org/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz # Utilities BuildRequires: cmake gcc-c++ gcc-gfortran BuildRequires: doxygen swig graphviz gettext BuildRequires: desktop-file-utils BuildRequires: git BuildRequires: tbb-devel # Development Libraries BuildRequires: freeimage-devel BuildRequires: libXmu-devel BuildRequires: mesa-libEGL-devel mesa-libGLU-devel BuildRequires: opencascade-devel BuildRequires: Coin4 Coin4-devel Coin4-doc BuildRequires: python3 python3-devel BuildRequires: python3-matplotlib python3-pivy python3-lark python3-pybind11 # Qt6 dependencies BuildRequires: qt6-qtsvg-devel qt6-qttools-static qt6-qtbase-private-devel qt6-linguist qt6-qttools-devel qt6-qttools BuildRequires: python3-shiboken6-devel python3-pyside6-devel pyside6-tools BuildRequires: boost-devel boost-python3-devel BuildRequires: eigen3-devel BuildRequires: fmt-devel BuildRequires: libspnav-devel BuildRequires: libicu-devel BuildRequires: libglvnd-devel BuildRequires: libkdtree++-devel BuildRequires: med-devel BuildRequires: netgen-mesher-devel netgen-mesher-devel-private BuildRequires: openmpi-devel BuildRequires: pcl-devel BuildRequires: vtk-devel BuildRequires: xerces-c xerces-c-devel BuildRequires: yaml-cpp-devel %if ! %{bundled_smesh} BuildRequires: smesh-devel %endif %if ! %{bundled_zipios} BuildRequires: zipios++-devel %endif %if ! %{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 Requires: fmt Requires: yaml-cpp Requires: qt6-assistant Requires: python3-pyside6 Requires: python3-pivy python3-matplotlib python3-collada #Really needed ??? Requires: python3-lark %if ! %{bundled_zipios} Requires: zipios++ %endif %if %{bundled_smesh} Provides: bundled(smesh) = %{bundled_smesh_version} %endif %if %{bundled_pycxx} Provides: bundled(python-pycxx) %endif Recommends: python3-pysolar # plugins and private shared libs in %%{_libdir}/freecad/lib are private; # prevent private capabilities being advertised in Provides/Requires %define plugin_regexp /^\\\(libFreeCAD.*%(for i in %{plugins}; do echo -n "\\\|$i\\\|$iGui"; done)\\\)\\\(\\\|Gui\\\)\\.so/d %{?filter_setup: %filter_provides_in %{_libdir}/%{name}/lib %filter_from_requires %{plugin_regexp} %filter_from_provides %{plugin_regexp} %filter_provides_in %{_libdir}/%{name}/Mod %filter_requires_in %{_libdir}/%{name}/Mod %filter_setup } %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 %prep %autosetup -p1 -n FreeCAD-%{branch} # Remove bundled pycxx if we're not using it %if ! %{bundled_pycxx} rm -rf src/CXX %endif %if ! %{bundled_zipios} rm -rf src/zipios++ #sed -i "s/zipios-config.h/zipios-config.hpp/g" \ # src/Base/Reader.cpp src/Base/Writer.h %endif # Removed bundled libraries %build rm -rf build && mkdir build && cd build # Deal with cmake projects that tend to link excessively. CXXFLAGS='-Wno-error=cast-function-type -Wdeprecated-declarations'; export CXXFLAGS 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} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DMEDFILE_INCLUDE_DIRS=%{_includedir}/med/ \ -DFREECAD_QT_VERSION:STRING=6 \ -DOpenGL_GL_PREFERENCE=GLVND \ -DUSE_OCC=TRUE \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ -DFREECAD_USE_EXTERNAL_FMT=ON \ %if ! %{bundled_smesh} -DFREECAD_USE_EXTERNAL_SMESH=TRUE \ -DSMESH_FOUND=TRUE \ -DSMESH_INCLUDE_DIR=%{_includedir}/smesh \ -DSMESH_DIR=`pwd`/../cMake \ %endif %if ! %{bundled_zipios} -DFREECAD_USE_EXTERNAL_ZIPIOS=TRUE \ %endif %if ! %{bundled_pycxx} -DPYCXX_INCLUDE_DIR=$(pkg-config --variable=includedir PyCXX) \ -DPYCXX_SOURCE_DIR=$(pkg-config --variable=srcdir PyCXX) \ %endif -DPACKAGE_WCREF="%{release} (Git)" \ -DPACKAGE_WCURL="git://github.com/%{github_name}/FreeCAD.git main" \ -DENABLE_DEVELOPER_TESTS=FALSE \ -DBUILD_GUI=TRUE \ ../ make fc_version for I in src/Build/Version.h src/Build/Version.h.out; do sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' $I sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git main\",' $I done %{make_build} %install cd build %make_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 mkdir -p %{buildroot}%{_metainfodir}/ mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir -p %{buildroot}%{_datadir} # mkdir %{buildroot}%{_datadir}/applications/ # mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications %{buildroot}%{_datadir}/ # mkdir -p %{buildroot}%{_datadir}/thumbnailers/ # mv %{buildroot}%{_libdir}/%{name}/share/thumbnailers/* %{buildroot}%{_datadir}/thumbnailers/ mv %{buildroot}%{_libdir}/%{name}/share/thumbnailers %{buildroot}%{_datadir}/ # mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ # mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ mv %{buildroot}%{_libdir}/%{name}/share/icons %{buildroot}%{_datadir}/ # mkdir -p %{buildroot}%{_datadir}/pixmaps/ # mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mv %{buildroot}%{_libdir}/%{name}/share/pixmaps %{buildroot}%{_datadir}/ # mkdir -p %{buildroot}%{_datadir}/mime/packages/ # mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime %{buildroot}%{_datadir}/ mv %{buildroot}%{_libdir}/%{name}/share/pkgconfig %{buildroot}%{_datadir}/ # Remove header from external library that's erroneously installed rm -rf %{buildroot}%{_libdir}/%{name}/include/E57Format rm -rf %{buildroot}%{_includedir}/OndselSolver rm -f %{buildroot}%{_datadir}/pkgconfig/OndselSolver.pc rm -dfr %{buildroot}%{_libdir}/%{name}/%{_lib}/cmake # Bug maintainers to keep %%{plugins} macro up to date. # # Make sure there are no plugins that need to be added to plugins macro new_plugins=`ls %{buildroot}%{_libdir}/%{name}/%{_lib} | sed -e '%{plugin_regexp}'` if [ -n "$new_plugins" ]; then echo -e "\n\n\n**** ERROR:\n" \ "\nPlugins not caught by regexp: " $new_plugins \ "\n\nPlugins in %{_libdir}/%{name}/lib do not exist in" \ "\nspecfile %%{plugins} macro. Please add these to" \ "\n%%{plugins} macro at top of specfile and 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 # Bytecompile Python modules %py_byte_compile %{__python3} %{buildroot}%{_libdir}/%{name} %check desktop-file-validate \ %{buildroot}%{_datadir}/applications/org.freecad.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ %{buildroot}%{_metainfodir}/*.FreeCAD.metainfo.xml} %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/* %{python3_sitelib}/%{name}/* %files data %{_datadir}/%{name}/ %{_docdir}/%{name}/LICENSE.html %{_docdir}/%{name}/ThirdPartyLibraries.html %changelog * Fri Sep 29 2023 Michele Giorato - Added missing MatGui.so Materials.so to regex * Thu Sep 28 2023 Michele Giorato - Fixed spec file. FreeCAD now require yaml-cpp and yaml-cpp-devel to build it * Fri Sep 22 2023 Michele Giorato -