Happy to report a fix for this: Install both geant4-vis and mesa with the --no-grafts option. This makes sure only 1 variant of mesa is used.
E.g. #+begin_src sh guix shell geant4-vis cmake make gcc-toolchain mesa --no-grafts #+end_src Cheers Jake On Fri, Mar 22, 2024 at 5:23 AM Jake <jforst.mail...@gmail.com> wrote: > If the problem is that qtbase-5 is propagating a different mesa than the > one we can install (i.e. a different /gnu/store entry), let's try > installing qtbase-5 and using its propagated mesa instead of installing > mesa ourselves. > > #+begin_src sh > > guix shell geant4-vis cmake make gcc-toolchain qtbase@5 > > #+end_src > > Alas, we still have 2 different mesa versions: > > #+begin_example > > CMake Warning at CMakeLists.txt:35 (add_executable): > Cannot generate a safe runtime search path for target exampleA1 because > files in some directories may conflict with libraries in implicit > directories: > > runtime library [libEGL.so.1] in > /gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/lib may be hidden by > files in: > /gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2/lib > runtime library [libGL.so.1] in > /gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/lib may be hidden by > files in: > /gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2/lib > > Some of these libraries may not be found correctly. > > #+end_example > > The installed qtbase-5 propagates the same mesa as the one we can install: > > /gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/lib/libEGL.so -> > /gnu/store/clnk1arbkc6v21a93gxnirvsbjaz5v07-mesa-23.3.2/lib/libEGL.so > > So then, where is this other mesa coming from (2rzdlwb...), if not > qtbase-5? > > I've included possibly relevant lines from the generated CMakeCache.txt > > #+begin_example > > //Path to a file. > > OPENGL_EGL_INCLUDE_DIR:PATH=/gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/ > include > > //Path to a file. > > OPENGL_GLX_INCLUDE_DIR:PATH=/gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/ > include > > //Path to a file. > > OPENGL_INCLUDE_DIR:PATH=/gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2/ > include > > //Path to a library. > > OPENGL_egl_LIBRARY:FILEPATH=/gnu/store/6imr8p8j0d59s4r0912xy8mficw8kc2y-profile/ > lib/libEGL.so > > //Path to a library. > > OPENGL_gl_LIBRARY:FILEPATH=/gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3 > .2/lib/libGL.so > > #+end_example > > Cheers > Jake > > On Thu, Mar 14, 2024 at 3:25 AM Jake <jforst.mail...@gmail.com> wrote: > >> Hello >> >> In short, I have the mesa package installed and another package I >> installed appears to have a different mesa in /gnu/store/ as a runtime >> dependency. >> As a result, cmake is unable to generate a safe runtime search path, >> because there are 2 different libGL.so.1 and libEGL.so.1 files in the path, >> one from the mesa I installed and another from the other mesa that was >> brought in as a runtime dependency. >> >> Here is the cmake warning: >> >> #+begin_src sh >> >> CMake Warning at CMakeLists.txt:35 (add_executable): >> Cannot generate a safe runtime search path for target exampleA1 >> because >> files in some directories may conflict with libraries in implicit >> directories: >> >> runtime library [libEGL.so.1] in /home/jake/.guix-profile/lib may >> be hidden by files in: >> /gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2/lib >> runtime library [libGL.so.1] in /home/jake/.guix-profile/lib may be >> hidden by files in: >> /gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2/lib >> >> Some of these libraries may not be found correctly. >> >> #+end_src >> >> I think the guix package definition below is somewhere introducing the >> additional mesa at /gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2. >> The input clhep-2.4.6.2 and native inputs are omitted for brevity because >> I don't think they're relevant, but the full package definition and inputs >> can be found at >> https://github.com/jakeforster/guix-channel/blob/master/jforst/packages/geant4.scm >> >> #+begin_src scheme >> >> (define-public geant4-vis-11-1-1 >> (package >> (name "geant4-vis") >> (version "11.1.1") >> (source >> (origin >> (method git-fetch) >> (uri (git-reference >> (url "https://gitlab.cern.ch/geant4/geant4") >> (commit (string-append "v" version)))) >> (file-name (git-file-name name version)) >> (sha256 >> (base32 >> "141fhmh0w8sbp6cckccf3dswn596ds4vgqwc3gz6i53ypyxmv2fw")))) >> (build-system cmake-build-system) >> (inputs (list coreutils >> gcc-toolchain >> xerces-c >> expat >> clhep-2.4.6.2 >> python-2 >> python-3.10 >> perl >> tcsh >> qtbase-5 >> libxmu >> libxt)) >> (arguments >> `(#:configure-flags (let* ((out (assoc-ref %outputs "out")) >> (qt-path (string-append (assoc-ref >> %build-inputs >> "qtbase") >> >> "/lib/cmake/Qt5"))) >> (list (string-append >> "-DCMAKE_INSTALL_PREFIX=" out) >> (string-append "-DCMAKE_PREFIX_PATH=" >> qt-path) >> "-DCMAKE_INSTALL_LIBDIR=lib" >> "-DGEANT4_BUILD_MULTITHREADED=ON" >> "-DGEANT4_ENABLE_TESTING=OFF" >> "-DGEANT4_INSTALL_DATA=OFF" >> "-DGEANT4_USE_GDML=ON" ;xerces-c is >> needed for GDML >> "-DGEANT4_USE_SYSTEM_CLHEP=ON" >> "-DGEANT4_USE_SYSTEM_EXPAT=ON" >> "-DGEANT4_USE_OPENGL_X11=ON" >> "-DGEANT4_USE_QT=ON" >> (let ((datadir (string-append out >> "/share/geant4/data"))) >> (string-append >> "-DGEANT4_INSTALL_DATADIR=" >> datadir >> "/share/geant4/data")))) >> #:phases (modify-phases %standard-phases >> (add-after 'install 'install-data >> (lambda* (#:key inputs outputs #:allow-other-keys) >> (let ((G4NDL (assoc-ref inputs "G4NDL")) >> (G4EMLOW (assoc-ref inputs "G4EMLOW")) >> (G4PhotonEvaporation (assoc-ref inputs >> >> "G4PhotonEvaporation")) >> (G4RadioactiveDecay (assoc-ref inputs >> "G4RadioactiveDecay")) >> (G4PARTICLEXS (assoc-ref inputs >> "G4PARTICLEXS")) >> (G4PII (assoc-ref inputs "G4PII")) >> (G4RealSurface (assoc-ref inputs >> "G4RealSurface")) >> (G4SAIDDATA (assoc-ref inputs "G4SAIDDATA")) >> (G4ABLA (assoc-ref inputs "G4ABLA")) >> (G4INCL (assoc-ref inputs "G4INCL")) >> (G4ENSDFSTATE (assoc-ref inputs >> "G4ENSDFSTATE")) >> (G4TENDL (assoc-ref inputs "G4TENDL")) >> (datadir (string-append (assoc-ref outputs >> "out") >> >> "/share/geant4/data"))) >> (display (list "Data archives:" >> G4NDL >> G4EMLOW >> G4PhotonEvaporation >> G4RadioactiveDecay >> G4PARTICLEXS >> G4PII >> G4RealSurface >> G4SAIDDATA >> G4ABLA >> G4INCL >> G4ENSDFSTATE)) >> (newline) >> (mkdir-p datadir) >> (invoke "tar" "xvf" G4NDL "-C" datadir) >> (invoke "tar" "xvf" G4EMLOW "-C" datadir) >> (invoke "tar" "xvf" G4PhotonEvaporation "-C" >> datadir) >> (invoke "tar" "xvf" G4RadioactiveDecay "-C" >> datadir) >> (invoke "tar" "xvf" G4PARTICLEXS "-C" datadir) >> (invoke "tar" "xvf" G4PII "-C" datadir) >> (invoke "tar" "xvf" G4RealSurface "-C" datadir) >> (invoke "tar" "xvf" G4SAIDDATA "-C" datadir) >> (invoke "tar" "xvf" G4ABLA "-C" datadir) >> (invoke "tar" "xvf" G4INCL "-C" datadir) >> (invoke "tar" "xvf" G4ENSDFSTATE "-C" datadir) >> (invoke "tar" "xvf" G4TENDL "-C" datadir))))) >> ;; no tests in Makefile >> #:tests? #f)) >> (native-inputs `(("G4NDL" ,g4ndl-4.7) >> ("G4EMLOW" ,g4emlow-8.2) >> ("G4PhotonEvaporation" ,photon-evaporation-5.7) >> ("G4RadioactiveDecay" ,radioactive-decay-5.6) >> ("G4PARTICLEXS" ,g4particlexs-4.0) >> ("G4PII" ,g4pii-1.3) >> ("G4RealSurface" ,real-surface-2.2) >> ("G4SAIDDATA" ,g4saiddata-2.0) >> ("G4ABLA" ,g4abla-3.1) >> ("G4INCL" ,g4incl-1.0) >> ("G4ENSDFSTATE" ,g4ensdfstate-2.3) >> ("G4TENDL" ,g4tendl-1.4))) >> (home-page "https://geant4.web.cern.ch") >> (synopsis "Monte Carlo particle track simulations") >> (description >> "Geant4 is a toolkit for the simulation of the passage of particles >> through matter. Its areas of application include high energy, >> nuclear and accelerator physics, as well as studies >> in medical and space science. >> >> This package supports visualisation with OpenGL and Qt.") >> (license (license:non-copyleft >> "https://geant4.web.cern.ch/download/license")))) >> >> #+end_src >> >> Steps to reproduce the cmake warning given above: >> >> #+begin_src sh >> >> git clone https://github.com/jakeforster/guix-channel.git >> guix shell -L ./guix-channel geant4-vis cmake make gcc-toolchain mesa >> >> # copy an example app >> INSTALL_DIR=$(guix build geant4-vis) >> cp -rf $INSTALL_DIR/share/Geant4/examples/basic/B1 . >> >> # the store is read only >> chmod -R 751 B1/ >> >> mkdir B1/build >> cd B1/build >> cmake .. >> >> #+end_src >> >> I have also reproduced the warning using a guix shell -C --pure. There's >> just some extra hassle with making the build dir first and sharing the B1 >> directory containing the CMakeLists.txt file. >> >> If you use your profile instead of a shell, you can confirm the >> libEGL.so.1 and libGL.so.1 libraries in ~/.guix-profile/lib/ point to the >> same mesa in /gnu/store/ that is installed with the following: >> >> #+begin_src sh >> >> $ guix package -I | grep mesa >> mesa 23.3.2 out >> /gnu/store/clnk1arbkc6v21a93gxnirvsbjaz5v07-mesa-23.3.2 >> >> $ ls -l ~/.guix-profile/lib/ | grep libEGL.so.1 >> lrwxrwxrwx 1 root root 71 Jan 1 1970 libEGL.so.1 -> >> /gnu/store/clnk1arbkc6v21a93gxnirvsbjaz5v07-mesa-23.3.2/lib/libEGL.so.1 >> >> $ ls -l ~/.guix-profile/lib/ | grep libGL.so.1 >> lrwxrwxrwx 1 root root 70 Jan 1 1970 libGL.so.1 -> >> /gnu/store/clnk1arbkc6v21a93gxnirvsbjaz5v07-mesa-23.3.2/lib/libGL.so.1 >> >> #+end_src >> >> So I'm guessing during the installation of geant4-vis, something is >> bringing in a different mesa from the store >> (/gnu/store/2rzdlwb0f7ksj7a78kjn7a7qs22avi8l-mesa-23.3.2) into the path as >> a runtime dependency. >> I note that qtbase-5 has mesa as a propagated input, so perhaps it's that. >> But it's not clear to me why the mesa propagated for qtbase-5 would be >> different (i.e. has a different /gnu/store/ entry) from the mesa that I >> install in my profile or shell. >> Any suggestions for how to resolve this would be much appreciated. >> >> Thanks! >> >> Jake >> >