1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>
Autoconf Macro: ax_dll_string
</title>
<link rel="stylesheet" type="text/css" href="autoconf-archive.css">
</head>
<body>
<table summary="web navigation" style="width:100%;">
<tbody>
<tr>
<td style="width:25%;" align="center" valign="top">
<a href="http://autoconf-archive.cryp.to/ax_dll_string.m4">Download M4
Source</a>
</td>
<td style="width:25%;" align="center" valign="top">
<a href=
"http://git.cryp.to/?p=autoconf-archive;a=history;f=ax_dll_string.m4">Macro
History</a>
</td>
<td style="width:25%;" align="center" valign="top">
<a href="macros-by-category.html">Category Index</a>
</td>
<td style="width:25%;" align="center" valign="top">
<form method="get" action="http://www.google.com/search">
<div>
<input name="sitesearch" value="autoconf-archive.cryp.to" type=
"hidden"><a href="http://www.google.com/">Search</a>: <input name="q"
size="10" maxlength="255" type="text">
</div>
</form>
</td>
</tr>
</tbody>
</table>
<hr>
<h1>
ax_dll_string
</h1>
<h2>
Synopsis
</h2>
<p class="indent" style="white-space:nowrap;">
<code>AX_DLL_STRING</code>
</p>
<h2>
Description
</h2>
<div class="indent">
<p>
Tests for a bug currently in g++ 3.4.4 on Cygwin (maybe other targets with
statically linked libstdc++?) where passing an empty std::string to a dll
will cause a crash on destruction due to incorrect memory handling. See bug
24196 in gcc's bugzilla for more details: <a href=
"http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24196">http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24196</a>
</p>
</div>
<h2>
Author
</h2>
<p class="indent">
Steven Brown <swbrown@variadic.org>
</p>
<h2>
Last Modified
</h2>
<p class="indent">
2006-04-08
</p>
<h2>
M4 Source Code
</h2>
<div class="indent">
<pre class="m4source">
dnl Plan: compile conftest-dll.cc, conftest-exe.cc. It has a 'crash' param
dnl that can be passed. Verify the compile worked and we can run it normally
dnl ok. Then, pass 'crash', test if it crashed, fail.
AC_DEFUN([AX_DLL_STRING],
[
AC_MSG_CHECKING(if the dll string test can be compiled)
cat << EOF > conftest-dll.cc
[
#include <string>
using namespace std;
void testit(std::string (*contentGet)()) {
contentGet();
}
]
EOF
cat << EOF > conftest-exe.cc
[
#include <string>
#include <cstring>
using namespace std;
extern void testit(std::string (*contentGet)());
std::string contentGet() {
return string(""); // Anything other than empty string works.
}
int main(int argc, char *argv[]) {
if(argc == 2 && strcmp(argv[1], "crash") == 0) {
testit(&contentGet);
}
return 0;
}
]
EOF
$CXX -shared $CFLAGS $CPPFLAGS conftest-dll.cc -o conftest-dll.dll >&AS_MESSAGE_LOG_FD && $CXX $CFLAGS $CPPFLAGS conftest-exe.cc conftest-dll.dll -o conftest-exe.exe >& AS_MESSAGE_LOG_FD
if test x"$?" = x"0"; then
AC_MSG_RESULT(yes)
dnl Make sure it runs normally first.
AC_MSG_CHECKING(if the dll string test is usable)
if /bin/sh -c "(LD_LIBRARY_PATH=\"$PWD\" ./conftest-exe.exe)" >& AS_MESSAGE_LOG_FD 2>&1; then
AC_MSG_RESULT(yes)
dnl Now we can check for the bug.
AC_MSG_CHECKING(if the dll string test is affected by gcc bug 24196)
if ! /bin/sh -c "(LD_LIBRARY_PATH=\"$PWD\" ./conftest-exe.exe crash)" >& AS_MESSAGE_LOG_FD 2>&1; then
AC_MSG_RESULT(yes)
dnl We have the bug, user'll need to fix it.
AC_MSG_ERROR([*** This toolchain is affected by gcc bug 24196. For Cygwin as of 4/8/2006, you can downgrade to gcc/g++ 3.3.3 or check if there is a newer compiler available that's fixed.])
else
AC_MSG_RESULT(no)
fi
else
AC_MSG_RESULT(no)
fi
else
AC_MSG_RESULT(no)
fi
])
</pre>
</div>
<h2>
License
</h2>
<div class="indent">
<span style="white-space:nowrap;">Copyright © 2006 Steven Brown
<swbrown@variadic.org></span>
<p>
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty provided the copyright notice and
this notice are preserved.
</p>
</div>
</body>
</html>
|