Summary: 3D printer control software
Name: cura
-Version: 15.02.1
-Release: 2
+Version: 2.5.0
+Release: 5
+Epoch: 1
Group: Applications/Engineering
# Code is AGPLv3
# Icons AGPLv3 https://github.com/daid/Cura/issues/231#issuecomment-12209683
# Example models are CC-BY-SA
# TweakAtZ.py is CC-BY-SA
License: AGPLv3 and CC-BY-SA
-Source0: https://github.com/daid/Cura/archive/%{version}.tar.gz
-# Source0-md5: f41ba365e5b98907cf55fc70e056c2e8
-Source1: %{name}
-Source2: %{name}.desktop
-Patch0: %{name}-dont-show-nc-stls.patch
-Patch1: %{name}-system-paths.patch
-Patch2: %{name}-version.patch
-Patch3: %{name}-no-firmware.patch
-Patch4: %{name}-newlines.patch
-URL: http://daid.github.com/Cura/
+Source0: https://github.com/Ultimaker/Cura/archive/%{version}/%{name}-%{version}.tar.gz
+# Source0-md5: ebe1b78c8b9ce77c289a266c9e732dc8
+Source1: https://github.com/Ultimaker/fdm_materials/archive/%{version}/fdm_materials-%{version}.tar.gz
+# Source1-md5: bf8f25394273d7b6333a856b6a1c94ce
+Patch0: plugins-path.patch
+Patch1: desktop.patch
+Patch2: locale.patch
+Patch3: test.patch
+URL: https://ultimaker.com/en/products/cura-software
+BuildRequires: cmake
BuildRequires: desktop-file-utils
-BuildRequires: dos2unix
+BuildRequires: gettext
BuildRequires: gettext-tools
+BuildRequires: python3-Uranium = %{version}
+BuildRequires: python3-devel
+BuildRequires: python3-pytest
BuildRequires: rpm-pythonprov
BuildRequires: rpmbuild(macros) >= 1.219
-Requires: CuraEngine >= 14.12.1
-Requires: python-PyOpenGL
-Requires: python-numpy
-Requires: python-power
-Requires: python-serial
-Requires: python-wxPython
+Requires: CuraEngine = %{epoch}:%{version}
+Requires: Qt5Quick-controls
+Requires: fonts-TTF-OpenSans
+Requires: python3-PyOpenGL
+Requires: python3-PyQt5
+Requires: python3-numpy
+Requires: python3-power
+Requires: python3-savitar
+Requires: python3-serial
+Requires: python3-Uranium = %{version}
+Requires: python3-zeroconf
BuildArch: noarch
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
for printing.
%prep
-%setup -qn Cura-%{version}
+%setup -q -n Cura-%{version} -a1
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
-%patch4 -p1
-# Use free UltimakerHandle.stl instead of UltimakerRobot_support.stl
-FILES=$(grep -Ir "UltimakerRobot_support.stl" . | cut -f1 -d: | sort | uniq | grep -v Attribution.txt | tr '\n' ' ')
-sed -i 's/UltimakerRobot_support.stl/UltimakerHandle.stl/g' $FILES
+# Invalid locale names ptbr and jp
+%{__mv} resources/i18n/{ptbr,pt_BR}
+%{__mv} resources/i18n/{jp,ja}
-dos2unix resources/example/Attribution.txt
+# The setup.py is only useful for py2exe, remove it, so noone is tempted to use it
+%{__rm} setup.py
-sed -i 's/REPLACE_THIS_IN_SPEC/%{version}/' Cura/util/version.py
+# Upstream installs to lib/python3/dist-packages
+# We want to install to %{py3_sitescriptdir}
+%{__sed} -i 's|lib/python${PYTHON_VERSION_MAJOR}/dist-packages|%(echo %{py3_sitescriptdir} | sed -e s@%{_prefix}/@@)|g' CMakeLists.txt
-mv resources/locale/{zh,zh_CN}
-rm -rf resources/locale/{en,po}
+# Wrong shebang
+%{__sed} -i '1s=^#!%{_bindir}/\(python\|env python\)3*=#!%{__python3}=' cura_app.py
%build
-# rebuild locales
-cd resources/locale
-rm *.in *.pot
-for FILE in *; do
- msgfmt $FILE/LC_MESSAGES/Cura.po -o $FILE/LC_MESSAGES/Cura.mo
- rm $FILE/LC_MESSAGES/Cura.po
-done
+mkdir build
+cd build
+%{cmake} .. \
+ -DCURA_VERSION:STRING=%{version}
+
+%{__make}
+
+cd ../fdm_materials-%{version}
+mkdir build
+cd build
+%{cmake} ..
+
+%{__make}
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_bindir},%{py_sitescriptdir}/Cura,%{_datadir}/%{name}/firmware,%{_pixmapsdir},%{_localedir}}
-cp -a Cura/* $RPM_BUILD_ROOT%{py_sitescriptdir}/Cura
-rm $RPM_BUILD_ROOT%{py_sitescriptdir}/Cura/LICENSE
-cp -a resources/* $RPM_BUILD_ROOT%{_datadir}/%{name}
-cp -a plugins $RPM_BUILD_ROOT%{_datadir}/%{name}
-cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_bindir}
-ln -s %{_datadir}/%{name} $RPM_BUILD_ROOT%{py_sitescriptdir}/Cura/resources
-ln -s %{_datadir}/%{name}/%{name}.ico $RPM_BUILD_ROOT%{_pixmapsdir}
+%{__make} -C build install DESTDIR=$RPM_BUILD_ROOT
+%{__make} -C fdm_materials-%{version}/build install DESTDIR=$RPM_BUILD_ROOT
-# locales
-cp -a $RPM_BUILD_ROOT%{_datadir}/%{name}/locale/* $RPM_BUILD_ROOT%{_localedir}
-rm -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/locale
-ln -sf %{_localedir}/ $RPM_BUILD_ROOT%{_datadir}/%{name}/ # the app expects the locale folder in here
+# Sanitize the location of locale files
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/{cura/resources/i18n,locale}
+ln -s ../../locale $RPM_BUILD_ROOT%{_datadir}/cura/resources/i18n
+%{__rm} $RPM_BUILD_ROOT%{_localedir}/*/*.po
+%{__rm} $RPM_BUILD_ROOT%{_localedir}/*.pot
-desktop-file-install --dir=$RPM_BUILD_ROOT%{_desktopdir} %{SOURCE2}
-
-%find_lang Cura
+# Unbundle fonts
+%{__rm} -r $RPM_BUILD_ROOT%{_datadir}/%{name}/resources/themes/cura/fonts/
+ln -s %{_datadir}/fonts/TTF $RPM_BUILD_ROOT%{_datadir}/%{name}/resources/themes/cura/fonts
%py_ocomp $RPM_BUILD_ROOT%{py_sitescriptdir}
%py_comp $RPM_BUILD_ROOT%{py_sitescriptdir}
%py_postclean
+%find_lang cura --all-name
+
%clean
rm -rf $RPM_BUILD_ROOT
-%files -f Cura.lang
+%files -f cura.lang
%defattr(644,root,root,755)
-%doc Cura/LICENSE resources/example/Attribution.txt
%attr(755,root,root) %{_bindir}/%{name}
-%{py_sitescriptdir}/Cura
-%{_pixmapsdir}/%{name}.ico
+%{py3_sitescriptdir}/cura
%{_desktopdir}/%{name}.desktop
%{_datadir}/%{name}
+%{_datadir}/appdata/cura.appdata.xml
+%{_datadir}/mime/packages/cura.xml