File digitalcoin.spec of Package digitalcoin

#
# spec file for package digitalcoin
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# 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/
#

Name:           digitalcoin
Version:        3.0.1a
Release:        0
Summary:        P2P digital currency
License:        MIT
Group:          Productivity/Networking/Other
Url:            https://%{name}.co/
Source0:        %{name}-%{version}.tar.xz
Patch0:         %{name}-boost1.patch
Patch1:         %{name}-boost2.patch
Patch2:         %{name}-chainparams.patch
Patch3:         %{name}-configure.patch
Patch4:         %{name}-lint.patch
Patch5:         %{name}-main.patch
Patch6:         %{name}-net.patch
Patch7:         %{name}-qcustomplot.patch
Patch8:         %{name}-qt.patch
Patch9:         %{name}-rpcrawtransaction.patch
ExcludeArch:    aarch64 ppc %power64
BuildRequires:  automake
%if 0%{?suse_version} && 0%{?suse_version} > 1320
BuildRequires:  libboost_filesystem-devel
BuildRequires:  libboost_program_options-devel
BuildRequires:  libboost_system-devel
BuildRequires:  libboost_test-devel
BuildRequires:  libboost_thread-devel
%else
BuildRequires:  boost-devel
%endif
BuildRequires:  libdb-4_8-devel
BuildRequires:  libminiupnpc-devel
BuildRequires:  qrencode-devel
%if 0%{?suse_version} && 0%{?suse_version} >= 1315
%if 0%{?suse_version} && 0%{?suse_version} > 1320
BuildRequires:  libopenssl-1_0_0-devel
%else
BuildRequires:  libopenssl-devel
%endif
BuildRequires:  libqt5-qtbase-devel
BuildRequires:  libqt5-qttools-devel
%else
BuildRequires:  libqt4-devel
%endif
BuildRequires:  protobuf-devel
%if 0%{?suse_version} && 0%{?is_opensuse} && 0%{?suse_version} == 1315 && 0%{?sle_version} && 0%{?sle_version} >= 120200
BuildRequires:  shadow
%endif
BuildRequires:  update-desktop-files

%if ! %{defined _rundir}
%define _rundir %{_localstatedir}/run
%endif

%global qt4_version qt
%global qt5_version qt5
%global qt4c_version qt4

%if 0%{?suse_version} && 0%{?suse_version} >= 1315
%define qt_version %{qt5_version}
%define qt_version_obsolete %{qt4_version}
%define qt_config %{qt5_version}
%else
%define qt_version %{qt4_version}
%define qt_version_obsolete %{qt5_version}
%define qt_config %{qt4c_version}
%endif

# set binary names
%define daemon_name %{name}d
%define display_name DigitalCoin
%define cli_name %{name}-cli
%define gui_name %{name}-qt

# set ports
%define p2p_port 7999
%define rpc_port 7998

%define description_text_1 DigitalCoin is a decentralized peer-to-peer cryptographic currency that is not controlled by any central authority. DigitalCoin is designed for transaction speed, security, stability, and ease of use. This regard for stability is inherent in the design of the economy and in the spirit of the community.
%define description_text_3 - 40 second block targets
%define description_text_4 - subsidy halves every ~3 years
%define description_text_5 - ~145 million total coins
%define description_text_6 - 5 coins per block
%define description_text_7 - 3 algorithms
%define description_text_8 - 108 blocks to retarget difficulty

%description
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

%package cli
Summary:        CLI for the %{display_name} crypto-currency
Group:          Productivity/Networking/Other

%description cli
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

This package provides %{display_name}-CLI, a command line interface for %{display_name}.

%package %{qt_version}
Summary:        GUI for the %{display_name} crypto-currency
Group:          Productivity/Networking/Other
Obsoletes:      %{name}-%{qt_version_obsolete}

%description %{qt_version}
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

This package provides %{display_name}-Qt, a GUI for %{display_name} based on Qt.

%package -n %{daemon_name}
Summary:        Headless daemon for %{name} crypto-currency
Group:          Productivity/Networking/Other

%description -n %{daemon_name}
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

This package provides %{daemon_name}, a headless %{name} daemon.

%package test
Summary:        Automated tests for %{name} client
Group:          Productivity/Networking/Other

%description test
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

This package provides automated tests for %{gui_name} and %{daemon_name}.

%package doc
Summary:        Documentation for %{name}
Group:          Documentation/Man
BuildArch:      noarch

%description doc
%{description_text_1}

%{description_text_3}
%{description_text_4}
%{description_text_5}
%{description_text_6}
%{description_text_7}
%{description_text_8}

This package contains the documentation for %{name}.

%prep
%setup -q
%if 0%{?suse_version} && 0%{?suse_version} > 1320
%patch0
%patch2
%patch7
%ifarch i586 x86_64
%patch3
%endif
%patch9
%endif
%if 0%{?suse_version} && 0%{?suse_version} > 1500
%patch1
%patch8
%endif
%if 0%{?suse_version} && 0%{?suse_version} >= 1500
%patch4
%endif
%patch5
%patch6

# setup systemd service
echo -e '[Unit]\nDescription=%{display_name} Daemon\nAfter=network.target\n' > %{daemon_name}.service
echo -e '[Service]\nUser=%{name}\nGroup=%{name}\nType=forking\nPIDFile=%{_rundir}/%{name}/%{daemon_name}.pid\nExecStart=%{_bindir}/%{daemon_name} -daemon -pid=%{_rundir}/%{name}/%{daemon_name}.pid -conf=%{_sysconfdir}/%{name}.conf -datadir=%{_localstatedir}/lib/%{name} -disablewallet\nExecReload=/bin/kill -HUP $MAINPID\n' >> %{daemon_name}.service
echo -e '[Install]\nWantedBy=multi-user.target' >> %{daemon_name}.service

# setup default config file
%{__cp} -a contrib/debian/examples/bitcoin.conf contrib/debian/examples/%{name}.conf
%{__sed} -i 's#bitcoin#%{name}#g' contrib/debian/examples/%{name}.conf
%{__sed} -i 's#Bitcoin-QT#%{gui_name}#g' contrib/debian/examples/%{name}.conf
%{__sed} -i 's#Bitcoin#%{name}#g' contrib/debian/examples/%{name}.conf

# setup firewall config
%if 0%{?suse_version} && ( 0%{?suse_version} < 1500 || ( 0%{?is_opensuse} && 0%{?suse_version} == 1500 && 0%{?sle_version} && 0%{?sle_version} <= 150200 ) )
echo "## Name: %{display_name} Daemon" > %{name}.firewall
echo "## Description: Opens ports for %{daemon_name} in order to allow remote connections." >> %{name}.firewall
echo -e "\nTCP=\"%{rpc_port}:%{p2p_port}\"" >> %{name}.firewall
%endif

# setup run folder
echo "d %{_rundir}/%{name} 0770 root %{name}" > rundir.conf

%build
export CXXFLAGS="${CXXFLAGS} %{optflags} -fpie -pie"
%if 0%{?suse_version} && 0%{?suse_version} > 1320
export CXXFLAGS="${CXXFLAGS} -DBOOST_ASIO_ENABLE_OLD_SERVICES"
%endif
%if 0%{?suse_version} && ( 0%{?suse_version} > 1500 || ( 0%{?is_opensuse} && 0%{?suse_version} == 1500 && 0%{?sle_version} && 0%{?sle_version} >= 150200 ) )
export CXXFLAGS="${CXXFLAGS} %{optflags} -pthread"
%endif
%if 0%{?suse_version} && 0%{?suse_version} > 1500
export CXXFLAGS="${CXXFLAGS} -std=c++14"
%endif
./autogen.sh
%configure --docdir=%{_defaultdocdir}/%{name} --enable-silent-rules --enable-hardening --enable-wallet --enable-upnp-default --with-miniupnpc --with-qrencode --with-boost --with-cli --with-daemon --with-gui=%{qt_config} --with-qtdbus CXXFLAGS="${CXXFLAGS} -DBUILD_SUFFIX=%{_host_vendor}"
%make_build
%{__strip} -s src/%{cli_name}
%{__strip} -s src/qt/%{gui_name}
%{__strip} -s src/%{daemon_name}
%{__strip} -s src/qt/test/test_%{gui_name}
%{__strip} -s src/test/test_%{name}

%install
%make_install

# install daemon supplementary files
%{__install} -D -m 0644 contrib/debian/examples/%{name}.conf  %{buildroot}%{_sysconfdir}/%{name}.conf
%{__install} -D -m 0644 %{daemon_name}.service %{buildroot}%{_unitdir}/%{daemon_name}.service
%{__mkdir_p} %{buildroot}%{_localstatedir}/lib/%{name}
%{__install} -d -m 0755 %{buildroot}%{_sbindir}
%{__ln_s} %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{daemon_name}

# install firewall config file
%if 0%{?suse_version} && ( 0%{?suse_version} < 1500 || ( 0%{?is_opensuse} && 0%{?suse_version} == 1500 && 0%{?sle_version} && 0%{?sle_version} <= 150200 ) )
%{__install} -D -m 644 %{name}.firewall %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/%{daemon_name}
%endif

# install desktop file
%{__install} -D -m 0644 src/qt/res/icons/bitcoin.png %{buildroot}%{_datadir}/pixmaps/%{name}.png
%suse_update_desktop_file -c %{gui_name} %{display_name} "%{display_name} Wallet" %{gui_name} %{name} Office Finance

# install run folder configuration
%{__install} -D -m 0644 rundir.conf %{buildroot}/%{_tmpfilesdir}/%{name}_rundir.conf

# install documentation
%{__install} -d -m 0755 %{buildroot}%{_defaultdocdir}/%{name}
%{__install} -m 0644 -p -t %{buildroot}%{_defaultdocdir}/%{name} README.md
%{__install} -d -m 0755 %{buildroot}%{_defaultlicensedir}/%{name}
%{__install} -m 0644 -p -t %{buildroot}%{_defaultlicensedir}/%{name} COPYING
%{__cp} -a doc %{buildroot}%{_defaultdocdir}/%{name}/

%pre -n %{daemon_name}
getent group %{name} > /dev/null || groupadd -r %{name}
getent passwd %{name} > /dev/null || useradd -r -g %{name} -d %{_localstatedir}/lib/%{name} -s /sbin/nologin -c "%{name} daemon" %{name}
%service_add_pre %{daemon_name}.service

%preun -n %{daemon_name}
%service_del_preun %{daemon_name}.service

%post -n %{daemon_name}
%service_add_post %{daemon_name}.service
%if 0%{?suse_version} && ( 0%{?suse_version} > 1320 || ( 0%{?is_opensuse} && 0%{?suse_version} == 1315 && 0%{?sle_version} && 0%{?sle_version} >= 120100 ) )
%tmpfiles_create %{_tmpfilesdir}/%{name}_rundir.conf
%else
systemd-tmpfiles --create %{_tmpfilesdir}/%{name}_rundir.conf >/dev/null 2>&1 || :
%endif

%if 0%{?suse_version} && 0%{?suse_version} < 1500
%post %{qt_version}
%desktop_database_post

%postun %{qt_version}
%desktop_database_postun
%endif

%postun -n %{daemon_name}
%service_del_postun %{daemon_name}.service

%files cli
%defattr(-,root,root,-)
%attr(755,root,root) %{_bindir}/%{cli_name}

%files %{qt_version}
%defattr(-,root,root,-)
%attr(755,root,root) %{_bindir}/%{gui_name}
%{_datadir}/pixmaps/%{name}.png
%{_datadir}/applications/%{gui_name}.desktop

%files -n %{daemon_name}
%defattr(-,root,root,-)
%attr(755,root,root) %{_bindir}/%{daemon_name}
%{_sbindir}/rc%{daemon_name}
%{_unitdir}/%{daemon_name}.service
%config(noreplace) %{_sysconfdir}/%{name}.conf
%if 0%{?suse_version} && ( 0%{?suse_version} < 1500 || ( 0%{?is_opensuse} && 0%{?suse_version} == 1500 && 0%{?sle_version} && 0%{?sle_version} <= 150200 ) )
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/%{daemon_name}
%endif
%dir %attr(700,%{name},%{name}) %{_localstatedir}/lib/%{name}
%ghost %{_rundir}/%{name}
%{_tmpfilesdir}/%{name}_rundir.conf

%files test
%defattr(-,root,root,-)
%attr(755,root,root) %{_bindir}/test_%{name}
%attr(755,root,root) %{_bindir}/test_%{gui_name}

%files doc
%defattr(-,root,root,-)
%{_defaultdocdir}/%{name}/
%{_defaultlicensedir}/%{name}/

%changelog
openSUSE Build Service is sponsored by