Package: inspircd
Version: 1.1.22+dfsg-4
Severity: important
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu ubuntu-patch oneiric

inspircd fails to build with a linker that defaults to --as-needed, as
shown in this Ubuntu bug report:

  https://bugs.launchpad.net/ubuntu/+source/inspircd/+bug/770747

This is because of incorrect link ordering: it puts libraries before the
objects that use them rather than after.  See:

  http://wiki.debian.org/ToolChain/DSOLinking#Only_link_with_needed_libraries

The following patch fixes this.

  * Fix link order to list libraries after the objects that require them.

diff -u inspircd-1.1.22+dfsg/debian/patches/00list 
inspircd-1.1.22+dfsg/debian/patches/00list
--- inspircd-1.1.22+dfsg/debian/patches/00list
+++ inspircd-1.1.22+dfsg/debian/patches/00list
@@ -4,0 +5 @@
+05_link_order.dpatch
only in patch2:
unchanged:
--- inspircd-1.1.22+dfsg.orig/debian/patches/05_link_order.dpatch
+++ inspircd-1.1.22+dfsg/debian/patches/05_link_order.dpatch
@@ -0,0 +1,37 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 04_link_order.dpatch by Colin Watson <cjwat...@ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix link order to list libraries after the objects that require them.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' 
'--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' 
inspircd-1.1.22+dfsg~/configure inspircd-1.1.22+dfsg/configure
+--- inspircd-1.1.22+dfsg~/configure    2011-09-12 14:01:26.000000000 +0100
++++ inspircd-1.1.22+dfsg/configure     2011-09-12 14:02:31.000000000 +0100
+@@ -1605,7 +1605,7 @@
+ all: timer.o command_parse.o cull_list.o userprocess.o socketengine.o 
socket.o hashcomp.o channels.o mode.o xline.o inspstring.o dns.o base.o 
configreader.o inspsocket.o $cmdobjs commands.o dynamic.o users.o modules.o 
wildcard.o helperfuncs.o snomasks.o \$(MODULES) inspircd.exe
+ 
+ inspircd.exe: inspircd.cpp ../include/base.h ../include/channels.h 
../include/inspircd.h ../include/channels.h ../include/globals.h 
../include/inspircd_config.h ../include/base.h
+-      \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe \$(LDLIBS) 
channels.o mode.o xline.o inspstring.o dns.o base.o inspsocket.o configreader.o 
$cmdobjs commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o 
hashcomp.o socket.o socketengine.o userprocess.o cull_list.o command_parse.o 
timer.o snomasks.o modes/modeclasses.a \$(MODULES)
++      \$(CC) -I../include \$(FLAGS) inspircd.cpp -o inspircd.exe channels.o 
mode.o xline.o inspstring.o dns.o base.o inspsocket.o configreader.o $cmdobjs 
commands.o dynamic.o users.o modules.o wildcard.o helperfuncs.o hashcomp.o 
socket.o socketengine.o userprocess.o cull_list.o command_parse.o timer.o 
snomasks.o modes/modeclasses.a \$(MODULES) \$(LDLIBS)
+ EOM
+       }
+ 
+@@ -1750,7 +1750,7 @@
+ 
+ inspircd: inspircd.cpp ../include/base.h ../include/channels.h 
../include/inspircd.h ../include/channels.h ../include/globals.h 
../include/inspircd_config.h ../include/socket.h $cmdobjs libIRCDtimer.dylib 
libIRCDcull_list.dylib libIRCDuserprocess.dylib libIRCDsocketengine.dylib 
libIRCDsocket.dylib libIRCDhash.dylib libIRCDchannels.dylib libIRCDmode.dylib 
libIRCDxline.dylib libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib 
libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDsnomasks.dylib 
libIRCDcommands.dylib libIRCDdynamic.dylib libIRCDusers.dylib 
libIRCDmodules.dylib libIRCDwildcard.dylib libIRCDhelper.dylib 
libIRCDcommand_parse.dylib
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c inspircd.cpp
+-      \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd \$(LDLIBS) 
inspircd.o libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib 
libIRCDstring.dylib libIRCDasyncdns.dylib libIRCDbase.dylib 
libIRCDconfigreader.dylib libIRCDinspsocket.dylib libIRCDcommands.dylib 
libIRCDdynamic.dylib libIRCDusers.dylib libIRCDmodules.dylib 
libIRCDwildcard.dylib libIRCDhelper.dylib libIRCDhash.dylib libIRCDsocket.dylib 
libIRCDsocketengine.dylib libIRCDuserprocess.dylib libIRCDcull_list.dylib 
libIRCDcommand_parse.dylib libIRCDtimer.dylib libIRCDsnomasks.dylib
++      \$(CC) -pipe -dynamic -bind_at_load -L. -o inspircd inspircd.o 
libIRCDchannels.dylib libIRCDmode.dylib libIRCDxline.dylib libIRCDstring.dylib 
libIRCDasyncdns.dylib libIRCDbase.dylib libIRCDconfigreader.dylib 
libIRCDinspsocket.dylib libIRCDcommands.dylib libIRCDdynamic.dylib 
libIRCDusers.dylib libIRCDmodules.dylib libIRCDwildcard.dylib 
libIRCDhelper.dylib libIRCDhash.dylib libIRCDsocket.dylib 
libIRCDsocketengine.dylib libIRCDuserprocess.dylib libIRCDcull_list.dylib 
libIRCDcommand_parse.dylib libIRCDtimer.dylib libIRCDsnomasks.dylib \$(LDLIBS)
+ 
+ libIRCDsocketengine.dylib: $se.cpp socketengine.cpp ../include/base.h 
../include/hashcomp.h ../include/globals.h ../include/inspircd_config.h 
../include/$se.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c socketengine.cpp
+@@ -1860,7 +1860,7 @@
+ 
+ inspircd: inspircd.cpp ../include/base.h ../include/channels.h 
../include/inspircd.h ../include/channels.h ../include/globals.h 
../include/inspircd_config.h ../include/socket.h libIRCDtimer.o 
libIRCDcull_list.o libIRCDuserprocess.o libIRCDsocketengine.o libIRCDsocket.o 
libIRCDhash.o libIRCDchannels.o libIRCDmode.o libIRCDxline.o libIRCDstring.o 
libIRCDasyncdns.o libIRCDbase.o libIRCDconfigreader.o libIRCDinspsocket.o 
$cmdobjs libIRCDsnomasks.o libIRCDcommands.o libIRCDdynamic.o libIRCDusers.o 
libIRCDmodules.o libIRCDwildcard.o libIRCDhelper.o libIRCDcommand_parse.o 
socketengine.o
+       \${MAKE} -C "modes" DIRNAME="src/modes" CC="\$(CC)" \$(MAKEARGS) 
CPPFILES="\$(CPPFILES)"
+-      \$(CC) -pipe -I../include $extra $RPATH \$(FLAGS) $freebsd4libs 
-rdynamic -L. inspircd.cpp -o inspircd \$(LDLIBS) libIRCDchannels.o 
libIRCDmode.o libIRCDxline.o libIRCDstring.o libIRCDasyncdns.o libIRCDbase.o 
libIRCDconfigreader.o libIRCDinspsocket.o libIRCDcommands.o libIRCDdynamic.o 
libIRCDusers.o libIRCDmodules.o libIRCDwildcard.o libIRCDhelper.o libIRCDhash.o 
libIRCDsocket.o libIRCDsocketengine.o libIRCDuserprocess.o libIRCDcull_list.o 
libIRCDcommand_parse.o libIRCDtimer.o libIRCDsnomasks.o socketengine.o 
modes/modeclasses.a
++      \$(CC) -pipe -I../include $extra $RPATH \$(FLAGS) $freebsd4libs 
-rdynamic -L. inspircd.cpp -o inspircd libIRCDchannels.o libIRCDmode.o 
libIRCDxline.o libIRCDstring.o libIRCDasyncdns.o libIRCDbase.o 
libIRCDconfigreader.o libIRCDinspsocket.o libIRCDcommands.o libIRCDdynamic.o 
libIRCDusers.o libIRCDmodules.o libIRCDwildcard.o libIRCDhelper.o libIRCDhash.o 
libIRCDsocket.o libIRCDsocketengine.o libIRCDuserprocess.o libIRCDcull_list.o 
libIRCDcommand_parse.o libIRCDtimer.o libIRCDsnomasks.o socketengine.o 
modes/modeclasses.a \$(LDLIBS)
+ 
+ socketengine.o: $se.cpp ../include/$se.h
+       \$(CC) -pipe -I../include \$(FLAGS) -export-dynamic -c -o \$@ $se.cpp

Thanks,

-- 
Colin Watson                                       [cjwat...@ubuntu.com]



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to