-%define ver_major 3
-%define ver_minor 8
-%define ver_patch 3
+#
+# Conditional build
+%bcond_without mpm # Module Peripheral Manager (run on embedded devices)
+%bcond_with tests # build tests
-%define ver %(printf "%03d.%03d.%03d" %{ver_major} %{ver_minor} %{ver_patch})
Summary: Universal Hardware Driver for Ettus Research products
+Summary(pl.UTF-8): Uniwersalny sterownik sprzętowy do produktów Ettus Research
Name: uhd
-Version: %{ver_major}.%{ver_minor}.%{ver_patch}
-Release: 0.1
+Version: 4.1.0.1
+Release: 1
License: GPL v3+
-Group: X11/Libraries
-Source0: http://files.ettus.com/binaries/uhd/uhd_%{ver}-release/%{name}-%{version}.tar.gz
-# Source0-md5: 84928825717678e77ffc400d73bcf412
-URL: http://www.qcustomplot.com/
-BuildRequires: QtCore-devel
-BuildRequires: QtGui-devel
-BuildRequires: boost-devel
-BuildRequires: cmake >= 2.8.0
+Group: Applications/System
+#Source0Download: https://github.com/EttusResearch/uhd/releases
+Source0: https://github.com/EttusResearch/uhd/archive/v%{version}/%{name}-%{version}.tar.gz
+# Source0-md5: a05185b631e7f0491d76d75a2568219e
+Patch0: %{name}-boost.patch
+Patch1: %{name}-libdir.patch
+Patch2: %{name}-link.patch
+Patch3: %{name}-mpm-build.patch
+URL: https://www.ettus.com/sdr-software/uhd-usrp-hardware-driver/
+BuildRequires: boost-devel >= 1.58
+BuildRequires: cmake >= 3.5.1
BuildRequires: doxygen
-BuildRequires: libusb-devel
+BuildRequires: gpsd-devel >= 3.11
+BuildRequires: libstdc++-devel >= 6:5
+BuildRequires: libusb-devel >= 1.0
BuildRequires: ncurses-devel
-BuildRequires: orc-devel
BuildRequires: pkgconfig
-BuildRequires: python-cheetah
-BuildRequires: qt4-build
+BuildRequires: python3 >= 1:3.5
+BuildRequires: python3-Mako >= 0.4.2
+BuildRequires: python3-devel >= 1:3.5
+BuildRequires: python3-numpy >= 1.7
+BuildRequires: python3-requests >= 2.0
BuildRequires: rpm-pythonprov
+BuildRequires: rpmbuild(macros) >= 1.742
+%if %{with mpm}
BuildRequires: udev-devel
+%endif
+Requires: %{name}-libs = %{version}-%{release}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-%define filterout -flto
-
%description
The UHD is the universal hardware driver for Ettus Research products.
The goal of the UHD is to provide a host driver and API for current
and future Ettus Research products. It can be used standalone without
GNU Radio.
+%description -l pl.UTF-8
+UHD to uniwersalny sterownik sprzętowy do produktów Ettus Research.
+Celem UHD jest zapewnienie sterownika gospodarza oraz API do obecnych
+i przyszłych produków Ettus Research. Może być używany samodzielnie
+bez GNU Radio.
+
+%package libs
+Summary: USRP Hardware Driver library
+Summary(pl.UTF-8): Biblioteka USRP Hardware Driver
+Group: Libraries
+
+%description libs
+USRP Hardware Driver library.
+
+%description libs -l pl.UTF-8
+Biblioteka USRP Hardware Driver.
+
%package devel
-Summary: Development files for %{name}
-Group: X11/Development/Libraries
-Requires: %{name} = %{version}-%{release}
+Summary: Development files for USRP Hardware Driver library
+Summary(pl.UTF-8): Pliki programistyczne biblioteki USRP Hardware Driver
+Group: Development/Libraries
+Requires: %{name}-libs = %{version}-%{release}
+Requires: boost-devel >= 1.53
%description devel
-Header files for Universal Hardware Driver for Ettus Research
-products.
+Header files for USRP Hardware Driver for Ettus Research products.
+
+%description devel -l pl.UTF-8
+Pliki nagłówkowe biblioteki USRP Hardware Driver (sterownika dla
+sprzętu USRP) do produktów Ettus Research.
+
+%package examples
+Summary: Examples for UHD
+Summary(pl.UTF-8): Przykłady do UHD
+Group: Applications/System
+Requires: %{name}-libs = %{version}-%{release}
+
+%description examples
+Example programs for USRP Hardware Driver for Ettus Research products.
+
+%description examples -l pl.UTF-8
+Programy przykładowe do biblioteki USRP Hardware Driver (sterownika
+dla sprzętu USRP) do produktów Ettus Research.
%package doc
-Summary: Documentation and examples for uhd
+Summary: Documentation for UHD
+Summary(pl.UTF-8): Dokumentacja do UHD
Group: Documentation
-%if "%{_rpmversion}" >= "5"
BuildArch: noarch
-%endif
%description doc
-Documentation and examples for Universal Hardware Driver for Ettus
-Research products
+Documentation for USRP Hardware Driver for Ettus Research products.
+
+%description doc -l pl.UTF-8
+Dokumentacja do biblioteki USRP Hardware Driver (sterownika dla
+sprzętu USRP) do produktów Ettus Research.
+
+%package -n python3-uhd
+Summary: Python interface for USRP Hardware Driver library
+Summary(pl.UTF-8): Interfejs Pythona do biblioteki USRP Hardware Driver
+Group: Libraries/Python
+
+%description -n python3-uhd
+Python interface for USRP Hardware Driver library.
+
+%description -n python3-uhd -l pl.UTF-8
+Interfejs Pythona do biblioteki USRP Hardware Driver.
+
+%package mpm
+Summary: USRP Module Peripheral Manager
+Summary(pl.UTF-8): USRP Module Peripheral Manager - zarządca urządzeń peryferyjnych
+Group: Applications/System
+Requires: %{name}-mpm-libs = %{version}-%{release}
+
+%description mpm
+USRP Module Peripheral Manager.
+
+%description mpm -l pl.UTF-8
+USRP Module Peripheral Manager - zarządca urządzeń peryferyjnych.
+
+%package mpm-libs
+Summary: USRP Module Peripheral Manager library
+Summary(pl.UTF-8): Biblioteka USRP Module Peripheral Manager
+Group: Libraries
+
+%description mpm-libs
+USRP Module Peripheral Manager library.
+
+%description mpm-libs -l pl.UTF-8
+Biblioteka USRP Module Peripheral Manager.
+
+%package mpm-devel
+Summary: USRP Module Peripheral Manager library
+Summary(pl.UTF-8): Biblioteka USRP Module Peripheral Manager
+Group: Development/Libraries
+Requires: %{name}-mpm-libs = %{version}-%{release}
+
+%description mpm-devel
+USRP Module Peripheral Manager library.
+
+%description mpm-devel -l pl.UTF-8
+Biblioteka USRP Module Peripheral Manager.
+
+%package -n python3-usrp_mpm
+Summary: Python USRP Module Peripheral Manager library
+Summary(pl.UTF-8): Biblioteka USRP Module Peripheral Manager dla Pythona
+Group: Libraries/Python
+Requires: %{name}-mpm-libs = %{version}-%{release}
+
+%description -n python3-usrp_mpm
+Python USRP Module Peripheral Manager library.
+
+%description -n python3-usrp_mpm -l pl.UTF-8
+Biblioteka USRP Module Peripheral Manager dla Pythona.
%prep
%setup -q
+#%patch0 -p1
+%patch1 -p1
+#%patch2 -p1
+%patch3 -p1
+
+%{__sed} -i -e '1s,/usr/bin/env python$,%{__python},' host/examples/python/*.py
+%{__sed} -i -e '1s,/usr/bin/env python$,%{__python},' host/utils/{converter_benchmark.py,usrp2_{card_burner,card_burner_gui,recovery}.py}
+%{__sed} -i -e '1s,/usr/bin/env python$,%{__python},' host/utils/latency/graph.py
+grep -rl '/usr/bin/env python3' . | xargs %{__sed} -i -e '1s,/usr/bin/env python3,%{__python3},'
%build
-install -d build
-cd build
-%cmake \
- ..
+install -d build-{host,mpm}
+cd build-host
+%cmake ../host \
+ -DUHD_VERSION="%{version}" \
+ %{cmake_on_off tests ENABLE_TESTS} \
+ -DENABLE_USB=ON
+
+%{__make}
+
+%if %{with mpm}
+cd ../build-mpm
+%cmake ../mpm
+
+# -DMPM_DEVICE= n3xx (Mykonos+Magnesium), e320, e31x
+%endif
+
%{__make}
%install
rm -rf $RPM_BUILD_ROOT
-%{__make} -C build install/fast \
+
+%{__make} -C build-host install \
+ DESTDIR=$RPM_BUILD_ROOT
+
+# outdated (binaries removed)
+%{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/{octoclock_firmware_burner,usrp_n2xx_simple_net_burner,usrp_x3xx_fpga_burner}.1*
+%if %{with tests}
+# not packaging tests
+%{__rm} -r $RPM_BUILD_ROOT%{_libdir}/%{name}/tests \
+ $RPM_BUILD_ROOT%{_libdir}/%{name}/utils/latency/run_tests.py
+%endif
+# packaged as %doc
+%{__rm} $RPM_BUILD_ROOT%{_docdir}/uhd/{LICENSE,README.md}
+
+%if %{with mpm}
+%{__make} -C build-mpm install \
DESTDIR=$RPM_BUILD_ROOT
-rm $RPM_BUILD_ROOT%{_libdir}/%{name}/utils/usrp_n2xx_simple_net_burner
-rm $RPM_BUILD_ROOT%{_libdir}/%{name}/utils/usrp_x3xx_fpga_burner
+%{__rm} $RPM_BUILD_ROOT%{_bindir}/aurora_bist_test.py
+%endif
-# not packaged
-rm -r $RPM_BUILD_ROOT%{_libdir}/%{name}/tests
+%py3_comp $RPM_BUILD_ROOT%{py3_sitedir}
+%py3_ocomp $RPM_BUILD_ROOT%{py3_sitedir}
%clean
rm -rf $RPM_BUILD_ROOT
-%post -p /sbin/ldconfig
-%postun -p /sbin/ldconfig
+%post libs -p /sbin/ldconfig
+%postun libs -p /sbin/ldconfig
+
+%post mpm-libs -p /sbin/ldconfig
+%postun mpm-libs -p /sbin/ldconfig
%files
%defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/nirio_programmer
-%attr(755,root,root) %{_bindir}/octoclock_firmware_burner
+%doc host/{LICENSE,README.md}
%attr(755,root,root) %{_bindir}/uhd_cal_rx_iq_balance
%attr(755,root,root) %{_bindir}/uhd_cal_tx_dc_offset
%attr(755,root,root) %{_bindir}/uhd_cal_tx_iq_balance
+%attr(755,root,root) %{_bindir}/uhd_config_info
%attr(755,root,root) %{_bindir}/uhd_find_devices
+%attr(755,root,root) %{_bindir}/uhd_image_loader
%attr(755,root,root) %{_bindir}/uhd_images_downloader
%attr(755,root,root) %{_bindir}/uhd_usrp_probe
%attr(755,root,root) %{_bindir}/usrp2_card_burner
-%attr(755,root,root) %{_bindir}/usrp_n2xx_simple_net_burner
-%attr(755,root,root) %{_bindir}/usrp_x3xx_fpga_burner
-%{_mandir}/man1/octoclock_firmware_burner.1*
%{_mandir}/man1/uhd_cal_rx_iq_balance.1*
%{_mandir}/man1/uhd_cal_tx_dc_offset.1*
%{_mandir}/man1/uhd_cal_tx_iq_balance.1*
+%{_mandir}/man1/uhd_config_info.1*
%{_mandir}/man1/uhd_find_devices.1*
+%{_mandir}/man1/uhd_image_loader.1*
%{_mandir}/man1/uhd_images_downloader.1*
%{_mandir}/man1/uhd_usrp_probe.1*
-%{_mandir}/man1%{_prefix}p2_card_burner.1*
-%{_mandir}/man1%{_prefix}p_n2xx_simple_net_burner.1*
-%{_mandir}/man1%{_prefix}p_x3xx_fpga_burner.1*
-%attr(755,root,root) %{_libdir}/libuhd.so.00*.00*
-%attr(755,root,root) %ghost %{_libdir}/libuhd.so.003
-%dir %{_libdir}/%{name}
+%{_mandir}/man1/usrp2_card_burner.1*
%dir %{_libdir}/%{name}/utils
-%attr(755,root,root) %{_libdir}/%{name}/utils/*.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/b2xx_fx3_utils
+%attr(755,root,root) %{_libdir}/%{name}/utils/converter_benchmark
+%attr(755,root,root) %{_libdir}/%{name}/utils/converter_benchmark.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/fx2_init_eeprom
+%attr(755,root,root) %{_libdir}/%{name}/utils/octoclock_burn_eeprom
+%attr(755,root,root) %{_libdir}/%{name}/utils/query_gpsdo_sensors
+%attr(755,root,root) %{_libdir}/%{name}/utils/uhd_images_downloader.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/usrp2_card_burner.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/usrp2_recovery.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/usrp_burn_db_eeprom
+%attr(755,root,root) %{_libdir}/%{name}/utils/usrp_burn_mb_eeprom
%{_libdir}/%{name}/utils/uhd-usrp.rules
-%attr(755,root,root) %{_libdir}/%{name}/utils/*_eeprom
-%attr(755,root,root) %{_libdir}/%{name}/utils/*_utils
-%attr(755,root,root) %{_libdir}/%{name}/utils/*_sensors
%dir %{_libdir}/%{name}/utils/latency
-%attr(755,root,root) %{_libdir}/%{name}/utils/latency/*
+%attr(755,root,root) %{_libdir}/%{name}/utils/latency/graph.py
+%attr(755,root,root) %{_libdir}/%{name}/utils/latency/responder
+%{_datadir}/%{name}
+
+%files libs
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libuhd.so.4.1.0
+%dir %{_libdir}/%{name}
%files devel
%defattr(644,root,root,755)
-%{_pkgconfigdir}/uhd.pc
+%attr(755,root,root) %{_libdir}/libuhd.so
%{_includedir}/uhd
+%{_includedir}/uhd.h
%{_libdir}/cmake/uhd
-%{_libdir}/libuhd.so
+%{_pkgconfigdir}/uhd.pc
-%files doc
+%files examples
%defattr(644,root,root,755)
-%{_docdir}/%{name}
-%dir %dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/examples
%attr(755,root,root) %{_libdir}/%{name}/examples/*
+
+%files doc
+%defattr(644,root,root,755)
+%{_docdir}/%{name}
+
+%files -n python3-uhd
+%defattr(644,root,root,755)
+%dir %{py3_sitedir}/uhd
+%attr(755,root,root) %{py3_sitedir}/uhd/libpyuhd.so
+%{py3_sitedir}/uhd/*.py
+%{py3_sitedir}/uhd/__pycache__
+
+%if %{with mpm}
+%files mpm
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/db-dump
+%attr(755,root,root) %{_bindir}/db-id
+%attr(755,root,root) %{_bindir}/db-init
+%attr(755,root,root) %{_bindir}/eeprom-blank
+%attr(755,root,root) %{_bindir}/eeprom-dump
+%attr(755,root,root) %{_bindir}/eeprom-id
+%attr(755,root,root) %{_bindir}/eeprom-init
+%attr(755,root,root) %{_bindir}/eeprom-set-flags
+%attr(755,root,root) %{_bindir}/fan-limits
+%attr(755,root,root) %{_bindir}/mpm_debug.py
+%attr(755,root,root) %{_bindir}/mpm_shell.py
+%attr(755,root,root) %{_bindir}/n3xx_bist
+%attr(755,root,root) %{_bindir}/usrp_hwd.py
+%attr(755,root,root) %{_bindir}/usrp_update_fs
+%{systemdunitdir}/usrp-hwd.service
+
+%files mpm-libs
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libusrp-periphs.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libusrp-periphs.so.4
+
+%files mpm-devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libusrp-periphs.so
+%{_includedir}/mpm
+
+%files -n python3-usrp_mpm
+%defattr(644,root,root,755)
+%dir %{py3_sitedir}/usrp_mpm
+%attr(755,root,root) %{py3_sitedir}/usrp_mpm/libpyusrp_periphs.so
+%{py3_sitedir}/usrp_mpm/*.py
+%{py3_sitedir}/usrp_mpm/__pycache__
+%{py3_sitedir}/usrp_mpm/chips
+%{py3_sitedir}/usrp_mpm/cores
+%{py3_sitedir}/usrp_mpm/dboard_manager
+%{py3_sitedir}/usrp_mpm/periph_manager
+%{py3_sitedir}/usrp_mpm/sys_utils
+%{py3_sitedir}/usrp_mpm/xports
+%endif