From: Jake <jforst.mailman@gmail.com>
To: help-guix@gnu.org
Cc: guix-science@gnu.org
Subject: Re: Multiple versions of mesa libraries in cmake runtime search path
Date: Sat, 23 Mar 2024 02:03:09 +0000 [thread overview]
Message-ID: <CAJqVjv-0GRg_1L8SHVfA3S9qU5VTD0+k2yt66St+mrJpyTu62A@mail.gmail.com> (raw)
In-Reply-To: <CAJqVjv-TjCbzx=dZEZs_rdybfJz5fd8Csuqk6mPBbPFWVUEgug@mail.gmail.com>
[-- 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 --]
prev parent reply other threads:[~2024-03-23 2:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAJqVjv-0GRg_1L8SHVfA3S9qU5VTD0+k2yt66St+mrJpyTu62A@mail.gmail.com \
--to=jforst.mailman@gmail.com \
--cc=guix-science@gnu.org \
--cc=help-guix@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).