Uploaded image for project: 'ROOT'
  1. ROOT
  2. ROOT-7765

#include Linkdef.h in payload

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: High
    • Resolution: Unresolved
    • Affects Version/s: 6.04/06
    • Fix Version/s: None
    • Component/s: Dictionaries
    • Labels:
      None
    • Environment:

      Any

      Description

      People have Linkdef.h files that #include headers, to not pass them to rootcling. We have seen several occurrences of this now. Example:

      #include "CalibrationDataInterface/CalibrationDataVariables.h"
      #include "CalibrationDataInterface/CalibrationDataInterfaceBase.h"
      #include "CalibrationDataInterface/CalibrationDataInterfaceROOT.h"
      #include "CalibrationDataInterface/CalibrationDataContainer.h"
      #include "CalibrationDataInterface/CalibrationDataEigenVariations.h"
      #include "CalibrationDataInterface/CalibrationDataBackend.h"
      #include "CalibrationDataInterface/CalibrationDataUtilities.h"
       
      #ifdef __CINT__
       
      #pragma link off all globals;
      #pragma link off all classes;
      #pragma link off all functions;
       
      #pragma link C++ nestedclass;
                             
      #pragma link C++ namespace Analysis;
       
      #pragma link C++ class Analysis::CalibrationDataInterfaceBase;
      #pragma link C++ class Analysis::CalibrationDataInterfaceROOT+; 
      #pragma link C++ class Analysis::CalibrationDataInterfaceROOT::HadronisationReferenceHelper+; 
      #pragma link C++ class Analysis::CalibrationDataVariables;
      #pragma link C++ class Analysis::CalibrationDataEigenVariations;
       
      #pragma link C++ class Analysis::CalibrationDataContainer+;
      #pragma link C++ class Analysis::CalibrationDataHistogramContainer+;
      #pragma link C++ class Analysis::CalibrationDataMappedHistogramContainer+;
      #pragma link C++ class Analysis::CalibrationDataMappedHistogramContainer::Bin+;
      #pragma link C++ class Analysis::CalibrationDataFunctionContainer+;
       
      #pragma link C++ function Analysis::addContainer(Analysis::CalibrationDataContainer*, TFile*, const char*, const char*, const char*, const char*, const char*);
       
      #pragma link C++ function Analysis::showHadronisations(const char*, const char*);
      #pragma link C++ function Analysis::getHadronisations(const char*, const char*);
      #pragma link C++ function Analysis::showBuildNumber(const char*);
       
      #endif

      We should restore backward compatibility by including the Linkdef.h file in the runtime, probably verbatim instead of an #include "path/to/Linkdef.h", because the Linkdef.h should not be an installed header.

      For this we need to implement a clang pragma handler that handles (and ignores) all CINT dictionary pragmas.

        Attachments

          Activity

            People

            Assignee:
            pcanal Philippe Canal
            Reporter:
            axel Axel Naumann
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated: