#! /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.17, 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.17
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='/tmp/strace-4.17'
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["COPYRIGHT_YEAR"]="2017"
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"]="Thu, 25 May 2017 15:09:49 -0700"
S["RPM_CHANGELOGTIME"]="Thu May 25 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} /tmp/strace-4.17/install-sh"
S["MAKEINFO"]="${SHELL} /tmp/strace-4.17/missing makeinfo"
S["AUTOHEADER"]="${SHELL} /tmp/strace-4.17/missing autoheader"
S["AUTOMAKE"]="${SHELL} /tmp/strace-4.17/missing automake-1.14"
S["AUTOCONF"]="${SHELL} /tmp/strace-4.17/missing autoconf"
S["ACLOCAL"]="${SHELL} /tmp/strace-4.17/missing aclocal-1.14"
S["VERSION"]="4.17"
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.17"
S["PACKAGE_VERSION"]="4.17"
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.17\""
D["PACKAGE_STRING"]=" \"strace 4.17\""
D["PACKAGE_BUGREPORT"]=" \"strace-devel@lists.sourceforge.net\""
D["PACKAGE_URL"]=" \"https://strace.io\""
D["PACKAGE"]=" \"strace\""
D["VERSION"]=" \"4.17\""
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["COPYRIGHT_YEAR"]=" \"2017\""
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_BUF_TYPE_SDR_CAPTURE"]=" 0"
D["HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT"]=" 0"
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_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA"]=" 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
