* Multiple versions of mesa libraries in cmake runtime search path
@ 2024-03-14 3:25 Jake
2024-03-22 5:23 ` Jake
0 siblings, 1 reply; 4+ messages in thread
From: Jake @ 2024-03-14 3:25 UTC (permalink / raw)
To: help-guix
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] 4+ messages in thread
* Re: Multiple versions of mesa libraries in cmake runtime search path
2024-03-14 3:25 Multiple versions of mesa libraries in cmake runtime search path Jake
@ 2024-03-22 5:23 ` Jake
2024-03-22 5:23 ` Jake
2024-03-23 2:03 ` Jake
0 siblings, 2 replies; 4+ 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] 4+ messages in thread
* Re: Multiple versions of mesa libraries in cmake runtime search path
2024-03-22 5:23 ` Jake
@ 2024-03-22 5:23 ` Jake
2024-03-23 2:03 ` Jake
1 sibling, 0 replies; 4+ 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] 4+ messages in thread
* Re: Multiple versions of mesa libraries in cmake runtime search path
2024-03-22 5:23 ` Jake
2024-03-22 5:23 ` Jake
@ 2024-03-23 2:03 ` Jake
1 sibling, 0 replies; 4+ 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] 4+ messages in thread
end of thread, other threads:[~2024-03-23 2:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-14 3:25 Multiple versions of mesa libraries in cmake runtime search path Jake
2024-03-22 5:23 ` 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).