61 lines
2.4 KiB
Plaintext
61 lines
2.4 KiB
Plaintext
$NetBSD: patch-libraries_base_configure.ac,v 1.2 2015/02/16 07:04:58 pho Exp $
|
|
|
|
Upstream Trac #10093:
|
|
https://ghc.haskell.org/trac/ghc/ticket/10093
|
|
|
|
Do not clobber CPPFLAGS nor LDFLAGS:
|
|
|
|
When we are using pkgsrc converters/libiconv, we have libiconv.so in
|
|
${PREFIX}/lib and "-Wl,-R${PREFIX}/lib" in LDFLAGS. In this case
|
|
FP_SEARCH_LIBS_PROTO(iconv) appends "-liconv" to $LIBS so it will be
|
|
linked to any conftest executables that follow, including one which
|
|
will be generated by AC_CHECK_SIZEOF().
|
|
|
|
The problem is that if libraries listed in $LIBS are in a non-standard
|
|
path while rpath flags are missing (due to LDFLAGS being clobbered in
|
|
this case), conftest executables cannot run even if they can be
|
|
linked. And if anything goes wrong during AC_CHECK_SIZEOF(T), it
|
|
considers sizeof(T) as 0 unless T is known to be an existing type:
|
|
|
|
...
|
|
checking for library containing iconv... -liconv
|
|
checking for library containing locale_charset... none required
|
|
checking size of struct MD5Context... 0
|
|
...
|
|
|
|
This means SIZEOF_STRUCT_MD5CONTEXT gets defined to 0,
|
|
GHC.Fingerprint.fingerprintData allocates 0 bytes on the heap,
|
|
MD5Init/Update/Final corrupts the heap and then Bad Things will
|
|
happen.
|
|
|
|
--- libraries/base/configure.ac.orig 2013-04-18 21:30:14.000000000 +0000
|
|
+++ libraries/base/configure.ac
|
|
@@ -70,13 +70,13 @@ dnl-------------------------------------
|
|
AC_ARG_WITH([iconv-includes],
|
|
[AC_HELP_STRING([--with-iconv-includes],
|
|
[directory containing iconv.h])],
|
|
- [ICONV_INCLUDE_DIRS=$withval; CPPFLAGS="-I$withval"],
|
|
+ [ICONV_INCLUDE_DIRS=$withval; CPPFLAGS="-I$withval $CPPFLAGS"],
|
|
[ICONV_INCLUDE_DIRS=])
|
|
|
|
AC_ARG_WITH([iconv-libraries],
|
|
[AC_HELP_STRING([--with-iconv-libraries],
|
|
[directory containing iconv library])],
|
|
- [ICONV_LIB_DIRS=$withval; LDFLAGS="-L$withval"],
|
|
+ [ICONV_LIB_DIRS=$withval; LDFLAGS="-L$withval $LDFLAGS"],
|
|
[ICONV_LIB_DIRS=])
|
|
|
|
AC_SUBST(ICONV_INCLUDE_DIRS)
|
|
@@ -183,7 +183,10 @@ fi
|
|
|
|
# Hack - md5.h needs HsFFI.h. Is there a better way to do this?
|
|
CFLAGS="-I../../includes $CFLAGS"
|
|
-AC_CHECK_SIZEOF([struct MD5Context], ,[#include "include/md5.h"])
|
|
+dnl Calling AC_CHECK_TYPE(T) makes AC_CHECK_SIZEOF(T) abort on failure
|
|
+dnl instead of considering sizeof(T) as 0.
|
|
+AC_CHECK_TYPE([struct MD5Context], [], [], [#include "include/md5.h"])
|
|
+AC_CHECK_SIZEOF([struct MD5Context], [], [#include "include/md5.h"])
|
|
|
|
AC_SUBST(EXTRA_LIBS)
|
|
AC_CONFIG_FILES([base.buildinfo])
|