From: David Daney Date: Thu, 12 Aug 2004 16:20:11 +0000 (+0000) Subject: re PR libgcj/11801 (Problems with Process.waitFor() and exitValue()) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c58f29001dee1b4f6dfb09cc2a49f2739b106553;p=gcc.git re PR libgcj/11801 (Problems with Process.waitFor() and exitValue()) 2004-08-12 David Daney PR libgcj/11801 * java/lang/PosixProcess.java: Rewrote. * java/lang/natPosixProcess.cc: Rewrote. * java/lang/Runtime.java (execInternal): Declare throws IOException. * gcj/javaprims.h (ConcreteProcess$ProcessManager): Declare. * posix-threads.cc (block_sigchld) New function. (_Jv_ThreadRegister) Use it. (_Jv_ThreadStart) Use it. * configure.in (PLATFORM_INNER_NAT_HDRS): New AC_SUBST() used in... * Makefile.am: ... to specify extra native headers. * configure: Regenerated. * include/config.h: Regenerated. * Makefile.in: Regenerated. * gcj/Makefile.in: Regenerated. * include/Makefile.in: Regenerated. * testsuite/Makefile.in: Regenerated. From-SVN: r85880 --- diff --git a/libjava/Makefile.am b/libjava/Makefile.am index ac5a7789da1..83124461472 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -532,7 +532,8 @@ inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \ gnu/java/net/PlainSocketImpl$$SocketInputStream.h \ gnu/java/net/PlainSocketImpl$$SocketOutputStream.h \ gnu/java/nio/PipeImpl$$SinkChannelImpl.h \ - gnu/java/nio/PipeImpl$$SourceChannelImpl.h + gnu/java/nio/PipeImpl$$SourceChannelImpl.h \ + $(PLATFORM_INNER_NAT_HDRS) nat_headers = $(ordinary_nat_headers) $(inner_nat_headers) nat_headers_install = $(ordinary_nat_headers) @@ -642,6 +643,11 @@ gnu/java/nio/PipeImpl$$SourceChannelImpl.h: gnu/java/nio/PipeImpl.class $(GCJH) -classpath '' -bootclasspath $(top_builddir) \ 'gnu/java/nio/PipeImpl$$SourceChannelImpl' +## Only used by PosixProcess.java +java/lang/ConcreteProcess$$ProcessManager.h: java/lang/ConcreteProcess.class + $(GCJH) -classpath '' -bootclasspath $(top_builddir) \ + 'java/lang/ConcreteProcess$$ProcessManager' + ## Headers we maintain by hand and which we want to install. extra_headers = java/lang/Object.h java/lang/Class.h diff --git a/libjava/Makefile.in b/libjava/Makefile.in index 4fbdbb8189c..6dcc6d74289 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -125,6 +125,7 @@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PLATFORMOBJS = @PLATFORMOBJS@ +PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@ RANLIB = @RANLIB@ STRIP = @STRIP@ SYSDEP_SOURCES = @SYSDEP_SOURCES@ @@ -506,7 +507,8 @@ inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \ gnu/java/net/PlainSocketImpl$$SocketInputStream.h \ gnu/java/net/PlainSocketImpl$$SocketOutputStream.h \ gnu/java/nio/PipeImpl$$SinkChannelImpl.h \ - gnu/java/nio/PipeImpl$$SourceChannelImpl.h + gnu/java/nio/PipeImpl$$SourceChannelImpl.h \ + $(PLATFORM_INNER_NAT_HDRS) nat_headers = $(ordinary_nat_headers) $(inner_nat_headers) @@ -5662,6 +5664,10 @@ gnu/java/nio/PipeImpl$$SourceChannelImpl.h: gnu/java/nio/PipeImpl.class $(GCJH) -classpath '' -bootclasspath $(top_builddir) \ 'gnu/java/nio/PipeImpl$$SourceChannelImpl' +java/lang/ConcreteProcess$$ProcessManager.h: java/lang/ConcreteProcess.class + $(GCJH) -classpath '' -bootclasspath $(top_builddir) \ + 'java/lang/ConcreteProcess$$ProcessManager' + $(extra_headers) $(srcdir)/java/lang/Object.h $(srcdir)/java/lang/Class.h: @: diff --git a/libjava/configure b/libjava/configure index 5c657ef87f2..9aab57a2d9a 100755 --- a/libjava/configure +++ b/libjava/configure @@ -310,7 +310,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcj_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS INCLTDL LIBLTDL DIRLTDL STRIP ac_ct_STRIP LIBTOOL CXXCPP CPPFLAGS subdirs COMPPATH TESTSUBDIR_TRUE TESTSUBDIR_FALSE ONESTEP_TRUE ONESTEP_FALSE LIBGCJDEBUG INTERPRETER LIBFFI LIBFFIINCS EXTRA_CC_FILES PLATFORMOBJS CPP EGREP SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GTK_AWT_TRUE GTK_AWT_FALSE GTK_CAIRO_TRUE GTK_CAIRO_FALSE PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS GCLIBS GCINCS GCDEPS GCOBJS GCSPEC JC1GCSPEC GCTESTSPEC THREADLIBS THREADINCS THREADDEPS THREADOBJS THREADSPEC THREADLDFLAGS THREADCXXFLAGS HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE tool_include_dir gcc_version LIBICONV GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS GCJH ZIP GCJ ac_ct_GCJ GCJFLAGS ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION ALLOCA PERL BACKTRACESPEC SYSDEP_SOURCES here LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcj_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS INCLTDL LIBLTDL DIRLTDL STRIP ac_ct_STRIP LIBTOOL CXXCPP CPPFLAGS subdirs COMPPATH TESTSUBDIR_TRUE TESTSUBDIR_FALSE ONESTEP_TRUE ONESTEP_FALSE LIBGCJDEBUG INTERPRETER LIBFFI LIBFFIINCS EXTRA_CC_FILES PLATFORMOBJS PLATFORM_INNER_NAT_HDRS CPP EGREP SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GTK_AWT_TRUE GTK_AWT_FALSE GTK_CAIRO_TRUE GTK_CAIRO_FALSE PKG_CONFIG CAIRO_CFLAGS CAIRO_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS GCLIBS GCINCS GCDEPS GCOBJS GCSPEC JC1GCSPEC GCTESTSPEC THREADLIBS THREADINCS THREADDEPS THREADOBJS THREADSPEC THREADLDFLAGS THREADCXXFLAGS HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE tool_include_dir gcc_version LIBICONV GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS GCJH ZIP GCJ ac_ct_GCJ GCJFLAGS ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION ALLOCA PERL BACKTRACESPEC SYSDEP_SOURCES here LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -994,7 +994,7 @@ esac else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi - cd "$ac_popdir" + cd $ac_popdir done fi @@ -2215,7 +2215,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2273,7 +2274,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2389,7 +2391,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2443,7 +2446,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2488,7 +2492,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2532,7 +2537,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2716,7 +2722,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2774,7 +2781,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2845,7 +2853,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2889,7 +2898,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4324,7 +4334,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 4327 "configure"' > conftest.$ac_ext + echo '#line 4337 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -4471,7 +4481,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5053,7 +5064,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then : else cat > conftest.$ac_ext << EOF -#line 5056 "configure" +#line 5067 "configure" struct S { ~S(); }; void bar(); void foo() @@ -5187,6 +5198,7 @@ EXTRA_CC_FILES= PLATFORMOBJS= +PLATFORM_INNER_NAT_HDRS= case "$TARGET_ECOS" in no) case "$host" in *mingw*) @@ -5228,6 +5240,7 @@ fi PLATFORMNET=Posix PLATFORMOBJS=posix.lo PLATFORMH=posix.h + PLATFORM_INNER_NAT_HDRS='java/lang/ConcreteProcess$$ProcessManager.h' ;; esac ;; @@ -5244,6 +5257,7 @@ _ACEOF ;; esac + ac_config_links="$ac_config_links include/platform.h:include/$PLATFORMH" @@ -5683,12 +5697,9 @@ ZLIBSPEC= ZLIBTESTSPEC= - -if test "x$ac_path_x_has_been_run" != xyes; then - echo "$as_me:$LINENO: checking for X" >&5 +echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 -ac_path_x_has_been_run=yes # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -5781,7 +5792,7 @@ ac_x_header_dirs=' /usr/openwin/share/include' if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for a specified header file. + # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -5860,7 +5871,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5920,15 +5932,10 @@ else # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" - # It might be that x_includes is empty (headers are found in the - # standard search path. Then output the corresponding message - ac_out_x_includes=$x_includes - test "x$x_includes" = x && ac_out_x_includes="in standard search path" - echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5 -echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6 + echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 +echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi -fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. @@ -5981,7 +5988,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6037,7 +6045,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6118,7 +6127,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6178,7 +6188,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6251,7 +6262,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6364,7 +6376,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6433,7 +6446,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6506,7 +6520,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6615,7 +6630,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6684,7 +6700,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6786,7 +6803,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6855,7 +6873,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6957,7 +6976,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7026,7 +7046,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7110,7 +7131,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7803,7 +7825,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7913,7 +7936,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8027,7 +8051,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8134,7 +8159,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8241,7 +8267,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8349,7 +8376,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8459,7 +8487,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8524,7 +8553,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8694,7 +8724,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8763,7 +8794,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8948,7 +8980,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9056,7 +9089,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9195,7 +9229,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9250,7 +9285,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9325,7 +9361,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9399,7 +9436,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9549,7 +9587,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9612,7 +9651,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9677,7 +9717,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9723,7 +9764,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9802,7 +9844,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9911,7 +9954,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10009,7 +10053,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10052,7 +10097,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10129,7 +10175,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10255,7 +10302,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10393,7 +10441,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10525,7 +10574,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10660,7 +10710,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10769,7 +10820,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10843,7 +10895,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10921,7 +10974,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10991,7 +11045,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11039,7 +11094,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11144,7 +11200,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11256,7 +11313,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11365,7 +11423,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11446,7 +11505,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11578,7 +11638,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11647,7 +11708,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11753,7 +11815,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11858,7 +11921,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11922,7 +11986,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12005,7 +12070,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12384,7 +12450,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12662,7 +12729,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12838,7 +12906,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12989,7 +13058,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13138,7 +13208,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13303,7 +13374,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13367,7 +13439,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13434,7 +13507,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13488,7 +13562,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13542,7 +13617,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13596,7 +13672,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13652,7 +13729,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13706,7 +13784,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13757,7 +13836,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13808,7 +13888,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13876,7 +13957,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -13962,7 +14044,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -14108,7 +14191,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -14252,7 +14336,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -14441,7 +14526,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -15516,6 +15602,7 @@ s,@LIBFFI@,$LIBFFI,;t t s,@LIBFFIINCS@,$LIBFFIINCS,;t t s,@EXTRA_CC_FILES@,$EXTRA_CC_FILES,;t t s,@PLATFORMOBJS@,$PLATFORMOBJS,;t t +s,@PLATFORM_INNER_NAT_HDRS@,$PLATFORM_INNER_NAT_HDRS,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@SYSTEMSPEC@,$SYSTEMSPEC,;t t @@ -15758,6 +15845,11 @@ esac *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ @@ -15796,12 +15888,6 @@ echo "$as_me: error: cannot find input file: $f" >&2;} fi;; esac done` || { (exit 1); exit 1; } - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub @@ -16548,7 +16634,7 @@ echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} { (exit 1); exit 1; }; } fi - cd "$ac_popdir" + cd $ac_popdir done fi diff --git a/libjava/configure.in b/libjava/configure.in index c40405f14ef..427e21e3d6e 100644 --- a/libjava/configure.in +++ b/libjava/configure.in @@ -386,6 +386,7 @@ EXTRA_CC_FILES= AC_SUBST(EXTRA_CC_FILES) PLATFORMOBJS= +PLATFORM_INNER_NAT_HDRS= case "$TARGET_ECOS" in no) case "$host" in *mingw*) @@ -400,6 +401,7 @@ case "$TARGET_ECOS" in PLATFORMNET=Posix PLATFORMOBJS=posix.lo PLATFORMH=posix.h + PLATFORM_INNER_NAT_HDRS='java/lang/ConcreteProcess$$ProcessManager.h' ;; esac ;; @@ -412,6 +414,7 @@ case "$TARGET_ECOS" in ;; esac AC_SUBST(PLATFORMOBJS) +AC_SUBST(PLATFORM_INNER_NAT_HDRS) AC_CONFIG_LINKS(include/platform.h:include/$PLATFORMH) AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED, 1, diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in index e6927beb95d..ffabae091a6 100644 --- a/libjava/gcj/Makefile.in +++ b/libjava/gcj/Makefile.in @@ -128,6 +128,7 @@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PLATFORMOBJS = @PLATFORMOBJS@ +PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@ RANLIB = @RANLIB@ STRIP = @STRIP@ SYSDEP_SOURCES = @SYSDEP_SOURCES@ diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h index 09e0c5534c7..8b2b090b95c 100644 --- a/libjava/gcj/javaprims.h +++ b/libjava/gcj/javaprims.h @@ -1,6 +1,7 @@ // javaprims.h - Main external header file for libgcj. -*- c++ -*- -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Free Software Foundation This file is part of libgcj. @@ -150,6 +151,7 @@ extern "Java" class Comparable; class Compiler; class ConcreteProcess; + class ConcreteProcess$ProcessManager; class Double; class Error; class Exception; diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in index 6c5976dd76b..b20d6d8b40e 100644 --- a/libjava/include/Makefile.in +++ b/libjava/include/Makefile.in @@ -128,6 +128,7 @@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PLATFORMOBJS = @PLATFORMOBJS@ +PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@ RANLIB = @RANLIB@ STRIP = @STRIP@ SYSDEP_SOURCES = @SYSDEP_SOURCES@ diff --git a/libjava/include/config.h.in b/libjava/include/config.h.in index 8a715f1a770..62007e51528 100644 --- a/libjava/include/config.h.in +++ b/libjava/include/config.h.in @@ -1,423 +1,397 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ +/* include/config.h.in. Generated from configure.in by autoheader. */ -/* Define if using alloca.c. */ +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ -#undef CRAY_STACKSEG_END +/* Define this if you want runtime debugging enabled. */ +#undef DEBUG + +/* Define if system properties shouldn't be read from + getenv("GCJ_PROPERTIES"). */ +#undef DISABLE_GETENV_PROPERTIES + +/* Define if java.net native functions should be stubbed out. */ +#undef DISABLE_JAVA_NET -/* Define if you have alloca, as a function or macro. */ +/* Define if we should ignore arguments to main(). */ +#undef DISABLE_MAIN_ARGS + +/* Define if you're running eCos. */ +#undef ECOS + +/* Define if you are using JVMPI. */ +#undef ENABLE_JVMPI + +/* Short GCJ version ID */ +#undef GCJVERSION + +/* Define if gethostbyaddr_r returns 'int'. */ +#undef GETHOSTBYADDR_R_RETURNS_INT + +/* Define if gethostbyname_r returns 'int'. */ +#undef GETHOSTBYNAME_R_RETURNS_INT + +/* Define to 1 if you have the `access' function. */ +#undef HAVE_ACCESS + +/* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA -/* Define if you have and it should be used (not on Ultrix). */ +/* Define to 1 if you have and it should be used (not on Ultrix). + */ #undef HAVE_ALLOCA_H -/* Define if you have a working `mmap' system call. */ -#undef HAVE_MMAP +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H -/* Define if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H +/* Define if your platform has a working backtrace() function. */ +#undef HAVE_BACKTRACE -/* Define if your struct tm has tm_zone. */ -#undef HAVE_TM_ZONE +/* Define if Boehm GC in use. */ +#undef HAVE_BOEHM_GC -/* Define if you don't have tm_zone but do have the external array - tzname. */ -#undef HAVE_TZNAME +/* Define if you have u_int32_t */ +#undef HAVE_BSD_INT32_DEFINED -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown - */ -#undef STACK_DIRECTION +/* Define to 1 if you have the header file. */ +#undef HAVE_BSTRING_H -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS +/* Define to 1 if you have the `chmod' function. */ +#undef HAVE_CHMOD -/* Define if your declares struct tm. */ -#undef TM_IN_SYS_TIME +/* Define to 1 if you have the header file. */ +#undef HAVE_DIRENT_H -/* Define if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING +/* Define if you have dladdr() */ +#undef HAVE_DLADDR -/* Define to `int' if `ssize_t' is not defined. */ -#undef ssize_t +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H -/* Define if you have the access function. */ -#undef HAVE_ACCESS +/* Define if dlopen is available */ +#undef HAVE_DLOPEN -/* Define if you have the chmod function. */ -#undef HAVE_CHMOD +/* Define to 1 if you have the header file. */ +#undef HAVE_EXECINFO_H -/* Define if you have the execvp function. */ +/* Define to 1 if you have the `execvp' function. */ #undef HAVE_EXECVP -/* Define if you have the fork function. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK -/* Define if you have the fstat function. */ +/* Define to 1 if you have the `fstat' function. */ #undef HAVE_FSTAT -/* Define if you have the fsync function. */ +/* Define to 1 if you have the `fsync' function. */ #undef HAVE_FSYNC -/* Define if you have the ftime function. */ +/* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME -/* Define if you have the ftruncate function. */ +/* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE -/* Define if you have the getcwd function. */ +/* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD -/* Define if you have the gethostbyaddr_r function. */ +/* Define if you have the 'gethostbyaddr_r' function. */ #undef HAVE_GETHOSTBYADDR_R -/* Define if you have the gethostbyname_r function. */ +/* Define if you have the 'gethostbyname_r' function. */ #undef HAVE_GETHOSTBYNAME_R -/* Define if you have the gethostname function. */ +/* Define if you have the 'gethostname' function. */ #undef HAVE_GETHOSTNAME -/* Define if you have the getpagesize function. */ +/* Define if gethostname is declared in . */ +#undef HAVE_GETHOSTNAME_DECL + +/* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define if you have the getpwuid_r function. */ +/* Define to 1 if you have the `getpwuid_r' function. */ #undef HAVE_GETPWUID_R -/* Define if you have the gettimeofday function. */ +/* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY -/* Define if you have the gmtime_r function. */ +/* Define to 1 if you have the `gmtime_r' function. */ #undef HAVE_GMTIME_R -/* Define if you have the inet_addr function. */ +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define if inet6 structures are defined in netinet/in.h. */ +#undef HAVE_INET6 + +/* Define to 1 if you have the `inet_addr' function. */ #undef HAVE_INET_ADDR -/* Define if you have the inet_aton function. */ +/* Define to 1 if you have the `inet_aton' function. */ #undef HAVE_INET_ATON -/* Define if you have the inet_ntoa function. */ +/* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA -/* Define if you have the inet_pton function. */ +/* Define to 1 if you have the `inet_pton' function. */ #undef HAVE_INET_PTON -/* Define if you have the ioctl function. */ +/* Define if you have int32_t and uint32_t. */ +#undef HAVE_INT32_DEFINED + +/* Define if is available */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h. */ +#undef HAVE_IN_ADDR_T + +/* Define to 1 if you have the `ioctl' function. */ #undef HAVE_IOCTL -/* Define if you have the localtime_r function. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_LANGINFO_H + +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define is you have 'localtime' in */ +#undef HAVE_LOCALTIME + +/* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R -/* Define if you have the memcpy function. */ +/* Define to 1 if you have the `memcpy' function. */ #undef HAVE_MEMCPY -/* Define if you have the memmove function. */ +/* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE -/* Define if you have the mkdir function. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR -/* Define if you have the nl_langinfo function. */ +/* Define is you have 'mktime' in */ +#undef HAVE_MKTIME + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO -/* Define if you have the open function. */ +/* Define to 1 if you have the `open' function. */ #undef HAVE_OPEN -/* Define if you have the opendir function. */ +/* Define to 1 if you have the `opendir' function. */ #undef HAVE_OPENDIR -/* Define if you have the pipe function. */ +/* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE -/* Define if you have the pthread_mutexattr_setkind_np function. */ +/* Define if you have /proc/self/exe */ +#undef HAVE_PROC_SELF_EXE + +/* Define if using POSIX threads that have the mutexattr functions. */ +#undef HAVE_PTHREAD_MUTEXATTR_INIT + +/* Define to 1 if you have the `pthread_mutexattr_setkind_np' function. */ #undef HAVE_PTHREAD_MUTEXATTR_SETKIND_NP -/* Define if you have the pthread_mutexattr_settype function. */ +/* Define to 1 if you have the `pthread_mutexattr_settype' function. */ #undef HAVE_PTHREAD_MUTEXATTR_SETTYPE -/* Define if you have the readdir_r function. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_PWD_H + +/* Define to 1 if you have the `readdir_r' function. */ #undef HAVE_READDIR_R -/* Define if you have the realpath function. */ +/* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH -/* Define if you have the rename function. */ +/* Define to 1 if you have the `rename' function. */ #undef HAVE_RENAME -/* Define if you have the rmdir function. */ +/* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR -/* Define if you have the sched_yield function. */ +/* Define to 1 if you have the `sched_yield' function. */ #undef HAVE_SCHED_YIELD -/* Define if you have the select function. */ +/* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT -/* Define if you have the setlocale function. */ +/* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE -/* Define if you have the sigaction function. */ +/* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION -/* Define if you have the sleep function. */ +/* Define to 1 if you have the `sleep' function. */ #undef HAVE_SLEEP -/* Define if you have the stat function. */ -#undef HAVE_STAT - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR - -/* Define if you have the time function. */ -#undef HAVE_TIME - -/* Define if you have the uname function. */ -#undef HAVE_UNAME - -/* Define if you have the unlink function. */ -#undef HAVE_UNLINK - -/* Define if you have the usleep function. */ -#undef HAVE_USLEEP - -/* Define if you have the utime function. */ -#undef HAVE_UTIME - -/* Define if you have the header file. */ -#undef HAVE_ARPA_INET_H - -/* Define if you have the header file. */ -#undef HAVE_BSTRING_H - -/* Define if you have the header file. */ -#undef HAVE_DIRENT_H - -/* Define if you have the header file. */ -#undef HAVE_DLFCN_H +/* Define it socklen_t typedef is in sys/socket.h. */ +#undef HAVE_SOCKLEN_T -/* Define if you have the header file. */ -#undef HAVE_EXECINFO_H +/* Define to 1 if you have the `stat' function. */ +#undef HAVE_STAT -/* Define if you have the header file. */ -#undef HAVE_FCNTL_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H -/* Define if you have the header file. */ -#undef HAVE_INTTYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H -/* Define if you have the header file. */ -#undef HAVE_LANGINFO_H +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR -/* Define if you have the header file. */ -#undef HAVE_LOCALE_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H -/* Define if you have the header file. */ -#undef HAVE_NET_IF_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H -/* Define if you have the header file. */ -#undef HAVE_NETDB_H +/* Define if struct hostent_data is defined in netdb.h */ +#undef HAVE_STRUCT_HOSTENT_DATA -/* Define if you have the header file. */ -#undef HAVE_NETINET_IN_H +/* Define if struct ipv6_mreq is defined in netinet/in.h. */ +#undef HAVE_STRUCT_IPV6_MREQ -/* Define if you have the header file. */ -#undef HAVE_PWD_H +/* Define if struct ip_mreq is defined in netinet/in.h. */ +#undef HAVE_STRUCT_IP_MREQ -/* Define if you have the header file. */ -#undef HAVE_STDINT_H +/* Define to 1 if `tm_zone' is member of `struct tm'. */ +#undef HAVE_STRUCT_TM_TM_ZONE -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_CONFIG_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Name of package */ -#undef PACKAGE - -/* Version number of package */ -#undef VERSION - -/* Define if libltdl is in use. */ -#undef USE_LTDL - -/* Define if system properties shouldn't be read from getenv(GCJ_PROPERTIES). */ -#undef DISABLE_GETENV_PROPERTIES - -/* Define if we should ignore arguments to main(). */ -#undef DISABLE_MAIN_ARGS - -/* Define if MinGW libgcj uses the Windows UNICODE OS API. */ -#undef MINGW_LIBGCJ_UNICODE - -/* Define if if the synchronization code should try to avoid pthread_self calls by caching thread IDs in a hashtable. */ -#undef SLOW_PTHREAD_SELF - -/* Define this if you want runtime debugging enabled. */ -#undef DEBUG - -/* Define if you want a bytecode interpreter. */ -#undef INTERPRETER - -/* Define if the compiler is configured for setjmp/longjmp exceptions. */ -#undef SJLJ_EXCEPTIONS - -/* Define if java.net native functions should be stubbed out. */ -#undef DISABLE_JAVA_NET - -/* Define if we're to use libffi. */ -#undef USE_LIBFFI +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H -/* Define if you are using JVMPI. */ -#undef ENABLE_JVMPI +/* Define to 1 if you have the `time' function. */ +#undef HAVE_TIME -/* Indicate that linker is not able to 8-byte align static data */ -#undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS +/* Define if global 'timezone' exists. */ +#undef HAVE_TIMEZONE -/* Define if you're running eCos. */ -#undef ECOS +/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use + `HAVE_STRUCT_TM_TM_ZONE' instead. */ +#undef HAVE_TM_ZONE -/* Define if you have int32_t and uint32_t. */ -#undef HAVE_INT32_DEFINED +/* Define to 1 if you don't have `tm_zone' but do have the external array + `tzname'. */ +#undef HAVE_TZNAME -/* Define if you have int32_t and uint32_t. */ -#undef HAVE_INT32_DEFINED +/* Define to 1 if you have the `uname' function. */ +#undef HAVE_UNAME -/* Define if you have u_int32_t */ -#undef HAVE_BSD_INT32_DEFINED +/* Define if your platform has the global _timezone variable. */ +#undef HAVE_UNDERSCORE_TIMEZONE -/* Define if you have u_int32_t */ -#undef HAVE_BSD_INT32_DEFINED +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H -/* Define is you have 'mktime' in */ -#undef HAVE_MKTIME +/* Define to 1 if you have the `unlink' function. */ +#undef HAVE_UNLINK -/* Define is you have 'localtime' in */ -#undef HAVE_LOCALTIME +/* Define to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP -/* Define if Boehm GC in use. */ -#undef HAVE_BOEHM_GC +/* Define if usleep is declared in . */ +#undef HAVE_USLEEP_DECL -/* Define if using POSIX threads on Linux. */ -#undef LINUX_THREADS +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME -/* Define if using POSIX threads that have the mutexattr functions. */ -#undef HAVE_PTHREAD_MUTEXATTR_INIT +/* Define to 1 if you have the file `AC_File'. */ +#undef HAVE__PROC_SELF_EXE -/* Required define if using POSIX threads */ -#undef _REENTRANT +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST -/* Required define if using POSIX threads */ -#undef _POSIX_PTHREAD_SEMANTICS +/* Define if you want a bytecode interpreter. */ +#undef INTERPRETER /* Define if hash synchronization is in use */ #undef JV_HASH_SYNCHRONIZATION -/* Define if you have memmove. */ -#undef HAVE_MEMMOVE - -/* Define if you have memcpy. */ -#undef HAVE_MEMCPY - -/* Define if you have strerror. */ -#undef HAVE_STRERROR - -/* Define if you have time. */ -#undef HAVE_TIME - -/* Define if you have the 'gmtime_r' function */ -#undef HAVE_GMTIME_R +/* Define if is available */ +#undef JV_HAVE_INTTYPES_H -/* Define if you have the 'localtime_r' function. */ -#undef HAVE_LOCALTIME_R +/* Indicate that linker is not able to 8-byte align static data */ +#undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS -/* Define if usleep is declared in . */ -#undef HAVE_USLEEP_DECL +/* Define if using POSIX threads on Linux. */ +#undef LINUX_THREADS -/* Define if using POSIX threads that have the mutexattr functions. */ -#undef HAVE_PTHREAD_MUTEXATTR_INIT +/* Define if MinGW libgcj uses the Windows UNICODE OS API. */ +#undef MINGW_LIBGCJ_UNICODE /* Define if getuid() and friends are missing. */ #undef NO_GETUID -/* Define if your platform has a working backtrace() function. */ -#undef HAVE_BACKTRACE - -/* Define if your platform has a working backtrace() function. */ -#undef HAVE_BACKTRACE - -/* Define if your platform has a working backtrace() function. */ -#undef HAVE_BACKTRACE - -/* Define if you have dladdr() */ -#undef HAVE_DLADDR - -/* Define if you have /proc/self/exe */ -#undef HAVE_PROC_SELF_EXE - -/* Define if you have /proc/self/exe */ -#undef HAVE_PROC_SELF_EXE - -/* Define if you have the iconv() function. */ -#undef HAVE_ICONV - -/* Define as const if the declaration of iconv() needs const. */ -#undef ICONV_CONST - -/* Define if your file defines LC_MESSAGES. */ -#undef HAVE_LC_MESSAGES - -/* Define if you have the 'gethostbyname_r' function. */ -#undef HAVE_GETHOSTBYNAME_R - -/* Define if gethostbyname_r returns 'int'. */ -#undef GETHOSTBYNAME_R_RETURNS_INT - -/* Required define if using POSIX threads */ -#undef _REENTRANT - -/* Define if struct hostent_data is defined in netdb.h */ -#undef HAVE_STRUCT_HOSTENT_DATA +/* Name of package */ +#undef PACKAGE -/* Define if you have the 'gethostbyaddr_r' function. */ -#undef HAVE_GETHOSTBYADDR_R +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT -/* Define if gethostbyaddr_r returns 'int'. */ -#undef GETHOSTBYADDR_R_RETURNS_INT +/* Define to the full name of this package. */ +#undef PACKAGE_NAME -/* Define if you have the 'gethostname' function. */ -#undef HAVE_GETHOSTNAME +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING -/* Define if gethostname is declared in . */ -#undef HAVE_GETHOSTNAME_DECL +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME -/* Define if usleep is declared in . */ -#undef HAVE_USLEEP_DECL +/* Define to the version of this package. */ +#undef PACKAGE_VERSION /* Define if pthread_mutex_t has m_count member. */ #undef PTHREAD_MUTEX_HAVE_M_COUNT @@ -425,42 +399,50 @@ /* Define if pthread_mutex_t has __m_count member. */ #undef PTHREAD_MUTEX_HAVE___M_COUNT -/* Define if dlopen is available */ -#undef HAVE_DLOPEN - /* The number of bytes in type void * */ #undef SIZEOF_VOID_P -/* Short GCJ version ID */ -#undef GCJVERSION +/* Define if the compiler is configured for setjmp/longjmp exceptions. */ +#undef SJLJ_EXCEPTIONS -/* Define if is available */ -#undef HAVE_INTTYPES_H +/* Define if if the synchronization code should try to avoid pthread_self + calls by caching thread IDs in a hashtable. */ +#undef SLOW_PTHREAD_SELF -/* Define if is available */ -#undef JV_HAVE_INTTYPES_H +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION -/* Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h. */ -#undef HAVE_IN_ADDR_T +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS -/* Define if struct ip_mreq is defined in netinet/in.h. */ -#undef HAVE_STRUCT_IP_MREQ +/* Define if struct tm has tm_gmtoff field. */ +#undef STRUCT_TM_HAS_GMTOFF -/* Define if struct ipv6_mreq is defined in netinet/in.h. */ -#undef HAVE_STRUCT_IPV6_MREQ +/* Define to 1 if your declares `struct tm'. */ +#undef TM_IN_SYS_TIME -/* Define if inet6 structures are defined in netinet/in.h. */ -#undef HAVE_INET6 +/* Define if we're to use libffi. */ +#undef USE_LIBFFI -/* Define it socklen_t typedef is in sys/socket.h. */ -#undef HAVE_SOCKLEN_T +/* Define if libltdl is in use. */ +#undef USE_LTDL -/* Define if struct tm has tm_gmtoff field. */ -#undef STRUCT_TM_HAS_GMTOFF +/* Version number of package */ +#undef VERSION -/* Define if global 'timezone' exists. */ -#undef HAVE_TIMEZONE +/* Define to 1 if the X Window System is missing or not being used. */ +#undef X_DISPLAY_MISSING -/* Define if your platform has the global _timezone variable. */ -#undef HAVE_UNDERSCORE_TIMEZONE +/* Required define if using POSIX threads */ +#undef _POSIX_PTHREAD_SEMANTICS +/* Required define if using POSIX threads */ +#undef _REENTRANT + +/* Define to `int' if does not define. */ +#undef ssize_t diff --git a/libjava/java/lang/PosixProcess.java b/libjava/java/lang/PosixProcess.java index 199391b1d34..fbd6c4c8a49 100644 --- a/libjava/java/lang/PosixProcess.java +++ b/libjava/java/lang/PosixProcess.java @@ -1,6 +1,5 @@ // PosixProcess.java - Subclass of Process for POSIX systems. - -/* Copyright (C) 1998, 1999 Free Software Foundation +/* Copyright (C) 1998, 1999, 2004 Free Software Foundation This file is part of libgcj. @@ -11,76 +10,466 @@ details. */ package java.lang; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + /** * @author Tom Tromey * @date May 3, 1999 + * @author David Daney Rewrote using + * ProcessManager */ // This is entirely internal to our implementation. - // This file is copied to `ConcreteProcess.java' before compilation. // Hence the class name apparently does not match the file name. final class ConcreteProcess extends Process { - public native void destroy (); + static class ProcessManager extends Thread + { + /** + * A list of {@link ConcreteProcess ConcreteProcesses} to be + * started. The queueLock object is used as the lock Object + * for all process related operations. To avoid dead lock + * ensure queueLock is obtained before ConcreteProcess. + */ + List queue = new LinkedList(); + private Map pidToProcess = new HashMap(); + private boolean ready = false; + private long reaperPID; + + ProcessManager() + { + super("ProcessManager"); + // Don't keep the (main) process from exiting on our account. + this.setDaemon(true); + } + + /** + * Get the ConcreteProcess object with the given pid and + * remove it from the map. This method is called from the + * native code for {@link #reap()). The mapping is removed so + * the ConcreteProcesses can be GCed after they terminate. + * + * @param p The pid of the process. + */ + private ConcreteProcess removeProcessFromMap(long p) + { + return (ConcreteProcess) pidToProcess.remove(new Long(p)); + } + + /** + * Put the given ConcreteProcess in the map using the Long + * value of its pid as the key. + * + * @param p The ConcreteProcess. + */ + void addProcessToMap(ConcreteProcess p) + { + pidToProcess.put(new Long(p.pid), p); + } + + /** + * Queue up the ConcreteProcess and awake the ProcessManager. + * The ProcessManager will start the ConcreteProcess from its + * thread so it can be reaped when it terminates. + * + * @param p The ConcreteProcess. + */ + void startExecuting(ConcreteProcess p) + { + synchronized (queueLock) + { + queue.add(p); + signalReaper(); // If blocked in waitForSignal(). + queueLock.notifyAll(); // If blocked in wait(); + } + } + + /** + * Block until the ProcessManager thread is ready to accept + * commands. + */ + void waitUntilReady() + { + synchronized (this) + { + try + { + while (! ready) + wait(); + } + catch (InterruptedException ie) + { + // Ignore. + } + } + } + + /** + * Main Process starting/reaping loop. + */ + public void run() + { + init(); + // Now ready to accept requests. + synchronized (this) + { + ready = true; + this.notifyAll(); + } + + for (;;) + { + try + { + synchronized (queueLock) + { + boolean haveMoreChildren = reap(); + if (! haveMoreChildren && queue.size() == 0) + { + // This reaper thread could exit, but we + // keep it alive for a while in case + // someone wants to start more Processes. + try + { + queueLock.wait(1000L); + if (queue.size() == 0) + { + processManager = null; + return; // Timed out. + } + } + catch (InterruptedException ie) + { + // Ignore and exit the thread. + return; + } + } + while (queue.size() > 0) + { + ConcreteProcess p = (ConcreteProcess) queue.remove(0); + p.spawn(this); + } + } - public int exitValue () + // Wait for a SIGCHLD from either an exiting + // process or the startExecuting() method. This + // is done outside of the synchronized block to + // allow other threads to enter and submit more + // jobs. + waitForSignal(); + } + catch (Exception ex) + { + ex.printStackTrace(System.err); + } + } + } + + /** + * Setup native signal handlers and other housekeeping things. + * + */ + private native void init(); + + /** + * Block waiting for SIGCHLD. + * + */ + private native void waitForSignal(); + + /** + * Try to reap as many children as possible without blocking. + * + * @return true if more live children exist. + * + */ + private native boolean reap(); + + /** + * Send SIGCHLD to the reaper thread. + */ + private native void signalReaper(); + } + + public void destroy() { - if (! hasExited) - throw new IllegalThreadStateException("Process has not exited"); + // Synchronized on the queueLock. This ensures that the reaper + // thread cannot be doing a wait() on the child. + // Otherwise there would be a race where the OS could + // create a process with the same pid between the wait() + // and the update of the state which would cause a kill to + // the wrong process. + synchronized (queueLock) + { + synchronized (this) + { + // If there is no ProcessManager we cannot kill. + if (state != STATE_TERMINATED) + { + if (processManager == null) + throw new InternalError(); + nativeDestroy(); + } + } + } + } + + private native void nativeDestroy(); + + public int exitValue() + { + synchronized (this) + { + if (state != STATE_TERMINATED) + throw new IllegalThreadStateException("Process has not exited"); + } return status; } - public InputStream getErrorStream () + /** + * Called by native code when process exits. + * + * Already synchronized (this). Close any streams that we can to + * conserve file descriptors. + * + * The outputStream can be closed as any future writes will + * generate an IOException due to EPIPE. + * + * The inputStream and errorStream can only be closed if the user + * has not obtained a reference to them AND they have no bytes + * available. Since the process has terminated they will never have + * any more data available and can safely be replaced by + * EOFInputStreams. + */ + void processTerminationCleanup() + { + try + { + outputStream.close(); + } + catch (IOException ioe) + { + // Ignore. + } + try + { + if (returnedErrorStream == null && errorStream.available() == 0) + { + errorStream.close(); + errorStream = null; + } + } + catch (IOException ioe) + { + // Ignore. + } + try + { + if (returnedInputStream == null && inputStream.available() == 0) + { + inputStream.close(); + inputStream = null; + } + } + catch (IOException ioe) + { + // Ignore. + } + } + + public synchronized InputStream getErrorStream() { - return errorStream; + if (returnedErrorStream != null) + return returnedErrorStream; + + if (errorStream == null) + returnedErrorStream = EOFInputStream.instance; + else + returnedErrorStream = errorStream; + + return returnedErrorStream; } - public InputStream getInputStream () + public synchronized InputStream getInputStream() { - return inputStream; + if (returnedInputStream != null) + return returnedInputStream; + + if (inputStream == null) + returnedInputStream = EOFInputStream.instance; + else + returnedInputStream = inputStream; + + return returnedInputStream; } - public OutputStream getOutputStream () + public OutputStream getOutputStream() { return outputStream; } - public native int waitFor () throws InterruptedException; + public int waitFor() throws InterruptedException + { + synchronized (this) + { + while (state != STATE_TERMINATED) + wait(); + } + return status; + } - // This is used for actual initialization, as we can't write a - // native constructor. - public native void startProcess (String[] progarray, - String[] envp, - File dir) - throws IOException; + /** + * Start this process running. This should only be called by the + * ProcessManager. + * + * @param pm The ProcessManager that made the call. + */ + void spawn(ProcessManager pm) + { + synchronized (this) + { + // Do the fork/exec magic. + nativeSpawn(); + // There is no race with reap() in the pidToProcess map + // because this is always called from the same thread + // doing the reaping. + pm.addProcessToMap(this); + state = STATE_RUNNING; + // Notify anybody waiting on state change. + this.notifyAll(); + } + } + + /** + * Do the fork and exec. + */ + private native void nativeSpawn(); // This file is copied to `ConcreteProcess.java' before // compilation. Hence the constructor name apparently does not // match the file name. - public ConcreteProcess (String[] progarray, - String[] envp, - File dir) - throws IOException + ConcreteProcess(String[] progarray, String[] envp, File dir) + throws IOException { - startProcess (progarray, envp, dir); + // Check to ensure there is something to run, and avoid + // dereferencing null pointers in native code. + if (progarray[0] == null) + throw new NullPointerException(); + + this.progarray = progarray; + this.envp = envp; + this.dir = dir; + + // Start a ProcessManager if there is not one already running. + synchronized (queueLock) + { + if (processManager == null) + { + processManager = new ProcessManager(); + processManager.start(); + processManager.waitUntilReady(); + } + + // Queue this ConcreteProcess for starting by the ProcessManager. + processManager.startExecuting(this); + } + + // Wait until ProcessManager has started us. + synchronized (this) + { + while (state == STATE_WAITING_TO_START) + { + try + { + wait(); + } + catch (InterruptedException ie) + { + // FIXME: What to do when interrupted while blocking in a constructor? + // Ignore. + } + } + } + + // If there was a problem, re-throw it. + if (exception != null) + { + if (exception instanceof IOException) + { + IOException ioe = new IOException(exception.toString()); + ioe.initCause(exception); + throw ioe; + } + + // Not an IOException. Something bad happened. + InternalError ie = new InternalError(exception.toString()); + ie.initCause(exception); + throw ie; + } + + // If we get here, all is well, the Process has started. } - // The process id. This is cast to a pid_t on the native side. + private String[] progarray; + private String[] envp; + private File dir; + + /** Set by the ProcessManager on problems starting. */ + private Throwable exception; + + /** The process id. This is cast to a pid_t on the native side. */ private long pid; - // True when child has exited. - private boolean hasExited; + // FIXME: Why doesn't the friend declaration in ConcreteProcess.h + // allow ConcreteProcess$ProcessManager native code access these + // when they are private? + + /** Before the process is forked. */ + static final int STATE_WAITING_TO_START = 0; + + /** After the fork. */ + static final int STATE_RUNNING = 1; + + /** After exit code has been collected. */ + static final int STATE_TERMINATED = 2; - // The exit status, if the child has exited. - private int status; + /** One of STATE_WAITING_TO_START, STATE_RUNNING, STATE_TERMINATED. */ + int state; - // The streams. + /** The exit status, if the child has exited. */ + int status; + + /** The streams. */ private InputStream errorStream; private InputStream inputStream; private OutputStream outputStream; + + /** InputStreams obtained by the user. Not null indicates that the + * user has obtained the stream. + */ + private InputStream returnedErrorStream; + private InputStream returnedInputStream; + + /** + * Lock Object for all processManager related locking. + */ + private static Object queueLock = new Object(); + private static ProcessManager processManager; + + static class EOFInputStream extends InputStream + { + static EOFInputStream instance = new EOFInputStream(); + public int read() + { + return -1; + } + } } diff --git a/libjava/java/lang/Runtime.java b/libjava/java/lang/Runtime.java index 749aa36ac03..b6b8c4f171a 100644 --- a/libjava/java/lang/Runtime.java +++ b/libjava/java/lang/Runtime.java @@ -1,5 +1,5 @@ /* Runtime.java -- access to the VM process - Copyright (C) 1998, 2002, 2003 Free Software Foundation + Copyright (C) 1998, 2002, 2003, 2004 Free Software Foundation This file is part of GNU Classpath. @@ -734,8 +734,11 @@ public class Runtime * @param dir the directory to use, may be null * @return the newly created process * @throws NullPointerException if cmd or env have null elements + * @throws IOException if the exec fails */ - native Process execInternal(String[] cmd, String[] env, File dir); + native Process execInternal(String[] cmd, String[] env, File dir) + throws IOException; + /** * Get the system properties. This is done here, instead of in System, diff --git a/libjava/java/lang/natPosixProcess.cc b/libjava/java/lang/natPosixProcess.cc index fb97020e9a0..f6b6f67baf5 100644 --- a/libjava/java/lang/natPosixProcess.cc +++ b/libjava/java/lang/natPosixProcess.cc @@ -21,12 +21,16 @@ details. */ #include #include #include +#include +#include #include #include +#include #include #include +#include #include #include #include @@ -42,44 +46,6 @@ using gnu::java::nio::channels::FileChannelImpl; extern char **environ; -void -java::lang::ConcreteProcess::destroy (void) -{ - if (! hasExited) - { - // Really kill it. - kill ((pid_t) pid, SIGKILL); - } -} - -jint -java::lang::ConcreteProcess::waitFor (void) -{ - if (! hasExited) - { - int wstat; - int r = waitpid ((pid_t) pid, &wstat, 0); - - if (r == -1) - { - if (java::lang::Thread::interrupted()) - throw new InterruptedException (JvNewStringLatin1 (strerror - (errno))); - } - else - { - hasExited = true; - - if (WIFEXITED (wstat)) - status = WEXITSTATUS (wstat); - else - status = -1; - } - } - - return status; -} - static char * new_string (jstring string) { @@ -120,14 +86,134 @@ myclose (int &fd) fd = -1; } +// There has to be a signal handler in order to be able to +// sigwait() on SIGCHLD. The information passed is ignored as it +// will be recovered by the waitpid() call. +static void +sigchld_handler (int) +{ + // Ignore. +} + + +// Get ready to enter the main reaper thread loop. void -java::lang::ConcreteProcess::startProcess (jstringArray progarray, - jstringArray envp, - java::io::File *dir) +java::lang::ConcreteProcess$ProcessManager::init () { - using namespace java::io; + using namespace java::lang; + // Remenber our PID so other threads can kill us. + reaperPID = (jlong) pthread_self (); + + // SIGCHLD is blocked in all threads in posix-threads.cc. + // Setup the SIGCHLD handler. + struct sigaction sa; + memset (&sa, 0, sizeof (sa)); + + sa.sa_handler = sigchld_handler; + // We only want signals when the things exit. + sa.sa_flags = SA_NOCLDSTOP; + + if (-1 == sigaction (SIGCHLD, &sa, NULL)) + goto error; + + // All OK. + return; + +error: + throw new InternalError (JvNewStringUTF (strerror (errno))); +} + +void +java::lang::ConcreteProcess$ProcessManager::waitForSignal () +{ + using namespace java::lang; + + sigset_t mask; + // Wait for SIGCHLD + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + + int sig; + int c = sigwait (&mask, &sig); + + if (c != 0) + goto error; - hasExited = false; + // All OK. + return; + +error: + throw new InternalError (JvNewStringUTF (strerror (c))); +} + +jboolean java::lang::ConcreteProcess$ProcessManager::reap () +{ + using namespace java::lang; + + pid_t pid; + + for (;;) + { + // Get the return code from a dead child process. + int status; + pid = waitpid ((pid_t) - 1, &status, WNOHANG); + if (pid == -1) + { + if (errno == ECHILD) + return false; + else + goto error; + } + + if (pid == 0) + return true; // No children to wait for. + + // Look up the process in our pid map. + ConcreteProcess * process = removeProcessFromMap ((jlong) pid); + + if (process) + { + JvSynchronize sync (process); + process->status = WIFEXITED (status) ? WEXITSTATUS (status) : -1; + process->state = ConcreteProcess::STATE_TERMINATED; + process->processTerminationCleanup(); + process->notifyAll (); + } + else + { + // Unknown child. How did this happen? + fprintf (stderr, "Reaped unknown child pid = %ld\n", (long) pid); + } + } + +error: + throw new InternalError (JvNewStringUTF (strerror (errno))); +} + +void +java::lang::ConcreteProcess$ProcessManager::signalReaper () +{ + int c = pthread_kill ((pthread_t) reaperPID, SIGCHLD); + if (c == 0) + return; + // pthread_kill() failed. + throw new InternalError (JvNewStringUTF (strerror (c))); +} + +void +java::lang::ConcreteProcess::nativeDestroy () +{ + int c = kill ((pid_t) pid, SIGKILL); + if (c == 0) + return; + // kill() failed. + throw new InternalError (JvNewStringUTF (strerror (errno))); +} + +void +java::lang::ConcreteProcess::nativeSpawn () +{ + using namespace java::io; // Initialize all locals here to make cleanup simpler. char **args = NULL; @@ -142,7 +228,6 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, errp[1] = -1; msgp[0] = -1; msgp[1] = -1; - java::lang::Throwable *exc = NULL; errorStream = NULL; inputStream = NULL; outputStream = NULL; @@ -150,8 +235,7 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, try { // Transform arrays to native form. - args = (char **) _Jv_Malloc ((progarray->length + 1) - * sizeof (char *)); + args = (char **) _Jv_Malloc ((progarray->length + 1) * sizeof (char *)); // Initialize so we can gracefully recover. jstring *elts = elements (progarray); @@ -185,24 +269,32 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, // status. if (pipe (inp) || pipe (outp) || pipe (errp) || pipe (msgp) || fcntl (msgp[1], F_SETFD, FD_CLOEXEC)) - throw new IOException (JvNewStringLatin1 (strerror (errno))); + throw new IOException (JvNewStringUTF (strerror (errno))); // We create the streams before forking. Otherwise if we had an // error while creating the streams we would have run the child // with no way to communicate with it. - errorStream = new FileInputStream (new FileChannelImpl(errp[0], FileChannelImpl::READ)); - inputStream = new FileInputStream (new FileChannelImpl(inp[0], FileChannelImpl::READ)); - outputStream = new FileOutputStream (new FileChannelImpl(outp[1], FileChannelImpl::WRITE)); + errorStream = + new FileInputStream (new + FileChannelImpl (errp[0], FileChannelImpl::READ)); + inputStream = + new FileInputStream (new + FileChannelImpl (inp[0], FileChannelImpl::READ)); + outputStream = + new FileOutputStream (new FileChannelImpl (outp[1], + FileChannelImpl::WRITE)); // We don't use vfork() because that would cause the local // environment to be set by the child. - if ((pid = (jlong) fork ()) == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); - if (pid == 0) + // Use temporary for fork result to avoid dirtying an extra page. + pid_t pid_tmp; + if ((pid_tmp = fork ()) == -1) + throw new IOException (JvNewStringUTF (strerror (errno))); + + if (pid_tmp == 0) { // Child process, so remap descriptors, chdir and exec. - if (envp) { // Preserve PATH and LD_LIBRARY_PATH unless specified @@ -212,16 +304,16 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, environ = env; if (path_val && getenv ("PATH") == NULL) { - char *path_env = (char *) _Jv_Malloc (strlen (path_val) - + 5 + 1); + char *path_env = + (char *) _Jv_Malloc (strlen (path_val) + 5 + 1); strcpy (path_env, "PATH="); strcat (path_env, path_val); putenv (path_env); } if (ld_path_val && getenv ("LD_LIBRARY_PATH") == NULL) { - char *ld_path_env - = (char *) _Jv_Malloc (strlen (ld_path_val) + 16 + 1); + char *ld_path_env = + (char *) _Jv_Malloc (strlen (ld_path_val) + 16 + 1); strcpy (ld_path_env, "LD_LIBRARY_PATH="); strcat (ld_path_env, ld_path_val); putenv (ld_path_env); @@ -264,6 +356,8 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, // Parent. Close extra file descriptors and mark ours as // close-on-exec. + pid = (jlong) pid_tmp; + myclose (outp[0]); myclose (inp[1]); myclose (errp[1]); @@ -272,9 +366,9 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, char c; int r = read (msgp[0], &c, 1); if (r == -1) - throw new IOException (JvNewStringLatin1 (strerror (errno))); + throw new IOException (JvNewStringUTF (strerror (errno))); else if (r != 0) - throw new IOException (JvNewStringLatin1 (strerror (c))); + throw new IOException (JvNewStringUTF (strerror (c))); } catch (java::lang::Throwable *thrown) { @@ -324,15 +418,13 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, myclose (errp[1]); myclose (msgp[1]); - exc = thrown; + exception = thrown; } myclose (msgp[0]); cleanup (args, env, path); - if (exc != NULL) - throw exc; - else + if (exception == NULL) { fcntl (outp[1], F_SETFD, FD_CLOEXEC); fcntl (inp[0], F_SETFD, FD_CLOEXEC); diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index 03ae4535a05..0643c1a5c7b 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -1,6 +1,6 @@ // posix-threads.cc - interface between libjava and POSIX threads. -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2004 Free Software Foundation This file is part of libgcj. @@ -34,6 +34,7 @@ details. */ #include #include #include +#include // This is used to implement thread startup. struct starter @@ -332,6 +333,17 @@ _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio) #endif } +static void +block_sigchld() +{ + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + int c = pthread_sigmask (SIG_BLOCK, &mask, NULL); + if (c != 0) + throw new java::lang::InternalError (JvNewStringUTF (strerror (c))); +} + void _Jv_ThreadRegister (_Jv_Thread_t *data) { @@ -358,6 +370,8 @@ _Jv_ThreadRegister (_Jv_Thread_t *data) _Jv_self_cache[current_index].high_sp_bits = BAD_HIGH_SP_VALUE; } # endif + // Block SIGCHLD which is used in natPosixProcess.cc. + block_sigchld(); } void @@ -403,6 +417,10 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, return; data->flags |= FLAG_START; + // Block SIGCHLD which is used in natPosixProcess.cc. + // The current mask is inherited by the child thread. + block_sigchld(); + param.sched_priority = thread->getPriority(); pthread_attr_init (&attr); diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in index 0b450dfaf46..c7f88f2ba16 100644 --- a/libjava/testsuite/Makefile.in +++ b/libjava/testsuite/Makefile.in @@ -128,6 +128,7 @@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PLATFORMOBJS = @PLATFORMOBJS@ +PLATFORM_INNER_NAT_HDRS = @PLATFORM_INNER_NAT_HDRS@ RANLIB = @RANLIB@ STRIP = @STRIP@ SYSDEP_SOURCES = @SYSDEP_SOURCES@