As a recent bug pointed out, you really only want to link libraries you
actually need because the others could export functions that you don't
want and interfere. Rather than relying a GCC only feature, this takes
the good old fashioned approach: filtering out the libraries you don't
need.

Attached is a patch which applies this filtering to the backend and has
the same results as linking with --as-needed. I basically took the
filter list of libpq and altered it as follows:

libs removed: -lnsl -lresolv
libs added: -ldl -lm

Incidently, the libs removed don't appear to be needed by anything in
any file in the source, so I wonder if they're even required.

This probably needs a bit of testing on a few different architechtures
to make sure it works. I also only apply it to the non-windows, non-aix
case since the building requirements there are different enough that
someone with such a platforn should do it.

Have a nice day,
-- 
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> tool for doing 5% of the work and then sitting around waiting for someone
> else to do the other 95% so you can sue them.
Index: src/backend/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/Makefile,v
retrieving revision 1.110
diff -u -r1.110 Makefile
--- src/backend/Makefile        27 Oct 2005 20:45:29 -0000      1.110
+++ src/backend/Makefile        27 Nov 2005 19:40:09 -0000
@@ -40,8 +40,11 @@
 ifneq ($(PORTNAME), win32)
 ifneq ($(PORTNAME), aix)
 
+# Filter out libraries we don't need
+BACKEND_LIBS=$(filter -ldes -lcom_err -lcrypto -lk5crypto -lkrb5 -lssl 
-lsocket -lintl -lcrypt -ldl -lm, $(LIBS))
+
 postgres: $(OBJS)
-       $(CC) $(CFLAGS) $(LDFLAGS) $(export_dynamic) $^ $(LIBS) -o $@
+       $(CC) $(CFLAGS) $(LDFLAGS) $(export_dynamic) $^ $(BACKEND_LIBS) -o $@
 
 endif
 endif

Attachment: pgpTPfERIO7kC.pgp
Description: PGP signature

Reply via email to