File gnunet.spec of Package gnunet

#
# spec file for package gnunet
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2012 Pascal Bleser <pascal.bleser@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 https://bugs.opensuse.org/
#


%define gnurl gnurl-7.64.1
%define _USER_ gnunet
%define _GROUP_ gnunet
%define _OTHERGROUP_ gnunetdns
Name:           gnunet
Version:        0.11.4
Release:        0
Summary:        Security focused Peer-to-Peer Framework
License:        GPL-3.0-only
Group:          Productivity/Networking/File-Sharing
URL:            http://gnunet.org
Source0:        ftp://ftp.gnu.org/gnu/gnunet/%{name}-%{version}.tar.gz
Source1:        ftp://ftp.gnu.org/gnu/gnunet/%{gnurl}.tar.gz
Source2:        gnunet.service.in
Source3:        gnunet.sysusers.in
Source4:        gnunet.tmpfile.in
Patch0:         gnunet-0.10.1_gnurl.patch
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  gcc
BuildRequires:  glibc-devel
BuildRequires:  glpk-devel >= 4.45
BuildRequires:  guile-devel >= 2.0
BuildRequires:  libadns-devel
BuildRequires:  libesmtp-devel
BuildRequires:  libgcrypt-devel >= 1.6
BuildRequires:  libmysqlclient-devel >= 5.1
BuildRequires:  libtool
BuildRequires:  libunistring-devel
BuildRequires:  make
BuildRequires:  pkgconfig
BuildRequires:  postgresql-devel >= 8.3
BuildRequires:  pkgconfig(gnutls) >= 3.2.12
BuildRequires:  pkgconfig(libcares)
BuildRequires:  pkgconfig(libextractor) >= 0.6.1
BuildRequires:  pkgconfig(libidn2)
BuildRequires:  pkgconfig(libmicrohttpd) >= 0.9.33
BuildRequires:  pkgconfig(libxml-2.0)
BuildRequires:  pkgconfig(sqlite3) >= 3.8
Recommends:     %{name}-lang
Recommends:     %{name}-plugins
Recommends:     %{name}-storage-backend
Provides:       gnunetd = %{version}
Provides:       GNUnet = %{version}
Provides:       GNUnetd = %{version}
%{?systemd_requires}
# SECTION Recommend
BuildRequires:  pkgconfig(libpulse) >= 2.0
BuildRequires:  pkgconfig(ogg) >= 1.3.0
BuildRequires:  pkgconfig(openssl) >= 1.0
BuildRequires:  pkgconfig(opus) >= 1.0.1
# /SECTION

%description
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

GNUnet is a part of the GNU project (http://www.gnu.org/).

%package        devel
Summary:        Security focused Peer-to-Peer Framework
Group:          Development/Libraries/C and C++
Requires:       lib%{name} = %{version}
Requires:       libgcrypt-devel >= 1.6
Requires:       pkgconfig(gnutls) >= 3.2.12

%description    devel
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

This package contains header files and libraries needed to develop
application that use %{name}.

%package -n     lib%{name}
Summary:        GNUnet libraries
Group:          System/Libraries

%description -n lib%{name}
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

This package contains lib%{name} shared library.

%package        plugins
Summary:        GNUnet plugins
Group:          Productivity/Networking/File-Sharing
Requires:       %{name} = %{version}

%description    plugins
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

This package contains plugins for GNUnet services.

%package        mysql
Summary:        MySQL Storage Backend for %{name}
Group:          Productivity/Networking/Other
Requires:       %{name} = %{version}
Provides:       %{name}-storage-backend = %{version}

%description    mysql
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

%package        postgresql
Summary:        PostgreSQL Storage Backend for %{name}
Group:          Productivity/Networking/Other
Requires:       %{name} = %{version}
Provides:       %{name}-storage-backend = %{version}

%description    postgresql
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

%package        sqlite
Summary:        SQLite Storage Backend for %{name}
Group:          Productivity/Networking/Other
Requires:       %{name} = %{version}
Provides:       %{name}-storage-backend = %{version}

%description    sqlite
GNUnet is peer-to-peer framework focusing on security. The first and primary
application for GNUnet is anonymous file-sharing. GNUnet is currently developed
by a worldwide group of independent free software developers.

%lang_package

%prep
%setup -q -b1
%patch0 -p1

for _file in %{SOURCE2} %{SOURCE3} %{SOURCE4}; do
  sed -e 's/@USER@/%{_USER_}/' \
      -e 's/@GROUP@/%{_GROUP_}/' \
      -e 's/@OTHERGROUP@/%{_OTHERGROUP_}/' \
      -e 's|@LIBDIR@|%{_libdir}|' \
      < $_file > ${_file##*/}
done

%build
# Build gnurl
pushd %{_builddir}/%{gnurl}
autoreconf -fiv
%configure \
    --without-ssl \
    --without-libpsl \
    --without-librtmp \
    --without-libmetalink \
    --disable-ftp \
    --disable-file \
    --disable-ldap \
    --disable-rtsp \
    --disable-dict \
    --disable-telnet \
    --disable-dict \
    --disable-telnet \
    --disable-tftp \
    --disable-pop3 \
    --disable-imap \
    --disable-smb \
    --disable-smtp \
    --disable-gopher \
    --disable-ntlm-wb \
    --enable-hidden-symbols \
    --enable-threaded-resolver \
    --enable-shared=no \
    --with-random=/dev/urandom \
    --with-ca-bundle=%{_sysconfdir}/ssl/certs/ca-certificates.crt

make %{?_smp_mflags}
popd
# Build gnunet
export CPPFLAGS="-I%{_builddir}/%{gnurl}/include"
export LIBS="-L%{_builddir}/%{gnurl}/lib/.libs/ -lgnurl"
autoreconf -fiv
%configure \
    --with-gnunetdns=%{grpdns}

make %{?_smp_mflags} V=1 \
    pkgcfgdir="%{_sysconfdir}/%{name}"

%install
make DESTDIR=%{buildroot} install \
    pkgcfgdir="%{_sysconfdir}/%{name}"

# install systemd files
install -d %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service  %{buildroot}%{_sbindir}/rc%{name}
install -Dm 0644 %{name}.service.in %{buildroot}%{_unitdir}/%{name}.service
install -Dm 0644 %{name}.tmpfile.in %{buildroot}%{_tmpfilesdir}/%{name}.conf
install -Dm 0644 %{name}.sysusers.in %{buildroot}%{_sysusersdir}/%{name}.conf

# use a symbolic link instead of patch
ln -s %{_sysconfdir}/%{name} %{buildroot}%{_datadir}/%{name}/config.d

# set a default configuration file
sed -re 's/^ +?# +?(DEFAULTCONFIG)/\1/' \
    -i $(grep -rl 'DEFAULTCONFIG\ \?=' %{buildroot})

# create a default configuration
cat<<EOF > "%{buildroot}%{_sysconfdir}/%{name}.conf"
[path]
GNUNET_HOME = %{_localstatedir}/lib/%{name}
GNUNET_DATA_HOME = %{_localstatedir}/lib/%{name}/data/
#DEFAULTCONFIG = %{_sysconfdir}/%{name}.conf
[arm]
SYSTEM_ONLY = YES
USER_ONLY = NO
EOF

# get rid of static libraries
find %{buildroot} -type f -name "*.la" -delete -print

rm -rf %{buildroot}%{_datadir}/doc/%{name}

%find_lang %{name}

%pre
%service_add_pre %{name}.service

%post
%service_add_post %{name}.service
%tmpfiles_create %{_tmpfilesdir}/%{name}.conf
%sysusers_create %{_sysusersdir}/%{name}.conf
%install_info --info-dir=%{_infodir} %{_infodir}/%{name}.info%{ext_info}

%preun
%service_del_preun %{name}.service

%postun
%service_del_postun %{name}.service
%install_info_delete --info-dir=%{_infodir} %{_infodir}/%{name}.info%{ext_info}

%post -n lib%{name} -p /sbin/ldconfig
%postun -n lib%{name} -p /sbin/ldconfig

%files
%license COPYING
%doc AUTHORS ChangeLog README
%{_bindir}/%{name}-arm
%{_bindir}/%{name}-ats
%{_bindir}/%{name}-auto-share
%{_bindir}/%{name}-bcd
%{_bindir}/%{name}-bugreport
%{_bindir}/%{name}-cadet
%{_bindir}/%{name}-config
%{_bindir}/%{name}-consensus-profiler
%{_bindir}/%{name}-conversation
%{_bindir}/%{name}-conversation-test
%{_bindir}/%{name}-core
%{_bindir}/%{name}-datastore
%{_bindir}/%{name}-dht-get
%{_bindir}/%{name}-dht-monitor
%{_bindir}/%{name}-dht-put
%{_bindir}/%{name}-directory
%{_bindir}/%{name}-download
%{_bindir}/%{name}-ecc
%{_bindir}/%{name}-fs
%{_bindir}/%{name}-gns
%{_bindir}/%{name}-gns-proxy-setup-ca
%{_bindir}/%{name}-identity
%{_bindir}/%{name}-namecache
%{_bindir}/%{name}-namestore
%{_bindir}/%{name}-nat
%{_bindir}/%{name}-nat-auto
%{_bindir}/%{name}-nat-server
%{_bindir}/%{name}-nse
%{_bindir}/%{name}-peerinfo
%{_bindir}/%{name}-peerstore
%{_bindir}/%{name}-publish
%{_bindir}/%{name}-resolver
%{_bindir}/%{name}-revocation
%{_bindir}/%{name}-scalarproduct
%{_bindir}/%{name}-scrypt
%{_bindir}/%{name}-search
%{_bindir}/%{name}-secretsharing-profiler
%{_bindir}/%{name}-set-profiler
%{_bindir}/%{name}-statistics
%{_bindir}/%{name}-testbed-profiler
%{_bindir}/%{name}-testing
%{_bindir}/%{name}-transport
%{_bindir}/%{name}-transport-certificate-creation
%{_bindir}/%{name}-unindex
%{_bindir}/%{name}-uri
%{_bindir}/%{name}-vpn
%{_bindir}/%{name}-zoneimport

%{_datadir}/%{name}

# libexec dir
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/libexec
%{_libdir}/%{name}/libexec/%{name}-communicator-unix
%{_libdir}/%{name}/libexec/%{name}-daemon-exit
%{_libdir}/%{name}/libexec/%{name}-daemon-latency-logger
%{_libdir}/%{name}/libexec/%{name}-daemon-pt
%{_libdir}/%{name}/libexec/%{name}-daemon-regexprofiler
%{_libdir}/%{name}/libexec/%{name}-daemon-testbed-blacklist
%{_libdir}/%{name}/libexec/%{name}-daemon-testbed-underlay
%{_libdir}/%{name}/libexec/%{name}-daemon-topology
%{_libdir}/%{name}/libexec/%{name}-dns2gns
%{_libdir}/%{name}/libexec/%{name}-helper-audio-playback
%{_libdir}/%{name}/libexec/%{name}-helper-audio-record
%{_libdir}/%{name}/libexec/%{name}-helper-dns
%{_libdir}/%{name}/libexec/%{name}-helper-exit
%{_libdir}/%{name}/libexec/%{name}-helper-fs-publish
%{_libdir}/%{name}/libexec/%{name}-helper-nat-client
%{_libdir}/%{name}/libexec/%{name}-helper-nat-server
%{_libdir}/%{name}/libexec/%{name}-helper-testbed
%{_libdir}/%{name}/libexec/%{name}-helper-vpn
%{_libdir}/%{name}/libexec/%{name}-namestore-fcfsd
%{_libdir}/%{name}/libexec/%{name}-service-arm
%{_libdir}/%{name}/libexec/%{name}-service-ats
%{_libdir}/%{name}/libexec/%{name}-service-ats-new
%{_libdir}/%{name}/libexec/%{name}-service-cadet
%{_libdir}/%{name}/libexec/%{name}-service-consensus
%{_libdir}/%{name}/libexec/%{name}-service-conversation
%{_libdir}/%{name}/libexec/%{name}-service-core
%{_libdir}/%{name}/libexec/%{name}-service-datastore
%{_libdir}/%{name}/libexec/%{name}-service-dht
%{_libdir}/%{name}/libexec/%{name}-service-dns
%{_libdir}/%{name}/libexec/%{name}-service-evil-consensus
%{_libdir}/%{name}/libexec/%{name}-service-fs
%{_libdir}/%{name}/libexec/%{name}-service-gns
%{_libdir}/%{name}/libexec/%{name}-service-identity
%{_libdir}/%{name}/libexec/%{name}-service-namecache
%{_libdir}/%{name}/libexec/%{name}-service-namestore
%{_libdir}/%{name}/libexec/%{name}-service-nat
%{_libdir}/%{name}/libexec/%{name}-service-nat-auto
%{_libdir}/%{name}/libexec/%{name}-service-nse
%{_libdir}/%{name}/libexec/%{name}-service-peerinfo
%{_libdir}/%{name}/libexec/%{name}-service-peerstore
%{_libdir}/%{name}/libexec/%{name}-service-regex
%{_libdir}/%{name}/libexec/%{name}-service-resolver
%{_libdir}/%{name}/libexec/%{name}-service-revocation
%{_libdir}/%{name}/libexec/%{name}-service-scalarproduct-alice
%{_libdir}/%{name}/libexec/%{name}-service-scalarproduct-bob
%{_libdir}/%{name}/libexec/%{name}-service-scalarproduct-ecc-alice
%{_libdir}/%{name}/libexec/%{name}-service-scalarproduct-ecc-bob
%{_libdir}/%{name}/libexec/%{name}-service-secretsharing
%{_libdir}/%{name}/libexec/%{name}-service-set
%{_libdir}/%{name}/libexec/%{name}-service-statistics
%{_libdir}/%{name}/libexec/%{name}-service-testbed
%{_libdir}/%{name}/libexec/%{name}-service-testbed-logger
%{_libdir}/%{name}/libexec/%{name}-service-transport
%{_libdir}/%{name}/libexec/%{name}-service-vpn
%{_libdir}/%{name}/libexec/%{name}-service-zonemaster
%{_libdir}/%{name}/libexec/%{name}-service-zonemaster-monitor
%{_libdir}/%{name}/libexec/%{name}-timeout
%{_libdir}/%{name}/lib%{name}_plugin_namestore_heap.so
%{_libdir}/%{name}/lib%{name}_plugin_peerstore_sqlite.so

%dir %{_sysconfdir}/%{name}
%config %{_sysconfdir}/%{name}/*.conf
%config(noreplace) %{_sysconfdir}/%{name}.conf

%{_mandir}/man?/%{name}*.?%{ext_info}

%{_infodir}/%{name}*%{ext_info}
%{_infodir}/images/

%{_sbindir}/rc%{name}
%{_unitdir}/%{name}.service
%{_sysusersdir}/%{name}.conf
%{_tmpfilesdir}/%{name}.conf
%if 0%{?suse_version} < 1500
%dir %{_sysusersdir}
%endif

%files -n lib%{name}
%{_libdir}/lib%{name}*.so.*

%files plugins
%dir %{_libdir}/%{name}/nss
%{_libdir}/%{name}/nss/libnss_gns.so??
%{_libdir}/%{name}/nss/libnss_gns?.so??
%{_libdir}/%{name}/lib%{name}_plugin_ats*.so
%{_libdir}/%{name}/lib%{name}_plugin_block*.so
%{_libdir}/%{name}/lib%{name}_plugin_datacache_heap.so
%{_libdir}/%{name}/lib%{name}_plugin_datastore_heap.so
%{_libdir}/%{name}/lib%{name}_plugin_gnsrecord*.so
%{_libdir}/%{name}/lib%{name}_plugin_test.so
%{_libdir}/%{name}/lib%{name}_plugin_transport*.so

%files mysql
%{_libdir}/%{name}/lib%{name}_plugin_datastore_mysql.so

%files postgresql
%{_libdir}/%{name}/lib%{name}_plugin_datacache_postgres.so
%{_libdir}/%{name}/lib%{name}_plugin_datastore_postgres.so
%{_libdir}/%{name}/lib%{name}_plugin_namecache_postgres.so
%{_libdir}/%{name}/lib%{name}_plugin_namestore_postgres.so

%files sqlite
%{_libdir}/%{name}/lib%{name}_plugin_datacache_sqlite.so
%{_libdir}/%{name}/lib%{name}_plugin_datastore_sqlite.so
%{_libdir}/%{name}/lib%{name}_plugin_namecache_sqlite.so
%{_libdir}/%{name}/lib%{name}_plugin_namestore_sqlite.so

%files devel
%{_includedir}/%{name}
%{_libdir}/pkgconfig/%{name}*.pc
%{_libdir}/lib%{name}*.so

%files lang -f %{name}.lang

%changelog
openSUSE Build Service is sponsored by