High sierra compiling ROOT

Hi all:
compiling root6 success on mac os 10.13 high sierra.

after add some TString::Data() in cast TString to std::string in servel files
compiled OK on high sierra.

I don’t know if it cost memory leak. but it does worked.
Could someone help to upload to master version.

below is what I modify: Hope that will help ROOT

Author: chenxu chenxu@ihep.ac.cn 2017-09-21 21:21:26
Committer: chenxu chenxu@ihep.ac.cn 2017-09-21 21:21:26
Parent: 5841454063dcfbc5c14db9f4dfa024abe899045d ([cxxmodules] Print stacktrace before aborting on a missing exception.)
Branch: master
Follows: v6-09-02
Precedes:

add TString -> TString::Data for std::string use

-------------------------- hist/hist/src/TFormula.cxx --------------------------
index 41e470be48…a6d10e1df8 100644
@@ -2007,7 +2007,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());
    

@@ -2179,7 +2179,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
        TString argumentsPrototype = TString::Format("%s%s%s", (hasVariables ? "Double_t *x" : ""),
    

----------------------------- main/src/nbmain.cxx -----------------------------
index 55d4f2f3aa…8490149290 100644
@@ -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

--------------------- math/minuit/src/TMinuitMinimizer.cxx ---------------------
index 3fad632515…58c11a86d3 100644
@@ -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 {

-------------------------- tmva/tmva/src/Factory.cxx --------------------------
index 265562f4e2…adf65f9365 100644
@@ -392,7 +392,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(),
    

@@ -1125,7 +1125,7 @@ void TMVA::factory::TrainAllMethods()

    // recreate
    m = dynamic_cast<MethodBase*>( 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<MethodCategory*>(m));
    

------------------------ tmva/tmva/src/MethodBoost.cxx ------------------------
index 5dcb7bbb65…4fe240ae79 100644
@@ -393,7 +393,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(),
    

----------------------- tmva/tmva/src/MethodCategory.cxx -----------------------
index 416fd54dd1…1f730d2cfc 100644
@@ -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;

-------------------- tmva/tmva/src/MethodCompositeBase.cxx --------------------
index 7a138c9811…6314cd986d 100644
@@ -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<MethodBase*>(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<MethodBase*>(fMethods.back()) )
    

--------------------------- tmva/tmva/src/Reader.cxx ---------------------------
index 94a8b28963…0b67867d43 100644
@@ -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<MethodBase>(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<MethodBase>(im));

it will not.

Could someone help to upload to master version.

Your changes are essentially the ones added as work around as commit 263508429dec26449513914e71f0f71c9ce9485f.

Thanks,
Philippe.