[root/f17] Rebuild for xrootd 3.3
Mattias Ellert
ellert at fedoraproject.org
Fri Mar 8 13:22:40 UTC 2013
commit 875cd941a660cf88fcd9f2ea8ec949ea5fab1bb8
Author: Mattias Ellert <mattias.ellert at fysast.uu.se>
Date: Fri Mar 8 10:47:22 2013 +0100
Rebuild for xrootd 3.3
- Backport gfal fixes
root-gfal-bits.patch | 61 ++++
root-glibc.patch | 35 +++
root-qt.patch | 25 ++
root-xrootd.patch | 795 +++++++++++++++++++++++++++++++++++++++++++++++++-
root.spec | 32 ++-
5 files changed, 934 insertions(+), 14 deletions(-)
---
diff --git a/root-gfal-bits.patch b/root-gfal-bits.patch
new file mode 100644
index 0000000..050e522
--- /dev/null
+++ b/root-gfal-bits.patch
@@ -0,0 +1,61 @@
+diff -ur root-5.28.00h.orig/config/Makefile.in root-5.28.00h/config/Makefile.in
+--- root-5.28.00h.orig/config/Makefile.in 2011-11-24 17:12:55.000000000 +0100
++++ root-5.28.00h/config/Makefile.in 2013-03-02 08:09:02.230002472 +0100
+@@ -154,6 +154,7 @@
+ GFALLIBDIR := @gfallibdir@
+ GFALCLILIB := @gfallib@
+ GFALINCDIR := $(filter-out /usr/include, @gfalincdir@)
++SRMIFCEINCDIR := $(filter-out /usr/include, @srmifceincdir@)
+
+ BUILDGLITE := @buildglite@
+ GLITELIBDIR := @glitelibdir@
+diff -ur root-5.28.00h.orig/configure root-5.28.00h/configure
+--- root-5.28.00h.orig/configure 2011-11-24 17:12:57.000000000 +0100
++++ root-5.28.00h/configure 2013-03-02 08:10:33.684863607 +0100
+@@ -1426,6 +1426,7 @@
+ gviz-incdir Graphviz support, location of gvc.h
+ gviz-libdir Graphviz support, location of libgvplugin_core
+ gfal-incdir GFAL support, location of gfal_api.h
++ srm-ifce-incdir GFAL support, location of gfal_srm_ifce_types.h
+ gfal-libdir GFAL support, location of libgfal
+ glew-incdir GLEW support, location of glew.h
+ glew-libdir GLEW support, location of libGLEW
+@@ -1733,6 +1734,7 @@
+ --with-gviz-libdir=*) gvizlibdir=$optarg ; enable_gviz="yes" ;;
+ --with-gfal-incdir=*) gfalincdir=$optarg ; enable_gfal="yes" ;;
+ --with-gfal-libdir=*) gfallibdir=$optarg ; enable_gfal="yes" ;;
++ --with-srm-ifce-incdir=*) srmifceincdir=$optarg;;
+ --with-glew-incdir=*) glewincdir=$optarg ; enable_builtin_glew=no;;
+ --with-glew-libdir=*) glewlibdir=$optarg ; enable_builtin_glew=no;;
+ --with-gsl-incdir=*) gslincdir=$optarg ; enable_gsl="yes" ;;
+@@ -3199,6 +3201,12 @@
+ gfallib=$found_lib
+ gfallibdir=$found_dir
+
++ check_header "gfal_srm_ifce_types.h" "$srmifceincdir" \
++ /opt/lcg/include /opt/srm-ifce/include /usr/local/lcg/include \
++ /usr/local/srm-ifce/include
++ srmifceinc=$found_hdr
++ srmifceincdir=$found_dir
++
+ if test "x$gfalincdir" = "x" || test "x$gfallib" = "x"; then
+ enable_gfal="no"
+ fi
+@@ -6341,6 +6349,7 @@
+ -e "s|@exceptions@|$enable_exceptions|" \
+ -e "s|@explicitlink@|$enable_explicitlink|" \
+ -e "s|@gfalincdir@|$gfalincdir|" \
++ -e "s|@srmifceincdir@|$srmifceincdir|" \
+ -e "s|@gfallib@|$gfallib|" \
+ -e "s|@gfallibdir@|$gfallibdir|" \
+ -e "s|@enable_xft@|$enable_xft|" \
+diff -ur root-5.28.00h.orig/io/gfal/Module.mk root-5.28.00h/io/gfal/Module.mk
+--- root-5.28.00h.orig/io/gfal/Module.mk 2011-11-24 17:12:56.000000000 +0100
++++ root-5.28.00h/io/gfal/Module.mk 2013-03-02 08:04:00.349761906 +0100
+@@ -70,3 +70,6 @@
+ ##### extra rules ######
+ $(GFALO) $(GFALDO): CXXFLAGS := $(filter-out -Wshadow,$(CXXFLAGS))
+ $(GFALO): CXXFLAGS += $(GFALINCDIR:%=-I%)
++$(GFALO): CXXFLAGS += $(SRMIFCEINCDIR:%=-I%)
++$(GFALO): CXXFLAGS += $(shell pkg-config --cflags glib-2.0)
++$(GFALO): CXXFLAGS += -D_FILE_OFFSET_BITS=64
diff --git a/root-glibc.patch b/root-glibc.patch
new file mode 100644
index 0000000..b2da159
--- /dev/null
+++ b/root-glibc.patch
@@ -0,0 +1,35 @@
+diff -ur root-5.34.00.orig/build/rmkdepend/main.c root-5.34.00/build/rmkdepend/main.c
+--- root-5.34.00.orig/build/rmkdepend/main.c 2012-06-05 15:31:46.000000000 +0200
++++ root-5.34.00/build/rmkdepend/main.c 2012-07-05 20:42:58.938953353 +0200
+@@ -60,7 +60,7 @@
+ # endif
+ # elif defined(__CYGWIN__)
+ extern int fchmod(int, mode_t);
+-#else
++# elif !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 16)
+ extern int fchmod(int, int);
+ # endif
+ #endif
+diff -ur root-5.34.00.orig/cint/tool/rmkdepend/main.c root-5.34.00/cint/tool/rmkdepend/main.c
+--- root-5.34.00.orig/cint/tool/rmkdepend/main.c 2012-06-05 15:31:30.000000000 +0200
++++ root-5.34.00/cint/tool/rmkdepend/main.c 2012-07-05 20:42:58.492949104 +0200
+@@ -58,7 +58,7 @@
+ #if !defined(MAC_OS_X_VERSION_10_4)
+ extern int fchmod();
+ #endif
+-#else
++#elif !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 16)
+ extern int fchmod();
+ #endif
+ #endif
+diff -ur root-5.34.00.orig/core/unix/src/TUnixSystem.cxx root-5.34.00/core/unix/src/TUnixSystem.cxx
+--- root-5.34.00.orig/core/unix/src/TUnixSystem.cxx 2012-06-05 15:31:17.000000000 +0200
++++ root-5.34.00/core/unix/src/TUnixSystem.cxx 2012-07-05 20:29:29.969242837 +0200
+@@ -98,6 +98,7 @@
+ #include <pwd.h>
+ #include <grp.h>
+ #include <errno.h>
++#include <sys/resource.h>
+ #include <sys/wait.h>
+ #include <time.h>
+ #include <sys/time.h>
diff --git a/root-qt.patch b/root-qt.patch
new file mode 100644
index 0000000..353b6fb
--- /dev/null
+++ b/root-qt.patch
@@ -0,0 +1,25 @@
+diff -ur root-5.28.00h.orig/configure root-5.28.00h/configure
+--- root-5.28.00h.orig/configure 2011-11-24 17:12:57.000000000 +0100
++++ root-5.28.00h/configure 2013-03-02 12:52:21.823338782 +0100
+@@ -2955,21 +2955,6 @@
+ check_library "libQt3Support Qt3Support Qt3Support$qt4suffix Qt3Support4" \
+ "$enable_shared" "$found_raw_dir" ""
+ qtlib="$qtlib $found_lib"
+- check_library "libQtOpenGL QtOpenGL QtOpenGL$qt4suffix QtOpenGL4" \
+- "$enable_shared" "$found_raw_dir" ""
+- qtlib="$qtlib $found_lib"
+- check_library "libQtSvg QtSvg QtSvg$qt4suffix QtSvg4" \
+- "$enable_shared" "$found_raw_dir" ""
+- qtlib="$qtlib $found_lib"
+- check_library "libQtXml QtXml QtXml$qt4suffix QtXml4" \
+- "$enable_shared" "$found_raw_dir" ""
+- qtlib="$qtlib $found_lib"
+- check_library "libQtWebKit QtWebKit QtWebKit$qt4suffix QtWebKit4" \
+- "$enable_shared" "$found_raw_dir" ""
+- qtlib="$qtlib $found_lib"
+- check_library "libQtNetwork QtNetwork QtNetwork$qt4suffix QtNetwork4" \
+- "$enable_shared" "$found_raw_dir" ""
+- qtlib="$qtlib $found_lib"
+ else
+ qtinc=
+ qtmainincdir=
diff --git a/root-xrootd.patch b/root-xrootd.patch
index 9f7c113..06f423a 100644
--- a/root-xrootd.patch
+++ b/root-xrootd.patch
@@ -1,7 +1,166 @@
-diff -ur root-5.32.01.orig/configure root-5.32.01/configure
---- root-5.32.01.orig/configure 2012-02-29 16:46:41.000000000 +0100
-+++ root-5.32.01/configure 2012-03-17 14:14:02.822111495 +0100
-@@ -4486,10 +4486,14 @@
+diff -Nur root-5.32.04.orig/cmake/modules/FindXROOTD.cmake root-5.32.04/cmake/modules/FindXROOTD.cmake
+--- root-5.32.04.orig/cmake/modules/FindXROOTD.cmake 2012-07-13 15:54:18.000000000 +0200
++++ root-5.32.04/cmake/modules/FindXROOTD.cmake 2013-03-08 07:23:10.891952543 +0100
+@@ -28,32 +28,37 @@
+ )
+
+ if (XROOTD_INCLUDE_DIR)
+- file(STRINGS ${XROOTD_INCLUDE_DIR}/XrdVersion.hh xrdvers REGEX "^#define XrdVERSION")
++ file(STRINGS ${XROOTD_INCLUDE_DIR}/XrdVersion.hh xrdvers REGEX "^#define XrdVERSION ")
+ string(REGEX REPLACE "#define[ ]+XrdVERSION[ ]+" "" xrdvers ${xrdvers})
+ string(REGEX REPLACE "[^v\\.]+" "" xrdversdots ${xrdvers})
+ if (${xrdversdots} STREQUAL "v..")
+ # Regular version string; parse it out
+ string(REGEX MATCH "[0-9\\.]+" xrdvers ${xrdvers})
+- string(REGEX MATCH "[0-9]" xrdversmajor ${xrdvers})
+- string(REPLACE "${xrdversmajor}." "" xrdversminor ${xrdvers})
+- string(REGEX MATCH "[0-9]" xrdversminor ${xrdversminor})
+- string(REPLACE "${xrdversmajor}.${xrdversminor}." "" xrdverspatch ${xrdvers})
+- string(REGEX MATCH "[0-9]+" xrdverspatch ${xrdverspatch})
++ string(REGEX REPLACE "^([^.]*)\\.(.*)\\.(.*)" "\\1" xrdversmajor ${xrdvers})
++ string(REGEX REPLACE "^([^.]*)\\.(.*)\\.(.*)" "\\2" xrdversminor ${xrdvers})
++ string(REGEX REPLACE "^([^.]*)\\.(.*)\\.(.*)" "\\3" xrdverspatch ${xrdvers})
+ math(EXPR xrdversnum ${xrdversmajor}*100000000+${xrdversminor}*10000+${xrdverspatch})
+ else ()
+ # Old version string: we keep only the first numerics, i.e. the date
+ string(REGEX REPLACE "[v\"]" "" xrdvers ${xrdvers})
+- message(STATUS "Found Xrootd version ${xrdvers}")
+- string(REGEX REPLACE "[^0-9-]+" " " xrdvers ${xrdvers})
+ string(SUBSTRING ${xrdvers} 0 8 xrdversnum)
+ endif ()
++ if ( ${xrdversnum} EQUAL 300030000 )
++ SET(XROOTD_FOUND FALSE)
++ message(WARNING " >>> Cannot build with XRootD version 3.3.0: please install >=3.3.1 or <= 3.2.x")
++ else()
++ SET(XROOTD_FOUND TRUE)
++ endif ()
++endif()
++
++if(XROOTD_FOUND)
+ # This we used as a compiler macro variable
+ if(NOT XROOTD_FIND_QUIETLY )
+- message(STATUS "Found Xrootd version num: ${xrdvers}")
++ message(STATUS "Found Xrootd version num: ${xrdvers} (setting -DROOTXRDVERS=${xrdversnum})")
+ endif()
+ SET(XROOTD_CFLAGS "-DROOTXRDVERS=${xrdversnum}")
+
+- if ( ${xrdversnum} LESS 300010000 )
++ if ( ${xrdversnum} LESS 300010000 AND ${xrdversnum} LESS 20111022)
+ SET(XROOTD_OLDPACK TRUE)
+ message(STATUS "Setting OLDPACK TRUE")
+ else()
+@@ -72,14 +77,16 @@
+ XrdOuc/XrdOucPthread.hh
+ XrdOuc/XrdOucSemWait.hh
+ XrdOuc/XrdOucTimer.hh
++ PATHS
+ ${XROOTD_INCLUDE_DIR}
+ )
+ else()
+- if ( ${xrdversnum} LESS 300010000 )
++ if ( ${xrdversnum} LESS 300010000 AND ${xrdversnum} LESS 20111022)
+ # DNS stuff was under XrdNet
+ find_path(XROOTD_INCLUDE_DIR
+ NAMES
+ XrdNet/XrdNetDNS.hh
++ PATHS
+ ${XROOTD_INCLUDE_DIR}
+ )
+ else ()
+@@ -87,6 +94,7 @@
+ find_path(XROOTD_INCLUDE_DIR
+ NAMES
+ XrdSys/XrdSysDNS.hh
++ PATHS
+ ${XROOTD_INCLUDE_DIR}
+ )
+ endif ()
+@@ -101,9 +109,20 @@
+ XrdSys/XrdSysPthread.hh
+ XrdSys/XrdSysSemWait.hh
+ XrdSys/XrdSysTimer.hh
++ PATHS
+ ${XROOTD_INCLUDE_DIR}
+ )
+ endif()
++
++ if (XROOTD_INCLUDE_DIR)
++ # Check for additional headers in new directories
++ find_path(XROOTD_PRIVATE_INCLUDE_DIR
++ NAMES
++ XrdSys/XrdSysPriv.hh
++ PATHS
++ ${XROOTD_INCLUDE_DIR}/private
++ )
++ endif()
+ endif()
+ if (XROOTD_INCLUDE_DIR)
+ SET(XROOTD_FOUND TRUE)
+@@ -152,7 +171,7 @@
+ if(XROOTD_LIBRARIES)
+ set(XROOTD_FOUND TRUE)
+ if(NOT XROOTD_FIND_QUIETLY )
+- message(STATUS " include_dir: ${XROOTD_INCLUDE_DIR}")
++ message(STATUS " include_dir: ${XROOTD_INCLUDE_DIR} ${XROOTD_PRIVATE_INCLUDE_DIR}")
+ message(STATUS " libraries: ${XROOTD_LIBRARIES}")
+ endif()
+ else ()
+@@ -160,7 +179,8 @@
+ endif ()
+ endif()
+
+-mark_as_advanced(XROOTD_INCLUDE_DIR
++mark_as_advanced(XROOTD_INCLUDE_DIR
++ XROOTD_PRIVATE_INCLUDE_DIR
+ XROOTD_XrdMain_LIBRARY
+ XROOTD_XrdUtils_LIBRARY
+ XROOTD_XrdClient_LIBRARY
+diff -Nur root-5.32.04.orig/config/Makefile.in root-5.32.04/config/Makefile.in
+--- root-5.32.04.orig/config/Makefile.in 2012-07-13 15:55:01.000000000 +0200
++++ root-5.32.04/config/Makefile.in 2013-03-08 07:23:10.901952610 +0100
+@@ -251,6 +251,7 @@
+ EXTRA_XRDFLAGS := @extraxrdflags@
+ XRDVERSION := @xrdversion@
+ HASXRDUTILS := @hasxrdutils@
++XRDINCPRIVATE := @xrdincprivate@
+
+ SRPLIBDIR := @srplibdir@
+ SRPLIB := @srplib@
+diff -Nur root-5.32.04.orig/configure root-5.32.04/configure
+--- root-5.32.04.orig/configure 2012-07-13 15:55:07.000000000 +0200
++++ root-5.32.04/configure 2013-03-08 07:23:10.895952570 +0100
+@@ -4473,9 +4473,16 @@
+ fi
+ fi
+ fi
+- echo "$xrdver"
++ # Protect against 3.3.0, first version with 'include/xrootd/private'
++ if [ $decver -eq 300030000 ] ; then
++ echo "Cannot build against version $xrdver (missing headers)"
++ enable_xrootd="no"
++ else
++ echo "$xrdver"
++ fi
+ fi
+
++xrdincprivate="no"
+ if test "x$enable_xrootd" = "xyes" ; then
+
+ extraxrdflags="-DROOTXRDVERS=$decver"
+@@ -4514,14 +4521,27 @@
+ done
+
+ #
++ # Check also if 'include/private' exists: we need to signal this to the build modules
++ # for correct location of some headers available form the dlevel packages for version >= 3.3.x
++ if test "x$enable_xrootd" = "xyes"; then
++ if test -d "$xrdincdir/private"; then
++ xrdincprivate="yes"
++ fi
++ fi
++
++ #
+ # Check if bonjour is available for code potentially using it ...
if test "x$enable_xrootd" = "xyes"; then
xrdlibdir="$tmpxrdlibdir"
if test "x$enable_bonjour" = "xyes"; then
@@ -20,3 +179,631 @@ diff -ur root-5.32.01.orig/configure root-5.32.01/configure
fi
fi
fi
+@@ -6667,6 +6687,7 @@
+ -e "s|@xpmlibdir@|$xpmlibdir|" \
+ -e "s|@xrdlibdir@|$xrdlibdir|" \
+ -e "s|@xrdincdir@|$xrdincdir|" \
++ -e "s|@xrdincprivate@|$xrdincprivate|" \
+ -e "s|@xrdversion@|$decver|" \
+ -e "s|@hasxrdutils@|$hasxrdutils|" \
+ -e "s|@cfitsioincdir@|$cfitsioincdir|" \
+diff -Nur root-5.32.04.orig/net/netx/CMakeLists.txt root-5.32.04/net/netx/CMakeLists.txt
+--- root-5.32.04.orig/net/netx/CMakeLists.txt 2012-07-13 15:54:54.000000000 +0200
++++ root-5.32.04/net/netx/CMakeLists.txt 2013-03-08 07:23:10.901952610 +0100
+@@ -6,7 +6,7 @@
+ ROOT_USE_PACKAGE(net/net)
+ ROOT_USE_PACKAGE(proof/proofd)
+
+-include_directories(${XROOTD_INCLUDE_DIR})
++include_directories(${XROOTD_INCLUDE_DIR} ${XROOTD_PRIVATE_INCLUDE_DIR})
+ add_definitions(${XROOTD_CFLAGS})
+ #---------------------------------------------------------------------------
+
+diff -Nur root-5.32.04.orig/net/netx/Module.mk root-5.32.04/net/netx/Module.mk
+--- root-5.32.04.orig/net/netx/Module.mk 2012-07-13 15:54:54.000000000 +0200
++++ root-5.32.04/net/netx/Module.mk 2013-03-08 07:23:10.900952603 +0100
+@@ -55,6 +55,9 @@
+ ifneq ($(EXTRA_XRDFLAGS),)
+ NETXINCEXTRA += -I$(ROOT_SRCDIR)/proof/proofd/inc
+ endif
++ifeq ($(XRDINCPRIVATE),yes)
++NETXINCEXTRA += -I$(XRDINCDIR)/private
++endif
+
+ # Xrootd client libs
+ ifeq ($(PLATFORM),win32)
+diff -Nur root-5.32.04.orig/net/netx/src/TXNetFile.cxx root-5.32.04/net/netx/src/TXNetFile.cxx
+--- root-5.32.04.orig/net/netx/src/TXNetFile.cxx 2012-07-13 15:54:54.000000000 +0200
++++ root-5.32.04/net/netx/src/TXNetFile.cxx 2013-03-08 07:27:48.977933665 +0100
+@@ -56,6 +56,7 @@
+ #include "TVirtualPerfStats.h"
+
+ #include <XrdClient/XrdClient.hh>
++#include <XrdClient/XrdClientConn.hh>
+ #include <XrdClient/XrdClientConst.hh>
+ #include <XrdClient/XrdClientEnv.hh>
+ #include <XProtocol/XProtocol.hh>
+diff -Nur root-5.32.04.orig/proof/proofd/CMakeLists.txt root-5.32.04/proof/proofd/CMakeLists.txt
+--- root-5.32.04.orig/proof/proofd/CMakeLists.txt 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/CMakeLists.txt 2013-03-08 07:23:10.899952597 +0100
+@@ -7,7 +7,7 @@
+ ROOT_USE_PACKAGE(net/rpdutils)
+ ROOT_USE_PACKAGE(net/auth)
+
+-include_directories(${XROOTD_INCLUDE_DIR})
++include_directories(${XROOTD_INCLUDE_DIR} ${XROOTD_PRIVATE_INCLUDE_DIR})
+ add_definitions(${XROOTD_CFLAGS})
+
+ if(WIN32)
+diff -Nur root-5.32.04.orig/proof/proofd/inc/XpdObject.h root-5.32.04/proof/proofd/inc/XpdObject.h
+--- root-5.32.04.orig/proof/proofd/inc/XpdObject.h 1970-01-01 01:00:00.000000000 +0100
++++ root-5.32.04/proof/proofd/inc/XpdObject.h 2013-03-08 07:23:10.898952590 +0100
+@@ -0,0 +1,100 @@
++// @(#)root/proofd:$Id$
++// Author: Gerardo Ganis Feb 2013
++
++/*************************************************************************
++ * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
++ * All rights reserved. *
++ * *
++ * For the licensing terms see $ROOTSYS/LICENSE. *
++ * For the list of contributors see $ROOTSYS/README/CREDITS. *
++ *************************************************************************/
++
++//////////////////////////////////////////////////////////////////////////
++// //
++// XpdObject //
++// //
++// Authors: G. Ganis, CERN, 2013 //
++// //
++// Auxilliary class to stack protocols. //
++// Adapted version of XrdObject. //
++// //
++//////////////////////////////////////////////////////////////////////////
++
++#ifndef ROOT_XpdObject
++#define ROOT_XpdObject
++
++#include <string.h>
++#include <strings.h>
++#include <time.h>
++#include <sys/types.h>
++#include "Xrd/XrdJob.hh"
++#include "XrdOuc/XrdOucTrace.hh"
++#include "XrdSys/XrdSysPthread.hh"
++
++class XpdObjectQ;
++class XrdProofdProtocol;
++class XrdScheduler;
++
++class XpdObject {
++public:
++ friend class XpdObjectQ;
++
++ // Item() supplies the item value associated with itself (used with Next()).
++ XrdProofdProtocol *objectItem() { return fItem; }
++
++ // Next() supplies the next list node.
++ XpdObject *nextObject() { return fNext; }
++
++ // Set the item pointer
++ void setItem(XrdProofdProtocol *ival) { fItem = ival; }
++
++ XpdObject(XrdProofdProtocol *ival=0) { fNext = 0; fItem = ival; fQTime = 0; }
++ ~XpdObject() {}
++
++private:
++ XpdObject *fNext;
++ XrdProofdProtocol *fItem;
++ time_t fQTime; // Only used for time-managed objects
++};
++
++/******************************************************************************/
++/* x r d _ O b j e c t Q */
++/******************************************************************************/
++
++// Note to properly cleanup this type of queue you must call Set() at least
++// once to cause the time element to be sceduled.
++
++class XrdOucTrace;
++
++class XpdObjectQ : public XrdJob {
++public:
++
++ XrdProofdProtocol *Pop();
++ void Push(XpdObject *Node);
++ void Set(int inQMax, time_t agemax=1800);
++ void Set(XrdScheduler *sp, XrdOucTrace *tp, int traceChk = 0)
++ {fSched = sp; fTrace = tp; fTraceON = traceChk;}
++ void DoIt();
++
++ XpdObjectQ(const char *id, const char *desc) : XrdJob(desc)
++ {fCurage = fCount = 0; fMaxage = 0; fTraceID = id;
++ fMaxinQ = 32; fMininQ = 16; fFirst = 0; }
++
++ ~XpdObjectQ() {}
++
++private:
++
++ XrdSysMutex fQMutex;
++ XpdObject *fFirst;
++ int fCount;
++ int fCurage;
++ int fMininQ;
++ int fMaxinQ;
++ time_t fMaxage;
++ XrdOucTrace *fTrace;
++ XrdScheduler *fSched;
++ int fTraceON;
++ const char *fTraceID;
++};
++
++#endif
+diff -Nur root-5.32.04.orig/proof/proofd/inc/XrdProofdProofServMgr.h root-5.32.04/proof/proofd/inc/XrdProofdProofServMgr.h
+--- root-5.32.04.orig/proof/proofd/inc/XrdProofdProofServMgr.h 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/inc/XrdProofdProofServMgr.h 2013-03-08 07:21:22.170070457 +0100
+@@ -41,6 +41,9 @@
+ #define PSMMAXCNTS 3
+ #define PSMCNTOK(t) (t >= 0 && t < PSMMAXCNTS)
+
++// Security handle
++typedef int (*XrdSecCredsSaver_t)(XrdSecCredentials *, const char *fn, const XrdProofUI &ui);
++
+ // Aux structure for session set env inputs
+ typedef struct {
+ XrdProofdProofServ *fPS;
+@@ -158,6 +161,8 @@
+ std::list<XrdProofdProofServ *> fActiveSessions; // List of active sessions (non-idle)
+ std::list<XpdClientSessions *> *fRecoverClients; // List of client potentially recovering
+
++ XrdSecCredsSaver_t fCredsSaver; // If defined, function to be used to save the credentials
++
+ int DoDirectiveProofServMgr(char *, XrdOucStream *, bool);
+ int DoDirectivePutEnv(char *, XrdOucStream *, bool);
+ int DoDirectivePutRc(char *, XrdOucStream *, bool);
+@@ -263,8 +268,6 @@
+
+ int SetProofServEnv(XrdProofdProtocol *p, void *in);
+ int SetProofServEnvOld(XrdProofdProtocol *p, void *in);
+-
+- int SaveAFSkey(XrdSecCredentials *c, const char *fn, XrdProofUI ui);
+ int SetUserEnvironment(XrdProofdProtocol *p);
+
+ static int SetProofServEnv(XrdProofdManager *m, XrdROOT *r);
+diff -Nur root-5.32.04.orig/proof/proofd/inc/XrdProofdProtocol.h root-5.32.04/proof/proofd/inc/XrdProofdProtocol.h
+--- root-5.32.04.orig/proof/proofd/inc/XrdProofdProtocol.h 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/inc/XrdProofdProtocol.h 2013-03-08 07:23:10.898952590 +0100
+@@ -37,10 +37,10 @@
+ #include "XpdSysPthread.h"
+
+ #include "Xrd/XrdLink.hh"
+-#include "Xrd/XrdObject.hh"
+ #include "Xrd/XrdProtocol.hh"
+ #include "XrdOuc/XrdOucString.hh"
+ #include "XrdSec/XrdSecInterface.hh"
++#include "XpdObject.h"
+ #include "XProofProtocol.h"
+
+ class XrdBuffer;
+@@ -130,7 +130,7 @@
+ //
+ // Protocol variables
+
+- XrdObject<XrdProofdProtocol> fProtLink;
++ XpdObject fProtLink;
+ XrdBuffer *fArgp;
+
+ XrdLink *fLink;
+@@ -175,7 +175,7 @@
+ //
+ static bool fgConfigDone;
+ static int fgCount;
+- static XrdObjectQ<XrdProofdProtocol> fgProtStack;
++ static XpdObjectQ fgProtStack;
+ static XrdBuffManager *fgBPool; // Buffer manager
+ static int fgMaxBuffsz; // Maximum buffer size we can have
+ static XrdSysRecMutex fgBMutex; // Buffer management mutex
+diff -Nur root-5.32.04.orig/proof/proofd/Module.mk root-5.32.04/proof/proofd/Module.mk
+--- root-5.32.04.orig/proof/proofd/Module.mk 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/Module.mk 2013-03-08 07:23:10.899952597 +0100
+@@ -127,6 +127,10 @@
+ ifeq ($(HASXRD),yes)
+ XPDINCEXTRA := $(XROOTDDIRI:%=-I%)
+ XPDINCEXTRA += $(PROOFDDIRI:%=-I%)
++ifeq ($(XRDINCPRIVATE),yes)
++XPDINCEXTRA += -I$(XRDINCDIR)/private
++endif
++
+
+ ifeq ($(HASXRDUTILS),no)
+
+diff -Nur root-5.32.04.orig/proof/proofd/src/XpdObject.cxx root-5.32.04/proof/proofd/src/XpdObject.cxx
+--- root-5.32.04.orig/proof/proofd/src/XpdObject.cxx 1970-01-01 01:00:00.000000000 +0100
++++ root-5.32.04/proof/proofd/src/XpdObject.cxx 2013-03-08 07:23:10.896952577 +0100
+@@ -0,0 +1,125 @@
++// @(#)root/proofd:$Id$
++// Author: Gerardo Ganis Feb 2013
++
++/*************************************************************************
++ * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
++ * All rights reserved. *
++ * *
++ * For the licensing terms see $ROOTSYS/LICENSE. *
++ * For the list of contributors see $ROOTSYS/README/CREDITS. *
++ *************************************************************************/
++
++//////////////////////////////////////////////////////////////////////////
++// //
++// XpdObject //
++// //
++// Authors: G. Ganis, CERN, 2013 //
++// //
++// Auxilliary class to stack protocols. //
++// //
++//////////////////////////////////////////////////////////////////////////
++
++#include "XpdObject.h"
++#include "XrdProofdAux.h"
++#include "XrdProofdProtocol.h"
++#include "Xrd/XrdScheduler.hh"
++#include "XrdOuc/XrdOucTrace.hh"
++
++//_______________________________________________________________________
++XrdProofdProtocol *XpdObjectQ::Pop()
++{
++ // Pop up a protocol object
++
++ XpdObject *node;
++ fQMutex.Lock();
++ if ((node = fFirst)) {
++ fFirst = fFirst->fNext;
++ fCount--;
++ }
++ fQMutex.UnLock();
++ if (node) return node->fItem;
++ return (XrdProofdProtocol *)0;
++}
++
++//_______________________________________________________________________
++void XpdObjectQ::Push(XpdObject *node)
++{
++ // Push back a protocol
++
++ node->fQTime = fCurage;
++ fQMutex.Lock();
++ if (fCount >= fMaxinQ) {
++ delete node->fItem;
++ } else {
++ node->fNext = fFirst;
++ fFirst = node;
++ fCount++;
++ }
++ fQMutex.UnLock();
++}
++
++//_______________________________________________________________________
++void XpdObjectQ::Set(int inQMax, time_t agemax)
++{
++ // Lock the data area and set the values
++
++ fQMutex.Lock();
++ fMaxinQ = inQMax; fMaxage = agemax;
++ if (!(fMininQ = inQMax/2)) fMininQ = 1;
++ fQMutex.UnLock();
++
++ // Schedule ourselves using the new values
++ if (agemax > 0)
++ fSched->Schedule((XrdJob *)this, agemax + time(0));
++}
++
++//_______________________________________________________________________
++void XpdObjectQ::DoIt()
++{
++ // Process method
++
++ XpdObject *pp, *p;
++ int oldcnt, agemax;
++
++ // Lock the anchor and see if we met the threshold for deletion
++ //
++ fQMutex.Lock();
++ agemax = fMaxage;
++ if ((oldcnt = fCount) > fMininQ) {
++
++ // Prepare to scan down the queue.
++ if ((pp = fFirst)) {
++ p = pp->fNext;
++ } else { p = 0; }
++
++ // Find the first object that's been idle for too long
++ while(p && (p->fQTime >= fCurage)) { pp = p; p = p->fNext;}
++
++ // Now delete half of the idle objects. The object queue element must be
++ // part of the actual object being deleted for this to properly work.
++ if (pp) {
++ while (p) {
++ pp->fNext = p->fNext;
++ delete p->fItem;
++ fCount--;
++ p = ((pp = pp->fNext) ? pp->fNext : 0);
++ }
++ }
++ }
++
++ // Increase the age and unlock the queue
++ fCurage++;
++ fQMutex.UnLock();
++
++ // Trace as needed
++ if (fTraceON && fTrace->Tracing(fTraceON))
++ {fTrace->Beg(fTraceID);
++ cerr <<Comment <<" trim done; " <<fCount <<" of " <<oldcnt <<" kept";
++ fTrace->End();
++ }
++
++ // Reschedule ourselves if we must do so
++ if (agemax > 0)
++ fSched->Schedule((XrdJob *)this, agemax+time(0));
++}
++
+diff -Nur root-5.32.04.orig/proof/proofd/src/XrdProofConn.cxx root-5.32.04/proof/proofd/src/XrdProofConn.cxx
+--- root-5.32.04.orig/proof/proofd/src/XrdProofConn.cxx 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/src/XrdProofConn.cxx 2013-03-08 07:23:10.896952577 +0100
+@@ -31,7 +31,6 @@
+
+ #include "XrdClient/XrdClientConnMgr.hh"
+ #include "XrdClient/XrdClientConst.hh"
+-#include "XrdClient/XrdClientDebug.hh"
+ #include "XrdClient/XrdClientEnv.hh"
+ #include "XrdClient/XrdClientLogConnection.hh"
+ #include "XrdClient/XrdClientPhyConnection.hh"
+@@ -40,6 +39,7 @@
+ #include "XrdOuc/XrdOucErrInfo.hh"
+ #include "XrdOuc/XrdOucString.hh"
+ #include "XrdSec/XrdSecInterface.hh"
++#include "XrdSys/XrdSysLogger.hh"
+ #include "XrdSys/XrdSysPlatform.hh"
+
+ // Dynamic libs
+diff -Nur root-5.32.04.orig/proof/proofd/src/XrdProofdProofServMgr.cxx root-5.32.04/proof/proofd/src/XrdProofdProofServMgr.cxx
+--- root-5.32.04.orig/proof/proofd/src/XrdProofdProofServMgr.cxx 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/src/XrdProofdProofServMgr.cxx 2013-03-08 07:21:22.173070483 +0100
+@@ -32,8 +32,7 @@
+ #include "XrdOuc/XrdOucRash.hh"
+ #include "XrdOuc/XrdOucStream.hh"
+ #include "XrdSys/XrdSysPriv.hh"
+-#include "XrdSut/XrdSutAux.hh"
+-
++#include "XrdSys/XrdSysPlugin.hh"
+ #include "XrdProofdClient.h"
+ #include "XrdProofdClientMgr.h"
+ #include "XrdProofdManager.h"
+@@ -286,6 +285,8 @@
+ fCurrentSessions = 0;
+
+ fSeqSessionN = 0;
++
++ fCredsSaver = 0;
+
+ // Defaults can be changed via 'proofservmgr'
+ fCheckFrequency = 30;
+@@ -3067,26 +3068,20 @@
+ putenv(ev);
+ TRACE(DBG, "XrdSecCREDS set");
+
+- // If 'pwd', save AFS key, if any
+- if (!strncmp(p->AuthProt()->Entity.prot, "pwd", 3)) {
++ if (fCredsSaver) {
+ XrdOucString credsdir = udir;
+ credsdir += "/.creds";
+ // Make sure the directory exists
+ if (!XrdProofdAux::AssertDir(credsdir.c_str(), p->Client()->UI(), fMgr->ChangeOwn())) {
+- if (SaveAFSkey(creds, credsdir.c_str(), p->Client()->UI()) == 0) {
+- ev = new char[strlen("ROOTPROOFAFSCREDS=")+credsdir.length()+strlen("/.afs")+2];
+- sprintf(ev, "ROOTPROOFAFSCREDS=%s/.afs", credsdir.c_str());
+- putenv(ev);
+- fprintf(fenv, "ROOTPROOFAFSCREDS has been set\n");
+- TRACE(DBG, ev);
+- } else {
+- TRACE(DBG, "problems in saving AFS key");
++ if ((*fCredsSaver)(creds, credsdir.c_str(), p->Client()->UI()) != 0) {
++ TRACE(DBG, "problems in saving authentication creds under "<<credsdir);
+ }
+ } else {
+ TRACE(XERR, "unable to create creds dir: "<<credsdir);
+ return -1;
+ }
+ }
++ fclose(fenv);
+ }
+ }
+
+@@ -3532,26 +3527,20 @@
+ PutEnv(ev, in->fOld);
+ TRACE(DBG, "XrdSecCREDS set");
+
+- // If 'pwd', save AFS key, if any
+- if (!strncmp(p->AuthProt()->Entity.prot, "pwd", 3)) {
++ if (fCredsSaver) {
+ XrdOucString credsdir = p->Client()->Sandbox()->Dir();
+ credsdir += "/.creds";
+ // Make sure the directory exists
+ if (!XrdProofdAux::AssertDir(credsdir.c_str(), p->Client()->UI(), fMgr->ChangeOwn())) {
+- if (SaveAFSkey(creds, credsdir.c_str(), p->Client()->UI()) == 0) {
+- ev = new char[strlen("ROOTPROOFAFSCREDS=")+credsdir.length()+strlen("/.afs")+2];
+- sprintf(ev, "ROOTPROOFAFSCREDS=%s/.afs", credsdir.c_str());
+- fprintf(fenv, "ROOTPROOFAFSCREDS has been set\n");
+- TRACE(DBG, ev);
+- PutEnv(ev, in->fOld);
+- } else {
+- TRACE(DBG, "problems in saving AFS key");
++ if ((*fCredsSaver)(creds, credsdir.c_str(), p->Client()->UI()) != 0) {
++ TRACE(DBG, "problems in saving authentication creds under "<<credsdir);
+ }
+ } else {
+ TRACE(XERR, "unable to create creds dir: "<<credsdir);
+ return -1;
+ }
+ }
++ fclose(fenv);
+ }
+ }
+
+@@ -4514,84 +4503,6 @@
+ return 0;
+ }
+
+-//______________________________________________________________________________
+-int XrdProofdProofServMgr::SaveAFSkey(XrdSecCredentials *c,
+- const char *dir, XrdProofUI ui)
+-{
+- // Save the AFS key, if any, for usage in proofserv in file 'dir'/.afs .
+- // Return 0 on success, -1 on error.
+- XPDLOC(SMGR, "ProofServMgr::SaveAFSkey")
+-
+- // Check file name
+- if (!dir || strlen(dir) <= 0) {
+- TRACE(XERR, "dir name undefined");
+- return -1;
+- }
+-
+- // Check credentials
+- if (!c) {
+- TRACE(XERR, "credentials undefined");
+- return -1;
+- }
+- TRACE(REQ, "dir: "<<dir);
+-
+- // Decode credentials
+- int lout = 0;
+- char *out = new char[c->size];
+- if (XrdSutFromHex(c->buffer, out, lout) != 0) {
+- TRACE(XERR, "problems unparsing hex string");
+- delete [] out;
+- return -1;
+- }
+-
+- // Locate the key
+- char *key = out + 5;
+- if (strncmp(key, "afs:", 4)) {
+- TRACE(DBG, "string does not contain an AFS key");
+- delete [] out;
+- return 0;
+- }
+- key += 4;
+-
+- // Save to file, if not existing already
+- XrdOucString fn = dir;
+- fn += "/.afs";
+-
+- int rc = 0;
+- struct stat st;
+- if (stat(fn.c_str(), &st) != 0 && errno == ENOENT) {
+-
+- // Open the file, truncating if already existing
+- int fd = open(fn.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0600);
+- if (fd <= 0) {
+- TRACE(XERR, "problems creating file - errno: " << errno);
+- delete [] out;
+- return -1;
+- }
+- // Write out the key
+- int lkey = lout - 9;
+- if (XrdProofdAux::Write(fd, key, lkey) != lkey) {
+- TRACE(XERR, "problems writing to file - errno: " << errno);
+- rc = -1;
+- }
+-
+- // Cleanup
+- delete [] out;
+- close(fd);
+- } else {
+- TRACE(XERR, "cannot stat existing file "<<fn<<" - errno: " << errno);
+- delete [] out;
+- return -1;
+- }
+-
+- // Make sure the file is owned by the user
+- if (XrdProofdAux::ChangeOwn(fn.c_str(), ui) != 0) {
+- TRACE(XERR, "can't change ownership of "<<fn);
+- }
+-
+- return rc;
+-}
+-
+ //__________________________________________________________________________
+ XrdProofdProofServ *XrdProofdProofServMgr::GetActiveSession(int pid)
+ {
+diff -Nur root-5.32.04.orig/proof/proofd/src/XrdProofdProtocol.cxx root-5.32.04/proof/proofd/src/XrdProofdProtocol.cxx
+--- root-5.32.04.orig/proof/proofd/src/XrdProofdProtocol.cxx 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofd/src/XrdProofdProtocol.cxx 2013-03-08 07:23:10.897952583 +0100
+@@ -29,6 +29,7 @@
+
+ #include "XrdVersion.hh"
+ #include "Xrd/XrdBuffer.hh"
++#include "Xrd/XrdScheduler.hh"
+
+ #include "XrdProofdClient.h"
+ #include "XrdProofdClientMgr.h"
+@@ -54,8 +55,7 @@
+ //
+ // Static area: general protocol managing section
+ int XrdProofdProtocol::fgCount = 0;
+-XrdObjectQ<XrdProofdProtocol>
+- XrdProofdProtocol::fgProtStack("ProtStack",
++XpdObjectQ XrdProofdProtocol::fgProtStack("ProtStack",
+ "xproofd protocol anchor");
+ XrdSysRecMutex XrdProofdProtocol::fgBMutex; // Buffer management mutex
+ XrdBuffManager *XrdProofdProtocol::fgBPool = 0;
+@@ -542,8 +542,12 @@
+ // Schedule protocol object cleanup; the maximum number of objects
+ // and the max age are taken from XrdXrootdProtocol: this may need
+ // some optimization in the future.
++#if 1
+ fgProtStack.Set(pi->Sched, XrdProofdTrace, TRACE_MEM);
+ fgProtStack.Set((pi->ConnMax/3 ? pi->ConnMax/3 : 30), 60*60);
++#else
++ fgProtStack.Set(pi->Sched, 3600);
++#endif
+
+ // Default tracing options: always trace logins and errors for all
+ // domains; if the '-d' option was specified on the command line then
+@@ -790,6 +794,13 @@
+
+ // Push ourselves on the stack
+ fgProtStack.Push(&fProtLink);
++#if 0
++ if(fgProtStack.Push(&fProtLink) != 0) {
++ XrdProofdProtocol *xp = fProtLink.objectItem();
++ fProtLink.setItem(0);
++ delete xp;
++ }
++#endif
+ }
+
+ //______________________________________________________________________________
+diff -Nur root-5.32.04.orig/proof/proofx/CMakeLists.txt root-5.32.04/proof/proofx/CMakeLists.txt
+--- root-5.32.04.orig/proof/proofx/CMakeLists.txt 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofx/CMakeLists.txt 2013-03-08 07:23:10.900952603 +0100
+@@ -16,7 +16,7 @@
+ file(GLOB sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cxx)
+ endif()
+
+-include_directories(${XROOTD_INCLUDE_DIR})
++include_directories(${XROOTD_INCLUDE_DIR} ${XROOTD_PRIVATE_INCLUDE_DIR})
+ link_directories(${XROOTD_LIBRARY_DIR})
+ add_definitions(${XROOTD_CFLAGS})
+
+diff -Nur root-5.32.04.orig/proof/proofx/Module.mk root-5.32.04/proof/proofx/Module.mk
+--- root-5.32.04.orig/proof/proofx/Module.mk 2012-07-13 15:54:19.000000000 +0200
++++ root-5.32.04/proof/proofx/Module.mk 2013-03-08 07:23:10.899952597 +0100
+@@ -63,6 +63,9 @@
+ PROOFXINCEXTRA := $(PROOFXDIRI:%=-I%)
+ PROOFXINCEXTRA += $(XROOTDDIRI:%=-I%)
+ PROOFXINCEXTRA += $(PROOFDDIRI:%=-I%)
++ifeq ($(XRDINCPRIVATE),yes)
++PROOFXINCEXTRA += -I$(XRDINCDIR)/private
++endif
+
+ # Xrootd client libs
+ ifeq ($(PLATFORM),win32)
diff --git a/root.spec b/root.spec
index 15f7a21..bc39033 100644
--- a/root.spec
+++ b/root.spec
@@ -28,7 +28,7 @@
Name: root
Version: 5.32.04
%global libversion %(cut -d. -f 1-2 <<< %{version})
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Numerical data analysis framework
Group: Applications/Engineering
@@ -55,13 +55,19 @@ Patch0: %{name}-ftgl.patch
Patch1: %{name}-fontconfig.patch
# Use system unuran:
Patch2: %{name}-unuran.patch
-# Fixes for xrootd bonjour
+# Fixes for new xrootd (backported from trunk):
Patch3: %{name}-xrootd.patch
-# Fix hardcoded include path
+# Fix hardcoded include path:
# https://savannah.cern.ch/bugs/index.php?91463
Patch4: %{name}-meta.patch
-# Backport fixes for using aclic with versioned libraries
+# Backport fixes for using aclic with versioned libraries:
Patch5: %{name}-aclic-versioned-libs.patch
+# Fixes for latest glibc headers:
+Patch6: %{name}-glibc.patch
+# Fixes for gfal (mostly backported from trunk):
+Patch7: %{name}-gfal-bits.patch
+# Remove unnecessary Qt linkage (backported from trunk):
+Patch8: %{name}-qt.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# The build segfaults on ppc64 during an invocation of cint:
# https://savannah.cern.ch/bugs/index.php?70542
@@ -108,9 +114,6 @@ BuildRequires: python26-devel
%endif
%if %{?fedora}%{!?fedora:0} >= 9 || %{?rhel}%{!?rhel:0} >= 6
BuildRequires: qt4-devel
-%if %{?fedora}%{!?fedora:0} >= 14
-BuildRequires: qt4-webkit-devel
-%endif
%endif
BuildRequires: ruby
BuildRequires: ruby-devel
@@ -122,7 +125,8 @@ BuildRequires: libtool-ltdl-devel
BuildRequires: desktop-file-utils
BuildRequires: dcap-devel
BuildRequires: dpm-devel
-BuildRequires: xrootd-devel
+BuildRequires: xrootd-client-devel
+BuildRequires: xrootd-private-devel
BuildRequires: cfitsio-devel
BuildRequires: gfal-devel
BuildRequires: srm-ifce-devel
@@ -1048,6 +1052,9 @@ fi
%patch3 -p1
%patch4 -p1
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
find . '(' -name '*.cxx' -o -name '*.cpp' -o -name '*.C' -o -name '*.c' -o \
-name '*.h' -o -name '*.hh' -o -name '*.hi' -o -name '*.py' -o \
@@ -1122,7 +1129,8 @@ sed s/c1/c1simp/g -i tutorials/hsimple.C
%if "%{?rhel}" == "5"
# Build PyROOT for python 2.6
cp -pr bindings/pyroot bindings/pyroot26
-sed 's/python /python26 /' -i bindings/pyroot26/Module.mk
+sed -e 's/= pyroot/= pyroot26/' -e 's/python /python26 /' \
+ -i bindings/pyroot26/Module.mk
%endif
%build
@@ -1155,10 +1163,10 @@ unset QTINC
--enable-fftw3 \
--enable-fitsio \
--enable-gdml \
+ --enable-genvector \
--enable-gfal \
--with-gfal-incdir=%{_includedir} \
--with-gfal-libdir=%{_libdir} \
- --enable-genvector \
--enable-globus \
--enable-gsl-shared \
--enable-gviz \
@@ -2315,6 +2323,10 @@ fi
%{emacs_lispdir}/root/*.el
%changelog
+* Fri Mar 08 2013 Mattias Ellert <mattias.ellert at fysast.uu.se> - 5.32.04-2
+- Rebuild for xrootd 3.3
+- Backport gfal fixes
+
* Wed Jul 18 2012 Mattias Ellert <mattias.ellert at fysast.uu.se> - 5.32.04-1
- Update to 5.32.04
More information about the scm-commits
mailing list