From be9c0e8b7e093e6b69eb0b3d1aec275ca38dade3 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Tue, 25 Apr 2017 23:28:13 -0400 Subject: root: 6.08.02 -> 6.09.02 This also fixes breakage on darwin due to LLVM4.0 migration. I had to enable opengl because otherwise macOS build is broken. See root commit 23f8871c7 ('Do not include OpenGL directly but use our TGLIncludes for that purpose.') I've enabled xml because TUnfold depends on it. --- .../science/misc/root/ROOT-8728-extra.patch | 200 +++++++++++++++++++++ pkgs/applications/science/misc/root/default.nix | 24 ++- pkgs/applications/science/misc/root/sw_vers.patch | 2 +- 3 files changed, 217 insertions(+), 9 deletions(-) create mode 100644 pkgs/applications/science/misc/root/ROOT-8728-extra.patch (limited to 'pkgs/applications/science/misc') diff --git a/pkgs/applications/science/misc/root/ROOT-8728-extra.patch b/pkgs/applications/science/misc/root/ROOT-8728-extra.patch new file mode 100644 index 000000000000..ec8c160c6f3b --- /dev/null +++ b/pkgs/applications/science/misc/root/ROOT-8728-extra.patch @@ -0,0 +1,200 @@ +diff --git a/core/base/inc/ROOT/StringConv.hxx b/core/base/inc/ROOT/StringConv.hxx +index 629fc18..4efa54a 100644 +--- a/core/base/inc/ROOT/StringConv.hxx ++++ b/core/base/inc/ROOT/StringConv.hxx +@@ -89,7 +89,7 @@ EFromHumanReadableSize FromHumanReadableSize(std::string_view str, T &value) + size_t size = str.size(); + size_t cur; + // Parse leading numeric factor +- const double coeff = stod(str, &cur); ++ const double coeff = stod(static_cast(str), &cur); + + // Skip any intermediate white space + while (cur &classes, + gSystem->PrependPathName(dirbase, header); + dir = gSystem->DirName(dir); + } +- fileContent += TString("#include \"") + header + "\"\n"; ++ fileContent += (TString("#include \"") + header + "\"\n").Data(); + } + } + for (it = fwdDecls.begin(); it != fwdDecls.end(); ++it) { +@@ -1061,7 +1061,7 @@ TCling::TCling(const char *name, const char *title) + ROOT::TMetaUtils::SetPathsForRelocatability(clingArgsStorage); + + // Add -I early so ASTReader can find the headers. +- std::string interpInclude(TROOT::GetEtcDir()); ++ std::string interpInclude(TROOT::GetEtcDir().Data()); + clingArgsStorage.push_back("-I" + interpInclude); + + // Add include path to etc/cling. FIXME: This is a short term solution. The +@@ -1070,7 +1070,7 @@ TCling::TCling(const char *name, const char *title) + clingArgsStorage.push_back("-I" + interpInclude + "/cling"); + + // Add the root include directory and etc/ to list searched by default. +- clingArgsStorage.push_back(std::string("-I" + TROOT::GetIncludeDir())); ++ clingArgsStorage.push_back(std::string(("-I" + TROOT::GetIncludeDir()).Data())); + + // Add the current path to the include path + // TCling::AddIncludePath("."); +diff --git a/hist/hist/src/TFormula.cxx b/hist/hist/src/TFormula.cxx +index abf3929..e7dad98 100644 +--- a/hist/hist/src/TFormula.cxx ++++ b/hist/hist/src/TFormula.cxx +@@ -1677,7 +1677,7 @@ void TFormula::ProcessFormula(TString &formula) + if(fun.fName.Contains("::")) // add support for nested namespaces + { + // look for last occurence of "::" +- std::string name(fun.fName); ++ std::string name(fun.fName.Data()); + size_t index = name.rfind("::"); + assert(index != std::string::npos); + TString className = fun.fName(0,fun.fName(0,index).Length()); +@@ -1869,7 +1869,7 @@ void TFormula::ProcessFormula(TString &formula) + + // save copy of inputFormula in a std::strig for the unordered map + // and also formula is same as FClingInput typically and it will be modified +- std::string inputFormula = std::string(formula); ++ std::string inputFormula = std::string(formula.Data()); + + + // valid input formula - try to put into Cling +diff --git a/main/src/nbmain.cxx b/main/src/nbmain.cxx +index 55d4f2f..8490149 100644 +--- a/main/src/nbmain.cxx ++++ b/main/src/nbmain.cxx +@@ -173,9 +173,9 @@ static bool CreateStamp(string dest) + + int main() + { +- string rootbin(TROOT::GetBinDir()); +- string rootlib(TROOT::GetLibDir()); +- string rootetc(TROOT::GetEtcDir()); ++ string rootbin(TROOT::GetBinDir().Data()); ++ string rootlib(TROOT::GetLibDir().Data()); ++ string rootetc(TROOT::GetEtcDir().Data()); + + // If needed, install ROOT notebook files in the user's home directory + #ifdef WIN32 +diff --git a/math/minuit/src/TMinuitMinimizer.cxx b/math/minuit/src/TMinuitMinimizer.cxx +index 4e2082a..18215c0 100644 +--- a/math/minuit/src/TMinuitMinimizer.cxx ++++ b/math/minuit/src/TMinuitMinimizer.cxx +@@ -454,7 +454,7 @@ std::string TMinuitMinimizer::VariableName(unsigned int ivar) const { + // return the variable name + if (!CheckMinuitInstance()) return std::string(); + if (!CheckVarIndex(ivar)) return std::string(); +- return std::string(fMinuit->fCpnam[ivar]); ++ return std::string(fMinuit->fCpnam[ivar].Data()); + } + + int TMinuitMinimizer::VariableIndex(const std::string & ) const { +diff --git a/tmva/tmva/src/Factory.cxx b/tmva/tmva/src/Factory.cxx +index 36060ef..a1bbe34 100644 +--- a/tmva/tmva/src/Factory.cxx ++++ b/tmva/tmva/src/Factory.cxx +@@ -390,7 +390,7 @@ TMVA::MethodBase* TMVA::Factory::BookMethod( TMVA::DataLoader *loader, TString t + // initialize methods + IMethod* im; + if (!boostNum) { +- im = ClassifierFactory::Instance().Create( std::string(theMethodName), ++ im = ClassifierFactory::Instance().Create( std::string(theMethodName.Data()), + fJobName, + methodTitle, + loader->DefaultDataSetInfo(), +@@ -933,7 +933,7 @@ void TMVA::Factory::TrainAllMethods() + + // recreate + m = dynamic_cast( ClassifierFactory::Instance() +- .Create( std::string(Types::Instance().GetMethodName(methodType)), ++ .Create( std::string(Types::Instance().GetMethodName(methodType).Data()), + dataSetInfo, weightfile ) ); + if( m->GetMethodType() == Types::kCategory ){ + MethodCategory *methCat = (dynamic_cast(m)); +diff --git a/tmva/tmva/src/MethodBoost.cxx b/tmva/tmva/src/MethodBoost.cxx +index 1349e5d..2125ab3 100644 +--- a/tmva/tmva/src/MethodBoost.cxx ++++ b/tmva/tmva/src/MethodBoost.cxx +@@ -389,7 +389,7 @@ void TMVA::MethodBoost::Train() + // the first classifier shows the option string output, the rest not + if (fCurrentMethodIdx>0) TMVA::MsgLogger::InhibitOutput(); + +- IMethod* method = ClassifierFactory::Instance().Create(std::string(fBoostedMethodName), ++ IMethod* method = ClassifierFactory::Instance().Create(std::string(fBoostedMethodName.Data()), + GetJobName(), + Form("%s_B%04i", fBoostedMethodTitle.Data(),fCurrentMethodIdx), + DataInfo(), +diff --git a/tmva/tmva/src/MethodCategory.cxx b/tmva/tmva/src/MethodCategory.cxx +index c2cbe80..d278cca 100644 +--- a/tmva/tmva/src/MethodCategory.cxx ++++ b/tmva/tmva/src/MethodCategory.cxx +@@ -147,7 +147,7 @@ TMVA::IMethod* TMVA::MethodCategory::AddMethod( const TCut& theCut, + const TString& theTitle, + const TString& theOptions ) + { +- std::string addedMethodName = std::string(Types::Instance().GetMethodName(theMethod)); ++ std::string addedMethodName = std::string(Types::Instance().GetMethodName(theMethod).Data()); + + Log() << kINFO << "Adding sub-classifier: " << addedMethodName << "::" << theTitle << Endl; + +diff --git a/tmva/tmva/src/MethodCompositeBase.cxx b/tmva/tmva/src/MethodCompositeBase.cxx +index 98fa5da..96bd9a3 100644 +--- a/tmva/tmva/src/MethodCompositeBase.cxx ++++ b/tmva/tmva/src/MethodCompositeBase.cxx +@@ -194,7 +194,7 @@ void TMVA::MethodCompositeBase::ReadWeightsFromXML( void* wghtnode ) + ((TMVA::MethodBoost*)this)->BookMethod( Types::Instance().GetMethodType( methodTypeName), methodName, optionString ); + } + fMethods.push_back(ClassifierFactory::Instance().Create( +- std::string(methodTypeName),jobName, methodName,DataInfo(),optionString)); ++ std::string(methodTypeName.Data()),jobName, methodName,DataInfo(),optionString)); + + fMethodWeight.push_back(methodWeight); + MethodBase* meth = dynamic_cast(fMethods.back()); +@@ -259,7 +259,7 @@ void TMVA::MethodCompositeBase::ReadWeightsFromStream( std::istream& istr ) + ((TMVA::MethodBoost*)this)->BookMethod( Types::Instance().GetMethodType( methodName), methodTitle, optionString ); + } + else methodTitle=Form("%s (%04i)",GetMethodName().Data(),fCurrentMethodIdx); +- fMethods.push_back(ClassifierFactory::Instance().Create( std::string(methodName), jobName, ++ fMethods.push_back(ClassifierFactory::Instance().Create( std::string(methodName.Data()), jobName, + methodTitle,DataInfo(), optionString) ); + fMethodWeight.push_back( methodWeight ); + if(MethodBase* m = dynamic_cast(fMethods.back()) ) +diff --git a/tmva/tmva/src/Reader.cxx b/tmva/tmva/src/Reader.cxx +index 94a8b28..0b67867 100644 +--- a/tmva/tmva/src/Reader.cxx ++++ b/tmva/tmva/src/Reader.cxx +@@ -401,7 +401,7 @@ TMVA::IMethod* TMVA::Reader::BookMVA( const TString& methodTag, const TString& w + + TMVA::IMethod* TMVA::Reader::BookMVA( TMVA::Types::EMVA methodType, const TString& weightfile ) + { +- IMethod* im = ClassifierFactory::Instance().Create(std::string(Types::Instance().GetMethodName( methodType )), ++ IMethod* im = ClassifierFactory::Instance().Create(std::string(Types::Instance().GetMethodName( methodType ).Data()), + DataInfo(), weightfile ); + + MethodBase *method = (dynamic_cast(im)); +@@ -440,7 +440,7 @@ TMVA::IMethod* TMVA::Reader::BookMVA( TMVA::Types::EMVA methodType, const char* + #if ROOT_VERSION_CODE >= ROOT_VERSION(5,26,00) + + // books MVA method from weightfile +- IMethod* im = ClassifierFactory::Instance().Create(std::string(Types::Instance().GetMethodName( methodType )), ++ IMethod* im = ClassifierFactory::Instance().Create(std::string(Types::Instance().GetMethodName( methodType ).Data()), + DataInfo(), "" ); + + MethodBase *method = (dynamic_cast(im)); +diff -aru a/core/base/inc/TString.h b/core/base/inc/TString.h +--- a/core/base/inc/TString.h ++++ b/core/base/inc/TString.h +@@ -106,7 +106,7 @@ + char operator[](Ssiz_t i) const; // Index with bounds checking + + operator std::string_view() const { return std::string_view(Data(),fExtent); } +- operator std::string() const { return std::string_view(Data(),fExtent).to_string(); } ++ operator std::string() const { return static_cast(std::string_view(Data(),fExtent)); } + + const char *Data() const; + Ssiz_t Length() const { return fExtent; } diff --git a/pkgs/applications/science/misc/root/default.nix b/pkgs/applications/science/misc/root/default.nix index 220b2e06360f..726f6352c957 100644 --- a/pkgs/applications/science/misc/root/default.nix +++ b/pkgs/applications/science/misc/root/default.nix @@ -1,18 +1,19 @@ { stdenv, fetchurl, fetchpatch, cmake, pcre, pkgconfig, python2 -, libX11, libXpm, libXft, libXext, zlib, lzma, gsl, Cocoa }: +, libX11, libXpm, libXft, libXext, mesa, zlib, libxml2, lzma, gsl +, Cocoa, OpenGL }: stdenv.mkDerivation rec { name = "root-${version}"; - version = "6.08.02"; + version = "6.09.02"; src = fetchurl { url = "https://root.cern.ch/download/root_v${version}.source.tar.gz"; - sha256 = "0530v1r4rvds52hgb13f00l3phhn76z6vii550mwv8bj3sl5070k"; + sha256 = "0fc6b0l7bw66cyckxs4ikvyzcv1zlfx88205jx153smdhih0jj2k"; }; - buildInputs = [ cmake pcre pkgconfig python2 zlib lzma gsl ] - ++ stdenv.lib.optionals (!stdenv.isDarwin) [ libX11 libXpm libXft libXext ] - ++ stdenv.lib.optionals (stdenv.isDarwin) [ Cocoa ] + buildInputs = [ cmake pcre pkgconfig python2 zlib libxml2 lzma gsl ] + ++ stdenv.lib.optionals (!stdenv.isDarwin) [ libX11 libXpm libXft libXext mesa ] + ++ stdenv.lib.optionals (stdenv.isDarwin) [ Cocoa OpenGL ] ; patches = [ @@ -20,6 +21,13 @@ stdenv.mkDerivation rec { # this prevents thisroot.sh from setting $p, which interferes with stdenv setup ./thisroot.patch + + # https://sft.its.cern.ch/jira/browse/ROOT-8728 + (fetchpatch { + url = "https://sft.its.cern.ch/jira/secure/attachment/20025/0001-std-string_view-has-no-more-to_string.patch"; + sha256 = "0ngyk960xfrcsj4vhr1ax8h85fx0g1cfycxi3k35a6ych2zmyg8q"; + }) + ./ROOT-8728-extra.patch ]; preConfigure = '' @@ -47,7 +55,7 @@ stdenv.mkDerivation rec { "-Dmonalisa=OFF" "-Dmysql=OFF" "-Dodbc=OFF" - "-Dopengl=OFF" + "-Dopengl=ON" "-Doracle=OFF" "-Dpgsql=OFF" "-Dpythia6=OFF" @@ -55,7 +63,7 @@ stdenv.mkDerivation rec { "-Drfio=OFF" "-Dsqlite=OFF" "-Dssl=OFF" - "-Dxml=OFF" + "-Dxml=ON" "-Dxrootd=OFF" ] ++ stdenv.lib.optional (stdenv.cc.libc != null) "-DC_INCLUDE_DIRS=${stdenv.lib.getDev stdenv.cc.libc}/include"; diff --git a/pkgs/applications/science/misc/root/sw_vers.patch b/pkgs/applications/science/misc/root/sw_vers.patch index c4632d62b4fe..df0ef79d0a0f 100644 --- a/pkgs/applications/science/misc/root/sw_vers.patch +++ b/pkgs/applications/science/misc/root/sw_vers.patch @@ -25,7 +25,7 @@ diff --git a/cmake/modules/SetUpMacOS.cmake b/cmake/modules/SetUpMacOS.cmake - COMMAND cut -d . -f 2 - OUTPUT_VARIABLE MACOSX_MINOR OUTPUT_STRIP_TRAILING_WHITESPACE) - -- if(MACOSX_VERSION VERSION_GREATER 10.7 AND ${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) +- if(MACOSX_VERSION VERSION_GREATER 10.7 AND ${CMAKE_CXX_COMPILER_ID} MATCHES Clang) set(libcxx ON CACHE BOOL "Build using libc++" FORCE) - endif() -- cgit 1.4.1