* Re: Multiple versions of mesa libraries in cmake runtime search path
[not found] <CAJqVjv8PhH4KTOgE-GBL15N99eo0bnGoppC49xU11sBpbnnEZg@mail.gmail.com>
@ 2024-03-22 5:23 ` Jake
2024-03-22 5:23 ` Jake
2024-03-23 2:03 ` Jake
0 siblings, 2 replies; 3+ messages in thread
From: Jake @ 2024-03-22 5:23 UTC (permalink / raw)
To: help-guix; +Cc: guix-science
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.mailman@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
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Multiple versions of mesa libraries in cmake runtime search path
2024-03-22 5:23 ` Multiple versions of mesa libraries in cmake runtime search path Jake
@ 2024-03-22 5:23 ` Jake
2024-03-23 2:03 ` Jake
1 sibling, 0 replies; 3+ messages in thread
From: Jake @ 2024-03-22 5:23 UTC (permalink / raw)
To: help-guix; +Cc: guix-science
[-- Attachment #1: Type: text/plain, Size: 12475 bytes --]
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.mailman@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
>
[-- Attachment #2: Type: text/html, Size: 16101 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Multiple versions of mesa libraries in cmake runtime search path
2024-03-22 5:23 ` Multiple versions of mesa libraries in cmake runtime search path Jake
2024-03-22 5:23 ` Jake
@ 2024-03-23 2:03 ` Jake
1 sibling, 0 replies; 3+ messages in thread
From: Jake @ 2024-03-23 2:03 UTC (permalink / raw)
To: help-guix; +Cc: guix-science
[-- Attachment #1: Type: text/plain, Size: 13148 bytes --]
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.mailman@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.mailman@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
>>
>
[-- Attachment #2: Type: text/html, Size: 16872 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-03-23 2:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <CAJqVjv8PhH4KTOgE-GBL15N99eo0bnGoppC49xU11sBpbnnEZg@mail.gmail.com>
2024-03-22 5:23 ` Multiple versions of mesa libraries in cmake runtime search path Jake
2024-03-22 5:23 ` Jake
2024-03-23 2:03 ` Jake
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).