petsc: Fix install_name_tool patch

The PETSc library's config/install.py script checks whether
/usr/bin/install_name_tool is an existing file:

https://gitlab.com/petsc/petsc/-/blob/master/config/install.py#L368

Therefore, it is not enough to replace it with something that we expect
to be on the PATH, as this will cause the linked if statement to be
silently skipped. The consequence is that applications linked against
this version of petsc will fail at runtime on MacOS with a dynamic
loading error.

Instead, we should replace install_name_tool with the absolute path of a
binary we know will be present at build time.

Note that this should be fixed upstream as well, but this is sufficient
to fix the runtime error.
This commit is contained in:
Jack Coughlin 2020-07-18 08:47:24 -07:00
parent b907241a66
commit 8a65fe8da6

View File

@ -1,4 +1,4 @@
{ stdenv , fetchurl , blas , gfortran , lapack , python }: { stdenv , darwin , fetchurl , blas , gfortran , lapack , python }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "petsc"; pname = "petsc";
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
--replace /bin/sh /usr/bin/python --replace /bin/sh /usr/bin/python
'' + stdenv.lib.optionalString stdenv.isDarwin '' '' + stdenv.lib.optionalString stdenv.isDarwin ''
substituteInPlace config/install.py \ substituteInPlace config/install.py \
--replace /usr/bin/install_name_tool install_name_tool --replace /usr/bin/install_name_tool ${darwin.cctools}/bin/install_name_tool
''; '';
preConfigure = '' preConfigure = ''