Modified wide character tests to warn not fail when no wide character support is available in the platform.

Modified Jamfiles to use centralised options.
Added wide character concept check.


[SVN r19318]
This commit is contained in:
John Maddock
2003-07-26 11:22:17 +00:00
parent 9d565f63ed
commit 6750cf4892
14 changed files with 304 additions and 36 deletions

24
base.jam Normal file
View File

@ -0,0 +1,24 @@
# copyright John Maddock 2003
#
# this template defines the options common to
# all regex builds and tests:
#
template regex-options
: # sources
: # requirements
<define>BOOST_REGEX_NO_LIB=1
<debug><define>BOOST_REGEX_CONFIG_INFO=1
<sysinclude>$(BOOST_ROOT)
;
#
# this template defines the options common to
# all regex dll builds and tests:
#
template regex-dll-options
: <template>regex-options # sources
: # requirements
<define>BOOST_REGEX_DYN_LINK=1
<runtime-link>dynamic
;

View File

@ -2,27 +2,21 @@
subproject libs/regex/build ; subproject libs/regex/build ;
include $(BOOST_ROOT)/libs/regex/base.jam ;
SOURCES = c_regex_traits c_regex_traits_common cpp_regex_traits SOURCES = c_regex_traits c_regex_traits_common cpp_regex_traits
cregex fileiter posix_api regex regex_debug cregex fileiter posix_api regex regex_debug
regex_synch w32_regex_traits wide_posix_api instances winstances ; regex_synch w32_regex_traits wide_posix_api instances winstances ;
lib boost_regex : ../src/$(SOURCES).cpp lib boost_regex : ../src/$(SOURCES).cpp <template>regex-options
: :
<sysinclude>$(BOOST_ROOT)
<define>BOOST_REGEX_NO_LIB=1
<define>BOOST_REGEX_STATIC_LINK=1
<no-warn>$(SOURCES).cpp
: :
debug release debug release
; ;
dll boost_regex : ../src/$(SOURCES).cpp dll boost_regex : ../src/$(SOURCES).cpp <template>regex-dll-options
: :
<sysinclude>$(BOOST_ROOT)
<define>BOOST_REGEX_DYN_LINK=1
<runtime-link>dynamic
<no-warn>$(SOURCES).cpp
: :
debug release debug release
; ;

View File

@ -5,6 +5,7 @@ subproject libs/regex/example ;
# bring in the rules for testing # bring in the rules for testing
SEARCH on testing.jam = $(BOOST_BUILD_PATH) ; SEARCH on testing.jam = $(BOOST_BUILD_PATH) ;
include testing.jam ; include testing.jam ;
include $(BOOST_ROOT)/libs/regex/base.jam ;
rule regex-test-run ( sources + : input * ) rule regex-test-run ( sources + : input * )
{ {
@ -12,6 +13,7 @@ rule regex-test-run ( sources + : input * )
run run
# sources # sources
$(sources) $(sources)
<template>regex-options
# dependencies # dependencies
<lib>../build/boost_regex <lib>../build/boost_regex
@ -19,9 +21,6 @@ rule regex-test-run ( sources + : input * )
$(input) $(input)
: # test-files : # test-files
: # requirements : # requirements
<sysinclude>../../../
<define>BOOST_REGEX_NO_LIB=1
<define>BOOST_REGEX_STATIC_LINK=1
<threading>multi <threading>multi
: # test name : # test name
] ; ] ;

View File

@ -161,5 +161,3 @@ int WINAPI DllEntryPoint(HINSTANCE , unsigned long , void*)

View File

@ -219,6 +219,37 @@ debug_guard::~debug_guard()
#endif #endif
//
// regex configuration information: this prints out the settings used
// when the library was built - include in debugging builds only:
//
#ifdef BOOST_REGEX_CONFIG_INFO
#define print_macro regex_lib_print_macro
#define print_expression regex_lib_print_expression
#define print_byte_order regex_lib_print_byte_order
#define print_sign regex_lib_print_sign
#define print_compiler_macros regex_lib_print_compiler_macros
#define print_stdlib_macros regex_lib_print_stdlib_macros
#define print_platform_macros regex_lib_print_platform_macros
#define print_boost_macros regex_lib_print_boost_macros
#define print_separator regex_lib_print_separator
#define OLD_MAIN regex_lib_main
#define NEW_MAIN regex_lib_main2
#define NO_RECURSE
#include <libs/regex/test/config_info/regex_config_info.cpp>
BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info()
{
std::cout << "\n\n";
print_separator();
std::cout << "Regex library build configuration:\n\n";
regex_lib_main2();
}
#endif

View File

@ -6,13 +6,22 @@ subproject libs/regex/test ;
SEARCH on testing.jam = $(BOOST_BUILD_PATH) ; SEARCH on testing.jam = $(BOOST_BUILD_PATH) ;
include testing.jam ; include testing.jam ;
include $(BOOST_ROOT)/libs/regex/base.jam ;
#
# this template defines the options common to
# all regex tests:
#
template test template test
: <lib>../build/boost_regex # sources : <template>regex-options
: <define>BOOST_REGEX_NO_LIB=1 # requirements <lib>../build/boost_regex # sources
<define>BOOST_REGEX_STATIC_LINK=1 : <threading>multi
<threading>multi ;
;
#
# this template defines the options common to
# all builds of the test/regression program:
#
template regression template regression
: <template>test # sources : <template>test # sources
regress/parse.cpp regress/parse.cpp
@ -21,45 +30,67 @@ template regression
<lib>../../test/build/boost_prg_exec_monitor <lib>../../test/build/boost_prg_exec_monitor
; ;
#
# rule for simple regex test programs:
#
rule regex-test ( name : sources + : requirements * : input-files * ) rule regex-test ( name : sources + : requirements * : input-files * )
{ {
return [ run $(sources) return [ run $(sources)
: :
: $(input-files) : $(input-files)
: $(requirements) <no-warn>parse.cpp <no-warn>regress.cpp <no-warn>tests.cpp : $(requirements)
: $(name) ] ; : $(name) ] ;
} }
#
# this template defines the options common to
# all regex dll tests:
#
template test-dll
: <template>regex-dll-options
<dll>../build/boost_regex # sources
: <threading>multi
;
#
# this template defines the options common to
# all builds of the test/regression program:
#
template regression-dll
: <template>test-dll # sources
regress/parse.cpp
regress/regress.cpp
regress/tests.cpp
<lib>../../test/build/boost_prg_exec_monitor
;
test-suite regex test-suite regex
: :
[ regex-test regress [ regex-test regex_regress
: <template>regression # sources : <template>regression # sources
: # requirements : # requirements
: regress/tests.txt # input files : regress/tests.txt # input files
] ]
[ regex-test wregress [ regex-test regex_wide_regress
: <template>regression # sources : <template>regression # sources
: <define>TEST_UNICODE=1 # requirements : <define>TEST_UNICODE=1 # requirements
: regress/tests.txt # input files : regress/tests.txt # input files
] ]
[ regex-test posix_api_check_c [ regex-test posix_api_check
: <template>test # sources : <template>test # sources
c_compiler_checks/posix_api_check.c c_compiler_checks/posix_api_check.c
] ]
[ regex-test wide_posix_api_check_c [ compile <template>test c_compiler_checks/wide_posix_api_check.c ]
: <template>test # sources
c_compiler_checks/wide_posix_api_check.c
]
[ regex-test posix_api_check [ regex-test posix_api_check_cpp
: <template>test # sources : <template>test # sources
c_compiler_checks/posix_api_check.cpp c_compiler_checks/posix_api_check.cpp
] ]
[ regex-test wide_posix_api_check [ regex-test wide_posix_api_check_cpp
: <template>test # sources : <template>test # sources
c_compiler_checks/wide_posix_api_check.cpp c_compiler_checks/wide_posix_api_check.cpp
] ]
@ -76,7 +107,28 @@ test-suite regex
<lib>../../test/build/boost_test_exec_monitor <lib>../../test/build/boost_test_exec_monitor
] ]
[ compile pathology/concept_check.cpp [ run config_info/regex_config_info.cpp <template>test
: : : <test-info>always_show_run_output ]
[ run config_info/regex_config_info.cpp <template>test
: : : <test-info>always_show_run_output
: regex_dll_config_info ]
[ regex-test regex_regress_dll
: <template>regression-dll # sources
: # requirements
: regress/tests.txt # input files
]
[ regex-test regex_wide_regress_dll
: <template>regression-dll # sources
: <define>TEST_UNICODE=1 # requirements
: regress/tests.txt # input files
]
[ compile concepts/concept_check.cpp
]
[ compile concepts/wide_concept_check.cpp
] ]
; ;

View File

@ -85,7 +85,17 @@ int main()
} }
#else #else
# error "This library has not been configured for wide character support"
#include <iostream>
int main()
{
std::cout <<
"\n<note>\n"
"This platform does not provide the needed wide character support for this test.\n"
"</note>\n";
return 0;
}
#endif #endif

View File

@ -0,0 +1,63 @@
/*
*
* Copyright (c) 2003
* Dr John Maddock
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Dr John Maddock makes no representations
* about the suitability of this software for any purpose.
* It is provided "as is" without express or implied warranty.
*
*/
#include <boost/regex.hpp>
#include <boost/concept_archetype.hpp>
#include <boost/concept_check.hpp>
#include <boost/detail/workaround.hpp>
int main()
{
#ifndef BOOST_NO_WREGEX
// VC6 and VC7 can't cope with the iterator architypes,
// don't bother testing as it doesn't work:
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
typedef boost::bidirectional_iterator_archetype<wchar_t> iterator_type;
boost::wregex r;
iterator_type a, b;
boost::detail::dummy_constructor dummy;
boost::output_iterator_archetype<wchar_t> out(dummy);
std::wstring s;
boost::match_results<iterator_type> what;
boost::regex_match(a, b, r);
boost::regex_match(a, b, what, r);
boost::regex_search(a, b, r);
boost::regex_search(a, b, what, r);
out = boost::regex_replace(out, a, b, r, s, boost::match_default);
s = boost::regex_replace(s, r, s, boost::match_default);
out = what.format(out, s, boost::format_default);
s = what.format(s, boost::format_default);
boost::function_requires<
boost::ForwardIteratorConcept<
boost::regex_iterator<iterator_type>
>
>();
// this fails with glibc++v2 :
#if !BOOST_WORKAROUND(__GNUC__, < 3) && !BOOST_WORKAROUND(BOOST_MSVC, <1300)
boost::function_requires<
boost::ForwardIteratorConcept<
boost::regex_token_iterator<iterator_type>
>
>();
#endif // GCC 2.x
#endif // MSVC 6
#endif // BOOST_NO_WREGEX
return 0;
}

View File

@ -0,0 +1,72 @@
/*
*
* Copyright (c) 2003
* Dr John Maddock
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Dr John Maddock makes no representations
* about the suitability of this software for any purpose.
* It is provided "as is" without express or implied warranty.
*
*/
//
// This program extends config_info to print out regex library
// configuration information. We do this by redfining the main
// provided by config_info, our real main will call it later:
//
#ifndef OLD_MAIN
# define OLD_MAIN info_main
#endif
#define main OLD_MAIN
#include <libs/config/test/config_info.cpp>
#undef main
#ifndef NEW_MAIN
# define NEW_MAIN main
#endif
#include <boost/regex.hpp>
int NEW_MAIN()
{
OLD_MAIN();
print_separator();
PRINT_MACRO(BOOST_REGEX_USER_CONFIG);
PRINT_MACRO(BOOST_REGEX_USE_C_LOCALE);
PRINT_MACRO(BOOST_REGEX_USE_CPP_LOCALE);
PRINT_MACRO(BOOST_REGEX_HAS_DLL_RUNTIME);
PRINT_MACRO(BOOST_REGEX_DYN_LINK);
PRINT_MACRO(BOOST_REGEX_NO_LIB);
PRINT_MACRO(BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE);
PRINT_MACRO(BOOST_REGEX_NO_W32);
PRINT_MACRO(BOOST_REGEX_NO_BOOL);
PRINT_MACRO(BOOST_REGEX_NO_EXTERNAL_TEMPLATES);
PRINT_MACRO(BOOST_REGEX_NO_FWD);
PRINT_MACRO(BOOST_REGEX_V3);
PRINT_MACRO(BOOST_REGEX_HAS_MS_STACK_GUARD);
PRINT_MACRO(BOOST_REGEX_RECURSIVE);
PRINT_MACRO(BOOST_REGEX_NON_RECURSIVE);
PRINT_MACRO(BOOST_REGEX_BLOCKSIZE);
PRINT_MACRO(BOOST_REGEX_MAX_BLOCKS);
PRINT_MACRO(BOOST_REGEX_MAX_CACHE_BLOCKS);
PRINT_MACRO(BOOST_NO_WREGEX);
PRINT_MACRO(BOOST_REGEX_NO_FILEITER);
PRINT_MACRO(BOOST_REGEX_STATIC_LINK);
PRINT_MACRO(BOOST_REGEX_DYN_LINK);
PRINT_MACRO(BOOST_REGEX_DECL);
PRINT_MACRO(BOOST_REGEX_CALL);
PRINT_MACRO(BOOST_REGEX_CCALL);
PRINT_MACRO(BOOST_REGEX_MAX_STATE_COUNT);
#if defined(BOOST_REGEX_CONFIG_INFO) && !defined(NO_RECURSE)
print_regex_library_info();
#endif
return 0;
}

View File

@ -25,6 +25,8 @@
#include <boost/regex.hpp> #include <boost/regex.hpp>
#include "regress.h" #include "regress.h"
#ifndef BOOST_REGEX_NO_TEST
#ifndef BOOST_RE_ALGO_INCLUDED #ifndef BOOST_RE_ALGO_INCLUDED
#include <algorithm> #include <algorithm>
#endif #endif
@ -337,6 +339,4 @@ void expand_escapes(string_type& s)
} }
} }
#endif

View File

@ -43,6 +43,8 @@ using std::endl;
#include "regress.h" #include "regress.h"
#ifndef BOOST_REGEX_NO_TEST
#if defined(BOOST_MSVC) && defined(_DEBUG) #if defined(BOOST_MSVC) && defined(_DEBUG)
#include <CRTDBG.H> #include <CRTDBG.H>
#endif #endif
@ -284,5 +286,18 @@ void jm_debug_alloc::deallocate(void* pv, size_type n)
delete[] p; delete[] p;
} }
#else
#include <iostream>
int cpp_main(int argc, char * argv[])
{
std::cout <<
"\n<note>\n"
"This platform does not provide the needed wide character support for this test.\n"
"</note>\n";
return 0;
}
#endif

View File

@ -27,6 +27,12 @@
#include <boost/regex/config.hpp> #include <boost/regex/config.hpp>
#if defined(BOOST_NO_WREGEX) && defined(TEST_UNICODE)
# define BOOST_REGEX_NO_TEST
#endif
#ifndef BOOST_REGEX_NO_TEST
#ifdef BOOST_RE_OLD_IOSTREAM #ifdef BOOST_RE_OLD_IOSTREAM
#include <iostream.h> #include <iostream.h>
#else #else
@ -436,6 +442,8 @@ typedef boost::basic_regex<char_t, boost::c_regex_traits<char_t>, jm_debug_alloc
#endif #endif
#endif

View File

@ -26,6 +26,8 @@
#include <boost/regex.hpp> #include <boost/regex.hpp>
#include "regress.h" #include "regress.h"
#ifndef BOOST_REGEX_NO_TEST
# ifdef BOOST_MSVC # ifdef BOOST_MSVC
# pragma warning(disable: 4244 4267) # pragma warning(disable: 4244 4267)
#endif #endif
@ -884,7 +886,7 @@ void reset_error()
} }
#endif