From 1c2d1459e9e4a652118ca666e27757b3193e0e3b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 12 Feb 2004 18:10:33 +0000 Subject: [PATCH] hopefully fixed strings.h mess completely now by not including it unless really needed (should fix bug 689456) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25772 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- configure | 289 ++++++++++++++++++++------------------------ configure.in | 54 ++++++--- include/wx/string.h | 34 +++--- setup.h.in | 9 +- setup.h_vms | 9 +- 5 files changed, 199 insertions(+), 196 deletions(-) diff --git a/configure b/configure index 86f184bd03..1c487f78a3 100755 --- a/configure +++ b/configure @@ -12009,24 +12009,145 @@ echo "${ECHO_T}$wx_cv_gcc3" >&6 esac -if test "$wxUSE_MAC" = 1 -o "$wxUSE_COCOA" = 1; then - echo "$as_me:$LINENO: checking for strings.h" >&5 -echo $ECHO_N "checking for strings.h... $ECHO_C" >&6 -if test "${ac_cv_header_strings_h+set}" = set; then + + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + +echo "$as_me:$LINENO: checking for strcasecmp() in string.h" >&5 +echo $ECHO_N "checking for strcasecmp() in string.h... $ECHO_C" >&6 +if test "${ac_cv_string_strcasecmp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_strings_h=no + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + +int +main () +{ + + strcasecmp("foo", "bar"); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_string_strcasecmp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_string_strcasecmp=no + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: $ac_cv_header_strings_h" >&5 -echo "${ECHO_T}$ac_cv_header_strings_h" >&6 - if test "$ac_cv_header_strings_h" = "no"; then - echo "$as_me:$LINENO: result: forced no into cache" >&5 -echo "${ECHO_T}forced no into cache" >&6 +echo "$as_me:$LINENO: result: $ac_cv_string_strcasecmp" >&5 +echo "${ECHO_T}$ac_cv_string_strcasecmp" >&6 + +if test x"$ac_cv_string_strcasecmp" = "xyes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRCASECMP_IN_STRING_H 1 +_ACEOF + +else + echo "$as_me:$LINENO: checking for strcasecmp() in strings.h" >&5 +echo $ECHO_N "checking for strcasecmp() in strings.h... $ECHO_C" >&6 +if test "${ac_cv_strings_strcasecmp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + +int +main () +{ + + strcasecmp("foo", "bar"); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_strings_strcasecmp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_strings_strcasecmp=no + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_strings_strcasecmp" >&5 +echo "${ECHO_T}$ac_cv_strings_strcasecmp" >&6 + + if test x"$ac_cv_string_strcasecmp" = "xyes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRCASECMP_IN_STRINGS_H 1 +_ACEOF + else - { echo "$as_me:$LINENO: WARNING: strings.h is not compatible with Mac OS X" >&5 -echo "$as_me: WARNING: strings.h is not compatible with Mac OS X" >&2;} + { { echo "$as_me:$LINENO: error: No case-insensitive string comparison function found." >&5 +echo "$as_me: error: No case-insensitive string comparison function found." >&2;} + { (exit 1); exit 1; }; } fi fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then @@ -12251,149 +12372,6 @@ done -for ac_header in strings.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc in - yes:no ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------ ## -## Report this to bug-autoconf@gnu.org. ## -## ------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; - no:yes ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------ ## -## Report this to bug-autoconf@gnu.org. ## -## ------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -17492,7 +17470,6 @@ _ACEOF fi - ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' diff --git a/configure.in b/configure.in index 8e4814ced7..9066650376 100644 --- a/configure.in +++ b/configure.in @@ -1509,27 +1509,45 @@ dnl ------------------------------------------------------------------------ dnl Check for headers dnl ------------------------------------------------------------------------ -dnl test for strings.h needed under AIX, but do not check for it wxMac as -dnl it exists but is only a simple redirection to string.h and it is in -dnl conflict with Strings.h in FlatCarbon headers -dnl -dnl Autoconf 2.5 tends to check for strings.h on its own, so avoiding the -dnl test (as the current configure script does) is not possible. Instead, -dnl you must remind autoconf that strings.h is NOT valid. The autoconf -dnl test succeeds because there is a strings.h file that simply includes -dnl string.h. Unfortunately, there is also a strings.h as part of the -dnl FlatCarbon headers. -- David Elliott -if test "$wxUSE_MAC" = 1 -o "$wxUSE_COCOA" = 1; then - AC_CACHE_CHECK([for strings.h], ac_cv_header_strings_h, - [ac_cv_header_strings_h=no]) - if test "$ac_cv_header_strings_h" = "no"; then - AC_MSG_RESULT([forced no into cache]) +dnl look for strcasecmp() in string.h and then strings.h if it's not there +AC_LANG_SAVE +AC_LANG_CPLUSPLUS + +AC_CACHE_CHECK([for strcasecmp() in string.h], ac_cv_string_strcasecmp, [ + AC_TRY_LINK([ + #include + ], + [ + strcasecmp("foo", "bar"); + ], + ac_cv_string_strcasecmp=yes, + ac_cv_string_strcasecmp=no + ) +]) + +if test x"$ac_cv_string_strcasecmp" = "xyes"; then + AC_DEFINE(HAVE_STRCASECMP_IN_STRING_H) +else + AC_CACHE_CHECK([for strcasecmp() in strings.h], ac_cv_strings_strcasecmp, [ + AC_TRY_LINK([ + #include + ], + [ + strcasecmp("foo", "bar"); + ], + ac_cv_strings_strcasecmp=yes, + ac_cv_strings_strcasecmp=no + ) + ]) + + if test x"$ac_cv_string_strcasecmp" = "xyes"; then + AC_DEFINE(HAVE_STRCASECMP_IN_STRINGS_H) else - AC_MSG_WARN([strings.h is not compatible with Mac OS X]) + AC_MSG_ERROR([No case-insensitive string comparison function found.]) fi fi -dnl defines HAVE_STRINGS_H -AC_CHECK_HEADERS(strings.h) + +AC_LANG_RESTORE dnl defines HAVE_STDLIB_H AC_CHECK_HEADERS(stdlib.h) diff --git a/include/wx/string.h b/include/wx/string.h index dc0d6497dd..bb5144d47b 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: string.h +// Name: wx/string.h // Purpose: wxString and wxArrayString classes // Author: Vadim Zeitlin // Modified by: @@ -47,9 +47,9 @@ # include #endif -#ifdef HAVE_STRINGS_H +#ifdef HAVE_STRCASECMP_IN_STRINGS_H #include // for strcasecmp() -#endif // HAVE_STRINGS_H +#endif // HAVE_STRCASECMP_IN_STRINGS_H #include "wx/wxchar.h" // for wxChar #include "wx/buffer.h" // for wxCharBuffer @@ -134,7 +134,9 @@ inline int Stricmp(const char *psz1, const char *psz2) return stricmp(psz1, psz2); #elif defined(__WXPM__) return stricmp(psz1, psz2); -#elif defined(__UNIX__) || defined(__GNUWIN32__) +#elif defined(HAVE_STRCASECMP_IN_STRING_H) || \ + defined(HAVE_STRCASECMP_IN_STRINGS_H) || \ + defined(__GNUWIN32__) return strcasecmp(psz1, psz2); #elif defined(__MWERKS__) && !defined(__INTEL__) register char c1, c2; @@ -216,7 +218,7 @@ struct WXDLLIMPEXP_BASE wxStringData // VC++ will refuse to inline Unlock but profiling shows that it is wrong #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - __forceinline + __forceinline #endif // VC++ free must take place in same DLL as allocation when using non dll // run-time library (e.g. Multithreaded instead of Multithreaded DLL) @@ -331,21 +333,21 @@ public: wxStringBase(const void *pStart, const void *pEnd); // dtor is not virtual, this class must not be inherited from! - ~wxStringBase() - { + ~wxStringBase() + { #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //RN - according to the above VC++ does indeed inline this, - //even though it spits out two warnings - #pragma warning (disable:4714) + //RN - according to the above VC++ does indeed inline this, + //even though it spits out two warnings + #pragma warning (disable:4714) #endif - GetStringData()->Unlock(); + GetStringData()->Unlock(); } #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //re-enable inlining warning - #pragma warning (default:4714) -#endif + //re-enable inlining warning + #pragma warning (default:4714) +#endif // overloaded assignment // from another wxString wxStringBase& operator=(const wxStringBase& stringSrc); @@ -452,7 +454,7 @@ public: wxStringBase& insert(size_t nPos, size_t n, wxChar ch) { return insert(nPos, wxStringBase(n, ch)); } iterator insert(iterator it, wxChar ch) - { size_t idx = it - begin(); insert(idx, 1, ch); return begin() + idx; } + { size_t idx = it - begin(); insert(idx, 1, ch); return begin() + idx; } void insert(iterator it, const_iterator first, const_iterator last) { insert(it - begin(), first, last - first); } void insert(iterator it, size_type n, wxChar ch) @@ -1222,7 +1224,7 @@ public: wxString& insert(size_t nPos, size_t n, wxChar ch) { return (wxString&)wxStringBase::insert(nPos, n, ch); } iterator insert(iterator it, wxChar ch) - { return wxStringBase::insert(it, ch); } + { return wxStringBase::insert(it, ch); } void insert(iterator it, const_iterator first, const_iterator last) { wxStringBase::insert(it, first, last); } void insert(iterator it, size_type n, wxChar ch) diff --git a/setup.h.in b/setup.h.in index a2e57b1fbd..fb78a521b1 100644 --- a/setup.h.in +++ b/setup.h.in @@ -1151,9 +1151,6 @@ /* Define if you have the header file. */ #undef HAVE_SCHED_H -/* Define if you have the header file. */ -#undef HAVE_STRINGS_H - /* Define if you have the header file. */ #undef HAVE_UNISTD_H @@ -1196,6 +1193,12 @@ /* Define this if you have fputws() and putwc() */ #undef HAVE_FPUTWC +/* Define this if you have strcasecmp() function in */ +#undef HAVE_STRCASECMP_IN_STRING_H + +/* Define this if you have strcasecmp() function in */ +#undef HAVE_STRCASECMP_IN_STRINGS_H + /* Define this if you have wprintf() and related functions */ #undef HAVE_WPRINTF diff --git a/setup.h_vms b/setup.h_vms index 04b4205ebc..e533df83e8 100644 --- a/setup.h_vms +++ b/setup.h_vms @@ -1174,9 +1174,6 @@ /* Define if you have the header file. */ #undef HAVE_SCHED_H -/* Define if you have the header file. */ -#define HAVE_STRINGS_H 1 - /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 @@ -1216,6 +1213,12 @@ /* Define this if you have fputws() and putwc() */ #define HAVE_FPUTWC 1 +/* Define this if you have strcasecmp() function in */ +#define HAVE_STRCASECMP_IN_STRING_H 1 + +/* Define this if you have strcasecmp() function in */ +#undef HAVE_STRCASECMP_IN_STRINGS_H + /* Define this if you have wprintf() and related functions */ #define HAVE_WPRINTF 1 -- 2.47.2