couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject svn commit: r1169921 - /couchdb/branches/1.1.x/
Date Mon, 12 Sep 2011 20:54:32 GMT
Author: randall
Date: Mon Sep 12 20:54:32 2011
New Revision: 1169921

Insane libtool hackery for windows (COUCHDB-1197)

Patch by Dave Cottlehuber

Backport of r1169920


Modified: couchdb/branches/1.1.x/
--- couchdb/branches/1.1.x/ (original)
+++ couchdb/branches/1.1.x/ Mon Sep 12 20:54:32 2011
@@ -424,19 +424,29 @@ AC_CONFIG_FILES([var/Makefile])
-# *sob* - on Windows libtool fails as 'libname_spec' isn't correct (it
-# expects GNU style lib names).  I can't work out how to configure this
-# option sanely, so we pass the script through sed to modify it.
-# Also, the erlang script doesn't cope well with the '-link' command
-# line option libtool provides.
-# PLEASE, someone help put this out of its misery!!
-# This hackery is being tracked via COUCHDB-440.
+# Windows Erlang build tools wrap Microsoft's linker and compiler just enough
+# to be able to build Erlang/OTP successfully, but not enough for full
+# compatibility with GNU AutoTools. The MS VC compiler and linker are
+# hidden from autotools in Erlang's and wrappers. GNU autoconf
+# identifies this dastardly mix as a unix variant, and libtool kindly
+# passes incorrect flags and names through to the MS linker. The simplest fix
+# is to modify libtool via sed to remove those options.
+# As this is only done once at first configure, and subsequent config or source
+# changes may trigger a silent reversion to the non-functioning original.
+# Changes are;
+# 1. replace LIB$name with $name in libname_spec (e.g. libicu -> icu) to ensure
+#    correct windows versions of .lib and .dlls are found or generated.
+# 2. remove incompatible \w-link\w from archive_cmds
+# 3. remove GNU-style directives to be passed through to the linker
+# 4. swap GNU-style shared library flags with MS -dll variant
+# This obscene hackery is tracked under COUCHDB-440 and COUCHDB-1197.
 if test x${IS_WINDOWS} = xTRUE; then
     mv libtool libtool.dist
-    sed -E -e 's,libname_spec="lib\\$name",libname_spec="\\\$name",' \
-        -e 's,-link,,' \
-        -e 's/-Xlinker --out-implib -Xlinker \\\$lib//' \
-        -e 's/(-shared -nostdlib)/-dll \1/' \
+    /bin/sed -E -e 's,^libname_spec="lib,libname_spec=",' \
+        -e 's,( -link ), ,' \
+        -e 's,-Xlinker --out-implib -Xlinker \\\$lib,,' \
+        -e 's,(-shared -nostdlib), -dll ,' \
         < libtool.dist > libtool
     # probably would chmod +x if we weren't on windows...

View raw message