[petsc-dev] Problem with petsc.pc when configured with --with-single-library=0

Garth N. Wells gnw20 at cam.ac.uk
Sat Mar 4 04:02:28 CST 2017


On 1 March 2017 at 16:22, Jed Brown <jed at jedbrown.org> wrote:
> Barry and Garth, should we include RPATH flags in the Libs field of
> PETSc.pc?  We normally include them in makefiles because PETSc is often
> installed to places that aren't in the search path and environment
> variables (LD_LIBRARY_PATH) are evil.
>

I don't think RPATH should be added - I think it's up to the caller to add it.

A reason I moved to using the PETSc pkg-config file was to better
support relocatable builds on our end (which is help for packaging
systems like conda), so I would like it to stay easy.

> Are you aware of any conventions for handling RPATH in pkg-config?

No - from a quick search there is discussion about the place but I
couldn't see a clear convention.

Garth

> There is --libs-only-l, --libs-only-L, and --libs-only-other so someone
> could filter out the rpath flags by using only the first two.
>
> I put this in a Makefile:
>
> PETSc.pc := $(PETSC_DIR)/$(PETSC_ARCH)/lib/pkgconfig/PETSc.pc
>
> CC := $(shell pkg-config --variable=ccompiler $(PETSc.pc))
> CPPFLAGS := $(shell pkg-config --cflags-only-I $(PETSc.pc))
> CFLAGS := $(shell pkg-config --cflags-only-other $(PETSc.pc))
> LDFLAGS := $(shell pkg-config --libs-only-L --libs-only-other $(PETSc.pc))
> LDLIBS := $(shell pkg-config --libs-only-l $(PETSc.pc)) -lm
>
>
> With no other targets (i.e., using only built-in rules), I can build
> examples in the current directory.  E.g.,
>
> $ make ex5
> mpicc  -I/home/jed/petsc/include -I/home/jed/petsc/ompi-opt/include -L/home/jed/petsc/ompi-opt/lib  ex5.c  -lpetscts -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsys -lm -o ex5
>
> Should we add variables for coptflags?
>
> I feel like we should try to make the above a recommended way to build,
> as an alternative to including the makefiles that have zillions of
> undocumented non-namespaced variables.  Note that when using PETSc
> together with other packages, the above is trivial to extend and doesn't
> risk namespace collision.
>
> Jed Brown <jed at jedbrown.org> writes:
>
>> Garth, I put a fix in 'next'.  Dolfin configures for me now.
>>
>> Barry, the fact that PETSc.pc has been broken for four years is why
>> someone might use FindPETSc.cmake.  (Garth changed their CMake to use
>> pkg-config instead of the uglier logic, but then it fails with no
>> debugging output.)
>>
>> "Garth N. Wells" <gnw20 at cam.ac.uk> writes:
>>
>>> When configuring PETSc with "--with-single-library=0", my installed
>>> petsc.pc file looks like:
>>>
>>> prefix=/home/garth/local/packages/petsc-test
>>> exec_prefix=${prefix}
>>> includedir=${prefix}/include
>>> libdir=/home/garth/local/packages/petsc-test/lib
>>> ccompiler=mpicc
>>> fcompiler=mpif90
>>> blaslapacklibs=-llapack -lblas
>>>
>>> Name: PETSc
>>> Description: Library to solve ODEs and algebraic equations
>>> Version: 3.7.5
>>> Cflags: -I/home/garth/local/packages/petsc-test/include
>>> -I/home/garth/local/packages/petsc-test/include
>>> Libs: -L/home/garth/local/packages/petsc-test/lib  -lpetsc
>>> Libs.private: -llapack -lblas -lX11 -lpthread -lm
>>> -Wl,-rpath,/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu
>>> -Wl,-rpath,/usr/lib/gcc/x86_64-linux-gnu/6
>>> -L/usr/lib/gcc/x86_64-linux-gnu/6 -Wl,-rpath,/lib/x86_64-linux-gnu
>>> -L/lib/x86_64-linux-gnu -lmpichfort -lgfortran -lm -lgfortran -lm
>>> -lquadmath -lm -lmpichcxx -lstdc++ -Wl,-rpath,/usr/lib/x86_64-linux-gnu
>>> -L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/gcc/x86_64-linux-gnu/6
>>> -L/usr/lib/gcc/x86_64-linux-gnu/6 -Wl,-rpath,/usr/lib/x86_64-linux-gnu
>>> -L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/lib/x86_64-linux-gnu
>>> -L/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/x86_64-linux-gnu
>>> -L/usr/lib/x86_64-linux-gnu -ldl -lmpich -lgcc_s -ldl
>>>
>>>
>>> Note the "Libs:". It points only to petsc (which doesn't exist),
>>> whereas I would expect it to list each PETSc lib, i.e., petscdm,
>>> petscksp, etc, or provide a pkg-config file for each PETSc lib.
>>>
>>> Garth



More information about the petsc-dev mailing list