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.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.