On Tuesday 13 February 2007 13:33:58 Ralf Wildenhues wrote:
> * Christian Parpart wrote on Tue, Feb 13, 2007 at 11:59:35AM CET:
> > I want to override some functions located in libGL.so and libX11.so, in
> > order to capture movies from (any) OpenGL application.
> >
> > There are now several ways to achieve this, but none of them seems to be
> > userfriendly *and* ideal (system/platform independant).
>
> The question is how portable you want to be.  Only Gentoo?  Only
> GNU/Linux?  Only ELF systems?  Only GNU binutils ld?  Or also, say, w32,
> or AIX non-runtimelinking, or otherwise native non-GNU linker?
> Can we assume the libGL and libX11 all come from X.org?
> Is using a wrapper shell script acceptable for you?
> Is patching a binary (a la objcopy) acceptable for you?>

I found a solution to this problem I'd like to share here 
(see attachemed Makefile.am).
However, this way I had to modify the system libGL/libX11 
files by stripping away their DT_SONAME. I did not manage 
how to do so, but I at least found a way to rename this entry.

With this build system, the user is expected to have the $(libdir) in 
LD_LIBRARY_PATH (or /etc/ld.so.conf), which is much better than 
enforcing him to use LD_PRELOAD_LIBRARY because now the lib is only 
loaded when the client app is linked against libGL and/or libX11.

However, I do not know how portable this is ;)

Christian.
AM_CXXFLAGS = -ansi -pedantic -Wall @CAPTURY_CFLAGS@ -DVERSION="\"@[EMAIL PROTECTED]""
AM_CFLAGS = -std=c99 -Wall

STRIP_SONAME = $(top_builddir)/src/libGLcaptury/strip-soname

# FIXME libGLnative.so and libX11native.so are always rebuilt - why?

NATIVE_LIBGL = /usr/lib/libGL.so
NATIVE_LIBX11 = /usr/lib/libX11.so

# ---------------------------------------------------------------------------
noinst_PROGRAMS = strip-soname

strip_soname_SOURCES = strip-soname.c
strip_soname_LDFLAGS = -lelf

# ---------------------------------------------------------------------------
libGL.so: libGL.so.1
	ln -sf $< $@

libGL.so.1: libGLnative.so
	ln -sf libGLcaptury.so $@

libGLnative.so: $(NATIVE_LIBGL) strip-soname
	cp -p $< $@
	$(STRIP_SONAME) $@

# ---------------------------------------------------------------------------
libX11.so: libX11.so.6
	ln -sf $< $@

libX11.so.6: libGLnative.so
	ln -sf libGLcaptury.so $@

libX11native.so: $(NATIVE_LIBX11) strip-soname
	cp -p $< $@
	$(STRIP_SONAME) $@

# ---------------------------------------------------------------------------
libGLcaptury.so: libGLcaptury.cpp libGLnative.so libX11native.so
	$(CXX) -shared -fPIC $(AM_CXXFLAGS) $(CXXFLAGS) -o $@ $< $(CAPTURY_LIBS) -L. -lGLnative -lX11native

# ---------------------------------------------------------------------------
all-local: libGLcaptury.so libGL.so libX11.so

clean-local:
	rm -f libGLcaptury.so
	rm -f libGLnative.so libGL.so.1 libGL.so libG_.so.1
	rm -f libX11native.so libX11.so.6 libX11.so libX1_.so.6
	rm -f strip-soname

# ---------------------------------------------------------------------------
install-exec-local: install-libGLnative install-libX11native install-libGLcaptury

install-libGLnative:
	$(INSTALL) -m 0755 libGLnative.so $(DESTDIR)$(libdir)/
	ln -sf libGL.so.1 $(DESTDIR)$(libdir)/libGL.so
	ln -sf libGLcaptury.so $(DESTDIR)$(libdir)/libGL.so.1

install-libX11native:
	$(INSTALL) -m 0755 libX11native.so $(DESTDIR)$(libdir)/
	ln -sf libX11.so.6 $(DESTDIR)$(libdir)/libX11.so
	ln -sf libGLcaptury.so $(DESTDIR)$(libdir)/libX11.so.6

install-libGLcaptury:
	$(INSTALL) -m 0755 libGLcaptury.so $(DESTDIR)$(libdir)/

# ---------------------------------------------------------------------------
uninstall-local: uninstall-libGLnative uninstall-libX11native uninstall-libGLcaptury

uninstall-libGLnative:
	rm -f $(DESTDIR)$(libdir)/libGL.so
	rm -f $(DESTDIR)$(libdir)/libGL.so.1
	rm -f $(DESTDIR)$(libdir)/libGLnative.so

uninstall-libX11native:
	rm -f $(DESTDIR)$(libdir)/libX11.so
	rm -f $(DESTDIR)$(libdir)/libX11.so.6
	rm -f $(DESTDIR)$(libdir)/libX11native.so

uninstall-libGLcaptury:
	rm -f $(DESTDIR)$(libdir)/libGLcaptury.so

# vim:ai:noet:ts=4:nowrap

Attachment: pgpWpT0hnPJLE.pgp
Description: PGP signature

Reply via email to