#! /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_IO_PATH
GF180MCU_AS_SC_PATH
GF180MCU_OSU_SC_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
OPENLANE_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_openlane
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_osu_sc_gf180mcu
enable_avalon_sc_gf180mcu
enable_ocd_io_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-openlane
                Enable or disable openlane 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-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-ocd-io-gf180mcu[=path]
                          Install gf180mcu_ocd_io. 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 openlane qflow xschem xcircuit" >&5
printf "%s\n" "$as_me: Found tools: klayout magic netgen irsim openlane 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





        OPENLANE_DISABLED=0
        # Check whether --enable-openlane was given.
if test ${enable_openlane+y}
then :
  enableval=$enable_openlane;
                if test "$enableval" == "no" -o "$enableval" == "NO"; then
                    OPENLANE_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







# 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_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









{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem xcircuit" >&5
printf "%s\n" "$as_me: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane 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; }

