]> git.saurik.com Git - wxWidgets.git/commitdiff
attempts to fix vsnprintf() detection under HP-UX
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 18 Jan 2003 02:33:13 +0000 (02:33 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 18 Jan 2003 02:33:13 +0000 (02:33 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18808 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

configure.in
include/wx/wxchar.h
setup.h.in
setup.h_vms

index de58e1d0764e5a185fa3578f29f5b99ed1987834..33d93c5d228b4f832823a8d14d54d273d6c7361a 100644 (file)
@@ -3151,11 +3151,44 @@ AC_LANG_SAVE
 AC_LANG_CPLUSPLUS
 
 dnl check for vsnprintf() -- a safe version of vsprintf())
 AC_LANG_CPLUSPLUS
 
 dnl check for vsnprintf() -- a safe version of vsprintf())
+dnl
+dnl the trouble here is that on some systems (notable HP-UX) this function is
+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 succeeds, even with C++ compiler, but the compilation of wxWindows fails
+dnl
+dnl so we first check if the function is in the library
 AC_CHECK_FUNCS(vsnprintf)
 
 AC_CHECK_FUNCS(vsnprintf)
 
+if test "$ac_cv_func_vsnprintf" = "yes"; then
+    dnl yes it is -- now check if it is in the headers
+    AC_CACHE_CHECK([for vsnprintf declaration], wx_cv_func_vsnprintf_decl,
+        [
+            AC_TRY_COMPILE(
+                [
+                    #include <stdio.h>
+                    #include <stdarg.h>
+                ],
+                [
+                    char *buf;
+                    va_list ap;
+                    vsnprintf(buf, 10u, "%s", ap);
+                ],
+                wx_cv_func_vsnprintf_decl=yes,
+                wx_cv_func_vsnprintf_decl=no
+            )
+        ]
+    )
+
+    if test "$wx_cv_func_vsnprintf_decl" = "yes"; then
+        AC_DEFINE(HAVE_VSNPRINTF_DECL)
+    fi
+fi
+
 if test "$wxUSE_UNICODE" = yes; then
     dnl also look if we have wide char IO functions
     AC_CHECK_FUNCS(fputwc wprintf vswprintf)
 if test "$wxUSE_UNICODE" = yes; then
     dnl also look if we have wide char IO functions
     AC_CHECK_FUNCS(fputwc wprintf vswprintf)
+
     dnl MinGW has a vswprintf with a different prototype, and
     dnl a _vsnwprintf with the correct prototype, but AC_CHECK_FUNCS
     dnl finds it even if it is not declared in some versions...
     dnl MinGW has a vswprintf with a different prototype, and
     dnl a _vsnwprintf with the correct prototype, but AC_CHECK_FUNCS
     dnl finds it even if it is not declared in some versions...
index 03a406d0ffc491cf4e67bd73fcbb95d818d0370b..88ea3006468a75a66ee28db28d8e830575d99e24 100644 (file)
@@ -594,6 +594,15 @@ WXDLLEXPORT bool wxOKlibc(); // for internal use
 // printf() family saga
 // ----------------------------------------------------------------------------
 
 // printf() family saga
 // ----------------------------------------------------------------------------
 
+/*
+   For some systems vsnprintf() exists in the system libraries but not in the
+   headers, so we need to declare it ourselves to be able to use it.
+ */
+#ifndef HAVE_VSNPRINTF_DECL
+    extern "C"
+    int vsnprintf(char *str, size_t size, const char *format, va_list ap);
+#endif // !HAVE_VSNPRINTF_DECL
+
 /*
    First of all, we always want to define safe snprintf() function to be used
    instead of sprintf(). Some compilers already have it (or rather vsnprintf()
 /*
    First of all, we always want to define safe snprintf() function to be used
    instead of sprintf(). Some compilers already have it (or rather vsnprintf()
index 66623007768825d066eacc4b709ae28dcbcf69b2..ab759d6ee534c47a85063cea17536b8bfb3781e7 100644 (file)
 /* Define if you have vsnprintf() */
 #undef HAVE_VSNPRINTF
 
 /* Define if you have vsnprintf() */
 #undef HAVE_VSNPRINTF
 
+/* Define if you have vsnprintf() declaration in the header */
+#undef HAVE_VSNPRINTF_DECL
+
 /* Define if you have usleep() */
 #undef HAVE_USLEEP
 
 /* Define if you have usleep() */
 #undef HAVE_USLEEP
 
index 43530a6b234f4d1e030107eeba238cc96456df77..60101dae627db3a44bff7c101c53245c2eb4d6e5 100644 (file)
 /* Define if you have vsnprintf() */
 #undef HAVE_VSNPRINTF
 
 /* Define if you have vsnprintf() */
 #undef HAVE_VSNPRINTF
 
+/* Define if you have vsnprintf() declaration in the header */
+#undef HAVE_VSNPRINTF_DECL
+
 /* Define if you have usleep() */
 #define HAVE_USLEEP 1
 
 /* Define if you have usleep() */
 #define HAVE_USLEEP 1