[Fedora-packaging] how to force rpmbuild to use local libraries?

Krzesimir Nowak qdlacz at gmail.com
Fri Aug 28 19:41:31 UTC 2009


On Fri, 2009-08-28 at 14:18 -0400, Tom "spot" Callaway wrote:
> On 08/28/2009 12:22 PM, Krzesimir Nowak wrote:
> > Hi,
> > 
> > I'm using Fedora 11, so all software in repository are stable ones, but
> > I'm developing a library using unstable versions of them (e.g. I have
> > now glibmm24 2.20, and I need it in version 2.21.3). I have those
> > unstable versions installed in my home directory (that is `~/usr/') and
> > I'm testing my library on them by using parallel environment provided by
> > `jhbuild shell'. I decided to build a package with rpmbuild, but it uses
> > `/usr/' path for everything (pkg-config files and such) even if I
> > execute it from my parallel environment, so building the package ends
> > quickly with message of unmet dependencies or in configure stage, when I
> > pass `--nodeps' option. My question is: is there a way to force rpmbuild
> > to use libraries in my home directory instead of those in `/usr/'?
> 
> Well, to be fair, rpmbuild isn't to blame here. The spec file probably
> has something like:
> 
> %configure --with-foo --with-bar
> 
> That simply invokes configure with a set of sane options (including
> pointing to the system library/binary paths). For example, on my rawhide
> x86_64 system, %configure evaluates to:
> 
> CFLAGS="${CFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
> -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64
> -mtune=generic}" ; export CFLAGS ;
>   CXXFLAGS="${CXXFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
> -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64
> -mtune=generic}" ; export CXXFLAGS ;
>   FFLAGS="${FFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
> -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64
> -mtune=generic -I/usr/lib64/gfortran/modules}" ; export FFLAGS ;
>   ./configure --build=x86_64-unknown-linux-gnu
> --host=x86_64-unknown-linux-gnu \
> 	--target=x86_64-redhat-linux-gnu \
> 	--program-prefix= \
> 	--prefix=/usr \
> 	--exec-prefix=/usr \
> 	--bindir=/usr/bin \
> 	--sbindir=/usr/sbin \
> 	--sysconfdir=/etc \
> 	--datadir=/usr/share \
> 	--includedir=/usr/include \
> 	--libdir=/usr/lib64 \
> 	--libexecdir=/usr/libexec \
> 	--localstatedir=/var \
> 	--sharedstatedir=/var/lib \
> 	--mandir=/usr/share/man \
> 	--infodir=/usr/share/info
> 
> Now, if your spec file used "./configure" instead of "%configure", you
> could hardcode any of those paths into the spec that you want. It
> wouldn't be portable though. Even if that package built, it would still
> depend on things not packaged up, and complain on installation.

But using ./configure with manually set options still will use
pkg-config files from /usr/lib/pkgconfig instead of ~/usr/lib/pkgconfig.
So configure stage will fail. Of course, I could define PATH (and other)
environment variable before running ./configure, but that is not what I
want and that blasts any portability away.

> 
> As a possible alternative, if you can make packages for the unstable
> library dependencies, then you can build this package in a chroot where
> the unstable libraries are installed. Or, if the libraries have unique
> sonames, you should be able to have them both installed in system
> locations and eliminate the need for the chroot.
> 

It probably will be better if I just wait until newest versions of
libraries are packaged to rawhide (e.g gtkmm24 in rawhide is 2.17.2 and
upstream is 2.17.9). Then I'll try to install rawhide as a second OS (I
already failed at that once) and build a package there.

Thanks for response,
Krzem




More information about the Fedora-packaging mailing list