From fb94d04c2dd4a9b39f1e961d4509bf07b07834ef Mon Sep 17 00:00:00 2001 From: Randall Leeds Date: Mon, 12 Sep 2011 20:54:32 +0000 Subject: Insane libtool hackery for windows (COUCHDB-1197) Patch by Dave Cottlehuber Backport of r1169920 git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1169921 13f79535-47bb-0310-9956-ffa450edef68 --- configure.ac | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index 5cf37635..b5f8697a 100644 --- a/configure.ac +++ b/configure.ac @@ -424,19 +424,29 @@ AC_CONFIG_FILES([var/Makefile]) AC_OUTPUT -# *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 cc.sh 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 cc.sh and ld.sh 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... fi -- cgit v1.2.3