diff --git a/pkgs/applications/science/misc/root/5.nix b/pkgs/applications/science/misc/root/5.nix index 1f0fc663647a..871f5ece9cfe 100644 --- a/pkgs/applications/science/misc/root/5.nix +++ b/pkgs/applications/science/misc/root/5.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, cmake, pcre, pkgconfig, python2 +{ stdenv, fetchurl, fetchpatch, cmake, pcre, pkgconfig, python2 , libX11, libXpm, libXft, libXext, libGLU_combined, zlib, libxml2, lzma, gsl_1 , Cocoa, OpenGL, cf-private, noSplash ? false }: @@ -19,11 +19,30 @@ stdenv.mkDerivation rec { patches = [ ./sw_vers_root5.patch + + (fetchpatch { + name = "enable_new_gcc.patch"; + url = "https://aur.archlinux.org/cgit/aur.git/plain/enable_new_gcc.patch?h=root5&id=91c50876081a0af36f84ec4f0f9dba869107fa4f"; + sha256 = "1rnp0xlw0yqi7mjs4w145njd79i8kkir1qik7zwicdik9axf8ygm"; + }) + + # prevents rootcint from looking in /usr/includes and such + ./purify_include_paths_root5.patch + + # disable dictionary generation for stuff that includes libc headers + # our glibc requires a modern compiler + ./disable_libc_dicts_root5.patch ]; preConfigure = '' patchShebangs build/unix/ ln -s ${stdenv.lib.getDev stdenv.cc.libc}/include/AvailabilityMacros.h cint/cint/include/ + '' + # Fix CINTSYSDIR for "build" version of rootcint + # This is probably a bug that breaks out-of-source builds + + '' + substituteInPlace cint/cint/src/loadfile.cxx\ + --replace 'env = "cint";' 'env = "'`pwd`'/cint";' '' + stdenv.lib.optionalString noSplash '' substituteInPlace rootx/src/rootx.cxx --replace "gNoLogo = false" "gNoLogo = true" ''; @@ -73,8 +92,5 @@ stdenv.mkDerivation rec { description = "A data analysis framework"; platforms = platforms.unix; maintainers = with maintainers; [ veprbl ]; - # needs to be adapted to work with modern glibc - # it works on darwin by impurely picking up system's libc headers - broken = stdenv.isLinux; }; } diff --git a/pkgs/applications/science/misc/root/disable_libc_dicts_root5.patch b/pkgs/applications/science/misc/root/disable_libc_dicts_root5.patch new file mode 100644 index 000000000000..abd6222847ef --- /dev/null +++ b/pkgs/applications/science/misc/root/disable_libc_dicts_root5.patch @@ -0,0 +1,27 @@ +diff --git a/cint/ROOT/CMakeLists.txt b/cint/ROOT/CMakeLists.txt +--- a/cint/ROOT/CMakeLists.txt ++++ b/cint/ROOT/CMakeLists.txt +@@ -47,21 +47,13 @@ set(CINTSTLDLLHEADERS + ${CMAKE_SOURCE_DIR}/cint/cint/lib/stdstrct/stdcxxfunc.h + ) + set(CINTINCDLLNAMES +- stdfunc ++# stdfunc + # stdcxxfunc + ) + set(CINTINCDLLHEADERS +- ${CMAKE_SOURCE_DIR}/cint/cint/lib/stdstrct/stdfunc.h ++# ${CMAKE_SOURCE_DIR}/cint/cint/lib/stdstrct/stdfunc.h + # ${CMAKE_SOURCE_DIR}/cint/cint/lib/stdstrct/stdcxxfunc.h + ) +-if(NOT WIN32) +- set(CINTSTLDLLNAMES ${CINTSTLDLLNAMES} valarray) +- set(CINTSTLDLLHEADERS ${CINTSTLDLLHEADERS} ${CINTDLLDIR}/vary.h) +- set(CINTINCDLLNAMES ${CINTINCDLLNAMES} posix ipc) +- set(CINTINCDLLHEADERS ${CINTINCDLLHEADERS} +- ${CMAKE_SOURCE_DIR}/cint/cint/lib/posix/exten.h +- ${CMAKE_SOURCE_DIR}/cint/cint/lib/ipc/ipcif.h) +-endif() + + set(CINTBUILDLOADER + vector diff --git a/pkgs/applications/science/misc/root/purify_include_paths_root5.patch b/pkgs/applications/science/misc/root/purify_include_paths_root5.patch new file mode 100644 index 000000000000..6773603b8ad3 --- /dev/null +++ b/pkgs/applications/science/misc/root/purify_include_paths_root5.patch @@ -0,0 +1,204 @@ +diff --git a/cint/cint/src/loadfile.cxx b/cint/cint/src/loadfile.cxx +--- a/cint/cint/src/loadfile.cxx ++++ b/cint/cint/src/loadfile.cxx +@@ -1365,92 +1365,6 @@ int G__statfilename(const char *filenamein, struct stat *statBuf, + } + } + #endif /* G__EDU_VERSION */ +- +-#ifdef G__VISUAL +- /********************************************** +- * try /msdev/include +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/msdev/include/%s%s",filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif /* G__VISUAL */ +- +-#ifdef G__SYMANTEC +- /********************************************** +- * try /sc/include +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/sc/include/%s%s",filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif // G__SYMANTEC +- +-#ifndef G__WIN32 +- /********************************************** +- * try /usr/include/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/usr/include/%s%s",filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif +- +-#ifdef __GNUC__ +- /********************************************** +- * try /usr/include/g++/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/usr/include/g++/%s%s",filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif /* __GNUC__ */ +- +-#ifndef G__WIN32 +- /* #ifdef __hpux */ +- /********************************************** +- * try /usr/include/CC/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/usr/include/CC/%s%s",filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif +- +-#ifndef G__WIN32 +- /********************************************** +- * try /usr/include/codelibs/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- workname.Format("/usr/include/codelibs/%s%s" +- ,filename(),addpost[i2]); +- res = stat( workname, statBuf ); +- if (res==0) { +- if (fullPath) fullPath->Swap(workname); +- return res; +- } +- } +-#endif + } + return -1; + } +@@ -1960,107 +1874,6 @@ int G__loadfile(const char *filenamein) + } + if(G__ifile.fp) break; + #endif /* G__EDU_VERSION */ +- +-#ifdef G__VISUAL +- /********************************************** +- * try /msdev/include +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/msdev/include/%s%s",filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-#endif /* G__VISUAL */ +- +-#ifdef G__SYMANTEC +- /********************************************** +- * try /sc/include +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/sc/include/%s%s",filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-#endif /* G__SYMANTEC */ +- +-#ifndef G__WIN32 +- /********************************************** +- * try /usr/include/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/usr/include/%s%s",filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-#endif +- +-#ifdef __GNUC__ +- /********************************************** +- * try /usr/include/g++/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/usr/include/g++/%s%s",filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-#endif /* __GNUC__ */ +- +-#ifndef G__WIN32 +-/* #ifdef __hpux */ +- /********************************************** +- * try /usr/include/CC/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/usr/include/CC/%s%s",filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-/* #endif __hpux */ +-#endif +- +-#ifndef G__WIN32 +-/* #ifdef __hpux */ +- /********************************************** +- * try /usr/include/codelibs/filename +- **********************************************/ +- if('\0'!=G__cintsysdir[0]) { +- G__snprintf(G__ifile.name,G__MAXFILENAME,"/usr/include/codelibs/%s%s" +- ,filename(),addpost[i2]); +-#ifndef G__WIN32 +- G__ifile.fp = fopen(G__ifile.name,"r"); +-#else +- G__ifile.fp = fopen(G__ifile.name,"rb"); +-#endif +- G__globalcomp=G__store_globalcomp; +- } +- if(G__ifile.fp) break; +-/* #endif __hpux */ +-#endif + } + } +