1
0
forked from pool/boinc-client
boinc-client/boinc-client.spec

374 lines
12 KiB
RPMSpec
Raw Normal View History

#
# spec file for package boinc-client
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2016 by Aaron Puchert <aaronpuchert@alice-dsl.net>
# Copyright (c) 2011 by Sascha Manns <saigkill@opensuse.org>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define sonum 7
%define boinc_dir %{_localstatedir}/lib/boinc
Name: boinc-client
Version: 7.6.33
Release: 0
Summary: The BOINC client
License: GPL-3.0+ or LGPL-3.0+
Group: Productivity/Clustering/Computing
Url: http://boinc.berkeley.edu/
#Git-Clone: git://github.com/BOINC/boinc
Source: https://github.com/BOINC/boinc/archive/client_release/7.6/%version.tar.gz
Source1: boinc-icons.tar.bz2
Source2: boinc-gui.desktop
Source3: README.SUSE
Source4: sysconfig.%{name}
Source5: boinc-logrotate
Source6: boinc-manager
Source20: %{name}.service
Source100: %{name}-rpmlintrc
# PATCH-FIX-OPENSUSE boinc-guirpcauth.patch
# Create password file rw for group, this enables passwordless connection
# of manager from users of the boinc group.
# This won't be probably upstreamed as it might be unsafe for common usage
# without setting proper group ownership of the password file.
Patch0: boinc-guirpcauth.patch
# PATCH-FIX-OPENSUSE boinc-docbook2x.patch
Patch4: boinc-docbook2x.patch
Patch5: 0001-Fix-1530-null-pointer-dereference.patch
BuildRequires: Mesa-devel
BuildRequires: docbook2x
BuildRequires: docbook_4
BuildRequires: fdupes
BuildRequires: freeglut-devel
BuildRequires: gcc-c++
BuildRequires: gcc-fortran
BuildRequires: gettext-runtime
BuildRequires: libcurl-devel >= 7.17.1
BuildRequires: libjpeg-devel
BuildRequires: libnotify-devel
BuildRequires: libtool
BuildRequires: libxslt
BuildRequires: openssl-devel
BuildRequires: pkg-config
BuildRequires: pwdutils
BuildRequires: sqlite3-devel
BuildRequires: systemd
BuildRequires: update-desktop-files
BuildRequires: wxWidgets-3_0-devel >= 3.0.2
BuildRequires: xorg-x11-libXmu-devel
Recommends: boinc-client-lang = %{version}
Recommends: logrotate
Requires(pre): pwdutils
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if 0%{?suse_version} >= 1310
BuildRequires: libXScrnSaver-devel
BuildRequires: libXi-devel
BuildRequires: libxcb-devel
BuildRequires: xcb-util-devel
%else
BuildRequires: xorg-x11-libxcb-devel
%endif
%lang_package
%lang_package -n boinc-manager
%description
The Berkeley Open Infrastructure for Network Computing (BOINC) is an open-
source software platform which supports distributed computing, primarily in
the form of "volunteer" computing and "desktop Grid" computing. It is well
suited for problems which are often described as "trivially parallel". BOINC
is the underlying software used by projects such as SETI@home, Einstein@Home,
ClimatePrediciton.net, the World Community Grid, and many other distributed
computing projects.
This package installs the BOINC client software, which will allow your
computer to participate in one or more BOINC projects, using your spare
computer time to search for cures for diseases, model protein folding, study
global warming, discover sources of gravitational waves, and many other types
of scientific and mathematical research.
%package -n boinc-manager
Summary: GUI to control and monitor boinc-client
Group: Productivity/Scientific/Astronomy
Recommends: boinc-manager-lang = %{version}
Requires: hicolor-icon-theme
%description -n boinc-manager
The BOINC Manager is a graphical monitor and control utility for the BOINC
core client. It gives a detailed overview of the state of the client it is
monitoring. The BOINC Manager has two modes of operation, the "Simple View" in
which it only displays the most important information and the "Advanced View"
in which all information and all control elements are available.
%package devel
Summary: Development files for boinc-client
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}-%{release}
Requires: openssl-devel
%description devel
This package contains development files for %{name}.
%package -n libboinc%{sonum}
Summary: Berkeley Open Infrastructure For Network Computing library
Group: System/Libraries
%description -n libboinc%{sonum}
The BOINC Manager is a graphical monitor and control utility for the BOINC
core client. It gives a detailed overview of the state of the client it is
monitoring. The BOINC Manager has two modes of operation, the "Simple View" in
which it only displays the most important information and the "Advanced View"
in which all information and all control elements are available.
%package doc
Summary: Documentation files for boinc-client
Group: Documentation/Other
BuildArch: noarch
%description doc
This package contains documentation files for the BOINC client.
%prep
%setup -q -n %{name}_release-7.6-%{version} -D -a 1
%patch0
%patch4
%patch -P 5 -p1
%build
# Install user hints
install -m0644 %{SOURCE3} README.SUSE
# Fix lang directories (refer patch2)
mv locale/pt_PT locale/pt
# fix utf8
iconv -f ISO88591 -t UTF8 < checkin_notes_2005 > checkin_notes_2005.utf8
touch -r checkin_notes_2005 checkin_notes_2005.utf8
mv checkin_notes_2005.utf8 checkin_notes_2005
iconv -f ISO88591 -t UTF8 < checkin_notes_2009 > checkin_notes_2009.utf8
touch -r checkin_notes_2009 checkin_notes_2009.utf8
mv checkin_notes_2009.utf8 checkin_notes_2009
iconv -f ISO88591 -t UTF8 < checkin_notes_2010 > checkin_notes_2010.utf8
touch -r checkin_notes_2010 checkin_notes_2010.utf8
mv checkin_notes_2010.utf8 checkin_notes_2010
# fix permissions and newlines on source files
chmod 644 clientgui/{DlgItemProperties.h,AsyncRPC.cpp,DlgItemProperties.cpp}
sed -i 's/\r//' clientgui/DlgItemProperties.cpp
## remove files with questionable licenses
# removing NVIDIA owned file that does not clearly allow redistribution or
# modification
rm coprocs/NVIDIA/include/nvapi.h
autoreconf -fi
%configure \
--enable-optimize \
--enable-shared \
--disable-static \
--enable-dynamic-client-linkage \
--disable-server \
--disable-fcgi \
--enable-unicode \
--with-ssl \
--with-x
# Disable rpaths
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
# Export Path and make
make clean %{?_smp_mflags}
make libboinc_la_LIBADD="-L%{_libdir} -lssl -ldl" \
CFLAGS="%{optflags} -g -W -pipe -fno-strict-aliasing -D_REENTRANT" \
CXXFLAGS="%{optflags} -g -W -pipe -fno-strict-aliasing -D_REENTRANT" \
DESTDIR=%{_prefix} %{?_smp_mflags}
%install
make DESTDIR=%{buildroot} install %{?_smp_mflags}
for i in clientgui locale; do
pushd $i
make DESTDIR=%{buildroot} install %{?_smp_mflags}
popd
done
# Creates default folders
install -dm0755 %{buildroot}%{boinc_dir}
install -dm0755 %{buildroot}%{_mandir}/man1
# Remove old boinc & rename boinc_client to boinc-client
rm -f %{buildroot}%{_bindir}/boinc
mv -f %{buildroot}%{_bindir}/boinc_client %{buildroot}%{_bindir}/%{name}
# Rename boincmgr and wrap it
mv %{buildroot}%{_bindir}/boincmgr %{buildroot}%{_bindir}/boinc-gui
# Install boinc-manager wrapper script
install -Dm0755 %{SOURCE6} %{buildroot}%{_bindir}/boinc-manager
# Use symlink instead of hardlink
pushd %{buildroot}%{_bindir}
ln -s -f %{name} boinc
ln -s -f boinc-manager boincmgr
ln -s -f boinc-manager boincmanager
popd
# replace @boinc_dir@, @bindir@
sed -i \
-e "s,@boinc_dir@,%{boinc_dir},g" \
-e "s,@bindir@,%{_bindir},g" \
%{buildroot}%{_bindir}/boinc-manager
# Remove /etc/sysconfig/boinc-client, it is added by %%fillup_and_insserv
rm -f %{buildroot}%{_sysconfdir}/sysconfig/%{name}
# Install init and create symlink for rcboinc
install -D -m0644 %{SOURCE20} %{buildroot}%{_unitdir}/%{name}.service
mkdir -p %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
# And remove sysvinit script installed by boinc
rm -r %{buildroot}/%{_initddir}
# Install logrotate
install -Dm0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
# Install bash completion
install -Dpm0644 client/scripts/boinc.bash %{buildroot}%{_sysconfdir}/bash_completion.d/boinc
# Install desktop-file and icons
install -Dm0644 boinc-gui-128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/boinc-gui.png
install -Dm0644 boinc-gui-64.png %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/boinc-gui.png
install -Dm0644 boinc-gui-48.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/boinc-gui.png
install -Dm0644 boinc-gui-32.png %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/boinc-gui.png
install -Dm0644 boinc-gui-22.png %{buildroot}%{_datadir}/icons/hicolor/22x22/apps/boinc-gui.png
install -Dm0644 boinc-gui-16.png %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/boinc-gui.png
# Install *.desktop File
%suse_update_desktop_file -i boinc-gui Utility
# Remove static libraries, libtool archives
rm %{buildroot}%{_libdir}/*.{a,la}
# Relinking Manpages
ln -s -f boincmgr.1.gz %{buildroot}%{_mandir}/man1/boinc-manager.1.gz
ln -s -f boinccmd.1.gz %{buildroot}%{_mandir}/man1/boinccmd.1.gz
ln -s -f boinc.1.gz %{buildroot}%{_mandir}/man1/boinc.1.gz
# Fix spurious-executable-perm
chmod 0644 doc/*.php
# Install fake /var/lib/boinc
install -dm0755 %{buildroot}%{_var}/lib/boinc
# Prepare $LANG Packages
%find_lang BOINC-Client
%find_lang BOINC-Manager
%fdupes -s %{buildroot}
%pre
# add group
%{_sbindir}/groupadd -r boinc 2>/dev/null || :
# add user
%{_sbindir}/useradd -c "BOINC Client" -d "%{_localstatedir}/lib/boinc" \
-g boinc -r -s /sbin/nologin boinc 2>/dev/null || :
if [ -f %{_sysconfdir}/sysconfig/%{name} ]; then
if grep "BOINC_BOINC_USR" %{_sysconfdir}/sysconfig/boinc-client | grep -q grep; then
mv -f %{_sysconfdir}/sysconfig/%{name} %{_sysconfdir}/sysconfig/%{name}.save
fi
fi
%service_add_pre %{name}.service
%preun
%service_del_preun %{name}.service
%post
%service_add_post %{name}.service
%{_sbindir}/usermod -c "BOINC Client" -s /sbin/nologin boinc 2>/dev/null || :
%postun
%service_del_postun %{name}.service
%post -n boinc-manager
%{_bindir}/touch --no-create %{_datadir}/icons/hicolor || :
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%postun -n boinc-manager
%{_bindir}/touch --no-create %{_datadir}/icons/hicolor || :
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%post -n libboinc%{sonum} -p /sbin/ldconfig
%postun -n libboinc%{sonum} -p /sbin/ldconfig
%post devel -p /sbin/ldconfig
%postun devel -p /sbin/ldconfig
%files
%defattr(-,root,root,-)
%doc COPYING* COPYRIGHT notes todo README.SUSE
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/bash_completion.d/*
%{_bindir}/boinc
%{_bindir}/%{name}
%{_bindir}/boinccmd
%{_bindir}/boincscr
%{_bindir}/switcher
%{_mandir}/man1/boinccmd.1.gz
%{_mandir}/man1/boinc.1.gz
%{_unitdir}/%{name}.service
%{_sbindir}/rc%{name}
%defattr(-,boinc,boinc,-)
%{_localstatedir}/lib/boinc/
%files doc
%defattr(-,root,root,-)
%doc checkin_*
%doc doc/*.txt doc/bolt doc/logo doc/*.php doc/*.png doc/*.html
%files -n boinc-manager
%defattr(-,root,root,-)
%{_bindir}/boinc-gui
%{_bindir}/boinc-manager
%{_bindir}/boincmgr
%{_bindir}/boincmanager
%{_datadir}/applications/boinc-gui.desktop
%{_datadir}/icons/hicolor/*/apps/*
%{_mandir}/man1/boincmgr.1.gz
%{_mandir}/man1/boinc-manager.1.gz
%files -n %{name}-lang -f BOINC-Client.lang
%defattr(-,root,root)
%files -n boinc-manager-lang -f BOINC-Manager.lang
%defattr(-,root,root)
%files -n libboinc%{sonum}
%defattr(-,root,root,-)
%{_libdir}/*.so.*
%files devel
%defattr(-,root,root,-)
%{_libdir}/*.so
%{_includedir}/boinc
%changelog