diff --git a/config/Makefile.depend b/config/Makefile.depend index d0bd15897e4fbca79970f505315aa532036938c8..a4b03250c3fd00f25cdc913ebc54a0fce59efe01 100644 --- a/config/Makefile.depend +++ b/config/Makefile.depend @@ -6,7 +6,7 @@ TCLINGLIBDEPM = $(IOLIB) IOLIBDEPM = $(THREADLIB) NETLIBDEPM = $(IOLIB) $(MATHCORELIB) MATRIXLIBDEPM = $(MATHCORELIB) -HISTLIBDEPM = $(MATRIXLIB) $(MATHCORELIB) +HISTLIBDEPM = $(IOLIB) $(MATRIXLIB) $(MATHCORELIB) GRAFLIBDEPM = $(HISTLIB) $(MATRIXLIB) $(MATHCORELIB) $(IOLIB) GPADLIBDEPM = $(GRAFLIB) $(HISTLIB) $(MATHCORELIB) G3DLIBDEPM = $(GRAFLIB) $(HISTLIB) $(GPADLIB) $(MATHCORELIB) @@ -260,7 +260,7 @@ TCLINGLIBEXTRA = lib/libRIO.lib IOLIBEXTRA = lib/libThread.lib NETLIBEXTRA = lib/libRIO.lib lib/libMathCore.lib MATRIXLIBEXTRA = lib/libMathCore.lib -HISTLIBEXTRA = lib/libMatrix.lib lib/libMathCore.lib +HISTLIBEXTRA = lib/libRIO lib/libMatrix.lib lib/libMathCore.lib GRAFLIBEXTRA = lib/libHist.lib lib/libMatrix.lib lib/libRIO.lib \ lib/libMathCore.lib GPADLIBEXTRA = lib/libGraf.lib lib/libHist.lib lib/libMathCore.lib @@ -448,7 +448,7 @@ TCLINGLIBEXTRA = -Llib -lRIO IOLIBEXTRA = -Llib -lThread NETLIBEXTRA = -Llib -lRIO -lMathCore MATRIXLIBEXTRA = -Llib -lMathCore -HISTLIBEXTRA = -Llib -lMatrix -lMathCore +HISTLIBEXTRA = -Llib -lRIO -lMatrix -lMathCore GRAFLIBEXTRA = -Llib -lHist -lMatrix -lRIO -lMathCore GPADLIBEXTRA = -Llib -lGraf -lHist -lMathCore G3DLIBEXTRA = -Llib -lGraf -lHist -lGpad -lMathCore diff --git a/core/base/inc/TStorage.h b/core/base/inc/TStorage.h index 310de0d4320da0a42c572b6881323f9bed3bf481..0ada93d88c6e8c184832779450aa354c150ea7e6 100644 --- a/core/base/inc/TStorage.h +++ b/core/base/inc/TStorage.h @@ -116,6 +116,15 @@ inline size_t TStorage::GetMaxBlockSize() { return fgMaxBlockSize; } inline void TStorage::SetMaxBlockSize(size_t size) { fgMaxBlockSize = size; } inline FreeHookFun_t TStorage::GetFreeHook() { return fgFreeHook; } + +namespace ROOT { +namespace Internal { +using FreeIfTMapFile_t = bool(void*); +R__EXTERN FreeIfTMapFile_t *gFreeIfTMapFile; +R__EXTERN void *gMmallocDesc; +} +} + #endif #endif diff --git a/core/base/src/TStorage.cxx b/core/base/src/TStorage.cxx index 9b93c77d3b7e11fa3e8dfd517e0200b8fd188dda..dd630ff3b3adaffa097dbb40076f615ac93f1a97 100644 --- a/core/base/src/TStorage.cxx +++ b/core/base/src/TStorage.cxx @@ -84,6 +84,11 @@ static void **gTraceArray = 0; static Int_t gTraceCapacity = 10, gTraceIndex = 0, gMemSize = -1, gMemIndex = -1; +// Used in NewDelete.cxx; set by TMapFile. +ROOT::Internal::FreeIfTMapFile_t *ROOT::Internal::gFreeIfTMapFile = nullptr; +void *ROOT::Internal::gMmallocDesc = 0; //is used and set in TMapFile + + //////////////////////////////////////////////////////////////////////////////// /// Register a memory allocation operation. If desired one can trap an diff --git a/core/clib/CMakeLists.txt b/core/clib/CMakeLists.txt index bd988de25877d663b3a62c9d5394eca4dff453c2..2d12d51072d90bb24afa82ac0956577fcce17ab0 100644 --- a/core/clib/CMakeLists.txt +++ b/core/clib/CMakeLists.txt @@ -5,6 +5,8 @@ set(Clib_dict_headers ${CMAKE_CURRENT_SOURCE_DIR}/inc/strlcpy.h ${CMAKE_CURRENT_SOURCE_DIR}/inc/snprintf.h PARENT_SCOPE) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/res) + ROOT_OBJECT_LIBRARY(Clib *.c) ROOT_INSTALL_HEADERS() diff --git a/core/clib/Module.mk b/core/clib/Module.mk index 9fd6ed2d2a7b3eb0f288de17c677973747a8ca09..4034d29aef15c997d8621c5e61ab3e390ff84770 100644 --- a/core/clib/Module.mk +++ b/core/clib/Module.mk @@ -11,6 +11,7 @@ MODDIRI := $(MODDIR)/inc CLIBDIR := $(MODDIR) CLIBDIRS := $(CLIBDIR)/src CLIBDIRI := $(CLIBDIR)/inc +CLIBDIRR := $(CLIBDIR)/res ##### libClib (part of libCore) ##### CLIBL := $(MODDIRI)/LinkDef.h @@ -51,3 +52,5 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### +$(CLIBO): CXXFLAGS += -I$(CLIBDIRR) +$(CLIBO): CFLAGS += -I$(CLIBDIRR) diff --git a/core/clib/inc/Demangle.h b/core/clib/res/Demangle.h similarity index 100% rename from core/clib/inc/Demangle.h rename to core/clib/res/Demangle.h diff --git a/core/clib/inc/mmalloc.h b/core/clib/res/mmalloc.h similarity index 100% rename from core/clib/inc/mmalloc.h rename to core/clib/res/mmalloc.h diff --git a/core/clib/inc/mmconfig.h b/core/clib/res/mmconfig.h similarity index 100% rename from core/clib/inc/mmconfig.h rename to core/clib/res/mmconfig.h diff --git a/core/clib/inc/mmprivate.h b/core/clib/res/mmprivate.h similarity index 100% rename from core/clib/inc/mmprivate.h rename to core/clib/res/mmprivate.h diff --git a/core/meta/src/TClass.cxx b/core/meta/src/TClass.cxx index 4eb7a72a871230dcf2d40a1fd44bcfc1bd0ae60b..ac5cb9807f17156b8a12c749e602a02603e105c5 100644 --- a/core/meta/src/TClass.cxx +++ b/core/meta/src/TClass.cxx @@ -119,14 +119,14 @@ using namespace std; TVirtualMutex* gInterpreterMutex = 0; -void *gMmallocDesc = 0; //is used and set in TMapFile namespace { class TMmallocDescTemp { private: void *fSave; public: - TMmallocDescTemp(void *value = 0) : fSave(gMmallocDesc) { gMmallocDesc = value; } - ~TMmallocDescTemp() { gMmallocDesc = fSave; } + TMmallocDescTemp(void *value = 0) : + fSave(ROOT::Internal::gMmallocDesc) { ROOT::Internal::gMmallocDesc = value; } + ~TMmallocDescTemp() { ROOT::Internal::gMmallocDesc = fSave; } }; } diff --git a/core/meta/src/TStreamerElement.cxx b/core/meta/src/TStreamerElement.cxx index fce03339ab74516918e69d12d68a38b7cf4573fb..72d94a6de75f717c20f3d6e9ad4c06effabb6742 100644 --- a/core/meta/src/TStreamerElement.cxx +++ b/core/meta/src/TStreamerElement.cxx @@ -46,8 +46,6 @@ static TString &IncludeNameBuffer() { return includeName; } -extern void *gMmallocDesc; - //////////////////////////////////////////////////////////////////////////////// /// Helper function to initialize the 'index/counter' value of /// the Pointer streamerElements. If directive is a StreamerInfo and it correspond to the diff --git a/core/newdelete/CMakeLists.txt b/core/newdelete/CMakeLists.txt index 04fb54e07032eb076a65472433a451a000b7fd42..90ce169a1a6c828fc0013487b5c911457c44d002 100644 --- a/core/newdelete/CMakeLists.txt +++ b/core/newdelete/CMakeLists.txt @@ -2,6 +2,8 @@ # CMakeLists.txt file for building ROOT core/newdelete package ############################################################################ +include_directories(${CMAKE_SOURCE_DIR}/core/clib/res) + ROOT_LINKER_LIBRARY(New *.cxx DEPENDENCIES Core) ROOT_INSTALL_HEADERS() diff --git a/core/newdelete/Module.mk b/core/newdelete/Module.mk index 46c0ac912186d9bc15889178008e012c9378e1a4..faf53b4a2f303e6eaac670e480ee826ce3594ed7 100644 --- a/core/newdelete/Module.mk +++ b/core/newdelete/Module.mk @@ -49,3 +49,6 @@ distclean-$(MODNAME): clean-$(MODNAME) @rm -f $(NEWDEP) $(NEWLIB) distclean:: distclean-$(MODNAME) + +##### extra rules ###### +$(NEWO): CXXFLAGS += -I$(ROOT_SRCDIR)/core/clib/res diff --git a/core/newdelete/src/NewDelete.cxx b/core/newdelete/src/NewDelete.cxx index c34265604d8e73cd02d1a86d611da7bb75af1f63..5049540eac008a1c55700e913c59e5013359efb6 100644 --- a/core/newdelete/src/NewDelete.cxx +++ b/core/newdelete/src/NewDelete.cxx @@ -63,7 +63,7 @@ #include "MemCheck.h" #include "TObjectTable.h" #include "TError.h" -#include "TMapFile.h" +#include "TStorage.h" // for ROOT::Internal::gFreeIfTMapFile #include "TSystem.h" #include "mmalloc.h" @@ -76,7 +76,6 @@ public: }; static TReAllocInit gReallocInit; - //---- memory checking macros -------------------------------------------------- #if !defined(R__NOSTATS) @@ -207,8 +206,8 @@ void *operator new(size_t size) R__THROW_BAD } void *vp; - if (gMmallocDesc) - vp = ::mcalloc(gMmallocDesc, RealSize(size), sizeof(char)); + if (ROOT::Internal::gMmallocDesc) + vp = ::mcalloc(ROOT::Internal::gMmallocDesc, RealSize(size), sizeof(char)); else vp = ::calloc(RealSize(size), sizeof(char)); if (vp == 0) @@ -236,8 +235,8 @@ void *operator new(size_t size, void *vp) R__THROW_NULL return TMemHashTable::AddPointer(size); void *vp; - if (gMmallocDesc) - vp = ::mcalloc(gMmallocDesc, RealSize(size), sizeof(char)); + if (ROOT::Internal::gMmallocDesc) + vp = ::mcalloc(ROOT::Internal::gMmallocDesc, RealSize(size), sizeof(char)); else vp = ::calloc(RealSize(size), sizeof(char)); if (vp == 0) @@ -271,10 +270,8 @@ void operator delete(void *ptr) R__THROW_NULL RemoveStatMagic(ptr, where); MemClear(RealStart(ptr), 0, RealSize(storage_size(ptr))); TSystem::ResetErrno(); - TMapFile *mf = TMapFile::WhichMapFile(RealStart(ptr)); - if (mf) { - if (mf->IsWritable()) ::mfree(mf->GetMmallocDesc(), RealStart(ptr)); - } else { + if (!ROOT::Internal::gFreeIfTMapFile + || !ROOT::Internal::gFreeIfTMapFile(RealStart(ptr))) { do { TSystem::ResetErrno(); ::free(RealStart(ptr)); @@ -351,8 +348,8 @@ void *CustomReAlloc1(void *ovp, size_t size) return ovp; RemoveStatMagic(ovp, where); void *vp; - if (gMmallocDesc) - vp = ::mrealloc(gMmallocDesc, RealStart(ovp), RealSize(size)); + if (ROOT::Internal::gMmallocDesc) + vp = ::mrealloc(ROOT::Internal::gMmallocDesc, RealStart(ovp), RealSize(size)); else vp = ::realloc((char*)RealStart(ovp), RealSize(size)); if (vp == 0) @@ -391,8 +388,8 @@ void *CustomReAlloc2(void *ovp, size_t size, size_t oldsize) return ovp; RemoveStatMagic(ovp, where); void *vp; - if (gMmallocDesc) - vp = ::mrealloc(gMmallocDesc, RealStart(ovp), RealSize(size)); + if (ROOT::Internal::gMmallocDesc) + vp = ::mrealloc(ROOT::Internal::gMmallocDesc, RealStart(ovp), RealSize(size)); else vp = ::realloc((char*)RealStart(ovp), RealSize(size)); if (vp == 0) diff --git a/core/rint/src/TRint.cxx b/core/rint/src/TRint.cxx index 7fea8f04e0591a742308fefc8af72f9fb39cb2d8..eef3cde35ee457aea9af74ea94418c795f21c2b3 100644 --- a/core/rint/src/TRint.cxx +++ b/core/rint/src/TRint.cxx @@ -37,6 +37,7 @@ #include "TInterpreter.h" #include "TObjArray.h" #include "TObjString.h" +#include "TStorage.h" // ROOT::Internal::gMmallocDesc #include "TTabCom.h" #include "TError.h" #include <stdlib.h> @@ -48,8 +49,6 @@ #include <signal.h> #endif -R__EXTERN void *gMmallocDesc; //is used and set in TMapFile and TClass - //////////////////////////////////////////////////////////////////////////////// static Int_t Key_Pressed(Int_t key) @@ -96,7 +95,7 @@ Bool_t TInterruptHandler::Notify() } // make sure we use the sbrk heap (in case of mapped files) - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; if (TROOT::Initialized() && gROOT->IsLineProcessing()) { Break("TInterruptHandler::Notify", "keyboard interrupt"); diff --git a/core/unix/CMakeLists.txt b/core/unix/CMakeLists.txt index dc4768b1b00405b0995f255b06261e50d9e45d42..294b106f2fb98631bf6141b9a3e122dfc3d1bf2e 100644 --- a/core/unix/CMakeLists.txt +++ b/core/unix/CMakeLists.txt @@ -6,7 +6,8 @@ ROOT_GLOB_SOURCES(sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cxx) set(Unix_dict_headers ${CMAKE_CURRENT_SOURCE_DIR}/inc/TUnixSystem.h PARENT_SCOPE) -include_directories(${CMAKE_SOURCE_DIR}/net/net/inc) +include_directories(${CMAKE_SOURCE_DIR}/net/net/inc + ${CMAKE_SOURCE_DIR}/core/clib/res) ROOT_OBJECT_LIBRARY(Unix ${sources}) ROOT_INSTALL_HEADERS() diff --git a/core/unix/Module.mk b/core/unix/Module.mk index 4ef929dba3c2445529210020b3c73aeaa00eea7f..34be1f09df13aafa9b3d283d0e2f242e68d922da 100644 --- a/core/unix/Module.mk +++ b/core/unix/Module.mk @@ -44,3 +44,6 @@ distclean-$(MODNAME): clean-$(MODNAME) @rm -f $(UNIXDEP) distclean:: distclean-$(MODNAME) + +##### extra rules ###### +$(UNIXO): CXXFLAGS += -I$(ROOT_SRCDIR)/core/clib/res diff --git a/io/io/CMakeLists.txt b/io/io/CMakeLists.txt index f32ecbaf35d822dce596995421db16a9bf43bc29..b4eb805b74218142343af33bb1272131468b1355 100644 --- a/io/io/CMakeLists.txt +++ b/io/io/CMakeLists.txt @@ -4,6 +4,8 @@ set(libname RIO) +include_directories(${CMAKE_SOURCE_DIR}/core/clib/res) + ROOT_GENERATE_DICTIONARY(G__IO *.h STAGE1 MODULE ${libname} LINKDEF LinkDef.h) if(root7) diff --git a/io/io/Module.mk b/io/io/Module.mk index 672e3b49dd9054004f47477d7195539cec93465a..5f4fce6ee8de6bea78947063cea9ea93d34fc00f 100644 --- a/io/io/Module.mk +++ b/io/io/Module.mk @@ -72,3 +72,4 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### +$(IOO): CXXFLAGS += -I$(ROOT_SRCDIR)/core/clib/res diff --git a/io/io/inc/TMapFile.h b/io/io/inc/TMapFile.h index 48bd9afdeaccba21ea8ef02ea6b4a11cdc11cb96..5955675ede06e7507834777e71416d5c2feb122d 100644 --- a/io/io/inc/TMapFile.h +++ b/io/io/inc/TMapFile.h @@ -21,10 +21,6 @@ #ifndef ROOT_TROOT #include "TROOT.h" #endif -#if !defined(__MMPRIVATE_H) && !defined(__CINT__) -#include "mmprivate.h" -#endif - class TBrowser; class TDirectory; @@ -159,34 +155,4 @@ public: TMapRec *GetNext(Long_t offset = 0) const { return (TMapRec *)((Long_t) fNext + offset); } }; -//////////////////////////////////////////////////////////////////////////////// -/// Return the current location in the memory region for this malloc heap which -/// represents the end of memory in use. Returns 0 if map file was closed. - -inline void *TMapFile::GetBreakval() const -{ - if (!fMmallocDesc) return 0; - return (void *)((struct mdesc *)fMmallocDesc)->breakval; -} - -//////////////////////////////////////////////////////////////////////////////// - -inline TMapFile *TMapFile::WhichMapFile(void *addr) -{ - if (!gROOT || !gROOT->GetListOfMappedFiles()) return 0; - - TObjLink *lnk = ((TList *)gROOT->GetListOfMappedFiles())->LastLink(); - while (lnk) { - TMapFile *mf = (TMapFile*)lnk->GetObject(); - if (!mf) return 0; - if ((ULong_t)addr >= mf->fBaseAddr + mf->fOffset && - (ULong_t)addr < (ULong_t)mf->GetBreakval() + mf->fOffset) - return mf; - lnk = lnk->Prev(); - } - return 0; -} - -R__EXTERN void *gMmallocDesc; //is initialized in TClass.cxx - #endif diff --git a/io/io/src/TMapFile.cxx b/io/io/src/TMapFile.cxx index 588279281263f3d5394a064a0fe7e85272a5fdc5..8d7f44325c86e510e5957aa4dd708fc9a283f71b 100644 --- a/io/io/src/TMapFile.cxx +++ b/io/io/src/TMapFile.cxx @@ -91,11 +91,14 @@ robust Streamer mechanism I opted for 3). #include "TKeyMapFile.h" #include "TDirectoryFile.h" #include "TBrowser.h" +#include "TStorage.h" #include "TString.h" #include "TSystem.h" #include "TClass.h" #include "TBufferFile.h" #include "TVirtualMutex.h" +#include "mmprivate.h" + #include <cmath> #if defined(R__UNIX) && !defined(R__MACOSX) && !defined(R__WINGCC) @@ -122,8 +125,34 @@ union semun { Long_t TMapFile::fgMapAddress = 0; void *TMapFile::fgMmallocDesc = 0; -//void *gMmallocDesc = 0; //is initialized in TClass.cxx +//void *ROOT::Internal::gMmallocDesc = 0; //is initialized in TStorage.cxx + + +namespace { +//////////////////////////////////////////////////////////////////////////////// +/// Delete memory and return true if memory belongs to a TMapFile. + static bool FreeIfTMapFile(void* ptr) { + if (TMapFile *mf = TMapFile::WhichMapFile(ptr)) { + if (mf->IsWritable()) + ::mfree(mf->GetMmallocDesc(), ptr); + return true; + } + return false; + } +} + +//////////////////////////////////////////////////////////////////////////////// +/// Set ROOT::Internal::gFreeIfTMapFile on library load. + +struct SetFreeIfTMapFile_t { + SetFreeIfTMapFile_t() { + ROOT::Internal::gFreeIfTMapFile = FreeIfTMapFile; + } + ~SetFreeIfTMapFile_t() { + ROOT::Internal::gFreeIfTMapFile = nullptr; + } +} gSetFreeIfTMapFile; //////////////////////////////////////////////////////////////////////////////// @@ -392,7 +421,7 @@ TMapFile::TMapFile(const char *name, const char *title, Option_t *option, if (fWritable) { // create new TMapFile object in mapped heap to get correct vtbl ptr CreateSemaphore(); - gMmallocDesc = fMmallocDesc; + ROOT::Internal::gMmallocDesc = fMmallocDesc; TMapFile *mf = new TMapFile(*mapfil); mf->fFd = fFd; mf->fWritable = kTRUE; @@ -403,10 +432,10 @@ TMapFile::TMapFile(const char *name, const char *title, Option_t *option, mf->CreateSemaphore(fSemaphore); #endif mmalloc_setkey(fMmallocDesc, 0, mf); - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; mapfil = mf; } else { - gMmallocDesc = 0; // make sure we are in sbrk heap + ROOT::Internal::gMmallocDesc = 0; // make sure we are in sbrk heap fOffset = ((struct mdesc *) fMmallocDesc)->offset; TMapFile *mf = new TMapFile(*mapfil, fOffset); delete [] mf->fOption; @@ -444,12 +473,12 @@ TMapFile::TMapFile(const char *name, const char *title, Option_t *option, CreateSemaphore(); - gMmallocDesc = fMmallocDesc; + ROOT::Internal::gMmallocDesc = fMmallocDesc; mapfil = new TMapFile(*this); mmalloc_setkey(fMmallocDesc, 0, mapfil); - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; // store shadow mapfile fVersion = -1; // make this the shadow map file @@ -474,7 +503,7 @@ zombie: // error in file opening occured, make this object a zombie MakeZombie(); newMapFile = this; - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; } //////////////////////////////////////////////////////////////////////////////// @@ -567,7 +596,7 @@ void TMapFile::Add(const TObject *obj, const char *name) if (lock) AcquireSemaphore(); - gMmallocDesc = fMmallocDesc; + ROOT::Internal::gMmallocDesc = fMmallocDesc; const char *n; if (name && *name) @@ -588,7 +617,7 @@ void TMapFile::Add(const TObject *obj, const char *name) fLast = mr; } - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; if (lock) ReleaseSemaphore(); @@ -603,7 +632,7 @@ void TMapFile::Update(TObject *obj) AcquireSemaphore(); - gMmallocDesc = fMmallocDesc; + ROOT::Internal::gMmallocDesc = fMmallocDesc; Bool_t all = (obj == 0) ? kTRUE : kFALSE; @@ -627,7 +656,7 @@ void TMapFile::Update(TObject *obj) mr = mr->fNext; } - gMmallocDesc = 0; + ROOT::Internal::gMmallocDesc = 0; ReleaseSemaphore(); } @@ -1088,6 +1117,15 @@ Int_t TMapFile::GetBestBuffer() return (Int_t)(mean + std::sqrt(rms2)); } +//////////////////////////////////////////////////////////////////////////////// +/// Return the current location in the memory region for this malloc heap which +/// represents the end of memory in use. Returns 0 if map file was closed. + +void *TMapFile::GetBreakval() const +{ + if (!fMmallocDesc) return 0; + return (void *)((struct mdesc *)fMmallocDesc)->breakval; +} //////////////////////////////////////////////////////////////////////////////// /// Create a memory mapped file. @@ -1183,3 +1221,22 @@ void TMapFile::operator delete(void *ptr) TObject::operator delete(ptr); } + +//////////////////////////////////////////////////////////////////////////////// + +TMapFile *TMapFile::WhichMapFile(void *addr) +{ + if (!gROOT || !gROOT->GetListOfMappedFiles()) return 0; + + TObjLink *lnk = ((TList *)gROOT->GetListOfMappedFiles())->LastLink(); + while (lnk) { + TMapFile *mf = (TMapFile*)lnk->GetObject(); + if (!mf) return 0; + if ((ULong_t)addr >= mf->fBaseAddr + mf->fOffset && + (ULong_t)addr < (ULong_t)mf->GetBreakval() + mf->fOffset) + return mf; + lnk = lnk->Prev(); + } + return 0; +} + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 9a978a1dfca8d47cce80215568bc17de3ced2243..a8c3239a4fcb931eeab0ac3990170feb10104b41 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -5,6 +5,7 @@ if(NOT WIN32) ROOT_EXECUTABLE(rootn.exe rmain.cxx LIBRARIES New Core MathCore Rint) + SET_TARGET_PROPERTIES(rootn.exe PROPERTIES LINK_FLAGS "-Wl,--no-as-needed") ROOT_EXECUTABLE(roots.exe roots.cxx LIBRARIES Core MathCore) ROOT_EXECUTABLE(ssh2rpd ssh2rpd.cxx ${CMAKE_SOURCE_DIR}/core/clib/src/strlcpy.c ) ROOT_EXECUTABLE(xpdtest xpdtest.cxx LIBRARIES Proof Tree Hist RIO Net Thread Matrix MathCore) diff --git a/net/auth/Module.mk b/net/auth/Module.mk index 86dc0bb75c2e80d7bcd678e94b039084b9e329fd..ba016538be7e0d84b0b93e368ce582cd31574a89 100644 --- a/net/auth/Module.mk +++ b/net/auth/Module.mk @@ -160,3 +160,4 @@ $(AFSAUTHO): CXXFLAGS += $(AFSINCDIR) $(AFSEXTRACFLAGS) ifeq ($(MACOSX_SSL_DEPRECATED),yes) $(call stripsrc,$(AUTHDIRS)/TAuthenticate.o): CXXFLAGS += -Wno-deprecated-declarations endif +$(DAEMONUTILSO): CXXFLAGS += -I$(ROOT_SRCDIR)/net/rpdutils/res diff --git a/net/rootd/CMakeLists.txt b/net/rootd/CMakeLists.txt index ed2956feea87964f24377ad820894523f4d2bbf9..d579a6eabf733cc9f01da657553ce8aaf676c3f4 100644 --- a/net/rootd/CMakeLists.txt +++ b/net/rootd/CMakeLists.txt @@ -6,8 +6,8 @@ ROOT_EXECUTABLE(rootd *.cxx ${CMAKE_SOURCE_DIR}/core/clib/src/strlcpy.c LIBRARIES rpdutil rsa ${GLOBUS_LIBRARIES} ${OPENSSL_LIBRARIES} ${CRYPTLIBS}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../rpdutils/res) + if(builtin_openssl) ROOT_ADD_BUILTIN_DEPENDENCIES(rootd OPENSSL) endif() - -ROOT_INSTALL_HEADERS() diff --git a/net/rootd/Module.mk b/net/rootd/Module.mk index 20ac8b36c7e516db7d0e93e981807a89b4641d8a..3f25274a289ac325d093034982e67203951f3896 100644 --- a/net/rootd/Module.mk +++ b/net/rootd/Module.mk @@ -53,4 +53,4 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### -$(ROOTDO): CXXFLAGS += $(AUTHFLAGS) +$(ROOTDO): CXXFLAGS += $(AUTHFLAGS) -I$(ROOT_SRCDIR)/net/rpdutils/res diff --git a/net/rootd/inc/rootdp.h b/net/rootd/src/rootdp.h similarity index 100% rename from net/rootd/inc/rootdp.h rename to net/rootd/src/rootdp.h diff --git a/net/rpdutils/CMakeLists.txt b/net/rpdutils/CMakeLists.txt index 94032b558ab4ce9acff9b17470bedb6b73b63ab9..ee32dea5436bdf3d91f4887cbb549464dc0e97f1 100644 --- a/net/rpdutils/CMakeLists.txt +++ b/net/rpdutils/CMakeLists.txt @@ -6,6 +6,8 @@ ROOT_GLOB_SOURCES(rpdutilsrcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cxx) list(REMOVE_ITEM rpdutilsrcs src/rpdpriv.cxx src/rpdconn.cxx) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/res) + if(globus) add_definitions(-DR__GLBS) include_directories(${GLOBUS_INCLUDE_DIRS}) @@ -38,6 +40,3 @@ ROOT_LINKER_LIBRARY(SrvAuth rpdutils.cxx ssh.cxx LIBRARIES rpdutil rsa ${CRYPTLI if(builtin_openssl) ROOT_ADD_BUILTIN_DEPENDENCIES(SrvAuth OPENSSL) endif() - - -ROOT_INSTALL_HEADERS() diff --git a/net/rpdutils/Module.mk b/net/rpdutils/Module.mk index f491f379457f3246c81c077ec9d06798a0bef9ed..6ec3ee5f9ea94cc4aecb258f87e04728e679ab3a 100644 --- a/net/rpdutils/Module.mk +++ b/net/rpdutils/Module.mk @@ -10,24 +10,21 @@ MODDIRI := $(MODDIR)/inc RPDUTILDIR := $(MODDIR) RPDUTILDIRS := $(RPDUTILDIR)/src -RPDUTILDIRI := $(RPDUTILDIR)/inc +RPDUTILDIRR := $(RPDUTILDIR)/res ##### $(RPDUTILO) ##### -RPDUTILH := $(filter-out $(MODDIRI)/rpdpriv.h, $(filter-out $(MODDIRI)/rpdconn.h, $(wildcard $(MODDIRI)/*.h))) RPDUTILS := $(filter-out $(MODDIRS)/rpdpriv.cxx, $(filter-out $(MODDIRS)/rpdconn.cxx, $(wildcard $(MODDIRS)/*.cxx))) RPDUTILO := $(call stripsrc,$(RPDUTILS:.cxx=.o)) RPDUTILDEP := $(RPDUTILO:.o=.d) ##### $(RPDCONNO) ##### -RPDCONNH := $(MODDIRI)/rpdconn.h RPDCONNS := $(MODDIRS)/rpdconn.cxx RPDCONNO := $(call stripsrc,$(RPDCONNS:.cxx=.o)) RPDCONNDEP := $(RPDCONNO:.o=.d) ##### $(RPDPRIVO) ##### -RPDPRIVH := $(MODDIRI)/rpdpriv.h RPDPRIVS := $(MODDIRS)/rpdpriv.cxx RPDPRIVO := $(call stripsrc,$(RPDPRIVS:.cxx=.o)) @@ -76,6 +73,7 @@ GLBSLIBS += $(SSLLIBDIR) $(SSLLIB) endif # Combined... +RPDALLO := $(RPDUTILO) $(RPDCONNO) $(RPDPRIVO) $(SRVAUTHO) AUTHFLAGS := $(EXTRA_AUTHFLAGS) $(SHADOWFLAGS) $(AFSFLAGS) $(SRPFLAGS) \ $(KRB5FLAGS) $(GLBSFLAGS) AUTHLIBS := $(SHADOWLIBS) $(AFSLIBS) \ @@ -87,9 +85,6 @@ AUTHLIBS += -lz endif # used in the main Makefile -ALLHDRS += $(patsubst $(MODDIRI)/%.h,include/%.h,$(RPDUTILH)) -ALLHDRS += $(patsubst $(MODDIRI)/%.h,include/%.h,$(RPDCONNH)) -ALLHDRS += $(patsubst $(MODDIRI)/%.h,include/%.h,$(RPDPRIVH)) ALLLIBS += $(SRVAUTHLIB) # include all dependency files @@ -98,9 +93,6 @@ INCLUDEFILES += $(RPDUTILDEP) $(RPDCONNDEP) $(RPDPRIVDEP) ##### local rules ##### .PHONY: all-$(MODNAME) clean-$(MODNAME) distclean-$(MODNAME) -include/%.h: $(RPDUTILDIRI)/%.h - cp $< $@ - $(SRVAUTHLIB): $(SRVAUTHO) $(RSAO) $(DAEMONUTILSO) $(STRLCPYO) $(ORDER_) $(MAINLIBS) $(SRVAUTHLIBDEP) @$(MAKELIB) $(PLATFORM) $(LD) "$(LDFLAGS)" \ "$(SOFLAGS)" libSrvAuth.$(SOEXT) $@ "$(SRVAUTHO) $(RSAO)" \ @@ -119,6 +111,7 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### +$(RPDALLO): CXXFLAGS += -I$(RPDUTILDIRR) $(RPDUTILO): CXXFLAGS += $(AUTHFLAGS) ifeq ($(MACOSX_SSL_DEPRECATED),yes) $(call stripsrc,$(RPDUTILDIRS)/rpdutils.o): CXXFLAGS += -Wno-deprecated-declarations diff --git a/net/rpdutils/inc/rpdconn.h b/net/rpdutils/res/rpdconn.h similarity index 100% rename from net/rpdutils/inc/rpdconn.h rename to net/rpdutils/res/rpdconn.h diff --git a/net/rpdutils/inc/rpddefs.h b/net/rpdutils/res/rpddefs.h similarity index 100% rename from net/rpdutils/inc/rpddefs.h rename to net/rpdutils/res/rpddefs.h diff --git a/net/rpdutils/inc/rpderr.h b/net/rpdutils/res/rpderr.h similarity index 100% rename from net/rpdutils/inc/rpderr.h rename to net/rpdutils/res/rpderr.h diff --git a/net/rpdutils/inc/rpdp.h b/net/rpdutils/res/rpdp.h similarity index 100% rename from net/rpdutils/inc/rpdp.h rename to net/rpdutils/res/rpdp.h diff --git a/net/rpdutils/inc/rpdpriv.h b/net/rpdutils/res/rpdpriv.h similarity index 100% rename from net/rpdutils/inc/rpdpriv.h rename to net/rpdutils/res/rpdpriv.h diff --git a/net/srputils/Module.mk b/net/srputils/Module.mk index 77847d917d316cb794dc113e97398fdab104a24e..64002b706f127fc186e0010c493db5bc9cb74e56 100644 --- a/net/srputils/Module.mk +++ b/net/srputils/Module.mk @@ -76,5 +76,5 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### -$(SRPUTILSO): CXXFLAGS += $(SRPINCDIR:%=-I%) +$(SRPUTILSO): CXXFLAGS += $(SRPINCDIR:%=-I%) -I$(ROOT_SRCDIR)/net/rpdutils/res $(RTCONFO): CFLAGS += $(SRPUTILINCDIR:%=-I%) $(SRPINCDIR:%=-I%) diff --git a/proof/proofd/CMakeLists.txt b/proof/proofd/CMakeLists.txt index ec7c159f33bb36c42b2306928d392e0172175cad..8e6b92b5e0a571ff5446f79888ba2b367f97f47f 100644 --- a/proof/proofd/CMakeLists.txt +++ b/proof/proofd/CMakeLists.txt @@ -5,6 +5,7 @@ include_directories(${XROOTD_INCLUDE_DIRS}) include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/inc) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../rpdutils/res) add_definitions(${XROOTD_CFLAGS}) # # This should not be needed any longer after fix 039136791216af4620b9041e89d60c3ac0bab2f7 diff --git a/proof/proofd/Module.mk b/proof/proofd/Module.mk index 3352cb01a6f4f2717c72ca9e76cbaf93af582464..13251013c5759dccb51faddfb9c05a0b13b7f860 100644 --- a/proof/proofd/Module.mk +++ b/proof/proofd/Module.mk @@ -56,8 +56,6 @@ XPDINCEXTRA += $(PROOFDDIRI:%=-I%) XPDLIBEXTRA := $(XROOTDDIRL)/libXrdClient.lib # used in the main Makefile -PROOFDEXEH := $(MODDIRI)/proofdp.h -ALLHDRS += $(patsubst $(MODDIRI)/%.h,include/%.h,$(PROOFDEXEH)) ALLLIBS += $(XPDLIB) # include all dependency files @@ -92,7 +90,6 @@ $(XPCONNO): CXXFLAGS += $(XPDINCEXTRA) $(EXTRA_XRDFLAGS) else ##### proofd ##### -PROOFDEXEH := $(MODDIRI)/proofdp.h PROOFDEXES := $(MODDIRS)/proofd.cxx PROOFDEXEO := $(call stripsrc,$(PROOFDEXES:.cxx=.o)) PROOFDDEP := $(PROOFDEXEO:.o=.d) @@ -205,7 +202,6 @@ endif endif # used in the main Makefile -ALLHDRS += $(patsubst $(MODDIRI)/%.h,include/%.h,$(PROOFDEXEH)) ALLEXECS += $(PROOFDEXE) ifeq ($(HASXRD),yes) ALLLIBS += $(XPDLIB) @@ -259,10 +255,10 @@ distclean-$(MODNAME): clean-$(MODNAME) distclean:: distclean-$(MODNAME) ##### extra rules ###### -$(PROOFDEXEO): CXXFLAGS += $(AUTHFLAGS) +$(PROOFDEXEO): CXXFLAGS += $(AUTHFLAGS) -I$(ROOT_SRCDIR)/net/rpdutils/res $(XPDO): $(XROOTDMAKE) $(XRDHDRS) -$(XPDO): CXXFLAGS += $(XPDINCEXTRA) $(EXTRA_XRDFLAGS) +$(XPDO): CXXFLAGS += $(XPDINCEXTRA) $(EXTRA_XRDFLAGS) $(BONJOURCPPFLAGS) -I$(ROOT_SRCDIR)/net/rpdutils/res ifneq ($(ICC_GE_9),) # remove when xrootd has moved from strstream.h -> sstream. diff --git a/proof/proofd/inc/proofdp.h b/proof/proofd/src/proofdp.h similarity index 100% rename from proof/proofd/inc/proofdp.h rename to proof/proofd/src/proofdp.h