On Sun, Feb 16, 2003 at 02:03:30PM +0100, Denis Oliver Kropp wrote: > > This is what the Makefile.am says: > > dfbg_SOURCES = dfbg.c > dfbg_LDADD = ../src/libdirectfb.la
Indeed. And for the part where that is relevant, that works (see
explanation below before trying to grok the make output below):
Making all in tools
make[2]: Entering directory `/usr/src/RPM/BUILD/DirectFB-0.9.17/tools'
if i586-mandrake-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../include -I../src
-D_REENTRANT -O3 -fomit-frame-pointer -pipe -mcpu=pentiumpro -march=i586 -ffast-math
-fno-strength-reduce -ffast-math -Wall -O3 -g -MT directfb-csource.o -MD -MP -MF
".deps/directfb-csource.Tpo" \
-c -o directfb-csource.o `test -f 'directfb-csource.c' || echo
'./'`directfb-csource.c; \
then mv ".deps/directfb-csource.Tpo" ".deps/directfb-csource.Po"; \
else rm -f ".deps/directfb-csource.Tpo"; exit 1; \
fi
/bin/sh ../libtool --mode=link i586-mandrake-linux-gnu-gcc -D_REENTRANT -O3
-fomit-frame-pointer -pipe -mcpu=pentiumpro -march=i586 -ffast-math
-fno-strength-reduce -ffast-math -Wall -O3 -g -o directfb-csource
directfb-csource.o -lpng -lz -lm -ldl -lpthread
mkdir .libs
i586-mandrake-linux-gnu-gcc -D_REENTRANT -O3 -fomit-frame-pointer -pipe
-mcpu=pentiumpro -march=i586 -ffast-math -fno-strength-reduce -ffast-math -Wall -O3 -g
-o directfb-csource directfb-csource.o -lpng -lz -lm -ldl -lpthread
if i586-mandrake-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../include -I../src
-D_REENTRANT -O3 -fomit-frame-pointer -pipe -mcpu=pentiumpro -march=i586 -ffast-math
-fno-strength-reduce -ffast-math -Wall -O3 -g -MT dfbg.o -MD -MP -MF
".deps/dfbg.Tpo" \
-c -o dfbg.o `test -f 'dfbg.c' || echo './'`dfbg.c; \
then mv ".deps/dfbg.Tpo" ".deps/dfbg.Po"; \
else rm -f ".deps/dfbg.Tpo"; exit 1; \
fi
/bin/sh ../libtool --mode=link i586-mandrake-linux-gnu-gcc -D_REENTRANT -O3
-fomit-frame-pointer -pipe -mcpu=pentiumpro -march=i586 -ffast-math
-fno-strength-reduce -ffast-math -Wall -O3 -g -o dfbg dfbg.o
../src/libdirectfb.la -ldl -lpthread
i586-mandrake-linux-gnu-gcc -D_REENTRANT -O3 -fomit-frame-pointer -pipe
-mcpu=pentiumpro -march=i586 -ffast-math -fno-strength-reduce -ffast-math -Wall -O3 -g
-o .libs/dfbg dfbg.o ../src/.libs/libdirectfb.so -ldl -lpthread -Wl,--rpath
-Wl,/usr/src/RPM/BUILD/DirectFB-0.9.17/src/.libs
creating dfbg
...
make[2]: Leaving directory `/usr/src/RPM/BUILD/DirectFB-0.9.17/tools'
But later on, when the make install is done, this happens:
Making install in tools
make[1]: Entering directory `/usr/src/RPM/BUILD/DirectFB-0.9.17/tools'
make[2]: Entering directory `/usr/src/RPM/BUILD/DirectFB-0.9.17/tools'
/bin/sh ../mkinstalldirs /var/tmp/directfb-0.9.17/usr/bin
mkdir -p -- /var/tmp/directfb-0.9.17/usr/bin
/bin/sh ../libtool --mode=install /usr/bin/install -c directfb-csource
/var/tmp/directfb-0.9.17/usr/bin/directfb-csource
/usr/bin/install -c directfb-csource /var/tmp/directfb-0.9.17/usr/bin/directfb-csource
/bin/sh ../libtool --mode=install /usr/bin/install -c dfbg
/var/tmp/directfb-0.9.17/usr/bin/dfbg
(cd /usr/src/RPM/BUILD/DirectFB-0.9.17/tools; { test -z "${LIBRARY_PATH+set}" || unset
LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z
"${COMPILER_PATH+set}" || unset COMPILER_PATH || { COMPILER_PATH=; export
COMPILER_PATH; }; }; { test -z "${GCC_EXEC_PREFIX+set}" || unset GCC_EXEC_PREFIX || {
GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z "${LD_RUN_PATH+set}" ||
unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z
"${LD_LIBRARY_PATH+set}" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export
LD_LIBRARY_PATH; }; };
PATH="/home/brian/bin:/bin:/usr/bin:/usr/bin/X11:/usr/local/bin"; export PATH;
i586-mandrake-linux-gnu-gcc -D_REENTRANT -O3 -fomit-frame-pointer -pipe
-mcpu=pentiumpro -march=i586 -ffast-math -fno-strength-reduce -ffast-math -Wall -O3 -g
-o /tmp/libtool-zcZclO/dfbg dfbg.o -L/usr/lib -ldirectfb -ldl -lpthread)
/usr/bin/install -c /tmp/libtool-zcZclO/dfbg /var/tmp/directfb-0.9.17/usr/bin/dfbg
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/src/RPM/BUILD/DirectFB-0.9.17/tools'
Notice that a temporary dfbg is linked (in /tmp/libtool-zcZclO/dfbg)
against the system libdirectfb rather than the one in
../src/libdirectfb.la and that is what is installed, not the one that
was made during the build phase. But the same is not done for
directfb-source. It is installed from the binary made during the link
phase.
This is obviously a "tool" problem. For some reason, libtool is
deciding that dfbg needs to be relinked while it's installing it. And
the reason, I surmise, is because with dfbg, libtool knows it's being
told to link with a library that's in the source tree being built. When
that is done, rather than building the binary in place, the binary is
built in .libs and a shell wrapper is placed where the binary should go
that knows how to set the library path and execute the binary in .libs
so that it runs with the source tree provided library.
This all seems somewhat fragile. It only works if the new
libdirectfb.so is installed before dfbg (or any other dependencies on
it). This of course, does not happen when building an RPM, as
everything is installed into a temporary destination directory. Libtool
would have to be told somehow that the default library path is
(something like) $DESTDIR/lib:$DESTDIR/usr/lib:/lib:/usr/lib.
~sigh~ So I understand the problem, just not what the right solution
is. Due to time contraints, I think I will have to shove this onto the
back burner and come back to it.
b.
--
Brian J. Murrell
msg01383/pgp00000.pgp
Description: PGP signature
