vsnprintf() tests correction: check that declaration is const-correct; merged the Metrowerks test with the one for the other compilers
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35244 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
37
configure.in
37
configure.in
@@ -3935,7 +3935,7 @@ AC_LANG_CPLUSPLUS
|
|||||||
|
|
||||||
dnl check for vsnprintf() -- a safe version of vsprintf())
|
dnl check for vsnprintf() -- a safe version of vsprintf())
|
||||||
dnl
|
dnl
|
||||||
dnl the trouble here is that on some systems (notable HP-UX) this function is
|
dnl the trouble here is that on some systems (e.g HP-UX 10) this function is
|
||||||
dnl present in libc but not in the system headers and so AC_CHECK_FUNCS (which,
|
dnl present in libc but not in the system headers and so AC_CHECK_FUNCS (which,
|
||||||
dnl stupidly, provides a dummy function declaration inside its extension)
|
dnl stupidly, provides a dummy function declaration inside its extension)
|
||||||
dnl succeeds, even with C++ compiler, but the compilation of wxWidgets fails
|
dnl succeeds, even with C++ compiler, but the compilation of wxWidgets fails
|
||||||
@@ -3947,38 +3947,29 @@ if test "$ac_cv_func_vsnprintf" = "yes"; then
|
|||||||
dnl yes it is -- now check if it is in the headers
|
dnl yes it is -- now check if it is in the headers
|
||||||
AC_CACHE_CHECK([for vsnprintf declaration], wx_cv_func_vsnprintf_decl,
|
AC_CACHE_CHECK([for vsnprintf declaration], wx_cv_func_vsnprintf_decl,
|
||||||
[
|
[
|
||||||
|
dnl our troubles are not over: HP-UX 11 prototypes vsnprintf() as
|
||||||
|
dnl taking "char *" and not "const char *" while Metrowerks does
|
||||||
|
dnl provide a correct vsnprintf declaration but in C++ mode it's
|
||||||
|
dnl always in std namespace and so we have to bring it in scope
|
||||||
AC_TRY_COMPILE(
|
AC_TRY_COMPILE(
|
||||||
[
|
[
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#ifdef __MSL__
|
||||||
|
#if __MSL__ >= 0x6000
|
||||||
|
namespace std {}
|
||||||
|
using namespace std;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
char *buf;
|
char *buf;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
vsnprintf(buf, 10u, "%s", ap);
|
const char *fmt = "%s";
|
||||||
|
vsnprintf(buf, 10u, fmt, ap);
|
||||||
],
|
],
|
||||||
wx_cv_func_vsnprintf_decl=yes,
|
wx_cv_func_vsnprintf_decl=yes,
|
||||||
[
|
wx_cv_func_vsnprintf_decl=no
|
||||||
dnl Metrowerks does provide a vsnprintf declaration
|
|
||||||
dnl but in C++ mode it's always in std namespace.
|
|
||||||
dnl FIXME: Do we have any UNIX C++ compilers that would
|
|
||||||
dnl fail this test if using namespace std; was
|
|
||||||
dnl simply always included?
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
using namespace std;
|
|
||||||
],
|
|
||||||
[
|
|
||||||
char *buf;
|
|
||||||
va_list ap;
|
|
||||||
vsnprintf(buf, 10u, "%s", ap);
|
|
||||||
],
|
|
||||||
wx_cv_func_vsnprintf_decl=yes,
|
|
||||||
wx_cv_func_vsnprintf_decl=no
|
|
||||||
)
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user