#! /bin/sh
# Generated by configure.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.

debug=false
ac_cs_recheck=false
ac_cs_silent=false

SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi


as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='print -r --'
  as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='printf %s\n'
  as_echo_n='printf %s'
else
  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
    as_echo_n='/usr/ucb/echo -n'
  else
    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
    as_echo_n_body='eval
      arg=$1;
      case $arg in #(
      *"$as_nl"*)
	expr "X$arg" : "X\\(.*\\)$as_nl";
	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
      esac;
      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
    '
    export as_echo_n_body
    as_echo_n='sh -c $as_echo_n_body as_echo'
  fi
  export as_echo_body
  as_echo='sh -c $as_echo_body as_echo'
fi

# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# IFS
# We need space, tab and new line, in precisely that order.  Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" ""	$as_nl"

# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi

# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there.  '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '

# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH


# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  $as_echo "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error


# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit

# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits

ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null


# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi


# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"


exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by strace $as_me 4.16, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    = $CONFIG_FILES
  CONFIG_HEADERS  = $CONFIG_HEADERS
  CONFIG_LINKS    = $CONFIG_LINKS
  CONFIG_COMMANDS = $CONFIG_COMMANDS
  $ $0 $@

on `(hostname || uname -n) 2>/dev/null | sed 1q`
"

# Files that config.status was made for.
config_files=" Makefile tests/Makefile tests-m32/Makefile tests-mx32/Makefile strace.spec debian/changelog"
config_headers=" config.h"
config_commands=" depfiles"

ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
from templates according to the current configuration.  Unless the files
and actions are specified as TAGs, all are instantiated by default.

Usage: $0 [OPTION]... [TAG]...

  -h, --help       print this help, then exit
  -V, --version    print version number and configuration settings, then exit
      --config     print configuration, then exit
  -q, --quiet, --silent
                   do not print progress messages
  -d, --debug      don't remove temporary files
      --recheck    update $as_me by reconfiguring in the same conditions
      --file=FILE[:TEMPLATE]
                   instantiate the configuration file FILE
      --header=FILE[:TEMPLATE]
                   instantiate the configuration header FILE

Configuration files:
$config_files

Configuration headers:
$config_headers

Configuration commands:
$config_commands

Report bugs to <strace-devel@lists.sourceforge.net>.
strace home page: <https://strace.io>."

ac_cs_config=""
ac_cs_version="\
strace config.status 4.16
configured by ./configure, generated by GNU Autoconf 2.69,
  with options \"$ac_cs_config\"

Copyright (C)  Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."

ac_pwd='/usr/local/google/home/enh/Downloads/strace-4.16'
srcdir='.'
INSTALL='/usr/bin/install -c'
MKDIR_P='/bin/mkdir -p'
AWK='gawk'
test -n "$AWK" || AWK=awk
# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
  case $1 in
  --*=?*)
    ac_option=`expr "X$1" : 'X\([^=]*\)='`
    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
    ac_shift=:
    ;;
  --*=)
    ac_option=`expr "X$1" : 'X\([^=]*\)='`
    ac_optarg=
    ac_shift=:
    ;;
  *)
    ac_option=$1
    ac_optarg=$2
    ac_shift=shift
    ;;
  esac

  case $ac_option in
  # Handling of the options.
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
    ac_cs_recheck=: ;;
  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
    $as_echo "$ac_cs_version"; exit ;;
  --config | --confi | --conf | --con | --co | --c )
    $as_echo "$ac_cs_config"; exit ;;
  --debug | --debu | --deb | --de | --d | -d )
    debug=: ;;
  --file | --fil | --fi | --f )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    '') as_fn_error $? "missing file argument" ;;
    esac
    as_fn_append CONFIG_FILES " '$ac_optarg'"
    ac_need_defaults=false;;
  --header | --heade | --head | --hea )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
    ac_need_defaults=false;;
  --he | --h)
    # Conflict between --help and --header
    as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
  --help | --hel | -h )
    $as_echo "$ac_cs_usage"; exit ;;
  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil | --si | --s)
    ac_cs_silent=: ;;

  # This is an error.
  -*) as_fn_error $? "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;

  *) as_fn_append ac_config_targets " $1"
     ac_need_defaults=false ;;

  esac
  shift
done

ac_configure_extra_args=

if $ac_cs_silent; then
  exec 6>/dev/null
  ac_configure_extra_args="$ac_configure_extra_args --silent"
fi

if $ac_cs_recheck; then
  set X /bin/sh './configure'  $ac_configure_extra_args --no-create --no-recursion
  shift
  $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
  CONFIG_SHELL='/bin/sh'
  export CONFIG_SHELL
  exec "$@"
fi

exec 5>>config.log
{
  echo
  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
  $as_echo "$ac_log"
} >&5

#
# INIT-COMMANDS
#
AMDEP_TRUE="" ac_aux_dir="."


# Handling of arguments.
for ac_config_target in $ac_config_targets
do
  case $ac_config_target in
    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
    "tests-m32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-m32/Makefile" ;;
    "tests-mx32/Makefile") CONFIG_FILES="$CONFIG_FILES tests-mx32/Makefile" ;;
    "strace.spec") CONFIG_FILES="$CONFIG_FILES strace.spec" ;;
    "debian/changelog") CONFIG_FILES="$CONFIG_FILES debian/changelog" ;;

  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
  esac
done


# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used.  Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi

# Have a temporary directory for convenience.  Make it in the build tree
# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
  tmp= ac_tmp=
  trap 'exit_status=$?
  : "${ac_tmp:=$tmp}"
  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
' 0
  trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.

{
  tmp=`(umask 077 && mktemp -d "./confXXXXXX")` &&
  test -n "$tmp" && test -d "$tmp"
} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
ac_tmp=$tmp

# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then


ac_cr=`echo X | tr X '\015'`
# On cygwin, bash can eat \r inside `` if the user requested igncr.
# But we know of no other shell where ac_cr would be empty at this
# point, so we can use a bashism as a fallback.
if test "x$ac_cr" = x; then
  eval ac_cr=\$\'\\r\'
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
  ac_cs_awk_cr='\\r'
else
  ac_cs_awk_cr=$ac_cr
fi

echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
cat >>"$ac_tmp/subs1.awk" <<\_ACAWK &&
S["am__EXEEXT_FALSE"]=""
S["am__EXEEXT_TRUE"]="#"
S["LTLIBOBJS"]=""
S["LIBOBJS"]=""
S["VALGRIND_CHECK_RULES"]="\n"\
"# Valgrind check\n"\
"#\n"\
"# Optional:\n"\
"#  - VALGRIND_SUPPRESSIONS_FILES: Space-separated list of Valgrind suppressions\n"\
"#    files to load. (Default: empty)\n"\
"#  - VALGRIND_FLAGS: General flags to pass to all Valgrind tools.\n"\
"#    (Default: --num-callers=30)\n"\
"#  - VALGRIND_$toolname_FLAGS: Flags to pass to Valgrind $toolname (one of:\n"\
"#    memcheck, helgrind, drd, sgcheck). (Default: various)\n"\
"\n"\
"# Optional variables\n"\
"VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES))\n"\
"VALGRIND_FLAGS ?= --num-callers=30\n"\
"VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no\n"\
"VALGRIND_helgrind_FLAGS ?= --history-level=approx\n"\
"VALGRIND_drd_FLAGS ?=\n"\
"VALGRIND_sgcheck_FLAGS ?=\n"\
"\n"\
"# Internal use\n"\
"valgrind_log_files = $(addprefix test-suite-,$(addsuffix .log,$(valgrind_tools)))\n"\
"\n"\
"valgrind_memcheck_flags = --tool=memcheck $(VALGRIND_memcheck_FLAGS)\n"\
"valgrind_helgrind_flags = --tool=helgrind $(VALGRIND_helgrind_FLAGS)\n"\
"valgrind_drd_flags = --tool=drd $(VALGRIND_drd_FLAGS)\n"\
"valgrind_sgcheck_flags = --tool=exp-sgcheck $(VALGRIND_sgcheck_FLAGS)\n"\
"\n"\
"valgrind_quiet = $(valgrind_quiet_$(V))\n"\
"valgrind_quiet_ = $(valgrind_quiet_$(AM_DEFAULT_VERBOSITY))\n"\
"valgrind_quiet_0 = --quiet\n"\
"valgrind_v_use   = $(valgrind_v_use_$(V))\n"\
"valgrind_v_use_  = $(valgrind_v_use_$(AM_DEFAULT_VERBOSITY))\n"\
"valgrind_v_use_0 = @echo \"  USE   \" $(patsubst check-valgrind-%,%,$@):;\n"\
"\n"\
"# Support running with and without libtool.\n"\
"ifneq ($(LIBTOOL),)\n"\
"valgrind_lt = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=execute\n"\
"else\n"\
"valgrind_lt =\n"\
"endif\n"\
"\n"\
"# Use recursive makes in order to ignore errors during check\n"\
"check-valgrind:\n"\
"ifeq ($(VALGRIND_ENABLED),yes)\n"\
"	-$(AM_V_at)$(foreach tool,$(valgrind_enabled_tools), \\\n"\
"		$(MAKE) $(AM_MAKEFLAGS) -k check-valgrind-$(tool); \\\n"\
"	)\n"\
"else\n"\
"	@echo \"Need to reconfigure with --enable-valgrind\"\n"\
"endif\n"\
"\n"\
"# Valgrind running\n"\
"VALGRIND_TESTS_ENVIRONMENT = \\\n"\
"	$(TESTS_ENVIRONMENT) \\\n"\
"	env VALGRIND=$(VALGRIND) \\\n"\
"	G_SLICE=always-malloc,debug-blocks \\\n"\
"	G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly\n"\
"\n"\
"VALGRIND_LOG_COMPILER = \\\n"\
"	$(valgrind_lt) \\\n"\
"	$(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS)\n"\
"\n"\
"define valgrind_tool_rule =\n"\
"check-valgrind-$(1): $$(BUILT_SOURCES)\n"\
"ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes)\n"\
"	$$(valgrind_v_use)$$(MAKE) $$(AM_MAKEFLAGS) check-am \\\n"\
"		TESTS_ENVIRONMENT=\"$$(VALGRIND_TESTS_ENVIRONMENT)\" \\\n"\
"		LOG_COMPILER=\"$$(VALGRIND_LOG_COMPILER)\" \\\n"\
"		LOG_FLAGS=\"$$(valgrind_$(1)_flags)\" \\\n"\
"		TEST_SUITE_LOG=test-suite-$(1).log\n"\
"else ifeq ($$(VALGRIND_ENABLED),yes)\n"\
"	@echo \"Need to reconfigure with --enable-valgrind-$(1)\"\n"\
"else\n"\
"	@echo \"Need to reconfigure with --enable-valgrind\"\n"\
"endif\n"\
"endef\n"\
"\n"\
"$(foreach tool,$(valgrind_tools),$(eval $(call valgrind_tool_rule,$(tool))))\n"\
"\n"\
"AM_DISTCHECK_CONFIGURE_FLAGS ?=\n"\
"AM_DISTCHECK_CONFIGURE_FLAGS += --disable-valgrind\n"\
"\n"\
"MOSTLYCLEANFILES ?=\n"\
"MOSTLYCLEANFILES += $(valgrind_log_files)\n"\
"\n"\
".PHONY: check-valgrind $(add-prefix check-valgrind-,$(valgrind_tools))\n"\
""
S["valgrind_enabled_tools"]=" memcheck"
S["valgrind_tools"]="memcheck helgrind drd sgcheck"
S["ENABLE_VALGRIND_sgcheck"]=""
S["ENABLE_VALGRIND_drd"]="no"
S["ENABLE_VALGRIND_helgrind"]="no"
S["ENABLE_VALGRIND_memcheck"]="yes"
S["VALGRIND_ENABLED"]="yes"
S["VALGRIND_ENABLED_FALSE"]="#"
S["VALGRIND_ENABLED_TRUE"]=""
S["VALGRIND"]="valgrind"
S["HAVE_MX32_MPERS_FALSE"]="#"
S["HAVE_MX32_MPERS_TRUE"]=""
S["HAVE_MX32_RUNTIME_FALSE"]="#"
S["HAVE_MX32_RUNTIME_TRUE"]=""
S["HAVE_M32_MPERS_FALSE"]="#"
S["HAVE_M32_MPERS_TRUE"]=""
S["HAVE_M32_RUNTIME_FALSE"]="#"
S["HAVE_M32_RUNTIME_TRUE"]=""
S["USE_LIBUNWIND_FALSE"]=""
S["USE_LIBUNWIND_TRUE"]="#"
S["libunwind_CPPFLAGS"]=""
S["libunwind_LDFLAGS"]=""
S["libunwind_LIBS"]=""
S["PERL"]="/usr/bin/perl"
S["dl_LIBS"]="-ldl"
S["MIPS_ABI"]=""
S["arch_mx32"]="x32"
S["arch_m32"]="i386"
S["arch"]="x86_64"
S["CODE_COVERAGE_RULES"]="\n"\
"# Code coverage\n"\
"#\n"\
"# Optional:\n"\
"#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.\n"\
"#    Multiple directories may be specified, separated by whitespace.\n"\
"#    (Default: $(top_builddir))\n"\
"#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated\n"\
"#    by lcov for code coverage. (Default:\n"\
"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)\n"\
"#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage\n"\
"#    reports to be created. (Default:\n"\
"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)\n"\
"#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,\n"\
"#    set to 0 to disable it and leave empty to stay with the default.\n"\
"#    (Default: empty)\n"\
"#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov\n"\
"#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
"#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov\n"\
"#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
"#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov\n"\
"#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the\n"\
"#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
"#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov\n"\
"#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
"#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering\n"\
"#    lcov instance. (Default: empty)\n"\
"#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov\n"\
"#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
"#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the\n"\
"#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
"#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml\n"\
"#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\n"\
"#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore\n"\
"#\n"\
"# The generated report will be titled using the $(PACKAGE_NAME) and\n"\
"# $(PACKAGE_VERSION). In order to add the current git hash to the title,\n"\
"# use the git-version-gen script, available online.\n"\
"\n"\
"# Optional variables\n"\
"CODE_COVERAGE_DIRECTORY ?= $(top_builddir)\n"\
"CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info\n"\
"CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage\n"\
"CODE_COVERAGE_BRANCH_COVERAGE ?=\n"\
"CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
"--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
"CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
"CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"$(GCOV)\"\n"\
"CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
"CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
"CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=\n"\
"CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
"CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\\\n"\
"$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
"--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
"CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)\n"\
"CODE_COVERAGE_IGNORE_PATTERN ?=\n"\
"\n"\
"code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))\n"\
"code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))\n"\
"code_coverage_v_lcov_cap_0 = @echo \"  LCOV   --capture\"\\\n"\
" $(CODE_COVERAGE_OUTPUT_FILE);\n"\
"code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))\n"\
"code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))\n"\
"code_coverage_v_lcov_ign_0 = @echo \"  LCOV   --remove /tmp/*\"\\\n"\
" $(CODE_COVERAGE_IGNORE_PATTERN);\n"\
"code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))\n"\
"code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))\n"\
"code_coverage_v_genhtml_0 = @echo \"  GEN   \" $(CODE_COVERAGE_OUTPUT_DIRECTORY);\n"\
"code_coverage_quiet = $(code_coverage_quiet_$(V))\n"\
"code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))\n"\
"code_coverage_quiet_0 = --quiet\n"\
"\n"\
"# sanitizes the test-name: replaces with underscores: dashes and dots\n"\
"code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))\n"\
"\n"\
"# Use recursive makes in order to ignore errors during check\n"\
"check-code-coverage:\n"\
"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
"	-$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check\n"\
"	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture\n"\
"else\n"\
"	@echo \"Need to reconfigure with --enable-code-coverage\"\n"\
"endif\n"\
"\n"\
"# Capture code coverage data\n"\
"code-coverage-capture: code-coverage-capture-hook\n"\
"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
"	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \"$(CODE_COVE"\
"RAGE_OUTPUT_FILE).tmp\" --test-name \"$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))\" --no-checksum --compat-libtool $(CODE_COVERAG"\
"E_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)\n"\
"	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove \"$(CODE_COVERAGE_OUTPUT_FIL"\
"E).tmp\" \"/tmp/*\" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file \"$(CODE_COVERAGE_OUTPUT_FILE)\" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOP"\
"TS)\n"\
"	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp\n"\
"	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory \"$(CODE_COV"\
"ERAGE_OUTPUT_DIRECTORY)\" --title \"$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage\" --legend --show-details \"$(CODE_COVERAGE_OUTPUT_FILE)\" $(CODE_CO"\
"VERAGE_GENHTML_OPTIONS)\n"\
"	@echo \"file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\"\n"\
"else\n"\
"	@echo \"Need to reconfigure with --enable-code-coverage\"\n"\
"endif\n"\
"\n"\
"# Hook rule executed before code-coverage-capture, overridable by the user\n"\
"code-coverage-capture-hook:\n"\
"\n"\
"ifeq ($(CODE_COVERAGE_ENABLED),yes)\n"\
"clean: code-coverage-clean\n"\
"distclean: code-coverage-clean\n"\
"code-coverage-clean:\n"\
"	-$(LCOV) --directory $(top_builddir) -z\n"\
"	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)\n"\
"	-find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\" \\) -delete\n"\
"endif\n"\
"\n"\
"GITIGNOREFILES ?=\n"\
"GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)\n"\
"\n"\
"AM_DISTCHECK_CONFIGURE_FLAGS ?=\n"\
"AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage\n"\
"\n"\
".PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean\n"\
""
S["CODE_COVERAGE_LDFLAGS"]=""
S["CODE_COVERAGE_CXXFLAGS"]=""
S["CODE_COVERAGE_CFLAGS"]=""
S["CODE_COVERAGE_CPPFLAGS"]=""
S["GENHTML"]=""
S["LCOV"]=""
S["GCOV"]=""
S["CODE_COVERAGE_ENABLED"]="no"
S["CODE_COVERAGE_ENABLED_FALSE"]=""
S["CODE_COVERAGE_ENABLED_TRUE"]="#"
S["SED"]="/bin/sed"
S["EGREP"]="/bin/grep -E"
S["GREP"]="/bin/grep"
S["RANLIB"]="ranlib"
S["WARN_CFLAGS_FOR_BUILD"]=" -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaratio"\
"n -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings"
S["LDFLAGS_FOR_BUILD"]=""
S["CPPFLAGS_FOR_BUILD"]=""
S["CFLAGS_FOR_BUILD"]="-g -O2"
S["BUILD_OBJEXT"]=""
S["BUILD_EXEEXT"]=""
S["CPP_FOR_BUILD"]="gcc -E"
S["ac_ct_CC_FOR_BUILD"]="gcc"
S["CC_FOR_BUILD"]="gcc"
S["WARN_CFLAGS"]=" -Wall -Wempty-body -Wformat-security -Wignored-qualifiers -Winit-self -Wlogical-op -Wmissing-parameter-type -Wnested-externs -Wold-style-declaratio"\
"n -Wold-style-definition -Wsign-compare -Wtype-limits -Wwrite-strings"
S["CPP"]="gcc -E"
S["am__fastdepCC_FALSE"]="#"
S["am__fastdepCC_TRUE"]=""
S["CCDEPMODE"]="depmode=gcc3"
S["am__nodep"]="_no"
S["AMDEPBACKSLASH"]="\\"
S["AMDEP_FALSE"]="#"
S["AMDEP_TRUE"]=""
S["am__quote"]=""
S["am__include"]="include"
S["DEPDIR"]=".deps"
S["OBJEXT"]="o"
S["EXEEXT"]=""
S["ac_ct_CC"]="gcc"
S["CPPFLAGS"]=""
S["LDFLAGS"]=""
S["CFLAGS"]="-g -O2"
S["CC"]="gcc"
S["DEB_CHANGELOGTIME"]="Wed, 15 Feb 2017 11:38:25 -0800"
S["RPM_CHANGELOGTIME"]="Wed Feb 15 2017"
S["host_os"]="linux-gnu"
S["host_vendor"]="pc"
S["host_cpu"]="x86_64"
S["host"]="x86_64-pc-linux-gnu"
S["build_os"]="linux-gnu"
S["build_vendor"]="pc"
S["build_cpu"]="x86_64"
S["build"]="x86_64-pc-linux-gnu"
S["MAINT"]="#"
S["MAINTAINER_MODE_FALSE"]=""
S["MAINTAINER_MODE_TRUE"]="#"
S["AM_BACKSLASH"]="\\"
S["AM_DEFAULT_VERBOSITY"]="1"
S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)"
S["AM_V"]="$(V)"
S["am__untar"]="$${TAR-tar} xf -"
S["am__tar"]="$${TAR-tar} chof - \"$$tardir\""
S["AMTAR"]="$${TAR-tar}"
S["am__leading_dot"]="."
S["SET_MAKE"]=""
S["AWK"]="gawk"
S["mkdir_p"]="$(MKDIR_P)"
S["MKDIR_P"]="/bin/mkdir -p"
S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
S["STRIP"]=""
S["install_sh"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/install-sh"
S["MAKEINFO"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/missing makeinfo"
S["AUTOHEADER"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/missing autoheader"
S["AUTOMAKE"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/missing automake-1.14"
S["AUTOCONF"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/missing autoconf"
S["ACLOCAL"]="${SHELL} /usr/local/google/home/enh/Downloads/strace-4.16/missing aclocal-1.14"
S["VERSION"]="4.16"
S["PACKAGE"]="strace"
S["CYGPATH_W"]="echo"
S["am__isrc"]=""
S["INSTALL_DATA"]="${INSTALL} -m 644"
S["INSTALL_SCRIPT"]="${INSTALL}"
S["INSTALL_PROGRAM"]="${INSTALL}"
S["target_alias"]=""
S["host_alias"]=""
S["build_alias"]=""
S["LIBS"]=""
S["ECHO_T"]=""
S["ECHO_N"]="-n"
S["ECHO_C"]=""
S["DEFS"]="-DHAVE_CONFIG_H"
S["mandir"]="${datarootdir}/man"
S["localedir"]="${datarootdir}/locale"
S["libdir"]="${exec_prefix}/lib"
S["psdir"]="${docdir}"
S["pdfdir"]="${docdir}"
S["dvidir"]="${docdir}"
S["htmldir"]="${docdir}"
S["infodir"]="${datarootdir}/info"
S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
S["oldincludedir"]="/usr/include"
S["includedir"]="${prefix}/include"
S["localstatedir"]="${prefix}/var"
S["sharedstatedir"]="${prefix}/com"
S["sysconfdir"]="${prefix}/etc"
S["datadir"]="${datarootdir}"
S["datarootdir"]="${prefix}/share"
S["libexecdir"]="${exec_prefix}/libexec"
S["sbindir"]="${exec_prefix}/sbin"
S["bindir"]="${exec_prefix}/bin"
S["program_transform_name"]="s,x,x,"
S["prefix"]="/usr/local"
S["exec_prefix"]="${prefix}"
S["PACKAGE_URL"]="https://strace.io"
S["PACKAGE_BUGREPORT"]="strace-devel@lists.sourceforge.net"
S["PACKAGE_STRING"]="strace 4.16"
S["PACKAGE_VERSION"]="4.16"
S["PACKAGE_TARNAME"]="strace"
S["PACKAGE_NAME"]="strace"
S["PATH_SEPARATOR"]=":"
S["SHELL"]="/bin/sh"
_ACAWK
cat >>"$ac_tmp/subs1.awk" <<_ACAWK &&
  for (key in S) S_is_set[key] = 1
  FS = ""

}
{
  line = $ 0
  nfields = split(line, field, "@")
  substed = 0
  len = length(field[1])
  for (i = 2; i < nfields; i++) {
    key = field[i]
    keylen = length(key)
    if (S_is_set[key]) {
      value = S[key]
      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
      len += length(value) + length(field[++i])
      substed = 1
    } else
      len += 1 + keylen
  }

  print line
}

_ACAWK
if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
  cat
fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
fi # test -n "$CONFIG_FILES"

# Set up the scripts for CONFIG_HEADERS section.
# No need to generate them if there are no CONFIG_HEADERS.
# This happens for instance with `./config.status Makefile'.
if test -n "$CONFIG_HEADERS"; then
cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
BEGIN {
D["PACKAGE_NAME"]=" \"strace\""
D["PACKAGE_TARNAME"]=" \"strace\""
D["PACKAGE_VERSION"]=" \"4.16\""
D["PACKAGE_STRING"]=" \"strace 4.16\""
D["PACKAGE_BUGREPORT"]=" \"strace-devel@lists.sourceforge.net\""
D["PACKAGE_URL"]=" \"https://strace.io\""
D["PACKAGE"]=" \"strace\""
D["VERSION"]=" \"4.16\""
D["STDC_HEADERS"]=" 1"
D["HAVE_SYS_TYPES_H"]=" 1"
D["HAVE_SYS_STAT_H"]=" 1"
D["HAVE_STDLIB_H"]=" 1"
D["HAVE_STRING_H"]=" 1"
D["HAVE_MEMORY_H"]=" 1"
D["HAVE_STRINGS_H"]=" 1"
D["HAVE_INTTYPES_H"]=" 1"
D["HAVE_STDINT_H"]=" 1"
D["HAVE_UNISTD_H"]=" 1"
D["__EXTENSIONS__"]=" 1"
D["_ALL_SOURCE"]=" 1"
D["_GNU_SOURCE"]=" 1"
D["_POSIX_PTHREAD_SEMANTICS"]=" 1"
D["_TANDEM_SOURCE"]=" 1"
D["X86_64"]=" 1"
D["ENABLE_ARM_OABI"]=" 0"
D["HAVE_TYPEOF"]=" 1"
D["HAVE_ACCEPT4"]=" 1"
D["HAVE_FALLOCATE"]=" 1"
D["HAVE_FANOTIFY_MARK"]=" 1"
D["HAVE_FOPEN64"]=" 1"
D["HAVE_FORK"]=" 1"
D["HAVE_FPUTS_UNLOCKED"]=" 1"
D["HAVE_FSTATAT"]=" 1"
D["HAVE_FTRUNCATE"]=" 1"
D["HAVE_FUTIMENS"]=" 1"
D["HAVE_IF_INDEXTONAME"]=" 1"
D["HAVE_OPEN64"]=" 1"
D["HAVE_PRCTL"]=" 1"
D["HAVE_PREADV"]=" 1"
D["HAVE_PROCESS_VM_READV"]=" 1"
D["HAVE_PWRITEV"]=" 1"
D["HAVE_READAHEAD"]=" 1"
D["HAVE_SIGNALFD"]=" 1"
D["HAVE_STPCPY"]=" 1"
D["HAVE_STRERROR"]=" 1"
D["HAVE_STRSIGNAL"]=" 1"
D["HAVE_SYNC_FILE_RANGE"]=" 1"
D["HAVE_UTIMENSAT"]=" 1"
D["HAVE_SIG_ATOMIC_T"]=" 1"
D["HAVE_STRUCT_SIGCONTEXT"]=" 1"
D["HAVE_STRUCT_MMSGHDR"]=" 1"
D["HAVE___KERNEL_LONG_T"]=" 1"
D["HAVE___KERNEL_ULONG_T"]=" 1"
D["HAVE_STRUCT___OLD_KERNEL_STAT"]=" 1"
D["HAVE_STRUCT_USER_DESC"]=" 1"
D["HAVE_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
D["HAVE_STRUCT_FLOCK"]=" 1"
D["HAVE_STRUCT_FLOCK64"]=" 1"
D["HAVE_STRUCT_TIMEX_TAI"]=" 1"
D["HAVE_STRUCT_UTSNAME_DOMAINNAME"]=" 1"
D["HAVE_SIGINFO_T_SI_SYSCALL"]=" 1"
D["HAVE_SIGINFO_T_SI_TIMERID"]=" 1"
D["HAVE_SIGINFO_T_SI_OVERRUN"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_PRECISE_IP"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_MMAP_DATA"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_ID_ALL"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_HOST"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_GUEST"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_CALLCHAIN_KERNEL"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_EXCLUDE_CALLCHAIN_USER"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_MMAP2"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_BP_TYPE"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_CONFIG1"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_CONFIG2"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_BRANCH_SAMPLE_TYPE"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_REGS_USER"]=" 1"
D["HAVE_STRUCT_PERF_EVENT_ATTR_SAMPLE_STACK_USER"]=" 1"
D["HAVE_ELF_H"]=" 1"
D["HAVE_INTTYPES_H"]=" 1"
D["HAVE_LINUX_BSG_H"]=" 1"
D["HAVE_LINUX_DM_IOCTL_H"]=" 1"
D["HAVE_LINUX_DQBLK_XFS_H"]=" 1"
D["HAVE_LINUX_FALLOC_H"]=" 1"
D["HAVE_LINUX_FIEMAP_H"]=" 1"
D["HAVE_LINUX_FILTER_H"]=" 1"
D["HAVE_LINUX_HIDDEV_H"]=" 1"
D["HAVE_LINUX_IP_VS_H"]=" 1"
D["HAVE_LINUX_IPC_H"]=" 1"
D["HAVE_LINUX_MMTIMER_H"]=" 1"
D["HAVE_LINUX_MSG_H"]=" 1"
D["HAVE_LINUX_PERF_EVENT_H"]=" 1"
D["HAVE_LINUX_QUOTA_H"]=" 1"
D["HAVE_LINUX_SECCOMP_H"]=" 1"
D["HAVE_LINUX_SECUREBITS_H"]=" 1"
D["HAVE_LINUX_SEM_H"]=" 1"
D["HAVE_LINUX_SHM_H"]=" 1"
D["HAVE_LINUX_UTSNAME_H"]=" 1"
D["HAVE_MQUEUE_H"]=" 1"
D["HAVE_NETIPX_IPX_H"]=" 1"
D["HAVE_SCSI_SG_H"]=" 1"
D["HAVE_STROPTS_H"]=" 1"
D["HAVE_SYS_EVENTFD_H"]=" 1"
D["HAVE_SYS_FANOTIFY_H"]=" 1"
D["HAVE_SYS_IPC_H"]=" 1"
D["HAVE_SYS_MSG_H"]=" 1"
D["HAVE_SYS_QUOTA_H"]=" 1"
D["HAVE_SYS_REG_H"]=" 1"
D["HAVE_SYS_SEM_H"]=" 1"
D["HAVE_SYS_SHM_H"]=" 1"
D["HAVE_SYS_SIGNALFD_H"]=" 1"
D["HAVE_SYS_XATTR_H"]=" 1"
D["HAVE_USTAT_H"]=" 1"
D["HAVE_NETINET_TCP_H"]=" 1"
D["HAVE_NETINET_UDP_H"]=" 1"
D["HAVE_LINUX_MQUEUE_H"]=" 1"
D["HAVE_LINUX_NETFILTER_ARP_ARP_TABLES_H"]=" 1"
D["HAVE_LINUX_NETFILTER_IPV4_IP_TABLES_H"]=" 1"
D["HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H"]=" 1"
D["HAVE_LINUX_INPUT_H"]=" 1"
D["HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION"]=" 1"
D["HAVE_STRUCT_STATFS"]=" 1"
D["HAVE_STRUCT_STATFS_F_FRSIZE"]=" 1"
D["HAVE_STRUCT_STATFS_F_FLAGS"]=" 1"
D["HAVE_STRUCT_STATFS_F_FSID_VAL"]=" 1"
D["HAVE_STRUCT_STATFS64"]=" 1"
D["HAVE_STRUCT_STATFS64_F_FRSIZE"]=" 1"
D["HAVE_STRUCT_STATFS64_F_FLAGS"]=" 1"
D["HAVE_STRUCT_STATFS64_F_FSID_VAL"]=" 1"
D["HAVE_STRUCT_BLK_USER_TRACE_SETUP"]=" 1"
D["HAVE_LINUX_BTRFS_H"]=" 1"
D["HAVE_DECL_BTRFS_COMPRESS_NONE"]=" 0"
D["HAVE_DECL_BTRFS_COMPRESS_ZLIB"]=" 0"
D["HAVE_DECL_BTRFS_COMPRESS_LZO"]=" 0"
D["HAVE_DECL_SYS_ERRLIST"]=" 1"
D["HAVE_DECL_PTRACE_PEEKUSER"]=" 1"
D["HAVE_DECL_PTRACE_POKEUSER"]=" 1"
D["HAVE_DECL_P_PID"]=" 1"
D["HAVE_DECL_P_PPID"]=" 0"
D["HAVE_DECL_P_PGID"]=" 1"
D["HAVE_DECL_P_SID"]=" 0"
D["HAVE_DECL_P_CID"]=" 0"
D["HAVE_DECL_P_UID"]=" 0"
D["HAVE_DECL_P_GID"]=" 0"
D["HAVE_DECL_P_ALL"]=" 1"
D["HAVE_DECL_P_LWPID"]=" 0"
D["HAVE_DECL_LO_FLAGS_READ_ONLY"]=" 1"
D["HAVE_DECL_LO_FLAGS_USE_AOPS"]=" 0"
D["HAVE_DECL_LO_FLAGS_AUTOCLEAR"]=" 1"
D["HAVE_DECL_LO_FLAGS_PARTSCAN"]=" 1"
D["HAVE_DECL_LO_FLAGS_DIRECT_IO"]=" 0"
D["HAVE_DECL_CTL_PROC"]=" 1"
D["HAVE_DECL_CTL_ARLAN"]=" 1"
D["HAVE_DECL_CTL_S390DBF"]=" 1"
D["HAVE_DECL_CTL_SUNRPC"]=" 1"
D["HAVE_DECL_CTL_PM"]=" 1"
D["HAVE_DECL_CTL_FRV"]=" 1"
D["HAVE_DECL_KERN_PRINTK_RATELIMIT"]=" 1"
D["HAVE_DECL_KERN_PRINTK_RATELIMIT_BURST"]=" 1"
D["HAVE_DECL_KERN_PTY"]=" 1"
D["HAVE_DECL_KERN_NGROUPS_MAX"]=" 1"
D["HAVE_DECL_KERN_SPARC_SCONS_PWROFF"]=" 1"
D["HAVE_DECL_KERN_HZ_TIMER"]=" 1"
D["HAVE_DECL_KERN_UNKNOWN_NMI_PANIC"]=" 1"
D["HAVE_DECL_KERN_BOOTLOADER_TYPE"]=" 1"
D["HAVE_DECL_KERN_RANDOMIZE"]=" 1"
D["HAVE_DECL_KERN_SETUID_DUMPABLE"]=" 1"
D["HAVE_DECL_KERN_SPIN_RETRY"]=" 1"
D["HAVE_DECL_KERN_ACPI_VIDEO_FLAGS"]=" 1"
D["HAVE_DECL_KERN_IA64_UNALIGNED"]=" 1"
D["HAVE_DECL_KERN_COMPAT_LOG"]=" 1"
D["HAVE_DECL_KERN_MAX_LOCK_DEPTH"]=" 1"
D["HAVE_DECL_KERN_NMI_WATCHDOG"]=" 1"
D["HAVE_DECL_KERN_PANIC_ON_NMI"]=" 1"
D["HAVE_DECL_NET_LLC"]=" 1"
D["HAVE_DECL_NET_NETFILTER"]=" 1"
D["HAVE_DECL_NET_DCCP"]=" 1"
D["HAVE_DECL_NET_IRDA"]=" 1"
D["HAVE_DECL_NET_CORE_DESTROY_DELAY"]=" 0"
D["HAVE_DECL_NET_CORE_BUDGET"]=" 1"
D["HAVE_DECL_NET_CORE_AEVENT_ETIME"]=" 1"
D["HAVE_DECL_NET_CORE_AEVENT_RSEQTH"]=" 1"
D["HAVE_DECL_NET_CORE_WARNINGS"]=" 1"
D["HAVE_DECL_NET_IPV4_IGMP_MAX_MSF"]=" 1"
D["HAVE_DECL_NET_TCP_NO_METRICS_SAVE"]=" 1"
D["HAVE_DECL_NET_TCP_DEFAULT_WIN_SCALE"]=" 1"
D["HAVE_DECL_NET_TCP_MODERATE_RCVBUF"]=" 1"
D["HAVE_DECL_NET_TCP_TSO_WIN_DIVISOR"]=" 1"
D["HAVE_DECL_NET_TCP_BIC_BETA"]=" 1"
D["HAVE_DECL_NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR"]=" 1"
D["HAVE_DECL_NET_TCP_CONG_CONTROL"]=" 1"
D["HAVE_DECL_NET_TCP_ABC"]=" 1"
D["HAVE_DECL_NET_IPV4_IPFRAG_MAX_DIST"]=" 1"
D["HAVE_DECL_NET_TCP_MTU_PROBING"]=" 1"
D["HAVE_DECL_NET_TCP_BASE_MSS"]=" 1"
D["HAVE_DECL_NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS"]=" 1"
D["HAVE_DECL_NET_TCP_DMA_COPYBREAK"]=" 1"
D["HAVE_DECL_NET_TCP_SLOW_START_AFTER_IDLE"]=" 1"
D["HAVE_DECL_NET_CIPSOV4_CACHE_ENABLE"]=" 1"
D["HAVE_DECL_NET_CIPSOV4_CACHE_BUCKET_SIZE"]=" 1"
D["HAVE_DECL_NET_CIPSOV4_RBM_OPTFMT"]=" 1"
D["HAVE_DECL_NET_CIPSOV4_RBM_STRICTVALID"]=" 1"
D["HAVE_DECL_NET_TCP_AVAIL_CONG_CONTROL"]=" 1"
D["HAVE_DECL_NET_TCP_ALLOWED_CONG_CONTROL"]=" 1"
D["HAVE_DECL_NET_TCP_MAX_SSTHRESH"]=" 1"
D["HAVE_DECL_NET_TCP_FRTO_RESPONSE"]=" 1"
D["HAVE_DECL_NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_FORCE_IGMP_VERSION"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_ARP_ANNOUNCE"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_ARP_IGNORE"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_PROMOTE_SECONDARIES"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_ARP_ACCEPT"]=" 1"
D["HAVE_DECL_NET_IPV4_CONF_ARP_NOTIFY"]=" 1"
D["HAVE_DECL_NET_IPV6_MLD_MAX_MSF"]=" 1"
D["HAVE_DECL_NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS"]=" 1"
D["HAVE_DECL_VM_MAX_MAP_COUNT"]=" 1"
D["HAVE_DECL_VM_LAPTOP_MODE"]=" 1"
D["HAVE_DECL_VM_BLOCK_DUMP"]=" 1"
D["HAVE_DECL_VM_HUGETLB_GROUP"]=" 1"
D["HAVE_DECL_VM_VFS_CACHE_PRESSURE"]=" 1"
D["HAVE_DECL_VM_LEGACY_VA_LAYOUT"]=" 1"
D["HAVE_DECL_VM_SWAP_TOKEN_TIMEOUT"]=" 1"
D["HAVE_DECL_V4L2_FIELD_ANY"]=" 1"
D["HAVE_DECL_V4L2_FIELD_NONE"]=" 1"
D["HAVE_DECL_V4L2_FIELD_TOP"]=" 1"
D["HAVE_DECL_V4L2_FIELD_BOTTOM"]=" 1"
D["HAVE_DECL_V4L2_FIELD_INTERLACED"]=" 1"
D["HAVE_DECL_V4L2_FIELD_SEQ_TB"]=" 1"
D["HAVE_DECL_V4L2_FIELD_SEQ_BT"]=" 1"
D["HAVE_DECL_V4L2_FIELD_ALTERNATE"]=" 1"
D["HAVE_DECL_V4L2_FIELD_INTERLACED_TB"]=" 1"
D["HAVE_DECL_V4L2_FIELD_INTERLACED_BT"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OVERLAY"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VBI_CAPTURE"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VBI_OUTPUT"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_OUTPUT"]=" 1"
D["HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY"]=" 1"
D["HAVE_DECL_V4L2_TUNER_RADIO"]=" 1"
D["HAVE_DECL_V4L2_TUNER_ANALOG_TV"]=" 1"
D["HAVE_DECL_V4L2_TUNER_DIGITAL_TV"]=" 1"
D["HAVE_DECL_V4L2_MEMORY_MMAP"]=" 1"
D["HAVE_DECL_V4L2_MEMORY_USERPTR"]=" 1"
D["HAVE_DECL_V4L2_MEMORY_OVERLAY"]=" 1"
D["HAVE_DECL_V4L2_MEMORY_DMABUF"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_SMPTE170M"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_SMPTE240M"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_REC709"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_BT878"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_470_SYSTEM_M"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_470_SYSTEM_BG"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_JPEG"]=" 1"
D["HAVE_DECL_V4L2_COLORSPACE_SRGB"]=" 1"
D["HAVE_DECL_V4L2_PRIORITY_UNSET"]=" 1"
D["HAVE_DECL_V4L2_PRIORITY_BACKGROUND"]=" 1"
D["HAVE_DECL_V4L2_PRIORITY_INTERACTIVE"]=" 1"
D["HAVE_DECL_V4L2_PRIORITY_RECORD"]=" 1"
D["HAVE_DECL_V4L2_FRMSIZE_TYPE_DISCRETE"]=" 1"
D["HAVE_DECL_V4L2_FRMSIZE_TYPE_CONTINUOUS"]=" 1"
D["HAVE_DECL_V4L2_FRMSIZE_TYPE_STEPWISE"]=" 1"
D["HAVE_DECL_V4L2_FRMIVAL_TYPE_DISCRETE"]=" 1"
D["HAVE_DECL_V4L2_FRMIVAL_TYPE_CONTINUOUS"]=" 1"
D["HAVE_DECL_V4L2_FRMIVAL_TYPE_STEPWISE"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_BOOLEAN"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_MENU"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_BUTTON"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER64"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_CTRL_CLASS"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_STRING"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_BITMASK"]=" 1"
D["HAVE_DECL_V4L2_CTRL_TYPE_INTEGER_MENU"]=" 1"
D["HAVE_BLKGETSIZE64"]=" 1"
D["SIZEOF_LONG"]=" 8"
D["SIZEOF_LONG_LONG"]=" 8"
D["SIZEOF_OFF_T"]=" 8"
D["SIZEOF_KERNEL_LONG_T"]=" 8"
D["SIZEOF_STRUCT_I64_I32"]=" 16"
D["ASM_SIGRTMIN"]=" 32"
D["ASM_SA_RESTORER"]=" 0x04000000"
D["HAVE___BUILTIN_POPCOUNT"]=" 1"
D["HAVE_DLADDR"]=" 1"
D["HAVE_GNU_STUBS_32_H"]=" 1"
D["HAVE_M32_MPERS"]=" 1"
D["HAVE_M32_STRUCT_STAT"]=" 1"
D["HAVE_M32_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
D["HAVE_M32_STRUCT_STAT64"]=" 1"
D["HAVE_M32_STRUCT_STAT64_ST_MTIME_NSEC"]=" 1"
D["HAVE_GNU_STUBS_X32_H"]=" 1"
D["HAVE_MX32_MPERS"]=" 1"
D["HAVE_MX32_STRUCT_STAT"]=" 1"
D["HAVE_MX32_STRUCT_STAT_ST_MTIME_NSEC"]=" 1"
  for (key in D) D_is_set[key] = 1
  FS = ""
}
/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ {
  line = $ 0
  split(line, arg, " ")
  if (arg[1] == "#") {
    defundef = arg[2]
    mac1 = arg[3]
  } else {
    defundef = substr(arg[1], 2)
    mac1 = arg[2]
  }
  split(mac1, mac2, "(") #)
  macro = mac2[1]
  prefix = substr(line, 1, index(line, defundef) - 1)
  if (D_is_set[macro]) {
    # Preserve the white space surrounding the "#".
    print prefix "define", macro P[macro] D[macro]
    next
  } else {
    # Replace #undef with comments.  This is necessary, for example,
    # in the case of _POSIX_SOURCE, which is predefined and required
    # on some systems where configure will not decide to define it.
    if (defundef == "undef") {
      print "/*", prefix defundef, macro, "*/"
      next
    }
  }
}
{ print }
_ACAWK
  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
fi # test -n "$CONFIG_HEADERS"


eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
shift
for ac_tag
do
  case $ac_tag in
  :[FHLC]) ac_mode=$ac_tag; continue;;
  esac
  case $ac_mode$ac_tag in
  :[FHL]*:*);;
  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
  :[FH]-) ac_tag=-:-;;
  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
  esac
  ac_save_IFS=$IFS
  IFS=:
  set x $ac_tag
  IFS=$ac_save_IFS
  shift
  ac_file=$1
  shift

  case $ac_mode in
  :L) ac_source=$1;;
  :[FH])
    ac_file_inputs=
    for ac_f
    do
      case $ac_f in
      -) ac_f="$ac_tmp/stdin";;
      *) # Look for the file first in the build tree, then in the source tree
	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
	 # because $ac_f cannot contain `:'.
	 test -f "$ac_f" ||
	   case $ac_f in
	   [\\/$]*) false;;
	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
	   esac ||
	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
      esac
      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
      as_fn_append ac_file_inputs " '$ac_f'"
    done

    # Let's still pretend it is `configure' which instantiates (i.e., don't
    # use $as_me), people would be surprised to read:
    #    /* config.h.  Generated by config.status.  */
    configure_input='Generated from '`
	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
	`' by configure.'
    if test x"$ac_file" != x-; then
      configure_input="$ac_file.  $configure_input"
      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
$as_echo "$as_me: creating $ac_file" >&6;}
    fi
    # Neutralize special characters interpreted by sed in replacement strings.
    case $configure_input in #(
    *\&* | *\|* | *\\* )
       ac_sed_conf_input=`$as_echo "$configure_input" |
       sed 's/[\\\\&|]/\\\\&/g'`;; #(
    *) ac_sed_conf_input=$configure_input;;
    esac

    case $ac_tag in
    *:-:* | *:-) cat >"$ac_tmp/stdin" \
      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
    esac
    ;;
  esac

  ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$ac_file" : 'X\(//\)[^/]' \| \
	 X"$ac_file" : 'X\(//\)$' \| \
	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$ac_file" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  as_dir="$ac_dir"; as_fn_mkdir_p
  ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
  case $ac_top_builddir_sub in
  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix

case $srcdir in
  .)  # We are building in place.
    ac_srcdir=.
    ac_top_srcdir=$ac_top_builddir_sub
    ac_abs_top_srcdir=$ac_pwd ;;
  [\\/]* | ?:[\\/]* )  # Absolute name.
    ac_srcdir=$srcdir$ac_dir_suffix;
    ac_top_srcdir=$srcdir
    ac_abs_top_srcdir=$srcdir ;;
  *) # Relative name.
    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
    ac_top_srcdir=$ac_top_build_prefix$srcdir
    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix


  case $ac_mode in
  :F)
  #
  # CONFIG_FILE
  #

  case $INSTALL in
  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
  esac
  ac_MKDIR_P=$MKDIR_P
  case $MKDIR_P in
  [\\/$]* | ?:[\\/]* ) ;;
  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
  esac
# If the template does not know about datarootdir, expand it.
# FIXME: This hack should be removed a few years after 2.60.
ac_datarootdir_hack=; ac_datarootdir_seen=
ac_sed_dataroot='
/datarootdir/ {
  p
  q
}
/@datadir@/p
/@docdir@/p
/@infodir@/p
/@localedir@/p
/@mandir@/p'
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
  ac_datarootdir_hack='
  s&@datadir@&${datarootdir}&g
  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
  s&@infodir@&${datarootdir}/info&g
  s&@localedir@&${datarootdir}/locale&g
  s&@mandir@&${datarootdir}/man&g
  s&\${datarootdir}&${prefix}/share&g' ;;
esac
ac_sed_extra="/^[	 ]*VPATH[	 ]*=[	 ]*/{
h
s///
s/^/:/
s/[	 ]*$/:/
s/:\$(srcdir):/:/g
s/:\${srcdir}:/:/g
s/:@srcdir@:/:/g
s/^:*//
s/:*$//
x
s/\(=[	 ]*\).*/\1/
G
s/\n//
s/^[^=]*=[	 ]*$//
}

:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s|@configure_input@|$ac_sed_conf_input|;t t
s&@top_builddir@&$ac_top_builddir_sub&;t t
s&@top_build_prefix@&$ac_top_build_prefix&;t t
s&@srcdir@&$ac_srcdir&;t t
s&@abs_srcdir@&$ac_abs_srcdir&;t t
s&@top_srcdir@&$ac_top_srcdir&;t t
s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5

test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
      "$ac_tmp/out"`; test -z "$ac_out"; } &&
  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined" >&5
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined" >&2;}

  rm -f "$ac_tmp/stdin"
  case $ac_file in
  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
  esac \
  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 ;;
  :H)
  #
  # CONFIG_HEADER
  #
  if test x"$ac_file" != x-; then
    {
      $as_echo "/* $configure_input  */" \
      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
    } >"$ac_tmp/config.h" \
      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
$as_echo "$as_me: $ac_file is unchanged" >&6;}
    else
      rm -f "$ac_file"
      mv "$ac_tmp/config.h" "$ac_file" \
	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
    fi
  else
    $as_echo "/* $configure_input  */" \
      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
      || as_fn_error $? "could not create -" "$LINENO" 5
  fi
# Compute "$ac_file"'s index in $config_headers.
_am_arg="$ac_file"
_am_stamp_count=1
for _am_header in $config_headers :; do
  case $_am_header in
    $_am_arg | $_am_arg:* )
      break ;;
    * )
      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
  esac
done
echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$_am_arg" : 'X\(//\)[^/]' \| \
	 X"$_am_arg" : 'X\(//\)$' \| \
	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$_am_arg" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`/stamp-h$_am_stamp_count
 ;;

  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
$as_echo "$as_me: executing $ac_file commands" >&6;}
 ;;
  esac


  case $ac_file$ac_mode in
    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
  # Older Autoconf quotes --file arguments for eval, but not when files
  # are listed without --file.  Let's play safe and only enable the eval
  # if we detect the quoting.
  case $CONFIG_FILES in
  *\'*) eval set x "$CONFIG_FILES" ;;
  *)   set x $CONFIG_FILES ;;
  esac
  shift
  for mf
  do
    # Strip MF so we end up with the name of the file.
    mf=`echo "$mf" | sed -e 's/:.*$//'`
    # Check whether this is an Automake generated Makefile or not.
    # We used to match only the files named 'Makefile.in', but
    # some people rename them; so instead we look at the file content.
    # Grep'ing the first line is not enough: some people post-process
    # each Makefile.in and add a new line on top of each file to say so.
    # Grep'ing the whole file is not good either: AIX grep has a line
    # limit of 2048, but all sed's we know have understand at least 4000.
    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
      dirpart=`$as_dirname -- "$mf" ||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$mf" : 'X\(//\)[^/]' \| \
	 X"$mf" : 'X\(//\)$' \| \
	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$mf" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
    else
      continue
    fi
    # Extract the definition of DEPDIR, am__include, and am__quote
    # from the Makefile without running 'make'.
    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    test -z "$DEPDIR" && continue
    am__include=`sed -n 's/^am__include = //p' < "$mf"`
    test -z "$am__include" && continue
    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    # Find all dependency output files, they are included files with
    # $(DEPDIR) in their names.  We invoke sed twice because it is the
    # simplest approach to changing $(DEPDIR) to its actual value in the
    # expansion.
    for file in `sed -n "
      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`$as_dirname -- "$file" ||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$file" : 'X\(//\)[^/]' \| \
	 X"$file" : 'X\(//\)$' \| \
	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$file" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      as_dir=$dirpart/$fdir; as_fn_mkdir_p
      # echo "creating $dirpart/$file"
      echo '# dummy' > "$dirpart/$file"
    done
  done
}
 ;;

  esac
done # for ac_tag


as_fn_exit 0
