Compare commits

..

3 commits

Author SHA1 Message Date
Mattias Ellert
875cd941a6 Rebuild for xrootd 3.3
- Backport gfal fixes
2013-03-08 10:47:22 +01:00
Mattias Ellert
df2ea0dd20 Update to 5.32.04 2012-07-18 13:58:11 +02:00
Mattias Ellert
43094d8676 Backport fixes for using aclic with versioned libraries
- New sub-package: root-io-gfal
2012-06-29 06:54:06 +02:00
38 changed files with 3082 additions and 5675 deletions

2
.gitignore vendored
View file

@ -1,3 +1 @@
/*.tar.gz
/*.tar.xz
/usa.root

View file

@ -1,37 +0,0 @@
While all is fine in Fedora and all packages needed to run the JupyROOT
notebook are available there, this is not true for EPEL.
Hopefully the ipython/jupyter stack will at some point be available in
EPEL too, but at this point in time it is not.
However, it is possible to work around this issue using a python
virtual environment.
First, install the required root packages (as root):
$ yum install root root-notebook python3-jupyroot
Then return to your non-root user and create a python3 virtual
environment:
$ python3 -m venv ~/jupyter-env
Activate the environment:
$ . ~/jupyter-env/bin/activate
Then install the missing packages in the virtual environment using pip:
$ pip install notebook metakernel
Then start the root notebook:
$ PYTHONPATH=~/jupyter-env/lib/python3.6/site-packages root --notebook
And that is it.
If you want to start it again and you haven't removed the virtual
environment, only two of the steps are necessary:
$ . ~/jupyter-env/bin/activate
$ PYTHONPATH=~/jupyter-env/lib/python3.6/site-packages root --notebook

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,53 +0,0 @@
From ac806becc2aa69898d1c5ca3b195d8fa3003238a Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 16:21:55 +0100
Subject: [PATCH] Run tests on 32 bit
---
test/stressGeometry.cxx | 8 --------
tree/tree/test/CMakeLists.txt | 10 +++-------
2 files changed, 3 insertions(+), 15 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 253bc8574e9..48da18b06c3 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
if (opt.Contains(exps[i])) iexp[i] = 1;
else iexp[i] = 0;
}
-#if defined(linux) && !defined(__x86_64__)
- // 32bit linux: we have an error with ATLAS, see https://sft.its.cern.ch/jira/browse/ROOT-9893
- // Disable unless explicitly enabled.
- if (all) {
- printf("DISABLED ATLAS TEST due to known failure on Linux 32 bit!\n");
- iexp[32] = 0;
- }
-#endif
TFile::SetCacheFileDir(".");
TString fname;
for (i=0; i<NG; i++) {
diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt
index 4e903b06daa..2ad9bb52171 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
@@ -13,13 +13,9 @@ target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
ROOT_SET_OUTPUT_DIRECTORIES(SillyStruct)
ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
-#FIXME: tests are having timeout on 32bit CERN VM (in docker container everything is fine),
-# to be reverted after investigation.
-if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
- ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
- ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
-endif()
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
+ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree)
ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore)
ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree)
--
2.54.0

View file

@ -1,46 +0,0 @@
From 9d2d6c1a104302e2f84659324b4e8b317cb9ab95 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 26 Jun 2026 06:51:28 +0200
Subject: [PATCH] Adjust stressGraphics reference
---
test/stressGraphics_zlibng.ref | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/test/stressGraphics_zlibng.ref b/test/stressGraphics_zlibng.ref
index b7ca1568c66..2fda1276315 100644
--- a/test/stressGraphics_zlibng.ref
+++ b/test/stressGraphics_zlibng.ref
@@ -7,7 +7,7 @@
patterns 23688 1500 19305 200 143676 123000 47075 11000 23076 1500
crown 2785 50 14546 100 19178 9000 7605 4000 2829 50
piechart 67345 200 74560 3000 32180 15000 29168 15000 66962 200
- ttext1 1025 150 12866 150 32266 9900 29901 5000 1072 200
+ ttext1 1025 150 12866 200 32266 9900 29901 5000 1072 200
ttext2 432 50 12743 50 9517 150 5306 700 473 50
tlatex1 5140 50 14050 50 16377 1300 12462 500 5170 70
tlatex2 5488 80 13507 100 18439 700 12061 500 5502 80
@@ -18,9 +18,9 @@
itbf 5600 400 13302 300 16868 400 15083 800 5638 400
tmathtext 14193187 4000000 12984 100 27112 9500 25080 3000 14193352 4000000
transparency 2386 50 14700 100 16514 7000 24701 12000 2554 100
- transpad 16185 5000 17131 350 22801 9500 14232 1000 11271 5000
+ transpad 16185 5000 17131 350 22801 9500 14232 1500 11271 5000
statfitparam 27683 400 23370 300 44898 11000 30209 5000 37580 400
- tgaxis1 20424 400 21388 300 27719 11000 16044 600 20704 400
+ tgaxis1 20424 400 21388 300 27719 11000 16044 700 20704 400
tgaxis2 15874 100 19140 300 27682 10300 15197 550 15905 100
tgaxis3 22678 300 42796 200 44177 17000 20788 11000 22866 300
tgaxis4 3817 600 14405 250 19907 6300 10674 900 4523 600
@@ -71,7 +71,7 @@
annotation3d 547845 3000 193427 3000 32383 12000 58073 20000 547493 3000
tgraph2d3 16675 3000 29541 500 40536 11300 33519 3900 16452 4000
ntuple1 256544 5000 382044 7000 54446 30400 45002 6500 261593 7000
- quarks 4759 180 14134 100 32913 600 25421 1000 4790 180
+ quarks 4759 180 14134 200 32913 600 25421 1000 4790 180
timage 1442666 150000 12900 100 26100 100 374206 15000 1102279 250000
zoomtf1 6130 500 16528 300 49750 14000 29288 4000 5429 500
zoomfit 6200 700 15706 200 31219 11000 18280 3200 6113 800
--
2.54.0

View file

@ -1,47 +0,0 @@
From 9fc24a9cc827028d78c983eea5d18ac6a705e806 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 26 Jun 2026 17:20:27 +0200
Subject: [PATCH] Revert "[cppyy] Mark `addressof` test as `xfail` on
modules=OFF build with C++17"
This reverts commit 5eb0e6466ed1b2c29853ba4bfa928dd1da3e4bcd.
---
.../pyroot/cppyy/cppyy/test/test_datatypes.py | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
index e66e36529ec..71e26dd1d9b 100644
--- a/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
+++ b/bindings/pyroot/cppyy/cppyy/test/test_datatypes.py
@@ -5,18 +5,6 @@ from support import setup_make, pylong, pyunicode, IS_MAC, IS_MAC_ARM, IS_WINDOW
test_dct = "datatypes_cxx"
-def has_cpp_20():
- import cppyy
-
- return cppyy.gbl.gInterpreter.ProcessLine("__cplusplus;") >= 202002
-
-
-def is_modules_off():
- import cppyy
-
- return "runtime_cxxmodules" not in cppyy.gbl.gROOT.GetConfigFeatures()
-
-
class TestDATATYPES:
def setup_class(cls):
import cppyy
@@ -2351,8 +2339,7 @@ class TestDATATYPES:
assert str(bt(1)) == 'True'
assert str(bt(0)) == 'False'
- @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM or (not has_cpp_20() and is_modules_off()), reason="Crashes on mac-beta ARM64 and fails on Windows \
- assertion error for runtime_cxxmodules=OFF build that is explained in GitHub issue #21005")
+ @mark.xfail(strict=True, run=not IS_WINDOWS, condition=IS_MAC_ARM, reason="Crashes on mac-beta ARM64 and fails on Windows")
def test49_addressof_method(self):
"""Use of addressof for (const) methods"""
--
2.54.0

View file

@ -1,60 +0,0 @@
From 4da50ef374cd231163dff77493f9367cd62583d9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 30 Mar 2025 21:23:14 +0200
Subject: [PATCH] Revert "[test] Fetch the geometries from EOS and not from the
website"
This reverts commit a8a879ce252e45405452db38d9178c7883582a7d.
---
test/stressGeometry.cxx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 7fb6bf97e7..f8d78f4f54 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -1,6 +1,6 @@
// Program to check a TGeo geometry
// The first time you run this program, the geometry files will be taken
-// from /eos/root-eos/testfiles/ (previously from http://root.cern/files)
+// from http://root.cern/files
//
// How the program works
// If the file <geom_name>_ref.root does not exist, it is generated. The file
@@ -274,13 +274,13 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
delete gGeoManager;
gGeoManager = 0;
}
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles/%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
if (!gGeoManager) return;
if (vecgeom) TVirtualGeoConverter::Instance()->ConvertGeometry();
fname = TString::Format("files/%s_ref_%d.root", exps[i],versions[i]);
- if (gen_ref || !TFile::Open(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
+ if (gen_ref || !TFile::Open(Form("http://root.cern/files/%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
if (!gen_ref) fprintf(stderr,"File: %s does not exist, generating it\n", fname.Data());
else fprintf(stderr,"Generating reference file %s\n", fname.Data());
WriteRef(i);
@@ -320,7 +320,7 @@ void ReadRef(Int_t kexp) {
TFile *f = 0;
//use ref_[version[i]] files
if (!gen_ref)
- fname = TString::Format("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root", exps[kexp],versions[kexp]);
+ fname = TString::Format("http://root.cern/files/%s_ref_%d.root", exps[kexp],versions[kexp]);
else
fname.Format("files/%s_ref_%d.root", exps[kexp],versions[kexp]);
@@ -546,7 +546,7 @@ void InspectDiff(const char* exp="alice",Long64_t ientry=-1) {
Float_t rad = 0.;
TString fname(TString::Format("%s.root",exp));
if (gSystem->AccessPathName(fname)) {
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
} else {
TGeoManager::Import(fname);
}
--
2.49.0

View file

@ -1,48 +0,0 @@
From a5b9525ea1575706a523296bb47ac15f33935838 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 2 Jun 2025 21:22:39 +0200
Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel
---
core/clingutils/test/CMakeLists.txt | 3 +++
interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt
index a6c7aedac99..90ac0139c24 100644
--- a/core/clingutils/test/CMakeLists.txt
+++ b/core/clingutils/test/CMakeLists.txt
@@ -36,3 +36,6 @@ if(NOT builtin_clang)
endif()
ROOT_ADD_UNITTEST_DIR(Core ${CLING_LIBRARIES} $<TARGET_OBJECTS:ClingUtils>)
+
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(coreclingutilstestUnit CppInterOpTests)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
index 1d6ccd3e865..dc98cdfc29a 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
@@ -67,6 +67,9 @@ add_cppinterop_unittest(CppInterOpTests
${EXTRA_TEST_SOURCE_FILES}
)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(CppInterOpTests DynamicLibraryManagerTests)
+
if(NOT WIN32)
set_source_files_properties(VariableReflectionTest.cpp PROPERTIES COMPILE_FLAGS
"-Wno-pedantic"
@@ -113,6 +116,9 @@ endif()
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(DynamicLibraryManagerTests Cling)
+
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
--
2.54.0

View file

@ -0,0 +1,86 @@
diff -ur root-5.32.03.orig/core/unix/src/TUnixSystem.cxx root-5.32.03/core/unix/src/TUnixSystem.cxx
--- root-5.32.03.orig/core/unix/src/TUnixSystem.cxx 2012-05-09 12:59:38.000000000 +0200
+++ root-5.32.03/core/unix/src/TUnixSystem.cxx 2012-06-28 19:25:22.486639614 +0200
@@ -453,6 +453,9 @@
TString lib = _dyld_get_image_name(i++);
+ TRegexp sovers = "libCore\\.[0-9]+\\.*[0-9]*\\.so";
+ TRegexp dyvers = "libCore\\.[0-9]+\\.*[0-9]*\\.dylib";
+
#ifndef ROOTPREFIX
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
// first loaded is the app so set ROOTSYS to app bundle
@@ -467,7 +470,8 @@
}
}
#else
- if (lib.EndsWith("libCore.dylib") || lib.EndsWith("libCore.so")) {
+ if (lib.EndsWith("libCore.dylib") || lib.EndsWith("libCore.so") ||
+ lib.Index(sovers) != kNPOS || lib.Index(dyvers) != kNPOS) {
char respath[kMAXPATHLEN];
if (!realpath(lib, respath)) {
if (!gSystem->Getenv("ROOTSYS"))
@@ -489,9 +493,23 @@
// add all libs loaded before libSystem.B.dylib
if (!gotFirstSo && (lib.EndsWith(".dylib") || lib.EndsWith(".so"))) {
- if (linkedDylibs.Length())
- linkedDylibs += " ";
- linkedDylibs += lib;
+ sovers = "\\.[0-9]+\\.*[0-9]*\\.so";
+ Ssiz_t idx = lib.Index(sovers);
+ if (idx != kNPOS) {
+ lib.Remove(idx);
+ lib += ".so";
+ }
+ dyvers = "\\.[0-9]+\\.*[0-9]*\\.dylib";
+ idx = lib.Index(dyvers);
+ if (idx != kNPOS) {
+ lib.Remove(idx);
+ lib += ".dylib";
+ }
+ if (!gSystem->AccessPathName(lib, kReadPermission)) {
+ if (linkedDylibs.Length())
+ linkedDylibs += " ";
+ linkedDylibs += lib;
+ }
}
}
#endif
@@ -2849,12 +2867,15 @@
delete [] exe;
exe = longerexe;
}
+ TRegexp sovers = "\\.so\\.[0-9]+";
#else
const char *cLDD="ldd";
#if defined(R__AIX)
const char *cSOEXT=".a";
+ TRegexp sovers = "\\.a\\.[0-9]+";
#else
const char *cSOEXT=".so";
+ TRegexp sovers = "\\.so\\.[0-9]+";
#endif
#endif
FILE *p = OpenPipe(TString::Format("%s %s", cLDD, exe), "r");
@@ -2874,10 +2895,15 @@
}
if (solibName) {
TString solib = solibName->String();
- if (solib.EndsWith(cSOEXT)) {
- if (!linkedLibs.IsNull())
- linkedLibs += " ";
- linkedLibs += solib;
+ Ssiz_t idx = solib.Index(sovers);
+ if (solib.EndsWith(cSOEXT) || idx != kNPOS) {
+ if (idx != kNPOS)
+ solib.Remove(idx+3);
+ if (!AccessPathName(solib, kReadPermission)) {
+ if (!linkedLibs.IsNull())
+ linkedLibs += " ";
+ linkedLibs += solib;
+ }
}
}
delete tok;

BIN
root-banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

View file

@ -1,27 +0,0 @@
From 2920a892a5db1c24bb8af34c63aacc1438a18247 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 28 Jun 2026 16:54:54 +0200
Subject: [PATCH 1/3] [core] The old TUUID constructor can create either
version 1 or 3
Do not fail test if version 3 is returned.
---
core/base/test/UUIDTest.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/base/test/UUIDTest.cxx b/core/base/test/UUIDTest.cxx
index dea3700052b..c834223f6d0 100644
--- a/core/base/test/UUIDTest.cxx
+++ b/core/base/test/UUIDTest.cxx
@@ -14,7 +14,7 @@ TEST(TUUID, UUIDv4)
EXPECT_EQ(10000u, uuids.size());
TUUID u;
- EXPECT_EQ('1', u.AsString()[14]);
+ EXPECT_TRUE('1' == u.AsString()[14] || '3' == u.AsString()[14]);
u = TUUID::UUIDv4();
std::string str = u.AsString();
EXPECT_EQ('4', str[14]);
--
2.54.0

View file

@ -1,13 +0,0 @@
diff --git a/misc/minicern/CMakeLists.txt b/misc/minicern/CMakeLists.txt
index bae895f701..8d721f97ab 100644
--- a/misc/minicern/CMakeLists.txt
+++ b/misc/minicern/CMakeLists.txt
@@ -2,7 +2,7 @@
# CMakeLists.txt file for building ROOT misc/minicern package
############################################################################
-ROOT_LINKER_LIBRARY(minicern *.c *.f TYPE STATIC)
+ROOT_LINKER_LIBRARY(minicern *.c *.f TYPE STATIC NOINSTALL)
set_property(TARGET minicern PROPERTY POSITION_INDEPENDENT_CODE ON)
target_link_libraries(minicern ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})

File diff suppressed because it is too large Load diff

55
root-ftgl.patch Normal file
View file

@ -0,0 +1,55 @@
diff -ur root-trunk.orig/configure root-trunk/configure
--- root-trunk.orig/configure 2010-12-04 00:23:49.000000000 +0100
+++ root-trunk/configure 2010-12-04 19:40:46.810052008 +0100
@@ -2502,13 +2502,13 @@
message "Checking for libftgl"
if pkg-config --exists ftgl ; then
result "ok"
- message "Checking for ftgl version > 2.1.2"
+ message "Checking for ftgl"
ftgl_version=`pkg-config --modversion ftgl | \
tr '.' ' ' | \
awk 'BEGIN { FS = " "; } \
{ printf "%d", ($''1 * 1000 + $''2) * 1000 + $''3;}'`
# Use FTGL/ftgl.h when > 2.1.2
- if test $ftgl_version -gt 2001002 ; then
+ if test $ftgl_version -gt 0 ; then
result "ok"
ftglincdir=`pkg-config --cflags-only-I ftgl | sed 's/-I//g'`
ftgllibs=`pkg-config --libs-only-l ftgl`
diff -ur root-trunk.orig/graf3d/gl/src/TGLFontManager.cxx root-trunk/graf3d/gl/src/TGLFontManager.cxx
--- root-trunk.orig/graf3d/gl/src/TGLFontManager.cxx 2010-11-03 22:51:45.000000000 +0100
+++ root-trunk/graf3d/gl/src/TGLFontManager.cxx 2010-12-04 19:36:46.716052000 +0100
@@ -25,7 +25,13 @@
// Direct inclussion of FTGL headers is deprecated in ftgl-2.1.3 while
// ftgl-2.1.2 shipped with ROOT requires manual inclusion.
#ifndef BUILTIN_FTGL
-# include <FTGL/ftgl.h>
+# include <FTGL/FTFont.h>
+# include <FTGL/FTGLExtrdFont.h>
+# include <FTGL/FTGLOutlineFont.h>
+# include <FTGL/FTGLPolygonFont.h>
+# include <FTGL/FTGLTextureFont.h>
+# include <FTGL/FTGLPixmapFont.h>
+# include <FTGL/FTGLBitmapFont.h>
#else
# include "FTFont.h"
# include "FTGLExtrdFont.h"
diff -ur root-trunk.orig/graf3d/gl/src/TGLText.cxx root-trunk/graf3d/gl/src/TGLText.cxx
--- root-trunk.orig/graf3d/gl/src/TGLText.cxx 2010-11-03 22:51:45.000000000 +0100
+++ root-trunk/graf3d/gl/src/TGLText.cxx 2010-12-04 19:36:46.716052000 +0100
@@ -23,7 +23,13 @@
// Direct inclussion of FTGL headers is deprecated in ftgl-2.1.3 while
// ftgl-2.1.2 shipped with ROOT requires manual inclusion.
#ifndef BUILTIN_FTGL
-# include <FTGL/ftgl.h>
+# include <FTGL/FTFont.h>
+# include <FTGL/FTGLExtrdFont.h>
+# include <FTGL/FTGLOutlineFont.h>
+# include <FTGL/FTGLPolygonFont.h>
+# include <FTGL/FTGLTextureFont.h>
+# include <FTGL/FTGLPixmapFont.h>
+# include <FTGL/FTGLBitmapFont.h>
#else
# include "FTFont.h"
# include "FTGLExtrdFont.h"

View file

@ -1,6 +0,0 @@
#!/bin/sh
VERSION=$1
wget -N https://root.cern/download/root_v${VERSION}.source.tar.gz
tar -z -x -f root_v${VERSION}.source.tar.gz
find root-${VERSION}/fonts -type f -a '!' -name 'STIX*' -exec rm {} ';'
tar -J -c --group root --owner root -f root-${VERSION}.tar.xz root-${VERSION}

61
root-gfal-bits.patch Normal file
View file

@ -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

35
root-glibc.patch Normal file
View file

@ -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>

35
root-html.C Normal file
View file

@ -0,0 +1,35 @@
{
gEnv->SetValue("Root.DynamicPath", "@PWD@/lib");
gEnv->SetValue("Root.MacroPath", "@PWD@/macros");
gEnv->SetValue("Root.PluginPath", "@PWD@/etc/plugins");
gSystem->AddIncludePath("-I@PWD@/include");
gSystem->AddIncludePath("-I@PWD@/cint/cint/include");
gSystem->AddIncludePath("-I@PWD@/cint/cint/stl");
gSystem->AddIncludePath("-I@PWD@/cint/cint/lib");
TInterpreter::Instance()->AddIncludePath("@PWD@/include");
TInterpreter::Instance()->AddIncludePath("@PWD@/cint/cint/include");
TInterpreter::Instance()->AddIncludePath("@PWD@/cint/cint/stl");
TInterpreter::Instance()->AddIncludePath("@PWD@/cint/cint/lib");
#include <RtypesCint.h>
#include <iostream>
#include <string>
#include <DllImport.h>
gROOT->GetPluginManager()->LoadHandlersFromPluginDirs("");
gROOT->GetPluginManager()->AddHandler("TVirtualPS","image",
"TImageDump","Postscript",
"TImageDump()");
gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
"*","TStreamerInfo",
"RIO","TStreamerInfo()");
gROOT->GetPluginManager()->AddHandler("TVirtualGraphPainter", "*",
"TGraphPainter","GraphPainter",
"TGraphPainter()");
delete (TFile*) gROOT->ProcessLine(".x tutorials/hsimple.C");
THtml html;
html.SetProductName("ROOT");
html.SetEtcDir("@PWD@/etc/html");
html.SetHomepage("http://root.cern.ch");
html.LoadAllLibs();
html.SetBatch(kTRUE);
html.MakeAll();
}

11
root-includelist Normal file
View file

@ -0,0 +1,11 @@
include $(MODULE)/Module.mk
includelist:
@list=includelist-`tr / - <<< $(MODULE)` ; \
rm -f $$list ; \
for h in $(filter-out %.cw %.pri, $(ALLHDRS)) ; do \
sed 's!^include!%{_includedir}/%{name}!' <<< $$h >> $$list ; \
done ; \
if [ -r $$list ] ; then \
sort -u $$list > $$list.unique ; \
mv $$list.unique $$list ; \
fi

View file

@ -1,15 +0,0 @@
--- root-6.12.04.orig/interpreter/CMakeLists.txt 2017-12-13 08:27:42.000000000 +0100
+++ root-6.12.04/interpreter/CMakeLists.txt 2018-01-11 16:33:13.034850962 +0100
@@ -75,6 +75,12 @@
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /ignore:4049,4206,4217,4221")
endif()
+# Reduce memory usage during linking on ARM and x86 by generating minimal debuginfo
+if(ROOT_ARCHITECTURE STREQUAL "linuxarm" OR ROOT_ARCHITECTURE STREQUAL "linux")
+ string(REPLACE " -g " " -g1 " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ string(REPLACE " -g " " -g1 " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+endif()
+
set(LLVM_TARGETS_TO_BUILD ${ROOT_CLING_TARGET} CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
if(clingtest)

44
root-meta.patch Normal file
View file

@ -0,0 +1,44 @@
diff -ur root-5.32.00.orig/core/meta/src/TCint.cxx root-5.32.00/core/meta/src/TCint.cxx
--- root-5.32.00.orig/core/meta/src/TCint.cxx 2011-12-02 12:41:50.000000000 +0100
+++ root-5.32.00/core/meta/src/TCint.cxx 2012-02-18 12:07:12.157520013 +0100
@@ -320,23 +320,27 @@
ProcessLine("#define ROOT_TError 0");
ProcessLine("#define ROOT_TGenericClassInfo 0");
- TString include;
- // Add the root include directory to list searched by default
+ Int_t includes = gEnv->GetValue("Cint.Includes", 1);
+ if (includes > 0) {
+ TString include;
+ // Add the root include directory to list searched by default
#ifndef ROOTINCDIR
- include = gSystem->Getenv("ROOTSYS");
- include.Append("/include");
+ include = gSystem->Getenv("ROOTSYS");
+ include.Append("/include");
#else
- include = ROOTINCDIR;
+ include = ROOTINCDIR;
#endif
- TCint::AddIncludePath(include);
+ TCint::AddIncludePath(include);
- // Allow the usage of ClassDef and ClassImp in interpreted macros
- // if RtypesCint.h can be found (think of static executable without include/)
- char* whichTypesCint = gSystem->Which(include, "RtypesCint.h");
- if (whichTypesCint) {
- ProcessLine("#include <RtypesCint.h>");
- delete[] whichTypesCint;
- }
+ // Allow the usage of ClassDef and ClassImp in interpreted macros
+ // if RtypesCint.h can be found (think of static executable without
+ // include/)
+ char* whichTypesCint = gSystem->Which(include, "RtypesCint.h");
+ if (whichTypesCint) {
+ ProcessLine("#include <RtypesCint.h>");
+ delete[] whichTypesCint;
+ }
+ }
}

View file

@ -1,54 +0,0 @@
From ea7bed3a096949588b1b9086ddf66b2f7892a385 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 4 Dec 2025 23:13:28 +0100
Subject: [PATCH] Dont export Python modules
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +--
bindings/pyroot/pythonizations/CMakeLists.txt | 9 +--------
2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
index 95ca00bde9f..a12d3f05e4d 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
@@ -120,8 +120,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
-install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${CPPYY_INSTALL_DIR} COMPONENT libraries # Windows
+install(TARGETS cppyy RUNTIME DESTINATION ${CPPYY_INSTALL_DIR} COMPONENT libraries # Windows
LIBRARY DESTINATION ${CPPYY_INSTALL_DIR} COMPONENT libraries
ARCHIVE DESTINATION ${CPPYY_INSTALL_DIR} COMPONENT libraries)
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
index 32d7d54b8da..5128e6d337c 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
@@ -63,12 +63,6 @@ if(NOT MSVC)
target_compile_options(${libname} PRIVATE -Wno-strict-aliasing)
endif()
-
-# Create meta-target PyROOT3 (INTERFACE library)
-# Export of targets are not supported for custom targets(add_custom_targets())
-add_library(PyROOT INTERFACE)
-target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations)
-
# Define library output directories for build and install trees
set(pymoduledir_build "${localruntimedir}/ROOT")
set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT")
@@ -93,8 +87,7 @@ if(NOT MSVC)
endif()
# Install library
-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
+install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries
ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries)
--
2.55.0

View file

@ -1,68 +0,0 @@
From 87e5571eef573a1ab802c9b5b68e4215045689b9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 29 Aug 2026 13:15:53 +0200
Subject: [PATCH] [pdf] Fix calculation of kerning distances in generated PDF
files
Note that this uses the system fonts on Fedora rather than the bundled
fonts in the root sources.
Using the following test program
void ttest()
{
auto c = new TCanvas("c", "", 300, 100);
auto t = new TText(0.1, 0.4, "Raw assymmetry");
t->SetTextSize(0.5);
t->SetTextFont(132);
t->Draw();
c->Print("ttest.pdf");
c->Print("ttest.eps");
c->Print("ttest.png");
}
The .eps and .png images look like expected. But the .pdf image only
shows the initial capital "R", not the full "Raw assymmetry" text.
After decompressing the generated .pdf file:
cpdf -decompress ttest.pdf -o ttest.dec.pdf
the decompressed file shows that the kerning distances are incorrect:
[(R) -2147483648(a) 24(w) -2147483648( ) 0(a) 0(s) -2147483648(s) 17(y) 0(m) 0(m) 8(e) 8(t) 0(r) -2147483648(y) ]
Something has clearly gone wrong here. -2147483648 is the minimum
value that can be stored in a 16 bit signed integer.
The origin of the problem is a calculation of a difference between a
UInt_t (i.e. unsigned) value and an Int_t (i.e. signed) value in the
TPDF::Text() method. Casting the UInt_t to an Int_t before calculating
the difference, as done in this commit, fixes the problem. With this
change the kerning distances are better:
[(R) -2(a) 24(w) -2( ) 0(a) 0(s) -2(s) 17(y) 0(m) 0(m) 8(e) 8(t) 0(r) -2(y) ]
and the generated .pdf file shows the complete text. The generated
.png and .eps files do not change (except for the time stamp in the
.eps file).
---
graf2d/postscript/src/TPDF.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/graf2d/postscript/src/TPDF.cxx b/graf2d/postscript/src/TPDF.cxx
index 21a2506010f..e1cd9b10d10 100644
--- a/graf2d/postscript/src/TPDF.cxx
+++ b/graf2d/postscript/src/TPDF.cxx
@@ -1943,7 +1943,7 @@ void TPDF::Text(Double_t xx, Double_t yy, const char *chars)
tmp[0] = chars[i-1];
UInt_t width=0;
t.GetTextAdvance(width, &tmp[0], kFALSE);
- Double_t wwl = gPad->AbsPixeltoX(width - charDeltas[i]) - gPad->AbsPixeltoX(0);
+ Double_t wwl = gPad->AbsPixeltoX((Int_t)width - charDeltas[i]) - gPad->AbsPixeltoX(0);
wwl -= 0.5*(gPad->AbsPixeltoX(1) - gPad->AbsPixeltoX(0)); // half a pixel ~ rounding error
charDeltas[i] = (Int_t)((1000.0/Float_t(fontsize))*(XtoPDF(wwl) - XtoPDF(0))/scale);
}
--
2.55.0

25
root-qt.patch Normal file
View file

@ -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=

View file

@ -1,87 +0,0 @@
#! /bin/sh
SITE="https://root.cern/files"
mkdir files
pushd files
wget -N ${SITE}/aleph_ref_5.root
wget -N ${SITE}/aleph.root
wget -N ${SITE}/alice3_ref_6.root
wget -N ${SITE}/alice3.root
wget -N ${SITE}/ams_ref_4.root
wget -N ${SITE}/ams.root
wget -N ${SITE}/atlas_ref_6.root
wget -N ${SITE}/atlas.root
wget -N ${SITE}/babar2_ref_4.root
wget -N ${SITE}/babar2.root
wget -N ${SITE}/barres_ref_3.root
wget -N ${SITE}/barres.root
wget -N ${SITE}/belle_ref_3.root
wget -N ${SITE}/belle.root
wget -N ${SITE}/bes_ref_3.root
wget -N ${SITE}/bes.root
wget -N ${SITE}/brahms_ref_3.root
wget -N ${SITE}/brahms.root
wget -N ${SITE}/btev_ref_3.root
wget -N ${SITE}/btev.root
wget -N ${SITE}/cdf_ref_6.root
wget -N ${SITE}/cdf.root
wget -N ${SITE}/chambers_ref_3.root
wget -N ${SITE}/chambers.root
wget -N ${SITE}/cms_ref_4.root
wget -N ${SITE}/cms.root
wget -N ${SITE}/dubna_ref_3.root
wget -N ${SITE}/dubna.root
wget -N ${SITE}/e907_ref_3.root
wget -N ${SITE}/e907.root
wget -N ${SITE}/felix_ref_3.root
wget -N ${SITE}/felix.root
wget -N ${SITE}/ganil_ref_3.root
wget -N ${SITE}/ganil.root
wget -N ${SITE}/gem_ref_5.root
wget -N ${SITE}/gem.root
wget -N ${SITE}/hades2_ref_4.root
wget -N ${SITE}/hades2.root
wget -N ${SITE}/hermes_ref_3.root
wget -N ${SITE}/hermes.root
wget -N ${SITE}/integral_ref_4.root
wget -N ${SITE}/integral.root
wget -N ${SITE}/lhcbfull_ref_4.root
wget -N ${SITE}/lhcbfull.root
wget -N ${SITE}/na35_ref_3.root
wget -N ${SITE}/na35.root
wget -N ${SITE}/na47_ref_3.root
wget -N ${SITE}/na47.root
wget -N ${SITE}/na49_ref_3.root
wget -N ${SITE}/na49.root
wget -N ${SITE}/p326_ref_4.root
wget -N ${SITE}/p326.root
wget -N ${SITE}/phenix_ref_3.root
wget -N ${SITE}/phenix.root
wget -N ${SITE}/phobos2_ref_4.root
wget -N ${SITE}/phobos2.root
wget -N ${SITE}/sdc_ref_3.root
wget -N ${SITE}/sdc.root
wget -N ${SITE}/sld_ref_4.root
wget -N ${SITE}/sld.root
wget -N ${SITE}/star_ref_4.root
wget -N ${SITE}/star.root
wget -N ${SITE}/tesla_ref_4.root
wget -N ${SITE}/tesla.root
wget -N ${SITE}/wa91_ref_3.root
wget -N ${SITE}/wa91.root
wget -N ${SITE}/europe.root
wget -N ${SITE}/usa.root
for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done
mkdir tutorials
pushd tutorials
wget -N ${SITE}/tutorials/df014_CsvDataSource_MuRun2010B.csv
popd
popd
tar -J -c --group root --owner root -f root-testfiles.tar.xz files

View file

@ -1,146 +0,0 @@
From 2fec5822e305b9b203894aa0fe3e4dded1f673cc Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 8 Jul 2026 11:13:16 +0200
Subject: [PATCH] [tmva][sofie] Complete big-endian support for ONNX
initializer tensors
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Follow-up to the last commit ("[tmva][sofie] Fix big endian"), which
byte-swapped raw_data initializers on big-endian platforms but left a
few gaps:
- Initializers with data_location == EXTERNAL were still read from the
external weights file without swapping, silently producing
byte-reversed weights on big-endian machines.
- The type switch only handled FLOAT, DOUBLE, INT32 and INT64. One-byte
types (BOOL, UINT8, INT8), which parse fine on little-endian via
plain memcpy, now threw on big-endian, and the other fixed-width
types (INT16, UINT16, UINT32, UINT64) were rejected as well.
- The swap loops dereferenced the protobuf string buffer through
reinterpret_cast'ed uint32_t*/uint64_t* pointers, which is a
misaligned access on strict-alignment targets (e.g. SPARC) since
the buffer carries no alignment guarantee.
Replace the four copy-pasted swap loops with a width-dispatched helper,
CopyLEToHost, that plain-copies 1-byte element types and byte-swaps
2/4/8-byte elements through a memcpy'd temporary (no misaligned loads,
valid for in-place use), and call it from both the raw_data and the
external-data paths.
🤖 Done with the help of AI
---
tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 73 ++++++++++++--------
1 file changed, 45 insertions(+), 28 deletions(-)
diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
index ac4cc7d5740..1c14d12ba30 100644
--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
@@ -4,6 +4,7 @@
#include <stdexcept>
#include <string>
+#include <cstring>
#include <memory>
#include <cassert>
#include <iostream>
@@ -155,6 +156,45 @@ struct ExtractDataFromTP<int64_t> {
}
};
+#ifndef R__BYTESWAP
+namespace {
+
+// Copy nbytes from source to dest, byte-swapping each N-byte element. The
+// temporary avoids misaligned loads from the protobuf string buffer and makes
+// in-place swapping (dest == source) valid.
+template <std::size_t N>
+void CopyBswap(void *dest, const void *source, std::size_t nbytes)
+{
+ using value_type = typename RByteSwap<N>::value_type;
+ auto dst = static_cast<unsigned char *>(dest);
+ auto src = static_cast<const unsigned char *>(source);
+ for (std::size_t k = 0; k < nbytes; k += N) {
+ value_type v;
+ std::memcpy(&v, src + k, N);
+ v = RByteSwap<N>::bswap(v);
+ std::memcpy(dst + k, &v, N);
+ }
+}
+
+// Copy a buffer of little-endian tensor elements to host (big-endian) byte order
+void CopyLEToHost(void *dest, const void *source, std::size_t nbytes, ETensorType tensor_type)
+{
+ switch (GetTypeSize(tensor_type)) {
+ case 1:
+ if (dest != source)
+ std::memcpy(dest, source, nbytes);
+ break;
+ case 2: CopyBswap<2>(dest, source, nbytes); break;
+ case 4: CopyBswap<4>(dest, source, nbytes); break;
+ case 8: CopyBswap<8>(dest, source, nbytes); break;
+ default:
+ throw std::runtime_error("Data type " + ConvertTypeToString(tensor_type) + " in tensor is not supported!\n");
+ }
+}
+
+} // anonymous namespace
+#endif
+
std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorProto *tensorproto, size_t tensor_size, ETensorType tensor_type)
{
@@ -172,34 +212,7 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
std::memcpy(data.get(), tensorproto->raw_data().c_str(), tensor_size);
#else
// big-endian architectures - need to swap bytes
- switch (tensor_type) {
- case ETensorType::FLOAT:
- for (std::size_t k = 0; k < tensor_size / sizeof(float); ++k)
- (reinterpret_cast<typename RByteSwap<sizeof(float)>::value_type *>(data.get()))[k] =
- RByteSwap<sizeof(float)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(float)>::value_type *>(
- tensorproto->raw_data().c_str()))[k]);
- break;
- case ETensorType::DOUBLE:
- for (std::size_t k = 0; k < tensor_size / sizeof(double); ++k)
- (reinterpret_cast<typename RByteSwap<sizeof(double)>::value_type *>(data.get()))[k] =
- RByteSwap<sizeof(double)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(double)>::value_type *>(
- tensorproto->raw_data().c_str()))[k]);
- break;
- case ETensorType::INT32:
- for (std::size_t k = 0; k < tensor_size / sizeof(int32_t); ++k)
- (reinterpret_cast<typename RByteSwap<sizeof(int32_t)>::value_type *>(data.get()))[k] =
- RByteSwap<sizeof(int32_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int32_t)>::value_type *>(
- tensorproto->raw_data().c_str()))[k]);
- break;
- case ETensorType::INT64:
- for (std::size_t k = 0; k < tensor_size / sizeof(int64_t); ++k)
- (reinterpret_cast<typename RByteSwap<sizeof(int64_t)>::value_type *>(data.get()))[k] =
- RByteSwap<sizeof(int64_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int64_t)>::value_type *>(
- tensorproto->raw_data().c_str()))[k]);
- break;
- default:
- throw std::runtime_error("Data type " + ConvertTypeToString(tensor_type) + " in tensor is not supported!\n");
- }
+ CopyLEToHost(data.get(), tensorproto->raw_data().c_str(), tensor_size, tensor_type);
#endif
} else {
// case tensor data are stored as specific types and not in raw_data
@@ -262,6 +275,10 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
fDataFile.seekg(offset);
fDataFile.read(reinterpret_cast<char *>(data.get()), buffer_size);
+#ifndef R__BYTESWAP
+ // external data is stored little-endian like raw_data - swap in place
+ CopyLEToHost(data.get(), data.get(), buffer_size, tensor_type);
+#endif
}
return data;
--
2.55.0

View file

@ -1,68 +0,0 @@
From 8554bf49749efd8de5538bf99c12a04d2691102d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 28 Jun 2026 16:49:23 +0200
Subject: [PATCH] [tmva][sofie] Fix big endian
---
tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 36 ++++++++++++++++----
1 file changed, 30 insertions(+), 6 deletions(-)
diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
index aa196c510ad..ac4cc7d5740 100644
--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
@@ -172,13 +172,37 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
std::memcpy(data.get(), tensorproto->raw_data().c_str(), tensor_size);
#else
// big-endian architectures - need to swap bytes
- for (std::size_t k = 0; k < tensor_size; ++k)
- (reinterpret_cast<typename RByteSwap<sizeof(uint8_t)>::value_type *>(data.get()))[k] =
- RByteSwap<sizeof(T)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(uint8_t)>::value_type *>(
- tensorproto->raw_data().c_str()))[k]);
+ switch (tensor_type) {
+ case ETensorType::FLOAT:
+ for (std::size_t k = 0; k < tensor_size / sizeof(float); ++k)
+ (reinterpret_cast<typename RByteSwap<sizeof(float)>::value_type *>(data.get()))[k] =
+ RByteSwap<sizeof(float)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(float)>::value_type *>(
+ tensorproto->raw_data().c_str()))[k]);
+ break;
+ case ETensorType::DOUBLE:
+ for (std::size_t k = 0; k < tensor_size / sizeof(double); ++k)
+ (reinterpret_cast<typename RByteSwap<sizeof(double)>::value_type *>(data.get()))[k] =
+ RByteSwap<sizeof(double)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(double)>::value_type *>(
+ tensorproto->raw_data().c_str()))[k]);
+ break;
+ case ETensorType::INT32:
+ for (std::size_t k = 0; k < tensor_size / sizeof(int32_t); ++k)
+ (reinterpret_cast<typename RByteSwap<sizeof(int32_t)>::value_type *>(data.get()))[k] =
+ RByteSwap<sizeof(int32_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int32_t)>::value_type *>(
+ tensorproto->raw_data().c_str()))[k]);
+ break;
+ case ETensorType::INT64:
+ for (std::size_t k = 0; k < tensor_size / sizeof(int64_t); ++k)
+ (reinterpret_cast<typename RByteSwap<sizeof(int64_t)>::value_type *>(data.get()))[k] =
+ RByteSwap<sizeof(int64_t)>::bswap((reinterpret_cast<const typename RByteSwap<sizeof(int64_t)>::value_type *>(
+ tensorproto->raw_data().c_str()))[k]);
+ break;
+ default:
+ throw std::runtime_error("Data type " + ConvertTypeToString(tensor_type) + " in tensor is not supported!\n");
+ }
#endif
} else {
- // case tensor data are stored as specific types and now in raw_data
+ // case tensor data are stored as specific types and not in raw_data
switch (tensor_type) {
case ETensorType::FLOAT: {
ExtractDataFromTP<float>::Copy(tensorproto, data.get(), tensor_size/ 4);
@@ -200,7 +224,7 @@ std::shared_ptr<void> RModelParser_ONNX::GetInitializedTensorData(onnx::TensorPr
throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in BOOL not supported");
break;
}
- case ETensorType::UINT8: {
+ case ETensorType::UINT8: {
throw std::runtime_error("TMVA::SOFIE - ExtractData from TP in UINT8 not supported");
break;
}
--
2.54.0

View file

@ -1,25 +0,0 @@
From 58b38e29586975e714deee6ac195b286eb9a73cf Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 28 Jun 2026 16:59:36 +0200
Subject: [PATCH 2/3] [tree][df] Do not fail test on 32 bit due to mis-aligned
atomic
---
tree/dataframe/test/dataframe_hist.cxx | 1 +
1 file changed, 1 insertion(+)
diff --git a/tree/dataframe/test/dataframe_hist.cxx b/tree/dataframe/test/dataframe_hist.cxx
index f5fe396b50d..7a2c6659a84 100644
--- a/tree/dataframe/test/dataframe_hist.cxx
+++ b/tree/dataframe/test/dataframe_hist.cxx
@@ -31,6 +31,7 @@ public:
RDFHist()
{
fDiag.optionalDiag(kWarning, "", "Filling RHist is experimental", /*matchFullMessage=*/false);
+ fDiag.optionalDiag(kWarning, "cling", "expected alignment (8 bytes) exceeds the actual alignment (4 bytes) [-Watomic-alignment]", false);
if (GetParam())
ROOT::EnableImplicitMT(4);
}
--
2.54.0

View file

@ -1,32 +0,0 @@
From 07cbb0515e4f45808696037adce7c0f1bc5e903d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 28 Jun 2026 17:01:40 +0200
Subject: [PATCH 3/3] [tree][nt] Compare size to the size of the struct
Do not assume it is 2 * sizeof(double), which is not true on 32 bit.
---
tree/ntuple/test/ntuple_modelext.cxx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tree/ntuple/test/ntuple_modelext.cxx b/tree/ntuple/test/ntuple_modelext.cxx
index 8ec3886f921..ef27e844e84 100644
--- a/tree/ntuple/test/ntuple_modelext.cxx
+++ b/tree/ntuple/test/ntuple_modelext.cxx
@@ -810,12 +810,12 @@ TEST(RNTuple, ModelExtensionRecordNested)
modelUpdater->AddField(std::make_unique<RField<double>>("ptHP"), "r1.r2.r3.r4");
modelUpdater->CommitUpdate();
- EXPECT_EQ(2 * sizeof(double), writer->GetModel().GetConstField("r1").GetValueSize());
- entry = writer->CreateEntry();
struct FloatAndDouble {
float pt;
double ptHP;
};
+ EXPECT_EQ(sizeof(FloatAndDouble), writer->GetModel().GetConstField("r1").GetValueSize());
+ entry = writer->CreateEntry();
auto ptrFloatAndDouble = static_cast<FloatAndDouble *>(entry->GetPtr<void>("r1").get());
ptrFloatAndDouble->pt = 2.0;
--
2.54.0

39
root-unuran.patch Normal file
View file

@ -0,0 +1,39 @@
diff -ur root-trunk.orig/math/unuran/Module.mk root-trunk/math/unuran/Module.mk
--- root-trunk.orig/math/unuran/Module.mk 2010-11-25 20:41:32.000000000 +0100
+++ root-trunk/math/unuran/Module.mk 2010-11-25 20:51:47.190704977 +0100
@@ -20,7 +20,7 @@
UNURANETAG := $(call stripsrc,$(UNURANDIRS)/headers.d)
UNRCFG := $(call stripsrc,$(UNURANDIRS)/$(UNRVERS)/config.h)
-UNRTARCONTENT:=$(subst $(UNRVERS),$(UNRDIRS),$(shell mkdir -p $(UNRDIR); cd $(UNRDIR); gunzip -c $(UNRSRCS) | tar tf -))
+UNRTARCONTENT:=
UNRS := $(filter %.c, \
$(filter $(UNRDIRS)/src/utils/%,$(UNRTARCONTENT)) \
$(filter $(UNRDIRS)/src/methods/%,$(UNRTARCONTENT)) \
@@ -69,10 +69,9 @@
##### local rules #####
.PHONY: all-$(MODNAME) clean-$(MODNAME) distclean-$(MODNAME)
-include/%.h: $(UNURANDIRI)/%.h $(UNURANETAG)
+include/%.h: $(UNURANDIRI)/%.h
cp $< $@
-$(UNURANDEP): $(UNRCFG)
$(UNRS): $(UNURANETAG)
$(UNURANETAG): $(UNRSRCS)
@@ -125,12 +124,12 @@
GNUMAKE=$(MAKE) ./configure CC="$$ACC" \
CFLAGS="$$ACFLAGS");
-$(UNURANLIB): $(UNRCFG) $(UNRO) $(UNURANO) $(UNURANDO) $(ORDER_) \
+$(UNURANLIB): $(UNURANO) $(UNURANDO) $(ORDER_) \
$(MAINLIBS) $(UNURANLIBDEP)
@$(MAKELIB) $(PLATFORM) $(LD) "$(LDFLAGS)" \
"$(SOFLAGS)" libUnuran.$(SOEXT) $@ \
"$(UNURANO) $(UNURANDO)" \
- "$(UNURANLIBEXTRA) $(UNRO)"
+ "$(UNURANLIBEXTRA) -lunuran"
$(UNURANDS): $(UNRINIT) $(UNURANDH1) $(UNURANL) $(ROOTCINTTMPDEP)
$(MAKEDIR)

809
root-xrootd.patch Normal file
View file

@ -0,0 +1,809 @@
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
- check_symbol XrdOucBonjour "$libxrdoucbjr" "$xrdlibdir"
- if test $found_symbol -eq 0 ; then
- bonjourcppflags=
- fi
+ # This check is broken. The xrootd libraries are C++ hence their
+ # symbol names are mangled. The check_symbol macro is designed
+ # to check for unmangled symbol names in C libraries.
+ # check_symbol XrdOucBonjour "$libxrdoucbjr" "$xrdlibdir"
+ # if test $found_symbol -eq 0 ; then
+ # bonjourcppflags=
+ # fi
+ bonjourcppflags=
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)

View file

@ -1,11 +0,0 @@
[Desktop Entry]
Name=Root
GenericName=Root
Comment=Numerical data analysis framework
Exec=root
Icon=root
Terminal=true
Type=Application
MimeType=application/x-root;
Categories=Utility;
Encoding=UTF-8

BIN
root.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

5362
root.spec

File diff suppressed because it is too large Load diff

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-root">
<comment>ROOT data file</comment>
<comment xml:lang="de">ROOT Datei</comment>
<comment xml:lang="fr">ROOT banque de donnees</comment>
<comment xml:lang="sv">ROOT data fil</comment>
<comment xml:lang="no">ROOT data fil</comment>
<comment xml:lang="da">ROOT data fil</comment>
<glob pattern="*.root"/>
<magic priority="80">
<match type="string" value="ROOT" offset="0:3"/>
</magic>
</mime-type>
</mime-info>

BIN
rootdrawing-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,3 +1 @@
SHA512 (root-6.40.04.tar.xz) = 674ea3de3f58d3bde15637925bec80984552cb5c4f6259ec68c2f7dc566014d9a3b2ee005e0f89b5cf20d9e5188dc5c9185d886a6701e315bb4771b068939282
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
SHA512 (clad-2.3.tar.gz) = 2d7e008ad88dd9e4b44d73e3187f8b1883e475845f5ac2d3b2c8e728508422e1e60e279940fefe322995751490f61f7d4768498c3660f9afa1206cc0e83bea33
a7ab4544dc165a28a7a95f8eef1ae3d8 root-5.32.04.tar.gz