ROOT compiled via CMake and non-default directory structure

Hello,

I am trying to compile ROOT 6.02.03 via cmake and confguring the various paths to match my system (debian) - using these flags:

...
                             -DCMAKE_INSTALL_PREFIX=/usr \
                             -DCMAKE_INSTALL_INCLUDEDIR=include/root \
                             -DCMAKE_INSTALL_LIBDIR=lib/root \
                             -DCMAKE_INSTALL_BINDIR=bin \
                             -DCMAKE_INSTALL_CMAKEDIR=lib/root/cmake \
                             -DCMAKE_INSTALL_SYSCONFDIR=/etc/root \
                             -DCMAKE_INSTALL_MANDIR=share/man \
                             -DCMAKE_INSTALL_DOCDIR=share/doc/root-system6 \
                             -DCMAKE_INSTALL_ICONDIR=share/icons/root \
                             -DCMAKE_INSTALL_ACLOCALDIR=share/aclocal \
                             -DCMAKE_INSTALL_DATAROOTDIR=share \
                             -DCMAKE_INSTALL_DATADIR=share/root \
                             -DCMAKE_INSTALL_FONTDIR=share/fonts/truetype/root \
                             -DCMAKE_INSTALL_ELISPDIR=share/emacs/site-lisp \
                             -DCMAKE_INSTALL_MACRODIR=share/root/macros \
                             -DCMAKE_INSTALL_TESTDIR=share/doc/root-system6/test \
                             -DCMAKE_INSTALL_TUTDIR=share/doc/root-system6/tutorials \
...

The compilation passes OK, but when trying to run ROOT, I end up with these error messages:

LoadROOTSplashscreenPixmap, failed to load a splashscreen image
LoadROOTSplashscreenPixmap, failed to load a splashscreen image
PopupLogo, failed to create a background pixmap
ERROR in cling::CIFactory::createCI():
  resource directory /usr/lib/etc/cling/lib/clang/3.6.0 not found!
error: unable to read PCH file /usr/lib/etc/allDict.cxx.pch: 'No such file or directory'
fatal error: malformed or corrupted AST file: 'Unable to load module "/usr/lib/etc/allDict.cxx.pch": module file not found'
input_line_3:1:45: error: no type named 'Interpreter' in namespace 'cling'
namespace cling {namespace runtime { cling::Interpreter *gCling=(cling::Interpreter*)20689056;} }
                                     ~~~~~~~^
input_line_3:1:73: error: no member named 'Interpreter' in namespace 'cling'
namespace cling {namespace runtime { cling::Interpreter *gCling=(cling::Interpreter*)20689056;} }
                                                                 ~~~~~~~^
input_line_3:1:85: error: expected expression
namespace cling {namespace runtime { cling::Interpreter *gCling=(cling::Interpreter*)20689056;} }
                                                                                    ^
input_line_4:1:10: fatal error: 'Rtypes.h' file not found
#include "Rtypes.h"
         ^

 *** Break *** segmentation violation
Error in <TUnixSystem::StackTrace> script /usr/lib/etc/gdb-backtrace.sh is missing

The paths seems to be somewhat messed up at runtime (the splash image should be searched for in the ICONSDIR /usr/share/icons/root, not in /usr/share/root/icons, and the cling and *.pch files should be searched for in the SYSCONFDIR /etc/root, instead of in /usr/lib/etc). The cling errors actually appears when already redefining the first three paths: PREFIX, LIBDIR and INCLUDEDIR paths. If none of the paths is redefined, ROOT6 compiled via cmake works fine. However, trying the similar directory structure when compiling ROOT the old way via configure, it works OK as well. So the problem is cmake specific.

Is it a bug, or is it a current incompleness of the ROOT cmake build system ? (I know there is the comment that cmake was tested on SLC, Mac and Windows only. However, I expected this concerns the dependencies rather then the place where ROOT is installed).

Thanks,
Pavel

Give it a try with the option -Dgnuinstall=ON. With this option the following defaults will be generated, which are not exactly what you require but close.

CMAKE_INSTALL_BINDIR=bin
CMAKE_INSTALL_LIBDIR=lib/root
CMAKE_INSTALL_INCLUDEDIR=include/root
CMAKE_INSTALL_SYSCONFDIR=etc/root
CMAKE_INSTALL_MANDIR=share/man
CMAKE_INSTALL_DATAROOTDIR=share
CMAKE_INSTALL_DATADIR=share/root
CMAKE_INSTALL_MACRODIR=share/root/macros
CMAKE_INSTALL_CINTINCDIR=lib/root/cint
CMAKE_INSTALL_ICONDIR=share/root/icons
CMAKE_INSTALL_FONTDIR=share/root/fonts
CMAKE_INSTALL_SRCDIR=share/root/src
CMAKE_INSTALL_DOCDIR=share/doc/root
CMAKE_INSTALL_TESTDIR=share/doc/root/test
CMAKE_INSTALL_TUTDIR=share/doc/root/tutorials
CMAKE_INSTALL_ACLOCALDIR=share/aclocal
CMAKE_INSTALL_ELISPDIR=share/emacs/site-lisp
CMAKE_INSTALL_CMAKEDIR=share/root/cmake

Just to conclude on this - the latest 6.02.08 and 6.03.04 versions compile and run fine with the redefined installation paths, using both together the definition of paths I wanted and having the gnuinstall option set to ON.

Thanks,
Pavel