diff --git a/root-Quantiles.patch b/root-Quantiles.patch new file mode 100644 index 0000000..580314a --- /dev/null +++ b/root-Quantiles.patch @@ -0,0 +1,15 @@ +diff --git a/math/mathcore/src/TMath.cxx b/math/mathcore/src/TMath.cxx +index 942bb55..72618fc 100644 +--- a/math/mathcore/src/TMath.cxx ++++ b/math/mathcore/src/TMath.cxx +@@ -1210,7 +1210,9 @@ void TMath::Quantiles(Int_t n, Int_t nprob, Double_t *x, Double_t *quantiles, Do + else + nppm = n*prob[i]; // use m = 0 + +- j = TMath::FloorNint(nppm); ++ // be careful with machine precision ++ double eps = 4 * TMath::Limits::Epsilon(); ++ j = TMath::FloorNint(nppm + eps); + + // LM : fix for numerical problems if nppm is actually equal to j, but results different for numerical error + // g in the paper is nppm -j diff --git a/root-format.patch b/root-format.patch new file mode 100644 index 0000000..789afd4 --- /dev/null +++ b/root-format.patch @@ -0,0 +1,94 @@ +diff --git a/net/globusauth/src/GlobusAuth.cxx b/net/globusauth/src/GlobusAuth.cxx +index 6e0a00a..0b778bf 100644 +--- a/net/globusauth/src/GlobusAuth.cxx ++++ b/net/globusauth/src/GlobusAuth.cxx +@@ -139,7 +139,7 @@ Int_t GlobusAuthenticate(TAuthenticate * tAuth, TString & user, + return -1; + } + if (gDebug > 3) +- Info("GlobusAuthenticate", " Credential Handle is 0x%x", ++ Info("GlobusAuthenticate", " Credential Handle is %p", + gGlbCredHandle); + + // Inquire credentials for subject name and convert it in human readable form ... +@@ -193,7 +193,7 @@ Int_t GlobusAuthenticate(TAuthenticate * tAuth, TString & user, + if (gDebug > 0) + Error("GlobusAuthenticate", + "Length of Issuer name not send correctly: bytes sent: %d (tot len: %d)", +- bsnd - 1, strlen(buf)); ++ bsnd - 1, (int) strlen(buf)); + return 0; + } + // Now we send it to the server daemon +@@ -240,7 +240,7 @@ Int_t GlobusAuthenticate(TAuthenticate * tAuth, TString & user, + "recv host subj: did not receive all the bytes" + " (recv: %d, due >%d)", brcv, retval); + Error("GlobusAuthenticate", "recv host subj: (%d) %s", +- strlen(host_subj), host_subj); ++ (int) strlen(host_subj), host_subj); + } + if (host_subj) delete[] host_subj; + return 0; +@@ -262,7 +262,7 @@ Int_t GlobusAuthenticate(TAuthenticate * tAuth, TString & user, + 0 ? (GSS_C_DELEG_FLAG | GSS_C_MUTUAL_FLAG) : GSS_C_MUTUAL_FLAG; + if (gDebug > 3) + Info("GlobusAuthenticate", +- " gssReqFlags: %p, GlbCredentials: %p", gssReqFlags, gGlbCredHandle); ++ " gssReqFlags: 0x%x, GlbCredentials: %p", gssReqFlags, gGlbCredHandle); + + // Now we are ready to start negotiating with the Server + if ((majStat = +@@ -417,7 +417,7 @@ int GlobusGetDelCred() + return 1; + } else if (gDebug > 3) + Info("GlobusGetDelCred:", +- "Globus Credentials successfully imported (0x%x)", ++ "Globus Credentials successfully imported (%p)", + gGlbDelCredHandle); + + if (credential) delete[] credential; +@@ -494,7 +494,7 @@ Int_t GlobusGetLocalEnv(Int_t *localEnv, TString protocol) + Info("GlobusGetLocalEnv", + "PROOF environment, called by the MASTER/SLAVE"); + Info("GlobusGetLocalEnv", +- "string with pointer to del cred is 0x%x", ++ "string with pointer to del cred is %p", + gGlbDelCredHandle); + } + *localEnv = 2; +@@ -542,7 +542,7 @@ Int_t GlobusGetLocalEnv(Int_t *localEnv, TString protocol) + Int_t GlobusNameFromCred(gss_cred_id_t cred, TString &subjName) + { + if (gDebug > 2) +- Info("GlobusNamesFromCred", "Enter: Handle: 0x%p", cred); ++ Info("GlobusNamesFromCred", "Enter: Handle: %p", cred); + + // Inquire credentials for Subject name and convert it in human readable form ... + OM_uint32 majStat = 0; +@@ -662,7 +662,7 @@ void GlobusCleanupShm() + if ((rc == EINVAL) || (rc == EIDRM)) { + if (gDebug > 3) + Info("GlobusCleanupShm:", +- "credentials shared memory segment %s" ++ "credentials shared memory segment " + "already marked as destroyed"); + } else { + Warning("GlobusCleanupShm:", +@@ -730,7 +730,7 @@ Int_t GlobusCheckSecContext(const char *subjName, gss_ctx_id_t ctx) + theName[nameBuffer.length]= '\0'; + if (gDebug > 2) + Info("GlobusCheckSecContext","with subject name: %s (%d)", +- theName, nameBuffer.length); ++ theName, (int) nameBuffer.length); + if (!strcmp(theName, subjName)) { + if (gDebug > 2) + Info("GlobusCheckSecContext", +@@ -1010,7 +1010,7 @@ Int_t GlobusIssuerName(TString &issuerName) + fn = Form("%s/.globus/usercert.pem",gSystem->HomeDirectory()); + if (gSystem->AccessPathName(fn, kReadPermission)) { + emsg += fn; +- Error("GlobusIssuerName", emsg.Data()); ++ Error("GlobusIssuerName", "%s", emsg.Data()); + return 1; + } + } diff --git a/root-missing-header-gcc7.patch b/root-missing-header-gcc7.patch new file mode 100644 index 0000000..1a2e2bd --- /dev/null +++ b/root-missing-header-gcc7.patch @@ -0,0 +1,12 @@ +diff --git a/test/stressEntryList.cxx b/test/stressEntryList.cxx +index e39a80b..ee6303b 100644 +--- a/test/stressEntryList.cxx ++++ b/test/stressEntryList.cxx +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + #include + #include "TApplication.h" + #include "TEntryList.h" diff --git a/root-python-install-path.patch b/root-python-install-path.patch new file mode 100644 index 0000000..e0a02a2 --- /dev/null +++ b/root-python-install-path.patch @@ -0,0 +1,39 @@ +diff --git a/bindings/pyroot/CMakeLists.txt b/bindings/pyroot/CMakeLists.txt +index c537bae..3a2118e 100644 +--- a/bindings/pyroot/CMakeLists.txt ++++ b/bindings/pyroot/CMakeLists.txt +@@ -36,8 +36,13 @@ endif() + file(GLOB pyfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) + foreach(pyfile ${pyfiles}) + install(FILES ${pyfile} DESTINATION ${runtimedir}) +- install(CODE "execute_process(COMMAND python -m py_compile \$ENV{DESTDIR}${runtimedir}/${pyfile})") +- install(CODE "execute_process(COMMAND python -O -m py_compile \$ENV{DESTDIR}${runtimedir}/${pyfile})") ++ if(IS_ABSOLUTE ${runtimedir}) ++ set(absruntimedir ${runtimedir}) ++ else() ++ set(absruntimedir ${CMAKE_INSTALL_PREFIX}/${runtimedir}) ++ endif() ++ install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m py_compile \$ENV{DESTDIR}${absruntimedir}/${pyfile})") ++ install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -O -m py_compile \$ENV{DESTDIR}${absruntimedir}/${pyfile})") + file(COPY ${pyfile} DESTINATION ${localruntimedir}) + endforeach() + +diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt +index 0f430c9..a431a2b 100644 +--- a/main/CMakeLists.txt ++++ b/main/CMakeLists.txt +@@ -43,7 +43,12 @@ if(python) + endforeach() + + install(FILES python/cmdLineUtils.py DESTINATION ${runtimedir}) +- install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m py_compile \$ENV{DESTDIR}${runtimedir}/cmdLineUtils.py)") +- install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -O -m py_compile \$ENV{DESTDIR}${runtimedir}/cmdLineUtils.py)") ++ if(IS_ABSOLUTE ${runtimedir}) ++ set(absruntimedir ${runtimedir}) ++ else() ++ set(absruntimedir ${CMAKE_INSTALL_PREFIX}/${runtimedir}) ++ endif() ++ install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m py_compile \$ENV{DESTDIR}${absruntimedir}/cmdLineUtils.py)") ++ install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -O -m py_compile \$ENV{DESTDIR}${absruntimedir}/cmdLineUtils.py)") + configure_file(python/cmdLineUtils.py ${localruntimedir}/cmdLineUtils.py @ONLY) + endif() diff --git a/root-test-install.patch b/root-test-install.patch index 08d28ab..84f782b 100644 --- a/root-test-install.patch +++ b/root-test-install.patch @@ -1748,9 +1748,9 @@ diff -Nur root-6.08.02.orig/graf2d/asimage/src/TASImage.cxx root-6.08.02/graf2d/ + Ssiz_t from = 0; + TString token; +#ifndef R__WIN32 -+ const char *delim = "/"; ++ const char *delim = ":"; +#else -+ const char *delim = "\\"; ++ const char *delim = ";"; #endif - - gIconPaths[6] = 0; diff --git a/root.spec b/root.spec index c356c1b..0fd4a8d 100644 --- a/root.spec +++ b/root.spec @@ -23,7 +23,7 @@ Name: root Version: 6.08.04 %global libversion %(cut -d. -f 1-2 <<< %{version}) -Release: 2%{?dist} +Release: 3%{?dist} Summary: Numerical data analysis framework License: LGPLv2+ @@ -94,7 +94,22 @@ Patch17: %{name}-TPad-WaitPrimitive.patch # Don't wait for user interaction in batch mode # https://github.com/root-mirror/root/pull/322 Patch18: %{name}-spectrum-batch.patch - +# Add missing header (gcc 7) +# https://github.com/root-mirror/root/pull/353 +Patch19: %{name}-missing-header-gcc7.patch +# Fix for test suite on Fedora 26 i686 +# https://github.com/root-mirror/root/pull/359 +Patch20: %{name}-Quantiles.patch +# Fix format warnings/errors +# https://github.com/root-mirror/root/pull/376 +Patch21: %{name}-format.patch +# Allow both absolute and relative python install paths +# https://github.com/root-mirror/root/pull/382 +Patch22: %{name}-python-install-path.patch + +# The build on aarch64 used to work, but is now broken again +# https://pagure.io/releng/issue/6653 +ExcludeArch: aarch64 # s390 is not supported by cling: "error: unknown target # triple 's390-ibm-linux', please use -triple or -arch" ExcludeArch: s390 @@ -1566,6 +1581,10 @@ ROOT as a Jupyter Notebook. %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 # Remove bundled sources in order to be sure they are not used # * afterimage @@ -1782,7 +1801,7 @@ py2l=`pkg-config --libs-only-l python2 | sed -e 's/-l//' -e 's/\s*$//'` py3i=`pkg-config --cflags-only-I python3 | sed -e 's/-I//' -e 's/\s*$//'` py3l=`pkg-config --libs-only-l python3 | sed -e 's/-l//' -e 's/\s*$//'` sed -e "s,${py2i},${py3i},g" -e "s,-l${py2l},-l${py3l},g" \ - -e "s,lib${py2l},lib${py3l},g" -e 's, python , python3 ,g' \ + -e "s,lib${py2l},lib${py3l},g" -e 's,%{__python},%{__python3},g' \ -e 's,lib/libPyROOT,python/libPyROOT,g' \ -e 's,lib/libJupyROOT,python/libJupyROOT,g' \ -e 's!bindings/pyroot!bindings/python!g' -i `find bindings/python -type f` @@ -2074,14 +2093,18 @@ popd # - tutorial-multicore-imt101_parTreeProcessing # requires input data: http://root.cern.ch/files/tp_process_imt.root (707 MB) # +# - tutorial-r-* +# occasionally causes random crashes +# # - test-stressiterators-interpreted # - tutorial-hist-sparsehist -# - tutorial-r-* +# - test-stressHistFactory-interpreted +# - tutorial-histfactory-example # currently fails on 32 bit arm - reported upstream: # https://sft.its.cern.ch/jira/browse/ROOT-8500 -excluded="test-stressIOPlugins-.*|tutorial-tree-run_h1analysis|tutorial-multicore-imt001_parBranchProcessing|tutorial-multicore-mp103_processSelector|tutorial-multicore-imt101_parTreeProcessing" +excluded="test-stressIOPlugins-.*|tutorial-tree-run_h1analysis|tutorial-multicore-imt001_parBranchProcessing|tutorial-multicore-mp103_processSelector|tutorial-multicore-imt101_parTreeProcessing|tutorial-r-.*" %ifarch %{arm} -excluded="${excluded}|test-stressiterators-interpreted|tutorial-hist-sparsehist|tutorial-r-.*" +excluded="${excluded}|test-stressiterators-interpreted|tutorial-hist-sparsehist|test-stressHistFactory-interpreted|tutorial-histfactory-example" %endif make test ARGS="%{?_smp_mflags} --output-on-failure -E \"${excluded}\"" popd @@ -3103,6 +3126,14 @@ fi %{_datadir}/%{name}/notebook %changelog +* Wed Mar 01 2017 Mattias Ellert - 6.08.04-3 +- Disable building on aarch64 (it is now broken again) +- Add missing header (gcc 7) +- Fix a test failure on Fedora 26 i686 +- Fix some format warnings/errors in GlobusAuth +- Use the right delimiter when splitting the icon path in TASImage +- Disable two more tests on 32 bit arm + * Sat Feb 11 2017 Fedora Release Engineering - 6.08.04-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild