--- /tmp/configure.ac 2006-04-28 16:40:37.670982792 +0200 +++ monotone-0.26/configure.ac 2006-04-28 16:42:22.762006528 +0200 @@ -446,124 +446,8 @@ AC_CHECK_FUNC(getaddrinfo, [AM_CONDITIONAL(MISSING_GETADDRINFO, false)], [AM_CONDITIONAL(MISSING_GETADDRINFO, true)]) -# Check whether sync_with_stdio(false) run on C++ streams works correctly. -# It causes strange problems (EOF returned too early) on some versions of -# MinGW and OS X. The first test is for the MinGW issue, the second for -# the OS X issue. -# -# In order to check for this issue, we first generate a large input file -# (over 128KB) and then try to read it (using a buffer size over 512 -# bytes). If the amount of bytes read does not match the generated input, -# the implementation is broken. -AC_MSG_CHECKING(whether C++ streams support sync_with_stdio) -AC_RUN_IFELSE([AC_LANG_SOURCE([ -/* - * Generates the input file. - */ -#include -#include - -int -main(void) -{ - std::ofstream ofs("_conftest.dat"); - for (int i = 0; i < 50000; i++) - ofs << "0123456789\r\n"; - ofs.close(); - - return EXIT_SUCCESS; -} -])]) -AC_RUN_IFELSE([AC_LANG_SOURCE([ -/* - * Reads the input file. - */ -#include -#include -#include - -int -main(int argc, char * argv[]) -{ - if (argc == 1) - return EXIT_SUCCESS; - - std::cin.sync_with_stdio(false); - int length = 0; - while (std::cin.good()) - { - char buffer@<:@1024@:>@; - (void)std::cin.read(buffer, sizeof(buffer)); - length += std::cin.gcount(); - } - - return length == 600000 ? EXIT_SUCCESS : EXIT_FAILURE; -} -])], - [if ./conftest$ac_exeext check_it_now <_conftest.dat; then - AC_MSG_RESULT(yes) - ac_cv_sync_with_stdio=yes - else - AC_MSG_RESULT(no) - ac_cv_sync_with_stdio=no - fi - rm -f _conftest.dat]) - - -# To check for this issue, we have a writer with a short delay between writes, -# and a reader who has set sync_with_stdio(false). -AC_MSG_CHECKING(whether C++ streams support sync_with_stdio 2) -AC_RUN_IFELSE([AC_LANG_SOURCE([ -#include -#include -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#define sleep(x) Sleep((x) * 1000) -#else -#include -#endif - -int -main(int argc, char * argv[]) -{ - if (argc == 1) - return EXIT_SUCCESS; - - if (argc == 2) - { - std::cin.sync_with_stdio(false); - int length = 0; - while (std::cin.good()) - { - char buffer@<:@1024@:>@; - (void)std::cin.read(buffer, sizeof(buffer)); - length += std::cin.gcount(); - } - - return length == 82 ? EXIT_SUCCESS : EXIT_FAILURE; - } - else - { - std::cout << "1234567890123456789012345678901234567890" << std::endl; - sleep(1); - std::cout << "1234567890123456789012345678901234567890" << std::endl; - } - return EXIT_SUCCESS; -} -])], - [if ./conftest$ac_exeext check_it_now please | ./conftest$ac_exeext foo; then - AC_MSG_RESULT(yes) - ac_cv_sync_with_stdio_2=yes - else - AC_MSG_RESULT(no) - ac_cv_sync_with_stdio_2=no - fi]) - -if test $ac_cv_sync_with_stdio = yes && test $ac_cv_sync_with_stdio_2 = yes; then AC_DEFINE(SYNC_WITH_STDIO_WORKS, 1, [Define to 1 if sync_with_stdio works fine on C++ streams]) -fi # allow compiling with different flags/optimisation # for monotone versus libs, useful for testing.