## This package understands the following switches: ## --without fedora ... disable fedora specific parts ## Fedora Extras specific customization below... %bcond_without fedora ## %global username gnunet %global uid 32 %global plugindir %_libdir/GNUnet %global homedir %_var/lib/%name %global logdir %_var/log/%name %global rundir %_var/run/%name %{!?release_func:%global release_func() %1%{?dist}} Name: gnunet Version: 0.8.0c Release: %release_func 3 Summary: Secure and non-centralized peer-to-peer networking framework Group: Applications/Internet License: GPL URL: http://gnunet.org/ Source0: http://gnunet.org/download/GNUnet-%version.tar.bz2 Patch0: GNUnet-0.8.0c-paths.patch BuildRoot: %_tmppath/%name-%version-%release-root BuildRequires: libextractor-devel guile-devel libgcrypt-devel BuildRequires: gmp-devel libtool-ltdl-devel BuildRequires: adns-devel BuildRequires: gettext gawk Obsoletes: GNUnet %package lib Summary: Libraries for GNUnet Group: System Environment/Libraries Requires: %name-transports Obsoletes: GNUnet-lib %package modules Summary: Module meta package Group: System Environment/Libraries Requires: %name-modules-base = %version-%release Requires: %name-modules-curl = %version-%release Requires: %name-modules-sqlite = %version-%release Requires: %name-modules-mysql = %version-%release Requires: %name-setup-text = %version-%release Requires: %name-setup-gtk = %version-%release Requires: %name-setup-qt = %version-%release Requires: %name-transports = %version-%release Obsoletes: GNUnet-modules %package transports Summary: Transport modules for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release # Ensure correct (de)installation order Requires(pre): %name-lib Requires(postun): %name-lib Obsoletes: GNUnet-transports %package setup-gtk Summary: Module for GTK based setup Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-setup(%name) = gtk BuildRequires: libglade2-devel gtk2-devel Obsoletes: GNUnet-setup-gtk %package setup-text Summary: Module for text based setup Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-setup(%name) = text BuildRequires: dialog dialog-devel Obsoletes: GNUnet-setup-text %package setup-qt Summary: Module for Qt based setup Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-setup(%name) = qt BuildRequires: qt4-devel Obsoletes: GNUnet-setup-qt %package modules-base Summary: Base modules for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release Obsoletes: GNUnet-modules-base %package modules-curl Summary: Curl backend module for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release BuildRequires: curl-devel Obsoletes: GNUnet-modules-curl %package modules-sqlite Summary: SQLite backend module for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-storage(%name) = sqlite BuildRequires: sqlite-devel Obsoletes: GNUnet-modules-sqlite %package modules-mysql Summary: MySQL backend module for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-storage(%name) = mysql BuildRequires: mysql-devel Obsoletes: GNUnet-modules-mysql %package modules-pgsql Summary: PostgreSQL backend module for GNUnet Group: System Environment/Libraries Requires: %name-lib = %version-%release Provides: module-storage(%name) = pgsql BuildRequires: postgresql-devel %package devel Summary: Headers and other files required to develop GNUnet based applications Requires: %name-lib = %version-%release Group: Development/Libraries Obsoletes: GNUnet-devel %package server Summary: GNUnet daemon Group: System Environment/Daemons Source10: gnunetd.sysv Obsoletes: GNUnet-server Requires: %name-server-core = %version-%release Requires(pre): %name-server-core Requires(postun): %name-server-core %package server-core Summary: GNUnet daemon core files Group: System Environment/Daemons Requires: %name-lib = %version-%release Requires: %name-modules-base = %version-%release Requires: gnunet-transports Requires: module-storage(%name) BuildRequires: fedora-usermgmt-devel Provides: user(%username) Provides: group(%username) %{?FE_USERADD_REQ} %description GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. A first service implemented on top of the networking layer allows anonymous censorship-resistant file-sharing. GNUnet uses a simple, excess-based economic model to allocate resources. Peers in GNUnet monitor each others behavior with respect to resource usage; peers that contribute to the network are rewarded with better service. %description devel GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. This package contains headers and other files which are required to develop GNUnet based applications. %description lib GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. This package contains libraries which are required by GNUnet applications. %description server GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. %description server-core GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. This package contains the 'gnunetd' daemon. %description modules GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. This is a metapackage which brings in all supported modules. %description modules-base GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services. %description setup-text %description setup-gtk %description setup-qt %description modules-sqlite %description modules-curl %description modules-mysql %description modules-pgsql %description transports %prep %setup -q -n GNUnet-%version %patch0 -p1 -b .paths cat << "EOF" >> src/util/os/Makefile.in AM_CPPFLAGS += \ -D PREFIX=\"$(prefix)\" -D BINDIR=\"$(bindir)\" \ -D DATADIR=\"$(datadir)\" \ -D PKG_LIBDIR=\"$(pkglibdir)\" \ -D PKG_DATADIR=\"$(pkgdatadir)\" EOF sed -i -e ' s!^\(USER\|GROUP\) =[ a-z]*$!\1 = %username!g; s!^LOGFILE =.*!LOGFILE = %logdir/daemon-logs!g; s!^PIDFILE =.*!PIDFILE = %rundir/gnunetd.pid!g; ' \ contrib/gnunetd.conf touch --reference=configure .stamp sed -i -e 's!SQLITE\(_.*FLAGS=.*postgres\)!POSTGRES\1!g' configure touch --reference=.stamp configure for i in src/setup/ncurses/Makefile.{am,in}; do touch --reference "$i" .sed-stamp sed -i \ -e '/^libgnunetsetup_curses_la_LIBADD =/a\' \ -e ' -ldialog -lncursesw -lm \\' \ "$i" touch --reference .sed-stamp "$i" done mkdir -p _dialog _postgresql/include ln -s %_includedir/dialog _dialog/include ln -s %_includedir _postgresql/include/postgresql %build # put qt4 stuff into $PATH p=`pkg-config --variable=bindir Qt` PATH=$p:/usr/bin:/bin %configure --disable-static \ --disable-rpath \ --with-dialog=`pwd`/_dialog \ --with-qt \ --with-guile \ --with-gmp \ --with-sqlite \ --with-mysql \ --with-postgres=`pwd`/_postgresql \ --with-extractor \ --with-adns \ LDFLAGS='-Wl,--as-needed' # build with --as-needed and disable rpath sed -i \ -e 's! -shared ! -Wl,--as-needed\0!g' \ -e '/sys_lib_dlsearch_path_spec=\"\/lib \/usr\/lib /s!\"\/lib \/usr\/lib !/\"/%_lib /usr/%_lib !g' \ libtool # not SMP safe make %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT find $RPM_BUILD_ROOT%_libdir -name '*.la' -print0 | xargs -0 rm -f mkdir -p $RPM_BUILD_ROOT{%homedir,%logdir,%_initrddir,%rundir} install -pm0755 %SOURCE10 $RPM_BUILD_ROOT%_initrddir/gnunetd install -pm0640 contrib/gnunetd.conf $RPM_BUILD_ROOT%_sysconfdir/gnunetd.conf # broken rm -f $RPM_BUILD_ROOT%_bindir/gnunet-download-manager.scm # non existing rm -f $RPM_BUILD_ROOT%_mandir/*/gnunet-{download-manager,testbed}.1* for i in base sqlite curl mysql core server; do echo '%defattr(-,root,root,-)' > filelists.$i done for i in $RPM_BUILD_ROOT%plugindir/libgnunetmodule*.so; do readelf -a "$i" | \ sed '/(NEEDED)/s!.*\[\(.*\)\].*!\1!p;d' | { target=base is_sqlite= is_curl= is_mysql= is_pgsql= fname=${i##$RPM_BUILD_ROOT} while read lib; do lib=${lib%%.so*} case $lib in (libgnunet*|libc|libm|libpthread) ;; (libsqlite*) is_sqlite=1; target=sqlite;; (libcurl) is_curl=1; target=curl;; (libmysql*) is_mysql=1; target=mysql;; (libpq*) is_pgsql=1; target=pgsql;; (*) target=other echo "$fname -> $lib" ;; esac done case $target in (base) echo "$fname" >> filelists.base;; (other) ;; (*) test "$is_sqlite$is_curl$is_mysql$is_pgsql" = 1 || { echo "too much foreign libraries" >&2 exit 1 } echo "$fname" >> filelists.$target ;; esac } || exit 1 done for i in $RPM_BUILD_ROOT%_bindir/*; do fname=${i##$RPM_BUILD_ROOT} b=${fname##%_bindir/} case $b in (gnunet-peer-info|gnunet-transport-check|gnunet-update|gnunet-chat|gnunetd) dst=server ;; (remotetest) echo $fname >> filelists.server continue ;; (*) dst=core ;; esac echo $fname >> filelists.$dst echo "%_mandir/*/$b.*" >> filelists.$dst done %find_lang GNUnet %clean rm -rf $RPM_BUILD_ROOT %post lib -p /sbin/ldconfig %postun lib -p /sbin/ldconfig %pre server-core %__fe_groupadd %uid -r %username &>/dev/null || : %__fe_useradd %uid -r -s /sbin/nologin -d %homedir -M \ -c 'The gnunet daemon user' -g %username %username &>/dev/null || : %postun server-core %__fe_userdel %username &>/dev/null || : %__fe_groupdel %username &>/dev/null || : %files -f filelists.core %defattr(-,root,root,-) %doc AUTHORS COPYING ChangeLog README UPDATING %lang(fr) %doc README.fr %_datadir/GNUnet %files devel %defattr(-,root,root,-) %_includedir/GNUnet %_libdir/*.so %files lib -f GNUnet.lang %defattr(-,root,root,-) %_libdir/*.so.* %dir %plugindir %_mandir/man5/* %files server -f filelists.server %defattr(-,root,root,-) %config %_initrddir/gnunetd %files server-core %defattr(-,root,root,-) %_bindir/gnunetd %_mandir/man*/gnunetd* %config(noreplace) %_sysconfdir/gnunetd.conf %dir %attr(0700,%username,%username) %homedir %dir %attr(0730,root,%username) %logdir %dir %attr(0775,root,%username) %rundir %files modules %files modules-base -f filelists.base %files modules-sqlite -f filelists.sqlite %files modules-curl -f filelists.curl %files modules-mysql -f filelists.mysql %attr(-,root,root) %doc doc/README.mysql %files modules-pgsql -f filelists.pgsql %attr(-,root,root) %doc doc/README.postgres %files setup-text %defattr(-,root,root,-) %plugindir/libgnunetsetup_text.so %plugindir/libgnunetsetup_curses.so %files setup-gtk %defattr(-,root,root,-) %plugindir/libgnunetsetup_gtk.so %files setup-qt %defattr(-,root,root,-) %plugindir/libgnunetsetup_qt.so %files transports %defattr(-,root,root,-) %plugindir/libgnunettransport_*.so %changelog