[arch-commits] Commit in root/repos/community-testing-x86_64 (22 files)

Konstantin Gizdov kgizdov at gemini.archlinux.org
Tue Nov 23 15:44:45 UTC 2021


    Date: Tuesday, November 23, 2021 @ 15:44:45
  Author: kgizdov
Revision: 1054474

archrelease: copy trunk to community-testing-x86_64

Added:
  root/repos/community-testing-x86_64/8351.patch
    (from rev 1054473, root/trunk/8351.patch)
  root/repos/community-testing-x86_64/9271.patch
    (from rev 1054473, root/trunk/9271.patch)
  root/repos/community-testing-x86_64/PKGBUILD
    (from rev 1054473, root/trunk/PKGBUILD)
  root/repos/community-testing-x86_64/ROOFIT_LICENSE
    (from rev 1054473, root/trunk/ROOFIT_LICENSE)
  root/repos/community-testing-x86_64/jupyter_notebook_config.py
    (from rev 1054473, root/trunk/jupyter_notebook_config.py)
  root/repos/community-testing-x86_64/nbman-for-arch.patch
    (from rev 1054473, root/trunk/nbman-for-arch.patch)
  root/repos/community-testing-x86_64/root.pc.tpl
    (from rev 1054473, root/trunk/root.pc.tpl)
  root/repos/community-testing-x86_64/root.xml
    (from rev 1054473, root/trunk/root.xml)
  root/repos/community-testing-x86_64/settings-cuda.cmake
    (from rev 1054473, root/trunk/settings-cuda.cmake)
  root/repos/community-testing-x86_64/settings.cmake
    (from rev 1054473, root/trunk/settings.cmake)
  root/repos/community-testing-x86_64/thisroot.fail
    (from rev 1054473, root/trunk/thisroot.fail)
Deleted:
  root/repos/community-testing-x86_64/8351.patch
  root/repos/community-testing-x86_64/9271.patch
  root/repos/community-testing-x86_64/PKGBUILD
  root/repos/community-testing-x86_64/ROOFIT_LICENSE
  root/repos/community-testing-x86_64/jupyter_notebook_config.py
  root/repos/community-testing-x86_64/nbman-for-arch.patch
  root/repos/community-testing-x86_64/root.pc.tpl
  root/repos/community-testing-x86_64/root.xml
  root/repos/community-testing-x86_64/settings-cuda.cmake
  root/repos/community-testing-x86_64/settings.cmake
  root/repos/community-testing-x86_64/thisroot.fail

----------------------------+
 8351.patch                 |   58 -
 9271.patch                 | 1479 +++++++++++++++++++++----------------------
 PKGBUILD                   |  612 ++++++++---------
 ROOFIT_LICENSE             |   44 -
 jupyter_notebook_config.py |    2 
 nbman-for-arch.patch       |  354 +++++-----
 root.pc.tpl                |   24 
 root.xml                   |   28 
 settings-cuda.cmake        |  224 +++---
 settings.cmake             |  224 +++---
 thisroot.fail              |   98 +-
 11 files changed, 1587 insertions(+), 1560 deletions(-)

Deleted: 8351.patch
===================================================================
--- 8351.patch	2021-11-23 15:44:31 UTC (rev 1054473)
+++ 8351.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,29 +0,0 @@
-From 87a0caf0c8b2b4158a6f35e948087ae64c4c06a7 Mon Sep 17 00:00:00 2001
-From: Enrico Guiraud <enrico.guiraud at cern.ch>
-Date: Mon, 7 Jun 2021 11:02:48 +0200
-Subject: [PATCH] [io] Avoid nullptr deref when printing warning in
- TStreamerInfo
-
----
- io/io/src/TStreamerInfo.cxx | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/io/io/src/TStreamerInfo.cxx b/io/io/src/TStreamerInfo.cxx
-index d545ab7be8e3..a02663589066 100644
---- a/io/io/src/TStreamerInfo.cxx
-+++ b/io/io/src/TStreamerInfo.cxx
-@@ -1109,12 +1109,12 @@ void TStreamerInfo::BuildCheck(TFile *file /* = 0 */, Bool_t load /* = kTRUE */)
-                              fClassVersion, GetName(), GetName(), GetName(), fClassVersion);
-                   } else {
-                      Warning("BuildCheck", "\n\
--   The StreamerInfo from %s does not match existing one (%s:%d)\n\
-+   The StreamerInfo does not match existing one (%s:%d)\n\
-    The existing one has not been used yet and will be discarded.\n\
-    Reading should work properly, however writing object of\n\
-    type %s will not work properly.  Most likely the version number\n\
-    of the class was not properly updated [See ClassDef(%s,%d)].",
--                             file->GetName(), GetName(), fClassVersion, GetName(), GetName(), fClassVersion);
-+                             GetName(), fClassVersion, GetName(), GetName(), fClassVersion);
-                   }
-                }
-             }

Copied: root/repos/community-testing-x86_64/8351.patch (from rev 1054473, root/trunk/8351.patch)
===================================================================
--- 8351.patch	                        (rev 0)
+++ 8351.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,29 @@
+From 87a0caf0c8b2b4158a6f35e948087ae64c4c06a7 Mon Sep 17 00:00:00 2001
+From: Enrico Guiraud <enrico.guiraud at cern.ch>
+Date: Mon, 7 Jun 2021 11:02:48 +0200
+Subject: [PATCH] [io] Avoid nullptr deref when printing warning in
+ TStreamerInfo
+
+---
+ io/io/src/TStreamerInfo.cxx | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/io/io/src/TStreamerInfo.cxx b/io/io/src/TStreamerInfo.cxx
+index d545ab7be8e3..a02663589066 100644
+--- a/io/io/src/TStreamerInfo.cxx
++++ b/io/io/src/TStreamerInfo.cxx
+@@ -1109,12 +1109,12 @@ void TStreamerInfo::BuildCheck(TFile *file /* = 0 */, Bool_t load /* = kTRUE */)
+                              fClassVersion, GetName(), GetName(), GetName(), fClassVersion);
+                   } else {
+                      Warning("BuildCheck", "\n\
+-   The StreamerInfo from %s does not match existing one (%s:%d)\n\
++   The StreamerInfo does not match existing one (%s:%d)\n\
+    The existing one has not been used yet and will be discarded.\n\
+    Reading should work properly, however writing object of\n\
+    type %s will not work properly.  Most likely the version number\n\
+    of the class was not properly updated [See ClassDef(%s,%d)].",
+-                             file->GetName(), GetName(), fClassVersion, GetName(), GetName(), fClassVersion);
++                             GetName(), fClassVersion, GetName(), GetName(), fClassVersion);
+                   }
+                }
+             }

Deleted: 9271.patch
===================================================================
--- 9271.patch	2021-11-23 15:44:31 UTC (rev 1054473)
+++ 9271.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,726 +0,0 @@
-diff --git a/roofit/histfactory/src/ConfigParser.cxx b/roofit/histfactory/src/ConfigParser.cxx
-index 227a16b6a0..f1d7eba4f4 100644
---- a/roofit/histfactory/src/ConfigParser.cxx
-+++ b/roofit/histfactory/src/ConfigParser.cxx
-@@ -260,280 +260,210 @@ std::vector< RooStats::HistFactory::Measurement > ConfigParser::GetMeasurementsF
-   return measurement_list;
- 
- }
--									     
- 
--HistFactory::Measurement ConfigParser::CreateMeasurementFromDriverNode( TXMLNode* node ) {
--
--
--  HistFactory::Measurement measurement;
--
--  // Set the default values:
--  measurement.SetLumi( 1.0 );
--  measurement.SetLumiRelErr( .10 );
--  measurement.SetBinLow( 0 );
--  measurement.SetBinHigh( 1 );
--  measurement.SetExportOnly( false );
--
--  cxcoutIHF << "Creating new measurement: " << std::endl;
--
--  // First, get the attributes of the node
--  TListIter attribIt = node->GetAttributes();
--  TXMLAttr* curAttr = 0;
--  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
--
--    if( curAttr->GetName() == TString( "" ) ) {
--      cxcoutEHF << "Found XML attribute in Measurement with no name"  << std::endl;
--      // ADD Output Here
--      throw hf_exc();
--    }
--    else if( curAttr->GetName() == TString( "Name" ) ) {
--      //rowTitle=curAttr->GetValue();
--      measurement.SetName(  curAttr->GetValue() );
--      //measurement.OutputFileName = outputFileNamePrefix+"_"+rowTitle+".root";
--    }
--    else if( curAttr->GetName() == TString( "Lumi" ) ) {
--      measurement.SetLumi( atof(curAttr->GetValue()) );
--    }
--    else if( curAttr->GetName() == TString( "LumiRelErr" ) ) {
--      measurement.SetLumiRelErr( atof(curAttr->GetValue()) );
--    }
--    else if( curAttr->GetName() == TString( "BinLow" ) ) {
--      measurement.SetBinLow( atoi(curAttr->GetValue()) );
--    }
--    else if( curAttr->GetName() == TString( "BinHigh" ) ) {
--      measurement.SetBinHigh( atoi(curAttr->GetValue()) );
--    }
--    else if( curAttr->GetName() == TString( "Mode" ) ) {
--      cout <<"\n INFO: Mode attribute is deprecated, will ignore\n"<<endl;
--    }
--    else if( curAttr->GetName() == TString( "ExportOnly" ) ) {
--      measurement.SetExportOnly( CheckTrueFalse(curAttr->GetValue(),"Measurement") );
--    }
--
--    else {
--      cxcoutEHF << "Found unknown XML attribute in Measurement: " << curAttr->GetName()
--		<< std::endl;
--      throw hf_exc();
--    }
--
--  } // End Loop over attributes
--
--
--  // Then, get the properties of the children nodes
--  TXMLNode* child = node->GetChildren();
--  while( child != 0 ) {
--  
--    if( child->GetNodeName() == TString( "" ) ) {
--      cxcoutEHF << "Found XML child node of Measurement with no name"  << std::endl;
--      throw hf_exc();
--    }
--
--    else if( child->GetNodeName() == TString( "POI" ) ) {
--      if( child->GetText() == NULL ) {
--	cxcoutEHF << "Error: node: " << child->GetName()
--		  << " has no text." << std::endl;
--	throw hf_exc();
-+HistFactory::Measurement ConfigParser::CreateMeasurementFromDriverNode(TXMLNode *node)
-+{
-+   // construct and return at bottom
-+   HistFactory::Measurement measurement;
-+
-+   // safety for public functions
-+   if (node == nullptr) {
-+      cxcoutWHF << "Input driver node is undefined, ignoring\n";
-+      return measurement;
-+   }
-+
-+   // Set the default values:
-+   measurement.SetLumi(1.0);
-+   measurement.SetLumiRelErr(.10);
-+   measurement.SetBinLow(0);
-+   measurement.SetBinHigh(1);
-+   measurement.SetExportOnly(false);
-+
-+   cxcoutIHF << "Creating new measurement:\n";
-+
-+   // First, get the attributes of the node
-+   TListIter attribIt = node->GetAttributes();
-+   TXMLAttr *curAttr = nullptr;
-+   while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
-+      // curAttr is guaranteed non-null above
-+      const std::string curAttrName(curAttr->GetName()), curAttrValue(curAttr->GetValue());
-+      if (curAttrName == "") {
-+         cxcoutEHF << "Found XML attribute in Measurement with no name.\n";
-+         // ADD Output Here
-+         throw hf_exc();
-+      } else if (curAttrName == "Name") {
-+         measurement.SetName(curAttrValue.c_str());
-+      } else if (curAttrName == "Lumi") {
-+         measurement.SetLumi(std::stof(curAttrValue));
-+      } else if (curAttrName == "LumiRelErr") {
-+         measurement.SetLumiRelErr(std::stof(curAttrValue));
-+      } else if (curAttrName == "BinLow") {
-+         measurement.SetBinLow(std::stoi(curAttrValue));
-+      } else if (curAttrName == "BinHigh") {
-+         measurement.SetBinHigh(std::stoi(curAttrValue));
-+      } else if (curAttrName == "Mode") {
-+         cout << "\n INFO: Mode attribute is deprecated and no longer supported, will ignore\n";
-+      } else if (curAttrName == "ExportOnly") {
-+         measurement.SetExportOnly(CheckTrueFalse(curAttrValue, "Measurement"));
-+      } else {
-+         cxcoutEHF << "Found unknown XML attribute in Measurement: " << curAttrName << "\n";
-+         throw hf_exc();
-       }
--      //poi// measurement.SetPOI( child->GetText() );
--     AddSubStrings( measurement.GetPOIList(), child->GetText() );
--    }
--
--    else if( child->GetNodeName() == TString( "ParamSetting" ) ) {
--      TListIter paramIt = child->GetAttributes();
--      TXMLAttr* curParam = 0;
--      while( ( curParam = dynamic_cast< TXMLAttr* >( paramIt() ) ) != 0 ) {
--
--	if( curParam->GetName() == TString( "" ) ) {
--	  cxcoutEHF << "Error: Found tag attribute with no name in ParamSetting" << std::endl;
--	  throw hf_exc();
--	}
--	else if( curParam->GetName() == TString( "Const" ) ) {
--	  if(curParam->GetValue()==TString("True")){
--	    // Fix here...?
--	    if( child->GetText() == NULL ) {
--	      cxcoutEHF << "Error: node: " << child->GetName()
--			<< " has no text." << std::endl;
--	      throw hf_exc();
--	    }
--	    AddSubStrings( measurement.GetConstantParams(), child->GetText() );
--	  }
--	}
--	else if( curParam->GetName() == TString( "Val" ) ) {
--	  double val = atof(curParam->GetValue());
--	  if( child->GetText() == NULL ) {
--	    cxcoutEHF << "Error: node: " << child->GetName()
--		      << " has no text." << std::endl;
--	    throw hf_exc();
--	  }
--	  std::vector<std::string> child_nodes = GetChildrenFromString(child->GetText());
--	  for(unsigned int i = 0; i < child_nodes.size(); ++i) {
--	    measurement.SetParamValue( child_nodes.at(i), val);
--	  }
--	  // AddStringValPairToMap( measurement.GetParamValues(), val, child->GetText() );
--	}
--	else {
--	  cxcoutEHF << "Found tag attribute with unknown name in ParamSetting: "
--		    << curAttr->GetName() << std::endl;
--	  throw hf_exc();
--	}
-+   } // End Loop over attributes
-+
-+   // Then, get the properties of the children nodes
-+   TXMLNode *child = node->GetChildren();
-+   while (child != nullptr) {
-+      const std::string childName(child->GetName()), childNodeName(child->GetNodeName()), childText(child->GetText());
-+      if (childNodeName.empty()) {
-+         cxcoutEHF << "Found XML child node of Measurement with no name\n";
-+         throw hf_exc();
-+      } else if (childNodeName == "POI") {
-+         if (childText == "") {
-+            cxcoutEHF << "Error: node: " << childName << " has no text.\n";
-+            throw hf_exc();
-+         }
-+         // poi // measurement.SetPOI(childText);
-+         AddSubStrings(measurement.GetPOIList(), childText);
-+      } else if (childNodeName == "ParamSetting") {
-+         TListIter paramIt = child->GetAttributes();
-+         TXMLAttr *curParam = nullptr;
-+         while ((/**/ curParam = dynamic_cast<TXMLAttr *>(paramIt()) /**/) != nullptr) {
-+            // curParam is guaranteed non-null above
-+            const std::string curParamName(curParam->GetName());
-+            if (curParamName.empty()) {
-+               cxcoutEHF << "Error: Found tag attribute with no name in ParamSetting\n";
-+               throw hf_exc();
-+            } else if (curParamName == "Const") {
-+               if (curParam->GetValue() == TString("True")) {
-+                  // Fix here...?
-+                  if (childText.empty()) {
-+                     cxcoutEHF << "Error: node: " << childName << " has no text.\n";
-+                     throw hf_exc();
-+                  }
-+                  AddSubStrings(measurement.GetConstantParams(), childText);
-+               }
-+            } else if (curParamName == "Val") {
-+               double val = atof(curParam->GetValue());
-+               if (childText.empty()) {
-+                  cxcoutEHF << "Error: node: " << childName << " has no text.\n";
-+                  throw hf_exc();
-+               }
-+               std::vector<std::string> child_nodes = GetChildrenFromString(childText);
-+               for (size_t i = 0; i < child_nodes.size(); ++i) {
-+                  measurement.SetParamValue(child_nodes.at(i), val);
-+               }
-+            } else {
-+               cxcoutEHF << "Found tag attribute with unknown name in ParamSetting: " << curParamName << "\n";
-+               throw hf_exc();
-+            }
-+         }
-+      } else if (childNodeName == "Asimov") {
-+         // Now, create and configure an asimov object
-+         // and add it to the measurement
-+         RooStats::HistFactory::Asimov asimov;
-+         std::string ParamFixString;
-+
-+         // Loop over attributes
-+         attribIt = child->GetAttributes();
-+         curAttr = nullptr;
-+         while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
-+            const std::string curAttrName(curAttr->GetName()), curAttrValue(curAttr->GetValue());
-+            if (curAttrName.empty()) {
-+               cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm\n";
-+               throw hf_exc();
-+            } else if (curAttrName == "Name") {
-+               asimov.SetName(curAttrValue);
-+            } else if (curAttrName == "FixParams") {
-+               ParamFixString = curAttrValue;
-+            } else {
-+               cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: " << curAttrName << "\n";
-+               throw hf_exc();
-+            }
-+         }
-+
-+         // Add any parameters to the asimov dataset
-+         // to be fixed during the fitting and dataset generation
-+         if (ParamFixString.empty()) {
-+            cxcoutWHF << "Warning: Asimov Dataset with name: " << asimov.GetName()
-+                      << " added, but no parameters are set to be fixed\n";
-+         } else {
-+            AddParamsToAsimov(asimov, ParamFixString);
-+         }
-+         measurement.AddAsimovDataset(asimov);
-+      } else if (childNodeName == "ConstraintTerm") {
-+         std::vector<string> syst;
-+         std::string type = "";
-+         double rel = 0;
-+
-+         // Get the list of parameters in this tag:
-+         if (childText.empty()) {
-+            cxcoutEHF << "Error: node: " << childName << " has no text\n";
-+            throw hf_exc();
-+         }
-+         AddSubStrings(syst, childText);
-+
-+         // Now, loop over this tag's attributes
-+         attribIt = child->GetAttributes();
-+         curAttr = nullptr;
-+         while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
-+            const std::string curAttrName(curAttr->GetName()), curAttrValue(curAttr->GetValue());
-+            if (curAttrName.empty()) {
-+               cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm\n";
-+               throw hf_exc();
-+            } else if (curAttrName == "Type") {
-+               type = curAttrValue;
-+            } else if (curAttrName == "RelativeUncertainty") {
-+               rel = std::stof(curAttrValue);
-+            } else {
-+               cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: " << curAttrName << "\n";
-+               throw hf_exc();
-+            }
-+         } // End Loop over tag attributes
-+
-+         // Now, fill the maps, depending on the type:
-+         if (rel != 0) {
-+            if (type == "Gamma") {
-+               for (const auto &isyst : syst) {
-+                  // Fix Here...?
-+                  measurement.GetGammaSyst()[isyst] = rel;
-+               }
-+            } else if (type == "Uniform") {
-+               for (const auto &isyst : syst) {
-+                  // Fix Here...?
-+                  measurement.GetUniformSyst()[isyst] = rel;
-+               }
-+            } else if (type == "LogNormal") {
-+               for (const auto &isyst : syst) {
-+                  // Fix Here...?
-+                  measurement.GetLogNormSyst()[isyst] = rel;
-+               }
-+            }
-+         } else if (type == "NoConstraint") {
-+            for (const auto &isyst : syst) {
-+               // Fix Here...?
-+               measurement.GetNoSyst()[isyst] = 1.0; // MB : dummy value
-+            }
-+         } else {
-+            // only Gamma, Uniform, LogNormal and NoConstraint are valid types
-+            cxcoutEHF << "Error: Encountered unknown type for ConstraintTerm: " << type << "\n";
-+            throw hf_exc();
-+         }
-+         // End adding of Constraint terms
-+      } else if (IsAcceptableNode(child)) {
-+         /* do nothing */
-+      } else {
-+         cxcoutEHF << "Found XML child of Measurement with unknown name: " << childNodeName << "\n";
-+         throw hf_exc();
-       }
--    }
--
--    else if( child->GetNodeName() == TString( "Asimov" ) ) {
--
--      //std::string name;
--      //std::map<string, double> fixedParams;
-+      child = child->GetNextNode();
-+   }
- 
--      // Now, create and configure an asimov object
--      // and add it to the measurement
--      RooStats::HistFactory::Asimov asimov;
--      std::string ParamFixString;
--
--      // Loop over attributes
--      attribIt = child->GetAttributes();
--      curAttr = 0;
--      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
--	
--	if( curAttr->GetName() == TString( "" ) ) {
--	  cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
--	  throw hf_exc();
--	}
--
--	else if( curAttr->GetName() == TString( "Name" ) ) {
--	  std::string name = curAttr->GetValue();
--	  asimov.SetName( name );
--	}
--
--	else if( curAttr->GetName() == TString( "FixParams" ) ) {
--	  ParamFixString = curAttr->GetValue();
--	  //std::map<std::string, double> fixedParams = ExtractParamMapFromString(FixParamList);
--	  //asimov.GetFixedParams() = fixedParams;
--	}
--
--	else {
--	  cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: "
--		    << curAttr->GetName() << std::endl;
--	  throw hf_exc();
--	}
--
--      }
--
--      // Add any parameters to the asimov dataset
--      // to be fixed during the fitting and dataset generation
--      if( ParamFixString=="" ) {
--	cxcoutWHF << "Warning: Asimov Dataset with name: " << asimov.GetName()
--		  << " added, but no parameters are set to be fixed" << std::endl;
--      }
--      else {
--	AddParamsToAsimov( asimov, ParamFixString );
--      }
--      
--      measurement.AddAsimovDataset( asimov );
--
--    }
--
--    else if( child->GetNodeName() == TString( "ConstraintTerm" ) ) {
--      vector<string> syst; 
--      string type = ""; 
--      double rel = 0;
--
--      map<string,double> gammaSyst;
--      map<string,double> uniformSyst;
--      map<string,double> logNormSyst;
--
--      // Get the list of parameters in this tag:
--      if( child->GetText() == NULL ) {
--	cxcoutEHF << "Error: node: " << child->GetName()
--		  << " has no text." << std::endl;
--	throw hf_exc();
--      }
--      AddSubStrings(syst, child->GetText());
--
--      // Now, loop over this tag's attributes
--      attribIt = child->GetAttributes();
--      curAttr = 0;
--      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
--
--	if( curAttr->GetName() == TString( "" ) ) {
--	  cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
--	  throw hf_exc();
--	}
--
--	else if( curAttr->GetName() == TString( "Type" ) ) {
--	  type = curAttr->GetValue();
--	}
--
--	else if( curAttr->GetName() == TString( "RelativeUncertainty" ) ) {
--	  rel = atof(curAttr->GetValue());
--	}
--
--	else {
--	  cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: "
--		    << curAttr->GetName() << std::endl;
--	  throw hf_exc();
--	}
--
--      } // End Loop over tag attributes
--
--
--      // Now, fill the maps, depending on the type:
--
--      // Check that the type is in the correct form:
--      if( ! (type=="Gamma"     || type=="Uniform" || 
--	     type=="LogNormal" || type=="NoConstraint") ) {
--	cxcoutEHF << "Error: Encountered unknown type for ConstraintTerm: " << type << std::endl;
--	throw hf_exc();
--      }
--
--      if (type=="Gamma" && rel!=0) {
--	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
--	  // Fix Here...?
--	  measurement.GetGammaSyst()[(*it).c_str()] = rel;
--	}
--      }
--	
--      if (type=="Uniform" && rel!=0) {
--	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
--	  // Fix Here...?
--	  measurement.GetUniformSyst()[(*it).c_str()] = rel;
--	}
--      }
--	
--      if (type=="LogNormal" && rel!=0) {
--	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
--	  // Fix Here...?
--	  measurement.GetLogNormSyst()[(*it).c_str()] = rel;
--	}
--      }
--	
--      if (type=="NoConstraint") {
--	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
--	  // Fix Here...?
--	  measurement.GetNoSyst()[(*it).c_str()] = 1.0; // MB : dummy value
--	}
--      }
--    } // End adding of Constraint terms
--
--
--    else if( IsAcceptableNode( child ) ) { ; }
--
--    else {
--    cxcoutEHF << "Found XML child of Measurement with unknown name: " << child->GetNodeName()
--		<< std::endl;
--      throw hf_exc();
--    }
--
--    child = child->GetNextNode();
--  }
--
--  measurement.PrintTree(oocoutI(static_cast<TObject*>(nullptr), HistFactory));
--
--  return measurement;
-+   measurement.PrintTree(oocoutI(static_cast<TObject *>(nullptr), HistFactory));
- 
-+   return measurement;
- }
- 
--
--
- HistFactory::Channel ConfigParser::ParseChannelXMLFile( string filen ) {
- 
-   /*
-diff --git a/roofit/roofitcore/inc/RooAbsCollection.h b/roofit/roofitcore/inc/RooAbsCollection.h
-index 5c2d733a06..0ea54abd33 100644
---- a/roofit/roofitcore/inc/RooAbsCollection.h
-+++ b/roofit/roofitcore/inc/RooAbsCollection.h
-@@ -179,14 +179,17 @@ public:
-     removeAll();
-   }
- 
--  inline Int_t getSize() const { 
--    // Return the number of elements in the collection
--    return _list.size();
-+  inline Int_t getSize() const R__SUGGEST_ALTERNATIVE("size() returns true size.")
-+  {
-+     // Return the number of elements in the collection
-+     return _list.size();
-   }
--  
--  inline RooAbsArg *first() const { 
--    // Return the first element in this collection
--    return _list.front();
-+
-+  inline RooAbsArg *first() const
-+  {
-+     // Return the first element in this collection
-+     // calling front on an empty container is undefined
-+     return _list.empty() ? nullptr : _list.front();
-   }
- 
-   RooAbsArg * operator[](Storage_t::size_type i) const {
-diff --git a/roofit/roofitcore/src/RooAddModel.cxx b/roofit/roofitcore/src/RooAddModel.cxx
-index cc72e8e55a..ce072f9eb7 100644
---- a/roofit/roofitcore/src/RooAddModel.cxx
-+++ b/roofit/roofitcore/src/RooAddModel.cxx
-@@ -97,63 +97,71 @@ RooAddModel::RooAddModel(const char *name, const char *title, const RooArgList&
-   _coefList("!coefficients","List of coefficients",this),
-   _haveLastCoef(kFALSE),
-   _allExtendable(kFALSE)
--{ 
--  if (inPdfList.getSize()>inCoefList.getSize()+1) {
--    coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() 
--			  << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
--    assert(0) ;
--  }
-- 
--  // Constructor with N PDFs and N or N-1 coefs
--  TIterator* pdfIter = inPdfList.createIterator() ;
--  TIterator* coefIter = inCoefList.createIterator() ;
--  RooAbsPdf* pdf ;
--  RooAbsReal* coef ;
--
--  while((coef = (RooAbsPdf*)coefIter->Next())) {
--    pdf = (RooAbsPdf*) pdfIter->Next() ;
--    if (!pdf) {
--      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() 
--			    << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
--      assert(0) ;
--    }
--    if (!dynamic_cast<RooAbsReal*>(coef)) {
--      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") coefficient " << coef->GetName() << " is not of type RooAbsReal, ignored" << endl ;
--      continue ;
--    }
--    if (!dynamic_cast<RooAbsReal*>(pdf)) {
--      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") pdf " << pdf->GetName() << " is not of type RooAbsPdf, ignored" << endl ;
--      continue ;
--    }
--    _pdfList.add(*pdf) ;
--    _coefList.add(*coef) ;    
--  }
--
--  pdf = (RooAbsPdf*) pdfIter->Next() ;
--  if (pdf) {
--    if (!dynamic_cast<RooAbsReal*>(pdf)) {
--      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") last pdf " << coef->GetName() << " is not of type RooAbsPdf, fatal error" << endl ;
--      assert(0) ;
--    }
--    _pdfList.add(*pdf) ;  
--  } else {
--    _haveLastCoef=kTRUE ;
--  }
--
--  delete pdfIter ;
--  delete coefIter  ;
--
--  _coefCache = new Double_t[_pdfList.getSize()] ;
--  _coefErrCount = _errorCount ;
-+{
-+   if (inPdfList.size() > inCoefList.size() + 1 || inPdfList.size() < inCoefList.size()) {
-+      std::stringstream msgSs;
-+      msgSs << "RooAddModel::RooAddModel(" << GetName()
-+            << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1";
-+      const std::string msgStr = msgSs.str();
-+      coutE(InputArguments) << msgStr << "\n";
-+      throw std::runtime_error(msgStr);
-+   }
-+
-+   // Constructor with N PDFs and N or N-1 coefs
-+   auto pdfIter = inPdfList.fwdIterator();
-+
-+   for (auto const &coef : inCoefList) {
-+      auto pdf = pdfIter.next();
-+      if (!pdf) {
-+         std::stringstream msgSs;
-+         msgSs << "RooAddModel::RooAddModel(" << GetName()
-+               << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1";
-+         const std::string msgStr = msgSs.str();
-+         coutE(InputArguments) << msgStr << "\n";
-+         throw std::runtime_error(msgStr);
-+      }
-+      if (!coef) {
-+         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName()
-+                               << ") encountered and undefined coefficient, ignored\n";
-+         continue;
-+      }
-+      if (!dynamic_cast<RooAbsReal *>(coef)) {
-+         auto coefName = coef->GetName();
-+         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") coefficient "
-+                               << (coefName != nullptr ? coefName : "") << " is not of type RooAbsReal, ignored\n";
-+         continue;
-+      }
-+      if (!dynamic_cast<RooAbsPdf *>(pdf)) {
-+         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") pdf " << pdf->GetName()
-+                               << " is not of type RooAbsPdf, ignored\n";
-+         continue;
-+      }
-+      _pdfList.add(*pdf);
-+      _coefList.add(*coef);
-+   }
-+
-+   if (auto pdf = pdfIter.next()) {
-+      if (!dynamic_cast<RooAbsPdf *>(pdf)) {
-+         std::stringstream msgSs;
-+         msgSs << "RooAddModel::RooAddModel(" << GetName() << ") last pdf " << pdf->GetName()
-+               << " is not of type RooAbsPdf, fatal error";
-+         const std::string msgStr = msgSs.str();
-+         coutE(InputArguments) << msgStr << "\n";
-+         throw std::runtime_error(msgStr);
-+      }
-+      _pdfList.add(*pdf);
-+   } else {
-+      _haveLastCoef = kTRUE;
-+   }
- 
--  if (ownPdfList) {
--    _ownedComps.addOwned(_pdfList) ;
--  }
-+   _coefCache = new Double_t[_pdfList.getSize()];
-+   _coefErrCount = _errorCount;
- 
-+   if (ownPdfList) {
-+      _ownedComps.addOwned(_pdfList);
-+   }
- }
- 
--
--
- ////////////////////////////////////////////////////////////////////////////////
- /// Copy constructor
- 
-diff --git a/roofit/roofitcore/src/RooDataHist.cxx b/roofit/roofitcore/src/RooDataHist.cxx
-index 5bd49acdbe..3b132c7766 100644
---- a/roofit/roofitcore/src/RooDataHist.cxx
-+++ b/roofit/roofitcore/src/RooDataHist.cxx
-@@ -573,10 +573,17 @@ void RooDataHist::importDHistSet(const RooArgList& /*vars*/, RooCategory& indexC
- void RooDataHist::_adjustBinning(RooRealVar &theirVar, const TAxis &axis,
-     RooRealVar *ourVar, Int_t *offset)
- {
--  if (!dynamic_cast<RooRealVar*>(ourVar)) {
--    coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVar->GetName() << " must be real" << endl ;
--    assert(0) ;
--  }
-+   // RooRealVar is derived from RooAbsRealLValue which is itself
-+   // derived from RooAbsReal and a virtual class RooAbsLValue
-+   // supplying setter fuctions, check if ourVar is indeed derived
-+   // as real
-+   if (!dynamic_cast<RooAbsReal *>(ourVar)) {
-+      std::string ourVarName(ourVar->GetName());
-+      coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVarName
-+                            << " must be real\n";
-+      throw std::logic_error("Incorrect type object (" + ourVarName +
-+                             ") passed as argument to RooDataHist::_adjustBinning. Please report this issue.");
-+   }
- 
-   const double xlo = theirVar.getMin();
-   const double xhi = theirVar.getMax();
-diff --git a/roofit/roofitcore/src/RooRealSumFunc.cxx b/roofit/roofitcore/src/RooRealSumFunc.cxx
-index cbff7435b6..6e9fa40f5d 100644
---- a/roofit/roofitcore/src/RooRealSumFunc.cxx
-+++ b/roofit/roofitcore/src/RooRealSumFunc.cxx
-@@ -152,8 +152,9 @@ RooRealSumFunc::RooRealSumFunc(const char *name, const char *title, const RooArg
-    func = (RooAbsReal *)funcIter->Next();
-    if (func) {
-       if (!dynamic_cast<RooAbsReal *>(func)) {
--         coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func " << coef->GetName()
--                               << " is not of type RooAbsReal, fatal error" << endl;
-+         auto funcName = func->GetName();
-+         coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func "
-+                               << (funcName != nullptr ? funcName : "") << " is not of type RooAbsReal, fatal error\n";
-          assert(0);
-       }
-       _funcList.add(*func);
-diff --git a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
-index 2465abf308..1724805382 100644
---- a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
-+++ b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
-@@ -145,6 +145,9 @@ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyInput(TMatrixT<Real_t> &m
- template <>
- void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyOutput(TMatrixT<Real_t> &matrix, IndexIterator_t sampleIterator)
- {
-+   // calling front on an empty container is undfined
-+   if (std::get<0>(fData).empty())
-+      return;
-    Event *event = std::get<0>(fData).front();
-    const DataSetInfo &info = std::get<1>(fData);
-    Int_t m = matrix.GetNrows();
-@@ -177,6 +180,9 @@ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyOutput(TMatrixT<Real_t> &
- template <>
- void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyWeights(TMatrixT<Real_t> &matrix, IndexIterator_t sampleIterator)
- {
-+   // calling front on an empty container is undfined
-+   if (std::get<0>(fData).empty())
-+      return;
-    Event *event = std::get<0>(fData).front();
-    for (Int_t i = 0; i < matrix.GetNrows(); i++) {
-       Int_t sampleIndex = *sampleIterator++;
-@@ -190,6 +196,9 @@ template <>
- void TDataLoader<TMVAInput_t, TReference<Double_t>>::CopyInput(TMatrixT<Double_t> &matrix,
-                                                                IndexIterator_t sampleIterator)
- {
-+   // calling front on an empty container is undfined
-+   if (std::get<0>(fData).empty())
-+      return;
-    Event *event = std::get<0>(fData).front();
-    Int_t m = matrix.GetNrows();
-    Int_t n = event->GetNVariables();
-@@ -210,6 +219,9 @@ template <>
- void TDataLoader<TMVAInput_t, TReference<Double_t>>::CopyOutput(TMatrixT<Double_t> &matrix,
-                                                                 IndexIterator_t sampleIterator)
- {
-+   // calling front on an empty container is undfined
-+   if (std::get<0>(fData).empty())
-+      return;
-    Event *event = std::get<0>(fData).front();
-    const DataSetInfo &info = std::get<1>(fData);
-    Int_t m = matrix.GetNrows();

Copied: root/repos/community-testing-x86_64/9271.patch (from rev 1054473, root/trunk/9271.patch)
===================================================================
--- 9271.patch	                        (rev 0)
+++ 9271.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,753 @@
+From ef095d953b7632654dcd93aa3151508dfefa22d3 Mon Sep 17 00:00:00 2001
+From: Konstantin Gizdov <kgizdov at gmail.com>
+Date: Thu, 11 Nov 2021 01:57:36 +0200
+Subject: [PATCH] backport 'address some -Wnonnull issue and follow-up
+ improvements' to v6-24-00-patches
+
+RooFit::HistFactory::ConfigParser: fix null dereferences, improve logic, modernise, fix some edge cases, optimise performance
+RooAddModel: fix null dereferences
+TMVA::DataLoader: calling .front() in an empty container is undefined, fix also null ptr dereference
+RooDataHist and RooRealSumFunc fixes for null dereferences
+RooAbsCollection: safer Int_t getSize() and RooAbsArg* front(), offer alternatives
+RooDataHist::_adjustBinning throw std::logic_error when pass type is not derived from real
+clang-format applied
+---
+ roofit/histfactory/src/ConfigParser.cxx       | 469 ++++++++----------
+ roofit/roofitcore/inc/RooAbsCollection.h      |  17 +-
+ roofit/roofitcore/src/RooAddModel.cxx         | 114 +++--
+ roofit/roofitcore/src/RooDataHist.cxx         |  15 +-
+ roofit/roofitcore/src/RooRealSumFunc.cxx      |   5 +-
+ .../Architectures/Reference/DataLoader.cxx    |  12 +
+ 6 files changed, 299 insertions(+), 333 deletions(-)
+
+diff --git a/roofit/histfactory/src/ConfigParser.cxx b/roofit/histfactory/src/ConfigParser.cxx
+index 227a16b6a0a9..3ec032579037 100644
+--- a/roofit/histfactory/src/ConfigParser.cxx
++++ b/roofit/histfactory/src/ConfigParser.cxx
+@@ -260,280 +260,215 @@ std::vector< RooStats::HistFactory::Measurement > ConfigParser::GetMeasurementsF
+   return measurement_list;
+ 
+ }
+-									     
+ 
+-HistFactory::Measurement ConfigParser::CreateMeasurementFromDriverNode( TXMLNode* node ) {
+-
+-
+-  HistFactory::Measurement measurement;
+-
+-  // Set the default values:
+-  measurement.SetLumi( 1.0 );
+-  measurement.SetLumiRelErr( .10 );
+-  measurement.SetBinLow( 0 );
+-  measurement.SetBinHigh( 1 );
+-  measurement.SetExportOnly( false );
+-
+-  cxcoutIHF << "Creating new measurement: " << std::endl;
+-
+-  // First, get the attributes of the node
+-  TListIter attribIt = node->GetAttributes();
+-  TXMLAttr* curAttr = 0;
+-  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
+-
+-    if( curAttr->GetName() == TString( "" ) ) {
+-      cxcoutEHF << "Found XML attribute in Measurement with no name"  << std::endl;
+-      // ADD Output Here
+-      throw hf_exc();
+-    }
+-    else if( curAttr->GetName() == TString( "Name" ) ) {
+-      //rowTitle=curAttr->GetValue();
+-      measurement.SetName(  curAttr->GetValue() );
+-      //measurement.OutputFileName = outputFileNamePrefix+"_"+rowTitle+".root";
+-    }
+-    else if( curAttr->GetName() == TString( "Lumi" ) ) {
+-      measurement.SetLumi( atof(curAttr->GetValue()) );
+-    }
+-    else if( curAttr->GetName() == TString( "LumiRelErr" ) ) {
+-      measurement.SetLumiRelErr( atof(curAttr->GetValue()) );
+-    }
+-    else if( curAttr->GetName() == TString( "BinLow" ) ) {
+-      measurement.SetBinLow( atoi(curAttr->GetValue()) );
+-    }
+-    else if( curAttr->GetName() == TString( "BinHigh" ) ) {
+-      measurement.SetBinHigh( atoi(curAttr->GetValue()) );
+-    }
+-    else if( curAttr->GetName() == TString( "Mode" ) ) {
+-      cout <<"\n INFO: Mode attribute is deprecated, will ignore\n"<<endl;
+-    }
+-    else if( curAttr->GetName() == TString( "ExportOnly" ) ) {
+-      measurement.SetExportOnly( CheckTrueFalse(curAttr->GetValue(),"Measurement") );
+-    }
+-
+-    else {
+-      cxcoutEHF << "Found unknown XML attribute in Measurement: " << curAttr->GetName()
+-		<< std::endl;
+-      throw hf_exc();
+-    }
+-
+-  } // End Loop over attributes
+-
+-
+-  // Then, get the properties of the children nodes
+-  TXMLNode* child = node->GetChildren();
+-  while( child != 0 ) {
+-  
+-    if( child->GetNodeName() == TString( "" ) ) {
+-      cxcoutEHF << "Found XML child node of Measurement with no name"  << std::endl;
+-      throw hf_exc();
+-    }
+-
+-    else if( child->GetNodeName() == TString( "POI" ) ) {
+-      if( child->GetText() == NULL ) {
+-	cxcoutEHF << "Error: node: " << child->GetName()
+-		  << " has no text." << std::endl;
+-	throw hf_exc();
++HistFactory::Measurement ConfigParser::CreateMeasurementFromDriverNode(TXMLNode *node)
++{
++   // construct and return at bottom
++   HistFactory::Measurement measurement;
++
++   // safety for public functions
++   if (node == nullptr) {
++      cxcoutWHF << "Input driver node is undefined, ignoring\n";
++      return measurement;
++   }
++
++   // Set the default values:
++   measurement.SetLumi(1.0);
++   measurement.SetLumiRelErr(.10);
++   measurement.SetBinLow(0);
++   measurement.SetBinHigh(1);
++   measurement.SetExportOnly(false);
++
++   cxcoutIHF << "Creating new measurement:\n";
++
++   // First, get the attributes of the node
++   TListIter attribIt = node->GetAttributes();
++   TXMLAttr *curAttr = nullptr;
++   while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
++      // curAttr is guaranteed non-null above
++      const std::string curAttrName(curAttr->GetName() ? curAttr->GetName() : ""),
++         curAttrValue(curAttr->GetValue() ? curAttr->GetValue() : "");
++      if (curAttrName == "") {
++         cxcoutEHF << "Found XML attribute in Measurement with no name.\n";
++         // ADD Output Here
++         throw hf_exc();
++      } else if (curAttrName == "Name") {
++         measurement.SetName(curAttrValue.c_str());
++      } else if (curAttrName == "Lumi") {
++         measurement.SetLumi(std::stof(curAttrValue));
++      } else if (curAttrName == "LumiRelErr") {
++         measurement.SetLumiRelErr(std::stof(curAttrValue));
++      } else if (curAttrName == "BinLow") {
++         measurement.SetBinLow(std::stoi(curAttrValue));
++      } else if (curAttrName == "BinHigh") {
++         measurement.SetBinHigh(std::stoi(curAttrValue));
++      } else if (curAttrName == "Mode") {
++         cout << "\n INFO: Mode attribute is deprecated and no longer supported, will ignore\n";
++      } else if (curAttrName == "ExportOnly") {
++         measurement.SetExportOnly(CheckTrueFalse(curAttrValue, "Measurement"));
++      } else {
++         cxcoutEHF << "Found unknown XML attribute in Measurement: " << curAttrName << "\n";
++         throw hf_exc();
+       }
+-      //poi// measurement.SetPOI( child->GetText() );
+-     AddSubStrings( measurement.GetPOIList(), child->GetText() );
+-    }
+-
+-    else if( child->GetNodeName() == TString( "ParamSetting" ) ) {
+-      TListIter paramIt = child->GetAttributes();
+-      TXMLAttr* curParam = 0;
+-      while( ( curParam = dynamic_cast< TXMLAttr* >( paramIt() ) ) != 0 ) {
+-
+-	if( curParam->GetName() == TString( "" ) ) {
+-	  cxcoutEHF << "Error: Found tag attribute with no name in ParamSetting" << std::endl;
+-	  throw hf_exc();
+-	}
+-	else if( curParam->GetName() == TString( "Const" ) ) {
+-	  if(curParam->GetValue()==TString("True")){
+-	    // Fix here...?
+-	    if( child->GetText() == NULL ) {
+-	      cxcoutEHF << "Error: node: " << child->GetName()
+-			<< " has no text." << std::endl;
+-	      throw hf_exc();
+-	    }
+-	    AddSubStrings( measurement.GetConstantParams(), child->GetText() );
+-	  }
+-	}
+-	else if( curParam->GetName() == TString( "Val" ) ) {
+-	  double val = atof(curParam->GetValue());
+-	  if( child->GetText() == NULL ) {
+-	    cxcoutEHF << "Error: node: " << child->GetName()
+-		      << " has no text." << std::endl;
+-	    throw hf_exc();
+-	  }
+-	  std::vector<std::string> child_nodes = GetChildrenFromString(child->GetText());
+-	  for(unsigned int i = 0; i < child_nodes.size(); ++i) {
+-	    measurement.SetParamValue( child_nodes.at(i), val);
+-	  }
+-	  // AddStringValPairToMap( measurement.GetParamValues(), val, child->GetText() );
+-	}
+-	else {
+-	  cxcoutEHF << "Found tag attribute with unknown name in ParamSetting: "
+-		    << curAttr->GetName() << std::endl;
+-	  throw hf_exc();
+-	}
++   } // End Loop over attributes
++
++   // Then, get the properties of the children nodes
++   TXMLNode *child = node->GetChildren();
++   while (child != nullptr) {
++      const std::string childName(child->GetName() ? child->GetName() : ""),
++         childNodeName(child->GetNodeName() ? child->GetNodeName() : ""),
++         childText(child->GetText() ? child->GetText() : "");
++      if (childNodeName.empty()) {
++         cxcoutEHF << "Found XML child node of Measurement with no name\n";
++         throw hf_exc();
++      } else if (childNodeName == "POI") {
++         if (childText == "") {
++            cxcoutEHF << "Error: node: " << childName << " has no text.\n";
++            throw hf_exc();
++         }
++         // poi // measurement.SetPOI(childText);
++         AddSubStrings(measurement.GetPOIList(), childText);
++      } else if (childNodeName == "ParamSetting") {
++         TListIter paramIt = child->GetAttributes();
++         TXMLAttr *curParam = nullptr;
++         while ((/**/ curParam = dynamic_cast<TXMLAttr *>(paramIt()) /**/) != nullptr) {
++            // curParam is guaranteed non-null above
++            const std::string curParamName(curParam->GetName() ? curParam->GetName() : "");
++            if (curParamName.empty()) {
++               cxcoutEHF << "Error: Found tag attribute with no name in ParamSetting\n";
++               throw hf_exc();
++            } else if (curParamName == "Const") {
++               if (curParam->GetValue() == TString("True")) {
++                  // Fix here...?
++                  if (childText.empty()) {
++                     cxcoutEHF << "Error: node: " << childName << " has no text.\n";
++                     throw hf_exc();
++                  }
++                  AddSubStrings(measurement.GetConstantParams(), childText);
++               }
++            } else if (curParamName == "Val") {
++               double val = atof(curParam->GetValue());
++               if (childText.empty()) {
++                  cxcoutEHF << "Error: node: " << childName << " has no text.\n";
++                  throw hf_exc();
++               }
++               std::vector<std::string> child_nodes = GetChildrenFromString(childText);
++               for (size_t i = 0; i < child_nodes.size(); ++i) {
++                  measurement.SetParamValue(child_nodes.at(i), val);
++               }
++            } else {
++               cxcoutEHF << "Found tag attribute with unknown name in ParamSetting: " << curParamName << "\n";
++               throw hf_exc();
++            }
++         }
++      } else if (childNodeName == "Asimov") {
++         // Now, create and configure an asimov object
++         // and add it to the measurement
++         RooStats::HistFactory::Asimov asimov;
++         std::string ParamFixString;
++
++         // Loop over attributes
++         attribIt = child->GetAttributes();
++         curAttr = nullptr;
++         while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
++            const std::string curAttrName(curAttr->GetName() ? curAttr->GetName() : ""),
++               curAttrValue(curAttr->GetValue() ? curAttr->GetValue() : "");
++            if (curAttrName.empty()) {
++               cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm\n";
++               throw hf_exc();
++            } else if (curAttrName == "Name") {
++               asimov.SetName(curAttrValue);
++            } else if (curAttrName == "FixParams") {
++               ParamFixString = curAttrValue;
++            } else {
++               cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: " << curAttrName << "\n";
++               throw hf_exc();
++            }
++         }
++
++         // Add any parameters to the asimov dataset
++         // to be fixed during the fitting and dataset generation
++         if (ParamFixString.empty()) {
++            cxcoutWHF << "Warning: Asimov Dataset with name: " << asimov.GetName()
++                      << " added, but no parameters are set to be fixed\n";
++         } else {
++            AddParamsToAsimov(asimov, ParamFixString);
++         }
++         measurement.AddAsimovDataset(asimov);
++      } else if (childNodeName == "ConstraintTerm") {
++         std::vector<string> syst;
++         std::string type = "";
++         double rel = 0;
++
++         // Get the list of parameters in this tag:
++         if (childText.empty()) {
++            cxcoutEHF << "Error: node: " << childName << " has no text\n";
++            throw hf_exc();
++         }
++         AddSubStrings(syst, childText);
++
++         // Now, loop over this tag's attributes
++         attribIt = child->GetAttributes();
++         curAttr = nullptr;
++         while ((/**/ curAttr = dynamic_cast<TXMLAttr *>(attribIt()) /**/) != nullptr) {
++            const std::string curAttrName(curAttr->GetName() ? curAttr->GetName() : ""),
++               curAttrValue(curAttr->GetValue() ? curAttr->GetValue() : "");
++            if (curAttrName.empty()) {
++               cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm\n";
++               throw hf_exc();
++            } else if (curAttrName == "Type") {
++               type = curAttrValue;
++            } else if (curAttrName == "RelativeUncertainty") {
++               rel = std::stof(curAttrValue);
++            } else {
++               cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: " << curAttrName << "\n";
++               throw hf_exc();
++            }
++         } // End Loop over tag attributes
++
++         // Now, fill the maps, depending on the type:
++         if (rel != 0) {
++            if (type == "Gamma") {
++               for (const auto &isyst : syst) {
++                  // Fix Here...?
++                  measurement.GetGammaSyst()[isyst] = rel;
++               }
++            } else if (type == "Uniform") {
++               for (const auto &isyst : syst) {
++                  // Fix Here...?
++                  measurement.GetUniformSyst()[isyst] = rel;
++               }
++            } else if (type == "LogNormal") {
++               for (const auto &isyst : syst) {
++                  // Fix Here...?
++                  measurement.GetLogNormSyst()[isyst] = rel;
++               }
++            }
++         } else if (type == "NoConstraint") {
++            for (const auto &isyst : syst) {
++               // Fix Here...?
++               measurement.GetNoSyst()[isyst] = 1.0; // MB : dummy value
++            }
++         } else {
++            // only Gamma, Uniform, LogNormal and NoConstraint are valid types
++            cxcoutEHF << "Error: Encountered unknown type for ConstraintTerm: " << type << "\n";
++            throw hf_exc();
++         }
++         // End adding of Constraint terms
++      } else if (IsAcceptableNode(child)) {
++         /* do nothing */
++      } else {
++         cxcoutEHF << "Found XML child of Measurement with unknown name: " << childNodeName << "\n";
++         throw hf_exc();
+       }
+-    }
+-
+-    else if( child->GetNodeName() == TString( "Asimov" ) ) {
+-
+-      //std::string name;
+-      //std::map<string, double> fixedParams;
++      child = child->GetNextNode();
++   }
+ 
+-      // Now, create and configure an asimov object
+-      // and add it to the measurement
+-      RooStats::HistFactory::Asimov asimov;
+-      std::string ParamFixString;
+-
+-      // Loop over attributes
+-      attribIt = child->GetAttributes();
+-      curAttr = 0;
+-      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
+-	
+-	if( curAttr->GetName() == TString( "" ) ) {
+-	  cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
+-	  throw hf_exc();
+-	}
+-
+-	else if( curAttr->GetName() == TString( "Name" ) ) {
+-	  std::string name = curAttr->GetValue();
+-	  asimov.SetName( name );
+-	}
+-
+-	else if( curAttr->GetName() == TString( "FixParams" ) ) {
+-	  ParamFixString = curAttr->GetValue();
+-	  //std::map<std::string, double> fixedParams = ExtractParamMapFromString(FixParamList);
+-	  //asimov.GetFixedParams() = fixedParams;
+-	}
+-
+-	else {
+-	  cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: "
+-		    << curAttr->GetName() << std::endl;
+-	  throw hf_exc();
+-	}
+-
+-      }
+-
+-      // Add any parameters to the asimov dataset
+-      // to be fixed during the fitting and dataset generation
+-      if( ParamFixString=="" ) {
+-	cxcoutWHF << "Warning: Asimov Dataset with name: " << asimov.GetName()
+-		  << " added, but no parameters are set to be fixed" << std::endl;
+-      }
+-      else {
+-	AddParamsToAsimov( asimov, ParamFixString );
+-      }
+-      
+-      measurement.AddAsimovDataset( asimov );
+-
+-    }
+-
+-    else if( child->GetNodeName() == TString( "ConstraintTerm" ) ) {
+-      vector<string> syst; 
+-      string type = ""; 
+-      double rel = 0;
+-
+-      map<string,double> gammaSyst;
+-      map<string,double> uniformSyst;
+-      map<string,double> logNormSyst;
+-
+-      // Get the list of parameters in this tag:
+-      if( child->GetText() == NULL ) {
+-	cxcoutEHF << "Error: node: " << child->GetName()
+-		  << " has no text." << std::endl;
+-	throw hf_exc();
+-      }
+-      AddSubStrings(syst, child->GetText());
+-
+-      // Now, loop over this tag's attributes
+-      attribIt = child->GetAttributes();
+-      curAttr = 0;
+-      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
+-
+-	if( curAttr->GetName() == TString( "" ) ) {
+-	  cxcoutEHF << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
+-	  throw hf_exc();
+-	}
+-
+-	else if( curAttr->GetName() == TString( "Type" ) ) {
+-	  type = curAttr->GetValue();
+-	}
+-
+-	else if( curAttr->GetName() == TString( "RelativeUncertainty" ) ) {
+-	  rel = atof(curAttr->GetValue());
+-	}
+-
+-	else {
+-	  cxcoutEHF << "Found tag attribute with unknown name in ConstraintTerm: "
+-		    << curAttr->GetName() << std::endl;
+-	  throw hf_exc();
+-	}
+-
+-      } // End Loop over tag attributes
+-
+-
+-      // Now, fill the maps, depending on the type:
+-
+-      // Check that the type is in the correct form:
+-      if( ! (type=="Gamma"     || type=="Uniform" || 
+-	     type=="LogNormal" || type=="NoConstraint") ) {
+-	cxcoutEHF << "Error: Encountered unknown type for ConstraintTerm: " << type << std::endl;
+-	throw hf_exc();
+-      }
+-
+-      if (type=="Gamma" && rel!=0) {
+-	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
+-	  // Fix Here...?
+-	  measurement.GetGammaSyst()[(*it).c_str()] = rel;
+-	}
+-      }
+-	
+-      if (type=="Uniform" && rel!=0) {
+-	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
+-	  // Fix Here...?
+-	  measurement.GetUniformSyst()[(*it).c_str()] = rel;
+-	}
+-      }
+-	
+-      if (type=="LogNormal" && rel!=0) {
+-	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
+-	  // Fix Here...?
+-	  measurement.GetLogNormSyst()[(*it).c_str()] = rel;
+-	}
+-      }
+-	
+-      if (type=="NoConstraint") {
+-	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); ++it) {
+-	  // Fix Here...?
+-	  measurement.GetNoSyst()[(*it).c_str()] = 1.0; // MB : dummy value
+-	}
+-      }
+-    } // End adding of Constraint terms
+-
+-
+-    else if( IsAcceptableNode( child ) ) { ; }
+-
+-    else {
+-    cxcoutEHF << "Found XML child of Measurement with unknown name: " << child->GetNodeName()
+-		<< std::endl;
+-      throw hf_exc();
+-    }
+-
+-    child = child->GetNextNode();
+-  }
+-
+-  measurement.PrintTree(oocoutI(static_cast<TObject*>(nullptr), HistFactory));
+-
+-  return measurement;
++   measurement.PrintTree(oocoutI(static_cast<TObject *>(nullptr), HistFactory));
+ 
++   return measurement;
+ }
+ 
+-
+-
+ HistFactory::Channel ConfigParser::ParseChannelXMLFile( string filen ) {
+ 
+   /*
+diff --git a/roofit/roofitcore/inc/RooAbsCollection.h b/roofit/roofitcore/inc/RooAbsCollection.h
+index 5c2d733a0674..0ea54abd33b4 100644
+--- a/roofit/roofitcore/inc/RooAbsCollection.h
++++ b/roofit/roofitcore/inc/RooAbsCollection.h
+@@ -179,14 +179,17 @@ class RooAbsCollection : public TObject, public RooPrintable {
+     removeAll();
+   }
+ 
+-  inline Int_t getSize() const { 
+-    // Return the number of elements in the collection
+-    return _list.size();
++  inline Int_t getSize() const R__SUGGEST_ALTERNATIVE("size() returns true size.")
++  {
++     // Return the number of elements in the collection
++     return _list.size();
+   }
+-  
+-  inline RooAbsArg *first() const { 
+-    // Return the first element in this collection
+-    return _list.front();
++
++  inline RooAbsArg *first() const
++  {
++     // Return the first element in this collection
++     // calling front on an empty container is undefined
++     return _list.empty() ? nullptr : _list.front();
+   }
+ 
+   RooAbsArg * operator[](Storage_t::size_type i) const {
+diff --git a/roofit/roofitcore/src/RooAddModel.cxx b/roofit/roofitcore/src/RooAddModel.cxx
+index cc72e8e55aa2..ce072f9eb745 100644
+--- a/roofit/roofitcore/src/RooAddModel.cxx
++++ b/roofit/roofitcore/src/RooAddModel.cxx
+@@ -97,63 +97,71 @@ RooAddModel::RooAddModel(const char *name, const char *title, const RooArgList&
+   _coefList("!coefficients","List of coefficients",this),
+   _haveLastCoef(kFALSE),
+   _allExtendable(kFALSE)
+-{ 
+-  if (inPdfList.getSize()>inCoefList.getSize()+1) {
+-    coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() 
+-			  << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
+-    assert(0) ;
+-  }
+- 
+-  // Constructor with N PDFs and N or N-1 coefs
+-  TIterator* pdfIter = inPdfList.createIterator() ;
+-  TIterator* coefIter = inCoefList.createIterator() ;
+-  RooAbsPdf* pdf ;
+-  RooAbsReal* coef ;
+-
+-  while((coef = (RooAbsPdf*)coefIter->Next())) {
+-    pdf = (RooAbsPdf*) pdfIter->Next() ;
+-    if (!pdf) {
+-      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() 
+-			    << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
+-      assert(0) ;
+-    }
+-    if (!dynamic_cast<RooAbsReal*>(coef)) {
+-      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") coefficient " << coef->GetName() << " is not of type RooAbsReal, ignored" << endl ;
+-      continue ;
+-    }
+-    if (!dynamic_cast<RooAbsReal*>(pdf)) {
+-      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") pdf " << pdf->GetName() << " is not of type RooAbsPdf, ignored" << endl ;
+-      continue ;
+-    }
+-    _pdfList.add(*pdf) ;
+-    _coefList.add(*coef) ;    
+-  }
+-
+-  pdf = (RooAbsPdf*) pdfIter->Next() ;
+-  if (pdf) {
+-    if (!dynamic_cast<RooAbsReal*>(pdf)) {
+-      coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") last pdf " << coef->GetName() << " is not of type RooAbsPdf, fatal error" << endl ;
+-      assert(0) ;
+-    }
+-    _pdfList.add(*pdf) ;  
+-  } else {
+-    _haveLastCoef=kTRUE ;
+-  }
+-
+-  delete pdfIter ;
+-  delete coefIter  ;
+-
+-  _coefCache = new Double_t[_pdfList.getSize()] ;
+-  _coefErrCount = _errorCount ;
++{
++   if (inPdfList.size() > inCoefList.size() + 1 || inPdfList.size() < inCoefList.size()) {
++      std::stringstream msgSs;
++      msgSs << "RooAddModel::RooAddModel(" << GetName()
++            << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1";
++      const std::string msgStr = msgSs.str();
++      coutE(InputArguments) << msgStr << "\n";
++      throw std::runtime_error(msgStr);
++   }
++
++   // Constructor with N PDFs and N or N-1 coefs
++   auto pdfIter = inPdfList.fwdIterator();
++
++   for (auto const &coef : inCoefList) {
++      auto pdf = pdfIter.next();
++      if (!pdf) {
++         std::stringstream msgSs;
++         msgSs << "RooAddModel::RooAddModel(" << GetName()
++               << ") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1";
++         const std::string msgStr = msgSs.str();
++         coutE(InputArguments) << msgStr << "\n";
++         throw std::runtime_error(msgStr);
++      }
++      if (!coef) {
++         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName()
++                               << ") encountered and undefined coefficient, ignored\n";
++         continue;
++      }
++      if (!dynamic_cast<RooAbsReal *>(coef)) {
++         auto coefName = coef->GetName();
++         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") coefficient "
++                               << (coefName != nullptr ? coefName : "") << " is not of type RooAbsReal, ignored\n";
++         continue;
++      }
++      if (!dynamic_cast<RooAbsPdf *>(pdf)) {
++         coutE(InputArguments) << "RooAddModel::RooAddModel(" << GetName() << ") pdf " << pdf->GetName()
++                               << " is not of type RooAbsPdf, ignored\n";
++         continue;
++      }
++      _pdfList.add(*pdf);
++      _coefList.add(*coef);
++   }
++
++   if (auto pdf = pdfIter.next()) {
++      if (!dynamic_cast<RooAbsPdf *>(pdf)) {
++         std::stringstream msgSs;
++         msgSs << "RooAddModel::RooAddModel(" << GetName() << ") last pdf " << pdf->GetName()
++               << " is not of type RooAbsPdf, fatal error";
++         const std::string msgStr = msgSs.str();
++         coutE(InputArguments) << msgStr << "\n";
++         throw std::runtime_error(msgStr);
++      }
++      _pdfList.add(*pdf);
++   } else {
++      _haveLastCoef = kTRUE;
++   }
+ 
+-  if (ownPdfList) {
+-    _ownedComps.addOwned(_pdfList) ;
+-  }
++   _coefCache = new Double_t[_pdfList.getSize()];
++   _coefErrCount = _errorCount;
+ 
++   if (ownPdfList) {
++      _ownedComps.addOwned(_pdfList);
++   }
+ }
+ 
+-
+-
+ ////////////////////////////////////////////////////////////////////////////////
+ /// Copy constructor
+ 
+diff --git a/roofit/roofitcore/src/RooDataHist.cxx b/roofit/roofitcore/src/RooDataHist.cxx
+index 5bd49acdbeab..3b132c776695 100644
+--- a/roofit/roofitcore/src/RooDataHist.cxx
++++ b/roofit/roofitcore/src/RooDataHist.cxx
+@@ -573,10 +573,17 @@ void RooDataHist::importDHistSet(const RooArgList& /*vars*/, RooCategory& indexC
+ void RooDataHist::_adjustBinning(RooRealVar &theirVar, const TAxis &axis,
+     RooRealVar *ourVar, Int_t *offset)
+ {
+-  if (!dynamic_cast<RooRealVar*>(ourVar)) {
+-    coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVar->GetName() << " must be real" << endl ;
+-    assert(0) ;
+-  }
++   // RooRealVar is derived from RooAbsRealLValue which is itself
++   // derived from RooAbsReal and a virtual class RooAbsLValue
++   // supplying setter fuctions, check if ourVar is indeed derived
++   // as real
++   if (!dynamic_cast<RooAbsReal *>(ourVar)) {
++      std::string ourVarName(ourVar->GetName());
++      coutE(InputArguments) << "RooDataHist::adjustBinning(" << GetName() << ") ERROR: dimension " << ourVarName
++                            << " must be real\n";
++      throw std::logic_error("Incorrect type object (" + ourVarName +
++                             ") passed as argument to RooDataHist::_adjustBinning. Please report this issue.");
++   }
+ 
+   const double xlo = theirVar.getMin();
+   const double xhi = theirVar.getMax();
+diff --git a/roofit/roofitcore/src/RooRealSumFunc.cxx b/roofit/roofitcore/src/RooRealSumFunc.cxx
+index cbff7435b648..6e9fa40f5da5 100644
+--- a/roofit/roofitcore/src/RooRealSumFunc.cxx
++++ b/roofit/roofitcore/src/RooRealSumFunc.cxx
+@@ -152,8 +152,9 @@ RooRealSumFunc::RooRealSumFunc(const char *name, const char *title, const RooArg
+    func = (RooAbsReal *)funcIter->Next();
+    if (func) {
+       if (!dynamic_cast<RooAbsReal *>(func)) {
+-         coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func " << coef->GetName()
+-                               << " is not of type RooAbsReal, fatal error" << endl;
++         auto funcName = func->GetName();
++         coutE(InputArguments) << "RooRealSumFunc::RooRealSumFunc(" << GetName() << ") last func "
++                               << (funcName != nullptr ? funcName : "") << " is not of type RooAbsReal, fatal error\n";
+          assert(0);
+       }
+       _funcList.add(*func);
+diff --git a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
+index 2465abf3085f..1724805382ac 100644
+--- a/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
++++ b/tmva/tmva/src/DNN/Architectures/Reference/DataLoader.cxx
+@@ -145,6 +145,9 @@ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyInput(TMatrixT<Real_t> &m
+ template <>
+ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyOutput(TMatrixT<Real_t> &matrix, IndexIterator_t sampleIterator)
+ {
++   // calling front on an empty container is undfined
++   if (std::get<0>(fData).empty())
++      return;
+    Event *event = std::get<0>(fData).front();
+    const DataSetInfo &info = std::get<1>(fData);
+    Int_t m = matrix.GetNrows();
+@@ -177,6 +180,9 @@ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyOutput(TMatrixT<Real_t> &
+ template <>
+ void TDataLoader<TMVAInput_t, TReference<Real_t>>::CopyWeights(TMatrixT<Real_t> &matrix, IndexIterator_t sampleIterator)
+ {
++   // calling front on an empty container is undfined
++   if (std::get<0>(fData).empty())
++      return;
+    Event *event = std::get<0>(fData).front();
+    for (Int_t i = 0; i < matrix.GetNrows(); i++) {
+       Int_t sampleIndex = *sampleIterator++;
+@@ -190,6 +196,9 @@ template <>
+ void TDataLoader<TMVAInput_t, TReference<Double_t>>::CopyInput(TMatrixT<Double_t> &matrix,
+                                                                IndexIterator_t sampleIterator)
+ {
++   // calling front on an empty container is undfined
++   if (std::get<0>(fData).empty())
++      return;
+    Event *event = std::get<0>(fData).front();
+    Int_t m = matrix.GetNrows();
+    Int_t n = event->GetNVariables();
+@@ -210,6 +219,9 @@ template <>
+ void TDataLoader<TMVAInput_t, TReference<Double_t>>::CopyOutput(TMatrixT<Double_t> &matrix,
+                                                                 IndexIterator_t sampleIterator)
+ {
++   // calling front on an empty container is undfined
++   if (std::get<0>(fData).empty())
++      return;
+    Event *event = std::get<0>(fData).front();
+    const DataSetInfo &info = std::get<1>(fData);
+    Int_t m = matrix.GetNrows();

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2021-11-23 15:44:31 UTC (rev 1054473)
+++ PKGBUILD	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,306 +0,0 @@
-# Maintainer: Konstantin Gizdov < arch at kge dot pw >
-# Contributor: Frank Siegert < frank.siegert at googlemail dot com >
-# Contributor: Scott Lawrence < bytbox at gmail dot com >
-# Contributor: Thomas Dziedzic < gostrc at gmail dot com >
-# Contributor: Sebastian Voecking < voeck at web dot de >
-
-pkgbase=root
-pkgname=('root' 'root-cuda')
-pkgver=6.24.06
-pkgrel=5
-pkgdesc='C++ data analysis framework and interpreter from CERN'
-arch=('x86_64')
-url='https://root.cern'
-license=('LGPL2.1' 'GPL' 'custom:University of California and Stanford University License')
-makedepends=(
-    'ccache'
-    'cern-vdt'
-    'chromium'
-    'cfitsio'
-    'cmake'
-    'cuda'
-    'cudnn'
-    'gcc-fortran'
-    'git'
-    'go'
-    'libxml2'
-    'libmariadbclient'
-    'ocaml'
-    'ocaml-ctypes'
-    'openmp'
-    'openmpi'
-    'openssl'
-    'openui5'
-    'postgresql-libs'
-    'pythia8>=8.2.40-1'
-    'python-pygments'
-    'qt5-webengine'
-    'sqlite'
-    'unuran'
-    'vc'
-    'xrootd>5'
-    'z3'
-)
-depends=(
-    'blas'
-    'desktop-file-utils'
-    'fcgi'
-    'fftw'
-    'ftgl'
-    'giflib'
-    'gl2ps'
-    'glew'
-    'graphviz'
-    'gsl'
-    'hicolor-icon-theme'
-    'libafterimage'
-    'librsvg'
-    'libxpm'
-    'nlohmann-json'
-    'python'
-    'python-numpy'
-    'tbb'
-    'tex-gyre-fonts'
-    'unixodbc'
-    'xxhash>=0.6.5-1'
-    'zstd'
-)
-optdepends=(
-    'cern-vdt: Add a set of fast and vectorisable mathematical functions'
-    'chromium: Support for WebGUI'
-    'cfitsio: Read images and data from FITS files'
-    'libmariadbclient: MySQL support'
-    'libxml2: XML parser interface'
-    'openmp: Support OpenMP extensions in Minuit2'
-    'openmpi: Support OpenMPI extensions in Minuit2'
-    'openssl: OpenSSL support'
-    'openui5: JSROOT support'
-    'postgresql-libs: PostgreSQL support'
-    'pythia8>=8.2.40-1: Pythia8 EG support'
-    'python-pygments: syntax highlighting in interactive console'
-    'qt5-webengine: Support for WebGUI'
-    'sqlite: SQLite support'
-    'tcsh: Legacy CSH support'
-    'unuran: Support non-uniform random numbers'
-    'vc: Add types for portable and intuitive SIMD programming'
-    'xrootd>5: Support remote file server and client'
-    'z3: Suuport the Z3 theorem prover'
-)
-source=(
-    "https://root.cern.ch/download/root_v${pkgver}.source.tar.gz"
-    'ROOFIT_LICENSE'
-    'root.xml'
-    'root.pc.tpl'
-    'settings.cmake'
-    'settings-cuda.cmake'
-    'jupyter_notebook_config.py'
-    'nbman-for-arch.patch'
-    '8351.patch'
-    '9271.patch'
-    'thisroot.fail'
-)
-sha512sums=('356d6287df2900de9e831347d9513f444bf7cbd29c39fbb5841051ae877dac1e22dc255c64166cd3925b82aac860ae67ef6ce171732c16fd23d7919a47e7cb5a'
-            'af8f178fc9df66997d5495b271e38adcd1636aab4c8fc994c6600c2496127829d831250d73d3fc229b02dfe49b9867d0be979beacb959f2f3a05351b8118a4a6'
-            '1fe6f4aa09d583d33f27cc766f4935510bb7ab6bbb8d4700baa1aaab92ea6c876500b67da1e4f6e0b510aa5616e4e193b860264b86925de85f2d9f558d75d5dc'
-            '3c81d255a17b902ffac0187af1752847036137e16641a88b17eef0d9c944e6f0d3c954bc93307d6270603f43f6c23f2e04f98dc7a68f9d076dbaa8006a2527d6'
-            '4ef971eac7520d27fa88848c8d477243b1fc372e42122e3928092dc68ed2eea19ad0dea6203cf77b61406eea1da7a260a39d2bc116a19e59de99e99a51fb6bf5'
-            '99cfdd351f1ec1eaca84fffefa82d1f9f9af691e5d5dd8955b047aac324b8cb0ba2b657074d8e0a707e44f024d2f465a9a410bf7c729f12c0d84fcd17c63ca01'
-            '1c905ee7a3f8f5f3f567d957f9be6b503a8631565d4d9b9bfea5e496ef86865c5a8be1a1f8c7842754029879cf0afd2465249f532a116cc43660aa2e460ae682'
-            '12814f50b7016bd86d3f91e0e31c052783a0c0fa72b7d6a072d3ae6f86c2437323d585e531235377ebbfdd9cb76abd7da84d9631de821151547f1d4b13417e69'
-            '870740fbbd678056dd71b275c5d96f9b0db503ca8e0e9e84f784c3115aae66bb28a1eb531f665c1c8306a52686e5ce484ef65b3194bef6cb0d631664ccb1e3f9'
-            'c31ac51da9acbde068dea230e30445e0428a082c56f2e899ffc1113ed4c391a165cbe54c5d6d0fe9858bfd2ed177075349ab749d0c5b8c68413dd852a398da2d'
-            '3b9e382480b28f60af0b096ac9a42e6ba611b899717988bdebffd5aeabab054e37a28a7421f4a0f39198638c31f56a657a8a9ccc3db54a87daf50d43d35b1ca9')
-
-get_pyver () {
-    python -c 'import sys; print(str(sys.version_info[0]) + "." + str(sys.version_info[1]))'
-}
-
-prepare() {
-    local src
-    for src in "${source[@]}"; do
-        src="${src%%::*}"
-        src="${src##*/}"
-        [[ $src = *.patch ]] || continue
-        echo "  -> Applying patch $src..."
-        patch -Np1 -i "../$src" -d "${srcdir}/${pkgbase}-${pkgver}"
-    done
-
-    # specify some custom flags
-    # needed by vc to link properly
-    CUSTOM_CMAKE_FLAGS="-DTARGET_ARCHITECTURE:STRING=generic"
-    # make sure it finds python
-    CUSTOM_CMAKE_FLAGS+=" -DPYTHON_EXECUTABLE:PATH=/usr/bin/python"
-    # need to set install prefix like so
-    CUSTOM_CMAKE_FLAGS+=" -DINSTALL_PREFIX=/usr"
-    export CUSTOM_CMAKE_FLAGS
-
-    # update system flags
-    # don't let ROOT play around with lib paths
-    # the following is no longer necessary
-    # sed -i -e 's at SetLibraryPath();@@g' \
-    #     "${srcdir}/${pkgbase}-${pkgver}/rootx/src/rootx.cxx"
-    # now only depends on IS_RPATH_BUILD being set
-    # so pass it to GCC
-    export CPPFLAGS="${CPPFLAGS} -DIS_RPATH_BUILD=1"
-    # make sure pthread gets detected
-    CUSTOM_COMPILER_FLAGS="${CPPFLAGS} -pthread"
-    export CFLAGS="${CFLAGS} ${CUSTOM_COMPILER_FLAGS}"
-    export CXXFLAGS="${CXXFLAGS} ${CUSTOM_COMPILER_FLAGS}"
-    # do not link undefined
-    CUSTOM_COMPILER_FLAGS+=" -Wl,--no-undefined"
-    export LDFLAGS="${LDFLAGS} ${CUSTOM_COMPILER_FLAGS}"
-
-    # go flags for built-in clang
-    export CGO_LDFLAGS="${LDFLAGS}"
-    export GOFLAGS="-buildmode=pie -trimpath -modcacherw"
-
-    # pass CUDA architectures to nvcc calls
-    # Not yet supported in root: TBD
-    export CUSTOM_CUDA_ARCH='-DCMAKE_CUDA_ARCHITECTURES="52-real 52-virtual
-              53-real 53-virtual 60-real 60-virtual
-              61-real 61-virtual 62-real 62-virtual
-              70-real 70-virtual 72-real 72-virtual
-              75-real 75-virtual 80-real 80-virtual
-              86-real 86-virtual"'
-
-    cp -r "${pkgbase}-${pkgver}" "${pkgbase}-${pkgver}-cuda"
-}
-
-build() {
-    ## ROOT
-    mkdir -p "${srcdir}/build"
-    cd "${srcdir}/build"
-
-    cmake -C "${srcdir}/settings.cmake" \
-        ${CUSTOM_CMAKE_FLAGS} \
-        "${srcdir}/${pkgbase}-${pkgver}"
-    make
-
-    ## ROOT with CUDA
-    mkdir -p "${srcdir}/build-cuda"
-    cd "${srcdir}/build-cuda"
-
-    CC=/usr/bin/gcc \
-    CXX=/usr/bin/g++ \
-    FC=/usr/bin/f95 \
-    cmake -C "${srcdir}/settings-cuda.cmake" \
-        ${CUSTOM_CMAKE_FLAGS} \
-        ${CUSTOM_CUDA_ARCH} \
-        "${srcdir}/${pkgbase}-${pkgver}-cuda"
-    make
-}
-
-_package() {
-    local bld_dir="${srcdir}/${1}"
-    cd "${bld_dir}"
-
-    make DESTDIR="${pkgdir}" install
-
-    # fix missing hardlinks for genreflex and rootcint
-    cd "${pkgdir}"/usr/bin
-    ln -f rootcling rootcint
-    ln -f rootcling genreflex
-    cd "${bld_dir}" # go back
-
-    # rename the modulemap
-    mv "${pkgdir}"/usr/include/module.modulemap "${pkgdir}"/usr/include/root.modulemap
-
-    # fix python env call
-    sed -e 's/@python@/python/' -i "${pkgdir}/usr/lib/root/cmdLineUtils.py"
-
-    # try to deal with weird PyROOT, PyMVA and JupyROOT stuff
-    rm -rf "${pkgdir}/usr/lib/root/__pycache__"
-    local _pyver=$(get_pyver)
-    local _pydir="${pkgdir}/usr/lib/python${_pyver}/site-packages"
-    install -d "${_pydir}"
-    find "${pkgdir}/usr/lib/root" -maxdepth 1 -mindepth 1 \( -iname '*py*' -or -name '*Js*' -or -name 'ROOT' \) \
-            ! \( -name '*EGPythia8*' -or -iname '*.rootmap' -or -iname '*.pcm' \) -print0 | while read -rd $'\0' _lib; do
-        _base=$(basename "${_lib}")
-        ln -sf "/usr/lib/root/${_base}" "${pkgdir}/usr/lib/python${_pyver}/site-packages/${_base}"
-    done
-
-    # recompile pycache to strip $pkgdir from embedded paths
-    python -m compileall -d "/usr/lib/python${_pyver}" \
-        "${pkgdir}/usr/lib/python${_pyver}"
-    python -O -m compileall -d "/usr/lib/python${_pyver}" \
-        "${pkgdir}/usr/lib/python${_pyver}"
-
-    # icon, shortcut and mime
-    install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/icons/Root6Icon.png" \
-        "${pkgdir}/usr/share/icons/hicolor/48x48/apps/root.png"
-    install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/etc/root.desktop" \
-        "${pkgdir}/usr/share/applications/root.desktop"
-    echo 'Icon=root.png' >> "${pkgdir}/usr/share/applications/root.desktop"
-    install -Dm644 "${srcdir}/root.xml" \
-        "${pkgdir}/usr/share/mime/packages/root.xml"
-
-    # use a file that pacman can track instead of adding directly to ld.so.conf
-    install -d "${pkgdir}/etc/ld.so.conf.d"
-    echo '/usr/lib/root' > "${pkgdir}/etc/ld.so.conf.d/root.conf"
-
-    # create pkg-config file
-    local _prefix _exec_prefix _bindir _libdir _incdir _pkg_ver _libs _cflags _requires
-    _prefix="$("${pkgdir}"/usr/bin/root-config --prefix)"
-    _exec_prefix="$("${pkgdir}"/usr/bin/root-config --exec-prefix)"
-    _bindir="$("${pkgdir}"/usr/bin/root-config --bindir)"
-    _libdir="$("${pkgdir}"/usr/bin/root-config --libdir)"
-    _incdir="$("${pkgdir}"/usr/bin/root-config --incdir)"
-    _pkg_ver="$(sed -n 's,.*ROOT_RELEASE *\"\(.*\)\".*,\1,p' < "${pkgdir}"/usr/include/RVersion.h)"
-    _libs="$("${pkgdir}"/usr/bin/root-config --libs)"
-    _cflags="$("${pkgdir}"/usr/bin/root-config --cflags)"
-    printf -v _requires '%s,' "${depends[@]}"
-    cp "${srcdir}/root.pc.tpl" "${bld_dir}"/
-    sed -e "s at _PREFIX@${_prefix}@" -e "s at _EXECPREFIX@${_exec_prefix}@" \
-        -e "s at _LIBDIR@${_libdir}@" -e "s at _INCDIR@${_incdir}@" \
-        -e "s at _PKGVERSION@${_pkg_ver}@" -e "s at _LIBRARIES@${_libs}@" \
-        -e "s at _CFLAGS@${_cflags}@" -e "s at _UPSTREAM_URL@${url}@" \
-        -e "s at _REQUIRES@${_requires}@" \
-        -i "${bld_dir}/root.pc.tpl"
-    install -Dm644 "${bld_dir}/root.pc.tpl" "${pkgdir}/usr/lib/pkgconfig/root.pc"
-
-    # install all licenses & docs
-    install -d "${pkgdir}/usr/share/licenses/roofit"
-    install "${srcdir}/ROOFIT_LICENSE" "${pkgdir}/usr/share/licenses/roofit/LICENSE"
-    install -d "${pkgdir}/usr/share/licenses/${pkgname}"
-    ln -s '/usr/share/doc/root/LICENSE' "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
-    for _fold in fonts js; do
-      install -d "${pkgdir}/usr/share/licenses/${pkgname}/${_fold}"
-      ln -s "/usr/share/root/${_fold}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/${_fold}"/
-    done
-    ln -s '/usr/share/licenses/roofit' "${pkgdir}/usr/share/licenses/${pkgname}/roofit"
-    if [ "${pkgname}" != "root" ]; then
-        ln -s "/usr/share/licenses/${pkgname}" "${pkgdir}/usr/share/licenses/root"
-        ln -s "/usr/share/doc/root" "${pkgdir}/usr/share/doc/${pkgname}"
-    fi
-
-    # install jupyter kernels and `root --notebook` config
-    install -d "${pkgdir}/usr/share/jupyter/kernels"
-    ln -s '/etc/root/notebook/kernels/root' "${pkgdir}/usr/share/jupyter/kernels/root"
-    install "${srcdir}/jupyter_notebook_config.py" "${pkgdir}/etc/root/notebook"/
-
-    # drop thisroot.* shell files
-    rm -rf "${pkgdir}"/usr/bin/thisroot.*
-    install -Dm755 "${srcdir}/thisroot.fail" "${pkgdir}/usr/bin/thisroot.sh"
-    for suffix in csh fish; do
-        ln -s '/usr/bin/thisroot.sh' "${pkgdir}/usr/bin/thisroot.${suffix}"
-    done
-
-    # set correct LD_LIBRARY_PATH at runtime
-    sed -i.orig \
-        -e "s@#Unix.*.Root.DynamicPath:.*@Unix.*.Root.DynamicPath:    .:${_libdir}:/usr/lib@" \
-        "${pkgdir}/etc/root/system.rootrc"
-}
-
-package_root() {
-    optdepends+=('gcc-fortran: Enable the Fortran components of ROOT')
-    _package build
-}
-
-package_root-cuda() {
-    pkgdesc='C++ data analysis framework and interpreter from CERN with GPU (CUDA) features enabled'
-    provides=('root')
-    conflicts=('root')
-    depends+=('cuda' 'cudnn')
-    optdepends+=('gcc-fortran: Enable the Fortran components of ROOT')
-    _package build-cuda
-}

Copied: root/repos/community-testing-x86_64/PKGBUILD (from rev 1054473, root/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,306 @@
+# Maintainer: Konstantin Gizdov < arch at kge dot pw >
+# Contributor: Frank Siegert < frank.siegert at googlemail dot com >
+# Contributor: Scott Lawrence < bytbox at gmail dot com >
+# Contributor: Thomas Dziedzic < gostrc at gmail dot com >
+# Contributor: Sebastian Voecking < voeck at web dot de >
+
+pkgbase=root
+pkgname=('root' 'root-cuda')
+pkgver=6.24.06
+pkgrel=6
+pkgdesc='C++ data analysis framework and interpreter from CERN'
+arch=('x86_64')
+url='https://root.cern'
+license=('LGPL2.1' 'GPL' 'custom:University of California and Stanford University License')
+makedepends=(
+    'ccache'
+    'cern-vdt'
+    'chromium'
+    'cfitsio'
+    'cmake'
+    'cuda'
+    'cudnn'
+    'gcc-fortran'
+    'git'
+    'go'
+    'libxml2'
+    'libmariadbclient'
+    'ocaml'
+    'ocaml-ctypes'
+    'openmp'
+    'openmpi'
+    'openssl'
+    'openui5'
+    'postgresql-libs'
+    'pythia8>=8.2.40-1'
+    'python-pygments'
+    'qt5-webengine'
+    'sqlite'
+    'unuran'
+    'vc'
+    'xrootd>5'
+    'z3'
+)
+depends=(
+    'blas'
+    'desktop-file-utils'
+    'fcgi'
+    'fftw'
+    'ftgl'
+    'giflib'
+    'gl2ps'
+    'glew'
+    'graphviz'
+    'gsl'
+    'hicolor-icon-theme'
+    'libafterimage'
+    'librsvg'
+    'libxpm'
+    'nlohmann-json'
+    'python'
+    'python-numpy'
+    'tbb'
+    'tex-gyre-fonts'
+    'unixodbc'
+    'xxhash>=0.6.5-1'
+    'zstd'
+)
+optdepends=(
+    'cern-vdt: Add a set of fast and vectorisable mathematical functions'
+    'chromium: Support for WebGUI'
+    'cfitsio: Read images and data from FITS files'
+    'libmariadbclient: MySQL support'
+    'libxml2: XML parser interface'
+    'openmp: Support OpenMP extensions in Minuit2'
+    'openmpi: Support OpenMPI extensions in Minuit2'
+    'openssl: OpenSSL support'
+    'openui5: JSROOT support'
+    'postgresql-libs: PostgreSQL support'
+    'pythia8>=8.2.40-1: Pythia8 EG support'
+    'python-pygments: syntax highlighting in interactive console'
+    'qt5-webengine: Support for WebGUI'
+    'sqlite: SQLite support'
+    'tcsh: Legacy CSH support'
+    'unuran: Support non-uniform random numbers'
+    'vc: Add types for portable and intuitive SIMD programming'
+    'xrootd>5: Support remote file server and client'
+    'z3: Suuport the Z3 theorem prover'
+)
+source=(
+    "https://root.cern.ch/download/root_v${pkgver}.source.tar.gz"
+    'ROOFIT_LICENSE'
+    'root.xml'
+    'root.pc.tpl'
+    'settings.cmake'
+    'settings-cuda.cmake'
+    'jupyter_notebook_config.py'
+    'nbman-for-arch.patch'
+    '8351.patch'
+    '9271.patch'
+    'thisroot.fail'
+)
+sha512sums=('356d6287df2900de9e831347d9513f444bf7cbd29c39fbb5841051ae877dac1e22dc255c64166cd3925b82aac860ae67ef6ce171732c16fd23d7919a47e7cb5a'
+            'af8f178fc9df66997d5495b271e38adcd1636aab4c8fc994c6600c2496127829d831250d73d3fc229b02dfe49b9867d0be979beacb959f2f3a05351b8118a4a6'
+            '1fe6f4aa09d583d33f27cc766f4935510bb7ab6bbb8d4700baa1aaab92ea6c876500b67da1e4f6e0b510aa5616e4e193b860264b86925de85f2d9f558d75d5dc'
+            '3c81d255a17b902ffac0187af1752847036137e16641a88b17eef0d9c944e6f0d3c954bc93307d6270603f43f6c23f2e04f98dc7a68f9d076dbaa8006a2527d6'
+            '4ef971eac7520d27fa88848c8d477243b1fc372e42122e3928092dc68ed2eea19ad0dea6203cf77b61406eea1da7a260a39d2bc116a19e59de99e99a51fb6bf5'
+            '99cfdd351f1ec1eaca84fffefa82d1f9f9af691e5d5dd8955b047aac324b8cb0ba2b657074d8e0a707e44f024d2f465a9a410bf7c729f12c0d84fcd17c63ca01'
+            '1c905ee7a3f8f5f3f567d957f9be6b503a8631565d4d9b9bfea5e496ef86865c5a8be1a1f8c7842754029879cf0afd2465249f532a116cc43660aa2e460ae682'
+            '12814f50b7016bd86d3f91e0e31c052783a0c0fa72b7d6a072d3ae6f86c2437323d585e531235377ebbfdd9cb76abd7da84d9631de821151547f1d4b13417e69'
+            '870740fbbd678056dd71b275c5d96f9b0db503ca8e0e9e84f784c3115aae66bb28a1eb531f665c1c8306a52686e5ce484ef65b3194bef6cb0d631664ccb1e3f9'
+            '6ba0994fa62d9a59a6382b9beafd044d0fb7bd45048c531d0437844a98f7ef40dcd45565670cb5a7adc7dc040885d3b7dbea73448ba1cd30fb9764d4f0890cd5'
+            '3b9e382480b28f60af0b096ac9a42e6ba611b899717988bdebffd5aeabab054e37a28a7421f4a0f39198638c31f56a657a8a9ccc3db54a87daf50d43d35b1ca9')
+
+get_pyver () {
+    python -c 'import sys; print(str(sys.version_info[0]) + "." + str(sys.version_info[1]))'
+}
+
+prepare() {
+    local src
+    for src in "${source[@]}"; do
+        src="${src%%::*}"
+        src="${src##*/}"
+        [[ $src = *.patch ]] || continue
+        echo "  -> Applying patch $src..."
+        patch -Np1 -i "../$src" -d "${srcdir}/${pkgbase}-${pkgver}"
+    done
+
+    # specify some custom flags
+    # needed by vc to link properly
+    CUSTOM_CMAKE_FLAGS="-DTARGET_ARCHITECTURE:STRING=generic"
+    # make sure it finds python
+    CUSTOM_CMAKE_FLAGS+=" -DPYTHON_EXECUTABLE:PATH=/usr/bin/python"
+    # need to set install prefix like so
+    CUSTOM_CMAKE_FLAGS+=" -DINSTALL_PREFIX=/usr"
+    export CUSTOM_CMAKE_FLAGS
+
+    # update system flags
+    # don't let ROOT play around with lib paths
+    # the following is no longer necessary
+    # sed -i -e 's at SetLibraryPath();@@g' \
+    #     "${srcdir}/${pkgbase}-${pkgver}/rootx/src/rootx.cxx"
+    # now only depends on IS_RPATH_BUILD being set
+    # so pass it to GCC
+    export CPPFLAGS="${CPPFLAGS} -DIS_RPATH_BUILD=1"
+    # make sure pthread gets detected
+    CUSTOM_COMPILER_FLAGS="${CPPFLAGS} -pthread"
+    export CFLAGS="${CFLAGS} ${CUSTOM_COMPILER_FLAGS}"
+    export CXXFLAGS="${CXXFLAGS} ${CUSTOM_COMPILER_FLAGS}"
+    # do not link undefined
+    CUSTOM_COMPILER_FLAGS+=" -Wl,--no-undefined"
+    export LDFLAGS="${LDFLAGS} ${CUSTOM_COMPILER_FLAGS}"
+
+    # go flags for built-in clang
+    export CGO_LDFLAGS="${LDFLAGS}"
+    export GOFLAGS="-buildmode=pie -trimpath -modcacherw"
+
+    # pass CUDA architectures to nvcc calls
+    # Not yet supported in root: TBD
+    export CUSTOM_CUDA_ARCH='-DCMAKE_CUDA_ARCHITECTURES="52-real 52-virtual
+              53-real 53-virtual 60-real 60-virtual
+              61-real 61-virtual 62-real 62-virtual
+              70-real 70-virtual 72-real 72-virtual
+              75-real 75-virtual 80-real 80-virtual
+              86-real 86-virtual"'
+
+    cp -r "${pkgbase}-${pkgver}" "${pkgbase}-${pkgver}-cuda"
+}
+
+build() {
+    ## ROOT
+    mkdir -p "${srcdir}/build"
+    cd "${srcdir}/build"
+
+    cmake -C "${srcdir}/settings.cmake" \
+        ${CUSTOM_CMAKE_FLAGS} \
+        "${srcdir}/${pkgbase}-${pkgver}"
+    make
+
+    ## ROOT with CUDA
+    mkdir -p "${srcdir}/build-cuda"
+    cd "${srcdir}/build-cuda"
+
+    CC=/usr/bin/gcc \
+    CXX=/usr/bin/g++ \
+    FC=/usr/bin/f95 \
+    cmake -C "${srcdir}/settings-cuda.cmake" \
+        ${CUSTOM_CMAKE_FLAGS} \
+        ${CUSTOM_CUDA_ARCH} \
+        "${srcdir}/${pkgbase}-${pkgver}-cuda"
+    make
+}
+
+_package() {
+    local bld_dir="${srcdir}/${1}"
+    cd "${bld_dir}"
+
+    make DESTDIR="${pkgdir}" install
+
+    # fix missing hardlinks for genreflex and rootcint
+    cd "${pkgdir}"/usr/bin
+    ln -f rootcling rootcint
+    ln -f rootcling genreflex
+    cd "${bld_dir}" # go back
+
+    # rename the modulemap
+    mv "${pkgdir}"/usr/include/module.modulemap "${pkgdir}"/usr/include/root.modulemap
+
+    # fix python env call
+    sed -e 's/@python@/python/' -i "${pkgdir}/usr/lib/root/cmdLineUtils.py"
+
+    # try to deal with weird PyROOT, PyMVA and JupyROOT stuff
+    rm -rf "${pkgdir}/usr/lib/root/__pycache__"
+    local _pyver=$(get_pyver)
+    local _pydir="${pkgdir}/usr/lib/python${_pyver}/site-packages"
+    install -d "${_pydir}"
+    find "${pkgdir}/usr/lib/root" -maxdepth 1 -mindepth 1 \( -iname '*py*' -or -name '*Js*' -or -name 'ROOT' \) \
+            ! \( -name '*EGPythia8*' -or -iname '*.rootmap' -or -iname '*.pcm' \) -print0 | while read -rd $'\0' _lib; do
+        _base=$(basename "${_lib}")
+        ln -sf "/usr/lib/root/${_base}" "${pkgdir}/usr/lib/python${_pyver}/site-packages/${_base}"
+    done
+
+    # recompile pycache to strip $pkgdir from embedded paths
+    python -m compileall -d "/usr/lib/python${_pyver}" \
+        "${pkgdir}/usr/lib/python${_pyver}"
+    python -O -m compileall -d "/usr/lib/python${_pyver}" \
+        "${pkgdir}/usr/lib/python${_pyver}"
+
+    # icon, shortcut and mime
+    install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/icons/Root6Icon.png" \
+        "${pkgdir}/usr/share/icons/hicolor/48x48/apps/root.png"
+    install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/etc/root.desktop" \
+        "${pkgdir}/usr/share/applications/root.desktop"
+    echo 'Icon=root.png' >> "${pkgdir}/usr/share/applications/root.desktop"
+    install -Dm644 "${srcdir}/root.xml" \
+        "${pkgdir}/usr/share/mime/packages/root.xml"
+
+    # use a file that pacman can track instead of adding directly to ld.so.conf
+    install -d "${pkgdir}/etc/ld.so.conf.d"
+    echo '/usr/lib/root' > "${pkgdir}/etc/ld.so.conf.d/root.conf"
+
+    # create pkg-config file
+    local _prefix _exec_prefix _bindir _libdir _incdir _pkg_ver _libs _cflags _requires
+    _prefix="$("${pkgdir}"/usr/bin/root-config --prefix)"
+    _exec_prefix="$("${pkgdir}"/usr/bin/root-config --exec-prefix)"
+    _bindir="$("${pkgdir}"/usr/bin/root-config --bindir)"
+    _libdir="$("${pkgdir}"/usr/bin/root-config --libdir)"
+    _incdir="$("${pkgdir}"/usr/bin/root-config --incdir)"
+    _pkg_ver="$(sed -n 's,.*ROOT_RELEASE *\"\(.*\)\".*,\1,p' < "${pkgdir}"/usr/include/RVersion.h)"
+    _libs="$("${pkgdir}"/usr/bin/root-config --libs)"
+    _cflags="$("${pkgdir}"/usr/bin/root-config --cflags)"
+    printf -v _requires '%s,' "${depends[@]}"
+    cp "${srcdir}/root.pc.tpl" "${bld_dir}"/
+    sed -e "s at _PREFIX@${_prefix}@" -e "s at _EXECPREFIX@${_exec_prefix}@" \
+        -e "s at _LIBDIR@${_libdir}@" -e "s at _INCDIR@${_incdir}@" \
+        -e "s at _PKGVERSION@${_pkg_ver}@" -e "s at _LIBRARIES@${_libs}@" \
+        -e "s at _CFLAGS@${_cflags}@" -e "s at _UPSTREAM_URL@${url}@" \
+        -e "s at _REQUIRES@${_requires}@" \
+        -i "${bld_dir}/root.pc.tpl"
+    install -Dm644 "${bld_dir}/root.pc.tpl" "${pkgdir}/usr/lib/pkgconfig/root.pc"
+
+    # install all licenses & docs
+    install -d "${pkgdir}/usr/share/licenses/roofit"
+    install "${srcdir}/ROOFIT_LICENSE" "${pkgdir}/usr/share/licenses/roofit/LICENSE"
+    install -d "${pkgdir}/usr/share/licenses/${pkgname}"
+    ln -s '/usr/share/doc/root/LICENSE' "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
+    for _fold in fonts js; do
+      install -d "${pkgdir}/usr/share/licenses/${pkgname}/${_fold}"
+      ln -s "/usr/share/root/${_fold}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/${_fold}"/
+    done
+    ln -s '/usr/share/licenses/roofit' "${pkgdir}/usr/share/licenses/${pkgname}/roofit"
+    if [ "${pkgname}" != "root" ]; then
+        ln -s "/usr/share/licenses/${pkgname}" "${pkgdir}/usr/share/licenses/root"
+        ln -s "/usr/share/doc/root" "${pkgdir}/usr/share/doc/${pkgname}"
+    fi
+
+    # install jupyter kernels and `root --notebook` config
+    install -d "${pkgdir}/usr/share/jupyter/kernels"
+    ln -s '/etc/root/notebook/kernels/root' "${pkgdir}/usr/share/jupyter/kernels/root"
+    install "${srcdir}/jupyter_notebook_config.py" "${pkgdir}/etc/root/notebook"/
+
+    # drop thisroot.* shell files
+    rm -rf "${pkgdir}"/usr/bin/thisroot.*
+    install -Dm755 "${srcdir}/thisroot.fail" "${pkgdir}/usr/bin/thisroot.sh"
+    for suffix in csh fish; do
+        ln -s '/usr/bin/thisroot.sh' "${pkgdir}/usr/bin/thisroot.${suffix}"
+    done
+
+    # set correct LD_LIBRARY_PATH at runtime
+    sed -i.orig \
+        -e "s@#Unix.*.Root.DynamicPath:.*@Unix.*.Root.DynamicPath:    .:${_libdir}:/usr/lib@" \
+        "${pkgdir}/etc/root/system.rootrc"
+}
+
+package_root() {
+    optdepends+=('gcc-fortran: Enable the Fortran components of ROOT')
+    _package build
+}
+
+package_root-cuda() {
+    pkgdesc='C++ data analysis framework and interpreter from CERN with GPU (CUDA) features enabled'
+    provides=('root')
+    conflicts=('root')
+    depends+=('cuda' 'cudnn')
+    optdepends+=('gcc-fortran: Enable the Fortran components of ROOT')
+    _package build-cuda
+}

Deleted: ROOFIT_LICENSE
===================================================================
--- ROOFIT_LICENSE	2021-11-23 15:44:31 UTC (rev 1054473)
+++ ROOFIT_LICENSE	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,22 +0,0 @@
-RooFit --- Copyright (c) 2000-2005, Regents of the University of California and Stanford University
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-  - Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-  - Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Copied: root/repos/community-testing-x86_64/ROOFIT_LICENSE (from rev 1054473, root/trunk/ROOFIT_LICENSE)
===================================================================
--- ROOFIT_LICENSE	                        (rev 0)
+++ ROOFIT_LICENSE	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,22 @@
+RooFit --- Copyright (c) 2000-2005, Regents of the University of California and Stanford University
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+  - Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+  - Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Deleted: jupyter_notebook_config.py
===================================================================
--- jupyter_notebook_config.py	2021-11-23 15:44:31 UTC (rev 1054473)
+++ jupyter_notebook_config.py	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1 +0,0 @@
-c.NotebookApp.ip = '*'

Copied: root/repos/community-testing-x86_64/jupyter_notebook_config.py (from rev 1054473, root/trunk/jupyter_notebook_config.py)
===================================================================
--- jupyter_notebook_config.py	                        (rev 0)
+++ jupyter_notebook_config.py	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1 @@
+c.NotebookApp.ip = '*'

Deleted: nbman-for-arch.patch
===================================================================
--- nbman-for-arch.patch	2021-11-23 15:44:31 UTC (rev 1054473)
+++ nbman-for-arch.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,177 +0,0 @@
-diff --color -aur root-6.22.00-old/main/src/nbmain.cxx root-6.22.00-new/main/src/nbmain.cxx
---- root-6.22.00-old/main/src/nbmain.cxx	2020-07-20 15:26:53.983725609 +0300
-+++ root-6.22.00-new/main/src/nbmain.cxx	2020-07-20 15:29:53.940386060 +0300
-@@ -33,10 +33,6 @@
- #define NB_OPT             "notebook"
- #define JUPYTER_CONF_DIR_V "JUPYTER_CONFIG_DIR"
- #define JUPYTER_PATH_V     "JUPYTER_PATH"
--#define NB_CONF_DIR        "notebook"
--#define ROOTNB_DIR         ".rootnb"
--#define COMMIT_FILE        ".rootcommit"
--#define JUPYTER_CONFIG     "jupyter_notebook_config.py"
-
- using namespace std;
-
-@@ -46,161 +46,12 @@
- #endif
- 
- ////////////////////////////////////////////////////////////////////////////////
--/// Checks whether ROOT notebook files are installed and they are
--/// the current version.
--
--static int CheckNbInstallation(string dir)
--{
--   string commit(gROOT->GetGitCommit());
--   string inputfname(dir + pathsep + ROOTNB_DIR + pathsep + COMMIT_FILE);
--   ifstream in(inputfname);
--   if (in.is_open()) {
--      string line;
--      in >> line;
--      in.close();
--      if (line.compare(commit) == 0) return  0; // already installed
--      else                           return -1; // install, it's outdated
--   }
--   else if (gSystem->AccessPathName(inputfname.c_str())) {
--      // There is no installation
--      return -1;
--   }
--   else {
--      fprintf(stderr,
--              "Error checking notebook installation -- cannot open %s\n",
--              inputfname.c_str());
--      return -2;
--   }
--}
--
--////////////////////////////////////////////////////////////////////////////////
--/// Installs ROOT notebook files in the user's home directory.
--
--static bool InstallNbFiles(string source, string dest)
--{
--   // Create installation directory
--   if (gSystem->AccessPathName(dest.c_str())) {
--      if (gSystem->mkdir(dest.c_str())) {
--         fprintf(stderr,
--                 "Error installing notebook configuration files -- cannot create directory %s\n",
--                 dest.c_str());
--         return false;
--      }
--   }
--
--   // Copy files in source to dest
--   TSystemDirectory dir(source.c_str(), source.c_str());
--   std::unique_ptr<TList> files;
--   files.reset(dir.GetListOfFiles());
--   if (files) {
--      TSystemFile *file;
--      TListIter it(files.get());
--      while ((file = (TSystemFile*)it())) {
--         TString s = file->GetName();
--         string fname(s.Data());
--         string sourcefile = source + pathsep + fname;
--         string destfile   = dest   + pathsep + fname;
--         if (!file->IsDirectory()) {
--            if (gSystem->CopyFile(sourcefile.c_str(), destfile.c_str(), true)) {
--               fprintf(stderr,
--                       "Error installing notebook configuration files -- cannot copy file %s to %s\n",
--                       sourcefile.c_str(), destfile.c_str());
--               return false;
--            }
--         }
--         else if (fname.compare(".") && fname.compare("..") && fname.compare("html")) {
--            if (!InstallNbFiles(sourcefile, destfile))
--               return false;
--         }
--      }
--   }
--
--   return true;
--}
--
--////////////////////////////////////////////////////////////////////////////////
--/// Creates the Jupyter notebook configuration file that sets the
--/// necessary environment.
--
--static bool CreateJupyterConfig(string dest, string rootbin, string rootlib, string rootdata)
--{
--   string jupyconfig = dest + pathsep + JUPYTER_CONFIG;
--   ofstream out(jupyconfig, ios::trunc);
--   if (out.is_open()) {
--      out << "import os" << endl;
--      out << "rootbin = '" << rootbin << "'" << endl;
--      out << "rootlib = '" << rootlib << "'" << endl;
--#ifdef WIN32
--      string jsrootsys = rootdata + "\\js\\";
--      out << "os.environ['PYTHONPATH']      = '%s' % rootlib + ':' + os.getenv('PYTHONPATH', '')" << endl;
--      out << "os.environ['PATH']            = '%s:%s\\bin' % (rootbin,rootbin) + ':' + '%s' % rootlib + ':' + os.getenv('PATH', '')" << endl;
--#else
--      string jsrootsys = rootdata + "/js/";
--      out << "os.environ['PYTHONPATH']      = '%s' % rootlib + ':' + os.getenv('PYTHONPATH', '')" << endl;
--      out << "os.environ['PATH']            = '%s:%s/bin' % (rootbin,rootbin) + ':' + os.getenv('PATH', '')" << endl;
--      out << "os.environ['LD_LIBRARY_PATH'] = '%s' % rootlib + ':' + os.getenv('LD_LIBRARY_PATH', '')" << endl;
--#endif
--      out << "c.NotebookApp.extra_static_paths = ['" << jsrootsys << "']" << endl;
--      out.close();
--      return true;
--   }
--   else {
--      fprintf(stderr,
--              "Error installing notebook configuration files -- cannot create IPython config file at %s\n",
--              jupyconfig.c_str());
--      return false;
--   }
--}
--
--////////////////////////////////////////////////////////////////////////////////
--/// Creates a file that stores the current commit id in it.
--
--static bool CreateStamp(string dest)
--{
--   ofstream out(dest + pathsep + COMMIT_FILE, ios::trunc);
--   if (out.is_open()) {
--      out << gROOT->GetGitCommit();
--      out.close();
--      return true;
--   }
--   else {
--      fprintf(stderr,
--              "Error installing notebook configuration files -- cannot create %s\n",
--              COMMIT_FILE);
--      return false;
--   }
--}
--
--////////////////////////////////////////////////////////////////////////////////
- /// Spawn a Jupyter notebook customised by ROOT.
- 
- int main(int argc, char **argv)
- {
--   string rootbin(TROOT::GetBinDir().Data());
--   string rootlib(TROOT::GetLibDir().Data());
--   string rootetc(TROOT::GetEtcDir().Data());
--   string rootdata(TROOT::GetDataDir().Data());
--
--   // If needed, install ROOT notebook files in the user's home directory
--#ifdef WIN32
--   string homedir(getenv("USERPROFILE"));
--#else
--   string homedir(getenv("HOME"));
--#endif
--   int inst = CheckNbInstallation(homedir);
--   if (inst == -1) {
--      // The etc directory contains the ROOT notebook files to install
--      string source(rootetc + pathsep + NB_CONF_DIR);
--      string dest(homedir + pathsep + ROOTNB_DIR);
--      bool res = InstallNbFiles(source, dest) &&
--                 CreateJupyterConfig(dest, rootbin, rootlib, rootdata) &&
--                 CreateStamp(dest);
--      if (!res) return 1;
--   }
--   else if (inst == -2) return 1;
--
-    // Set IPython directory for the ROOT notebook flavour
--   string rootnbpath = homedir + pathsep + ROOTNB_DIR;
-+   string rootnbpath = pathsep + string("etc") + pathsep + string("root") + pathsep + string("notebook");
-    string jupyconfdir(JUPYTER_CONF_DIR_V + ("=" + rootnbpath));
-    string jupypathdir(JUPYTER_PATH_V + ("=" + rootnbpath));
-    putenv((char *)jupyconfdir.c_str());

Copied: root/repos/community-testing-x86_64/nbman-for-arch.patch (from rev 1054473, root/trunk/nbman-for-arch.patch)
===================================================================
--- nbman-for-arch.patch	                        (rev 0)
+++ nbman-for-arch.patch	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,177 @@
+diff --color -aur root-6.22.00-old/main/src/nbmain.cxx root-6.22.00-new/main/src/nbmain.cxx
+--- root-6.22.00-old/main/src/nbmain.cxx	2020-07-20 15:26:53.983725609 +0300
++++ root-6.22.00-new/main/src/nbmain.cxx	2020-07-20 15:29:53.940386060 +0300
+@@ -33,10 +33,6 @@
+ #define NB_OPT             "notebook"
+ #define JUPYTER_CONF_DIR_V "JUPYTER_CONFIG_DIR"
+ #define JUPYTER_PATH_V     "JUPYTER_PATH"
+-#define NB_CONF_DIR        "notebook"
+-#define ROOTNB_DIR         ".rootnb"
+-#define COMMIT_FILE        ".rootcommit"
+-#define JUPYTER_CONFIG     "jupyter_notebook_config.py"
+
+ using namespace std;
+
+@@ -46,161 +46,12 @@
+ #endif
+ 
+ ////////////////////////////////////////////////////////////////////////////////
+-/// Checks whether ROOT notebook files are installed and they are
+-/// the current version.
+-
+-static int CheckNbInstallation(string dir)
+-{
+-   string commit(gROOT->GetGitCommit());
+-   string inputfname(dir + pathsep + ROOTNB_DIR + pathsep + COMMIT_FILE);
+-   ifstream in(inputfname);
+-   if (in.is_open()) {
+-      string line;
+-      in >> line;
+-      in.close();
+-      if (line.compare(commit) == 0) return  0; // already installed
+-      else                           return -1; // install, it's outdated
+-   }
+-   else if (gSystem->AccessPathName(inputfname.c_str())) {
+-      // There is no installation
+-      return -1;
+-   }
+-   else {
+-      fprintf(stderr,
+-              "Error checking notebook installation -- cannot open %s\n",
+-              inputfname.c_str());
+-      return -2;
+-   }
+-}
+-
+-////////////////////////////////////////////////////////////////////////////////
+-/// Installs ROOT notebook files in the user's home directory.
+-
+-static bool InstallNbFiles(string source, string dest)
+-{
+-   // Create installation directory
+-   if (gSystem->AccessPathName(dest.c_str())) {
+-      if (gSystem->mkdir(dest.c_str())) {
+-         fprintf(stderr,
+-                 "Error installing notebook configuration files -- cannot create directory %s\n",
+-                 dest.c_str());
+-         return false;
+-      }
+-   }
+-
+-   // Copy files in source to dest
+-   TSystemDirectory dir(source.c_str(), source.c_str());
+-   std::unique_ptr<TList> files;
+-   files.reset(dir.GetListOfFiles());
+-   if (files) {
+-      TSystemFile *file;
+-      TListIter it(files.get());
+-      while ((file = (TSystemFile*)it())) {
+-         TString s = file->GetName();
+-         string fname(s.Data());
+-         string sourcefile = source + pathsep + fname;
+-         string destfile   = dest   + pathsep + fname;
+-         if (!file->IsDirectory()) {
+-            if (gSystem->CopyFile(sourcefile.c_str(), destfile.c_str(), true)) {
+-               fprintf(stderr,
+-                       "Error installing notebook configuration files -- cannot copy file %s to %s\n",
+-                       sourcefile.c_str(), destfile.c_str());
+-               return false;
+-            }
+-         }
+-         else if (fname.compare(".") && fname.compare("..") && fname.compare("html")) {
+-            if (!InstallNbFiles(sourcefile, destfile))
+-               return false;
+-         }
+-      }
+-   }
+-
+-   return true;
+-}
+-
+-////////////////////////////////////////////////////////////////////////////////
+-/// Creates the Jupyter notebook configuration file that sets the
+-/// necessary environment.
+-
+-static bool CreateJupyterConfig(string dest, string rootbin, string rootlib, string rootdata)
+-{
+-   string jupyconfig = dest + pathsep + JUPYTER_CONFIG;
+-   ofstream out(jupyconfig, ios::trunc);
+-   if (out.is_open()) {
+-      out << "import os" << endl;
+-      out << "rootbin = '" << rootbin << "'" << endl;
+-      out << "rootlib = '" << rootlib << "'" << endl;
+-#ifdef WIN32
+-      string jsrootsys = rootdata + "\\js\\";
+-      out << "os.environ['PYTHONPATH']      = '%s' % rootlib + ':' + os.getenv('PYTHONPATH', '')" << endl;
+-      out << "os.environ['PATH']            = '%s:%s\\bin' % (rootbin,rootbin) + ':' + '%s' % rootlib + ':' + os.getenv('PATH', '')" << endl;
+-#else
+-      string jsrootsys = rootdata + "/js/";
+-      out << "os.environ['PYTHONPATH']      = '%s' % rootlib + ':' + os.getenv('PYTHONPATH', '')" << endl;
+-      out << "os.environ['PATH']            = '%s:%s/bin' % (rootbin,rootbin) + ':' + os.getenv('PATH', '')" << endl;
+-      out << "os.environ['LD_LIBRARY_PATH'] = '%s' % rootlib + ':' + os.getenv('LD_LIBRARY_PATH', '')" << endl;
+-#endif
+-      out << "c.NotebookApp.extra_static_paths = ['" << jsrootsys << "']" << endl;
+-      out.close();
+-      return true;
+-   }
+-   else {
+-      fprintf(stderr,
+-              "Error installing notebook configuration files -- cannot create IPython config file at %s\n",
+-              jupyconfig.c_str());
+-      return false;
+-   }
+-}
+-
+-////////////////////////////////////////////////////////////////////////////////
+-/// Creates a file that stores the current commit id in it.
+-
+-static bool CreateStamp(string dest)
+-{
+-   ofstream out(dest + pathsep + COMMIT_FILE, ios::trunc);
+-   if (out.is_open()) {
+-      out << gROOT->GetGitCommit();
+-      out.close();
+-      return true;
+-   }
+-   else {
+-      fprintf(stderr,
+-              "Error installing notebook configuration files -- cannot create %s\n",
+-              COMMIT_FILE);
+-      return false;
+-   }
+-}
+-
+-////////////////////////////////////////////////////////////////////////////////
+ /// Spawn a Jupyter notebook customised by ROOT.
+ 
+ int main(int argc, char **argv)
+ {
+-   string rootbin(TROOT::GetBinDir().Data());
+-   string rootlib(TROOT::GetLibDir().Data());
+-   string rootetc(TROOT::GetEtcDir().Data());
+-   string rootdata(TROOT::GetDataDir().Data());
+-
+-   // If needed, install ROOT notebook files in the user's home directory
+-#ifdef WIN32
+-   string homedir(getenv("USERPROFILE"));
+-#else
+-   string homedir(getenv("HOME"));
+-#endif
+-   int inst = CheckNbInstallation(homedir);
+-   if (inst == -1) {
+-      // The etc directory contains the ROOT notebook files to install
+-      string source(rootetc + pathsep + NB_CONF_DIR);
+-      string dest(homedir + pathsep + ROOTNB_DIR);
+-      bool res = InstallNbFiles(source, dest) &&
+-                 CreateJupyterConfig(dest, rootbin, rootlib, rootdata) &&
+-                 CreateStamp(dest);
+-      if (!res) return 1;
+-   }
+-   else if (inst == -2) return 1;
+-
+    // Set IPython directory for the ROOT notebook flavour
+-   string rootnbpath = homedir + pathsep + ROOTNB_DIR;
++   string rootnbpath = pathsep + string("etc") + pathsep + string("root") + pathsep + string("notebook");
+    string jupyconfdir(JUPYTER_CONF_DIR_V + ("=" + rootnbpath));
+    string jupypathdir(JUPYTER_PATH_V + ("=" + rootnbpath));
+    putenv((char *)jupyconfdir.c_str());

Deleted: root.pc.tpl
===================================================================
--- root.pc.tpl	2021-11-23 15:44:31 UTC (rev 1054473)
+++ root.pc.tpl	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,12 +0,0 @@
-prefix=_PREFIX
-exec_prefix=_EXECPREFIX
-libdir=_LIBDIR
-includedir=_INCDIR
-
-Name: ROOT
-Description: C++ data analysis framework and interpreter from CERN
-Version: _PKGVERSION
-URL: _UPSTREAM_URL
-Requires: _REQUIRES
-Libs: _LIBRARIES
-Cflags: _CFLAGS

Copied: root/repos/community-testing-x86_64/root.pc.tpl (from rev 1054473, root/trunk/root.pc.tpl)
===================================================================
--- root.pc.tpl	                        (rev 0)
+++ root.pc.tpl	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,12 @@
+prefix=_PREFIX
+exec_prefix=_EXECPREFIX
+libdir=_LIBDIR
+includedir=_INCDIR
+
+Name: ROOT
+Description: C++ data analysis framework and interpreter from CERN
+Version: _PKGVERSION
+URL: _UPSTREAM_URL
+Requires: _REQUIRES
+Libs: _LIBRARIES
+Cflags: _CFLAGS

Deleted: root.xml
===================================================================
--- root.xml	2021-11-23 15:44:31 UTC (rev 1054473)
+++ root.xml	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,14 +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 file</comment>
-    <comment xml:lang="de">ROOT-Datei</comment>
-    <comment xml:lang="en">ROOT-File</comment>
-    <comment xml:lang="fr">ROOT-Fichier</comment>
-    <comment xml:lang="it">ROOT-File</comment>
-    <glob pattern="*.root"/>
-    <magic priority="80">
-      <match value="root" type="string" offset="0:64"/>
-    </magic>
-  </mime-type>
-</mime-info>

Copied: root/repos/community-testing-x86_64/root.xml (from rev 1054473, root/trunk/root.xml)
===================================================================
--- root.xml	                        (rev 0)
+++ root.xml	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,14 @@
+<?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 file</comment>
+    <comment xml:lang="de">ROOT-Datei</comment>
+    <comment xml:lang="en">ROOT-File</comment>
+    <comment xml:lang="fr">ROOT-Fichier</comment>
+    <comment xml:lang="it">ROOT-File</comment>
+    <glob pattern="*.root"/>
+    <magic priority="80">
+      <match value="root" type="string" offset="0:64"/>
+    </magic>
+  </mime-type>
+</mime-info>

Deleted: settings-cuda.cmake
===================================================================
--- settings-cuda.cmake	2021-11-23 15:44:31 UTC (rev 1054473)
+++ settings-cuda.cmake	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,112 +0,0 @@
-set (CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
-set (BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
-set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_CMAKEDIR /usr/lib/cmake/ROOT CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_BINDIR /usr/bin CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_LIBDIR /usr/lib/root CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_INCLUDEDIR /usr/include CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_SYSCONFDIR /etc/root CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_DATAROOTDIR /usr/share CACHE PATH "" FORCE)
-set (CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
-set (CMAKE_CUDA_STANDARD 17 CACHE STRING "" FORCE)
-set (PYTHIA8_DATA /usr/share/pythia8/xmldoc CACHE PATH "" FORCE)  # sync with pythia8 package
-set (GLEW_DIR /usr/include/GL CACHE PATH "" FORCE)  # need to set manually
-set (alien OFF CACHE BOOL "" FORCE)
-set (all OFF CACHE BOOL "" FORCE)
-set (asimage ON CACHE BOOL "" FORCE)
-set (builtin_afterimage OFF CACHE BOOL "" FORCE)
-set (builtin_clang ON CACHE BOOL "" FORCE)
-set (CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "" FORCE)
-set (CLANG_ANALYZER_BUILD_Z3 ON CACHE BOOL "" FORCE)
-set (builtin_cfitsio OFF CACHE BOOL "" FORCE)
-set (builtin_davix OFF CACHE BOOL "" FORCE)
-set (builtin_fftw3 OFF CACHE BOOL "" FORCE)
-set (builtin_ftgl OFF CACHE BOOL "" FORCE)
-set (builtin_freetype OFF CACHE BOOL "" FORCE)
-set (builtin_gl2ps OFF CACHE BOOL "" FORCE)
-set (builtin_glew OFF CACHE BOOL "" FORCE)
-set (builtin_gsl OFF CACHE BOOL "" FORCE)
-set (builtin_lzma OFF CACHE BOOL "" FORCE)
-set (builtin_nlohmannjson OFF CACHE BOOL "" FORCE)
-set (builtin_openui5 OFF CACHE BOOL "" FORCE)
-set (builtin_llvm ON CACHE BOOL "" FORCE)
-set (builtin_openssl OFF CACHE BOOL "" FORCE)
-set (builtin_pcre OFF CACHE BOOL "" FORCE)
-set (builtin_tbb OFF CACHE BOOL "" FORCE)
-set (builtin_unuran OFF CACHE BOOL "" FORCE)
-set (builtin_vc OFF CACHE BOOL "" FORCE)
-set (builtin_xxhash OFF CACHE BOOL "" FORCE)
-set (builtin_xrootd OFF CACHE BOOL "" FORCE)
-set (builtin_zlib OFF CACHE BOOL "" FORCE)
-set (ccache ON CACHE BOOL "" FORCE)
-set (clad ON CACHE BOOL "" FORCE)
-set (cocoa OFF CACHE BOOL "" FORCE)  # MacOS only
-set (cuda ON CACHE BOOL "" FORCE)
-set (cudnn ON CACHE BOOL "" FORCE)
-set (dataframe ON CACHE BOOL "" FORCE)
-set (davix OFF CACHE BOOL "" FORCE)
-set (dcache OFF CACHE BOOL "" FORCE)
-set (exceptions ON CACHE BOOL "" FORCE)
-set (fail-on-missing ON CACHE BOOL "" FORCE)
-set (fcgi ON CACHE BOOL "" FORCE)
-set (fftw3 ON CACHE BOOL "" FORCE)
-set (fitsio ON CACHE BOOL "" FORCE)
-set (fortran ON CACHE BOOL "" FORCE)
-set (gdml ON CACHE BOOL "" FORCE)
-set (genvector ON CACHE BOOL "" FORCE)
-set (gfal OFF CACHE BOOL "" FORCE)
-set (gl2ps ON CACHE BOOL "" FORCE)
-set (gminimal OFF CACHE BOOL "" FORCE)
-set (gnuinstall ON CACHE BOOL "" FORCE)
-set (gsl_shared ON CACHE BOOL "" FORCE)
-set (gviz ON CACHE BOOL "" FORCE)
-set (http ON CACHE BOOL "" FORCE)
-set (imt ON CACHE BOOL "" FORCE)
-set (jemalloc OFF CACHE BOOL "" FORCE)
-set (mathmore ON CACHE BOOL "" FORCE)
-set (minimal OFF CACHE BOOL "" FORCE)
-set (minuit2 ON CACHE BOOL "" FORCE)
-set (minuit2_mpi ON CACHE BOOL "" FORCE)
-set (minuit2_omp ON CACHE BOOL "" FORCE)
-set (mlp ON CACHE BOOL "" FORCE)
-set (monalisa OFF CACHE BOOL "" FORCE)
-set (mpi ON CACHE BOOL "" FORCE)
-set (mt ON CACHE BOOL "" FORCE)
-set (mysql ON CACHE BOOL "" FORCE)
-set (odbc ON CACHE BOOL "" FORCE)
-set (opengl ON CACHE BOOL "" FORCE)
-set (OpenGL_GL_PREFERENCE GLVND CACHE STRING "" FORCE)  # use new policy since 3.11
-set (oracle OFF CACHE BOOL "" FORCE)
-set (pgsql ON CACHE BOOL "" FORCE)
-set (pythia6 OFF CACHE BOOL "" FORCE)
-set (pythia6_nolink OFF CACHE BOOL "" FORCE)
-set (pythia8 ON CACHE BOOL "" FORCE)
-set (pyroot ON CACHE BOOL "" FORCE)
-set (qt5web ON CACHE BOOL "" FORCE)
-set (roofit ON CACHE BOOL "" FORCE)
-set (root7 ON CACHE BOOL "" FORCE)
-set (roottest OFF CACHE BOOL "" FORCE)
-set (rpath OFF CACHE BOOL "" FORCE)
-set (runtime_cxxmodules OFF CACHE BOOL "" FORCE)  # breaks python
-set (r OFF CACHE BOOL "" FORCE)  # requires r-rcpp
-set (shadowpw ON CACHE BOOL "" FORCE)
-set (shared ON CACHE BOOL "" FORCE)
-set (soversion OFF CACHE BOOL "" FORCE)
-set (spectrum ON CACHE BOOL "" FORCE)
-set (sqlite ON CACHE BOOL "" FORCE)
-set (ssl ON CACHE BOOL "" FORCE)
-set (tbb ON CACHE BOOL "" FORCE)
-set (tcmalloc OFF CACHE BOOL "" FORCE)
-set (testing OFF CACHE BOOL "" FORCE)
-set (tmva ON CACHE BOOL "" FORCE)
-set (tmva-cpu OFF CACHE BOOL "" FORCE)
-set (tmva-gpu ON CACHE BOOL "" FORCE)
-set (tmva-pymva ON CACHE BOOL "" FORCE)
-set (unuran ON CACHE BOOL "" FORCE)
-set (vc ON CACHE BOOL "" FORCE)
-set (vdt ON CACHE BOOL "" FORCE)
-set (winrtdebug OFF CACHE BOOL "" FORCE)  # windows only
-set (webgui ON CACHE BOOL "" FORCE)
-set (x11 ON CACHE BOOL "" FORCE)
-set (xml ON CACHE BOOL "" FORCE)
-set (xrootd ON CACHE BOOL "" FORCE)

Copied: root/repos/community-testing-x86_64/settings-cuda.cmake (from rev 1054473, root/trunk/settings-cuda.cmake)
===================================================================
--- settings-cuda.cmake	                        (rev 0)
+++ settings-cuda.cmake	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,112 @@
+set (CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
+set (BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
+set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_CMAKEDIR /usr/lib/cmake/ROOT CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_BINDIR /usr/bin CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_LIBDIR /usr/lib/root CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_INCLUDEDIR /usr/include CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_SYSCONFDIR /etc/root CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_DATAROOTDIR /usr/share CACHE PATH "" FORCE)
+set (CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
+set (CMAKE_CUDA_STANDARD 17 CACHE STRING "" FORCE)
+set (PYTHIA8_DATA /usr/share/pythia8/xmldoc CACHE PATH "" FORCE)  # sync with pythia8 package
+set (GLEW_DIR /usr/include/GL CACHE PATH "" FORCE)  # need to set manually
+set (alien OFF CACHE BOOL "" FORCE)
+set (all OFF CACHE BOOL "" FORCE)
+set (asimage ON CACHE BOOL "" FORCE)
+set (builtin_afterimage OFF CACHE BOOL "" FORCE)
+set (builtin_clang ON CACHE BOOL "" FORCE)
+set (CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "" FORCE)
+set (CLANG_ANALYZER_BUILD_Z3 ON CACHE BOOL "" FORCE)
+set (builtin_cfitsio OFF CACHE BOOL "" FORCE)
+set (builtin_davix OFF CACHE BOOL "" FORCE)
+set (builtin_fftw3 OFF CACHE BOOL "" FORCE)
+set (builtin_ftgl OFF CACHE BOOL "" FORCE)
+set (builtin_freetype OFF CACHE BOOL "" FORCE)
+set (builtin_gl2ps OFF CACHE BOOL "" FORCE)
+set (builtin_glew OFF CACHE BOOL "" FORCE)
+set (builtin_gsl OFF CACHE BOOL "" FORCE)
+set (builtin_lzma OFF CACHE BOOL "" FORCE)
+set (builtin_nlohmannjson OFF CACHE BOOL "" FORCE)
+set (builtin_openui5 OFF CACHE BOOL "" FORCE)
+set (builtin_llvm ON CACHE BOOL "" FORCE)
+set (builtin_openssl OFF CACHE BOOL "" FORCE)
+set (builtin_pcre OFF CACHE BOOL "" FORCE)
+set (builtin_tbb OFF CACHE BOOL "" FORCE)
+set (builtin_unuran OFF CACHE BOOL "" FORCE)
+set (builtin_vc OFF CACHE BOOL "" FORCE)
+set (builtin_xxhash OFF CACHE BOOL "" FORCE)
+set (builtin_xrootd OFF CACHE BOOL "" FORCE)
+set (builtin_zlib OFF CACHE BOOL "" FORCE)
+set (ccache ON CACHE BOOL "" FORCE)
+set (clad ON CACHE BOOL "" FORCE)
+set (cocoa OFF CACHE BOOL "" FORCE)  # MacOS only
+set (cuda ON CACHE BOOL "" FORCE)
+set (cudnn ON CACHE BOOL "" FORCE)
+set (dataframe ON CACHE BOOL "" FORCE)
+set (davix OFF CACHE BOOL "" FORCE)
+set (dcache OFF CACHE BOOL "" FORCE)
+set (exceptions ON CACHE BOOL "" FORCE)
+set (fail-on-missing ON CACHE BOOL "" FORCE)
+set (fcgi ON CACHE BOOL "" FORCE)
+set (fftw3 ON CACHE BOOL "" FORCE)
+set (fitsio ON CACHE BOOL "" FORCE)
+set (fortran ON CACHE BOOL "" FORCE)
+set (gdml ON CACHE BOOL "" FORCE)
+set (genvector ON CACHE BOOL "" FORCE)
+set (gfal OFF CACHE BOOL "" FORCE)
+set (gl2ps ON CACHE BOOL "" FORCE)
+set (gminimal OFF CACHE BOOL "" FORCE)
+set (gnuinstall ON CACHE BOOL "" FORCE)
+set (gsl_shared ON CACHE BOOL "" FORCE)
+set (gviz ON CACHE BOOL "" FORCE)
+set (http ON CACHE BOOL "" FORCE)
+set (imt ON CACHE BOOL "" FORCE)
+set (jemalloc OFF CACHE BOOL "" FORCE)
+set (mathmore ON CACHE BOOL "" FORCE)
+set (minimal OFF CACHE BOOL "" FORCE)
+set (minuit2 ON CACHE BOOL "" FORCE)
+set (minuit2_mpi ON CACHE BOOL "" FORCE)
+set (minuit2_omp ON CACHE BOOL "" FORCE)
+set (mlp ON CACHE BOOL "" FORCE)
+set (monalisa OFF CACHE BOOL "" FORCE)
+set (mpi ON CACHE BOOL "" FORCE)
+set (mt ON CACHE BOOL "" FORCE)
+set (mysql ON CACHE BOOL "" FORCE)
+set (odbc ON CACHE BOOL "" FORCE)
+set (opengl ON CACHE BOOL "" FORCE)
+set (OpenGL_GL_PREFERENCE GLVND CACHE STRING "" FORCE)  # use new policy since 3.11
+set (oracle OFF CACHE BOOL "" FORCE)
+set (pgsql ON CACHE BOOL "" FORCE)
+set (pythia6 OFF CACHE BOOL "" FORCE)
+set (pythia6_nolink OFF CACHE BOOL "" FORCE)
+set (pythia8 ON CACHE BOOL "" FORCE)
+set (pyroot ON CACHE BOOL "" FORCE)
+set (qt5web ON CACHE BOOL "" FORCE)
+set (roofit ON CACHE BOOL "" FORCE)
+set (root7 ON CACHE BOOL "" FORCE)
+set (roottest OFF CACHE BOOL "" FORCE)
+set (rpath OFF CACHE BOOL "" FORCE)
+set (runtime_cxxmodules OFF CACHE BOOL "" FORCE)  # breaks python
+set (r OFF CACHE BOOL "" FORCE)  # requires r-rcpp
+set (shadowpw ON CACHE BOOL "" FORCE)
+set (shared ON CACHE BOOL "" FORCE)
+set (soversion OFF CACHE BOOL "" FORCE)
+set (spectrum ON CACHE BOOL "" FORCE)
+set (sqlite ON CACHE BOOL "" FORCE)
+set (ssl ON CACHE BOOL "" FORCE)
+set (tbb ON CACHE BOOL "" FORCE)
+set (tcmalloc OFF CACHE BOOL "" FORCE)
+set (testing OFF CACHE BOOL "" FORCE)
+set (tmva ON CACHE BOOL "" FORCE)
+set (tmva-cpu OFF CACHE BOOL "" FORCE)
+set (tmva-gpu ON CACHE BOOL "" FORCE)
+set (tmva-pymva ON CACHE BOOL "" FORCE)
+set (unuran ON CACHE BOOL "" FORCE)
+set (vc ON CACHE BOOL "" FORCE)
+set (vdt ON CACHE BOOL "" FORCE)
+set (winrtdebug OFF CACHE BOOL "" FORCE)  # windows only
+set (webgui ON CACHE BOOL "" FORCE)
+set (x11 ON CACHE BOOL "" FORCE)
+set (xml ON CACHE BOOL "" FORCE)
+set (xrootd ON CACHE BOOL "" FORCE)

Deleted: settings.cmake
===================================================================
--- settings.cmake	2021-11-23 15:44:31 UTC (rev 1054473)
+++ settings.cmake	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,112 +0,0 @@
-set (CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
-set (BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
-set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_CMAKEDIR /usr/lib/cmake/ROOT CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_BINDIR /usr/bin CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_LIBDIR /usr/lib/root CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_INCLUDEDIR /usr/include CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_SYSCONFDIR /etc/root CACHE PATH "" FORCE)
-set (CMAKE_INSTALL_DATAROOTDIR /usr/share CACHE PATH "" FORCE)
-set (CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
-set (CMAKE_CUDA_STANDARD 17 CACHE STRING "" FORCE)
-set (PYTHIA8_DATA /usr/share/pythia8/xmldoc CACHE PATH "" FORCE)  # sync with pythia8 package
-set (GLEW_DIR /usr/include/GL CACHE PATH "" FORCE)  # need to set manually
-set (alien OFF CACHE BOOL "" FORCE)
-set (all OFF CACHE BOOL "" FORCE)
-set (asimage ON CACHE BOOL "" FORCE)
-set (builtin_afterimage OFF CACHE BOOL "" FORCE)
-set (builtin_clang ON CACHE BOOL "" FORCE)
-set (CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "" FORCE)
-set (CLANG_ANALYZER_BUILD_Z3 ON CACHE BOOL "" FORCE)
-set (builtin_cfitsio OFF CACHE BOOL "" FORCE)
-set (builtin_davix OFF CACHE BOOL "" FORCE)
-set (builtin_fftw3 OFF CACHE BOOL "" FORCE)
-set (builtin_ftgl OFF CACHE BOOL "" FORCE)
-set (builtin_freetype OFF CACHE BOOL "" FORCE)
-set (builtin_gl2ps OFF CACHE BOOL "" FORCE)
-set (builtin_glew OFF CACHE BOOL "" FORCE)
-set (builtin_gsl OFF CACHE BOOL "" FORCE)
-set (builtin_lzma OFF CACHE BOOL "" FORCE)
-set (builtin_nlohmannjson OFF CACHE BOOL "" FORCE)
-set (builtin_openui5 OFF CACHE BOOL "" FORCE)
-set (builtin_llvm ON CACHE BOOL "" FORCE)
-set (builtin_openssl OFF CACHE BOOL "" FORCE)
-set (builtin_pcre OFF CACHE BOOL "" FORCE)
-set (builtin_tbb OFF CACHE BOOL "" FORCE)
-set (builtin_unuran OFF CACHE BOOL "" FORCE)
-set (builtin_vc OFF CACHE BOOL "" FORCE)
-set (builtin_xxhash OFF CACHE BOOL "" FORCE)
-set (builtin_xrootd OFF CACHE BOOL "" FORCE)
-set (builtin_zlib OFF CACHE BOOL "" FORCE)
-set (ccache ON CACHE BOOL "" FORCE)
-set (clad ON CACHE BOOL "" FORCE)
-set (cocoa OFF CACHE BOOL "" FORCE)  # MacOS only
-set (cuda OFF CACHE BOOL "" FORCE)
-set (cudnn OFF CACHE BOOL "" FORCE)
-set (dataframe ON CACHE BOOL "" FORCE)
-set (davix OFF CACHE BOOL "" FORCE)
-set (dcache OFF CACHE BOOL "" FORCE)
-set (exceptions ON CACHE BOOL "" FORCE)
-set (fail-on-missing ON CACHE BOOL "" FORCE)
-set (fcgi ON CACHE BOOL "" FORCE)
-set (fftw3 ON CACHE BOOL "" FORCE)
-set (fitsio ON CACHE BOOL "" FORCE)
-set (fortran ON CACHE BOOL "" FORCE)
-set (gdml ON CACHE BOOL "" FORCE)
-set (genvector ON CACHE BOOL "" FORCE)
-set (gfal OFF CACHE BOOL "" FORCE)
-set (gl2ps ON CACHE BOOL "" FORCE)
-set (gminimal OFF CACHE BOOL "" FORCE)
-set (gnuinstall ON CACHE BOOL "" FORCE)
-set (gsl_shared ON CACHE BOOL "" FORCE)
-set (gviz ON CACHE BOOL "" FORCE)
-set (http ON CACHE BOOL "" FORCE)
-set (imt ON CACHE BOOL "" FORCE)
-set (jemalloc OFF CACHE BOOL "" FORCE)
-set (mathmore ON CACHE BOOL "" FORCE)
-set (minimal OFF CACHE BOOL "" FORCE)
-set (minuit2 ON CACHE BOOL "" FORCE)
-set (minuit2_mpi ON CACHE BOOL "" FORCE)
-set (minuit2_omp ON CACHE BOOL "" FORCE)
-set (mlp ON CACHE BOOL "" FORCE)
-set (monalisa OFF CACHE BOOL "" FORCE)
-set (mpi ON CACHE BOOL "" FORCE)
-set (mt ON CACHE BOOL "" FORCE)
-set (mysql ON CACHE BOOL "" FORCE)
-set (odbc ON CACHE BOOL "" FORCE)
-set (opengl ON CACHE BOOL "" FORCE)
-set (OpenGL_GL_PREFERENCE GLVND CACHE STRING "" FORCE)  # use new policy since 3.11
-set (oracle OFF CACHE BOOL "" FORCE)
-set (pgsql ON CACHE BOOL "" FORCE)
-set (pythia6 OFF CACHE BOOL "" FORCE)
-set (pythia6_nolink OFF CACHE BOOL "" FORCE)
-set (pythia8 ON CACHE BOOL "" FORCE)
-set (pyroot ON CACHE BOOL "" FORCE)
-set (qt5web ON CACHE BOOL "" FORCE)
-set (roofit ON CACHE BOOL "" FORCE)
-set (root7 ON CACHE BOOL "" FORCE)
-set (roottest OFF CACHE BOOL "" FORCE)
-set (rpath OFF CACHE BOOL "" FORCE)
-set (runtime_cxxmodules OFF CACHE BOOL "" FORCE)  # breaks python
-set (r OFF CACHE BOOL "" FORCE)  # requires r-rcpp
-set (shadowpw ON CACHE BOOL "" FORCE)
-set (shared ON CACHE BOOL "" FORCE)
-set (soversion OFF CACHE BOOL "" FORCE)
-set (spectrum ON CACHE BOOL "" FORCE)
-set (sqlite ON CACHE BOOL "" FORCE)
-set (ssl ON CACHE BOOL "" FORCE)
-set (tbb ON CACHE BOOL "" FORCE)
-set (tcmalloc OFF CACHE BOOL "" FORCE)
-set (testing OFF CACHE BOOL "" FORCE)
-set (tmva ON CACHE BOOL "" FORCE)
-set (tmva-cpu ON CACHE BOOL "" FORCE)
-set (tmva-gpu OFF CACHE BOOL "" FORCE)
-set (tmva-pymva ON CACHE BOOL "" FORCE)
-set (unuran ON CACHE BOOL "" FORCE)
-set (vc ON CACHE BOOL "" FORCE)
-set (vdt ON CACHE BOOL "" FORCE)
-set (winrtdebug OFF CACHE BOOL "" FORCE)  # windows only
-set (webgui ON CACHE BOOL "" FORCE)
-set (x11 ON CACHE BOOL "" FORCE)
-set (xml ON CACHE BOOL "" FORCE)
-set (xrootd ON CACHE BOOL "" FORCE)

Copied: root/repos/community-testing-x86_64/settings.cmake (from rev 1054473, root/trunk/settings.cmake)
===================================================================
--- settings.cmake	                        (rev 0)
+++ settings.cmake	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,112 @@
+set (CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
+set (BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
+set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_CMAKEDIR /usr/lib/cmake/ROOT CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_BINDIR /usr/bin CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_LIBDIR /usr/lib/root CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_INCLUDEDIR /usr/include CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_SYSCONFDIR /etc/root CACHE PATH "" FORCE)
+set (CMAKE_INSTALL_DATAROOTDIR /usr/share CACHE PATH "" FORCE)
+set (CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
+set (CMAKE_CUDA_STANDARD 17 CACHE STRING "" FORCE)
+set (PYTHIA8_DATA /usr/share/pythia8/xmldoc CACHE PATH "" FORCE)  # sync with pythia8 package
+set (GLEW_DIR /usr/include/GL CACHE PATH "" FORCE)  # need to set manually
+set (alien OFF CACHE BOOL "" FORCE)
+set (all OFF CACHE BOOL "" FORCE)
+set (asimage ON CACHE BOOL "" FORCE)
+set (builtin_afterimage OFF CACHE BOOL "" FORCE)
+set (builtin_clang ON CACHE BOOL "" FORCE)
+set (CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "" FORCE)
+set (CLANG_ANALYZER_BUILD_Z3 ON CACHE BOOL "" FORCE)
+set (builtin_cfitsio OFF CACHE BOOL "" FORCE)
+set (builtin_davix OFF CACHE BOOL "" FORCE)
+set (builtin_fftw3 OFF CACHE BOOL "" FORCE)
+set (builtin_ftgl OFF CACHE BOOL "" FORCE)
+set (builtin_freetype OFF CACHE BOOL "" FORCE)
+set (builtin_gl2ps OFF CACHE BOOL "" FORCE)
+set (builtin_glew OFF CACHE BOOL "" FORCE)
+set (builtin_gsl OFF CACHE BOOL "" FORCE)
+set (builtin_lzma OFF CACHE BOOL "" FORCE)
+set (builtin_nlohmannjson OFF CACHE BOOL "" FORCE)
+set (builtin_openui5 OFF CACHE BOOL "" FORCE)
+set (builtin_llvm ON CACHE BOOL "" FORCE)
+set (builtin_openssl OFF CACHE BOOL "" FORCE)
+set (builtin_pcre OFF CACHE BOOL "" FORCE)
+set (builtin_tbb OFF CACHE BOOL "" FORCE)
+set (builtin_unuran OFF CACHE BOOL "" FORCE)
+set (builtin_vc OFF CACHE BOOL "" FORCE)
+set (builtin_xxhash OFF CACHE BOOL "" FORCE)
+set (builtin_xrootd OFF CACHE BOOL "" FORCE)
+set (builtin_zlib OFF CACHE BOOL "" FORCE)
+set (ccache ON CACHE BOOL "" FORCE)
+set (clad ON CACHE BOOL "" FORCE)
+set (cocoa OFF CACHE BOOL "" FORCE)  # MacOS only
+set (cuda OFF CACHE BOOL "" FORCE)
+set (cudnn OFF CACHE BOOL "" FORCE)
+set (dataframe ON CACHE BOOL "" FORCE)
+set (davix OFF CACHE BOOL "" FORCE)
+set (dcache OFF CACHE BOOL "" FORCE)
+set (exceptions ON CACHE BOOL "" FORCE)
+set (fail-on-missing ON CACHE BOOL "" FORCE)
+set (fcgi ON CACHE BOOL "" FORCE)
+set (fftw3 ON CACHE BOOL "" FORCE)
+set (fitsio ON CACHE BOOL "" FORCE)
+set (fortran ON CACHE BOOL "" FORCE)
+set (gdml ON CACHE BOOL "" FORCE)
+set (genvector ON CACHE BOOL "" FORCE)
+set (gfal OFF CACHE BOOL "" FORCE)
+set (gl2ps ON CACHE BOOL "" FORCE)
+set (gminimal OFF CACHE BOOL "" FORCE)
+set (gnuinstall ON CACHE BOOL "" FORCE)
+set (gsl_shared ON CACHE BOOL "" FORCE)
+set (gviz ON CACHE BOOL "" FORCE)
+set (http ON CACHE BOOL "" FORCE)
+set (imt ON CACHE BOOL "" FORCE)
+set (jemalloc OFF CACHE BOOL "" FORCE)
+set (mathmore ON CACHE BOOL "" FORCE)
+set (minimal OFF CACHE BOOL "" FORCE)
+set (minuit2 ON CACHE BOOL "" FORCE)
+set (minuit2_mpi ON CACHE BOOL "" FORCE)
+set (minuit2_omp ON CACHE BOOL "" FORCE)
+set (mlp ON CACHE BOOL "" FORCE)
+set (monalisa OFF CACHE BOOL "" FORCE)
+set (mpi ON CACHE BOOL "" FORCE)
+set (mt ON CACHE BOOL "" FORCE)
+set (mysql ON CACHE BOOL "" FORCE)
+set (odbc ON CACHE BOOL "" FORCE)
+set (opengl ON CACHE BOOL "" FORCE)
+set (OpenGL_GL_PREFERENCE GLVND CACHE STRING "" FORCE)  # use new policy since 3.11
+set (oracle OFF CACHE BOOL "" FORCE)
+set (pgsql ON CACHE BOOL "" FORCE)
+set (pythia6 OFF CACHE BOOL "" FORCE)
+set (pythia6_nolink OFF CACHE BOOL "" FORCE)
+set (pythia8 ON CACHE BOOL "" FORCE)
+set (pyroot ON CACHE BOOL "" FORCE)
+set (qt5web ON CACHE BOOL "" FORCE)
+set (roofit ON CACHE BOOL "" FORCE)
+set (root7 ON CACHE BOOL "" FORCE)
+set (roottest OFF CACHE BOOL "" FORCE)
+set (rpath OFF CACHE BOOL "" FORCE)
+set (runtime_cxxmodules OFF CACHE BOOL "" FORCE)  # breaks python
+set (r OFF CACHE BOOL "" FORCE)  # requires r-rcpp
+set (shadowpw ON CACHE BOOL "" FORCE)
+set (shared ON CACHE BOOL "" FORCE)
+set (soversion OFF CACHE BOOL "" FORCE)
+set (spectrum ON CACHE BOOL "" FORCE)
+set (sqlite ON CACHE BOOL "" FORCE)
+set (ssl ON CACHE BOOL "" FORCE)
+set (tbb ON CACHE BOOL "" FORCE)
+set (tcmalloc OFF CACHE BOOL "" FORCE)
+set (testing OFF CACHE BOOL "" FORCE)
+set (tmva ON CACHE BOOL "" FORCE)
+set (tmva-cpu ON CACHE BOOL "" FORCE)
+set (tmva-gpu OFF CACHE BOOL "" FORCE)
+set (tmva-pymva ON CACHE BOOL "" FORCE)
+set (unuran ON CACHE BOOL "" FORCE)
+set (vc ON CACHE BOOL "" FORCE)
+set (vdt ON CACHE BOOL "" FORCE)
+set (winrtdebug OFF CACHE BOOL "" FORCE)  # windows only
+set (webgui ON CACHE BOOL "" FORCE)
+set (x11 ON CACHE BOOL "" FORCE)
+set (xml ON CACHE BOOL "" FORCE)
+set (xrootd ON CACHE BOOL "" FORCE)

Deleted: thisroot.fail
===================================================================
--- thisroot.fail	2021-11-23 15:44:31 UTC (rev 1054473)
+++ thisroot.fail	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -1,49 +0,0 @@
-#!/bin/bash
-
-# thisroot.* scripts should not be used to
-# configure ROOT on Arch. Notify user and
-# return an error
-
-# default behaviour
-__THIS_ROOT_ERROR_AS_WARNING__=0
-__THIS_ROOT_RETURNCODE__=1
-__THIS_ROOT_MESSAGE__='ERROR'
-__THIS_ROOT_REGEX_TEST__='^(no|n|0|off)$'
-
-
-function fail {
-    printf '%s\n' "$1" >&2
-    return "${2:-$1}"
-}
-
-# [FS#71639](https://bugs.archlinux.org/task/71639)
-if [[ ! -z "${THIS_ROOT_ERROR_AS_WARNING}" ]]; then
-  THIS_ROOT_ERROR_AS_WARNING=$(echo "${THIS_ROOT_ERROR_AS_WARNING}" | tr '[:upper:]' '[:lower:]')
-  if [[ ! ${THIS_ROOT_ERROR_AS_WARNING} =~ ${__THIS_ROOT_REGEX_TEST__} ]]; then
-    __THIS_ROOT_ERROR_AS_WARNING__=1
-  fi
-fi
-
-if [[ ${__THIS_ROOT_ERROR_AS_WARNING__} -eq 1 ]]; then
-  __THIS_ROOT_RETURNCODE__=0
-  __THIS_ROOT_MESSAGE__='WARNING'
-fi
-
-__THIS_ROOT_CORE_MESSAGE__="""${__THIS_ROOT_MESSAGE__}: thisroot.sh type scripts are no longer supported.
-They should never be used! This includes their other forms: thisroot.csh, thisroot.fish, etc."""
-
-__THIS_ROOT_ERROR_EXTRA_MESSAGE__="""If you would prefer to see this error as a warning, please use the
-environment variable 'THIS_ROOT_ERROR_AS_WARNING'.
-For example, you may run your original command like so:
-  THIS_ROOT_ERROR_AS_WARNING=1 mycommand
-or even:
-  THIS_ROOT_ERROR_AS_WARNING=ON mycommand"""
-
-if [[ ${__THIS_ROOT_ERROR_AS_WARNING__} -eq 1 ]]; then
-  __THIS_ROOT_FINAL_MESSAGE__="${__THIS_ROOT_CORE_MESSAGE__}"
-else
-  __THIS_ROOT_FINAL_MESSAGE__="""${__THIS_ROOT_CORE_MESSAGE__}
-${__THIS_ROOT_ERROR_EXTRA_MESSAGE__=}"""
-fi
-
-fail "${__THIS_ROOT_FINAL_MESSAGE__}" ${__THIS_ROOT_RETURNCODE__}

Copied: root/repos/community-testing-x86_64/thisroot.fail (from rev 1054473, root/trunk/thisroot.fail)
===================================================================
--- thisroot.fail	                        (rev 0)
+++ thisroot.fail	2021-11-23 15:44:45 UTC (rev 1054474)
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# thisroot.* scripts should not be used to
+# configure ROOT on Arch. Notify user and
+# return an error
+
+# default behaviour
+__THIS_ROOT_ERROR_AS_WARNING__=0
+__THIS_ROOT_RETURNCODE__=1
+__THIS_ROOT_MESSAGE__='ERROR'
+__THIS_ROOT_REGEX_TEST__='^(no|n|0|off)$'
+
+
+function fail {
+    printf '%s\n' "$1" >&2
+    return "${2:-$1}"
+}
+
+# [FS#71639](https://bugs.archlinux.org/task/71639)
+if [[ ! -z "${THIS_ROOT_ERROR_AS_WARNING}" ]]; then
+  THIS_ROOT_ERROR_AS_WARNING=$(echo "${THIS_ROOT_ERROR_AS_WARNING}" | tr '[:upper:]' '[:lower:]')
+  if [[ ! ${THIS_ROOT_ERROR_AS_WARNING} =~ ${__THIS_ROOT_REGEX_TEST__} ]]; then
+    __THIS_ROOT_ERROR_AS_WARNING__=1
+  fi
+fi
+
+if [[ ${__THIS_ROOT_ERROR_AS_WARNING__} -eq 1 ]]; then
+  __THIS_ROOT_RETURNCODE__=0
+  __THIS_ROOT_MESSAGE__='WARNING'
+fi
+
+__THIS_ROOT_CORE_MESSAGE__="""${__THIS_ROOT_MESSAGE__}: thisroot.sh type scripts are no longer supported.
+They should never be used! This includes their other forms: thisroot.csh, thisroot.fish, etc."""
+
+__THIS_ROOT_ERROR_EXTRA_MESSAGE__="""If you would prefer to see this error as a warning, please use the
+environment variable 'THIS_ROOT_ERROR_AS_WARNING'.
+For example, you may run your original command like so:
+  THIS_ROOT_ERROR_AS_WARNING=1 mycommand
+or even:
+  THIS_ROOT_ERROR_AS_WARNING=ON mycommand"""
+
+if [[ ${__THIS_ROOT_ERROR_AS_WARNING__} -eq 1 ]]; then
+  __THIS_ROOT_FINAL_MESSAGE__="${__THIS_ROOT_CORE_MESSAGE__}"
+else
+  __THIS_ROOT_FINAL_MESSAGE__="""${__THIS_ROOT_CORE_MESSAGE__}
+${__THIS_ROOT_ERROR_EXTRA_MESSAGE__=}"""
+fi
+
+fail "${__THIS_ROOT_FINAL_MESSAGE__}" ${__THIS_ROOT_RETURNCODE__}



More information about the arch-commits mailing list