3 %bcond_with occ # Compile using OpenCASCADE instead of OCE
4 %bcond_with bundled_zipios # use bundled version of zipios++
5 %bcond_with bundled_pycxx # use bundled version of pycxx
6 %bcond_with bundled_smesh # use bundled version of Salome's Mesh
8 # This revision is 0.13 final.
10 Summary: A general purpose 3D CAD modeler
15 Group: Applications/Engineering
16 Source0: http://downloads.sourceforge.net/free-cad/%{name}-%{version}.%{rev}.tar.gz
17 # Source0-md5: 234747bdff47a62fd10cb902f3dd772b
18 Source101: %{name}.desktop
20 Source103: %{name}.appdata.xml
21 Source104: %{name}.sharedmimeinfo
22 Patch0: %{name}-3rdParty.patch
23 Patch1: %{name}-0.14-Xlib_h.patch
24 Patch2: %{name}-0.14-smesh.patch
25 Patch3: %{name}-0.14-DraftSnap.patch
26 #Patch4: %{name}-0.14-disable_auto_dxf_dl.patch
27 URL: http://sourceforge.net/apps/mediawiki/free-cad/
30 BuildRequires: desktop-file-utils
31 BuildRequires: dos2unix
32 BuildRequires: doxygen
33 BuildRequires: gcc-gfortran
34 BuildRequires: gettext
35 BuildRequires: graphviz
37 BuildRequires: tbb-devel
38 # Development Libraries
39 BuildRequires: freeimage-devel
40 BuildRequires: mesa-libGLU-devel
41 BuildRequires: xorg-lib-libXmu-devel
43 BuildRequires: OpenCASCADE-devel
45 BuildRequires: OCE-devel
48 # https://bugzilla.redhat.com/show_bug.cgi?id=665733
49 BuildRequires: Coin2-devel
50 #BuildRequires: Coin3-devel
51 BuildRequires: SoQt-devel
52 BuildRequires: boost-devel
53 BuildRequires: eigen3-devel
54 BuildRequires: python-devel
55 BuildRequires: qt-devel
56 BuildRequires: qt-webkit-devel
58 BuildRequires: libappstream-glib
59 BuildRequires: libicu-devel
60 BuildRequires: libspnav-devel
61 BuildRequires: netgen-mesher-devel
62 #BuildRequires: ode-devel
63 #BuildRequires: opencv-devel
64 BuildRequires: python-matplotlib
65 %{!?with_bundled_pycxx:BuildRequires: python-pycxx-devel}
66 BuildRequires: python-pyside-devel
67 BuildRequires: shiboken-devel
68 %{!?with_bundled_smesh:BuildRequires: smesh-devel}
69 BuildRequires: xerces-c
70 BuildRequires: xerces-c-devel
71 %{!?with_bundled_zipios:BuildRequires: zipios++-devel}
72 Requires: %{name}-data = %{version}-%{release}
73 Requires: glib2 >= 1:2.26.0
74 # Obsolete old doc package since it's required for functionality.
75 Obsoletes: freecad-doc < 0.13-5
76 # Needed for plugin support and is not a soname dependency.
77 Requires: hicolor-icon-theme
78 Requires: python-collada
79 Requires: python-matplotlib
81 Requires: python-pyside
82 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
84 # Maintainers: keep this list of plugins up to date
85 # List plugins in %%{_libdir}/freecad/lib, less '.so' and 'Gui.so', here
86 %define plugins Assembly Complete Drawing Fem FreeCAD Image Import Inspection Mesh MeshPart Part Points QtUnit Raytracing ReverseEngineering Robot Sketcher Start Web PartDesignGui _PartDesign
88 # Some plugins go in the Mod folder instead of lib. Deal with those here:
89 %define mod_plugins Mod/PartDesign
91 # plugins and private shared libs in %%{_libdir}/freecad/lib are private;
92 # prevent private capabilities being advertised in Provides/Requires
93 %define plugin_regexp /^\\\(libFreeCAD.*%(for i in %{plugins}; do echo -n "\\\|$i\\\|$iGui"; done)\\\)\\\(\\\|Gui\\\)\\.so/d
95 %filter_provides_in %{_libdir}/%{name}/lib
96 %filter_from_requires %{plugin_regexp}
97 %filter_from_provides %{plugin_regexp}
98 %filter_provides_in %{_libdir}/%{name}/Mod
99 %filter_requires_in %{_libdir}/%{name}/Mod
104 FreeCAD is a general purpose Open Source 3D CAD/MCAD/CAx/CAE/PLM
105 modeler, aimed directly at mechanical engineering and product design
106 but also fits a wider range of uses in engineering, such as
107 architecture or other engineering specialties. It is a feature-based
108 parametric modeler with a modular software architecture which makes it
109 easy to provide additional functionality without modifying the core
113 Summary: Data files for FreeCAD
114 Requires: %{name} = %{version}-%{release}
115 %if "%{_rpmversion}" >= "5"
120 Data files for FreeCAD.
123 %setup -q -n %{name}-%{version}.%{rev}
125 %if %{without bundled_pycxx}
131 # Patch comes from upstream/master, doesn't apply cleanly to 0.14.
134 %if %{without bundled_zipios}
139 dos2unix -k src/Mod/Test/unittestgui.py \
144 # Removed bundled libraries
151 # Deal with cmake projects that tend to link excessively.
152 export LDFLAGS="%{rpmcflags} -Wl,--as-needed -Wl,--no-undefined"
155 -DCMAKE_INSTALL_PREFIX=%{_libdir}/%{name} \
156 -DCMAKE_INSTALL_DATADIR=%{_datadir}/%{name} \
157 -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name} \
158 -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \
159 -DRESOURCEDIR=%{_datadir}/%{name} \
160 -DCOIN3D_INCLUDE_DIR=%{_includedir}/Coin2 \
161 -DCOIN3D_DOC_PATH=%{_datadir}/Coin2/Coin \
162 -DFREECAD_USE_EXTERNAL_PIVY=TRUE \
166 %if %{without bundled_smesh}
167 -DFREECAD_USE_EXTERNAL_SMESH=TRUE \
168 -DSMESH_INCLUDE_DIR=%{_includedir}/smesh \
170 %if %{without bundled_zipios}
171 -DFREECAD_USE_EXTERNAL_ZIPIOS=TRUE \
173 %if %{without bundled_pycxx}
174 -DPYCXX_INCLUDE_DIR=$(pkg-config --variable=includedir PyCXX) \
175 -DPYCXX_SOURCE_DIR=$(pkg-config --variable=srcdir PyCXX) \
183 rm -rf $RPM_BUILD_ROOT
184 %{__make} -C build install \
185 DESTDIR=$RPM_BUILD_ROOT
187 # Symlink binaries to %{_bindir}
188 install -d $RPM_BUILD_ROOT%{_bindir}
189 ln -s ../%{_lib}/freecad/bin/FreeCAD $RPM_BUILD_ROOT%{_bindir}
190 ln -s ../%{_lib}/freecad/bin/FreeCADCmd $RPM_BUILD_ROOT%{_bindir}
192 # Fix problems with unittestgui.py
193 #chmod +x $RPM_BUILD_ROOT%{_libdir}/%{name}/Mod/Test/unittestgui.py
195 # Install desktop file
196 desktop-file-install --dir=$RPM_BUILD_ROOT%{_desktopdir} %{SOURCE101}
197 sed -i 's,@lib@,%{_lib},g' $RPM_BUILD_ROOT%{_desktopdir}/%{name}.desktop
199 # Install desktop icon
200 install -pD src/Gui/Icons/%{name}.svg $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg
203 install -pD %{SOURCE102} $RPM_BUILD_ROOT%{_mandir}/man1/%{name}.1
205 # Symlink manpage to other binary names
206 ln -s %{name}.1 $RPM_BUILD_ROOT%{_mandir}/man1/FreeCAD.1
207 ln -s %{name}.1 $RPM_BUILD_ROOT%{_mandir}/man1/FreeCADCmd.1
209 # Remove obsolete Start_Page.html
210 rm $RPM_BUILD_ROOT%{_docdir}/%{name}/Start_Page.html
212 # Install MimeType file
213 install -d $RPM_BUILD_ROOT%{_datadir}/mime/packages
214 cp -p %{SOURCE104} $RPM_BUILD_ROOT%{_datadir}/mime/packages/%{name}.xml
216 # Install appdata file
217 install -d $RPM_BUILD_ROOT%{_datadir}/appdata
218 cp -p %{SOURCE103} $RPM_BUILD_ROOT%{_datadir}/appdata/
220 # Bug maintainers to keep %%{plugins} macro up to date.
222 # Make sure there are no plugins that need to be added to plugins macro
223 new_plugins=$(ls $RPM_BUILD_ROOT%{_libdir}/freecad/lib | sed -e '%{plugin_regexp}')
224 if [ -n "$new_plugins" ]; then
228 Plugins not caught by regexp: $new_plugins
230 Plugins in %{_libdir}/freecad/lib do not exist in
231 specfile %%{plugins} macro. Please add these to
232 %%{plugins} macro at top of specfile and rebuild.
239 # Make sure there are no entries in the plugins macro that don't match plugins
240 for p in %{plugins}; do
241 if [ -z "$(ls $RPM_BUILD_ROOT%{_libdir}/freecad/lib/$p*.so)" ]; then
246 Extra entry in %%{plugins} macro with no matching plugin:
249 Please remove from %%{plugins} macro at top of specfile and rebuild.
257 appstream-util validate-relax --nonet $RPM_BUILD_ROOT/%{_datadir}/appdata/*.appdata.xml
260 %update_icon_cache_post hicolor
261 %update_desktop_database
262 %update_mime_database
265 if [ $1 -eq 0 ] ; then
266 %update_icon_cache hicolor
268 %update_desktop_database
269 %update_mime_database
272 %update_icon_cache hicolor
275 rm -rf $RPM_BUILD_ROOT
278 %defattr(644,root,root,755)
279 %doc ChangeLog.txt copying.lib data/License.txt
280 %exclude %{_docdir}/freecad/freecad.*
281 %attr(755,root,root) %{_bindir}/*
283 %{_datadir}/appdata/*.appdata.xml
284 %{_desktopdir}/%{name}.desktop
285 %{_iconsdir}/hicolor/scalable/apps/%{name}.svg
286 %{_datadir}/mime/packages/%{name}.xml
287 %dir %{_libdir}/%{name}
288 %{_libdir}/%{name}/bin
289 %{_libdir}/%{name}/lib
290 %{_libdir}/%{name}/Mod
293 %defattr(644,root,root,755)
295 %{_docdir}/%{name}/freecad.q*