View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004132 | FreeCAD | Patch | public | 2019-09-16 20:13 | 2019-09-25 18:21 |
Reporter | sopwith | Assigned To | pfirszt | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | Linux | OS | Fedora | OS Version | 30 |
Summary | 0004132: Patch fedora.spec to get FreeCAD packages building again | ||||
Description | Builds are failing/disabled on https://copr.fedorainfracloud.org/coprs/g/freecad/nightly/ The attached patch for FreeCAD/package/fedora/freecad.spec gets it building again for me - I used FC30 and FreeCAD master branch as of commit #18236. | ||||
Tags | #lowhangingfruit, linux, packaging | ||||
FreeCAD Information | |||||
|
freecad.spec.patch (5,381 bytes)
diff -up ./freecad.spec.base ./freecad.spec --- ./freecad.spec.base 2019-09-16 15:40:59.908156457 -0400 +++ ./freecad.spec 2019-09-16 15:41:46.564758799 -0400 @@ -44,17 +44,32 @@ BuildRequires: med-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private +BuildRequires: libusb-devel +%if 0%{?fedora} > 28 +BuildRequires: python3-pivy +BuildRequires: boost-python3 +BuildRequires: boost-python3-devel +BuildRequires: mesa-libEGL-devel +BuildRequires: python3-matplotlib +BuildRequires: python3 +BuildRequires: python3-devel +BuildRequires: python3-pyside +BuildRequires: pyside2-tools +BuildRequires: python3-pyside2-devel +BuildRequires: python3-shiboken2-devel +%else +BuildRequires: boost-python2 +BuildRequires: boost-python2-devel +BuildRequires: python2-pivy +BuildRequires: python2-matplotlib +BuildRequires: python2 +BuildRequires: python2-devel +BuildRequires: python2-pyside BuildRequires: pyside-tools -BuildRequires: python -BuildRequires: python-matplotlib -%if 0%{?fedora} < 30 -BuildRequires: python-pivy -%endif -BuildRequires: python-pyside BuildRequires: python-pyside-devel -BuildRequires: python2-devel -BuildRequires: qt-devel -BuildRequires: qt-webkit-devel +%endif +BuildRequires: qt5-devel +BuildRequires: qt5-qtwebkit-devel BuildRequires: shiboken BuildRequires: shiboken-devel BuildRequires: smesh @@ -65,14 +80,7 @@ BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel BuildRequires: zlib-devel -%if 0%{?fedora} > 28 -BuildRequires: boost-python2 -BuildRequires: boost-python2-devel -BuildRequires: boost-python3 -BuildRequires: boost-python3-devel -BuildRequires: mesa-libEGL-devel -BuildRequires: python3-matplotlib -%endif +BuildRequires: pcl-devel # For appdata %if 0%{?fedora} @@ -88,12 +96,23 @@ Obsoletes: %{name}-doc < 0.13-5 # Needed for plugin support and is not a soname dependency. %if ! 0%{?rhel} <= 6 && "%{_arch}" != "ppc64" # python-pivy does not build on EPEL 6 ppc64. -Requires: python-pivy +%if 0%{?fedora} > 28 +Requires: python3-pivy +%else +Requires: python2-pivy +%endif %endif Requires: hicolor-icon-theme +%if 0%{?fedora} > 28 +Requires: python3-matplotlib +Requires: python3-collada +Requires: python3-pyside2 +Recommends: python3-pysolar +%else Requires: python-matplotlib Requires: python-collada Requires: python-pyside +%endif # plugins and private shared libs in %%{_libdir}/freecad/lib are private; # prevent private capabilities being advertised in Provides/Requires @@ -154,9 +173,18 @@ rm -rf build && mkdir build && cd build -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ + -DFREECAD_USE_PCL=TRUE \ + -DBUILD_QT5=ON \ + -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ +%if 0%{?fedora} > 28 + -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ +%else + -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python2 \ +%endif -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ ../ +make fc_version sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h @@ -179,8 +207,11 @@ mv %{buildroot}%{_libdir}/%{name}/share/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ -mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/apps/* %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ +mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ + +mkdir -p %{buildroot}%{_datadir}/pixmaps/ +mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ @@ -188,8 +219,8 @@ mv %{buildroot}%{_libdir}/%{name}/share/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ -rmdir -p mime/packages/ -rmdir -p icons/hicolor/scalable/apps/ +rm -rf mime +rm -rf icons popd # Bug maintainers to keep %%{plugins} macro up to date. @@ -206,7 +237,7 @@ if [ -n "$new_plugins" ]; then 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 + 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:" \ @@ -246,11 +277,12 @@ fi %{_bindir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ -%{_libdir}/%{name}/lib/ +%{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* -%{_datadir}/icons/hicolor/scalable/apps/* +%{_datadir}/icons/hicolor/scalable/* +%{_datadir}/pixmaps/* %{_datadir}/appdata/* %{_datadir}/mime/packages/* |
|
@hobbes1069 are you involved with the copr nightly ? |
|
No, I'm not. I only manage the official builds for Fedora... I tried to look at the patch but it won't load. Currently I'm working on two things: 1. Pyside1 -> PySide2 (which includes qt4 -> qt5) 2. Coin3 -> Coin4 (new package for Fedora) |
|
@hobbes1069 do you see the '+' sign ? (See screenshot) |
|
After a little more digging, @sliptonic seems to be the maintainer of the COPR build. If someone reviews this patch and commits it into the FreeCAD git repository, I think COPR should probably just pick it up automatically, since COPR appears to be pulling everything from the master branch for its builds, .spec file included. |
|
Yes, the + button helped but I still don't know why it was having trouble downloading the patch. On the surface it looks fine but I don't know why the location of the icons was changed. /usr/share/icons/hicolor/<size>x<size>/apps is the correct location. For SVG files the size "scalable" is correct. On a side note Fedora 28 is EOL so the conditionals could go away unless Fedora 28 is intentionally still being supported for freecad. |
|
CC @pfirszt |
|
Hi @hobbes1069 The location of the apps icons was not changed. The commands still put those in the same place, but the commands changed to also include the file format icon which is in another subdirectory of "scalable". Elliot |
|
I don't have anything to do with this build. I never have and wouldn't know where to begin. |
|
@sopwith: thanks for the patch! I run the COPR nightly. My pull request is in the pipeline [1], but it's just a very dirty copy of what hobbes1069 prepared for the official repo. If your patch works I'm happy to cancel my pull request and go with your version (make a PR and let me know to cancel mine). [1] https://github.com/FreeCAD/FreeCAD/pull/2534 P.S. If you're interested helping to maintain copr nightly send me a PM please. |
|
Hi @pfirszt, I think both patches have some good pieces. Yours allows using OpenCASCADE instead of OCE, for example. Mine builds with qt5 instead of qt4. Probably what we need to do is come up with a new patch that incorporates the best of both. I'll see what I can do. Sorry, I'm kind of a hit-and-run contributor so I don't do git PR's or maintain stuff long-term. |
|
Ok, I wasn't aware the icon location changed so that's fine. I'm trying to build with the new stack in fedora Rawhide (f32) (PySide2 / Coin4) but running into the following issue:
I posted about it here to the forums but haven't gotten any replies: https://forum.freecadweb.org/viewtopic.php?f=4&t=38982 When I try Fedora 30 (in case SWIG 4.0.x is the problem) I get a different error: |
|
@pfirszt - FreeCAD doesn't build with the pycxx included in Fedora 30, only the bundled one, so it will be necessary to always use the bundled one for now. FreeCAD also won't build against the SMESH 6.7.5-6 included in Fedora 30. The bundled version is 7.7.1, and the upstream version of Salome is currently 9.3.0, so it would be nice if Fedora would update to upstream and then FreeCAD could accomodate building against that. @hobbes1069 - As far as your build on Fedora 30, QUiLoader should be in /usr/include/qt5/QUiTools and is part of the qt5-qttools-static package. qt5-qttools-static is Required by qt5-devel, and I assume your package has 'BuildRequires: qt5-devel', so I don't know what's going on. |
|
I looked over @pfirszt's changeset and tried to incorporate the best parts into the attached version. It eliminates the python2 support as suggested by @hobbes1069 and fixes some bugs in my earlier submission. Since different people are using different versions of the .spec file, I'm also attaching the .spec file that I actually built from just now. You can diff it against your working version to see the changes. freecad.spec (11,463 bytes)
# This package depends on automagic byte compilation # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 %global _python_bytecompile_extra 1 # Setup python target for shiboken so the right cmake file is imported. %global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator # Some configuration options for other environments # rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE %global occ %{?_with_occ: 1} %{?!_with_occ: 0} # rpmbuild --with=bundled_zipios: use bundled version of zipios++ %global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} # 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} # See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. %global bundled_smesh_version 7.7.1.0 # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad %define github_name FreeCAD %define branch master Name: %{name} Epoch: 1 Version: 0.19_pre Release: {{{ git_commits_no }}} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: GPLv2+ URL: http://sourceforge.net/apps/mediawiki/free-cad/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz Patch0: FreeCAD-external-smesh.patch # Utilities BuildRequires: cmake gcc-c++ gettext dos2unix BuildRequires: doxygen swig graphviz BuildRequires: gcc-gfortran BuildRequires: desktop-file-utils BuildRequires: git # Development Libraries BuildRequires: Coin3-devel BuildRequires: Inventor-devel %if %{occ} BuildRequires: OpenCASCADE-devel %else BuildRequires: OCE-devel BuildRequires: OCE-draw %endif BuildRequires: boost-devel BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel BuildRequires: libicu-devel BuildRequires: libspnav-devel BuildRequires: med-devel BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private BuildRequires: libXmu-devel # For appdata %if 0%{?fedora} BuildRequires: libappstream-glib %endif BuildRequires: libkdtree++-devel BuildRequires: libusb-devel BuildRequires: python3-pivy BuildRequires: mesa-libEGL-devel BuildRequires: pcl-devel BuildRequires: pyside2-tools BuildRequires: python3 BuildRequires: python3-devel BuildRequires: python3-matplotlib %if ! %{bundled_pycxx} BuildRequires: python3-pycxx-devel %endif BuildRequires: python3-pyside2-devel BuildRequires: python3-shiboken2-devel BuildRequires: qt5-devel BuildRequires: qt5-qtwebkit-devel %if ! %{bundled_smesh} BuildRequires: smesh-devel %endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel %if ! %{bundled_zipios} BuildRequires: zipios++-devel %endif BuildRequires: zlib-devel # 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.13-5 Requires: hicolor-icon-theme Requires: python3-collada Requires: python3-matplotlib Requires: python3-pivy Requires: python3-pyside2 Requires: qt-assistant %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 specialties. 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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ ChangeLog.txt \ data/License.txt # 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'; export CXXFLAGS LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ %else %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif %cmake \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ -DFREECAD_USE_PCL=TRUE \ -DBUILD_QT5=ON \ -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ -DPYTHON_SUFFIX=.%{py_suffix} \ -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ -DOpenGL_GL_PREFERENCE=GLVND \ -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ %if %{occ} -DUSE_OCC=TRUE \ %endif %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 ../ make fc_version sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h make %{?_smp_mflags} %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 %{buildroot}%{_metainfodir}/ mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ mkdir -p %{buildroot}%{_datadir}/pixmaps/ mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ rm -rf mime rm -rf icons popd # Remove obsolete Start_Page.html rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html # Belongs in %%license not %%doc rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html # 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 %check desktop-file-validate \ %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ %{buildroot}/%{_metainfodir}/*.appdata.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 %license data/License.txt %doc ChangeLog.txt %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* %{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ %{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* %{_datadir}/icons/hicolor/scalable/* %{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data %{_datadir}/%{name}/ %{_docdir}/%{name}/%{name}.q* freecad.spec-2.patch (12,400 bytes)
diff -up ./freecad.spec.base ./freecad.spec --- ./freecad.spec.base 2019-09-16 15:40:59.908156457 -0400 +++ ./freecad.spec 2019-09-18 17:54:52.576122826 -0400 @@ -1,8 +1,27 @@ +# This package depends on automagic byte compilation +# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 +%global _python_bytecompile_extra 1 + +# Setup python target for shiboken so the right cmake file is imported. +%global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator +# Some configuration options for other environments +# rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE +%global occ %{?_with_occ: 1} %{?!_with_occ: 0} +# rpmbuild --with=bundled_zipios: use bundled version of zipios++ +%global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} +# 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} + +# See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. +%global bundled_smesh_version 7.7.1.0 + # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad @@ -19,65 +38,69 @@ Group: Applications/Engineering License: GPLv2+ URL: http://sourceforge.net/apps/mediawiki/free-cad/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz +Patch0: FreeCAD-external-smesh.patch + +# Utilities +BuildRequires: cmake gcc-c++ gettext dos2unix +BuildRequires: doxygen swig graphviz +BuildRequires: gcc-gfortran +BuildRequires: desktop-file-utils +BuildRequires: git + +# Development Libraries -BuildRequires: Coin3 BuildRequires: Coin3-devel BuildRequires: Inventor-devel +%if %{occ} +BuildRequires: OpenCASCADE-devel +%else BuildRequires: OCE-devel BuildRequires: OCE-draw +%endif + BuildRequires: boost-devel -BuildRequires: cmake -BuildRequires: desktop-file-utils -BuildRequires: dos2unix -BuildRequires: doxygen -BuildRequires: eigen3 +BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel -BuildRequires: gettext -BuildRequires: git -BuildRequires: graphviz BuildRequires: libicu-devel -BuildRequires: libspnav BuildRequires: libspnav-devel -BuildRequires: med BuildRequires: med-devel +BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private -BuildRequires: pyside-tools -BuildRequires: python -BuildRequires: python-matplotlib -%if 0%{?fedora} < 30 -BuildRequires: python-pivy -%endif -BuildRequires: python-pyside -BuildRequires: python-pyside-devel -BuildRequires: python2-devel -BuildRequires: qt-devel -BuildRequires: qt-webkit-devel -BuildRequires: shiboken -BuildRequires: shiboken-devel -BuildRequires: smesh +BuildRequires: libXmu-devel +# For appdata +%if 0%{?fedora} +BuildRequires: libappstream-glib +%endif +BuildRequires: libkdtree++-devel +BuildRequires: libusb-devel +BuildRequires: python3-pivy +BuildRequires: mesa-libEGL-devel +BuildRequires: pcl-devel +BuildRequires: pyside2-tools +BuildRequires: python3 +BuildRequires: python3-devel +BuildRequires: python3-matplotlib +%if ! %{bundled_pycxx} +BuildRequires: python3-pycxx-devel +%endif +BuildRequires: python3-pyside2-devel +BuildRequires: python3-shiboken2-devel +BuildRequires: qt5-devel +BuildRequires: qt5-qtwebkit-devel +%if ! %{bundled_smesh} BuildRequires: smesh-devel -BuildRequires: swig +%endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel -BuildRequires: zlib-devel -%if 0%{?fedora} > 28 -BuildRequires: boost-python2 -BuildRequires: boost-python2-devel -BuildRequires: boost-python3 -BuildRequires: boost-python3-devel -BuildRequires: mesa-libEGL-devel -BuildRequires: python3-matplotlib -%endif - -# For appdata -%if 0%{?fedora} -BuildRequires: libappstream-glib +%if ! %{bundled_zipios} +BuildRequires: zipios++-devel %endif +BuildRequires: zlib-devel # Packages separated because they are noarch, but not optional so require them # here. @@ -85,15 +108,19 @@ Requires: %{name}-data = %{epoch}: # Obsolete old doc package since it's required for functionality. Obsoletes: %{name}-doc < 0.13-5 -# Needed for plugin support and is not a soname dependency. -%if ! 0%{?rhel} <= 6 && "%{_arch}" != "ppc64" -# python-pivy does not build on EPEL 6 ppc64. -Requires: python-pivy -%endif Requires: hicolor-icon-theme -Requires: python-matplotlib -Requires: python-collada -Requires: python-pyside +Requires: python3-collada +Requires: python3-matplotlib +Requires: python3-pivy +Requires: python3-pyside2 +Requires: qt-assistant +%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 @@ -107,7 +134,6 @@ Requires: python-pyside %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 @@ -127,7 +153,18 @@ Data files for FreeCAD %prep -%autosetup -n FreeCAD-%{branch} +%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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ @@ -140,7 +177,8 @@ dos2unix -k src/Mod/Test/unittestgui.py rm -rf build && mkdir build && cd build # Deal with cmake projects that tend to link excessively. -#LDFLAGS='-Wl,--as-needed'; export LDFLAGS +CXXFLAGS='-Wno-error=cast-function-type'; export CXXFLAGS +LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ @@ -148,15 +186,45 @@ rm -rf build && mkdir build && cd build %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif -%cmake -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ + -DFREECAD_USE_PCL=TRUE \ + -DBUILD_QT5=ON \ + -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ + -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ + -DPYTHON_SUFFIX=.%{py_suffix} \ + -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ + -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ + -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ + -DOpenGL_GL_PREFERENCE=GLVND \ + -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ + -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ + -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ +%if %{occ} + -DUSE_OCC=TRUE \ +%endif +%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 ../ +make fc_version sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h @@ -168,19 +236,20 @@ cd build # Symlink binaries to /usr/bin mkdir -p %{buildroot}%{_bindir} -pushd %{buildroot}%{_bindir} -ln -s ../%{_lib}/%{name}/bin/FreeCAD . -ln -s ../%{_lib}/%{name}/bin/FreeCADCmd . -popd +ln -s ../%{_lib}/%{name}/bin/FreeCAD %{buildroot}%{_bindir}/FreeCAD +ln -s ../%{_lib}/%{name}/bin/FreeCADCmd %{buildroot}%{_bindir}/FreeCADCmd -mkdir %{buildroot}%{_datadir}/appdata/ -mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_datadir}/appdata/ +mkdir %{buildroot}%{_metainfodir}/ +mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ -mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/apps/* %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ +mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ + +mkdir -p %{buildroot}%{_datadir}/pixmaps/ +mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ @@ -188,14 +257,19 @@ mv %{buildroot}%{_libdir}/%{name}/share/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ -rmdir -p mime/packages/ -rmdir -p icons/hicolor/scalable/apps/ +rm -rf mime +rm -rf icons popd +# Remove obsolete Start_Page.html +rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html +# Belongs in %%license not %%doc +rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html + # 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}'` +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 \ @@ -206,7 +280,7 @@ if [ -n "$new_plugins" ]; then 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 + 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:" \ @@ -217,8 +291,10 @@ for p in %{plugins}; do done %check +desktop-file-validate \ + %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ - %{buildroot}/%{_datadir}/appdata/*.appdata.xml} + %{buildroot}/%{_metainfodir}/*.appdata.xml} %post @@ -244,14 +320,15 @@ fi %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* +%{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ -%{_libdir}/%{name}/lib/ +%{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* -%{_datadir}/icons/hicolor/scalable/apps/* -%{_datadir}/appdata/* +%{_datadir}/icons/hicolor/scalable/* +%{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data |
|
Ok, I don't use qt5-devel because it pulls in everything and is not recommended. It's really just there for ease of transition from the qt4-devel package. I'll add the static package and see if that fixes it. |
|
One more fix - should have a Requires: qt5-assistant instead of qt-assistant. freecad-2.spec (11,464 bytes)
# This package depends on automagic byte compilation # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 %global _python_bytecompile_extra 1 # Setup python target for shiboken so the right cmake file is imported. %global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator # Some configuration options for other environments # rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE %global occ %{?_with_occ: 1} %{?!_with_occ: 0} # rpmbuild --with=bundled_zipios: use bundled version of zipios++ %global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} # 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} # See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. %global bundled_smesh_version 7.7.1.0 # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad %define github_name FreeCAD %define branch master Name: %{name} Epoch: 1 Version: 0.19_pre Release: {{{ git_commits_no }}} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: GPLv2+ URL: http://sourceforge.net/apps/mediawiki/free-cad/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz Patch0: FreeCAD-external-smesh.patch # Utilities BuildRequires: cmake gcc-c++ gettext dos2unix BuildRequires: doxygen swig graphviz BuildRequires: gcc-gfortran BuildRequires: desktop-file-utils BuildRequires: git # Development Libraries BuildRequires: Coin3-devel BuildRequires: Inventor-devel %if %{occ} BuildRequires: OpenCASCADE-devel %else BuildRequires: OCE-devel BuildRequires: OCE-draw %endif BuildRequires: boost-devel BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel BuildRequires: libicu-devel BuildRequires: libspnav-devel BuildRequires: med-devel BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private BuildRequires: libXmu-devel # For appdata %if 0%{?fedora} BuildRequires: libappstream-glib %endif BuildRequires: libkdtree++-devel BuildRequires: libusb-devel BuildRequires: python3-pivy BuildRequires: mesa-libEGL-devel BuildRequires: pcl-devel BuildRequires: pyside2-tools BuildRequires: python3 BuildRequires: python3-devel BuildRequires: python3-matplotlib %if ! %{bundled_pycxx} BuildRequires: python3-pycxx-devel %endif BuildRequires: python3-pyside2-devel BuildRequires: python3-shiboken2-devel BuildRequires: qt5-devel BuildRequires: qt5-qtwebkit-devel %if ! %{bundled_smesh} BuildRequires: smesh-devel %endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel %if ! %{bundled_zipios} BuildRequires: zipios++-devel %endif BuildRequires: zlib-devel # 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.13-5 Requires: hicolor-icon-theme Requires: python3-collada Requires: python3-matplotlib Requires: python3-pivy Requires: python3-pyside2 Requires: qt5-assistant %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 specialties. 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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ ChangeLog.txt \ data/License.txt # 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'; export CXXFLAGS LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ %else %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif %cmake \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ -DFREECAD_USE_PCL=TRUE \ -DBUILD_QT5=ON \ -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ -DPYTHON_SUFFIX=.%{py_suffix} \ -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ -DOpenGL_GL_PREFERENCE=GLVND \ -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ %if %{occ} -DUSE_OCC=TRUE \ %endif %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 ../ make fc_version sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h make %{?_smp_mflags} %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 %{buildroot}%{_metainfodir}/ mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ mkdir -p %{buildroot}%{_datadir}/pixmaps/ mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ rm -rf mime rm -rf icons popd # Remove obsolete Start_Page.html rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html # Belongs in %%license not %%doc rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html # 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 %check desktop-file-validate \ %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ %{buildroot}/%{_metainfodir}/*.appdata.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 %license data/License.txt %doc ChangeLog.txt %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* %{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ %{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* %{_datadir}/icons/hicolor/scalable/* %{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data %{_datadir}/%{name}/ %{_docdir}/%{name}/%{name}.q* freecad.spec-3.patch (12,401 bytes)
diff -up ./freecad.spec.base ./freecad.spec --- ./freecad.spec.base 2019-09-16 15:40:59.908156457 -0400 +++ ./freecad.spec 2019-09-18 21:38:00.973653219 -0400 @@ -1,8 +1,27 @@ +# This package depends on automagic byte compilation +# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 +%global _python_bytecompile_extra 1 + +# Setup python target for shiboken so the right cmake file is imported. +%global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator +# Some configuration options for other environments +# rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE +%global occ %{?_with_occ: 1} %{?!_with_occ: 0} +# rpmbuild --with=bundled_zipios: use bundled version of zipios++ +%global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} +# 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} + +# See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. +%global bundled_smesh_version 7.7.1.0 + # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad @@ -19,65 +38,69 @@ Group: Applications/Engineering License: GPLv2+ URL: http://sourceforge.net/apps/mediawiki/free-cad/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz +Patch0: FreeCAD-external-smesh.patch + +# Utilities +BuildRequires: cmake gcc-c++ gettext dos2unix +BuildRequires: doxygen swig graphviz +BuildRequires: gcc-gfortran +BuildRequires: desktop-file-utils +BuildRequires: git + +# Development Libraries -BuildRequires: Coin3 BuildRequires: Coin3-devel BuildRequires: Inventor-devel +%if %{occ} +BuildRequires: OpenCASCADE-devel +%else BuildRequires: OCE-devel BuildRequires: OCE-draw +%endif + BuildRequires: boost-devel -BuildRequires: cmake -BuildRequires: desktop-file-utils -BuildRequires: dos2unix -BuildRequires: doxygen -BuildRequires: eigen3 +BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel -BuildRequires: gettext -BuildRequires: git -BuildRequires: graphviz BuildRequires: libicu-devel -BuildRequires: libspnav BuildRequires: libspnav-devel -BuildRequires: med BuildRequires: med-devel +BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private -BuildRequires: pyside-tools -BuildRequires: python -BuildRequires: python-matplotlib -%if 0%{?fedora} < 30 -BuildRequires: python-pivy -%endif -BuildRequires: python-pyside -BuildRequires: python-pyside-devel -BuildRequires: python2-devel -BuildRequires: qt-devel -BuildRequires: qt-webkit-devel -BuildRequires: shiboken -BuildRequires: shiboken-devel -BuildRequires: smesh +BuildRequires: libXmu-devel +# For appdata +%if 0%{?fedora} +BuildRequires: libappstream-glib +%endif +BuildRequires: libkdtree++-devel +BuildRequires: libusb-devel +BuildRequires: python3-pivy +BuildRequires: mesa-libEGL-devel +BuildRequires: pcl-devel +BuildRequires: pyside2-tools +BuildRequires: python3 +BuildRequires: python3-devel +BuildRequires: python3-matplotlib +%if ! %{bundled_pycxx} +BuildRequires: python3-pycxx-devel +%endif +BuildRequires: python3-pyside2-devel +BuildRequires: python3-shiboken2-devel +BuildRequires: qt5-devel +BuildRequires: qt5-qtwebkit-devel +%if ! %{bundled_smesh} BuildRequires: smesh-devel -BuildRequires: swig +%endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel -BuildRequires: zlib-devel -%if 0%{?fedora} > 28 -BuildRequires: boost-python2 -BuildRequires: boost-python2-devel -BuildRequires: boost-python3 -BuildRequires: boost-python3-devel -BuildRequires: mesa-libEGL-devel -BuildRequires: python3-matplotlib -%endif - -# For appdata -%if 0%{?fedora} -BuildRequires: libappstream-glib +%if ! %{bundled_zipios} +BuildRequires: zipios++-devel %endif +BuildRequires: zlib-devel # Packages separated because they are noarch, but not optional so require them # here. @@ -85,15 +108,19 @@ Requires: %{name}-data = %{epoch}: # Obsolete old doc package since it's required for functionality. Obsoletes: %{name}-doc < 0.13-5 -# Needed for plugin support and is not a soname dependency. -%if ! 0%{?rhel} <= 6 && "%{_arch}" != "ppc64" -# python-pivy does not build on EPEL 6 ppc64. -Requires: python-pivy -%endif Requires: hicolor-icon-theme -Requires: python-matplotlib -Requires: python-collada -Requires: python-pyside +Requires: python3-collada +Requires: python3-matplotlib +Requires: python3-pivy +Requires: python3-pyside2 +Requires: qt5-assistant +%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 @@ -107,7 +134,6 @@ Requires: python-pyside %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 @@ -127,7 +153,18 @@ Data files for FreeCAD %prep -%autosetup -n FreeCAD-%{branch} +%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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ @@ -140,7 +177,8 @@ dos2unix -k src/Mod/Test/unittestgui.py rm -rf build && mkdir build && cd build # Deal with cmake projects that tend to link excessively. -#LDFLAGS='-Wl,--as-needed'; export LDFLAGS +CXXFLAGS='-Wno-error=cast-function-type'; export CXXFLAGS +LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ @@ -148,15 +186,45 @@ rm -rf build && mkdir build && cd build %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif -%cmake -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ + -DFREECAD_USE_PCL=TRUE \ + -DBUILD_QT5=ON \ + -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ + -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ + -DPYTHON_SUFFIX=.%{py_suffix} \ + -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ + -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ + -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ + -DOpenGL_GL_PREFERENCE=GLVND \ + -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ + -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ + -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ +%if %{occ} + -DUSE_OCC=TRUE \ +%endif +%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 ../ +make fc_version sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h @@ -168,19 +236,20 @@ cd build # Symlink binaries to /usr/bin mkdir -p %{buildroot}%{_bindir} -pushd %{buildroot}%{_bindir} -ln -s ../%{_lib}/%{name}/bin/FreeCAD . -ln -s ../%{_lib}/%{name}/bin/FreeCADCmd . -popd +ln -s ../%{_lib}/%{name}/bin/FreeCAD %{buildroot}%{_bindir}/FreeCAD +ln -s ../%{_lib}/%{name}/bin/FreeCADCmd %{buildroot}%{_bindir}/FreeCADCmd -mkdir %{buildroot}%{_datadir}/appdata/ -mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_datadir}/appdata/ +mkdir %{buildroot}%{_metainfodir}/ +mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ -mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/apps/* %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ +mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ + +mkdir -p %{buildroot}%{_datadir}/pixmaps/ +mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ @@ -188,14 +257,19 @@ mv %{buildroot}%{_libdir}/%{name}/share/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ -rmdir -p mime/packages/ -rmdir -p icons/hicolor/scalable/apps/ +rm -rf mime +rm -rf icons popd +# Remove obsolete Start_Page.html +rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html +# Belongs in %%license not %%doc +rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html + # 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}'` +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 \ @@ -206,7 +280,7 @@ if [ -n "$new_plugins" ]; then 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 + 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:" \ @@ -217,8 +291,10 @@ for p in %{plugins}; do done %check +desktop-file-validate \ + %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ - %{buildroot}/%{_datadir}/appdata/*.appdata.xml} + %{buildroot}/%{_metainfodir}/*.appdata.xml} %post @@ -244,14 +320,15 @@ fi %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* +%{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ -%{_libdir}/%{name}/lib/ +%{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* -%{_datadir}/icons/hicolor/scalable/apps/* -%{_datadir}/appdata/* +%{_datadir}/icons/hicolor/scalable/* +%{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data |
|
What should be licence in the spec (GPL vs LGPL)? See the vocx-fc comment to my PR [1] [1] https://github.com/FreeCAD/FreeCAD/pull/2534 |
|
@sopwith: what's in FreeCAD-external-smesh.patch ? I tried your spec as-is with COPR, but it failed on missing patch. |
|
@pfirszt - vocx-fc is correct about the license being LGPLv2+. Sorry about the missing patch (attached). It was necessary to get FreeCAD to even pay attention to an external smesh when configuring. FreeCAD-external-smesh.patch (650 bytes)
diff -up FreeCAD-master/CMakeLists.txt.sopwith FreeCAD-master/CMakeLists.txt --- FreeCAD-master/CMakeLists.txt.sopwith 2019-09-18 15:51:53.411979083 -0400 +++ FreeCAD-master/CMakeLists.txt 2019-09-18 15:52:06.835864739 -0400 @@ -781,7 +781,7 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LI set(SMESH_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/salomesmesh/inc) else(NOT FREECAD_USE_EXTERNAL_SMESH) - find_package(SMESH CONFIG) + find_package(SMESH REQUIRED) set (SMESH_INCLUDE_DIR ${SMESH_INCLUDE_PATH}) set(EXTERNAL_SMESH_LIBS ${SMESH_LIBRARIES}) if(NOT SMESH_FOUND) |
|
Thanks! Test build went OK after commenting out the patch, but there is a problem with version. We have "make fc_version" (I'm not yet familiar with it) and the 2 sed commands, but the final info is: andOS: Fedora 30 (Workstation Edition) (GNOME/gnome) Word size of OS: 64-bit Word size of FreeCAD: 64-bit Version: 0.19.Unknown Build type: Unknown Python version: 3.7.4 Qt version: 5.12.4 Coin version: 3.1.3 OCC version: 6.9.1.oce-0.18 Locale: Polish/Poland (pl_PL) P.S. Tentative link to the test build: https://copr.fedorainfracloud.org/coprs/g/freecad/przemof-test-from-github/build/1035874/ |
|
Ok, let me know if I should open a separate bug or if you guys are OK with handling this here... I've made some progress but now I'm getting a bunch of linker errors:
And the only problem I can find during the CMake configuration is it's computing the shiboken2 include dir wrong...
Ideas? |
|
@pfirszt - I added 'make fc_version' there because the Version.h used by the sed commands didn't exist otherwise. The sed commands are supposed to fix it up. If Version.h is not coming out right at the end of the build, either the sed commands are not doing their job or Version.h is being overwritten during the main 'make' run. @hobbes1069 - SHIBOKEN_PYTHON_INCLUDE_DIRS is correct - it's supposed to be the path to the Python headers not the Shiboken2 headers. The cmake line in the .spec file passes in SHIBOKEN_INCLUDE_DIR correctly. As far as the missing symbols, they are all part of libGL.so. I think the .spec file might need to add 'BuildRequires: libglvnd-devel'. |
|
@pfirszt Here is an updated .spec file to fix the Version.h stuff, along with a necessary patch to the source tree. Basically there was a bug in src/Tools/SubWCRev.py when build directory != source directory. I also fixed a couple of other things in the .spec file - utilized the %make_build macro, added BuildRequires: libglvnd-devel, and updating the package URL: away from sourceforge. FreeCAD-SubWCRev.patch (3,163 bytes)
diff -up FreeCAD-master/src/Tools/SubWCRev.py.sopwith FreeCAD-master/src/Tools/SubWCRev.py --- FreeCAD-master/src/Tools/SubWCRev.py.sopwith 2019-09-19 12:10:08.041461628 -0400 +++ FreeCAD-master/src/Tools/SubWCRev.py 2019-09-19 12:12:41.058155371 -0400 @@ -56,7 +56,7 @@ class VersionControl: self.date = "" self.url = "" - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): return False def printInfo(self): @@ -72,9 +72,9 @@ class VersionControl: return content class UnknownControl(VersionControl): - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): # Do not overwrite existing file with almost useless information - if os.path.exists(srcdir+"/src/Build/Version.h.out"): + if os.path.exists(bindir+"/src/Build/Version.h.out"): return False self.rev = "Unknown" self.date = "Unknown" @@ -85,9 +85,9 @@ class UnknownControl(VersionControl): print("Unknown version control") class DebianChangelog(VersionControl): - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): # Do not overwrite existing file with almost useless information - if os.path.exists(srcdir+"/src/Build/Version.h.out"): + if os.path.exists(bindir+"/src/Build/Version.h.out"): return False try: f = open(srcdir+"/debian/changelog") @@ -108,7 +108,7 @@ class DebianChangelog(VersionControl): print("debian/changelog") class BazaarControl(VersionControl): - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): info=os.popen("bzr log -l 1 %s" % (srcdir)).read() if len(info) == 0: return False @@ -232,7 +232,7 @@ class GitControl(VersionControl): if hasnames >=2: # merging master into dev is not enough self.branch=','.join(names) - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): self.hash=os.popen("git log -1 --pretty=format:%H").read().strip() if self.hash == "": return False # not a git repo @@ -294,14 +294,14 @@ class GitControl(VersionControl): return content class MercurialControl(VersionControl): - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): return False def printInfo(self): print("mercurial") class Subversion(VersionControl): - def extractInfo(self, srcdir): + def extractInfo(self, srcdir, bindir): parser=xml.sax.make_parser() handler=SvnHandler() parser.setContentHandler(handler) @@ -376,7 +376,7 @@ def main(): vcs=[GitControl(), BazaarControl(), Subversion(), MercurialControl(), DebianChangelog(), UnknownControl()] for i in vcs: - if i.extractInfo(srcdir): + if i.extractInfo(srcdir, bindir): # Open the template file and the version file inp = open("%s/src/Build/Version.h.in" % (bindir)) lines = inp.readlines() freecad-3.spec (11,651 bytes)
# This package depends on automagic byte compilation # https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 %global _python_bytecompile_extra 1 # Setup python target for shiboken so the right cmake file is imported. %global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator # Some configuration options for other environments # rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE %global occ %{?_with_occ: 1} %{?!_with_occ: 0} # rpmbuild --with=bundled_zipios: use bundled version of zipios++ %global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} # 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} # See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. %global bundled_smesh_version 7.7.1.0 # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad %define github_name FreeCAD %define branch master Name: %{name} Epoch: 1 Version: 0.19_pre Release: {{{ git_commit_nos }}} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: GPLv2+ URL: http://www.freecadweb.org/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz Patch0: FreeCAD-external-smesh.patch Patch1: FreeCAD-SubWCRev.patch # Utilities BuildRequires: cmake gcc-c++ gettext dos2unix BuildRequires: doxygen swig graphviz BuildRequires: gcc-gfortran BuildRequires: desktop-file-utils BuildRequires: git # Development Libraries BuildRequires: Coin3-devel BuildRequires: Inventor-devel %if %{occ} BuildRequires: OpenCASCADE-devel %else BuildRequires: OCE-devel BuildRequires: OCE-draw %endif BuildRequires: boost-devel BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel BuildRequires: libXmu-devel # For appdata %if 0%{?fedora} BuildRequires: libappstream-glib %endif BuildRequires: libglvnd-devel BuildRequires: libicu-devel BuildRequires: libkdtree++-devel BuildRequires: libspnav-devel BuildRequires: libusb-devel BuildRequires: med-devel BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private BuildRequires: python3-pivy BuildRequires: mesa-libEGL-devel BuildRequires: pcl-devel BuildRequires: pyside2-tools BuildRequires: python3 BuildRequires: python3-devel BuildRequires: python3-matplotlib %if ! %{bundled_pycxx} BuildRequires: python3-pycxx-devel %endif BuildRequires: python3-pyside2-devel BuildRequires: python3-shiboken2-devel BuildRequires: qt5-devel BuildRequires: qt5-qtwebkit-devel %if ! %{bundled_smesh} BuildRequires: smesh-devel %endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel %if ! %{bundled_zipios} BuildRequires: zipios++-devel %endif BuildRequires: zlib-devel # 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.13-5 Requires: hicolor-icon-theme Requires: python3-collada Requires: python3-matplotlib Requires: python3-pivy Requires: python3-pyside2 Requires: qt5-assistant %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 specialties. 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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ ChangeLog.txt \ data/License.txt # 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'; export CXXFLAGS LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ %else %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif %cmake \ -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ -DFREECAD_USE_PCL=TRUE \ -DBUILD_QT5=ON \ -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ -DPYTHON_SUFFIX=.%{py_suffix} \ -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ -DOpenGL_GL_PREFERENCE=GLVND \ -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ %if %{occ} -DUSE_OCC=TRUE \ %endif %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 master" \ ../ 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 master\",' $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 %{buildroot}%{_metainfodir}/ mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ mkdir -p %{buildroot}%{_datadir}/pixmaps/ mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ rm -rf mime rm -rf icons popd # Remove obsolete Start_Page.html rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html # Belongs in %%license not %%doc rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html # 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 %check desktop-file-validate \ %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ %{buildroot}/%{_metainfodir}/*.appdata.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 %license data/License.txt %doc ChangeLog.txt %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* %{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ %{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* %{_datadir}/icons/hicolor/scalable/* %{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data %{_datadir}/%{name}/ %{_docdir}/%{name}/%{name}.q* freecad.spec-4.patch (13,148 bytes)
diff -up ./freecad.spec.base ./freecad.spec --- ./freecad.spec.base 2019-09-16 15:40:59.908156457 -0400 +++ ./freecad.spec 2019-09-19 12:19:18.126765718 -0400 @@ -1,8 +1,27 @@ +# This package depends on automagic byte compilation +# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_2 +%global _python_bytecompile_extra 1 + +# Setup python target for shiboken so the right cmake file is imported. +%global py_suffix %(%{__python3} -c "import sysconfig; print(sysconfig.get_config_var('SOABI'))") # Maintainers: keep this list of plugins up to date # List plugins in %%{_libdir}/%{name}/lib, less '.so' and 'Gui.so', here %global plugins Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign Path PathGui Spreadsheet SpreadsheetGui area DraftUtils DraftUtils libDriver libDriverDAT libDriverSTL libDriverUNV libMEFISTO2 libSMDS libSMESH libSMESHDS libStdMeshers Measure TechDraw TechDrawGui libarea-native Surface SurfaceGui PathSimulator +# Some configuration options for other environments +# rpmbuild --with=occ: Compile using OpenCASCADE instead of OCE +%global occ %{?_with_occ: 1} %{?!_with_occ: 0} +# rpmbuild --with=bundled_zipios: use bundled version of zipios++ +%global bundled_zipios %{?_with_bundled_zipios: 1} %{?!_with_bundled_zipios: 0} +# 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} + +# See FreeCAD-master/src/3rdParty/salomesmesh/CMakeLists.txt to find this out. +%global bundled_smesh_version 7.7.1.0 + # Some plugins go in the Mod folder instead of lib. Deal with those here: %global mod_plugins Mod/PartDesign %define name freecad @@ -12,72 +31,78 @@ Name: %{name} Epoch: 1 Version: 0.19_pre -Release: {{{ git_commits_no }}} +Release: {{{ git_commit_nos }}} Summary: A general purpose 3D CAD modeler Group: Applications/Engineering License: GPLv2+ -URL: http://sourceforge.net/apps/mediawiki/free-cad/ +URL: http://www.freecadweb.org/ Source0: https://github.com/%{github_name}/FreeCAD/archive/%{branch}.tar.gz +Patch0: FreeCAD-external-smesh.patch +Patch1: FreeCAD-SubWCRev.patch + +# Utilities +BuildRequires: cmake gcc-c++ gettext dos2unix +BuildRequires: doxygen swig graphviz +BuildRequires: gcc-gfortran +BuildRequires: desktop-file-utils +BuildRequires: git + +# Development Libraries -BuildRequires: Coin3 BuildRequires: Coin3-devel BuildRequires: Inventor-devel +%if %{occ} +BuildRequires: OpenCASCADE-devel +%else BuildRequires: OCE-devel BuildRequires: OCE-draw +%endif + BuildRequires: boost-devel -BuildRequires: cmake -BuildRequires: desktop-file-utils -BuildRequires: dos2unix -BuildRequires: doxygen -BuildRequires: eigen3 +BuildRequires: boost-python3-devel BuildRequires: eigen3-devel BuildRequires: freeimage-devel -BuildRequires: gettext -BuildRequires: git -BuildRequires: graphviz +BuildRequires: libXmu-devel +# For appdata +%if 0%{?fedora} +BuildRequires: libappstream-glib +%endif +BuildRequires: libglvnd-devel BuildRequires: libicu-devel -BuildRequires: libspnav +BuildRequires: libkdtree++-devel BuildRequires: libspnav-devel -BuildRequires: med +BuildRequires: libusb-devel BuildRequires: med-devel +BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLU-devel BuildRequires: netgen-mesher-devel BuildRequires: netgen-mesher-devel-private -BuildRequires: pyside-tools -BuildRequires: python -BuildRequires: python-matplotlib -%if 0%{?fedora} < 30 -BuildRequires: python-pivy -%endif -BuildRequires: python-pyside -BuildRequires: python-pyside-devel -BuildRequires: python2-devel -BuildRequires: qt-devel -BuildRequires: qt-webkit-devel -BuildRequires: shiboken -BuildRequires: shiboken-devel -BuildRequires: smesh +BuildRequires: python3-pivy +BuildRequires: mesa-libEGL-devel +BuildRequires: pcl-devel +BuildRequires: pyside2-tools +BuildRequires: python3 +BuildRequires: python3-devel +BuildRequires: python3-matplotlib +%if ! %{bundled_pycxx} +BuildRequires: python3-pycxx-devel +%endif +BuildRequires: python3-pyside2-devel +BuildRequires: python3-shiboken2-devel +BuildRequires: qt5-devel +BuildRequires: qt5-qtwebkit-devel +%if ! %{bundled_smesh} BuildRequires: smesh-devel -BuildRequires: swig +%endif BuildRequires: tbb-devel BuildRequires: vtk-devel BuildRequires: xerces-c BuildRequires: xerces-c-devel -BuildRequires: zlib-devel -%if 0%{?fedora} > 28 -BuildRequires: boost-python2 -BuildRequires: boost-python2-devel -BuildRequires: boost-python3 -BuildRequires: boost-python3-devel -BuildRequires: mesa-libEGL-devel -BuildRequires: python3-matplotlib -%endif - -# For appdata -%if 0%{?fedora} -BuildRequires: libappstream-glib +%if ! %{bundled_zipios} +BuildRequires: zipios++-devel %endif +BuildRequires: zlib-devel # Packages separated because they are noarch, but not optional so require them # here. @@ -85,15 +110,19 @@ Requires: %{name}-data = %{epoch}: # Obsolete old doc package since it's required for functionality. Obsoletes: %{name}-doc < 0.13-5 -# Needed for plugin support and is not a soname dependency. -%if ! 0%{?rhel} <= 6 && "%{_arch}" != "ppc64" -# python-pivy does not build on EPEL 6 ppc64. -Requires: python-pivy -%endif Requires: hicolor-icon-theme -Requires: python-matplotlib -Requires: python-collada -Requires: python-pyside +Requires: python3-collada +Requires: python3-matplotlib +Requires: python3-pivy +Requires: python3-pyside2 +Requires: qt5-assistant +%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 @@ -107,7 +136,6 @@ Requires: python-pyside %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 @@ -127,7 +155,18 @@ Data files for FreeCAD %prep -%autosetup -n FreeCAD-%{branch} +%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 # Fix encodings dos2unix -k src/Mod/Test/unittestgui.py \ @@ -140,7 +179,8 @@ dos2unix -k src/Mod/Test/unittestgui.py rm -rf build && mkdir build && cd build # Deal with cmake projects that tend to link excessively. -#LDFLAGS='-Wl,--as-needed'; export LDFLAGS +CXXFLAGS='-Wno-error=cast-function-type'; export CXXFLAGS +LDFLAGS='-Wl,--as-needed -Wl,--no-undefined'; export LDFLAGS %if 0%{?fedora} > 27 %define MEDFILE_INCLUDE_DIRS %{_includedir}/med/ @@ -148,19 +188,53 @@ rm -rf build && mkdir build && cd build %define MEDFILE_INCLUDE_DIRS %{_includedir}/ %endif -%cmake -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \ -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \ -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \ -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ -DRESOURCEDIR=%{_datadir}/%{name} \ -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ + -DFREECAD_USE_PCL=TRUE \ + -DBUILD_QT5=ON \ + -DSHIBOKEN_INCLUDE_DIR=%{_includedir}/shiboken2 \ + -DSHIBOKEN_LIBRARY=-lshiboken2.%{py_suffix} \ + -DPYTHON_SUFFIX=.%{py_suffix} \ + -DPYSIDE_INCLUDE_DIR=/usr/include/PySide2 \ + -DPYSIDE_LIBRARY=-lpyside2.%{py_suffix} \ + -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \ -DMEDFILE_INCLUDE_DIRS=%{MEDFILE_INCLUDE_DIRS} \ + -DOpenGL_GL_PREFERENCE=GLVND \ + -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin3 \ + -DCOIN3D_DOC_PATH=%{_datadir}/Coin3/Coin \ + -DFREECAD_USE_EXTERNAL_PIVY=TRUE \ +%if %{occ} + -DUSE_OCC=TRUE \ +%endif +%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 master" \ ../ -sed -i 's,FCRevision \"Unknown\",FCRevision \"%{release} (Git)\",' src/Build/Version.h -sed -i 's,FCRepositoryURL \"Unknown\",FCRepositoryURL \"git://github.com/FreeCAD/FreeCAD.git master\",' src/Build/Version.h +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 master\",' $I +done -make %{?_smp_mflags} +%{make_build} %install cd build @@ -168,19 +242,20 @@ cd build # Symlink binaries to /usr/bin mkdir -p %{buildroot}%{_bindir} -pushd %{buildroot}%{_bindir} -ln -s ../%{_lib}/%{name}/bin/FreeCAD . -ln -s ../%{_lib}/%{name}/bin/FreeCADCmd . -popd +ln -s ../%{_lib}/%{name}/bin/FreeCAD %{buildroot}%{_bindir}/FreeCAD +ln -s ../%{_lib}/%{name}/bin/FreeCADCmd %{buildroot}%{_bindir}/FreeCADCmd -mkdir %{buildroot}%{_datadir}/appdata/ -mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_datadir}/appdata/ +mkdir %{buildroot}%{_metainfodir}/ +mv %{buildroot}%{_libdir}/%{name}/share/metainfo/* %{buildroot}%{_metainfodir}/ mkdir %{buildroot}%{_datadir}/applications/ mv %{buildroot}%{_libdir}/%{name}/share/applications/* %{buildroot}%{_datadir}/applications/ -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ -mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/apps/* %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/ +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/ +mv %{buildroot}%{_libdir}/%{name}/share/icons/hicolor/scalable/* %{buildroot}%{_datadir}/icons/hicolor/scalable/ + +mkdir -p %{buildroot}%{_datadir}/pixmaps/ +mv %{buildroot}%{_libdir}/%{name}/share/pixmaps/* %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/mime/packages/ mv %{buildroot}%{_libdir}/%{name}/share/mime/packages/* %{buildroot}%{_datadir}/mime/packages/ @@ -188,14 +263,19 @@ mv %{buildroot}%{_libdir}/%{name}/share/ pushd %{buildroot}%{_libdir}/%{name}/share/ rmdir metainfo/ rmdir applications/ -rmdir -p mime/packages/ -rmdir -p icons/hicolor/scalable/apps/ +rm -rf mime +rm -rf icons popd +# Remove obsolete Start_Page.html +rm -f %{buildroot}%{_docdir}/%{name}/Start_Page.html +# Belongs in %%license not %%doc +rm -f %{buildroot}%{_docdir}/freecad/ThirdPartyLibraries.html + # 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}'` +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 \ @@ -206,7 +286,7 @@ if [ -n "$new_plugins" ]; then 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 + 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:" \ @@ -217,8 +297,10 @@ for p in %{plugins}; do done %check +desktop-file-validate \ + %{buildroot}%{_datadir}/applications/org.freecadweb.FreeCAD.desktop %{?fedora:appstream-util validate-relax --nonet \ - %{buildroot}/%{_datadir}/appdata/*.appdata.xml} + %{buildroot}/%{_metainfodir}/*.appdata.xml} %post @@ -244,14 +326,15 @@ fi %exclude %{_docdir}/%{name}/%{name}.* %exclude %{_docdir}/%{name}/ThirdPartyLibraries.html %{_bindir}/* +%{_metainfodir}/* %dir %{_libdir}/%{name} %{_libdir}/%{name}/bin/ -%{_libdir}/%{name}/lib/ +%{_libdir}/%{name}/%{_lib}/ %{_libdir}/%{name}/Mod/ %{_libdir}/%{name}/Ext/ %{_datadir}/applications/* -%{_datadir}/icons/hicolor/scalable/apps/* -%{_datadir}/appdata/* +%{_datadir}/icons/hicolor/scalable/* +%{_datadir}/pixmaps/* %{_datadir}/mime/packages/* %files data |
|
OK, thanks again! That SubWCRev.py bug should end up in the main repo (1). I see you changed git_commit_no to git_commit_nos, but we still have git_commit_no in rpkg.macros - is it just a typo or there is something behind it? (1) I can make PR and submit it, but if you want a credit for it you'd do it yourself :-) Edit: PR ready, please check if you're OK with that https://github.com/FreeCAD/FreeCAD/pull/2538 |
|
@sopwith What's the purpose of adding: +BuildRequires: mesa-libEGL-devel I can't find any evidence it's needed. I added libglvnd-devel to mine but it turns out it's already being pulled in with mesa-libGLU-devel which didn't solve my linker problem. Looking at the log I don't see that "-lGLU" or "-lGL" is on the linker line... |
|
@hobbes1069 - the libEGL buildrequires might be unnecessary after all. If libGL is not on the linker line then it's probably a problem with cmake files. I can't reproduce the problem here so I don't have any suggestions. @pfirszt - I think the git_commit_nos change was just my mistake. Should stay as git_commits_no. I don't have any more changes to submit, so please work with hobbes1069 to make whatever changes are necessary for his libGL problem, then go ahead and submit a PR. |
|
Found part of the problem: https://forum.freecadweb.org/viewtopic.php?f=4&t=39484 FreeCADGui is expecting to link via "OPENGL_gl_LIBRARY" but CMake (perhaps due to newer version?) is returning "OPENGL_opengl_LIBRARY" and CMakeLists in src/Gui is blindly assuming the former. |
|
@sopwith, OK, thanks again! Fedora 29 fails with:
I'll add conditionals if the rest builds fine. |
|
Building works, tests work, but I can't get the rev version: |
|
@pfirszt Is the Version.h that it ends up with not correct? Those commands all look right to me. SubWCRev is not going to be able to come up with the revision and URL on its own because it is building from a tarball tree, so we use sed to manually edit in the revision and URL based on what we know from the .spec file. |
|
It looks OK to ma as well, but the version doesn't show up in FreeCAD. I'm trying to find why, |
|
I think for Fedora Rawhide I'm running into a Python 3.8 error. I've googled as much as I can but it looks like it has to do with some changes in thread management? I found some related errors and fixes, but not this specific one so it's beyond me. |
|
Ad Version problem. Added cat shows sed works as expected, so the problem is somewhere else. |
|
Test builds went OK, so I made a PR: https://github.com/FreeCAD/FreeCAD/pull/2551 |
|
Just and FYI I finally got a build for F31 with the following diff from the Fedora spec:
The ones I don't understand are the SHIBOKEN/PYSIDE_LIBRARY ones... Shouldn't these be found automatically? Both PYSIDE_LIBRARY and SHIBOKEN_LIBRARY are referenced in src/Gui/CMakeLists.txt but are never setup on Linux...
I maintain PySide2 for Fedora and CMake import targets are created. On a side note I still can't build for f32/Rawhide due to Python 3.8 but I guess I need to open a separate ticket for that. |
|
Thanks! I'll make a PR as soon as the current one is in the main tree. |
FreeCAD: master 1966238d 2019-09-20 07:49:00 Przemo Firszt Committer: wmayer Details Diff |
Update fedora spec as per sopwith Signed-off-by: Przemo Firszt <przemo@firszt.eu> |
Affected Issues 0004132 |
|
mod - package/fedora/freecad.spec | Diff File | ||
mod - package/fedora/rpkg.macros | Diff File | ||
FreeCAD: master 64e7cd2d 2019-09-22 07:52:55 Przemo Firszt Committer: wmayer Details Diff |
Exclude some packages from fedora 29 builds Those packages don't exist in fedora 29: pyside2-tools, python3-pyside2-devel, python3-shiboken2-devel Signed-off-by: Przemo Firszt <przemo@firszt.eu> |
Affected Issues 0004132 |
|
mod - package/fedora/freecad.spec | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2019-09-16 20:13 | sopwith | New Issue | |
2019-09-16 20:13 | sopwith | Tag Attached: #lowhangingfruit | |
2019-09-16 20:13 | sopwith | Tag Attached: linux | |
2019-09-16 20:13 | sopwith | Tag Attached: packaging | |
2019-09-16 20:13 | sopwith | File Added: freecad.spec.patch | |
2019-09-16 23:10 | Kunda1 | Note Added: 0013611 | |
2019-09-16 23:41 | hobbes1069 | Note Added: 0013612 | |
2019-09-17 20:17 | Kunda1 | File Added: mantisbt-patch-inline.png | |
2019-09-17 20:17 | Kunda1 | Note Added: 0013617 | |
2019-09-18 00:49 | sopwith | Note Added: 0013621 | |
2019-09-18 01:59 | hobbes1069 | Note Added: 0013622 | |
2019-09-18 12:27 | Kunda1 | Note Added: 0013626 | |
2019-09-18 12:33 | sopwith | Note Added: 0013627 | |
2019-09-18 12:48 | sliptonic | Note Added: 0013628 | |
2019-09-18 13:31 | pfirszt | Note Added: 0013629 | |
2019-09-18 15:18 | sopwith | Note Added: 0013631 | |
2019-09-18 19:25 | hobbes1069 | Note Added: 0013632 | |
2019-09-18 20:42 | sopwith | Note Added: 0013633 | |
2019-09-18 21:44 | sopwith | Note Edited: 0013633 | |
2019-09-18 22:08 | sopwith | File Added: freecad.spec | |
2019-09-18 22:08 | sopwith | File Added: freecad.spec-2.patch | |
2019-09-18 22:08 | sopwith | Note Added: 0013634 | |
2019-09-18 22:17 | hobbes1069 | Note Added: 0013635 | |
2019-09-19 01:39 | sopwith | File Added: freecad-2.spec | |
2019-09-19 01:39 | sopwith | File Added: freecad.spec-3.patch | |
2019-09-19 01:39 | sopwith | Note Added: 0013638 | |
2019-09-19 02:23 | Kunda1 | Status | new => confirmed |
2019-09-19 07:28 | pfirszt | Note Added: 0013642 | |
2019-09-19 08:26 | pfirszt | Note Added: 0013643 | |
2019-09-19 11:54 | sopwith | File Added: FreeCAD-external-smesh.patch | |
2019-09-19 11:54 | sopwith | Note Added: 0013644 | |
2019-09-19 12:47 | pfirszt | Note Added: 0013645 | |
2019-09-19 12:48 | pfirszt | Note Edited: 0013645 | |
2019-09-19 14:55 | hobbes1069 | Note Added: 0013647 | |
2019-09-19 15:17 | sopwith | Note Added: 0013648 | |
2019-09-19 16:22 | sopwith | File Added: FreeCAD-SubWCRev.patch | |
2019-09-19 16:22 | sopwith | File Added: freecad-3.spec | |
2019-09-19 16:22 | sopwith | File Added: freecad.spec-4.patch | |
2019-09-19 16:22 | sopwith | Note Added: 0013651 | |
2019-09-20 07:39 | pfirszt | Note Added: 0013652 | |
2019-09-20 07:46 | pfirszt | Note Edited: 0013652 | |
2019-09-20 10:14 | hobbes1069 | Note Added: 0013653 | |
2019-09-20 10:52 | sopwith | Note Added: 0013654 | |
2019-09-20 11:08 | hobbes1069 | Note Added: 0013655 | |
2019-09-20 11:50 | pfirszt | Note Added: 0013658 | |
2019-09-20 15:48 | pfirszt | Note Added: 0013662 | |
2019-09-20 17:10 | sopwith | Note Added: 0013665 | |
2019-09-21 09:07 | pfirszt | Note Added: 0013669 | |
2019-09-21 12:33 | hobbes1069 | Note Added: 0013672 | |
2019-09-21 18:08 | pfirszt | Note Added: 0013673 | |
2019-09-23 11:39 | pfirszt | Note Added: 0013675 | |
2019-09-24 12:42 | Kunda1 | Assigned To | => pfirszt |
2019-09-24 12:42 | Kunda1 | Status | confirmed => assigned |
2019-09-24 12:42 | hobbes1069 | Note Added: 0013683 | |
2019-09-24 16:28 | pfirszt | Note Added: 0013684 | |
2019-09-25 18:18 | wmayer | Changeset attached | => FreeCAD master 64e7cd2d |
2019-09-25 18:18 | wmayer | Changeset attached | => FreeCAD master 1966238d |
2019-09-25 18:21 | wmayer | Status | assigned => closed |
2019-09-25 18:21 | wmayer | Resolution | open => fixed |
2019-09-25 18:21 | wmayer | Fixed in Version | => 0.19 |