From 05636b5c890de0379407ff922c6ed5acd1a7a272 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Mon, 10 May 2010 12:13:49 +0000 Subject: [PATCH] Fix numerous VC-10 compiler warnings. Rewrite ICU configuration to use the new Boost.Build configuration logic. [SVN r61893] --- build/Jamfile.v2 | 307 ++---------------- build/has_icu_test.cpp | 26 ++ example/Jamfile.v2 | 5 +- example/grep/grep.cpp | 7 +- example/snippets/icu_example.cpp | 10 +- example/snippets/partial_regex_grep.cpp | 2 +- example/snippets/partial_regex_iterate.cpp | 2 +- example/snippets/regex_grep_example_1.cpp | 2 +- example/snippets/regex_grep_example_2.cpp | 2 +- example/snippets/regex_grep_example_3.cpp | 2 +- example/snippets/regex_iterator_example.cpp | 2 +- example/snippets/regex_merge_example.cpp | 2 +- example/snippets/regex_replace_example.cpp | 2 +- example/snippets/regex_search_example.cpp | 2 +- example/snippets/regex_split_example_2.cpp | 2 +- .../snippets/regex_token_iterator_eg_2.cpp | 2 +- include/boost/regex/icu.hpp | 8 + include/boost/regex/v4/regex_workaround.hpp | 32 +- .../regex/v4/u32regex_token_iterator.hpp | 2 +- test/Jamfile.v2 | 8 +- test/c_compiler_checks/posix_api_check.c | 4 +- test/c_compiler_checks/wide_posix_api_check.c | 8 +- test/regress/main.cpp | 5 + test/unicode/unicode_iterator_test.cpp | 16 +- 24 files changed, 147 insertions(+), 313 deletions(-) create mode 100644 build/has_icu_test.cpp diff --git a/build/Jamfile.v2 b/build/Jamfile.v2 index 01b14e26..25266119 100644 --- a/build/Jamfile.v2 +++ b/build/Jamfile.v2 @@ -3,10 +3,6 @@ # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt. -project boost/regex - : source-location ../src - ; - # # ICU configuration: # @@ -14,240 +10,35 @@ if [ modules.peek : ICU_PATH ] { ICU_PATH = [ modules.peek : ICU_PATH ] ; } - -rule check-icu-config ( ) -{ - local HAVE_ICU = [ modules.peek : HAVE_ICU ] ; - local ICU_LINK = [ modules.peek : ICU_LINK ] ; - - if ! $(gICU_CONFIG_CHECKED) - { - if $(HAVE_ICU) && ! $(ICU_PATH) - { - gHAS_ICU = true ; - gICU_CORE_LIB = icuuc ; - gICU_IN_LIB = icui18n ; - gICU_DATA_LIB = icudata ; - gICU_CONFIG_CHECKED = true ; - } - else if $(ICU_PATH) - { - dir = $(ICU_PATH) ; - - if [ GLOB $(dir)/include/unicode : utypes.h ] - { - gHAS_ICU = true ; - - # try and find ICU libraries, look for NT versions first: - if $(ICU_LINK) - { - gICU_LIBS += $(ICU_LINK) ; - } - else if [ GLOB $(dir)/lib64 : icuuc.* ] - { - gICU_CORE_LIB = icuuc ; - } - else if [ GLOB $(dir)/lib : icuuc.* ] - { - gICU_CORE_LIB = icuuc ; - } - else if [ GLOB $(dir)/lib : libicuuc.* ] - { - gICU_CORE_LIB = icuuc ; - } - else if [ GLOB $(ICU_PATH)/lib : cygicuuc*.dll ] - { - gICU_CORE_LIB = cygicuuc.dll ; - gICU_CYGWIN = true ; - } - else - { - ECHO warning: ICU shared common library not found in path. ; - ECHO hint: If the regex library fails to link then try again ; - ECHO with the environment variable ICU_LINK set to contain ; - ECHO the linker options required to link to ICU. ; - ECHO Defaulting to look for libicuuc ... ; - gICU_CORE_LIB = icuuc ; - } - - if $(ICU_LINK) - { - # nothing to do, it's already been done! - # gICU_LIBS += $(ICU_LINK) ; - } - else if [ GLOB $(dir)/lib : icuin.* ] - { - gICU_IN_LIB = icuin ; - } - else if [ GLOB $(dir)/lib : icui18n.* ] - { - gICU_IN_LIB = icui18n ; - } - else if [ GLOB $(dir)/lib64 : libicui18n.* ] - { - gICU_IN_LIB = icui18n ; - } - else if [ GLOB $(dir)/lib : libicui18n.* ] - { - gICU_IN_LIB = icui18n ; - } - else if [ GLOB $(ICU_PATH)/lib : cygicuin*.dll ] - { - gICU_IN_LIB = cygicuin.dll ; - gICU_CYGWIN = true ; - } - else - { - ECHO warning: ICU shared i18n library not found in path. ; - ECHO hint: If the regex library fails to link then try again ; - ECHO with the environment variable ICU_LINK set to contain ; - ECHO the linker options required to link to ICU. ; - ECHO Defaulting to look for libicui18n ... ; - gICU_IN_LIB = icui18n ; - } -#Added by Tommy Nordgren - libicudata muct be linked against on Mac OS X - if $(ICU_LINK) - { - # nothing to do, it's already been done! - # gICU_LIBS += $(ICU_LINK) ; - } - else if [ GLOB $(dir)/lib64 : icudt.* ] - { - gICU_DATA_LIB = icudt ; - } - else if [ GLOB $(dir)/lib : icudt.* ] - { - gICU_DATA_LIB = icudt ; - } - else if [ GLOB $(dir)/lib : libicudata.* ] - { - gICU_DATA_LIB = icudata ; - } - else if [ GLOB $(ICU_PATH)/lib : cygicudt*.dll ] - { - gICU_DATA_LIB = cygicudt.dll ; - gICU_CYGWIN = true ; - } - else - { - local os = [ modules.peek : OS ] ; - echo $(os) ; - if $(os) != "DARWIN" - { - ECHO warning: ICU shared data library not found in path. ; - ECHO hint: If the regex library fails to link then try again ; - ECHO with the environment variable ICU_LINK set to contain ; - ECHO the linker options required to link to ICU. ; - } - else - { - ECHO warning: ICU shared data library not found in path. ; - ECHO hint: If the regex library fails to link then try again ; - ECHO with the environment variable ICU_LINK set to contain ; - ECHO the linker options required to link to ICU. ; - ECHO Defaulting to look for libicudata ... ; - gICU_DATA_LIB = icudata ; - } - } -#End of addition by Tommy Nordgren - } - } - - gICU_CONFIG_CHECKED = true ; - } - - if $(gHAS_ICU) - { - message icu_config ; - message icu_config2 - : Note: Building Boost.Regex with Unicode/ICU support enabled - : " Using ICU in " $(ICU_PATH:J=" ")/include ; - return true ; - } - else - { - message icu_config - : "warning: Building Boost.Regex with the optional Unicode/ICU support disabled." - : "note: Please refer to the Boost.Regex documentation for more information" - : "note: this is a strictly optional feature." ; - - if $(ICU_PATH) - { - message icu_config2 - : warning! ICU configuration failed - : " Couldn't find utypes.h in " $(ICU_PATH:J=" ")/include/unicode ; - } - else - { - message icu_config2 ; - } - } +if [ modules.peek : ICU_LINK ] +{ + ICU_LINK = [ modules.peek : ICU_LINK ] ; } -explicit icu_config ; -explicit icu_config2 ; - -if [ check-icu-config ] +if $(ICU_LINK) { -if $(gHAS_ICU) -{ - BOOST_REGEX_ICU_OPTS = "freebsd:/usr/local/include" ; - ICU_SEARCH_OPTS = "freebsd:$(ICU_PATH)/lib" ; - BOOST_REGEX_ICU_OPTS += "BOOST_HAS_ICU=1" ; - BOOST_REGEX_ICU_OPTS += "$(gICU_LIBS)" ; - - if $(ICU_PATH) - { - # If ICU_PATH is specified on the command line, then it's - # relative to the current directory, while paths specified - # in a Jamfile are relative to that Jamfile. So, to - # avoid confusing the user if he's not running from - # libs/regex/build, explicitly root this. - ICU_PATH = [ path.native - [ path.root [ path.make $(ICU_PATH) ] [ path.pwd ] ] ] ; - if $(ICU_PATH) != "/usr" && $(ICU_PATH) != "/usr/local" - { - BOOST_REGEX_ICU_OPTS += "$(ICU_PATH)/include" ; - ICU_SEARCH_OPTS = $(ICU_PATH)/lib ; - } - } - - if $(gICU_CYGWIN) - { - if $(gICU_CORE_LIB) - { - BOOST_REGEX_ICU_OPTS += "$(gICU_CORE_LIB) ; - } - if $(gICU_IN_LIB) - { - BOOST_REGEX_ICU_OPTS += "$(gICU_IN_LIB) ; - } - } - else - { - if $(gICU_CORE_LIB) - { - lib icucore : : $(gICU_CORE_LIB) $(ICU_SEARCH_OPTS) shared ; - ICU_EXTRA_SOURCE = icucore ; - explicit icucore ; - } - if $(gICU_IN_LIB) - { - lib icuin : : $(gICU_IN_LIB) $(ICU_SEARCH_OPTS) shared ; - ICU_EXTRA_SOURCE += icuin ; - explicit icuin ; - } -#Added by Tommy Nordgren libicudata must be linked against on Mac OS X - if $(gICU_DATA_LIB) - { - lib icudata : : $(gICU_DATA_LIB) $(ICU_SEARCH_OPTS) shared ; - ICU_EXTRA_SOURCE += icudata ; - explicit icudata ; - } -#End of addition by Tommy Nordgren - } - } + ICU_OPTS = $(ICU_PATH)/include $(ICU_LINK) $(ICU_PATH)/bin BOOST_HAS_ICU=1 shared ; } +else +{ + lib icuuc : : $(ICU_PATH)/lib shared shared ; + lib icuuc : : msvc debug icuucd $(ICU_PATH)/lib shared shared ; + lib icuuc : : this_is_an_invalid_library_name ; + lib icudt : : $(ICU_PATH)/lib icudata shared shared ; + lib icudt : : $(ICU_PATH)/lib icudt msvc shared shared ; + lib icudt : : this_is_an_invalid_library_name ; + lib icuin : : $(ICU_PATH)/lib icui18n shared shared ; + lib icuin : : msvc debug icuind $(ICU_PATH)/lib shared shared ; + lib icuin : : msvc release icuin $(ICU_PATH)/lib shared shared ; + lib icuin : : this_is_an_invalid_library_name ; + + ICU_OPTS = $(ICU_PATH)/include icuuc/shared/shared icudt/shared/shared icuin/shared/shared $(ICU_PATH)/bin BOOST_HAS_ICU=1 shared ; +} + +exe has_icu : ./has_icu_test.cpp : $(ICU_OPTS) ; +explicit has_icu ; + +alias icu_options : : : : [ check-target-builds has_icu : $(ICU_OPTS) : ] ; SOURCES = c_regex_traits.cpp @@ -269,59 +60,13 @@ SOURCES = usinstances.cpp ; -lib boost_regex : ../src/$(SOURCES) $(ICU_EXTRA_SOURCE) icu_config2 icu_config +lib boost_regex : ../src/$(SOURCES) icu_options : - #static:BOOST_REGEX_NO_LIB=1 - #static:BOOST_REGEX_STATIC_LINK=1 shared:BOOST_REGEX_DYN_LINK=1 gcc-mw:static gcc-mingw:static gcc-cygwin:static - $(BOOST_REGEX_ICU_OPTS) - @force-shared-linking ; -shared-linking-warning-emitted = ; - -# The ICU is shipped as shared libraries with dynamic runtime. -# If Boost.Regex is built against static runtime, the combination -# will not work. The below rule forces shared runtime, and -# prints an explanation. -rule force-shared-linking ( properties * ) -{ - if $(gHAS_ICU) - { - if static in $(properties) - { - if ! $(shared-linking-warning-emitted) - { - shared-linking-warning-emitted = 1 ; - ECHO "warning: forcing runtime-link=shared for Boost.Regex" ; - ECHO "warning: this is required when using the ICU library" ; - } - } - return shared ; - } -} - - - -alias icu_options : $(ICU_EXTRA_SOURCE) : : : $(BOOST_REGEX_ICU_OPTS) ; -explicit icu_options ; - boost-install boost_regex ; - - - - - - - - - - - - - - diff --git a/build/has_icu_test.cpp b/build/has_icu_test.cpp new file mode 100644 index 00000000..f79880cc --- /dev/null +++ b/build/has_icu_test.cpp @@ -0,0 +1,26 @@ +/* + * + * Copyright (c) 2010 + * John Maddock + * + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#include +#include +#include +#include + +#if defined(_MSC_VER) && !defined(_DLL) +#error "Mixing ICU with a static runtime doesn't work" +#endif + +int main() +{ + UErrorCode err = U_ZERO_ERROR; + UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, "GREEK SMALL LETTER ALPHA", &err); + return err; +} \ No newline at end of file diff --git a/example/Jamfile.v2 b/example/Jamfile.v2 index 295ef904..66bf2b48 100644 --- a/example/Jamfile.v2 +++ b/example/Jamfile.v2 @@ -10,9 +10,12 @@ project # There are unidentified linker problems on these platforms: mipspro-7.4:static sun-5.9:static + msvc:all + gcc:all + gcc:-Wextra + U_USING_ICU_NAMESPACE=0 ; - rule regex-test-run ( sources + : input * : name * ) { return [ diff --git a/example/grep/grep.cpp b/example/grep/grep.cpp index c181d8fa..f2becf12 100644 --- a/example/grep/grep.cpp +++ b/example/grep/grep.cpp @@ -13,9 +13,14 @@ #include #include #include -#include #include +#ifdef BOOST_MSVC +#pragma warning(disable:4512 4244) +#endif + +#include + namespace po = boost::program_options; int after_context; diff --git a/example/snippets/icu_example.cpp b/example/snippets/icu_example.cpp index 7dbd5b84..6d1fc3be 100644 --- a/example/snippets/icu_example.cpp +++ b/example/snippets/icu_example.cpp @@ -152,9 +152,15 @@ int main() assert(file == "d.h"); // Greek text extraction with u32regex_search: - U_NAMESPACE_QUALIFIER UnicodeString text = L"Some where in \x0391\x039D\x0395\x0398\x0391 2004"; + const UChar t[] = { + 'S', 'o', 'm', 'e', ' ', 'w', 'h', 'e', 'r', 'e', ' ', 'i', 'n', 0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0 + }; + const UChar g[] = { + 0x0391, 0x039D, 0x0395, 0x0398, 0x0391, 0 + }; + U_NAMESPACE_QUALIFIER UnicodeString text = t; U_NAMESPACE_QUALIFIER UnicodeString greek = extract_greek(text); - assert(greek == L"\x0391\x039D\x0395\x0398\x0391 2004"); + assert(greek == g); // extract currency symbols with associated value, use iterator interface: std::string text2 = " $100.23 or \xC2\xA3""198.12 "; // \xC2\xA3 is the pound sign encoded in UTF-8 diff --git a/example/snippets/partial_regex_grep.cpp b/example/snippets/partial_regex_grep.cpp index c3deda56..ed8a5923 100644 --- a/example/snippets/partial_regex_grep.cpp +++ b/example/snippets/partial_regex_grep.cpp @@ -61,7 +61,7 @@ void search(std::istream& is) std::memmove(buf, next_pos, leftover); // fill the rest from the stream: is.read(buf + leftover, size); - unsigned read = is.gcount(); + std::streamsize read = is.gcount(); // check to see if we've run out of text: have_more = read == size; // reset next_pos: diff --git a/example/snippets/partial_regex_iterate.cpp b/example/snippets/partial_regex_iterate.cpp index 9ebf33d8..aee78ab6 100644 --- a/example/snippets/partial_regex_iterate.cpp +++ b/example/snippets/partial_regex_iterate.cpp @@ -51,7 +51,7 @@ void search(std::istream& is) std::memmove(buf, next_pos, leftover); // fill the rest from the stream: is.read(buf + leftover, size); - unsigned read = is.gcount(); + std::streamsize read = is.gcount(); // check to see if we've run out of text: have_more = read == size; // reset next_pos: diff --git a/example/snippets/regex_grep_example_1.cpp b/example/snippets/regex_grep_example_1.cpp index 0f0f4ede..e0f3f3e8 100644 --- a/example/snippets/regex_grep_example_1.cpp +++ b/example/snippets/regex_grep_example_1.cpp @@ -89,7 +89,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_grep_example_2.cpp b/example/snippets/regex_grep_example_2.cpp index 73b6bc2c..f012e566 100644 --- a/example/snippets/regex_grep_example_2.cpp +++ b/example/snippets/regex_grep_example_2.cpp @@ -84,7 +84,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_grep_example_3.cpp b/example/snippets/regex_grep_example_3.cpp index b20a29aa..02aaa724 100644 --- a/example/snippets/regex_grep_example_3.cpp +++ b/example/snippets/regex_grep_example_3.cpp @@ -107,7 +107,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_iterator_example.cpp b/example/snippets/regex_iterator_example.cpp index e0fab2fb..3fe1420d 100644 --- a/example/snippets/regex_iterator_example.cpp +++ b/example/snippets/regex_iterator_example.cpp @@ -72,7 +72,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_merge_example.cpp b/example/snippets/regex_merge_example.cpp index a537189d..fcc4f5f7 100644 --- a/example/snippets/regex_merge_example.cpp +++ b/example/snippets/regex_merge_example.cpp @@ -42,7 +42,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_replace_example.cpp b/example/snippets/regex_replace_example.cpp index a864d79f..3120453c 100644 --- a/example/snippets/regex_replace_example.cpp +++ b/example/snippets/regex_replace_example.cpp @@ -42,7 +42,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_search_example.cpp b/example/snippets/regex_search_example.cpp index 52a296b6..761a11b2 100644 --- a/example/snippets/regex_search_example.cpp +++ b/example/snippets/regex_search_example.cpp @@ -85,7 +85,7 @@ void load_file(std::string& s, std::istream& is) { s.erase(); if(is.bad()) return; - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_split_example_2.cpp b/example/snippets/regex_split_example_2.cpp index 7687334a..205e588c 100644 --- a/example/snippets/regex_split_example_2.cpp +++ b/example/snippets/regex_split_example_2.cpp @@ -33,7 +33,7 @@ void load_file(std::string& s, std::istream& is) // // attempt to grow string buffer to match file size, // this doesn't always work... - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/example/snippets/regex_token_iterator_eg_2.cpp b/example/snippets/regex_token_iterator_eg_2.cpp index fa6d2500..e3e43de9 100644 --- a/example/snippets/regex_token_iterator_eg_2.cpp +++ b/example/snippets/regex_token_iterator_eg_2.cpp @@ -32,7 +32,7 @@ void load_file(std::string& s, std::istream& is) // // attempt to grow string buffer to match file size, // this doesn't always work... - s.reserve(is.rdbuf()->in_avail()); + s.reserve(static_cast(is.rdbuf()->in_avail())); char c; while(is.get(c)) { diff --git a/include/boost/regex/icu.hpp b/include/boost/regex/icu.hpp index c8770c6d..e9a55c0c 100644 --- a/include/boost/regex/icu.hpp +++ b/include/boost/regex/icu.hpp @@ -27,6 +27,10 @@ #include #include +#ifdef BOOST_MSVC +#pragma warning (push) +#pragma warning (disable: 4251) +#endif namespace boost{ @@ -1015,6 +1019,10 @@ inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QU } // namespace boost. +#ifdef BOOST_MSVC +#pragma warning (pop) +#endif + #include #include diff --git a/include/boost/regex/v4/regex_workaround.hpp b/include/boost/regex/v4/regex_workaround.hpp index 06527f1a..46a8a8d3 100644 --- a/include/boost/regex/v4/regex_workaround.hpp +++ b/include/boost/regex/v4/regex_workaround.hpp @@ -149,7 +149,37 @@ namespace boost{ namespace re_detail{ { return stdext::unchecked_equal(first, last, with); } - +#elif BOOST_WORKAROUND(BOOST_MSVC, > 1500) + // + // MSVC 10 will either emit warnings or else refuse to compile + // code that makes perfectly legitimate use of std::copy, when + // the OutputIterator type is a user-defined class (apparently all user + // defined iterators are "unsafe"). What's more Microsoft have removed their + // non-standard "unchecked" versions, even though their still in the MS + // documentation!! Work around this as best we can: + // + template + inline OutputIterator copy( + InputIterator first, + InputIterator last, + OutputIterator dest + ) + { + while(first != last) + *dest++ = *first++; + return dest; + } + template + inline bool equal( + InputIterator1 first, + InputIterator1 last, + InputIterator2 with + ) + { + while(first != last) + if(*first++ != *with++) return false; + return true; + } #else using std::copy; using std::equal; diff --git a/include/boost/regex/v4/u32regex_token_iterator.hpp b/include/boost/regex/v4/u32regex_token_iterator.hpp index c47a2192..4039494d 100644 --- a/include/boost/regex/v4/u32regex_token_iterator.hpp +++ b/include/boost/regex/v4/u32regex_token_iterator.hpp @@ -292,7 +292,7 @@ template inline u32regex_token_iterator::const_iterator> make_u32regex_token_iterator(const std::basic_string& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) { typedef typename std::basic_string::const_iterator iter_type; - return u32regex_token_iterator(p.begin(), p.end(), e, m); + return u32regex_token_iterator(p.begin(), p.end(), e, submatch, m); } inline u32regex_token_iterator make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) { diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 40847731..13794cd5 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -9,9 +9,15 @@ project shared:BOOST_REGEX_DYN_LINK=1 msvc-7.1:TEST_MFC=1 msvc-7.0:TEST_MFC=1 + msvc:on # There are unidentified linker problems on these platforms: mipspro-7.4:static sun-5.9:static + msvc:all + gcc:all + gcc:-Wextra + gcc:-Wshadow + U_USING_ICU_NAMESPACE=0 ; # @@ -135,4 +141,4 @@ test-suite regex ] ; - +build-project ../example ; diff --git a/test/c_compiler_checks/posix_api_check.c b/test/c_compiler_checks/posix_api_check.c index b7498aaa..9b72a131 100644 --- a/test/c_compiler_checks/posix_api_check.c +++ b/test/c_compiler_checks/posix_api_check.c @@ -35,7 +35,7 @@ int main() regex_tA re; int result; result = regcompA(&re, expression, REG_AWK); - if(result > REG_NOERROR) + if(result > (int)REG_NOERROR) { char buf[256]; regerrorA(result, &re, buf, sizeof(buf)); @@ -46,7 +46,7 @@ int main() matches[0].rm_so = 0; matches[0].rm_eo = strlen(text); result = regexecA(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); - if(result > REG_NOERROR) + if(result > (int)REG_NOERROR) { char buf[256]; regerrorA(result, &re, buf, sizeof(buf)); diff --git a/test/c_compiler_checks/wide_posix_api_check.c b/test/c_compiler_checks/wide_posix_api_check.c index c55113e8..c9ab85bb 100644 --- a/test/c_compiler_checks/wide_posix_api_check.c +++ b/test/c_compiler_checks/wide_posix_api_check.c @@ -45,11 +45,11 @@ int main() char nbuf[256]; int i; result = regcomp(&re, expression, REG_AWK); - if(result > REG_NOERROR) + if(result > (int)REG_NOERROR) { regerror(result, &re, buf, sizeof(buf)); for(i = 0; i < 256; ++i) - nbuf[i] = buf[i]; + nbuf[i] = (char)(buf[i]); printf(nbuf); return result; } @@ -61,11 +61,11 @@ int main() matches[0].rm_so = 0; matches[0].rm_eo = wcslen(text); result = regexec(&re, text, 1, matches, REG_NOTBOL | REG_NOTEOL | REG_STARTEND); - if(result > REG_NOERROR) + if(result > (int)REG_NOERROR) { regerror(result, &re, buf, sizeof(buf)); for(i = 0; i < 256; ++i) - nbuf[i] = buf[i]; + nbuf[i] = (char)(buf[i]); printf(nbuf); regfree(&re); return result; diff --git a/test/regress/main.cpp b/test/regress/main.cpp index e741db50..50315794 100644 --- a/test/regress/main.cpp +++ b/test/regress/main.cpp @@ -33,9 +33,14 @@ int* get_array_data(); int error_count = 0; +#ifndef TEST_THREADS #define RUN_TESTS(name) \ std::cout << "Running test case \"" #name "\".\n";\ name(); +#else +#define RUN_TESTS(name) \ + name(); +#endif void run_tests() diff --git a/test/unicode/unicode_iterator_test.cpp b/test/unicode/unicode_iterator_test.cpp index a6f267bb..315a7690 100644 --- a/test/unicode/unicode_iterator_test.cpp +++ b/test/unicode/unicode_iterator_test.cpp @@ -94,7 +94,7 @@ void test(const std::vector< ::boost::uint32_t>& v) std::copy(u32to16type(v.begin()), u32to16type(v.end()), std::back_inserter(v16)); #endif #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(u32to16type(v.begin()), u32to16type(v.end())), v16.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to16type(v.begin()), u32to16type(v.end())), v16.size()); #endif #if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) v32.assign(u16to32type(v16.begin()), u16to32type(v16.end())); @@ -103,7 +103,7 @@ void test(const std::vector< ::boost::uint32_t>& v) std::copy(u16to32type(v16.begin()), u16to32type(v16.end()), std::back_inserter(v32)); #endif #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(u16to32type(v16.begin()), u16to32type(v16.end())), v32.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(u16to32type(v16.begin()), u16to32type(v16.end())), v32.size()); #endif BOOST_CHECK_EQUAL(v.size(), v32.size()); i = v.begin(); @@ -117,12 +117,12 @@ void test(const std::vector< ::boost::uint32_t>& v) #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) v16.assign(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))); #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))), v16.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to16type(u32to16type(v.end())), ru32to16type(u32to16type(v.begin()))), v16.size()); #endif std::reverse(v16.begin(), v16.end()); v32.assign(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin()))); #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin()))), v32.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru16to32type(u16to32type(v16.end())), ru16to32type(u16to32type(v16.begin()))), v32.size()); #endif BOOST_CHECK_EQUAL(v.size(), v32.size()); std::reverse(v32.begin(), v32.end()); @@ -142,7 +142,7 @@ void test(const std::vector< ::boost::uint32_t>& v) std::copy(u32to8type(v.begin()), u32to8type(v.end()), std::back_inserter(v8)); #endif #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(u32to8type(v.begin()), u32to8type(v.end())), v8.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(u32to8type(v.begin()), u32to8type(v.end())), v8.size()); #endif #if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) v32.assign(u8to32type(v8.begin()), u8to32type(v8.end())); @@ -151,7 +151,7 @@ void test(const std::vector< ::boost::uint32_t>& v) std::copy(u8to32type(v8.begin()), u8to32type(v8.end()), std::back_inserter(v32)); #endif #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(u8to32type(v8.begin()), u8to32type(v8.end())), v32.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(u8to32type(v8.begin()), u8to32type(v8.end())), v32.size()); #endif BOOST_CHECK_EQUAL(v.size(), v32.size()); i = v.begin(); @@ -165,12 +165,12 @@ void test(const std::vector< ::boost::uint32_t>& v) #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) v8.assign(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))); #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))), v8.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru32to8type(u32to8type(v.end())), ru32to8type(u32to8type(v.begin()))), v8.size()); #endif std::reverse(v8.begin(), v8.end()); v32.assign(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin()))); #ifndef BOOST_NO_STD_DISTANCE - BOOST_CHECK_EQUAL(std::distance(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin()))), v32.size()); + BOOST_CHECK_EQUAL((std::size_t)std::distance(ru8to32type(u8to32type(v8.end())), ru8to32type(u8to32type(v8.begin()))), v32.size()); #endif BOOST_CHECK_EQUAL(v.size(), v32.size()); std::reverse(v32.begin(), v32.end());