1*00b67f09SDavid van Moolenbroekdnl 2*00b67f09SDavid van Moolenbroekdnl Automated Testing Framework (atf) 3*00b67f09SDavid van Moolenbroekdnl 4*00b67f09SDavid van Moolenbroekdnl Copyright (c) 2007 The NetBSD Foundation, Inc. 5*00b67f09SDavid van Moolenbroekdnl All rights reserved. 6*00b67f09SDavid van Moolenbroekdnl 7*00b67f09SDavid van Moolenbroekdnl Redistribution and use in source and binary forms, with or without 8*00b67f09SDavid van Moolenbroekdnl modification, are permitted provided that the following conditions 9*00b67f09SDavid van Moolenbroekdnl are met: 10*00b67f09SDavid van Moolenbroekdnl 1. Redistributions of source code must retain the above copyright 11*00b67f09SDavid van Moolenbroekdnl notice, this list of conditions and the following disclaimer. 12*00b67f09SDavid van Moolenbroekdnl 2. Redistributions in binary form must reproduce the above copyright 13*00b67f09SDavid van Moolenbroekdnl notice, this list of conditions and the following disclaimer in the 14*00b67f09SDavid van Moolenbroekdnl documentation and/or other materials provided with the distribution. 15*00b67f09SDavid van Moolenbroekdnl 16*00b67f09SDavid van Moolenbroekdnl THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*00b67f09SDavid van Moolenbroekdnl CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*00b67f09SDavid van Moolenbroekdnl INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*00b67f09SDavid van Moolenbroekdnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*00b67f09SDavid van Moolenbroekdnl IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*00b67f09SDavid van Moolenbroekdnl DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*00b67f09SDavid van Moolenbroekdnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*00b67f09SDavid van Moolenbroekdnl GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*00b67f09SDavid van Moolenbroekdnl INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*00b67f09SDavid van Moolenbroekdnl IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*00b67f09SDavid van Moolenbroekdnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*00b67f09SDavid van Moolenbroekdnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*00b67f09SDavid van Moolenbroekdnl 29*00b67f09SDavid van Moolenbroek 30*00b67f09SDavid van MoolenbroekAC_DEFUN([ATF_MODULE_APPLICATION], [ 31*00b67f09SDavid van Moolenbroek ATF_CHECK_STD_VSNPRINTF 32*00b67f09SDavid van Moolenbroek 33*00b67f09SDavid van Moolenbroek AC_CACHE_CHECK( 34*00b67f09SDavid van Moolenbroek [whether getopt allows a + sign for POSIX behavior], 35*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_plus], [ 36*00b67f09SDavid van Moolenbroek AC_LANG_PUSH([C]) 37*00b67f09SDavid van Moolenbroek AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdlib.h> 38*00b67f09SDavid van Moolenbroek#include <string.h> 39*00b67f09SDavid van Moolenbroek#include <unistd.h>], [ 40*00b67f09SDavid van Moolenbroek int argc = 4; 41*00b67f09SDavid van Moolenbroek char* argv@<:@5@:>@ = { 42*00b67f09SDavid van Moolenbroek strdup("conftest"), 43*00b67f09SDavid van Moolenbroek strdup("-+"), 44*00b67f09SDavid van Moolenbroek strdup("-a"), 45*00b67f09SDavid van Moolenbroek strdup("bar"), 46*00b67f09SDavid van Moolenbroek NULL 47*00b67f09SDavid van Moolenbroek }; 48*00b67f09SDavid van Moolenbroek int ch; 49*00b67f09SDavid van Moolenbroek int seen_a = 0, seen_plus = 0; 50*00b67f09SDavid van Moolenbroek 51*00b67f09SDavid van Moolenbroek while ((ch = getopt(argc, argv, "+a:")) != -1) { 52*00b67f09SDavid van Moolenbroek switch (ch) { 53*00b67f09SDavid van Moolenbroek case 'a': 54*00b67f09SDavid van Moolenbroek seen_a = 1; 55*00b67f09SDavid van Moolenbroek break; 56*00b67f09SDavid van Moolenbroek 57*00b67f09SDavid van Moolenbroek case '+': 58*00b67f09SDavid van Moolenbroek seen_plus = 1; 59*00b67f09SDavid van Moolenbroek break; 60*00b67f09SDavid van Moolenbroek 61*00b67f09SDavid van Moolenbroek case '?': 62*00b67f09SDavid van Moolenbroek default: 63*00b67f09SDavid van Moolenbroek ; 64*00b67f09SDavid van Moolenbroek } 65*00b67f09SDavid van Moolenbroek } 66*00b67f09SDavid van Moolenbroek 67*00b67f09SDavid van Moolenbroek return (seen_a && !seen_plus) ? EXIT_SUCCESS : EXIT_FAILURE; 68*00b67f09SDavid van Moolenbroek])], 69*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_plus=yes], 70*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_plus=no]) 71*00b67f09SDavid van Moolenbroek AC_LANG_POP([C]) 72*00b67f09SDavid van Moolenbroek ]) 73*00b67f09SDavid van Moolenbroek if test x"${kyua_cv_getopt_plus}" = xyes; then 74*00b67f09SDavid van Moolenbroek AC_DEFINE([HAVE_GNU_GETOPT], [1], 75*00b67f09SDavid van Moolenbroek [Define to 1 if getopt allows a + sign for POSIX behavior]) 76*00b67f09SDavid van Moolenbroek fi 77*00b67f09SDavid van Moolenbroek 78*00b67f09SDavid van Moolenbroek AC_CACHE_CHECK( 79*00b67f09SDavid van Moolenbroek [whether getopt has optreset], 80*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_optreset], [ 81*00b67f09SDavid van Moolenbroek AC_LANG_PUSH([C]) 82*00b67f09SDavid van Moolenbroek AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdlib.h> 83*00b67f09SDavid van Moolenbroek#include <unistd.h>], [ 84*00b67f09SDavid van Moolenbroek optreset = 1; 85*00b67f09SDavid van Moolenbroek return EXIT_SUCCESS; 86*00b67f09SDavid van Moolenbroek])], 87*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_optreset=yes], 88*00b67f09SDavid van Moolenbroek [kyua_cv_getopt_optreset=no]) 89*00b67f09SDavid van Moolenbroek AC_LANG_POP([C]) 90*00b67f09SDavid van Moolenbroek ]) 91*00b67f09SDavid van Moolenbroek if test x"${kyua_cv_getopt_optreset}" = xyes; then 92*00b67f09SDavid van Moolenbroek AC_DEFINE([HAVE_OPTRESET], [1], [Define to 1 if getopt has optreset]) 93*00b67f09SDavid van Moolenbroek fi 94*00b67f09SDavid van Moolenbroek]) 95