Mercurial > emacs
annotate m4/getopt.m4 @ 112360:3215a5cff4dd
Declare some DEFVARs globally, not locally
* gtkutil.h (x_gtk_use_old_file_dialog, x_gtk_show_hidden_files)
(x_gtk_file_dialog_help_text, x_gtk_whole_detached_tool_bar):
Declare.
* gtkutil.c (xg_uses_old_file_dialog):
(xg_get_file_with_chooser):
(xg_tool_bar_detach_callback): Don't redeclare globals.
author | Tom Tromey <tromey@redhat.com> |
---|---|
date | Tue, 18 Jan 2011 10:28:28 -0700 |
parents | d3c691ea0839 |
children | c81ff7082a9a |
rev | line source |
---|---|
112311 | 1 # getopt.m4 serial 32 |
2 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
3 dnl This file is free software; the Free Software Foundation |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
4 dnl gives unlimited permission to copy and/or distribute it, |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
5 dnl with or without modifications, as long as this notice is preserved. |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
6 |
112311 | 7 # Request a POSIX compliant getopt function. |
8 AC_DEFUN([gl_FUNC_GETOPT_POSIX], | |
9 [ | |
10 m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) | |
11 AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
12 gl_GETOPT_IFELSE([ | |
13 gl_REPLACE_GETOPT | |
14 ], | |
15 []) | |
16 ]) | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
17 |
112311 | 18 # Request a POSIX compliant getopt function with GNU extensions (such as |
19 # options with optional arguments) and the functions getopt_long, | |
20 # getopt_long_only. | |
21 AC_DEFUN([gl_FUNC_GETOPT_GNU], | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
22 [ |
112311 | 23 m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) |
24 | |
25 AC_REQUIRE([gl_FUNC_GETOPT_POSIX]) | |
26 ]) | |
27 | |
28 # Request the gnulib implementation of the getopt functions unconditionally. | |
29 # argp.m4 uses this. | |
30 AC_DEFUN([gl_REPLACE_GETOPT], | |
31 [ | |
32 dnl Arrange for getopt.h to be created. | |
33 gl_GETOPT_SUBSTITUTE_HEADER | |
34 dnl Arrange for unistd.h to include getopt.h. | |
35 GNULIB_UNISTD_H_GETOPT=1 | |
36 dnl Arrange to compile the getopt implementation. | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
37 AC_LIBOBJ([getopt]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
38 AC_LIBOBJ([getopt1]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
39 gl_PREREQ_GETOPT |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
40 ]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
41 |
112311 | 42 # emacs' configure.in uses this. |
43 AC_DEFUN([gl_GETOPT_IFELSE], | |
44 [ | |
45 AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) | |
46 AS_IF([test -n "$gl_replace_getopt"], [$1], [$2]) | |
47 ]) | |
48 | |
49 # Determine whether to replace the entire getopt facility. | |
50 AC_DEFUN([gl_GETOPT_CHECK_HEADERS], | |
51 [ | |
52 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | |
53 AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON | |
54 | |
55 dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. | |
56 AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) | |
57 | |
58 gl_CHECK_NEXT_HEADERS([getopt.h]) | |
59 AC_CHECK_HEADERS_ONCE([getopt.h]) | |
60 if test $ac_cv_header_getopt_h = yes; then | |
61 HAVE_GETOPT_H=1 | |
62 else | |
63 HAVE_GETOPT_H=0 | |
64 fi | |
65 AC_SUBST([HAVE_GETOPT_H]) | |
66 | |
67 gl_replace_getopt= | |
68 | |
69 dnl Test whether <getopt.h> is available. | |
70 if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then | |
71 AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) | |
72 fi | |
73 | |
74 dnl Test whether the function getopt_long is available. | |
75 if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then | |
76 AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) | |
77 fi | |
78 | |
79 dnl BSD getopt_long uses an incompatible method to reset option processing. | |
80 dnl Existence of the variable, in and of itself, is not a reason to replace | |
81 dnl getopt, but knowledge of the variable is needed to determine how to | |
82 dnl reset and whether a reset reparses the environment. | |
83 dnl Solaris supports neither optreset nor optind=0, but keeps no state that | |
84 dnl needs a reset beyond setting optind=1; detect Solaris by getopt_clip. | |
85 if test -z "$gl_replace_getopt"; then | |
86 AC_CHECK_DECLS([optreset], [], | |
87 [AC_CHECK_DECLS([getopt_clip], [], [], | |
88 [[#include <getopt.h>]]) | |
89 ], | |
90 [[#include <getopt.h>]]) | |
91 fi | |
92 | |
93 dnl mingw's getopt (in libmingwex.a) does weird things when the options | |
94 dnl strings starts with '+' and it's not the first call. Some internal state | |
95 dnl is left over from earlier calls, and neither setting optind = 0 nor | |
96 dnl setting optreset = 1 get rid of this internal state. | |
97 dnl POSIX is silent on optind vs. optreset, so we allow either behavior. | |
98 dnl POSIX 2008 does not specify leading '+' behavior, but see | |
99 dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on | |
100 dnl the next version of POSIX. For now, we only guarantee leading '+' | |
101 dnl behavior with getopt-gnu. | |
102 if test -z "$gl_replace_getopt"; then | |
103 AC_CACHE_CHECK([whether getopt is POSIX compatible], | |
104 [gl_cv_func_getopt_posix], | |
105 [ | |
106 dnl This test fails on mingw and succeeds on many other platforms. | |
107 AC_RUN_IFELSE([AC_LANG_SOURCE([[ | |
108 #include <unistd.h> | |
109 #include <stdlib.h> | |
110 #include <string.h> | |
111 | |
112 #if !HAVE_DECL_OPTRESET && !HAVE_DECL_GETOPT_CLIP | |
113 # define OPTIND_MIN 0 | |
114 #else | |
115 # define OPTIND_MIN 1 | |
116 #endif | |
117 | |
118 int | |
119 main () | |
120 { | |
121 { | |
122 int argc = 0; | |
123 char *argv[10]; | |
124 int c; | |
125 | |
126 argv[argc++] = "program"; | |
127 argv[argc++] = "-a"; | |
128 argv[argc++] = "foo"; | |
129 argv[argc++] = "bar"; | |
130 argv[argc] = NULL; | |
131 optind = OPTIND_MIN; | |
132 opterr = 0; | |
133 | |
134 c = getopt (argc, argv, "ab"); | |
135 if (!(c == 'a')) | |
136 return 1; | |
137 c = getopt (argc, argv, "ab"); | |
138 if (!(c == -1)) | |
139 return 2; | |
140 if (!(optind == 2)) | |
141 return 3; | |
142 } | |
143 /* Some internal state exists at this point. */ | |
144 { | |
145 int argc = 0; | |
146 char *argv[10]; | |
147 int c; | |
148 | |
149 argv[argc++] = "program"; | |
150 argv[argc++] = "donald"; | |
151 argv[argc++] = "-p"; | |
152 argv[argc++] = "billy"; | |
153 argv[argc++] = "duck"; | |
154 argv[argc++] = "-a"; | |
155 argv[argc++] = "bar"; | |
156 argv[argc] = NULL; | |
157 optind = OPTIND_MIN; | |
158 opterr = 0; | |
159 | |
160 c = getopt (argc, argv, "+abp:q:"); | |
161 if (!(c == -1)) | |
162 return 4; | |
163 if (!(strcmp (argv[0], "program") == 0)) | |
164 return 5; | |
165 if (!(strcmp (argv[1], "donald") == 0)) | |
166 return 6; | |
167 if (!(strcmp (argv[2], "-p") == 0)) | |
168 return 7; | |
169 if (!(strcmp (argv[3], "billy") == 0)) | |
170 return 8; | |
171 if (!(strcmp (argv[4], "duck") == 0)) | |
172 return 9; | |
173 if (!(strcmp (argv[5], "-a") == 0)) | |
174 return 10; | |
175 if (!(strcmp (argv[6], "bar") == 0)) | |
176 return 11; | |
177 if (!(optind == 1)) | |
178 return 12; | |
179 } | |
180 /* Detect MacOS 10.5, AIX 7.1 bug. */ | |
181 { | |
182 char *argv[3] = { "program", "-ab", NULL }; | |
183 optind = OPTIND_MIN; | |
184 opterr = 0; | |
185 if (getopt (2, argv, "ab:") != 'a') | |
186 return 13; | |
187 if (getopt (2, argv, "ab:") != '?') | |
188 return 14; | |
189 if (optopt != 'b') | |
190 return 15; | |
191 if (optind != 2) | |
192 return 16; | |
193 } | |
194 | |
195 return 0; | |
196 } | |
197 ]])], | |
198 [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no], | |
199 [case "$host_os" in | |
200 mingw*) gl_cv_func_getopt_posix="guessing no";; | |
201 darwin* | aix*) gl_cv_func_getopt_posix="guessing no";; | |
202 *) gl_cv_func_getopt_posix="guessing yes";; | |
203 esac | |
204 ]) | |
205 ]) | |
206 case "$gl_cv_func_getopt_posix" in | |
207 *no) gl_replace_getopt=yes ;; | |
208 esac | |
209 fi | |
210 | |
211 if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then | |
212 AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], | |
213 [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the | |
214 # optstring is necessary for programs like m4 that have POSIX-mandated | |
215 # semantics for supporting options interspersed with files. | |
216 # Also, since getopt_long is a GNU extension, we require optind=0. | |
217 # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; | |
218 # so take care to revert to the correct (non-)export state. | |
219 dnl GNU Coding Standards currently allow awk but not env; besides, env | |
220 dnl is ambiguous with environment values that contain newlines. | |
221 gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' | |
222 case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in | |
223 xx) gl_had_POSIXLY_CORRECT=exported ;; | |
224 x) gl_had_POSIXLY_CORRECT=yes ;; | |
225 *) gl_had_POSIXLY_CORRECT= ;; | |
226 esac | |
227 POSIXLY_CORRECT=1 | |
228 export POSIXLY_CORRECT | |
229 AC_RUN_IFELSE( | |
230 [AC_LANG_PROGRAM([[#include <getopt.h> | |
231 #include <stddef.h> | |
232 #include <string.h> | |
233 ]], [[ | |
234 int result = 0; | |
235 /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, | |
236 and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, | |
237 OSF/1 5.1, Solaris 10. */ | |
238 { | |
239 char *myargv[3]; | |
240 myargv[0] = "conftest"; | |
241 myargv[1] = "-+"; | |
242 myargv[2] = 0; | |
243 opterr = 0; | |
244 if (getopt (2, myargv, "+a") != '?') | |
245 result |= 1; | |
246 } | |
247 /* This code succeeds on glibc 2.8, mingw, | |
248 and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, | |
249 IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ | |
250 { | |
251 char *argv[] = { "program", "-p", "foo", "bar", NULL }; | |
252 | |
253 optind = 1; | |
254 if (getopt (4, argv, "p::") != 'p') | |
255 result |= 2; | |
256 else if (optarg != NULL) | |
257 result |= 4; | |
258 else if (getopt (4, argv, "p::") != -1) | |
259 result |= 6; | |
260 else if (optind != 2) | |
261 result |= 8; | |
262 } | |
263 /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ | |
264 { | |
265 char *argv[] = { "program", "foo", "-p", NULL }; | |
266 optind = 0; | |
267 if (getopt (3, argv, "-p") != 1) | |
268 result |= 16; | |
269 else if (getopt (3, argv, "-p") != 'p') | |
270 result |= 32; | |
271 } | |
272 /* This code fails on glibc 2.11. */ | |
273 { | |
274 char *argv[] = { "program", "-b", "-a", NULL }; | |
275 optind = opterr = 0; | |
276 if (getopt (3, argv, "+:a:b") != 'b') | |
277 result |= 64; | |
278 else if (getopt (3, argv, "+:a:b") != ':') | |
279 result |= 64; | |
280 } | |
281 return result; | |
282 ]])], | |
283 [gl_cv_func_getopt_gnu=yes], | |
284 [gl_cv_func_getopt_gnu=no], | |
285 [dnl Cross compiling. Guess based on host and declarations. | |
286 case $host_os:$ac_cv_have_decl_optreset in | |
287 *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; | |
288 *:yes) gl_cv_func_getopt_gnu=no;; | |
289 *) gl_cv_func_getopt_gnu=yes;; | |
290 esac | |
291 ]) | |
292 case $gl_had_POSIXLY_CORRECT in | |
293 exported) ;; | |
294 yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; | |
295 *) AS_UNSET([POSIXLY_CORRECT]) ;; | |
296 esac | |
297 ]) | |
298 if test "$gl_cv_func_getopt_gnu" = "no"; then | |
299 gl_replace_getopt=yes | |
300 fi | |
301 fi | |
302 ]) | |
303 | |
304 # emacs' configure.in uses this. | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
305 AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
306 [ |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
307 GETOPT_H=getopt.h |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
308 AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
309 [Define to rpl_ if the getopt replacement functions and variables |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
310 should be used.]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
311 AC_SUBST([GETOPT_H]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
312 ]) |
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
313 |
112311 | 314 # Prerequisites of lib/getopt*. |
315 # emacs' configure.in uses this. | |
316 AC_DEFUN([gl_PREREQ_GETOPT], | |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
317 [ |
112311 | 318 AC_CHECK_DECLS_ONCE([getenv]) |
64639
385af3e03206
Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
319 ]) |