Package: unison
Version: 2.32.52-3
Severity: important
Tags: patch
User: [email protected]
Usertags: origin-ubuntu ubuntu-patch oneiric

unison fails to build with a linker that defaults to --as-needed:

  Linking unison
  ocamlopt -verbose -I lwt -I ubase -o unison   unix.cmxa str.cmxa 
bigarray.cmxa -cclib -lutil ubase/projectInfo.cmx ubase/myMap.cmx 
ubase/safelist.cmx ubase/uprintf.cmx ubase/util.cmx ubase/rx.cmx ubase/uarg.cmx 
ubase/prefs.cmx ubase/trace.cmx lwt/pqueue.cmx lwt/lwt.cmx lwt/lwt_util.cmx 
lwt/lwt_unix.cmx bytearray.cmx case.cmx pred.cmx uutil.cmx fileutil.cmx 
name.cmx path.cmx fspath.cmx fingerprint.cmx abort.cmx osx.cmx external.cmx 
props.cmx fileinfo.cmx os.cmx lock.cmx clroot.cmx common.cmx tree.cmx 
checksum.cmx terminal.cmx transfer.cmx xferhint.cmx remote.cmx globals.cmx 
copy.cmx stasher.cmx update.cmx files.cmx sortri.cmx recon.cmx transport.cmx 
strings.cmx uicommon.cmx uitext.cmx test.cmx main.cmx linktext.cmx osxsupport.o 
pty.o bytearray_stubs.o
  + as -o '/tmp/camlstartup999a84.o' '/tmp/camlstartup832abc.s'
  + gcc -o 'unison'   '-Llwt' '-Lubase' '-L/usr/lib/ocaml'  
'/tmp/camlstartup999a84.o' '/usr/lib/ocaml/std_exit.o' 'linktext.o' 'main.o' 
'test.o' 'uitext.o' 'uicommon.o' 'strings.o' 'transport.o' 'recon.o' 'sortri.o' 
'files.o' 'update.o' 'stasher.o' 'copy.o' 'globals.o' 'remote.o' 'xferhint.o' 
'transfer.o' 'terminal.o' 'checksum.o' 'tree.o' 'common.o' 'clroot.o' 'lock.o' 
'os.o' 'fileinfo.o' 'props.o' 'external.o' 'osx.o' 'abort.o' 'fingerprint.o' 
'fspath.o' 'path.o' 'name.o' 'fileutil.o' 'uutil.o' 'pred.o' 'case.o' 
'bytearray.o' 'lwt/lwt_unix.o' 'lwt/lwt_util.o' 'lwt/lwt.o' 'lwt/pqueue.o' 
'ubase/trace.o' 'ubase/prefs.o' 'ubase/uarg.o' 'ubase/rx.o' 'ubase/util.o' 
'ubase/uprintf.o' 'ubase/safelist.o' 'ubase/myMap.o' 'ubase/projectInfo.o' 
'/usr/lib/ocaml/bigarray.a' '/usr/lib/ocaml/str.a' '/usr/lib/ocaml/unix.a' 
'/usr/lib/ocaml/stdlib.a' '-lbigarray' '-lcamlstr' '-lunix' '-lutil' 
'osxsupport.o' 'pty.o' 'bytearray_stubs.o' '/usr/lib/ocaml/libasmrun.a' -lm  
-ldl
  pty.o: In function `c_openpty':
  pty.c:(.text+0x74): undefined reference to `openpty'
  collect2: ld returned 1 exit status
  File "caml_startup", line 1, characters 0-1:
  Error: Error during linking
  make[1]: *** [unison] Error 2

This is because its link line order is wrong, putting 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 C objects before the libraries they require.

diff -Nru unison-2.32.52/debian/patches/link-order.patch 
unison-2.32.52/debian/patches/link-order.patch
--- unison-2.32.52/debian/patches/link-order.patch      1970-01-01 
01:00:00.000000000 +0100
+++ unison-2.32.52/debian/patches/link-order.patch      2011-09-10 
12:17:34.000000000 +0100
@@ -0,0 +1,18 @@
+Description: Fix link order to list C objects before the libraries they require
+Author: Colin Watson <[email protected]>
+Forwarded: no
+Last-Update: 2011-09-10
+
+Index: b/Makefile.OCaml
+===================================================================
+--- a/Makefile.OCaml
++++ b/Makefile.OCaml
+@@ -366,7 +366,7 @@
+ 
+ $(NAME)$(EXEC_EXT): $(CAMLOBJS) $(COBJS)
+       @echo Linking $@
+-      $(CAMLC) -verbose $(CAMLFLAGS) -o $@ $(CFLAGS) $(CAMLLIBS) $(CLIBS) $^
++      $(CAMLC) -verbose $(CAMLFLAGS) -o $@ $(CFLAGS) $(CAMLLIBS) $^ $(CLIBS)
+ 
+ # Unfortunately -output-obj does not put .o files into the output, only .cmx
+ # files, so we have to use $(LD) to take care of COBJS.
diff -Nru unison-2.32.52/debian/patches/series 
unison-2.32.52/debian/patches/series
--- unison-2.32.52/debian/patches/series        2011-04-03 12:21:58.000000000 
+0100
+++ unison-2.32.52/debian/patches/series        2011-09-10 12:09:12.000000000 
+0100
@@ -5,3 +5,4 @@
 0005-Fix-build-with-OCaml-3.12.patch
 0006-Fix-bad-interaction-with-OpenSSH-5.6.patch
 debian-changes-2.32.52-3
+link-order.patch

Thanks,

-- 
Colin Watson                                       [[email protected]]



-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to