* Charles Wilson wrote on Fri, Apr 20, 2007 at 12:25:27AM CEST: > Ralf suggests testing this patch on solaris. I can't, but if Ralf does then > I expect that the results will be the same as (4) and (5).
Done. AS_CASE was a problem, as it's not in Autoconf-2.59. While fixing, I noted that we can avoid all the forking by IFS munging. How does this fare for you and do you see issues with it? I hope that it also fixes the failures with Autoconf-2.59 and Automake-1.9.x on MinGW/MSYS. Can we rely on "uname -r" on Cygwin to always return NN.NN.NN[.-].* with NN being runs of digits? Anyway I've made the patch err on the side of caution when cross compiling, for now. I guess we can change that sometime in the future. Cheers, Ralf 2007-04-24 Charles Wilson <[EMAIL PROTECTED]> Ralf Wildenhues <[EMAIL PROTECTED]> * libltdl/argz_.h: ensure error_t definition is obtained in same mechanism system argz.h would have. * libltdl/libltdl/lt__glibc.h: also detect if SYSTEM_ARGZ_IS_BROKEN when determining whether to re#def argz* functions. * libltdl/m4/argz.m4 (gl_FUNC_ARGZ): add new test to check if $host's argz facilities are known bad. Err on the side of caution if cross-compiling. Index: libltdl/argz_.h =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/argz_.h,v retrieving revision 1.7 diff -u -r1.7 argz_.h --- libltdl/argz_.h 25 Mar 2007 12:12:42 -0000 1.7 +++ libltdl/argz_.h 24 Apr 2007 20:23:36 -0000 @@ -1,6 +1,6 @@ /* lt__argz.h -- internal argz interface for non-glibc systems - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2007 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 NOTE: The canonical source of this file is maintained with the @@ -32,6 +32,8 @@ #define LT__ARGZ_H 1 #include <stdlib.h> +#define __need_error_t +#include <errno.h> #include <sys/types.h> #if defined(LTDL) Index: libltdl/libltdl/lt__glibc.h =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/libltdl/lt__glibc.h,v retrieving revision 1.8 diff -u -r1.8 lt__glibc.h --- libltdl/libltdl/lt__glibc.h 25 Mar 2007 12:12:43 -0000 1.8 +++ libltdl/libltdl/lt__glibc.h 24 Apr 2007 20:23:37 -0000 @@ -1,6 +1,6 @@ /* lt__glibc.h -- support for non glibc environments - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 NOTE: The canonical source of this file is maintained with the @@ -37,7 +37,7 @@ # include <config.h> #endif -#if !defined(HAVE_ARGZ_H) +#if !defined(HAVE_ARGZ_H) || defined(SYSTEM_ARGZ_IS_BROKEN) /* Redefine any glibc symbols we reimplement to import the implementations into our lt__ namespace so we don't ever clash with the system library if our clients use argz_* Index: libltdl/m4/argz.m4 =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/m4/argz.m4,v retrieving revision 1.4 diff -u -r1.4 argz.m4 --- libltdl/m4/argz.m4 25 Mar 2007 12:12:43 -0000 1.4 +++ libltdl/m4/argz.m4 24 Apr 2007 20:32:02 -0000 @@ -1,13 +1,13 @@ # Portability macros for glibc argz. -*- Autoconf -*- # -# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. # Written by Gary V. Vaughan <[EMAIL PROTECTED]> # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# serial 4 argz.m4 +# serial 5 argz.m4 AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ @@ -27,6 +27,50 @@ ARGZ_H= AC_CHECK_FUNCS([argz_append argz_create_sep argz_insert argz_next \ argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) + +dnl if have system argz functions, allow forced use of +dnl libltdl-supplied implementation (and default to do so +dnl on "known bad" systems). Could use a runtime check, but +dnl (a) detecting malloc issues is notoriously unreliable +dnl (b) only known system that declares argz functions, +dnl provides them, yet they are broken, is cygwin +dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) +dnl So, it's more straightforward simply to special case +dnl this for known bad systems. +AS_IF([test -z "$ARGZ_H"], + [AC_CACHE_CHECK( + [if argz actually works], + [lt_cv_sys_argz_works], + [case $host_os in #( + *cygwin*) + lt_cv_sys_argz_works=no + if test "$cross_compiling" != no; then + lt_cv_sys_argz_works="guessing no" + else + save_IFS=$IFS + IFS=-. + set x `uname -r` + IFS=$save_IFS + lt_os_major=$[]2 + lt_os_minor=$[]3 + lt_os_micro=$[]4 + if test "$lt_os_major" -gt 1 || + { test "$lt_os_major" -eq 1 && + { test "$lt_os_minor" -gt 5 || + { test "$lt_os_minor" -eq 5 && + test "$lt_os_micro" -gt 24; }; }; }; then + lt_cv_sys_argz_works=yes + fi + fi + ;; #( + *) lt_cv_sys_argz_works=yes ;; + esac]) + AS_IF([test $lt_cv_sys_argz_works != yes], + [AC_DEFINE([SYSTEM_ARGZ_IS_BROKEN], 1, + [This value is set to 1 to indicate that the system argz facility does not work]) + ARGZ_H=argz.h + AC_LIBOBJ([argz])])]) + AC_SUBST([ARGZ_H]) ])