The RPM macros Gnatmake_optflags and GPRbuild_optflags have so far included a hard-coded -R, telling Gnatmake and GPRbuild that they should not add a runpath to the binaries they build. (It doesn't work in all cases, but that's a bug in Gnatmake that should be fixed.) Normally we don't want runpaths in Fedora packages. There are however cases where it would be advantageous to allow a runpath. Library packages can have test suits or auxiliary programs that run during the build and need to link to the library in the build directory, and they may rely on the automatic runpath for this. We saw an example of this in Templates Parser, where LD_LIBRARY_PATH had to be used in the spec to compensate for the lack of a runpath.
I've found a way to allow a spec file to enable the runpath when needed while keeping it disabled by default. I've changed the macros so that -R is not included if there is a macro named GNAT_add_rpath. By default there is no such macro, so -R is passed to the builder and nothing changes from the current state, but a spec file that needs a runpath can define GNAT_add_rpath, allowing the GNAT tools to add their computed runpath to the binaries.
The -R flag is omitted only where Gnatmake_optflags or GPRbuild_optflags is expanded below the point where GNAT_add_rpath is defined. Undefining GNAT_add_rpath restores the default so that -R is again used in macro expansions below that point. It can even be defined and undefined several times within a spec file if a runpath needs to be added in some builder invocations and not in others.
Here's an example of how GNAT_add_rpath can be used in templates_parser.spec:
%build make %{?_smp_mflags} VERSION=%{version} GNATMAKE_OPTFLAGS="%{Gnatmake_optflags}" # doc build wants to link to library %global GNAT_add_rpath yes make doc GNATMAKE_OPTFLAGS="%{Gnatmake_optflags}"
First the library itself is built without a runpath (would be, if Gnatmake didn't have that bug). Then GNAT_add_rpath is defined before the documentation is built, so when a number of programs are built and run as a part of the documentation build, they have a runpath and can therefore link to the library. This is cleaner than using LD_LIBRARY_PATH as the spec file becomes less dependent on the internal structure of the source tree.
This feture is coming to Fedora 17, 18 and Rawhide in fedora-gnat-project- common-3.5-1. Adding it to Fedora 16 would be a little more work, but I can get it in there too if there is a need for it.
Björn