dnl Process with autoconf to generate configure script -*- sh -*- AC_INIT(boost/config.hpp) AC_PREREQ(2.13) dnl We want to use autoconf 2.13 AM_CONFIG_HEADER(boost/config.h) dnl This is a trick to make autoheader do the right thing dnl AM_CONFIG_HEADER(boost/config.h) AC_CANONICAL_SYSTEM AC_VALIDATE_CACHE_SYSTEM_TYPE AM_INIT_AUTOMAKE(boost, 0.1lyx) ### Check for programs AC_PROG_MAKE_SET AC_PROG_INSTALL # Work around a problem in automake 1.4: when invoking install-strip, # INSTALL_PROGRAM is changed to 'install -s', and since # INSTALL_SCRIPT==INSTALL_PROGRAM, we get errors with fileutils-4.0 # which returns an error condition when stripping fails. INSTALL_SCRIPT='${INSTALL}' ### we will also need a C compiler to compile GNU gettext AC_PROG_CC ### check for special systems AC_ISC_POSIX AC_AIX ### Check for program extensions (.exe or nothing) AC_EXEEXT ### Check for a C++ compiler AC_LANG_CPLUSPLUS AC_PROG_CXX AC_PROG_CXXCPP AC_DISABLE_SHARED AC_LIBTOOL_WIN32_DLL AM_PROG_LIBTOOL #################################################### #################################################### #################################################### AC_DEFINE(BOOST_RE_AUTO_CONFIGURE, []) dnl Disable any caching here define([AC_CACHE_LOAD], )dnl define([AC_CACHE_SAVE], )dnl AC_MSG_RESULT(*** $0: regex++ configuration utility ***) if test "${CXXFLAGS}" = ""; then AC_MSG_RESULT(* Note: for best reliability - try \"CXXFLAGS=-treat_warnings_as_errors\" $0 ) AC_MSG_RESULT(* Please don't forget specifying typical CXXFLAGS you'll be using - ) AC_MSG_RESULT(* such as that enabling exceptions handling, etc. ) AC_MSG_RESULT(* Add option forcing instantiation of all templates to CXXFLAGS if possible. ) AC_MSG_RESULT(* Add option enabling merging of template instances between translation units) AC_MSG_RESULT(* to CXXFLAGS if possible. ) fi AC_MSG_RESULT(Please stand by while exploring compiler capabilities...) AC_MSG_RESULT(Be patient - this could take some time...) AC_MSG_RESULT(***) AC_ARG_ENABLE(extension,[--enable-extension=], [ case "$enableval" in no) AC_MSG_RESULT(Info :.cpp used as extension for tests) ac_ext=cpp ;; *) AC_MSG_RESULT(Argument : .$enableval used as extension) ac_ext=$enableval esac ], [AC_MSG_RESULT(Info : .cpp used as extension for tests) ac_ext=cpp ] ) AC_ARG_ENABLE(sizeof-short, [--enable-sizeof-short=], [], [enable_sizeof_short=2]) AC_ARG_ENABLE(sizeof-int, [--enable-sizeof-int=], [], [enable_sizeof_int=4]) AC_ARG_ENABLE(sizeof-long, [--enable-sizeof-long=], [], [enable_sizeof_long=4]) AC_ARG_ENABLE(force-cross, [--enable-force-cross forces cross compile mode]) # Save that, as it is being redefined several times use_ac_ext=$ac_ext AC_LANG_CPLUSPLUS ac_ext=$use_ac_ext AC_MSG_CHECKING(for object file extention) cat > "xyqtcz.$ac_ext" << EOF int main() { } EOF if eval "$CXX $CXXFLAGS -c xyqtcz.$ac_ext"; then rm -f "xyqtcz.$ac_ext" ac_obj_ext=`find xyqtcz.* | sed 's/xyqtcz\(.*\)/\1/g'` AC_MSG_RESULT(yes - $ac_obj_ext) rm -f "xyqtcz$ac_obj_ext" else AC_MSG_RESULT(no - could not create or find object file, defaulting to .o) rm -f "xyqtcz.$ac_ext" ac_obj_ext='.o' fi AC_MSG_CHECKING(for executable file extention) ac_exe_ext="" for file in /bin/sh.* do if test -x "$file"; then ac_exe_ext=`echo "$file" | sed 's/\/bin\/sh\(.*\)/\1/g'` fi done AC_MSG_RESULT(yes - $ac_exe_ext) AC_SUBST(ac_exe_ext) AC_SUBST(ac_obj_ext) # # determine machine word sizes # and set BOOST_RE_INT32 to be the # equivalent of intfast32_t in # if test "$enable_force_cross" = "yes"; then cross_compiling="yes" echo forced cross compilation mode turned on fi AC_CHECK_SIZEOF(short,"$enable_sizeof_short") ac_ext=$use_ac_ext AC_CHECK_SIZEOF(int,"$enable_sizeof_int") ac_ext=$use_ac_ext AC_CHECK_SIZEOF(long,"$enable_sizeof_long") ac_ext=$use_ac_ext AC_DEFINE_UNQUOTED(BOOST_RE_SIZEOF_SHORT, [$ac_cv_sizeof_short]) AC_DEFINE_UNQUOTED(BOOST_RE_SIZEOF_INT, [$ac_cv_sizeof_int]) AC_DEFINE_UNQUOTED(BOOST_RE_SIZEOF_LONG, [$ac_cv_sizeof_long]) if test "$ac_cv_sizeof_int" -lt 4; then if test "$ac_cv_sizeof_long" -ge 4; then AC_DEFINE(BOOST_RE_INT32_LONG) else AC_MSG_ERROR(Cannot find any 32-bit integer type for your compiler) fi ac_ext=$use_ac_ext fi ac_ext=$use_ac_ext ac_ext=$use_ac_ext dnl checking for compiler capabilities AC_MSG_CHECKING(for basic template compatibility) AC_TRY_LINK( [ template struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; }; template struct plus : public binary_function { T operator()(const T& x, const T& y) const; }; // // non-inline // link will fail if template is not instantiated // template T plus::operator()(const T& x, const T& y) const { return x + y; } plus p; ], [ // check member function is actually instantiated int i, j, k; i = p(k, j); ], [ac_cv_compat="yes"], [AC_MSG_ERROR(Your compiler won't be able to compile this implementation. Sorry.) ac_cv_compat="no"] ) AC_MSG_RESULT($ac_cv_compat) AC_MSG_CHECKING(for exception support) AC_TRY_COMPILE( [ #include int f1()throw() { return 23; } void do_throw() { throw (int)25; } ], [ try { f1(); do_throw(); } catch(int i) { } catch(...) { } ], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_MSG_ERROR(Sorry, without exception handling you can't compile this library)]) AC_ARG_ENABLE(mutable, [--disable-mutable turns off mutable support]) if test "$enable_mutable" = "no"; then AC_DEFINE(BOOST_RE_NO_MUTABLE, []) else AC_MSG_CHECKING(for mutable keyword) AC_TRY_COMPILE( [ #include class foo { mutable int val; public: foo(int i) : val(i) {} void set(int i)const; }; void foo::set(int i)const { val = i; } ], [ const foo f(4); f.set(3); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_MUTABLE, []) AC_MSG_RESULT(no)]) fi AC_MSG_CHECKING(for default template parameter support) AC_TRY_COMPILE( [ #include template struct foo { T val; U alt; }; ], [ foo f1; foo f2; foo f3; foo f4; ], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(Sorry: you can't compile this library)]) AC_MSG_CHECKING(for derived default template parameter support) AC_TRY_COMPILE( [ #include template class inner { public: typedef T inner_type; }; template > struct foo { T val; U alt; }; ], [ foo > f1; foo > f2; foo f3; foo f4; ], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(Sorry, you can't compile this library)]) AC_MSG_CHECKING([for function template partial ordering]) AC_TRY_COMPILE( [ #include template struct dummy{}; struct dummy2 { int result()const { return 1; } }; template int foo(const T& t) { return t.result(); } template int foo(const dummy& ) { return 0; } ], [ dummy d; dummy2 d2; int i = foo(d); i = foo(d2); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_PARTIAL_FUNC_SPEC, []) AC_MSG_RESULT(no)]) AC_MSG_CHECKING([for template friend functions]) AC_TRY_COMPILE( [ #include template void foo(T2 t); template struct dummy { template friend void foo(T2); private: void foo2(); void foo3()const; }; template void foo(T2 t) { dummy d1; d1.foo2(); d1.foo3(); dummy d2; d2.foo2(); d2.foo3(); } ], [ foo(3); foo(2.345); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_TEMPLATE_FRIEND, []) AC_MSG_RESULT(no)]) AC_ARG_ENABLE(ms-windows, [--disable-ms-windows turns off native MS Windows support (when available)]) AC_ARG_ENABLE(threads, [--disable-threads turns off multi-threading support (when available)]) if test "$enable_ms_windows" != "no"; then AC_MSG_CHECKING(for MS Windows) AC_TRY_COMPILE( [ #include #if defined(__GNUC__) && (__GNUC_MINOR__ == 95) && (__GNUC__ == 2) #error can't mix STL code with due to bug in gcc2.95.x #endif ], [ int i = GetVersion(); ], [iswin="true" AC_DEFINE(BOOST_RE_PLATFORM_WINDOWS, []) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) enable_ms_windows="no"] ) fi if test "$enable_ms_windows" != "no"; then dnl Ok check for Win32, then linkage: AC_MSG_CHECKING(for MS Win32) AC_TRY_COMPILE( [ #include CRITICAL_SECTION cs; ], [ InitializeCriticalSection(&cs); EnterCriticalSection(&cs); LeaveCriticalSection(&cs); DeleteCriticalSection(&cs); ], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) enable_ms_windows="no"] ) fi if test "$enable_ms_windows" != "no"; then if test "$CXX" != "cl"; then AC_CHECK_LIB(user32, main, [LIBS="$LIBS -luser32"], []) AC_CHECK_LIB(kernel32, main, [LIBS="$LIBS -lkernel32"], []) fi AC_TRY_LINK( [ #include CRITICAL_SECTION cs; ], [ InitializeCriticalSection(&cs); EnterCriticalSection(&cs); LeaveCriticalSection(&cs); DeleteCriticalSection(&cs); HeapAlloc(0, 0, 20); CharLower((LPTSTR)0); LoadString(0, 0, 0, 0); ], [ if test "enable_threads" != "no"; then # turn on threading support: AC_MSG_CHECKING(for mult-thread support) AC_MSG_RESULT("yes") AC_DEFINE(BOOST_RE_THREADS, []) AC_DEFINE(BOOST_RE_PLATFORM_W32, []) fi ], [ # bu**er, windows is present but we can't link AC_MSG_WARN([ MS Win32 seems to be present, but we can't link, or find the default library names for kernal32.dll and user32.dll. $0 is disabling MS Windows support, re-run $0 with the environment variable "LIBS" set to the library files required to re-enable Win32 support.]) enable_ms_windows="no" ] ) fi if test "$iswin" != "true"; then AC_MSG_CHECKING(for MS DOS) AC_TRY_COMPILE( [ #include ], [ int i = _doserrno; ], [AC_DEFINE(BOOST_RE_PLATFORM_DOS, []) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) fi AC_MSG_CHECKING(for bool support) AC_TRY_COMPILE( [ ], [ bool i = true; ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_BOOL,[]) AC_MSG_RESULT(no)]) AC_ARG_ENABLE(wstring, [--disable-wstring turns off wide character string support]) if test "$enable_wstring" = "no"; then AC_DEFINE(BOOST_RE_NO_WCHAR_H, []) else AC_MSG_CHECKING(for ) AC_TRY_LINK( [ #include ], [ ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_WCHAR_H,[]) AC_MSG_RESULT(no)] ) fi if test "$enable_wstring" = "no"; then AC_DEFINE(BOOST_RE_NO_WCTYPE_H, []) else AC_MSG_CHECKING(for ) AC_TRY_LINK( [ #include ], [ ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_WCTYPE_H,[]) AC_MSG_RESULT(no)] ) fi if test "$enable_wstring" = "no"; then AC_DEFINE(BOOST_RE_NO_WCSTRING, []) else AC_MSG_CHECKING(for wide string functions) AC_TRY_LINK( [ #include "confdefs.h" #ifndef BOOST_RE_NO_WCHAR_H #include #endif #ifndef BOOST_RE_NO_WCTYPE_H #include #endif #include #include #include #include #include template class std::basic_string; ], [ using namespace std; wchar_t c[50]; char d[50]; wcscpy(c, L"abcd"); wcscmp(L"", L""); wcslen(L""); wcsxfrm(0, L"", 0); wcstombs(d, L"", 0); mbstowcs(c, "", 0); iswlower(L'c'); ], [AC_MSG_RESULT(yes)] enable_wstring="yes", [AC_DEFINE(BOOST_RE_NO_WCSTRING,[]) AC_MSG_RESULT(no)] enable_wstring="no") fi if test "$enable_wstring" != "no"; then AC_MSG_CHECKING(for swprintf support) AC_TRY_LINK( [ #include "confdefs.h" #ifndef BOOST_RE_NO_WCHAR_H #include #endif #ifndef BOOST_RE_NO_WCTYPE_H #include #endif #include #include ], [ wchar_t c[50]; swprintf(c, 50, L"abcd"); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_SWPRINTF,[]) AC_MSG_RESULT(no)] enable_swprintf="no") fi AC_ARG_ENABLE(member-templates, [--disable-member-templates turns off member template class and function support]) if test "$enable_member_templates" = "no"; then AC_DEFINE(BOOST_RE_NO_MEMBER_TEMPLATES, []) else AC_MSG_CHECKING(for member template classes and functions) AC_TRY_COMPILE( [ template class alloc { public: void* allocate(int); void deallocate(void*); alloc(); alloc(const alloc&); template alloc(const alloc&) {} alloc& operator=(const alloc&); template alloc& operator=(const alloc&) { return *this; } template struct rebind { typedef alloc other; }; }; ], [ alloc ia; alloc da(ia); alloc fa; fa.allocate(5); fa = ia; ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_MEMBER_TEMPLATES,[]) AC_MSG_RESULT(no)]) fi AC_ARG_ENABLE(template-returns, [--disable-template-returns turns off support for templates specialised by return type]) if test "$enable_template_returns" = "no"; then AC_DEFINE(BOOST_RE_NO_TEMPLATE_RETURNS, []) else AC_MSG_CHECKING(for parameterised function returns) AC_TRY_COMPILE( [ template T coerse(int i) { return T(i); } ], [ double d = coerse(5); int i = coerse(3); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_TEMPLATE_RETURNS,[]) AC_MSG_RESULT(no)]) fi AC_ARG_ENABLE(int64, [--disable-int64 turns off support for 64-bit integer types]) if test "$enable_int64" = "no"; then AC_DEFINE(BOOST_RE_INT64_T_0) else AC_MSG_CHECKING(for 64-bit integral type) if test "$ac_cv_sizeof_short" -eq 8; then AC_DEFINE(BOOST_RE_INT64_T_1) AC_MSG_RESULT(yes - short) have_int64="true" fi if test "$ac_cv_sizeof_int" -eq 8 && test "$have_int64" != "true"; then AC_DEFINE(BOOST_RE_INT64_T_2) AC_MSG_RESULT(yes - int) have_int64="true" fi if test "$ac_cv_sizeof_long" -eq 8 && test "$have_int64" != "true"; then AC_DEFINE(BOOST_RE_INT64_T_3) AC_MSG_RESULT(yes - long) have_int64="true" fi if test "$have_int64" != "true"; then AC_TRY_COMPILE( [ #include int64_t i = INT64_C(0x100000000); ], [ ], [AC_MSG_RESULT(yes - int64_t) have_int64="true" AC_DEFINE(BOOST_RE_INT64_T_4) ], []) fi if test "$have_int64" != "true"; then AC_TRY_COMPILE( [ #include long long i = 0x100000000LL; ], [ ], [AC_MSG_RESULT(yes - long long) have_int64="true" AC_DEFINE(BOOST_RE_INT64_T_5) ], []) fi if test "$have_int64" != "true"; then AC_TRY_COMPILE( [ #include __int64 i = 0x100000000i64; ], [ ], [AC_MSG_RESULT(yes - __int64) have_int64="true" AC_DEFINE(BOOST_RE_INT64_T_6) ], []) fi if test "$have_int64" != "true"; then AC_DEFINE(BOOST_RE_INT64_T,0) AC_MSG_RESULT(no) fi fi AC_ARG_ENABLE(messages, [--disable-messages turns off support for POSIX message categories, when available.]) if test "$enable_messages" = "no" || test "$enable_ms_windows" != "no"; then AC_DEFINE(BOOST_RE_NO_CAT, []) else AC_CHECK_LIB(nl_types, catopen) AC_CHECK_LIB(posix, catopen) AC_MSG_CHECKING(for POSIX message categories) AC_TRY_LINK( [ #include nl_catd message_cat = (nl_catd)-1; ], [ message_cat = catopen("some_name", 0); catclose(message_cat); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_CAT,[]) AC_MSG_RESULT(no)]) fi if test "$enable_threads" != "no" && test "$enable_ms_windows" = "no"; then AC_CHECK_LIB(pthread, pthread_mutex_init) AC_CHECK_LIB(posix, pthread_mutex_init) AC_MSG_CHECKING(for POSIX threads) AC_TRY_LINK( [ #include pthread_mutex_t m; ], [ pthread_mutex_init(&m, NULL); pthread_mutex_lock(&m); pthread_mutex_unlock(&m); pthread_mutex_destroy(&m); ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_THREADS, [])], [AC_MSG_RESULT(no)]) fi AC_ARG_ENABLE(nested-template-prefix, [--disable-nested-template-prefix turns off use of \"template\" as the nested template class access specifier.]) if test "$enable_nested_template_prefix" = "no" || test "$enable_member_templates" = "no"; then AC_DEFINE(BOOST_RE_NESTED_TEMPLATE_DECL, []) else AC_MSG_CHECKING(for template nested class access) AC_TRY_COMPILE( [ template class alloc { public: void* allocate(int); void deallocate(void*); alloc(); alloc(const alloc&); template alloc(const alloc&) {} alloc& operator=(const alloc&); template alloc& operator=(const alloc&) { return *this; } template struct rebind { typedef alloc other; }; }; ], [ alloc ia; alloc da(ia); alloc fa; fa.allocate(5); fa = ia; alloc::template rebind::other da2(ia); ], [ AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_NESTED_TEMPLATE_DECL,template) ], [ AC_DEFINE(BOOST_RE_NESTED_TEMPLATE_DECL,[]) AC_MSG_RESULT(no) ]) fi AC_MSG_CHECKING(for explicit template instantiation) AC_TRY_COMPILE( [ #include "confdefs.h" #include template class factorial { public: factorial(); T operator()(T); }; template factorial::factorial() { } template T factorial::operator()(T t) { T result = 1; for(T i = 1; i <= t; ++i) { result *= i; } return result; } template class factorial; template class factorial; ], [ ], [ AC_MSG_RESULT(yes) ], [ AC_DEFINE(BOOST_RE_NO_TEMPLATE_INST,[]) AC_MSG_RESULT(no) ]) AC_ARG_ENABLE(fastcall, [--disable-fastcall turns off use __fastcall and __stdcall.]) if test "$enable_fastcall" = "no" || test "$enable_ms_windows" != "no"; then AC_DEFINE(BOOST_RE_CALL, []) AC_DEFINE(BOOST_RE_CCALL, []) else AC_MSG_CHECKING(for __fastcall and __stdcall) AC_TRY_COMPILE( [ void __fastcall f1(int) { } void __stdcall f2(int) { } ], [ f1(2); f2(3); ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_CALL, [__fastcall]) AC_DEFINE(BOOST_RE_CCALL, [__stdcall]) ], [AC_DEFINE(BOOST_RE_CALL, []) AC_DEFINE(BOOST_RE_CCALL, []) AC_MSG_RESULT(no)]) fi # move on to STL options: AC_MSG_CHECKING(for standard library namespace) AC_TRY_COMPILE( [ #include #include #include #include "confdefs.h" namespace jm{ struct dummy{}; }; // namespace jm::dummy d; std::list v; ], [ ], [AC_MSG_RESULT(yes - std) have_std_namespace="yes" ], [AC_MSG_RESULT(no - either STL is not present or in a non-standard namespace.) AC_MSG_ERROR([Sorry, you can't compile this library unless the standard library is in namespace std.])]) AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include "confdefs.h" class bad_expression : public std::exception { unsigned int code; public: bad_expression(unsigned int err) : code(err) {} bad_expression(const bad_expression& e) : std::exception(e), code(e.code) {} bad_expression& operator=(const bad_expression& e) { std::exception::operator=(e); code = e.code; return *this; } virtual const char* what()const throw(); }; std::exception e; std::bad_exception e3; ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_EXCEPTION_H, []) ]) AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_ITERATOR_H, []) ]) AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) need_algo="yes" ]) if test "$enable_stl" != "no" && test "$need_algo" = "yes"; then AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include ], [ ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_USE_ALGO, []) ], [AC_MSG_RESULT(no - disabling STL support) AC_DEFINE(BOOST_RE_NO_STL, []) AC_DEFINE(BOOST_RE_NO_EXCEPTION_H, []) AC_DEFINE(BOOST_RE_NO_ITERATOR_H, []) AC_DEFINE(BOOST_RE_NO_MEMORY_H, []) AC_DEFINE(BOOST_RE_NO_LOCALE_H, []) AC_DEFINE(BOOST_RE_NO_STRING_H, []) enable_stl="no" ]) fi AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include "confdefs.h" std::allocator a; std::allocator d(a); typedef std::allocator alloc_type; alloc_type::BOOST_RE_NESTED_TEMPLATE_DECL rebind::other o(a); ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_MEMORY_H, []) ]) if test "$enable_stl" != "no"; then AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include "confdefs.h" std::string a; //std::wstring ws; ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_MSG_ERROR(Sorry: you can't compile this library without ) ]) fi if test "$enable_stl" != "no"; then AC_MSG_CHECKING(for std::basic_string default arguments) AC_TRY_COMPILE( [ #include #include "confdefs.h" std::basic_string s1; std::basic_string s2; ], [ ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_STRING_DEF_ARGS, []) ]) fi ac_have_locale='no' if test "$enable_stl" != "no"; then AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include "confdefs.h" std::locale l; ], [ ], [AC_MSG_RESULT(yes) ac_have_locale='yes' ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_LOCALE_H, []) ]) fi if test "$enable_stl" != "no"; then AC_MSG_CHECKING(for ) AC_TRY_COMPILE( [ #include #include #include "confdefs.h" ], [ std::locale l; std::cout.imbue(l); std::cout << "some text" << std::endl; ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_OLD_IOSTREAM, []) ]) fi AC_MSG_CHECKING(for std::distance) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ int i, *j, *k; i = std::distance(j, k); ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_DISTANCE_T_1) have_dist="yes" ], []) if test "$enable_stl" != "no" && test "$have_dist" != "yes"; then AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ int i, *j, *k; std::distance(j, k, i); ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_DISTANCE_T_2) have_dist="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_DISTANCE_T_0) have_dist="yes"]) fi if test "$enable_stl" != "no" && test "$have_si" != "yes"; then AC_MSG_CHECKING(for standard iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::iterator oi; std::iterator ii; std::iterator fi; std::iterator bi; std::iterator ri; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_ITERATOR_T_1) have_si="yes" have_oi="yes" have_ii="yes" have_fi="yes" have_bi="yes" have_ri="yes" ], []) fi if test "$enable_stl" != "no" && test "$have_si" != "yes"; then AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::iterator oi; std::iterator ii; std::iterator fi; std::iterator bi; std::iterator ri; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_ITERATOR_T_2) have_si="yes" have_oi="yes" have_ii="yes" have_fi="yes" have_bi="yes" have_ri="yes" ], [AC_MSG_RESULT(no)]) AC_DEFINE(BOOST_RE_ITERATOR_T_0) fi if test "$have_oi" != "yes"; then AC_MSG_CHECKING(for output iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::output_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_OI_T_3) have_oi="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_OI_T_0) have_oi="yes"]) fi if test "$enable_stl" != "no" && test "$have_ii" != "yes"; then AC_MSG_CHECKING(for input iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::input_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_II_T_3) have_ii="yes" ], []) fi if test "$enable_stl" != "no" && test "$have_ii" != "yes"; then AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::input_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_II_T_4) have_ii="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_II_T_0) have_ii="yes"]) fi if test "$enable_stl" != "no" && test "$have_fi" != "yes"; then AC_MSG_CHECKING(for forward iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::forward_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_FI_T_3) have_fi="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_FI_T_0) have_fi="yes"]) fi if test "$enable_stl" != "no" && test "$have_bi" != "yes"; then AC_MSG_CHECKING(for bidirectional iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::bidirectional_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_BI_T_) have_bi="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_BI_T_0) have_bi="yes"]) fi if test "$enable_stl" != "no" && test "$have_ri" != "yes"; then AC_MSG_CHECKING(for random access iterator syntax) AC_TRY_COMPILE( [ #include #include "confdefs.h" ], [ std::random_access_iterator oi; ], [AC_MSG_RESULT(yes) AC_DEFINE(BOOST_RE_RI_T_3) have_ri="yes" ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_RI_T_0) have_ri="yes"]) fi if test "$enable_stl" != "no"; then AC_MSG_CHECKING(for output iterator assignment) AC_TRY_COMPILE( [ #include "confdefs.h" #include #ifdef BOOST_RE_OLD_IOSTREAM #include std::ostream_iterator a(cout); std::ostream_iterator b(cout); #else #include std::ostream_iterator a(std::cout); std::ostream_iterator b(std::cout); #endif #include #if !defined(BOOST_RE_NO_TRICKY_DEFAULT_PARAM) && !defined(BOOST_RE_NO_DEFAULT_PARAM) typedef std::list list_type; #else typedef std::list list_type; #endif list_type v; std:: back_insert_iterator c(v); std:: back_insert_iterator d(v); ], [ a = b; c = d; ], [AC_MSG_RESULT(yes) ], [AC_MSG_RESULT(no) AC_DEFINE(BOOST_RE_NO_OI_ASSIGN, []) ]) fi # # generate include dependencies # #ac_all_h="" #ac_all_dep="" #for file in ../../boost/re_detail/*.hpp #do # if test "$file" != '../../boost/re_detail/*.hpp'; then # ac_all_h="$ac_all_h ../$file" # ac_all_dep="$ac_all_dep $file" # fi #done #echo "$ac_all_h" # # generate source dependencies # #ac_all_o="" #ac_rules="" #ac_all_cpp="" #cat ./lib/makefile.org > ./lib/makefile.in #for file in src/*.cpp src/*.c #do # if test "$file" != 'src/*.cpp' && test "$file" != 'src/*.c'; then # dnl echo source dependency found "$file" # ac_all_dep="$ac_all_dep $file" # ac_all_cpp="$ac_all_cpp $file" # root=`echo "$file" | sed 's/src\/\(.*\)\..*/\1/g'` # dnl echo root file name is "$root" # ac_all_o="$ac_all_o $root$ac_obj_ext" # echo >> ./lib/makefile.in # echo >> ./lib/makefile.in # echo "$root$ac_obj_ext"': $(ALL_H) '"../$file" >> ./lib/makefile.in # echo ' $(CPP) $(CPP_PROJ)'" ../$file" >> ./lib/makefile.in # echo ' $(AR) -rc lib$(LIBNAME).a'" $root$ac_obj_ext" >> ./lib/makefile.in # fi #done #echo "$ac_rules" >> ./lib/makefile.in #AC_SUBST(ac_all_o) #AC_SUBST(ac_all_h) #AC_SUBST(ac_all_cpp) #AC_SUBST(ac_all_dep) #ac_regress="$ac_regress r1$ac_exe_ext" #if test "$enable_wstring" != "no"; then #ac_regress="$ac_regress r2$ac_exe_ext" #fi #AC_SUBST(ac_regress) if test "$enable_ms_windows" = "no"; then AC_DEFINE(BOOST_RE_NO_W32, []) fi # # OK final test for possible link time problems: # cat > conf2.h << EOF #include "confdefs.h" #include template class factorial { public: factorial(); T operator()(T); }; template factorial::factorial() { } template T factorial::operator()(T t) { T result = 1; for(T i = 1; i <= t; ++i) { result *= i; } return result; } int conf2_test(); EOF cat > conf2.cpp << EOF #include "conf2.h" int conf2_test() { factorial f; return f(8); } EOF old_libs="$LIBS" LIBS="conf2.cpp $old_libs" AC_MSG_CHECKING(for link time template merging) AC_TRY_LINK( [ #include "conf2.h" ], [ factorial g; g(5); conf2_test(); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_TEMPLATE_MERGE, []) AC_MSG_RESULT(no) AC_MSG_RESULT([ Warning - $0 has determined that your compiler can not merge]) AC_MSG_RESULT([ template instances, you may have problems linking to libregex++.a - ]) AC_MSG_RESULT([ see the FAQ for further details.]) ] ) if eval "$CXX $CXXFLAGS -c conf2.cpp" && eval "ar -rc libconf2.a conf2$ac_obj_ext"; then LIBS="-L./ -lconf2 $old_libs" AC_MSG_CHECKING(for link time template merging from archive files) AC_TRY_LINK( [ #include "conf2.h" ], [ factorial g; g(5); conf2_test(); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_TEMPLATE_MERGE_A, []) AC_MSG_RESULT(no) AC_MSG_RESULT([ Warning - $0 has determined that your compiler can not merge ]) AC_MSG_RESULT([ template instances, if these are located inside an archive file,]) AC_MSG_RESULT([ you may have problems linking to libregex++.a - see the FAQ for]) AC_MSG_RESULT([ further details.]) ] ) else AC_MSG_RESULT(Unable to create library archive, library may not be fully configured.) fi # # cleanup # rm -f conf2.h rm -f conf2.cpp rm -f "conf2$ac_obj_ext" rm -f libconf2.a LIBS="$old_libs" cat > conf2.h << EOF #include "confdefs.h" #include template class factorial { public: factorial(); T operator()(T); }; template factorial::factorial() { } template T factorial::operator()(T t) { T result = 1; switch(t) { case 2: for(T i = 1; i <= 2; ++i) { result *= i; } return result; case 3: for(T i = 1; i <= 3; ++i) { result *= i; } return result; case 4: for(T i = 1; i <= 4; ++i) { result *= i; } return result; case 5: for(T i = 1; i <= 5; ++i) { result *= i; } return result; case 6: for(T i = 1; i <= 6; ++i) { result *= i; } return result; case 7: for(T i = 1; i <= 7; ++i) { result *= i; } return result; default: for(T i = 1; i <= t; ++i) { result *= i; } return result; } return 0; } int conf2_test(); EOF cat > conf2.cpp << EOF #include "conf2.h" int conf2_test() { factorial f; return f(8); } EOF old_libs="$LIBS" LIBS="conf2.cpp $old_libs" AC_MSG_CHECKING(for link time template merging of switch statements) AC_TRY_LINK( [ #include "conf2.h" ], [ factorial g; g(5); conf2_test(); ], [AC_MSG_RESULT(yes)], [AC_DEFINE(BOOST_RE_NO_TEMPLATE_SWITCH_MERGE, []) AC_MSG_RESULT(no) AC_MSG_RESULT([ Warning - $0 has determined that your compiler can not merge]) AC_MSG_RESULT([ template instances, if those instances contain switch statements, ]) AC_MSG_RESULT([ you may have problems linking to libregex++.a - ]) AC_MSG_RESULT([ see the FAQ for further details.]) ] ) # # cleanup # rm -f conf2.h rm -f conf2.cpp LIBS="$old_libs" AC_DEFINE(BOOST_RE_AUTO_CONF) #AC_MSG_RESULT(***) #AC_MSG_RESULT($0: setting up headers...) #AC_MSG_RESULT(***) #AC_OUTPUT(lib/makefile demo/jgrep/makefile demo/timer/makefile demo/regress/makefile makefile) #AC_MSG_RESULT(***) #AC_MSG_RESULT($0: regex++ package tuned for use with \"${CXX}\" compiler.) #AC_MSG_RESULT($0: To restore original settings - copy jm_opt.in to ../../boost/re_detail/regex_options.hpp) #AC_MSG_RESULT(***) #post processing cleanup: #sed 's%^[ ]*#[ ]*undef[ ][ ]*\(.*\)[ ]*$%/* #define \1 */%' ../../boost/re_detail/regex_options.hpp > jm_opt.out #cat jm_opt.out > ../../boost/re_detail/regex_options.hpp #sed 's%\(#[ ]*\)undef[ ]%\1define %' ../../boost/re_detail/regex_options.hpp > jm_opt.out #cat jm_opt.out > ../../boost/re_detail/regex_options.hpp #rm -f jm_opt.out #################################################### #################################################### #################################################### ### Finish the work. AC_OUTPUT([Makefile \ ], [])