changeset 5838:dcdcb5e92aa2

* getopt.m4 (gl_GETOPT): Check for Solaris 10 bug, not decl, when possible.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 10 May 2005 19:11:00 +0000
parents 0149cbf8daa5
children 7e3d834a70c0
files m4/ChangeLog m4/getopt.m4
diffstat 2 files changed, 27 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-10  Derek Price  <derek@ximbiot.com>
+
+	* getopt.m4 (gl_GETOPT): Check for Solaris 10 bug, not decl, when
+	possible.
+
 2005-05-10  Simon Josefsson  <jas@extundo.com>
 
 	* getaddrinfo.m4: Look in libnsl/libsocket for getaddrinfo, from
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,4 +1,4 @@
-# getopt.m4 serial 8
+# getopt.m4 serial 9
 dnl Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,8 +39,27 @@
     dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
     dnl option string (as of 2005-05-05).
     if test -z "$GETOPT_H"; then
-      AC_CHECK_DECL([getopt_clip], [GETOPT_H=getopt.h], [],
-	[#include <getopt.h>])
+      AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_gnu_getopt],
+      [AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([#include <getopt.h>],
+	   [[
+	     char *myargv[3];
+	     myargv[0] = "conftest";
+	     myargv[1] = "-+";
+	     myargv[2] = 0;
+	     return getopt (2, myargv, "+a") != '?';
+           ]])],
+        [gl_cv_func_gnu_getopt=yes],
+        [gl_cv_func_gnu_getopt=no],
+        [dnl cross compiling - pessimistically guess based on decls
+         dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
+         dnl option string (as of 2005-05-05).
+         AC_CHECK_DECL([getopt_clip],
+	   [gl_cv_func_gnu_getopt=no], [gl_cv_func_gnu_getopt=yes],
+	   [#include <getopt.h>])])])
+      if test "$gl_cv_func_gnu_getopt" = "no"; then
+	GETOPT_H=getopt.h
+      fi
     fi
 
     if test -n "$GETOPT_H"; then