Subject: bug#10520: [platform-testers] Guile 2.0.4 release imminent

From: [email-masked] (Ludovic Courtès)
Date: Tue, 17 Jan 2012 00:08:13 +0100

retitle 2.0.3+ portability issues
thanks

Hi Bruno,

Thanks for the quick and detailed report!

Bruno Haible <[email-masked]> skribis:

[...]

>     How about changing that section to mention
>       1) that pkg-config ought to be installed before libffi and libgc?
>       2) that usually setting PKG_CONFIG_PATH to include
>            $BDW_LIBDIR/pkgconfig:$LIBFFI_LIBDIR/pkgconfig:/usr/lib/pkgconfig
>          will work,
>       3) the BDW_GC_CFLAGS, BDW_GC_LIBS, LIBFFI_CFLAGS, LIBFFI_LIBS
>          approach as a last resort.

I’ve done something along these lines:

  http://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=ad17b1551241a0fbaa9f9557016cbe440cc6338b

> 2) On Linux/glibc/PowerPC, MacOS X 10.5, Cygwin, I happen not to have
> pkg-config installed. But I have installed all the other packages!
> The configuration fails:

[...]

> Isn't this a *gratuitous* build dependency?

Isn’t this a gratuitous troll?  ;-)

Seriously, I understand your frustration.  Yet, we use upstream’s method
to check for package availability, whether we like it or not.

> I won't install pkg-config. If you want me to test guile on Linux/PowerPC,
> MacOS X 10.5, Cygwin, and mingw, provide an alternative.

One can define $BDW_GC_LIB, etc. as described in the manual.  Would that
work for you?

> 4) On Solaris 11 (both x86 and x86_64),

Do you mean OpenIndiana or something?

> the compilation fails in the directory libguile:
>
>   CC     libguile_2.0_la-filesys.lo
> filesys.c: In function 'scm_readdir':
> filesys.c:1716:34: error: 'DIR' has no member named 'dd_fd'
> gmake[3]: *** [libguile_2.0_la-filesys.lo] Error 1
>
> Instead of whacking your own implementation of dirfd, why not just
> use the 'dirfd' module from gnulib? (Actually Solaris 11 has dirfd(),
> it is declared as a function in <dirent.h>.) See
> http://www.gnu.org/software/gnulib/manual/html_node/dirfd.html

Done:

  http://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=f0007cade095c5a2878ebbb8ea8c9b40810e4509

Funnily, Solaris 2.10 (as available on the OpenCSW machines) doesn’t
have this problem.

> 5) On OpenBSD 4.6/SPARC64, compilation failure in libguile directory:
>
>   CC     libguile_2.0_la-i18n.lo
> i18n.c: In function `define_langinfo_items':
> i18n.c:1747: error: `ERA' undeclared (first use in this function)
> i18n.c:1747: error: (Each undeclared identifier is reported only once
> i18n.c:1747: error: for each function it appears in.)
> i18n.c:1748: error: `ERA_D_FMT' undeclared (first use in this function)
> i18n.c:1749: error: `ERA_D_T_FMT' undeclared (first use in this function)
> i18n.c:1751: error: `ERA_T_FMT' undeclared (first use in this function)
> i18n.c:1753: error: `ALT_DIGITS' undeclared (first use in this function)
> gmake[3]: *** [libguile_2.0_la-i18n.lo] Error 1

This was fixed in the meantime:

  http://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=1bd9a697b186c9a2c84f7c1028c9292f779ec79a

> This could be easily fixed by including the gnulib module 'nl_langinfo'. See
> http://www.gnu.org/software/gnulib/manual/html_node/nl_005flanginfo.html

I considered using it some time ago but decided not to, as the comment
in i18n.c says:

   Note: We don't use Gnulib's `nl_langinfo' module because it's currently not
   as complete as the compatibility hacks in `i18n.scm'.  */

> 6) On Linux/IA-64, compilation failure in libguile directory:
>
>   CC     libguile_2.0_la-threads.lo
> threads.c: In function 'guilify_self_1':
> threads.c:554: error: 'struct GC_stack_base' has no member named 'reg'
> make[3]: *** [libguile_2.0_la-threads.lo] Error 1
>
> On this platform, gc/gc.h contains this definition:
>
> /* Structure representing the base of a thread stack.  On most          */
> /* platforms this contains just a single address.                       */
> struct GC_stack_base {
>   void * mem_base; /* Base of memory stack. */
> # if defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
>     void * reg_base; /* Base of separate register stack. */
> # endif
> };
>
> It looks like a typo in threads.c:554. Fix: s/reg-base/reg_base/

Indeed!

  http://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=bbd210517f12fdabb51e0dc2527ba186bb1ba549

> 7) On NetBSD 5.1/x86_64, build failure:

Will investigate later.

> 8) On Linux/hppa and Linux/SPARC32 and Linux/IA-64, build failure in the
> libguile directory:
>
>   SNARF  socket.doc
>   SNARF  regex-posix.doc
>   GEN    guile-procedures.texi
> /bin/sh: line 1:  1022 Broken pipe             cat alist.doc arbiters.doc array-handle.doc array-map.doc arrays.doc async.doc backtrace.doc boolean.doc bitvectors.doc bytevectors.doc chars.doc control.doc continuations.doc debug.doc deprecated.doc deprecation.doc dynl.doc dynwind.doc eq.doc error.doc eval.doc evalext.doc expand.doc extensions.doc feature.doc filesys.doc fluids.doc foreign.doc fports.doc gc-malloc.doc gc.doc gettext.doc generalized-arrays.doc generalized-vectors.doc goops.doc gsubr.doc guardians.doc hash.doc hashtab.doc hooks.doc i18n.doc init.doc ioext.doc keywords.doc list.doc load.doc macros.doc mallocs.doc memoize.doc modules.doc numbers.doc objprop.doc options.doc pairs.doc ports.doc print.doc procprop.doc procs.doc promises.doc r6rs-ports.doc random.doc rdelim.doc read.doc root.doc rw.doc scmsigs.doc script.doc simpos.doc smob.doc sort.doc srcprop.doc srfi-1.doc srfi-4.doc srfi-13.doc srfi-14.doc srfi-60.doc stackchk.doc stacks.doc stime.doc strings.doc strorder.doc strports.doc struct.doc symbols.doc threads.doc throw.doc trees.doc uniform.doc values.doc variable.doc vectors.doc version.doc vports.doc weaks.doc dynl.doc posix.doc net_db.doc socket.doc regex-posix.doc
>       1023 Segmentation fault      | GUILE_AUTO_COMPILE=0 ../meta/uninstalled-env guild snarf-check-and-output-texi > guile-procedures.texi
> make[3]: *** [guile-procedures.texi] Error 1

I reproduced the problem on SPARC64 and am investigating (2.0.1 works
well on this platform, so this looks like a regression.)

> 9) Test failure on Linux/glibc/i386 (32-bit build on a x86_64 machine):
>
> FAIL: gc.test: gc: Lexical vars are collectable

This is a known “problem”, and harmless.

> 10) Linux/glibc/x86_64
>
> All tests passed.
>
> (This must be the platform that all guile developers use, I guess?)

Heheh.

Thanks,
Ludo’.