Blob Blame History Raw
%{!?perl_vendorarch: %global perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)}

%{?perl_default_filter}

Name:		xrootd
Epoch:		1
Version:	3.0.0
Release:	2%{?dist}
Summary:	Extended ROOT file server

Group:		System Environment/Daemons
#		Sources are BSD, man pages are LGPLv2+
License:	BSD and LGPLv2+
URL:		http://xrootd.org/
Source0:	http://xrootd.org/download/v%{version}/%{name}-v%{version}.src.tgz
#		These man pages are extracted from the man/man1 directory in
#		the root source archive:
#		ftp://root.cern.ch/root/root_v5.28.00.source.tar.gz
Source1:	xrootd-manpages.tar.gz
Source2:	%{name}.init
Source3:	%{name}.sysconfig
Source4:	cmsd.init
Source5:	cmsd.sysconfig
Source6:	%{name}.logrotate
Patch0:		%{name}-jni.patch
Patch1:		%{name}-perl-java.patch
Patch2:		%{name}-circular-deps.patch
Patch3:		%{name}-dso.patch
Patch4:		%{name}-undef.patch
Patch5:		%{name}-nsl-link.patch
Patch6:		%{name}-bonjour.patch
Patch7:		%{name}-headers.patch
Patch8:		%{name}-gridsite.patch
Patch9:		%{name}-cryptoload.patch
BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:	autoconf
BuildRequires:	automake
BuildRequires:	libtool
BuildRequires:	krb5-devel
BuildRequires:	openssl-devel
BuildRequires:	gridsite-devel
BuildRequires:	readline-devel
%if %{?fedora}%{!?fedora:0} >= 7 || %{?rhel}%{!?rhel:0} >= 5
BuildRequires:	fuse-devel
%endif
%if %{?fedora}%{!?fedora:0} >= 6 || %{?rhel}%{!?rhel:0} >= 5
BuildRequires:	avahi-compat-libdns_sd-devel
BuildRequires:	avahi-devel
%endif
BuildRequires:	libxml2-devel
BuildRequires:	perl(ExtUtils::Embed)
BuildRequires:	java-devel
BuildRequires:	jpackage-utils
BuildRequires:	swig
BuildRequires:	doxygen
BuildRequires:	graphviz
%if "%{?rhel}" == "5"
BuildRequires:	graphviz-gd
%endif

Requires:	%{name}-libs = %{epoch}:%{version}-%{release}

Requires(pre):		shadow-utils
Requires(pre):		chkconfig
Requires(post):		chkconfig
Requires(preun):	chkconfig
Requires(preun):	initscripts
Requires(postun):	initscripts

%description
The Extended root file server consists of a file server called xrootd
and a cluster management server called cmsd.

The xrootd server was developed for the root analysis framework to
serve root files. However, the server is agnostic to filetypes and
provides POSIX-like access to any type of file.

The cmsd server is the next generation version of the olbd server,
originally developed to cluster and load balance Objectivity/DB AMS
database servers. It provides enhanced capability along with lower
latency and increased throughput.

%package libs
Summary:	Libraries used by xrootd servers and clients
Group:		System Environment/Libraries

%description libs
This package contains the libraries used by the xrootd servers and
clients.

%package devel
Summary:	Development files for xrootd
Group:		Development/Libraries
Requires:	%{name}-libs = %{epoch}:%{version}-%{release}

%description devel
This package contains header files and development libraries for xrootd.

%package client
Summary:	Xrootd command line client tools
Group:		Applications/Internet
Requires:	%{name}-libs = %{epoch}:%{version}-%{release}

%description client
This package contains the command line tools used to communicate with
xrootd servers.

%if %{?fedora}%{!?fedora:0} >= 7 || %{?rhel}%{!?rhel:0} >= 5
%package fuse
Summary:	Xrootd FUSE tool
Group:		Applications/Internet
Requires:	%{name}-libs = %{epoch}:%{version}-%{release}

%description fuse
This package contains the FUSE (filesystem in user space) xrootd mount
tool.
%endif

%package client-admin-perl
Summary:	Xrootd client administration Perl module
Group:		Development/Libraries
Requires:	%{name}-libs = %{epoch}:%{version}-%{release}
Requires:	perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))

%description client-admin-perl
This package contains a swig generated xrootd client administration
Perl module.

%package client-admin-java
Summary:	Xrootd client administration Java library
Group:		Development/Libraries
Requires:	%{name}-libs = %{epoch}:%{version}-%{release}
%if %{?fedora}%{!?fedora:0} >= 7 || %{?rhel}%{!?rhel:0} >= 5
Requires:	java
%else
Requires:	java-1.4.2-gcj-compat
%endif

%description client-admin-java
This package contains JNI bindings for doing xrootd client administration
in Java.

%package doc
Summary:	Developer documentation for the xrootd libraries
Group:		Documentation
%if %{?fedora}%{!?fedora:0} >= 10 || %{?rhel}%{!?rhel:0} >= 6
BuildArch:	noarch
%endif

%description doc
This package contains the API documentation of the xrootd libraries.

%prep
%setup -q -n %{name}
%setup -D -T -q -n %{name} -a 1

# Resolve libXrdNetUtil → libXrdOuc → libXrdNet circular dependencies
mkdir src/XrdNetUtil
mv src/XrdNet/XrdNetDNS.cc src/XrdNetUtil
cp -p src/XrdNet/Makefile.am src/XrdNetUtil

# Resolve libXrdFrm → libXrdOss → XrdFrm utilities circular dependencies
mv src/XrdFrm src/XrdFrmUtil
mkdir src/XrdFrm
for f in XrdFrmCID XrdFrmMonitor XrdFrmProxy XrdFrmReqAgent \
    XrdFrmReqFile XrdFrmRequest XrdFrmTrace XrdFrmUtils ; do
    mv src/XrdFrmUtil/$f.* src/XrdFrm
done
cp -p src/XrdFrmUtil/Makefile.am src/XrdFrm

%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1

# Turn off static linking
find . -name Makefile.am -exec sed -e 's/ -static//g' -i {} ';'

# Remove windows pthreads (not used, and has different license - GPL)
rm -rf pthreads-win32

# Remove bundled gridsite library
for f in grst_asn1.c grst_err.c grst_gacl.c grst_http.c grst_x509.c \
	 grst_xacml.c gridsite.h ; do
    rm -rf src/XrdSecssl/libsslGridSite/$f
done

# Use absolute path to load JNI library
sed 's!loadLibrary("\(.*\)")!load("%{_libdir}/%{name}/lib\1.so")!' \
    -i src/XrdClient/XrdClientAdminJNI.java

# Fix JNI interface namespace
sed 's!Java_XrdClientAdminJNI!Java_xrootdadmin_XrdClientAdminJNI!' \
    -i src/XrdClient/XrdClientAdminJNI.cc

./bootstrap.sh

%build
%configure --enable-gsi --enable-mon --enable-doc \
%if %{?fedora}%{!?fedora:0} <= 11 && %{?rhel}%{!?rhel:0} <= 5
	   --enable-krb4 \
%else
	   --disable-krb4 \
%endif
	   --enable-krb5 --with-krb5-incdir=/usr/include \
	   --enable-javaint --with-java-home=/usr/lib/jvm/java --disable-static
make %{?_smp_mflags}

pushd src/XrdClient
jar cvf XrdClientAdminJNI.jar xrootdadmin/XrdClientAdminJNI.class
popd

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT

# Names too generic
mv $RPM_BUILD_ROOT%{_bindir}/testclient $RPM_BUILD_ROOT%{_bindir}/xrdtestclient
mv $RPM_BUILD_ROOT%{_bindir}/testserver $RPM_BUILD_ROOT%{_bindir}/xrdtestserver

# Remove libtool archives
rm $RPM_BUILD_ROOT%{_libdir}/*.la

# Remove some junk
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}
rm -rf $RPM_BUILD_ROOT%{_bindir}/xrootdutils
%if %{?fedora}%{!?fedora:0} < 7 && %{?rhel}%{!?rhel:0} < 5
rm $RPM_BUILD_ROOT%{_bindir}/xrootdfs
%endif

# Perl module
mkdir -p $RPM_BUILD_ROOT%{perl_vendorarch}/auto/XrdClientAdmin
mv $RPM_BUILD_ROOT/%{_libdir}/XrdClientAdmin.pm \
   $RPM_BUILD_ROOT%{perl_vendorarch}
mv $RPM_BUILD_ROOT/%{_libdir}/XrdClientAdmin.so \
   $RPM_BUILD_ROOT%{perl_vendorarch}/auto/XrdClientAdmin

# Java JNI
mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{name}
mv $RPM_BUILD_ROOT/%{_libdir}/libXrdClientAdminJNI.so \
   $RPM_BUILD_ROOT%{_libdir}/%{name}
install -m 644 src/XrdClient/XrdClientAdminJNI.jar \
   $RPM_BUILD_ROOT%{_libdir}/%{name}

# Service start-up scripts et al.
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
install -p %{SOURCE2} $RPM_BUILD_ROOT%{_initrddir}/%{name}
install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name}
echo '# Put your xrootd configuration here' \
   > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/%{name}.cf
install -p %{SOURCE4} $RPM_BUILD_ROOT%{_initrddir}/cmsd
install -p -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/cmsd
echo '# Put your cmsd configuration here' \
   > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/cmsd.cf
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name}
mkdir $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}

# Man pages
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
sed -e '/^\.UR/d' -e '/^\.UE/d' -i xrootd-manpages/*
install -p -m 644 xrootd-manpages/* $RPM_BUILD_ROOT%{_mandir}/man1

# Documentation
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}
cp -pr doxydoc/html $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}

%clean
rm -rf $RPM_BUILD_ROOT

%post libs -p /sbin/ldconfig

%postun libs -p /sbin/ldconfig

%pre
getent group %{name} >/dev/null || groupadd -r %{name}
getent passwd %{name} >/dev/null || useradd -r -g %{name} \
  -d %{_sysconfdir}/%{name} -s /sbin/nologin -c "xrootd Server Account" %{name}

# Remove obsolete service
/sbin/service olbd stop >/dev/null 2>&1 || :
/sbin/chkconfig --del olbd >/dev/null 2>&1 || :

%post
if [ $1 = 1 ]; then
    /sbin/chkconfig --add %{name}
    /sbin/chkconfig --add cmsd
fi

%preun
if [ $1 = 0 ]; then
    /sbin/service %{name} stop >/dev/null 2>&1 || :
    /sbin/service cmsd stop >/dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}
    /sbin/chkconfig --del cmsd
fi

%postun
if [ $1 -ge 1 ]; then
    /sbin/service %{name} condrestart >/dev/null 2>&1 || :
    /sbin/service cmsd condrestart >/dev/null 2>&1 || :
fi

%files
%defattr(-,root,root,-)
%{_bindir}/cmsd
%{_bindir}/%{name}
%{_bindir}/XrdCnsd
%{_mandir}/man1/cmsd.1*
%{_mandir}/man1/%{name}.1*
%{_initrddir}/*
%config(noreplace) %{_sysconfdir}/sysconfig/*
%config(noreplace) %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%attr(-,xrootd,xrootd) %{_localstatedir}/log/%{name}

%files libs
%defattr(-,root,root,-)
%{_libdir}/libXrd*.so.*
# Some of the libraries are used as plugins - need the .so symlink at runtime
%{_libdir}/libXrdBwm.so
%{_libdir}/libXrdCryptossl.so
%{_libdir}/libXrdPss.so
%{_libdir}/libXrdRootd.so
%{_libdir}/libXrdSec.so
%{_libdir}/libXrdSecgsi.so
%{_libdir}/libXrdSecgsiGMAPLADP.so
%if %{?fedora}%{!?fedora:0} <= 11 && %{?rhel}%{!?rhel:0} <= 5
%{_libdir}/libXrdSeckrb4.so
%endif
%{_libdir}/libXrdSeckrb5.so
%{_libdir}/libXrdSecpwd.so
%{_libdir}/libXrdSecssl.so
%{_libdir}/libXrdSecsss.so
%{_libdir}/libXrdSecunix.so

%files devel
%defattr(-,root,root,-)
%{_includedir}/%{name}
# These libraries are not used as plugins
%{_libdir}/libXrd.so
%{_libdir}/libXrdAcc.so
%{_libdir}/libXrdClient.so
%{_libdir}/libXrdCms.so
%{_libdir}/libXrdCrypto.so
%{_libdir}/libXrdCryptoLite.so
%{_libdir}/libXrdFfs.so
%{_libdir}/libXrdFrm.so
%{_libdir}/libXrdNet.so
%{_libdir}/libXrdNetUtil.so
%{_libdir}/libXrdOfs.so
%{_libdir}/libXrdOss.so
%{_libdir}/libXrdOuc.so
%{_libdir}/libXrdPosix.so
%{_libdir}/libXrdSut.so
%{_libdir}/libXrdSys.so

%files client
%defattr(-,root,root,-)
%{_bindir}/TestXrdClient*
%{_bindir}/XrdAccTest
%{_bindir}/cns_ssi
%{_bindir}/frm_*
%{_bindir}/mpxstats
%{_bindir}/wait41
%{_bindir}/xprep
%{_bindir}/xrd
%{_bindir}/xrdadler32
%{_bindir}/xrdcp
%{_bindir}/xrdgsiproxy
%{_bindir}/xrdmonAdmin
%{_bindir}/xrdmonCollector
%{_bindir}/xrdpwdadmin
%{_bindir}/xrdsecssltest
%{_bindir}/xrdsssadmin
%{_bindir}/xrdstagetool
%{_bindir}/xrdtestclient
%{_bindir}/xrdtestserver
%{_mandir}/man1/xprep.1*
%{_mandir}/man1/xrd.1*
%{_mandir}/man1/xrdcp.1*
%{_mandir}/man1/xrdgsiproxy.1*
%{_mandir}/man1/xrdpwdadmin.1*
%{_mandir}/man1/xrdstagetool.1*

%if %{?fedora}%{!?fedora:0} >= 7 || %{?rhel}%{!?rhel:0} >= 5
%files fuse
%defattr(-,root,root,-)
%{_bindir}/xrootdfs
%endif

%files client-admin-perl
%defattr(-,root,root,-)
%{perl_vendorarch}/XrdClientAdmin.pm
%{perl_vendorarch}/auto/XrdClientAdmin

%files client-admin-java
%defattr(-,root,root,-)
%{_libdir}/%{name}

%files doc
%defattr(-,root,root,-)
%doc %{_docdir}/%{name}-%{version}

%changelog
* Fri Dec 17 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 1:3.0.0-2
- Rebuilt for updated gridsite package

* Mon Dec 13 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 1:3.0.0-1
- Update to version 3.0.0
- New subpackage - xrootd-fuse
- New version scheme inroduced by upstream - add epoch

* Wed Sep 01 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 20100315-5
- Disable threads in doxygen - causes memory corruption on ppc

* Wed Sep 01 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 20100315-4
- Add startup scripts for cmsd service that replaces the deprecated
  olbd service

* Fri Jul 09 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 20100315-3
- Fix broken jar

* Mon Jun 14 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 20100315-2
- Add LGPLv2+ to License tag due to man pages
- Better package description

* Wed Jun 09 2010 Mattias Ellert <mattias.ellert@fysast.uu.se> - 20100315-1
- Initial packaging