#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.72 for open_pdks 1.0.
#
# Report bugs to <github.com/RTimothyEdwards/open_pdks>.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
# Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test ${ZSH_VERSION+y} && (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 e in #(
  e) case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; 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


# 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
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    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
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi


# Use a proper internal environment variable to ensure we don't fall
  # into an infinite loop, continuously re-executing ourselves.
  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
    _as_can_reexec=no; export _as_can_reexec;
    # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed 'exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
  fi
  # We don't want this to propagate to other subprocesses.
          { _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
  as_bourne_compatible="if test \${ZSH_VERSION+y} && (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 e in #(
  e) case \`(set -o) 2>/dev/null\` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac ;;
esac
fi
"
  as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }

exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" )
then :

else case e in #(
  e) exitcode=1; echo positional parameters were not saved. ;;
esac
fi
test x\$exitcode = x0 || exit 1
blah=\$(echo \$(echo blah))
test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
  if (eval "$as_required") 2>/dev/null
then :
  as_have_required=yes
else case e in #(
  e) as_have_required=no ;;
esac
fi
  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
then :

else case e in #(
  e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
  as_found=:
  case $as_dir in #(
	 /*)
	   for as_base in sh bash ksh sh5; do
	     # Try only shells that exist, to save several forks.
	     as_shell=$as_dir$as_base
	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
		    as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$as_shell as_have_required=yes
		   if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
then :
  break 2
fi
fi
	   done;;
       esac
  as_found=false
done
IFS=$as_save_IFS
if $as_found
then :

else case e in #(
  e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
	      as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$SHELL as_have_required=yes
fi ;;
esac
fi


      if test "x$CONFIG_SHELL" != x
then :
  export CONFIG_SHELL
             # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed 'exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi

    if test x$as_have_required = xno
then :
  printf "%s\n" "$0: This script requires a shell more modern than all"
  printf "%s\n" "$0: the shells that I found on your system."
  if test ${ZSH_VERSION+y} ; then
    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
  else
    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and
$0: github.com/RTimothyEdwards/open_pdks about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
  fi
  exit 1
fi ;;
esac
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset


# 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_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=`printf "%s\n" "$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 ||
printf "%s\n" 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

# 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_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 case e in #(
  e) as_fn_append ()
  {
    eval $1=\$$1\$2
  } ;;
esac
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 case e in #(
  e) as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  } ;;
esac
fi # as_fn_arith


# 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
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error

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 ||
printf "%s\n" 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


  as_lineno_1=$LINENO as_lineno_1a=$LINENO
  as_lineno_2=$LINENO as_lineno_2a=$LINENO
  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
  sed -n '
    p
    /[$]LINENO/=
  ' <$as_myself |
    sed '
      t clear
      :clear
      s/[$]LINENO.*/&-/
      t lineno
      b
      :lineno
      N
      :loop
      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
      t loop
      s/-\n.*//
    ' >$as_me.lineno &&
  chmod +x "$as_me.lineno" ||
    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }

  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
  # already done that, so ensure we don't try to do so again and fall
  # in an infinite loop.  This has already happened in practice.
  _as_can_reexec=no; export _as_can_reexec
  # Don't try to exec as it changes $[0], causing all sort of problems
  # (the dirname of $[0] is not the place where we might find the
  # original and so on.  Autoconf is especially sensitive to this).
  . "./$as_me.lineno"
  # Exit status is that of the last command.
  exit
}


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
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

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'

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

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_test_x='test -x'
as_executable_p=as_fn_executable_p

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

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


test -n "$DJDIR" || exec 7<&0 </dev/null
exec 6>&1

# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`

#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=

# Identity of this package.
PACKAGE_NAME='open_pdks'
PACKAGE_TARNAME='open_pdks'
PACKAGE_VERSION='1.0'
PACKAGE_STRING='open_pdks 1.0'
PACKAGE_BUGREPORT='github.com/RTimothyEdwards/open_pdks'
PACKAGE_URL=''

ac_subst_vars='LTLIBOBJS
LIBOBJS
OPENPDKS_TOP
ENABLED_TECHS
EF_STYLE
USE_REFERENCE
GF180MCU_OCD_IP_SRAM_PATH
GF180MCU_OCD_IO_PATH
GF180MCU_AS_SC_PATH
GF180MCU_RE_EFUSE_PATH
GF180MCU_OSU_SC_PATH
GF180MCU_OCD_ALPHA_PATH
GF180MCU_FD_IP_SRAM_PATH
GF180MCU_FD_SC_MCU9T5V0_PATH
GF180MCU_FD_SC_MCU7T5V0_PATH
GF180MCU_FD_IO_PATH
GF180MCU_FD_PV_PATH
GF180MCU_FD_PR_PATH
SKY130_OSU_T18_PATH
SKY130_OSU_T15_PATH
SKY130_OSU_T12_PATH
SKY130_FD_PR_RERAM_PATH
SKY130_FD_BD_SRAM_PATH
SKY130_SRAM_MACROS_PATH
PRECHECK_SKY130_PATH
KLAYOUT_SKY130_PATH
XSCHEM_SKY130_PATH
SKY130_ML_XX_HD_PATH
SKY130_FD_SC_HVL_PATH
SKY130_FD_SC_HDLL_PATH
SKY130_FD_SC_HD_PATH
SKY130_FD_SC_LP_PATH
SKY130_FD_SC_LS_PATH
SKY130_FD_SC_MS_PATH
SKY130_FD_SC_HS_PATH
SKY130_FD_IO_PATH
SKY130_FD_PR_PATH
PATCH
MAGIC
XCIRCUIT_DISABLED
XSCHEM_DISABLED
QFLOW_DISABLED
LIBRELANE_DISABLED
IRSIM_DISABLED
NETGEN_DISABLED
MAGIC_DISABLED
KLAYOUT_DISABLED
ALL_TECHS
SKY130_SOURCE_PATH
SKY130_ENABLED_VARIANTS
SKY130_LINK_TARGETS
GF180MCU_SOURCE_PATH
GF180MCU_ENABLED_VARIANTS
GF180MCU_LINK_TARGETS
SED
pkgpyexecdir
pyexecdir
pkgpythondir
pythondir
PYTHON_PLATFORM
PYTHON_EXEC_PREFIX
PYTHON_PREFIX
PYTHON_VERSION
PYTHON
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
runstatedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_gf180mcu_pdk
with_gf180mcu_link_targets
with_gf180mcu_variants
enable_sky130_pdk
with_sky130_link_targets
with_sky130_variants
enable_klayout
enable_magic
enable_netgen
enable_irsim
enable_librelane
enable_qflow
enable_xschem
enable_xcircuit
enable_primitive_sky130
enable_io_sky130
enable_sc_hs_sky130
enable_sc_ms_sky130
enable_sc_ls_sky130
enable_sc_lp_sky130
enable_sc_hd_sky130
enable_sc_hdll_sky130
enable_sc_hvl_sky130
enable_alpha_sky130
enable_xschem_sky130
enable_klayout_sky130
enable_precheck_sky130
enable_sram_sky130
enable_sram_space_sky130
enable_reram_sky130
enable_osu_t12_sky130
enable_osu_t15_sky130
enable_osu_t18_sky130
enable_primitive_gf180mcu
enable_verification_gf180mcu
enable_io_gf180mcu
enable_sc_7t5v0_gf180mcu
enable_sc_9t5v0_gf180mcu
enable_sram_gf180mcu
enable_alpha_gf180mcu
enable_osu_sc_gf180mcu
enable_avalon_sc_gf180mcu
enable_re_efuse_gf180mcu
enable_ocd_io_gf180mcu
enable_ocd_sram_gf180mcu
with_reference
with_ef_style
'
      ac_precious_vars='build_alias
host_alias
target_alias
PYTHON'


# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE

# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'

ac_prev=
ac_dashdash=
for ac_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$ac_prev"; then
    eval $ac_prev=\$ac_option
    ac_prev=
    continue
  fi

  case $ac_option in
  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
  *=)   ac_optarg= ;;
  *)    ac_optarg=yes ;;
  esac

  case $ac_dashdash$ac_option in
  --)
    ac_dashdash=yes ;;

  -bindir | --bindir | --bindi | --bind | --bin | --bi)
    ac_prev=bindir ;;
  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
    bindir=$ac_optarg ;;

  -build | --build | --buil | --bui | --bu)
    ac_prev=build_alias ;;
  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
    build_alias=$ac_optarg ;;

  -cache-file | --cache-file | --cache-fil | --cache-fi \
  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
    ac_prev=cache_file ;;
  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
    cache_file=$ac_optarg ;;

  --config-cache | -C)
    cache_file=config.cache ;;

  -datadir | --datadir | --datadi | --datad)
    ac_prev=datadir ;;
  -datadir=* | --datadir=* | --datadi=* | --datad=*)
    datadir=$ac_optarg ;;

  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
  | --dataroo | --dataro | --datar)
    ac_prev=datarootdir ;;
  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
    datarootdir=$ac_optarg ;;

  -disable-* | --disable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: '$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=no ;;

  -docdir | --docdir | --docdi | --doc | --do)
    ac_prev=docdir ;;
  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
    docdir=$ac_optarg ;;

  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
    ac_prev=dvidir ;;
  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
    dvidir=$ac_optarg ;;

  -enable-* | --enable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: '$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=\$ac_optarg ;;

  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  | --exec | --exe | --ex)
    ac_prev=exec_prefix ;;
  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  | --exec=* | --exe=* | --ex=*)
    exec_prefix=$ac_optarg ;;

  -gas | --gas | --ga | --g)
    # Obsolete; use --with-gas.
    with_gas=yes ;;

  -help | --help | --hel | --he | -h)
    ac_init_help=long ;;
  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
    ac_init_help=recursive ;;
  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
    ac_init_help=short ;;

  -host | --host | --hos | --ho)
    ac_prev=host_alias ;;
  -host=* | --host=* | --hos=* | --ho=*)
    host_alias=$ac_optarg ;;

  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
    ac_prev=htmldir ;;
  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
  | --ht=*)
    htmldir=$ac_optarg ;;

  -includedir | --includedir | --includedi | --included | --include \
  | --includ | --inclu | --incl | --inc)
    ac_prev=includedir ;;
  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  | --includ=* | --inclu=* | --incl=* | --inc=*)
    includedir=$ac_optarg ;;

  -infodir | --infodir | --infodi | --infod | --info | --inf)
    ac_prev=infodir ;;
  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
    infodir=$ac_optarg ;;

  -libdir | --libdir | --libdi | --libd)
    ac_prev=libdir ;;
  -libdir=* | --libdir=* | --libdi=* | --libd=*)
    libdir=$ac_optarg ;;

  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  | --libexe | --libex | --libe)
    ac_prev=libexecdir ;;
  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  | --libexe=* | --libex=* | --libe=*)
    libexecdir=$ac_optarg ;;

  -localedir | --localedir | --localedi | --localed | --locale)
    ac_prev=localedir ;;
  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
    localedir=$ac_optarg ;;

  -localstatedir | --localstatedir | --localstatedi | --localstated \
  | --localstate | --localstat | --localsta | --localst | --locals)
    ac_prev=localstatedir ;;
  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
    localstatedir=$ac_optarg ;;

  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
    ac_prev=mandir ;;
  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
    mandir=$ac_optarg ;;

  -nfp | --nfp | --nf)
    # Obsolete; use --without-fp.
    with_fp=no ;;

  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  | --no-cr | --no-c | -n)
    no_create=yes ;;

  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
    no_recursion=yes ;;

  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
  | --oldin | --oldi | --old | --ol | --o)
    ac_prev=oldincludedir ;;
  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
    oldincludedir=$ac_optarg ;;

  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
    ac_prev=prefix ;;
  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
    prefix=$ac_optarg ;;

  -program-prefix | --program-prefix | --program-prefi | --program-pref \
  | --program-pre | --program-pr | --program-p)
    ac_prev=program_prefix ;;
  -program-prefix=* | --program-prefix=* | --program-prefi=* \
  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
    program_prefix=$ac_optarg ;;

  -program-suffix | --program-suffix | --program-suffi | --program-suff \
  | --program-suf | --program-su | --program-s)
    ac_prev=program_suffix ;;
  -program-suffix=* | --program-suffix=* | --program-suffi=* \
  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
    program_suffix=$ac_optarg ;;

  -program-transform-name | --program-transform-name \
  | --program-transform-nam | --program-transform-na \
  | --program-transform-n | --program-transform- \
  | --program-transform | --program-transfor \
  | --program-transfo | --program-transf \
  | --program-trans | --program-tran \
  | --progr-tra | --program-tr | --program-t)
    ac_prev=program_transform_name ;;
  -program-transform-name=* | --program-transform-name=* \
  | --program-transform-nam=* | --program-transform-na=* \
  | --program-transform-n=* | --program-transform-=* \
  | --program-transform=* | --program-transfor=* \
  | --program-transfo=* | --program-transf=* \
  | --program-trans=* | --program-tran=* \
  | --progr-tra=* | --program-tr=* | --program-t=*)
    program_transform_name=$ac_optarg ;;

  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
    ac_prev=pdfdir ;;
  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
    pdfdir=$ac_optarg ;;

  -psdir | --psdir | --psdi | --psd | --ps)
    ac_prev=psdir ;;
  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
    psdir=$ac_optarg ;;

  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil)
    silent=yes ;;

  -runstatedir | --runstatedir | --runstatedi | --runstated \
  | --runstate | --runstat | --runsta | --runst | --runs \
  | --run | --ru | --r)
    ac_prev=runstatedir ;;
  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
  | --run=* | --ru=* | --r=*)
    runstatedir=$ac_optarg ;;

  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
    ac_prev=sbindir ;;
  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  | --sbi=* | --sb=*)
    sbindir=$ac_optarg ;;

  -sharedstatedir | --sharedstatedir | --sharedstatedi \
  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  | --sharedst | --shareds | --shared | --share | --shar \
  | --sha | --sh)
    ac_prev=sharedstatedir ;;
  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  | --sha=* | --sh=*)
    sharedstatedir=$ac_optarg ;;

  -site | --site | --sit)
    ac_prev=site ;;
  -site=* | --site=* | --sit=*)
    site=$ac_optarg ;;

  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
    ac_prev=srcdir ;;
  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
    srcdir=$ac_optarg ;;

  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  | --syscon | --sysco | --sysc | --sys | --sy)
    ac_prev=sysconfdir ;;
  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
    sysconfdir=$ac_optarg ;;

  -target | --target | --targe | --targ | --tar | --ta | --t)
    ac_prev=target_alias ;;
  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
    target_alias=$ac_optarg ;;

  -v | -verbose | --verbose | --verbos | --verbo | --verb)
    verbose=yes ;;

  -version | --version | --versio | --versi | --vers | -V)
    ac_init_version=: ;;

  -with-* | --with-*)
    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: '$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=\$ac_optarg ;;

  -without-* | --without-*)
    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: '$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=no ;;

  --x)
    # Obsolete; use --with-x.
    with_x=yes ;;

  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  | --x-incl | --x-inc | --x-in | --x-i)
    ac_prev=x_includes ;;
  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
    x_includes=$ac_optarg ;;

  -x-libraries | --x-libraries | --x-librarie | --x-librari \
  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
    ac_prev=x_libraries ;;
  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
    x_libraries=$ac_optarg ;;

  -*) as_fn_error $? "unrecognized option: '$ac_option'
Try '$0 --help' for more information"
    ;;

  *=*)
    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
    # Reject names that are not valid shell variable names.
    case $ac_envvar in #(
      '' | [0-9]* | *[!_$as_cr_alnum]* )
      as_fn_error $? "invalid variable name: '$ac_envvar'" ;;
    esac
    eval $ac_envvar=\$ac_optarg
    export $ac_envvar ;;

  *)
    # FIXME: should be removed in autoconf 3.0.
    printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
      printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
    ;;

  esac
done

if test -n "$ac_prev"; then
  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  as_fn_error $? "missing argument to $ac_option"
fi

if test -n "$ac_unrecognized_opts"; then
  case $enable_option_checking in
    no) ;;
    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
    *)     printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
  esac
fi

# Check all directory arguments for consistency.
for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
		datadir sysconfdir sharedstatedir localstatedir includedir \
		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
		libdir localedir mandir runstatedir
do
  eval ac_val=\$$ac_var
  # Remove trailing slashes.
  case $ac_val in
    */ )
      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
      eval $ac_var=\$ac_val;;
  esac
  # Be sure to have absolute directory names.
  case $ac_val in
    [\\/$]* | ?:[\\/]* )  continue;;
    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
  esac
  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done

# There might be people who depend on the old broken behavior: '$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias

# FIXME: To remove some day.
if test "x$host_alias" != x; then
  if test "x$build_alias" = x; then
    cross_compiling=maybe
  elif test "x$build_alias" != "x$host_alias"; then
    cross_compiling=yes
  fi
fi

ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-

test "$silent" = yes && exec 6>/dev/null


ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
  as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
  as_fn_error $? "pwd does not report name of working directory"


# Find the source files, if location was not specified.
if test -z "$srcdir"; then
  ac_srcdir_defaulted=yes
  # Try the directory containing this script, then the parent directory.
  ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_myself" : 'X\(//\)[^/]' \| \
	 X"$as_myself" : 'X\(//\)$' \| \
	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_myself" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  srcdir=$ac_confdir
  if test ! -r "$srcdir/$ac_unique_file"; then
    srcdir=..
  fi
else
  ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work"
ac_abs_confdir=`(
	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
	pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
  srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
  eval ac_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_env_${ac_var}_value=\$${ac_var}
  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_cv_env_${ac_var}_value=\$${ac_var}
done

#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
  # Omit some internal or obsolete options to make the list less imposing.
  # This message is too long to be a string in the A/UX 3.1 sh.
  cat <<_ACEOF
'configure' configures open_pdks 1.0 to adapt to many kinds of systems.

Usage: $0 [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print 'checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for '--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or '..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [$ac_default_prefix]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, 'make install' will install all the files in
'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc.  You can specify
an installation prefix other than '$ac_default_prefix' using '--prefix',
for instance '--prefix=\$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/open_pdks]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]
_ACEOF

  cat <<\_ACEOF
_ACEOF
fi

if test -n "$ac_init_help"; then
  case $ac_init_help in
     short | recursive ) echo "Configuration of open_pdks 1.0:";;
   esac
  cat <<\_ACEOF

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-gf180mcu-pdk=[/path/to/gf180mcu/] --disable-gf180mcu-pdk
                          "location of the source files for the gf180mcu (pdks
                          with a pdk_url file can automatically download them
                          if the path is omitted)"
  --enable-klayout
                Enable or disable klayout setup [default=enabled]


  --enable-magic
                Enable or disable magic setup [default=enabled]


  --enable-netgen
                Enable or disable netgen setup [default=enabled]


  --enable-irsim
                Enable or disable irsim setup [default=enabled]


  --enable-librelane
                Enable or disable librelane setup [default=enabled]


  --enable-qflow
                Enable or disable qflow setup [default=enabled]


  --enable-xschem
                Enable or disable xschem setup [default=enabled]


  --enable-xcircuit
                Enable or disable xcircuit setup [default=enabled]


  --enable-primitive-sky130[=path]
                          Install sky130_fd_pr. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-io-sky130[=path]
                          Install sky130_fd_io. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-hs-sky130[=path]
                          Install sky130_fd_sc_hs. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-ms-sky130[=path]
                          Install sky130_fd_sc_ms. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-ls-sky130[=path]
                          Install sky130_fd_sc_ls. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-lp-sky130[=path]
                          Install sky130_fd_sc_lp. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-hd-sky130[=path]
                          Install sky130_fd_sc_hd. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-hdll-sky130[=path]
                          Install sky130_fd_sc_hdll. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-hvl-sky130[=path]
                          Install sky130_fd_sc_hvl. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-alpha-sky130[=path]
                          Install sky130_ml_xx_hd. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-xschem-sky130[=path]
                          Install xschem_sky130. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-klayout-sky130[=path]
                          Install klayout_sky130. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-precheck-sky130[=path]
                          Install precheck_sky130. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sram-sky130[=path]
                          Install sky130_sram_macros. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-sram-space-sky130[=path]
                          Install sky130_fd_bd_sram. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-reram-sky130[=path]
                          Install sky130_fd_pr_reram. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-osu-t12-sky130[=path]
                          Install sky130_osu_t12. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-osu-t15-sky130[=path]
                          Install sky130_osu_t15. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-osu-t18-sky130[=path]
                          Install sky130_osu_t18. If path is omitted, the repository
                          will be downloaded. [default=disabled]
  --enable-primitive-gf180mcu[=path]
                          Install gf180mcu_fd_pr. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-verification-gf180mcu[=path]
                          Install gf180mcu_fd_pv. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-io-gf180mcu[=path]
                          Install gf180mcu_fd_io. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-7t5v0-gf180mcu[=path]
                          Install gf180mcu_fd_sc_mcu7t5v0. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sc-9t5v0-gf180mcu[=path]
                          Install gf180mcu_fd_sc_mcu9t5v0. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-sram-gf180mcu[=path]
                          Install gf180mcu_fd_ip_sram. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-alpha-gf180mcu[=path]
                          Install gf180mcu_ocd_alpha. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-osu-sc-gf180mcu[=path]
                          Install gf180mcu_osu_sc. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-avalon-sc-gf180mcu[=path]
                          Install gf180mcu_as_sc. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-re-efuse-gf180mcu[=path]
                          Install gf180mcu_re_efuse. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-ocd-io-gf180mcu[=path]
                          Install gf180mcu_ocd_io. If path is omitted, the repository
                          will be downloaded. [default=enabled]
  --enable-ocd-sram-gf180mcu[=path]
                          Install gf180mcu_ocd_ip_sram. If path is omitted, the repository
                          will be downloaded. [default=enabled]

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gf180mcu-link-targets=none|source
                          "make symbolic links to existing files
                          [default=none]"
  --with-gf180mcu-variants=all|A|B|...
                          "compile/install specified PDK variants only
                          [default=all]"
  --with-reference        Use PDK JSON file reference commit values for
                          sources [default=no]
  --with-ef-style         Use efabless style file system structure
                          [default=no]

Some influential environment variables:
  PYTHON      the Python interpreter

Use these variables to override the choices made by 'configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to <github.com/RTimothyEdwards/open_pdks>.
_ACEOF
ac_status=$?
fi

if test "$ac_init_help" = "recursive"; then
  # If there are subdirs, report their specific --help.
  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
    test -d "$ac_dir" ||
      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
      continue
    ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`printf "%s\n" "$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

    cd "$ac_dir" || { ac_status=$?; continue; }
    # Check for configure.gnu first; this name is used for a wrapper for
    # Metaconfig's "Configure" on case-insensitive file systems.
    if test -f "$ac_srcdir/configure.gnu"; then
      echo &&
      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
    elif test -f "$ac_srcdir/configure"; then
      echo &&
      $SHELL "$ac_srcdir/configure" --help=recursive
    else
      printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
    fi || ac_status=$?
    cd "$ac_pwd" || { ac_status=$?; break; }
  done
fi

test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
  cat <<\_ACEOF
open_pdks configure 1.0
generated by GNU Autoconf 2.72

Copyright (C) 2023 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
  exit
fi

## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
ac_configure_args_raw=
for ac_arg
do
  case $ac_arg in
  *\'*)
    ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
  esac
  as_fn_append ac_configure_args_raw " '$ac_arg'"
done

case $ac_configure_args_raw in
  *$as_nl*)
    ac_safe_unquote= ;;
  *)
    ac_unsafe_z='|&;<>()$`\\"*?[ ''	' # This string ends in space, tab.
    ac_unsafe_a="$ac_unsafe_z#~"
    ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
    ac_configure_args_raw=`      printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
esac

cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by open_pdks $as_me 1.0, which was
generated by GNU Autoconf 2.72.  Invocation command line was

  $ $0$ac_configure_args_raw

_ACEOF
exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##

hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`

/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`

_ASUNAME

as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    printf "%s\n" "PATH: $as_dir"
  done
IFS=$as_save_IFS

} >&5

cat >&5 <<_ACEOF


## ----------- ##
## Core tests. ##
## ----------- ##

_ACEOF


# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Strip out --silent because we don't want to record it for future runs.
# Also quote any args containing shell meta-characters.
# Make two passes to allow for proper duplicate-argument suppression.
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
ac_must_keep_next=false
for ac_pass in 1 2
do
  for ac_arg
  do
    case $ac_arg in
    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
    | -silent | --silent | --silen | --sile | --sil)
      continue ;;
    *\'*)
      ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    case $ac_pass in
    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
    2)
      as_fn_append ac_configure_args1 " '$ac_arg'"
      if test $ac_must_keep_next = true; then
	ac_must_keep_next=false # Got value, back to normal.
      else
	case $ac_arg in
	  *=* | --config-cache | -C | -disable-* | --disable-* \
	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
	  | -with-* | --with-* | -without-* | --without-* | --x)
	    case "$ac_configure_args0 " in
	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
	    esac
	    ;;
	  -* ) ac_must_keep_next=true ;;
	esac
      fi
      as_fn_append ac_configure_args " '$ac_arg'"
      ;;
    esac
  done
done
{ ac_configure_args0=; unset ac_configure_args0;}
{ ac_configure_args1=; unset ac_configure_args1;}

# When interrupted or exit'd, cleanup temporary files, and complete
# config.log.  We remove comments because anyway the quotes in there
# would cause problems or look ugly.
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
  # Sanitize IFS.
  IFS=" ""	$as_nl"
  # Save into config.log some information that might help in debugging.
  {
    echo

    printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
    echo
    # The following way of writing the cache mishandles newlines in values,
(
  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
    eval ac_val=\$$ac_var
    case $ac_val in #(
    *${as_nl}*)
      case $ac_var in #(
      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      esac
      case $ac_var in #(
      _ | IFS | as_nl) ;; #(
      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
      *) { eval $ac_var=; unset $ac_var;} ;;
      esac ;;
    esac
  done
  (set) 2>&1 |
    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
    *${as_nl}ac_space=\ *)
      sed -n \
	"s/'\''/'\''\\\\'\'''\''/g;
	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
      ;; #(
    *)
      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
      ;;
    esac |
    sort
)
    echo

    printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
    echo
    for ac_var in $ac_subst_vars
    do
      eval ac_val=\$$ac_var
      case $ac_val in
      *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
      esac
      printf "%s\n" "$ac_var='\''$ac_val'\''"
    done | sort
    echo

    if test -n "$ac_subst_files"; then
      printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
      echo
      for ac_var in $ac_subst_files
      do
	eval ac_val=\$$ac_var
	case $ac_val in
	*\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
	esac
	printf "%s\n" "$ac_var='\''$ac_val'\''"
      done | sort
      echo
    fi

    if test -s confdefs.h; then
      printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
      echo
      cat confdefs.h
      echo
    fi
    test "$ac_signal" != 0 &&
      printf "%s\n" "$as_me: caught signal $ac_signal"
    printf "%s\n" "$as_me: exit $exit_status"
  } >&5
  rm -f core *.core core.conftest.* &&
    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
    exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0

# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h

printf "%s\n" "/* confdefs.h */" > confdefs.h

# Predefined preprocessor variables.

printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h


# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
if test -n "$CONFIG_SITE"; then
  ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
  ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
  ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi

for ac_site_file in $ac_site_files
do
  case $ac_site_file in #(
  */*) :
     ;; #(
  *) :
    ac_site_file=./$ac_site_file ;;
esac
  if test -f "$ac_site_file" && test -r "$ac_site_file"; then
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
    sed 's/^/| /' "$ac_site_file" >&5
    . "$ac_site_file" \
      || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See 'config.log' for more details" "$LINENO" 5; }
  fi
done

if test -r "$cache_file"; then
  # Some versions of bash will fail to source /dev/null (special files
  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
    case $cache_file in
      [\\/]* | ?:[\\/]* ) . "$cache_file";;
      *)                      . "./$cache_file";;
    esac
  fi
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
  >$cache_file
fi

# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
for ac_var in $ac_precious_vars; do
  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  eval ac_new_set=\$ac_env_${ac_var}_set
  eval ac_old_val=\$ac_cv_env_${ac_var}_value
  eval ac_new_val=\$ac_env_${ac_var}_value
  case $ac_old_set,$ac_new_set in
    set,)
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5
printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;}
      ac_cache_corrupted=: ;;
    ,set)
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5
printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;}
      ac_cache_corrupted=: ;;
    ,);;
    *)
      if test "x$ac_old_val" != "x$ac_new_val"; then
	# differences in whitespace do not lead to failure.
	ac_old_val_w=`echo x $ac_old_val`
	ac_new_val_w=`echo x $ac_new_val`
	if test "$ac_old_val_w" != "$ac_new_val_w"; then
	  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5
printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;}
	  ac_cache_corrupted=:
	else
	  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5
printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;}
	  eval $ac_var=\$ac_old_val
	fi
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}:   former value:  '$ac_old_val'" >&5
printf "%s\n" "$as_me:   former value:  '$ac_old_val'" >&2;}
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}:   current value: '$ac_new_val'" >&5
printf "%s\n" "$as_me:   current value: '$ac_new_val'" >&2;}
      fi;;
  esac
  # Pass precious variables to config.status.
  if test "$ac_new_set" = set; then
    case $ac_new_val in
    *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
    *) ac_arg=$ac_var=$ac_new_val ;;
    esac
    case " $ac_configure_args " in
      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
    esac
  fi
done
if $ac_cache_corrupted; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;}
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
  as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file'
	    and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
## -------------------- ##

ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu



# AC_PREFIX_DEFAULT(/usr)


## REQUIRES: https://www.gnu.org/software/autoconf-archive/ax_python_module.html#ax_python_module






        if test -n "$PYTHON"; then
      # If the user set $PYTHON, use it and don't search something else.
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.4" >&5
printf %s "checking whether $PYTHON version is >= 3.4... " >&6; }
      prog="import sys
# split strings by '.' and convert to numeric.  Append some zeros
# because we need at least 4 digits for the hex conversion.
# map returns an iterator in Python 3.0 and a list in 2.x
minver = list(map(int, '3.4'.split('.'))) + [0, 0, 0]
minverhex = 0
# xrange is not present in Python 3.0 and range returns an iterator
for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
sys.exit(sys.hexversion < minverhex)"
  if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5
   ($PYTHON -c "$prog") >&5 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
then :
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
else case e in #(
  e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
			       as_fn_error $? "Python interpreter is too old" "$LINENO" 5 ;;
esac
fi
      am_display_PYTHON=$PYTHON
    else
      # Otherwise, try each interpreter until we find one that satisfies
      # VERSION.
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.4" >&5
printf %s "checking for a Python interpreter with version >= 3.4... " >&6; }
if test ${am_cv_pathless_PYTHON+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e)
	for am_cv_pathless_PYTHON in python python2 python3  python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3  python3.2 python3.1 python3.0  python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1  python2.0 none; do
	  test "$am_cv_pathless_PYTHON" = none && break
	  prog="import sys
# split strings by '.' and convert to numeric.  Append some zeros
# because we need at least 4 digits for the hex conversion.
# map returns an iterator in Python 3.0 and a list in 2.x
minver = list(map(int, '3.4'.split('.'))) + [0, 0, 0]
minverhex = 0
# xrange is not present in Python 3.0 and range returns an iterator
for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
sys.exit(sys.hexversion < minverhex)"
  if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5
   ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
then :
  break
fi
	done ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5
printf "%s\n" "$am_cv_pathless_PYTHON" >&6; }
      # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
      if test "$am_cv_pathless_PYTHON" = none; then
	PYTHON=:
      else
        # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args.
set dummy $am_cv_pathless_PYTHON; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PYTHON+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) case $PYTHON in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
    ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext"
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac ;;
esac
fi
PYTHON=$ac_cv_path_PYTHON
if test -n "$PYTHON"; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
printf "%s\n" "$PYTHON" >&6; }
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi


      fi
      am_display_PYTHON=$am_cv_pathless_PYTHON
    fi


  if test "$PYTHON" = :; then
      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5
  else


  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
printf %s "checking for $am_display_PYTHON version... " >&6; }
if test ${am_cv_python_version+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) am_cv_python_version=`$PYTHON -c "import sys; print('%u.%u' % sys.version_info[:2])"` ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
printf "%s\n" "$am_cv_python_version" >&6; }
  PYTHON_VERSION=$am_cv_python_version



  PYTHON_PREFIX='${prefix}'

  PYTHON_EXEC_PREFIX='${exec_prefix}'



  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
printf %s "checking for $am_display_PYTHON platform... " >&6; }
if test ${am_cv_python_platform+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5
printf "%s\n" "$am_cv_python_platform" >&6; }
  PYTHON_PLATFORM=$am_cv_python_platform


  # Just factor out some code duplication.
  am_python_setup_sysconfig="\
import sys
# Prefer sysconfig over distutils.sysconfig, for better compatibility
# with python 3.x.  See automake bug#10227.
try:
    import sysconfig
except ImportError:
    can_use_sysconfig = 0
else:
    can_use_sysconfig = 1
# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
# <https://github.com/pypa/virtualenv/issues/118>
try:
    from platform import python_implementation
    if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
        can_use_sysconfig = 0
except ImportError:
    pass"


            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
printf %s "checking for $am_display_PYTHON script directory... " >&6; }
if test ${am_cv_python_pythondir+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) if test "x$prefix" = xNONE
     then
       am_py_prefix=$ac_default_prefix
     else
       am_py_prefix=$prefix
     fi
     am_cv_python_pythondir=`$PYTHON -c "
$am_python_setup_sysconfig
if can_use_sysconfig:
    sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
else:
    from distutils import sysconfig
    sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
sys.stdout.write(sitedir)"`
     case $am_cv_python_pythondir in
     $am_py_prefix*)
       am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
       am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
       ;;
     *)
       case $am_py_prefix in
         /usr|/System*) ;;
         *)
	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
	  ;;
       esac
       ;;
     esac
     ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
printf "%s\n" "$am_cv_python_pythondir" >&6; }
  pythondir=$am_cv_python_pythondir



  pkgpythondir=\${pythondir}/$PACKAGE


        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
printf %s "checking for $am_display_PYTHON extension module directory... " >&6; }
if test ${am_cv_python_pyexecdir+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) if test "x$exec_prefix" = xNONE
     then
       am_py_exec_prefix=$am_py_prefix
     else
       am_py_exec_prefix=$exec_prefix
     fi
     am_cv_python_pyexecdir=`$PYTHON -c "
$am_python_setup_sysconfig
if can_use_sysconfig:
    sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
else:
    from distutils import sysconfig
    sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
sys.stdout.write(sitedir)"`
     case $am_cv_python_pyexecdir in
     $am_py_exec_prefix*)
       am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
       am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
       ;;
     *)
       case $am_py_exec_prefix in
         /usr|/System*) ;;
         *)
	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
	   ;;
       esac
       ;;
     esac
     ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
printf "%s\n" "$am_cv_python_pyexecdir" >&6; }
  pyexecdir=$am_cv_python_pyexecdir



  pkgpyexecdir=\${pyexecdir}/$PACKAGE



  fi



    if test -z $PYTHON;
    then
        if test -z "";
        then
            PYTHON="python3"
        else
            PYTHON=""
        fi
    fi
    PYTHON_NAME=`basename $PYTHON`
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $PYTHON_NAME module: distutils" >&5
printf %s "checking $PYTHON_NAME module: distutils... " >&6; }
    $PYTHON -c "import distutils" 2>/dev/null
    if test $? -eq 0;
    then
        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
        eval HAVE_PYMOD_DISTUTILS=yes
    else
        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
        eval HAVE_PYMOD_DISTUTILS=no
        #
        if test -n ""
        then
            as_fn_error $? "failed to find required module distutils" "$LINENO" 5
            exit 1
        fi
    fi


# Check for Mac OS X gsed vs. sed


{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
printf %s "checking for a sed that does not truncate output... " >&6; }
if test ${ac_cv_path_SED+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e)           ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
     for ac_i in 1 2 3 4 5 6 7; do
       ac_script="$ac_script$as_nl$ac_script"
     done
     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
     { ac_script=; unset ac_script;}
     if test -z "$SED"; then
  ac_path_SED_found=false
  # Loop through the user's path and test for each of PROGNAME-LIST
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    for ac_prog in sed gsed
   do
    for ac_exec_ext in '' $ac_executable_extensions; do
      ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
      as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found.
  # Check for GNU $ac_path_SED
case `"$ac_path_SED" --version 2>&1` in #(
*GNU*)
  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
#(
*)
  ac_count=0
  printf %s 0123456789 >"conftest.in"
  while :
  do
    cat "conftest.in" "conftest.in" >"conftest.tmp"
    mv "conftest.tmp" "conftest.in"
    cp "conftest.in" "conftest.nl"
    printf "%s\n" '' >> "conftest.nl"
    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
    as_fn_arith $ac_count + 1 && ac_count=$as_val
    if test $ac_count -gt ${ac_path_SED_max-0}; then
      # Best one so far, save it but keep looking for a better one
      ac_cv_path_SED="$ac_path_SED"
      ac_path_SED_max=$ac_count
    fi
    # 10*(2^10) chars as input seems more than enough
    test $ac_count -gt 10 && break
  done
  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac

      $ac_path_SED_found && break 3
    done
  done
  done
IFS=$as_save_IFS
  if test -z "$ac_cv_path_SED"; then
    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
  fi
else
  ac_cv_path_SED=$SED
fi
 ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
printf "%s\n" "$ac_cv_path_SED" >&6; }
 SED="$ac_cv_path_SED"
  rm -f conftest.sed



realpath() {
    # Cross-platform, handles empty argument, and ~
    if [ "$#" != "1" ] ; then return ; fi
    python3 -c 'import os,sys;print(os.path.realpath(os.path.expanduser(sys.argv[1])))' $1
}

ENABLED_TECHS=

# Export the open_pdks top level directory
OPENPDKS_TOP=`cd .. && pwd`

# detect PDKs based on directories that include Makefile.in files


# define tools
# define tools to install setup files for.  This does not imply that the tools are
# available on the system;  just that open_pdks will install the setup files for them.


# check for the source and install paths for each PDK.


{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found technology directories: gf180mcu sky130" >&5
printf "%s\n" "$as_me: Found technology directories: gf180mcu sky130" >&6;}



    # --enable-pdk-[pdk]=/path/to/pdk

        echo "Checking technology gf180mcu..."


        GF180MCU_ENABLED_VARIANTS="all"
        GF180MCU_SOURCE_PATH=""
        GF180MCU_LINK_TARGETS="none"
        GF180MCU_AUTO="0"

        # Check whether --enable-gf180mcu-gf180mcu was given.
if test ${enable_gf180mcu_pdk+y}
then :
  enableval=$enable_gf180mcu_pdk;
                if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                    export GF180MCU_SOURCE_PATH=../sources/gf180mcu-pdk
            	    GF180MCU_AUTO="1"
		    ENABLED_TECHS="$ENABLED_TECHS gf180mcu"
                elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                    echo "Disabling gf180mcu..."
                else
                    GF180MCU_SOURCE_PATH=$enableval
		    ENABLED_TECHS="$ENABLED_TECHS gf180mcu"
                fi

fi


        if [ "$GF180MCU_SOURCE_PATH" != "" ]; then
            GF180MCU_SOURCE_PATH=`realpath $GF180MCU_SOURCE_PATH`
            GF180MCU_BASENAME=`basename $GF180MCU_SOURCE_PATH`
	    if [ "$GF180MCU_BASENAME" = "libraries" ]; then
		GF180MCU_SOURCE_PATH=`dirname $GF180MCU_SOURCE_PATH`
	    fi
            # Basic check that the PDK path exists, unless depending on Makefile
	    # to download it automatically.
            if [ "$GF180MCU_AUTO" = "0" ]; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking specified path for 'gf180mcu' at $GF180MCU_SOURCE_PATH" >&5
printf "%s\n" "$as_me: Checking specified path for 'gf180mcu' at $GF180MCU_SOURCE_PATH" >&6;}
                as_ac_File=`printf "%s\n" "ac_cv_file_$GF180MCU_SOURCE_PATH" | sed "$as_sed_sh"`
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $GF180MCU_SOURCE_PATH" >&5
printf %s "checking for $GF180MCU_SOURCE_PATH... " >&6; }
if eval test \${$as_ac_File+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) test "$cross_compiling" = yes &&
  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$GF180MCU_SOURCE_PATH"; then
  eval "$as_ac_File=yes"
else
  eval "$as_ac_File=no"
fi ;;
esac
fi
eval ac_res=\$$as_ac_File
	       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
printf "%s\n" "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"
then :

                    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: 'gf180mcu' source path found at $GF180MCU_SOURCE_PATH" >&5
printf "%s\n" "$as_me: 'gf180mcu' source path found at $GF180MCU_SOURCE_PATH" >&6;}

else case e in #(
  e)
                    as_fn_error $? "Specified path for 'gf180mcu' at $GF180MCU_SOURCE_PATH not found" "$LINENO" 5
                 ;;
esac
fi

	    else
		{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: PDK 'gf180mcu' will be downloaded automatically during make." >&5
printf "%s\n" "$as_me: PDK 'gf180mcu' will be downloaded automatically during make." >&6;}
	    fi

            # --with-pdk-link-targets=PDK_LINK_TARGETS

# Check whether --with-gf180mcu-link-targets was given.
if test ${with_gf180mcu_link_targets+y}
then :
  withval=$with_gf180mcu_link_targets; GF180MCU_LINK_TARGETS=$with_gf180mcu_link_targets

fi


            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Link targets set to $GF180MCU_LINK_TARGETS" >&5
printf "%s\n" "$as_me: Link targets set to $GF180MCU_LINK_TARGETS" >&6;}

            # --with-pdk-variants=PDK_ENABLED_VARIANTS

# Check whether --with-gf180mcu-variants was given.
if test ${with_gf180mcu_variants+y}
then :
  withval=$with_gf180mcu_variants; GF180MCU_ENABLED_VARIANTS=$with_gf180mcu_variants

fi


            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabled variants set to $GF180MCU_ENABLED_VARIANTS" >&5
printf "%s\n" "$as_me: Enabled variants set to $GF180MCU_ENABLED_VARIANTS" >&6;}
        fi





        echo "Checking technology sky130..."


        SKY130_ENABLED_VARIANTS="all"
        SKY130_SOURCE_PATH=""
        SKY130_LINK_TARGETS="none"
        SKY130_AUTO="0"

        # Check whether --enable-sky130-sky130 was given.
if test ${enable_sky130_pdk+y}
then :
  enableval=$enable_sky130_pdk;
                if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                    export SKY130_SOURCE_PATH=../sources/sky130-pdk
            	    SKY130_AUTO="1"
		    ENABLED_TECHS="$ENABLED_TECHS sky130"
                elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                    echo "Disabling sky130..."
                else
                    SKY130_SOURCE_PATH=$enableval
		    ENABLED_TECHS="$ENABLED_TECHS sky130"
                fi

fi


        if [ "$SKY130_SOURCE_PATH" != "" ]; then
            SKY130_SOURCE_PATH=`realpath $SKY130_SOURCE_PATH`
            SKY130_BASENAME=`basename $SKY130_SOURCE_PATH`
	    if [ "$SKY130_BASENAME" = "libraries" ]; then
		SKY130_SOURCE_PATH=`dirname $SKY130_SOURCE_PATH`
	    fi
            # Basic check that the PDK path exists, unless depending on Makefile
	    # to download it automatically.
            if [ "$SKY130_AUTO" = "0" ]; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking specified path for 'sky130' at $SKY130_SOURCE_PATH" >&5
printf "%s\n" "$as_me: Checking specified path for 'sky130' at $SKY130_SOURCE_PATH" >&6;}
                as_ac_File=`printf "%s\n" "ac_cv_file_$SKY130_SOURCE_PATH" | sed "$as_sed_sh"`
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $SKY130_SOURCE_PATH" >&5
printf %s "checking for $SKY130_SOURCE_PATH... " >&6; }
if eval test \${$as_ac_File+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) test "$cross_compiling" = yes &&
  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$SKY130_SOURCE_PATH"; then
  eval "$as_ac_File=yes"
else
  eval "$as_ac_File=no"
fi ;;
esac
fi
eval ac_res=\$$as_ac_File
	       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
printf "%s\n" "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"
then :

                    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: 'sky130' source path found at $SKY130_SOURCE_PATH" >&5
printf "%s\n" "$as_me: 'sky130' source path found at $SKY130_SOURCE_PATH" >&6;}

else case e in #(
  e)
                    as_fn_error $? "Specified path for 'sky130' at $SKY130_SOURCE_PATH not found" "$LINENO" 5
                 ;;
esac
fi

	    else
		{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: PDK 'sky130' will be downloaded automatically during make." >&5
printf "%s\n" "$as_me: PDK 'sky130' will be downloaded automatically during make." >&6;}
	    fi

            # --with-pdk-link-targets=PDK_LINK_TARGETS

# Check whether --with-sky130-link-targets was given.
if test ${with_sky130_link_targets+y}
then :
  withval=$with_sky130_link_targets; SKY130_LINK_TARGETS=$with_sky130_link_targets

fi


            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Link targets set to $SKY130_LINK_TARGETS" >&5
printf "%s\n" "$as_me: Link targets set to $SKY130_LINK_TARGETS" >&6;}

            # --with-pdk-variants=PDK_ENABLED_VARIANTS

# Check whether --with-sky130-variants was given.
if test ${with_sky130_variants+y}
then :
  withval=$with_sky130_variants; SKY130_ENABLED_VARIANTS=$with_sky130_variants

fi


            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabled variants set to $SKY130_ENABLED_VARIANTS" >&5
printf "%s\n" "$as_me: Enabled variants set to $SKY130_ENABLED_VARIANTS" >&6;}
        fi







# Export the list of known technologies to the Makefile
ALL_TECHS="gf180mcu sky130"


# Set variables for tool setups


{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found tools: klayout magic netgen irsim librelane qflow xschem xcircuit" >&5
printf "%s\n" "$as_me: Found tools: klayout magic netgen irsim librelane qflow xschem xcircuit" >&6;}





        KLAYOUT_DISABLED=0
        # Check whether --enable-klayout was given.
if test ${enable_klayout+y}
then :
  enableval=$enable_klayout;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    KLAYOUT_DISABLED=1
                fi


fi





        MAGIC_DISABLED=0
        # Check whether --enable-magic was given.
if test ${enable_magic+y}
then :
  enableval=$enable_magic;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    MAGIC_DISABLED=1
                fi


fi





        NETGEN_DISABLED=0
        # Check whether --enable-netgen was given.
if test ${enable_netgen+y}
then :
  enableval=$enable_netgen;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    NETGEN_DISABLED=1
                fi


fi





        IRSIM_DISABLED=0
        # Check whether --enable-irsim was given.
if test ${enable_irsim+y}
then :
  enableval=$enable_irsim;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    IRSIM_DISABLED=1
                fi


fi





        LIBRELANE_DISABLED=0
        # Check whether --enable-librelane was given.
if test ${enable_librelane+y}
then :
  enableval=$enable_librelane;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    LIBRELANE_DISABLED=1
                fi


fi





        QFLOW_DISABLED=0
        # Check whether --enable-qflow was given.
if test ${enable_qflow+y}
then :
  enableval=$enable_qflow;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    QFLOW_DISABLED=1
                fi


fi





        XSCHEM_DISABLED=0
        # Check whether --enable-xschem was given.
if test ${enable_xschem+y}
then :
  enableval=$enable_xschem;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    XSCHEM_DISABLED=1
                fi


fi





        XCIRCUIT_DISABLED=0
        # Check whether --enable-xcircuit was given.
if test ${enable_xcircuit+y}
then :
  enableval=$enable_xcircuit;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    XCIRCUIT_DISABLED=1
                fi


fi





# Magic
# Extract the first word of "magic", so it can be a program name with args.
set dummy magic; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_MAGIC+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) case $MAGIC in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
    ac_cv_path_MAGIC="$as_dir$ac_word$ac_exec_ext"
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac ;;
esac
fi
MAGIC=$ac_cv_path_MAGIC
if test -n "$MAGIC"; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC" >&5
printf "%s\n" "$MAGIC" >&6; }
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi


if test -z "$MAGIC"; then
   as_fn_error $? "You need 'magic' to generate the needed various cell views." "$LINENO" 5
fi
# Extract the first word of "patch", so it can be a program name with args.
set dummy patch; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PATCH+y}
then :
  printf %s "(cached) " >&6
else case e in #(
  e) case $PATCH in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_PATCH="$PATCH" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
    ac_cv_path_PATCH="$as_dir$ac_word$ac_exec_ext"
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac ;;
esac
fi
PATCH=$ac_cv_path_PATCH
if test -n "$PATCH"; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PATCH" >&5
printf "%s\n" "$PATCH" >&6; }
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi


if test -z "$PATCH"; then
   as_fn_error $? "You need 'patch' to apply patches." "$LINENO" 5
fi

# Other installations (libraries or tools if applicable)


# Optional installations (like the above, but disabled by default)


# NOTE:  This part of the configuration should be based off of the
# contents of a file with a predetermined name existing in each of
# the open PDK directories.

# SkyWater sky130 essential






    # echo target targetvar flag location

    SKY130_FD_PR_PATH=""

    # Check whether --enable-primitive-sky130 was given.
if test ${enable_primitive_sky130+y}
then :
  enableval=$enable_primitive_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_pr' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_pr' will be installed automatically during make." >&6;}
        	export SKY130_FD_PR_PATH=../sources/sky130_fd_pr
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_pr'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_pr'" >&6;}
    		export SKY130_FD_PR_PATH=""
            else
                SKY130_FD_PR_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_pr' at $SKY130_FD_PR_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_pr' at $SKY130_FD_PR_PATH" >&6;}
            fi
            SKY130_FD_PR_PATH=`realpath $SKY130_FD_PR_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_pr' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_pr' will be installed automatically during make." >&6;}
	    SKY130_FD_PR_PATH=../sources/sky130_fd_pr

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_IO_PATH=""

    # Check whether --enable-io-sky130 was given.
if test ${enable_io_sky130+y}
then :
  enableval=$enable_io_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_io' will be installed automatically during make." >&6;}
        	export SKY130_FD_IO_PATH=../sources/sky130_fd_io
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_io'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_io'" >&6;}
    		export SKY130_FD_IO_PATH=""
            else
                SKY130_FD_IO_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_io' at $SKY130_FD_IO_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_io' at $SKY130_FD_IO_PATH" >&6;}
            fi
            SKY130_FD_IO_PATH=`realpath $SKY130_FD_IO_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_io' will be installed automatically during make." >&6;}
	    SKY130_FD_IO_PATH=../sources/sky130_fd_io

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_HS_PATH=""

    # Check whether --enable-sc-hs-sky130 was given.
if test ${enable_sc_hs_sky130+y}
then :
  enableval=$enable_sc_hs_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hs' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hs' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_HS_PATH=../sources/sky130_fd_sc_hs
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_hs'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_hs'" >&6;}
    		export SKY130_FD_SC_HS_PATH=""
            else
                SKY130_FD_SC_HS_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_hs' at $SKY130_FD_SC_HS_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_hs' at $SKY130_FD_SC_HS_PATH" >&6;}
            fi
            SKY130_FD_SC_HS_PATH=`realpath $SKY130_FD_SC_HS_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hs' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hs' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_HS_PATH=../sources/sky130_fd_sc_hs

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_MS_PATH=""

    # Check whether --enable-sc-ms-sky130 was given.
if test ${enable_sc_ms_sky130+y}
then :
  enableval=$enable_sc_ms_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_ms' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_ms' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_MS_PATH=../sources/sky130_fd_sc_ms
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_ms'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_ms'" >&6;}
    		export SKY130_FD_SC_MS_PATH=""
            else
                SKY130_FD_SC_MS_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_ms' at $SKY130_FD_SC_MS_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_ms' at $SKY130_FD_SC_MS_PATH" >&6;}
            fi
            SKY130_FD_SC_MS_PATH=`realpath $SKY130_FD_SC_MS_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_ms' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_ms' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_MS_PATH=../sources/sky130_fd_sc_ms

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_LS_PATH=""

    # Check whether --enable-sc-ls-sky130 was given.
if test ${enable_sc_ls_sky130+y}
then :
  enableval=$enable_sc_ls_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_ls' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_ls' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_LS_PATH=../sources/sky130_fd_sc_ls
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_ls'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_ls'" >&6;}
    		export SKY130_FD_SC_LS_PATH=""
            else
                SKY130_FD_SC_LS_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_ls' at $SKY130_FD_SC_LS_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_ls' at $SKY130_FD_SC_LS_PATH" >&6;}
            fi
            SKY130_FD_SC_LS_PATH=`realpath $SKY130_FD_SC_LS_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_ls' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_ls' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_LS_PATH=../sources/sky130_fd_sc_ls

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_LP_PATH=""

    # Check whether --enable-sc-lp-sky130 was given.
if test ${enable_sc_lp_sky130+y}
then :
  enableval=$enable_sc_lp_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_lp' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_lp' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_LP_PATH=../sources/sky130_fd_sc_lp
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_lp'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_lp'" >&6;}
    		export SKY130_FD_SC_LP_PATH=""
            else
                SKY130_FD_SC_LP_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_lp' at $SKY130_FD_SC_LP_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_lp' at $SKY130_FD_SC_LP_PATH" >&6;}
            fi
            SKY130_FD_SC_LP_PATH=`realpath $SKY130_FD_SC_LP_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_lp' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_lp' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_LP_PATH=../sources/sky130_fd_sc_lp

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_HD_PATH=""

    # Check whether --enable-sc-hd-sky130 was given.
if test ${enable_sc_hd_sky130+y}
then :
  enableval=$enable_sc_hd_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hd' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hd' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_HD_PATH=../sources/sky130_fd_sc_hd
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_hd'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_hd'" >&6;}
    		export SKY130_FD_SC_HD_PATH=""
            else
                SKY130_FD_SC_HD_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_hd' at $SKY130_FD_SC_HD_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_hd' at $SKY130_FD_SC_HD_PATH" >&6;}
            fi
            SKY130_FD_SC_HD_PATH=`realpath $SKY130_FD_SC_HD_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hd' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hd' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_HD_PATH=../sources/sky130_fd_sc_hd

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_HDLL_PATH=""

    # Check whether --enable-sc-hdll-sky130 was given.
if test ${enable_sc_hdll_sky130+y}
then :
  enableval=$enable_sc_hdll_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hdll' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hdll' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_HDLL_PATH=../sources/sky130_fd_sc_hdll
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_hdll'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_hdll'" >&6;}
    		export SKY130_FD_SC_HDLL_PATH=""
            else
                SKY130_FD_SC_HDLL_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_hdll' at $SKY130_FD_SC_HDLL_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_hdll' at $SKY130_FD_SC_HDLL_PATH" >&6;}
            fi
            SKY130_FD_SC_HDLL_PATH=`realpath $SKY130_FD_SC_HDLL_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hdll' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hdll' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_HDLL_PATH=../sources/sky130_fd_sc_hdll

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_SC_HVL_PATH=""

    # Check whether --enable-sc-hvl-sky130 was given.
if test ${enable_sc_hvl_sky130+y}
then :
  enableval=$enable_sc_hvl_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hvl' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hvl' will be installed automatically during make." >&6;}
        	export SKY130_FD_SC_HVL_PATH=../sources/sky130_fd_sc_hvl
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_sc_hvl'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_sc_hvl'" >&6;}
    		export SKY130_FD_SC_HVL_PATH=""
            else
                SKY130_FD_SC_HVL_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_sc_hvl' at $SKY130_FD_SC_HVL_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_sc_hvl' at $SKY130_FD_SC_HVL_PATH" >&6;}
            fi
            SKY130_FD_SC_HVL_PATH=`realpath $SKY130_FD_SC_HVL_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_sc_hvl' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_sc_hvl' will be installed automatically during make." >&6;}
	    SKY130_FD_SC_HVL_PATH=../sources/sky130_fd_sc_hvl

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_ML_XX_HD_PATH=""

    # Check whether --enable-alpha-sky130 was given.
if test ${enable_alpha_sky130+y}
then :
  enableval=$enable_alpha_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_ml_xx_hd' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_ml_xx_hd' will be installed automatically during make." >&6;}
        	export SKY130_ML_XX_HD_PATH=../sources/sky130_ml_xx_hd
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_ml_xx_hd'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_ml_xx_hd'" >&6;}
    		export SKY130_ML_XX_HD_PATH=""
            else
                SKY130_ML_XX_HD_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_ml_xx_hd' at $SKY130_ML_XX_HD_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_ml_xx_hd' at $SKY130_ML_XX_HD_PATH" >&6;}
            fi
            SKY130_ML_XX_HD_PATH=`realpath $SKY130_ML_XX_HD_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_ml_xx_hd' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_ml_xx_hd' will be installed automatically during make." >&6;}
	    SKY130_ML_XX_HD_PATH=../sources/sky130_ml_xx_hd

     ;;
esac
fi












    # echo target targetvar flag location

    XSCHEM_SKY130_PATH=""

    # Check whether --enable-xschem-sky130 was given.
if test ${enable_xschem_sky130+y}
then :
  enableval=$enable_xschem_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'xschem_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'xschem_sky130' will be installed automatically during make." >&6;}
        	export XSCHEM_SKY130_PATH=../sources/xschem_sky130
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'xschem_sky130'" >&5
printf "%s\n" "$as_me: Disabling package 'xschem_sky130'" >&6;}
    		export XSCHEM_SKY130_PATH=""
            else
                XSCHEM_SKY130_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'xschem_sky130' at $XSCHEM_SKY130_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'xschem_sky130' at $XSCHEM_SKY130_PATH" >&6;}
            fi
            XSCHEM_SKY130_PATH=`realpath $XSCHEM_SKY130_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'xschem_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'xschem_sky130' will be installed automatically during make." >&6;}
	    XSCHEM_SKY130_PATH=../sources/xschem_sky130

     ;;
esac
fi












    # echo target targetvar flag location

    KLAYOUT_SKY130_PATH=""

    # Check whether --enable-klayout-sky130 was given.
if test ${enable_klayout_sky130+y}
then :
  enableval=$enable_klayout_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'klayout_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'klayout_sky130' will be installed automatically during make." >&6;}
        	export KLAYOUT_SKY130_PATH=../sources/klayout_sky130
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'klayout_sky130'" >&5
printf "%s\n" "$as_me: Disabling package 'klayout_sky130'" >&6;}
    		export KLAYOUT_SKY130_PATH=""
            else
                KLAYOUT_SKY130_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'klayout_sky130' at $KLAYOUT_SKY130_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'klayout_sky130' at $KLAYOUT_SKY130_PATH" >&6;}
            fi
            KLAYOUT_SKY130_PATH=`realpath $KLAYOUT_SKY130_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'klayout_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'klayout_sky130' will be installed automatically during make." >&6;}
	    KLAYOUT_SKY130_PATH=../sources/klayout_sky130

     ;;
esac
fi












    # echo target targetvar flag location

    PRECHECK_SKY130_PATH=""

    # Check whether --enable-precheck-sky130 was given.
if test ${enable_precheck_sky130+y}
then :
  enableval=$enable_precheck_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'precheck_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'precheck_sky130' will be installed automatically during make." >&6;}
        	export PRECHECK_SKY130_PATH=../sources/precheck_sky130
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'precheck_sky130'" >&5
printf "%s\n" "$as_me: Disabling package 'precheck_sky130'" >&6;}
    		export PRECHECK_SKY130_PATH=""
            else
                PRECHECK_SKY130_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'precheck_sky130' at $PRECHECK_SKY130_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'precheck_sky130' at $PRECHECK_SKY130_PATH" >&6;}
            fi
            PRECHECK_SKY130_PATH=`realpath $PRECHECK_SKY130_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'precheck_sky130' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'precheck_sky130' will be installed automatically during make." >&6;}
	    PRECHECK_SKY130_PATH=../sources/precheck_sky130

     ;;
esac
fi







# SkyWater sky130 optional






    # echo target targetvar flag location

    SKY130_SRAM_MACROS_PATH=""

    # Check whether --enable-sram-sky130 was given.
if test ${enable_sram_sky130+y}
then :
  enableval=$enable_sram_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;}
        	export SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_sram_macros'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_sram_macros'" >&6;}
    		export SKY130_SRAM_MACROS_PATH=""
            else
                SKY130_SRAM_MACROS_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&6;}
            fi
            SKY130_SRAM_MACROS_PATH=`realpath $SKY130_SRAM_MACROS_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_sram_macros' will not be installed." >&6;}

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_BD_SRAM_PATH=""

    # Check whether --enable-sram-space-sky130 was given.
if test ${enable_sram_space_sky130+y}
then :
  enableval=$enable_sram_space_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_bd_sram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_bd_sram' will be installed automatically during make." >&6;}
        	export SKY130_FD_BD_SRAM_PATH=../sources/sky130_fd_bd_sram
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_bd_sram'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_bd_sram'" >&6;}
    		export SKY130_FD_BD_SRAM_PATH=""
            else
                SKY130_FD_BD_SRAM_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_bd_sram' at $SKY130_FD_BD_SRAM_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_bd_sram' at $SKY130_FD_BD_SRAM_PATH" >&6;}
            fi
            SKY130_FD_BD_SRAM_PATH=`realpath $SKY130_FD_BD_SRAM_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_bd_sram' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_bd_sram' will not be installed." >&6;}

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_FD_PR_RERAM_PATH=""

    # Check whether --enable-reram-sky130 was given.
if test ${enable_reram_sky130+y}
then :
  enableval=$enable_reram_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_pr_reram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_pr_reram' will be installed automatically during make." >&6;}
        	export SKY130_FD_PR_RERAM_PATH=../sources/sky130_fd_pr_reram
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_fd_pr_reram'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_fd_pr_reram'" >&6;}
    		export SKY130_FD_PR_RERAM_PATH=""
            else
                SKY130_FD_PR_RERAM_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_fd_pr_reram' at $SKY130_FD_PR_RERAM_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_fd_pr_reram' at $SKY130_FD_PR_RERAM_PATH" >&6;}
            fi
            SKY130_FD_PR_RERAM_PATH=`realpath $SKY130_FD_PR_RERAM_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_fd_pr_reram' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_fd_pr_reram' will not be installed." >&6;}

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_OSU_T12_PATH=""

    # Check whether --enable-osu-t12-sky130 was given.
if test ${enable_osu_t12_sky130+y}
then :
  enableval=$enable_osu_t12_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t12' will be installed automatically during make." >&6;}
        	export SKY130_OSU_T12_PATH=../sources/sky130_osu_t12
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t12'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_osu_t12'" >&6;}
    		export SKY130_OSU_T12_PATH=""
            else
                SKY130_OSU_T12_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&6;}
            fi
            SKY130_OSU_T12_PATH=`realpath $SKY130_OSU_T12_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t12' will not be installed." >&6;}

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_OSU_T15_PATH=""

    # Check whether --enable-osu-t15-sky130 was given.
if test ${enable_osu_t15_sky130+y}
then :
  enableval=$enable_osu_t15_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t15' will be installed automatically during make." >&6;}
        	export SKY130_OSU_T15_PATH=../sources/sky130_osu_t15
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t15'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_osu_t15'" >&6;}
    		export SKY130_OSU_T15_PATH=""
            else
                SKY130_OSU_T15_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&6;}
            fi
            SKY130_OSU_T15_PATH=`realpath $SKY130_OSU_T15_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t15' will not be installed." >&6;}

     ;;
esac
fi












    # echo target targetvar flag location

    SKY130_OSU_T18_PATH=""

    # Check whether --enable-osu-t18-sky130 was given.
if test ${enable_osu_t18_sky130+y}
then :
  enableval=$enable_osu_t18_sky130;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t18' will be installed automatically during make." >&6;}
        	export SKY130_OSU_T18_PATH=../sources/sky130_osu_t18
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t18'" >&5
printf "%s\n" "$as_me: Disabling package 'sky130_osu_t18'" >&6;}
    		export SKY130_OSU_T18_PATH=""
            else
                SKY130_OSU_T18_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&6;}
            fi
            SKY130_OSU_T18_PATH=`realpath $SKY130_OSU_T18_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will not be installed." >&5
printf "%s\n" "$as_me: Package 'sky130_osu_t18' will not be installed." >&6;}

     ;;
esac
fi







# GlobalFoundries gf180mcu essential






    # echo target targetvar flag location

    GF180MCU_FD_PR_PATH=""

    # Check whether --enable-primitive-gf180mcu was given.
if test ${enable_primitive_gf180mcu+y}
then :
  enableval=$enable_primitive_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_pr' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_pr' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_PR_PATH=../sources/gf180mcu_fd_pr
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_pr'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_pr'" >&6;}
    		export GF180MCU_FD_PR_PATH=""
            else
                GF180MCU_FD_PR_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_pr' at $GF180MCU_FD_PR_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_pr' at $GF180MCU_FD_PR_PATH" >&6;}
            fi
            GF180MCU_FD_PR_PATH=`realpath $GF180MCU_FD_PR_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_pr' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_pr' will be installed automatically during make." >&6;}
	    GF180MCU_FD_PR_PATH=../sources/gf180mcu_fd_pr

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_FD_PV_PATH=""

    # Check whether --enable-verification-gf180mcu was given.
if test ${enable_verification_gf180mcu+y}
then :
  enableval=$enable_verification_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_pv' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_pv' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_PV_PATH=../sources/gf180mcu_fd_pv
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_pv'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_pv'" >&6;}
    		export GF180MCU_FD_PV_PATH=""
            else
                GF180MCU_FD_PV_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_pv' at $GF180MCU_FD_PV_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_pv' at $GF180MCU_FD_PV_PATH" >&6;}
            fi
            GF180MCU_FD_PV_PATH=`realpath $GF180MCU_FD_PV_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_pv' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_pv' will be installed automatically during make." >&6;}
	    GF180MCU_FD_PV_PATH=../sources/gf180mcu_fd_pv

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_FD_IO_PATH=""

    # Check whether --enable-io-gf180mcu was given.
if test ${enable_io_gf180mcu+y}
then :
  enableval=$enable_io_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_io' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_IO_PATH=../sources/gf180mcu_fd_io
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_io'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_io'" >&6;}
    		export GF180MCU_FD_IO_PATH=""
            else
                GF180MCU_FD_IO_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_io' at $GF180MCU_FD_IO_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_io' at $GF180MCU_FD_IO_PATH" >&6;}
            fi
            GF180MCU_FD_IO_PATH=`realpath $GF180MCU_FD_IO_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_io' will be installed automatically during make." >&6;}
	    GF180MCU_FD_IO_PATH=../sources/gf180mcu_fd_io

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_FD_SC_MCU7T5V0_PATH=""

    # Check whether --enable-sc-7t5v0-gf180mcu was given.
if test ${enable_sc_7t5v0_gf180mcu+y}
then :
  enableval=$enable_sc_7t5v0_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_sc_mcu7t5v0' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_sc_mcu7t5v0' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_SC_MCU7T5V0_PATH=../sources/gf180mcu_fd_sc_mcu7t5v0
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_sc_mcu7t5v0'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_sc_mcu7t5v0'" >&6;}
    		export GF180MCU_FD_SC_MCU7T5V0_PATH=""
            else
                GF180MCU_FD_SC_MCU7T5V0_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_sc_mcu7t5v0' at $GF180MCU_FD_SC_MCU7T5V0_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_sc_mcu7t5v0' at $GF180MCU_FD_SC_MCU7T5V0_PATH" >&6;}
            fi
            GF180MCU_FD_SC_MCU7T5V0_PATH=`realpath $GF180MCU_FD_SC_MCU7T5V0_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_sc_mcu7t5v0' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_sc_mcu7t5v0' will be installed automatically during make." >&6;}
	    GF180MCU_FD_SC_MCU7T5V0_PATH=../sources/gf180mcu_fd_sc_mcu7t5v0

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_FD_SC_MCU9T5V0_PATH=""

    # Check whether --enable-sc-9t5v0-gf180mcu was given.
if test ${enable_sc_9t5v0_gf180mcu+y}
then :
  enableval=$enable_sc_9t5v0_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_sc_mcu9t5v0' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_sc_mcu9t5v0' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_SC_MCU9T5V0_PATH=../sources/gf180mcu_fd_sc_mcu9t5v0
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_sc_mcu9t5v0'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_sc_mcu9t5v0'" >&6;}
    		export GF180MCU_FD_SC_MCU9T5V0_PATH=""
            else
                GF180MCU_FD_SC_MCU9T5V0_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_sc_mcu9t5v0' at $GF180MCU_FD_SC_MCU9T5V0_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_sc_mcu9t5v0' at $GF180MCU_FD_SC_MCU9T5V0_PATH" >&6;}
            fi
            GF180MCU_FD_SC_MCU9T5V0_PATH=`realpath $GF180MCU_FD_SC_MCU9T5V0_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_sc_mcu9t5v0' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_sc_mcu9t5v0' will be installed automatically during make." >&6;}
	    GF180MCU_FD_SC_MCU9T5V0_PATH=../sources/gf180mcu_fd_sc_mcu9t5v0

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_FD_IP_SRAM_PATH=""

    # Check whether --enable-sram-gf180mcu was given.
if test ${enable_sram_gf180mcu+y}
then :
  enableval=$enable_sram_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_ip_sram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_ip_sram' will be installed automatically during make." >&6;}
        	export GF180MCU_FD_IP_SRAM_PATH=../sources/gf180mcu_fd_ip_sram
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_fd_ip_sram'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_fd_ip_sram'" >&6;}
    		export GF180MCU_FD_IP_SRAM_PATH=""
            else
                GF180MCU_FD_IP_SRAM_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_fd_ip_sram' at $GF180MCU_FD_IP_SRAM_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_fd_ip_sram' at $GF180MCU_FD_IP_SRAM_PATH" >&6;}
            fi
            GF180MCU_FD_IP_SRAM_PATH=`realpath $GF180MCU_FD_IP_SRAM_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_fd_ip_sram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_fd_ip_sram' will be installed automatically during make." >&6;}
	    GF180MCU_FD_IP_SRAM_PATH=../sources/gf180mcu_fd_ip_sram

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_OCD_ALPHA_PATH=""

    # Check whether --enable-alpha-gf180mcu was given.
if test ${enable_alpha_gf180mcu+y}
then :
  enableval=$enable_alpha_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&6;}
        	export GF180MCU_OCD_ALPHA_PATH=../sources/gf180mcu_ocd_alpha
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_ocd_alpha'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_ocd_alpha'" >&6;}
    		export GF180MCU_OCD_ALPHA_PATH=""
            else
                GF180MCU_OCD_ALPHA_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_ocd_alpha' at $GF180MCU_OCD_ALPHA_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_ocd_alpha' at $GF180MCU_OCD_ALPHA_PATH" >&6;}
            fi
            GF180MCU_OCD_ALPHA_PATH=`realpath $GF180MCU_OCD_ALPHA_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_alpha' will be installed automatically during make." >&6;}
	    GF180MCU_OCD_ALPHA_PATH=../sources/gf180mcu_ocd_alpha

     ;;
esac
fi







# GlobalFoundries gf180mcu optional






    # echo target targetvar flag location

    GF180MCU_OSU_SC_PATH=""

    # Check whether --enable-osu-sc-gf180mcu was given.
if test ${enable_osu_sc_gf180mcu+y}
then :
  enableval=$enable_osu_sc_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&6;}
        	export GF180MCU_OSU_SC_PATH=../sources/gf180mcu_osu_sc
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_osu_sc'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_osu_sc'" >&6;}
    		export GF180MCU_OSU_SC_PATH=""
            else
                GF180MCU_OSU_SC_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_osu_sc' at $GF180MCU_OSU_SC_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_osu_sc' at $GF180MCU_OSU_SC_PATH" >&6;}
            fi
            GF180MCU_OSU_SC_PATH=`realpath $GF180MCU_OSU_SC_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_osu_sc' will be installed automatically during make." >&6;}
	    GF180MCU_OSU_SC_PATH=../sources/gf180mcu_osu_sc

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_AS_SC_PATH=""

    # Check whether --enable-avalon-sc-gf180mcu was given.
if test ${enable_avalon_sc_gf180mcu+y}
then :
  enableval=$enable_avalon_sc_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_as_sc' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_as_sc' will be installed automatically during make." >&6;}
        	export GF180MCU_AS_SC_PATH=../sources/gf180mcu_as_sc
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_as_sc'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_as_sc'" >&6;}
    		export GF180MCU_AS_SC_PATH=""
            else
                GF180MCU_AS_SC_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_as_sc' at $GF180MCU_AS_SC_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_as_sc' at $GF180MCU_AS_SC_PATH" >&6;}
            fi
            GF180MCU_AS_SC_PATH=`realpath $GF180MCU_AS_SC_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_as_sc' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_as_sc' will be installed automatically during make." >&6;}
	    GF180MCU_AS_SC_PATH=../sources/gf180mcu_as_sc

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_RE_EFUSE_PATH=""

    # Check whether --enable-re-efuse-gf180mcu was given.
if test ${enable_re_efuse_gf180mcu+y}
then :
  enableval=$enable_re_efuse_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_re_efuse' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_re_efuse' will be installed automatically during make." >&6;}
        	export GF180MCU_RE_EFUSE_PATH=../sources/gf180mcu_re_efuse
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_re_efuse'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_re_efuse'" >&6;}
    		export GF180MCU_RE_EFUSE_PATH=""
            else
                GF180MCU_RE_EFUSE_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_re_efuse' at $GF180MCU_RE_EFUSE_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_re_efuse' at $GF180MCU_RE_EFUSE_PATH" >&6;}
            fi
            GF180MCU_RE_EFUSE_PATH=`realpath $GF180MCU_RE_EFUSE_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_re_efuse' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_re_efuse' will be installed automatically during make." >&6;}
	    GF180MCU_RE_EFUSE_PATH=../sources/gf180mcu_re_efuse

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_OCD_IO_PATH=""

    # Check whether --enable-ocd-io-gf180mcu was given.
if test ${enable_ocd_io_gf180mcu+y}
then :
  enableval=$enable_ocd_io_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&6;}
        	export GF180MCU_OCD_IO_PATH=../sources/gf180mcu_ocd_io
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_ocd_io'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_ocd_io'" >&6;}
    		export GF180MCU_OCD_IO_PATH=""
            else
                GF180MCU_OCD_IO_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_ocd_io' at $GF180MCU_OCD_IO_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_ocd_io' at $GF180MCU_OCD_IO_PATH" >&6;}
            fi
            GF180MCU_OCD_IO_PATH=`realpath $GF180MCU_OCD_IO_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_io' will be installed automatically during make." >&6;}
	    GF180MCU_OCD_IO_PATH=../sources/gf180mcu_ocd_io

     ;;
esac
fi












    # echo target targetvar flag location

    GF180MCU_OCD_IP_SRAM_PATH=""

    # Check whether --enable-ocd-sram-gf180mcu was given.
if test ${enable_ocd_sram_gf180mcu+y}
then :
  enableval=$enable_ocd_sram_gf180mcu;
            if test "$enableval" == "yes" -o "$enableval" == "YES"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_ip_sram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_ip_sram' will be installed automatically during make." >&6;}
        	export GF180MCU_OCD_IP_SRAM_PATH=../sources/gf180mcu_ocd_ip_sram
            elif test "$enableval" == "no" -o "$enableval" == "NO"; then
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling package 'gf180mcu_ocd_ip_sram'" >&5
printf "%s\n" "$as_me: Disabling package 'gf180mcu_ocd_ip_sram'" >&6;}
    		export GF180MCU_OCD_IP_SRAM_PATH=""
            else
                GF180MCU_OCD_IP_SRAM_PATH=$enableval
                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling package 'gf180mcu_ocd_ip_sram' at $GF180MCU_OCD_IP_SRAM_PATH" >&5
printf "%s\n" "$as_me: Enabling package 'gf180mcu_ocd_ip_sram' at $GF180MCU_OCD_IP_SRAM_PATH" >&6;}
            fi
            GF180MCU_OCD_IP_SRAM_PATH=`realpath $GF180MCU_OCD_IP_SRAM_PATH`

else case e in #(
  e)
            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Package 'gf180mcu_ocd_ip_sram' will be installed automatically during make." >&5
printf "%s\n" "$as_me: Package 'gf180mcu_ocd_ip_sram' will be installed automatically during make." >&6;}
	    GF180MCU_OCD_IP_SRAM_PATH=../sources/gf180mcu_ocd_ip_sram

     ;;
esac
fi









{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Tools enabled for PDK setup installation: klayout magic netgen irsim librelane qflow xschem xcircuit" >&5
printf "%s\n" "$as_me: Tools enabled for PDK setup installation: klayout magic netgen irsim librelane qflow xschem xcircuit" >&6;}

# Check for "--with-reference"
USE_REFERENCE=0

# Check whether --with-reference was given.
if test ${with_reference+y}
then :
  withval=$with_reference;
        pdks_reference=$withval
        if test "$withval" == "yes" -o "$withval" == "YES"; then
            USE_REFERENCE=1
	else
            USE_REFERENCE="$pdks_reference"
        fi

fi



# Check for "--with-ef-style"
EF_STYLE=0

# Check whether --with-ef-style was given.
if test ${with_ef_style+y}
then :
  withval=$with_ef_style;
        pdks_ef_style=$withval
        if test "$withval" == "yes" -o "$withval" == "YES"; then
            EF_STYLE=1
        fi

fi



# Export the list of enabled technologies to the Makefile

# Export the top level directory of open_pdks


MAKEFILES=$(find -L .. -name "Makefile.in" | sed 's/\(.*\)\.in/\1/g')
ac_config_files="$ac_config_files $MAKEFILES"


cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
# It is not useful on other systems.  If it contains results you don't
# want to keep, you may remove or edit it.
#
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
# 'ac_cv_env_foo' variables (set or unset) will be overridden when
# loading this file, other *unset* 'ac_cv_foo' will be assigned the
# following values.

_ACEOF

# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(
  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
    eval ac_val=\$$ac_var
    case $ac_val in #(
    *${as_nl}*)
      case $ac_var in #(
      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      esac
      case $ac_var in #(
      _ | IFS | as_nl) ;; #(
      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
      *) { eval $ac_var=; unset $ac_var;} ;;
      esac ;;
    esac
  done

  (set) 2>&1 |
    case $as_nl`(ac_space=' '; set) 2>&1` in #(
    *${as_nl}ac_space=\ *)
      # 'set' does not quote correctly, so add quotes: double-quote
      # substitution turns \\\\ into \\, and sed turns \\ into \.
      sed -n \
	"s/'/'\\\\''/g;
	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
      ;; #(
    *)
      # 'set' quotes correctly as required by POSIX, so do not add quotes.
      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
      ;;
    esac |
    sort
) |
  sed '
     /^ac_cv_env_/b end
     t clear
     :clear
     s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
     t end
     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
     :end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
  if test -w "$cache_file"; then
    if test "x$cache_file" != "x/dev/null"; then
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
      if test ! -f "$cache_file" || test -h "$cache_file"; then
	cat confcache >"$cache_file"
      else
        case $cache_file in #(
        */* | ?:*)
	  mv -f confcache "$cache_file"$$ &&
	  mv -f "$cache_file"$$ "$cache_file" ;; #(
        *)
	  mv -f confcache "$cache_file" ;;
	esac
      fi
    fi
  else
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
  fi
fi
rm -f confcache

test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
#
# If the first sed substitution is executed (which looks for macros that
# take arguments), then branch to the quote section.  Otherwise,
# look for a macro that doesn't take arguments.
ac_script='
:mline
/\\$/{
 N
 s,\\\n,,
 b mline
}
t clear
:clear
s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
t quote
s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
t quote
b any
:quote
s/[][	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
s/\$/$$/g
H
:any
${
	g
	s/^\n//
	s/\n/ /g
	p
}
'
DEFS=`sed -n "$ac_script" confdefs.h`


ac_libobjs=
ac_ltlibobjs=
U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
  # 1. Remove the extension, and $U if already installed.
  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
  ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
  #    will be set to the directory where LIBOBJS objects are built.
  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs

LTLIBOBJS=$ac_ltlibobjs



: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
# Generated by $as_me.
# 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-$SHELL}
export SHELL
_ASEOF
cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test ${ZSH_VERSION+y} && (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 e in #(
  e) case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; 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


# 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
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    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
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi



# 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
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$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 case e in #(
  e) as_fn_append ()
  {
    eval $1=\$$1\$2
  } ;;
esac
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 case e in #(
  e) as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  } ;;
esac
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 ||
printf "%s\n" 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


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
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

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'

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=`printf "%s\n" "$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 ||
printf "%s\n" 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_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated

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


exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
_ASEOF
test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 open_pdks $as_me 1.0, which was
generated by GNU Autoconf 2.72.  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`
"

_ACEOF

case $ac_config_files in *"
"*) set x $ac_config_files; shift; ac_config_files=$*;;
esac



cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"

_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
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

Configuration files:
$config_files

Report bugs to <github.com/RTimothyEdwards/open_pdks>."

_ACEOF
ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
open_pdks config.status 1.0
configured by $0, generated by GNU Autoconf 2.72,
  with options \\"\$ac_cs_config\\"

Copyright (C) 2023 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='$ac_pwd'
srcdir='$srcdir'
test -n "\$AWK" || AWK=awk
_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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 )
    printf "%s\n" "$ac_cs_version"; exit ;;
  --config | --confi | --conf | --con | --co | --c )
    printf "%s\n" "$ac_cs_config"; exit ;;
  --debug | --debu | --deb | --de | --d | -d )
    debug=: ;;
  --file | --fil | --fi | --f )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    '') as_fn_error $? "missing file argument" ;;
    esac
    as_fn_append CONFIG_FILES " '$ac_optarg'"
    ac_need_defaults=false;;
  --he | --h |  --help | --hel | -h )
    printf "%s\n" "$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

_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
  shift
  \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
  CONFIG_SHELL='$SHELL'
  export CONFIG_SHELL
  exec "\$@"
fi

_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
  echo
  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
  printf "%s\n" "$ac_log"
} >&5

_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1

# Handling of arguments.
for ac_config_target in $ac_config_targets
do
  case $ac_config_target in
    "$MAKEFILES") CONFIG_FILES="$CONFIG_FILES $MAKEFILES" ;;

  *) 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+y} || CONFIG_FILES=$config_files
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") 2>/dev/null` &&
  test -d "$tmp"
}  ||
{
  tmp=./conf$$-$RANDOM
  (umask 077 && mkdir "$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" &&
_ACEOF


{
  echo "cat >conf$$subs.awk <<_ACEOF" &&
  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
  echo "_ACEOF"
} >conf$$subs.sh ||
  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
  . ./conf$$subs.sh ||
    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5

  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
  if test $ac_delim_n = $ac_delim_num; then
    break
  elif $ac_last_try; then
    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
  else
    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
  fi
done
rm -f conf$$subs.sh

cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
sed -n '
h
s/^/S["/; s/!.*/"]=/
p
g
s/^[^!]*!//
:repl
t repl
s/'"$ac_delim"'$//
t delim
:nl
h
s/\(.\{148\}\)..*/\1/
t more1
s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
p
n
b repl
:more1
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t nl
:delim
h
s/\(.\{148\}\)..*/\1/
t more2
s/["\\]/\\&/g; s/^/"/; s/$/"/
p
b
:more2
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t delim
' <conf$$subs.awk | sed '
/^[^""]/{
  N
  s/\n//
}
' >>$CONFIG_STATUS || ac_write_fail=1
rm -f conf$$subs.awk
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_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
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
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
_ACEOF

# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
h
s///
s/^/:/
s/[	 ]*$/:/
s/:\$(srcdir):/:/g
s/:\${srcdir}:/:/g
s/:@srcdir@:/:/g
s/^:*//
s/:*$//
x
s/\(=[	 ]*\).*/\1/
G
s/\n//
s/^[^=]*=[	 ]*$//
}'
fi

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
fi # test -n "$CONFIG_FILES"


eval set X "  :F $CONFIG_FILES      "
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=`printf "%s\n" "$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 '`
	  printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
	`' by configure.'
    if test x"$ac_file" != x-; then
      configure_input="$ac_file.  $configure_input"
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
printf "%s\n" "$as_me: creating $ac_file" >&6;}
    fi
    # Neutralize special characters interpreted by sed in replacement strings.
    case $configure_input in #(
    *\&* | *\|* | *\\* )
       ac_sed_conf_input=`printf "%s\n" "$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 ||
printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`printf "%s\n" "$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
  #

_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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@*)
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
  ac_datarootdir_hack='
  s&@datadir@&$datadir&g
  s&@docdir@&$docdir&g
  s&@infodir@&$infodir&g
  s&@localedir@&$localedir&g
  s&@mandir@&$mandir&g
  s&\\\${datarootdir}&$datarootdir&g' ;;
esac
_ACEOF

# Neutralize VPATH when '$srcdir' = '.'.
# Shell code in configure.ac might set extrasub.
# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_sed_extra="$ac_vpsub
$extrasub
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
: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
$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"; } &&
  { printf "%s\n" "$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
printf "%s\n" "$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
 ;;



  esac

done # for ac_tag


as_fn_exit 0
_ACEOF
ac_clean_files=$ac_clean_files_save

test $ac_write_fail = 0 ||
  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5


# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded.  So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status.  When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
  ac_cs_success=:
  ac_config_status_args=
  test "$silent" = yes &&
    ac_config_status_args="$ac_config_status_args --quiet"
  exec 5>/dev/null
  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
  exec 5>>config.log
  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  # would make configure fail if this is the last instruction.
  $ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi


{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Build configured successfully" >&5
printf "%s\n" "Build configured successfully" >&6; }

