%global with_qt 1

Name:           gpsd
Version:        3.25
Release:        1
Epoch:          1
Summary:        Service daemon for mediating access to a GPS

License:        BSD
URL:            http://catb.org/gpsd/
Source0:        https://download-mirror.savannah.gnu.org/releases/gpsd/%{name}-%{version}.tar.gz
Source11:       gpsd.sysconfig
# Compatibility patch
Patch1:         gpsd-apistatus.patch

BuildRequires:  gcc
BuildRequires:  dbus-devel
BuildRequires:  ncurses-devel
BuildRequires:  python3-devel
BuildRequires:  python3-setuptools
BuildRequires:  gtk3-devel
BuildRequires:  python3-scons
BuildRequires:  python3-gobject
BuildRequires:  python3-cairo
BuildRequires:  python3-pyserial
BuildRequires:  desktop-file-utils
BuildRequires:  bluez-libs-devel
BuildRequires:  pps-tools-devel
BuildRequires:  systemd
%if %{with_qt}
BuildRequires:  gcc-c++
BuildRequires:  qt-devel
%endif
BuildRequires:  libusb1-devel

Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Requires:       udev
%{?systemd_requires}

%description
gpsd is a service daemon that mediates access to a GPS sensor
connected to the host computer by serial or USB interface, making its
data on the location/course/velocity of the sensor available to be
queried on TCP port 2947 of the host computer.  With gpsd, multiple
GPS client applications (such as navigational and war-driving software)
can share access to a GPS without contention or loss of data.  Also,
gpsd responds to queries with a format that is substantially easier to
parse than NMEA 0183.

%package libs
Summary:        Client libraries in C for talking to a running gpsd or GPS

%description libs
This package contains the gpsd libraries that manage access
to a GPS for applications.

%package -n python3-%{name}
Summary:        Python libraries and modules for use with gpsd
Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Requires:       python3-pyserial
%{?python_provide:%python_provide python3-%{name}}

%description -n python3-%{name}
This package contains the python3 modules that manage access to a GPS for
applications.

%package devel
Summary:        Development files for the gpsd library
Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}

%description devel
This package provides C header files for the gpsd shared libraries that
manage access to a GPS for applications

%if %{with_qt}
%package qt
Summary:        C++/Qt5 bindings for the gpsd library
Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}

%description qt
This package provide C++ and Qt bindings for use with the libgps library from
gpsd.

%package qt-devel
Summary:        Development files for the C++/Qt5 bindings for the gpsd library
Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Requires:       %{name}-qt%{?_isa} = %{epoch}:%{version}-%{release}

%description qt-devel
This package provides the development files for the C++ and Qt bindings for use
with the libgps library from gpsd.
%endif

%package clients
Summary:        Clients for gpsd
Requires:       python3-%{name} = %{epoch}:%{version}-%{release}
Requires:       %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}

%description clients
This package contains various clients using gpsd.

%package xclients
Summary:        Graphical clients for gpsd
Requires:       python3-%{name} = %{epoch}:%{version}-%{release}
Requires:       python3-cairo
Requires:       python3-gobject
Requires:       gtk3
# split from clients package
Conflicts:      gpsd-clients < 1:3.25-1

%description xclients
This package contains X clients using gpsd.

%prep
%setup -q
%patch1 -p1 -b .apistatus

sed -i 's|systemctl daemon-reload|true|' SConscript

%build
%ifarch riscv64
export CCFLAGS="%{optflags} -Wno-format-security"
%else
export CCFLAGS="%{optflags}"
%endif
export LINKFLAGS="%{__global_ldflags}"

# breaks with %{_smp_mflags}
scons \
	dbus_export=yes \
	systemd=yes \
	%if %{with_qt}
	qt=yes \
	%else
	qt=no \
	%endif
	debug=yes \
	leapfetch=no \
	manbuild=no \
	prefix="" \
	sysconfdif=%{_sysconfdir} \
	bindir=%{_bindir} \
	includedir=%{_includedir} \
	libdir=%{_libdir} \
	sbindir=%{_sbindir} \
	mandir=%{_mandir} \
	mibdir=%{_docdir}/gpsd \
	docdir=%{_docdir}/gpsd \
	pkgconfigdir=%{_libdir}/pkgconfig \
	icondir=%{_datadir}/gpsd \
	udevdir=$(dirname %{_udevrulesdir}) \
	unitdir=%{_unitdir} \
	target_python=python3 \
	python_shebang=%{python3} \
	python_libdir=%{python3_sitearch} \
	build

%install
%ifarch riscv64
export CCFLAGS="%{optflags} -Wno-format-security"
%else
export CCFLAGS="%{optflags}"
%endif
export LINKFLAGS="%{__global_ldflags}"

DESTDIR=%{buildroot} scons install systemd_install udev-install

# use the old name for udev rules
mv %{buildroot}%{_udevrulesdir}/{25,99}-gpsd.rules

%{__install} -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig
%{__install} -p -m 0644 %{SOURCE11} \
    %{buildroot}%{_sysconfdir}/sysconfig/gpsd

# Install the .desktop files
desktop-file-install \
    --dir %{buildroot}%{_datadir}/applications \
    packaging/X11/xgps.desktop
desktop-file-install \
    --dir %{buildroot}%{_datadir}/applications \
    packaging/X11/xgpsspeed.desktop

# Missed in scons install
%{__install} -p -m 0755 gpsinit %{buildroot}%{_sbindir}

# Fix permissions
chmod 644 %{buildroot}%{python3_sitearch}/gps/gps.py

rm -f %{buildroot}%{_libdir}/libgpsdpacket.so

# If qt build was disabled, clean up the files that may have been installed
# anyway
%if !%{with_qt}
%{__rm} -f %{buildroot}%{_libdir}/libQgpsmm* \
    %{buildroot}%{_libdir}/pkgconfig/Qgpsmm* \
    %{buildroot}%{_mandir}/man3/libQgpsmm.3*
%endif

rm -rf %{buildroot}%{_docdir}/gpsd

%post
%systemd_post gpsd.service gpsd.socket

%preun
%systemd_preun gpsd.service gpsd.socket

%postun
# Don't restart the service
%systemd_postun gpsd.service gpsd.socket

%ldconfig_scriptlets libs

%if %{with_qt}
%ldconfig_scriptlets qt
%endif

%files
%doc README.adoc NEWS
%license COPYING
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%{_sbindir}/gpsd
%{_sbindir}/gpsdctl
%{_sbindir}/gpsinit
%{_bindir}/gpsmon
%{_bindir}/gpsctl
%{_bindir}/ntpshmmon
%{_bindir}/ppscheck
%{_unitdir}/gpsd.service
%{_unitdir}/gpsd.socket
%{_unitdir}/gpsdctl@.service
%{_udevrulesdir}/*.rules
%{_mandir}/man8/gpsd.8*
%{_mandir}/man8/gpsdctl.8*
%{_mandir}/man8/gpsinit.8*
%{_mandir}/man8/ppscheck.8*
%{_mandir}/man1/gpsmon.1*
%{_mandir}/man1/gpsctl.1*
%{_mandir}/man1/ntpshmmon.1*

%files libs
%{_libdir}/libgps.so.30*

%files -n python3-%{name}
%{_libdir}/libgpsdpacket.so*
%{python3_sitearch}/gps*

%files devel
%doc TODO HACKING
%{_libdir}/libgps.so
%{_libdir}/pkgconfig/libgps.pc
%{_includedir}/gps.h
%{_includedir}/libgpsmm.h
%{_mandir}/man3/libgps.3*
%{_mandir}/man3/libgpsmm.3*
%{_mandir}/man5/gpsd_json.5*

%if %{with_qt}
%files qt
%{_libdir}/libQgpsmm.so.30*

%files qt-devel
%{_libdir}/libQgpsmm.so
%{_libdir}/libQgpsmm.prl
%{_libdir}/pkgconfig/Qgpsmm.pc
%{_mandir}/man3/libQgpsmm.3*
%endif

%files clients
%{_bindir}/cgps
%{_bindir}/gegps
%{_bindir}/gps2udp
%{_bindir}/gpscat
%{_bindir}/gpscsv
%{_bindir}/gpsdebuginfo
%{_bindir}/gpsdecode
%{_bindir}/gpspipe
%{_bindir}/gpsplot
%{_bindir}/gpsprof
%{_bindir}/gpsrinex
%{_bindir}/gpssnmp
%{_bindir}/gpssubframe
%{_bindir}/gpxlogger
%{_bindir}/lcdgps
%{_bindir}/gpsfake
%{_bindir}/ubxtool
%{_bindir}/zerk
%{_mandir}/man1/gegps.1*
%{_mandir}/man1/gps.1*
%{_mandir}/man1/gps2udp.1*
%{_mandir}/man1/gpscsv.1*
%{_mandir}/man1/gpsdebuginfo.1*
%{_mandir}/man1/gpsdecode.1*
%{_mandir}/man1/gpspipe.1*
%{_mandir}/man1/gpsplot.1*
%{_mandir}/man1/gpsprof.1*
%{_mandir}/man1/gpsrinex.1*
%{_mandir}/man1/gpssnmp.1*
%{_mandir}/man1/gpssubframe.1*
%{_mandir}/man1/gpxlogger.1*
%{_mandir}/man1/lcdgps.1*
%{_mandir}/man1/cgps.1*
%{_mandir}/man1/gpscat.1*
%{_mandir}/man1/gpsfake.1*
%{_mandir}/man1/ubxtool.1*
%{_mandir}/man1/zerk.1*

%files xclients
%{_bindir}/xgps
%{_bindir}/xgpsspeed
%{_datadir}/applications/*.desktop
%dir %{_datadir}/gpsd
%{_datadir}/gpsd/gpsd-logo.png
%{_mandir}/man1/xgps.1*
%{_mandir}/man1/xgpsspeed.1*

%changelog
* Tue Aug 29 2023 misaka00251 <liuxin@iscas.ac.cn> - 1:3.25-1
- Upgrade to 3.25

* Fri Jul 15 2022 misaka00251 <misaka00251@misakanet.cn> - 1:3.24-1
- Init package
