This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Anon build failure (usleep rtn value detection failure) & a fix.



Just checked out the latest anon version & tried to build.  Got:

   /bin/sh ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I.. -I./..   -O2 -g -pg -Wall -Wpointer-arith -Wmissing-prototypes -c scmsigs.c
   gcc -DHAVE_CONFIG_H -I. -I. -I. -I.. -I./.. -O2 -g -pg -Wall -Wpointer-arith -Wmissing-prototypes -Wp,-MD,.deps/scmsigs.p -c scmsigs.c
   scmsigs.c: In function `scm_usleep':
   scmsigs.c:377: void value not ignored as it ought to be
   scmsigs.c:370: warning: `j' might be used uninitialized in this function
   make[1]: *** [scmsigs.lo] Error 1
   make[1]: Leaving directory `/home/hjstein/remote-cvs-pkgs/anon/guile-core/libguile'
   make: *** [all-recursive] Error 1

Checking log messages for scmsigs.c shows the latest version is 1.17
which has:

   revision 1.17
   date: 1998/10/12 21:08:38;  author: jimb;  state: Exp;  lines: +2 -2
   The argument type of usleep varies from system to system,
   as does the return type.  We really shouldn't be redefining usleep
   at all, but I don't have time to clean that up before the 1.3.
   release.  It's on the schedule for afterwards.  (Thanks to Julian
   Satchell.)
   * coop.c (usleep): Use USLEEP_ARG_TYPE in prototype and
   definition.
   * scmsigs.c (usleep): Use USLEEP_ARG_TYPE in prototype.
   * scmconfig.h: Regenerated.

Seems like configure didn't pick up that usleep has type void on my
system.

It seems that the problem is the test for 'void usleep' in configure.in:

   ### On some systems usleep has no return value.  Of course, we
   ### shouldn't be doing anything like this at all...
   AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
     [AC_EGREP_HEADER(changequote(<, >)<void[ ][ ]*usleep>changequote([, ]),
		      /usr/include/unistd.h,
		      [guile_cv_func_usleep_return_type=void],
		      [guile_cv_func_usleep_return_type=int])])
   case "$guile_cv_func_usleep_return_type" in
     "void" )
       AC_DEFINE(USLEEP_RETURNS_VOID)
     ;;
   esac

On my system (Linux, RH 4.2, ...) the header in question has a tab btw
the void & the usleep.

Using [[:space:]] instead of [ ] fixes it, but I don't know how
portable that is.  I would have done [ 	] (where the 1st char in [] is
a space & the second is a tab) but I didn't think it would be so
portable/readable either.

Here's a patch:

===================================================================
RCS file: /egcs/carton/cvsfiles/guile/guile-core/configure,v
retrieving revision 1.89
diff -C4 -r1.89 configure
*** configure   1998/10/12 21:08:03     1.89
--- configure   1998/10/13 11:13:04
***************
*** 3198,3206 ****
  #include "confdefs.h"
  #include </usr/include/unistd.h>
  EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "void[ ][ ]*usleep" >/dev/null 2>&1; then
    rm -rf conftest*
    guile_cv_func_usleep_return_type=void
  else
    rm -rf conftest*
--- 3198,3206 ----
  #include "confdefs.h"
  #include </usr/include/unistd.h>
  EOF
  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   egrep "void[[:space:]][[:space:]]*usleep" >/dev/null 2>&1; then
    rm -rf conftest*
    guile_cv_func_usleep_return_type=void
  else
    rm -rf conftest*
***************
*** 5077,5084 ****
--- 5077,5085 ----
  fi; done
  
  EOF
  cat >> $CONFIG_STATUS <<EOF
+ 
  
  EOF
  cat >> $CONFIG_STATUS <<\EOF
  test -z "$CONFIG_HEADERS" || echo timestamp > libguile/stamp-h
Index: configure.in
===================================================================
RCS file: /egcs/carton/cvsfiles/guile/guile-core/configure.in,v
retrieving revision 1.66
diff -C4 -r1.66 configure.in
*** configure.in        1998/10/12 21:08:17     1.66
--- configure.in        1998/10/13 11:13:06
***************
*** 135,143 ****
  
  ### On some systems usleep has no return value.  Of course, we
  ### shouldn't be doing anything like this at all...
  AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
!   [AC_EGREP_HEADER(changequote(<, >)<void[ ][ ]*usleep>changequote([, ]),
                     /usr/include/unistd.h,
                   [guile_cv_func_usleep_return_type=void],
                   [guile_cv_func_usleep_return_type=int])])
  case "$guile_cv_func_usleep_return_type" in
--- 135,143 ----
  
  ### On some systems usleep has no return value.  Of course, we
  ### shouldn't be doing anything like this at all...
  AC_CACHE_CHECK([return type of usleep], guile_cv_func_usleep_return_type,
!   [AC_EGREP_HEADER(changequote(<, >)<void[[:space:]][[:space:]]*usleep>changeq
uote([, ]),
                     /usr/include/unistd.h,
                   [guile_cv_func_usleep_return_type=void],
                   [guile_cv_func_usleep_return_type=int])])
  case "$guile_cv_func_usleep_return_type" in