#!/bin/sh

cd `dirname "$0"`
. package/info

usage () {
  cat <<EOF
Usage: $0 [OPTION]... [TARGET]

Defaults for the options are specified in brackets.

System types:
  --target=TARGET               configure to run on target TARGET [detected]
  --host=TARGET                 same as --target

Installation directories:
  --prefix=PREFIX               main installation prefix [/]

Fine tuning of the installation directories:
  --dynlibdir=DIR               shared library files [PREFIX/lib]
  --libdir=DIR                  static library files [PREFIX/lib/$package]
  --includedir=DIR              include files for the C compiler [PREFIX/include]
  --datadir=DIR                 global configuration files [PREFIX/etc]
  --sysdepdir=DIR               sysdeps directory [PREFIX/lib/$package/sysdeps]

 If no --prefix option is given, by default libdir will be /usr/lib/$package,
 includedir will be /usr/include and sysdepdir will be /usr/lib/$package/sysdeps.

Dependencies:
  --with-include=DIR            add DIR to the list of searched directories for headers
  --with-lib=DIR                add DIR to the list of searched directories for static libraries
  --with-dynlib=DIR             add DIR to the list of searched directories for shared libraries

Optional features:
  --disable-shared              do not build shared libraries [enabled]
  --disable-static              do not build static libraries [enabled]
  --disable-all-pic             do not build static libraries as PIC [enabled]
  --enable-slashpackage[=ROOT]  assume /package installation at ROOT [disabled]

$package options:
  --disable-ipv6                do not build IPv6 support [enabled]
  --enable-iopause-select       prefer select() over poll() for iopause implementation [disabled]
  --enable-tai-clock            assume the system clock is TAI-10 instead of UTC [disabled]
  --with-default-path=PATH      default executable search path [/usr/bin:/bin]

Sysdeps autodetection override:
  --with-sysdep-K=V             assume sysdep K has the value V [autodetected]
List of mandatory K for cross-compiling: devurandom (V=yes|no)
 
EOF
  exit 0
}

# Helper functions

# If your system does not have printf, you can comment this, but it is
# generally not a good idea to use echo.
# See http://www.etalabs.net/sh_tricks.html
echo () {
  IFS=" "
  printf %s\\n "$*"
}

echon () {
  IFS=" "
  printf %s "$*"
}

quote () {
  tr '\n' ' ' <<EOF | grep '^[-[:alnum:]_=,./:]* $' >/dev/null 2>&1 && { echo "$1" ; return 0 ; }
$1
EOF
  echo "$1" | sed -e "s/'/'\\\\''/g" -e "1s/^/'/" -e "\$s/\$/'/" -e "s#^'\([-[:alnum:]_,./:]*\)=\(.*\)\$#\1='\2#" -e "s|\*/|* /|g"
}

fail () {
  echo "$*" 1>&2
  exit 1
}

fnmatch () {
  eval "case \"\$2\" in $1) return 0 ;; *) return 1 ;; esac"
}

cmdexists () {
  type "$1" >/dev/null 2>&1
}

trycc () {
  test -z "$CC_AUTO" && cmdexists "$1" && CC_AUTO="$*"
}

stripdir () {
  while eval "fnmatch '*/' \"\${$1}\"" ; do
    eval "$1=\${$1%/}"
  done
}

tryflag () {
  echo "Checking whether compiler accepts $2 ..."
  echo "typedef int x;" > "$tmpc"
  if $CC_AUTO "$2" -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
    echo "  ... yes"
    eval "$1=\"\${$1} \$2\""
    eval "$1=\${$1# }"
    return 0
  else
    echo "  ... no"
    return 1
  fi
}

tryldflag () {
  echo "Checking whether linker accepts $2 ..."
  echo "typedef int x;" > "$tmpc"
  if $CC_AUTO -nostdlib "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
    echo "  ... yes"
    eval "$1=\"\${$1} \$2\""
    eval "$1=\${$1# }"
    return 0
  else
    echo "  ... no"
    return 1
  fi
}


# Sysdeps determination functions

iscached ()
{
  if test -r "$tmps" && grep -qF "${1}: " "$tmps" ; then
    v=`grep -F "${1}: " "$tmps" | tail -n 1 | awk '{print $2;}'`
    echo "${1}: $v" >> "$sysdeps/sysdeps"
    echo "  ... user-provided: $v"
    return 0 ;
  else
    return 1 ;
  fi
}

choose () {
  what="$1"
  name="$2"
  echo "Checking whether system has $3..."
  if iscached "$name" ; then return ; fi
  shift 3
  libs="$*"
  r=true
  case "$what" in
    *c*) $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -o try$name.o -c src/sysdeps/try$name.c 2>/dev/null || r=false ;;
  esac
  if $r ; then
    case "$what" in
      *l*) $CC_AUTO $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -o try$name try$name.o $libs 2>/dev/null || r=false ;;
    esac
  fi
  if $r ; then
    case "$what" in
     *r*) if test -n "$cross" ; then
            rm -f try$name.o try$name
            fail "$0: sysdep $name cannot be autodetected when cross-compiling. Please manually provide a value with the --with-sysdep-${name}=yes|no|... option."
          fi
          ./try$name >/dev/null 2>&1 ; r=$?
          case "$r" in
           111) fail "$0: test crashed, aborting." ;;
           0) r=true ;;
           *) r=false ;;
          esac
    esac
  fi
  rm -f try$name.o try$name
  if $r ; then
    echo "$name: yes" >> $sysdeps/sysdeps
    echo "  ... yes"
  else
    echo "$name: no" >> $sysdeps/sysdeps
    echo "  ... no"
  fi
}

trybasic () {
  $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -o "$tmpe" -c "$1" 2>/dev/null
  r=$?
  rm -f "$tmpe"
  return $r
}

tryendianness () {
  echo "Checking endianness..."
  if iscached endianness ; then return ; fi
  for i in endian.h sys/endian.h machine/endian.h ; do
    cat > "$tmpc" <<EOF
#undef _POSIX_C_SOURCE
#undef _XOPEN_SOURCE
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <$i>
int a = 1 ;
EOF
    if trybasic "$tmpc" ; then
      cat > "$tmpc" <<EOF
#undef _POSIX_C_SOURCE
#undef _XOPEN_SOURCE
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <$i>
int a = LITTLE_ENDIAN ;
int b = BIG_ENDIAN ;
int c = BYTE_ORDER ;
EOF
      trybasic "$tmpc" || continue
      for j in little big pdp ; do
        k=`echo $j | tr a-z A-Z`
        cat > "$tmpc" <<EOF
#undef _POSIX_C_SOURCE
#undef _XOPEN_SOURCE
#ifndef _BSD_SOURCE
#define _BSD_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <$i>
int a[BYTE_ORDER == ${k}_ENDIAN ? 1 : -1] ;
EOF
        if trybasic "$tmpc" ; then
          echo "endianness: $j" >> "$sysdeps/sysdeps"
          echo "  ... $j"
          rm -f "$tmpc"
          return
        fi
      done
      rm -f "$tmpc"
      fail "$0: error: unable to determine endianness according to $i"
    fi
  done
  rm -f "$tmpc"
  fail "$0: error: unable to determine endianness: no endian.h found"
}

trysigned () {
  cat > "$tmpc" <<EOF
#include <sys/types.h>
int a[($1)-1 < 0 ? 1 : -1] ;
EOF
  trybasic "$tmpc"
  r=$?
  rm -f "$tmpc"
  return $r
}

trysizes () {
  t="$1" ; shift
  for arg ; do
    cat > "$tmpc" <<EOF
#include <sys/types.h>
int a[sizeof($t) == $arg ? 1 : -1] ;
EOF
    if trybasic "$tmpc" ; then
      rm -f "$tmpc"
      echo "$arg"
      return
    fi
  done
  rm -f "$tmpc"
  fail "$0: error: unable to determine the size of $t on the target"
}

trystdtype () {
  t="$1" ; shift
  iscached "sizeofu$t" || { echon "sizeofu${t}: " ; trysizes "$t" "$@" ; } >> "$sysdeps/sysdeps"
}

trytypes () {
  echo "Checking size and signedness of standard types..."
  trystdtype short 2 4
  trystdtype int 4 8 2
  trystdtype long 8 4
  for t in size uid gid pid time dev ino ; do
    iscached "signed$t" || { echon "signed${t}: " ; if trysigned "${t}_t" ; then echo "yes" ; else echo "no" ; fi ; } >> "$sysdeps/sysdeps"
    iscached "sizeof$t" || { echon "sizeof${t}: " ; trysizes "${t}_t" 4 8 2 ; } >> "$sysdeps/sysdeps"
  done  
  echo "  ... done"
}

trylibs () {
  args=
  name=$1
  echo "Checking whether system has $2..." >&3
  shift 2
  if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -c -o try$name.o src/sysdeps/try$name.c 2>/dev/null ; then
    until $CC_AUTO $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -o /dev/null try$name.o $args 2>/dev/null ; do
      if test -z "$*" ; then
        rm -f try$name.o
        echo
        echo "  ... no" >&3
        return 1
      fi
      args="$args $1"
      shift
    done
    echo ${args# }
    if test -z "$args" ; then
      echo "  ... yes" >&3
    else
      echo "  ... yes, with$args" >&3
    fi
    rm -f try$name.o
    return 0
  else
    echo
    echo "  ... no" >&3
    return 1
  fi
}

# Actual script

CC_AUTO=
CPPFLAGS_AUTO="-D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -Isrc/include"
CPPFLAGS_POST="$CPPFLAGS"
CPPFLAGS=
CFLAGS_AUTO="-pipe -Wall"
CFLAGS_POST="$CFLAGS"
CFLAGS="-O2"
LDFLAGS_AUTO=
LDFLAGS_POST="$LDFLAGS"
LDFLAGS=
LDFLAGS_NOSHARED=
LDFLAGS_SHARED=-shared
prefix=
dynlibdir='$prefix/lib'
libdir='$prefix/lib/$package'
includedir='$prefix/include'
datadir='$prefix/etc'
sysdepdir='$prefix/lib/$package/sysdeps'
sysdeplist=
shared=true
static=true
allpic=true
slashpackage=false
ipv6=true
select=false
taiclock=false
ddefaultpath=/usr/bin:/bin
defaultpath=$ddefaultpath
dpathorig=true
sproot=
home=
exthome=
addincpath=''
addlibspath=''
addlibdpath=''
vpaths=''
vpathd=''
build=

for arg ; do
  case "$arg" in
    --help) usage ;;
    --prefix=*) prefix=${arg#*=} ;;
    --dynlibdir=*) dynlibdir=${arg#*=} ;;
    --libdir=*) libdir=${arg#*=} ;;
    --includedir=*) includedir=${arg#*=} ;;
    --datadir=*) datadir=${arg#*=} ;;
    --sysdepdir=*) sysdepdir=${arg#*=} ;;
    --with-include=*) var=${arg#*=} ; stripdir var ; addincpath="$addincpath -I$var" ;;
    --with-lib=*) var=${arg#*=} ; stripdir var ; addlibspath="$addlibspath -L$var" ; vpaths="$vpaths $var" ;;
    --with-dynlib=*) var=${arg#*=} ; stripdir var ; addlibdpath="$addlibdpath -L$var" ; vpathd="$vpathd $var" ;;
    --enable-shared|--enable-shared=yes) shared=true ;;
    --disable-shared|--enable-shared=no) shared=false ;;
    --enable-static|--enable-static=yes) static=true ;;
    --disable-static|--enable-static=no) static=false ;;
    --enable-all-pic|--enable-all-pic=yes) allpic=true ;;
    --disable-all-pic|--enable-all-pic=no) allpic=false ;;
    --enable-slashpackage=*) sproot=${arg#*=} ; slashpackage=true ; ;;
    --enable-slashpackage) sproot= ; slashpackage=true ;;
    --disable-slashpackage) sproot= ; slashpackage=false ;;
    --enable-ipv6|--enable-ipv6=yes) ipv6=true ;;
    --disable-ipv6|--enable-ipv6=no) ipv6=false ;;
    --enable-iopause-select|--enable-iopause-select=yes) select=true ;;
    --disable-iopause-select|--enable-iopause-select=no) select=false ;;
    --enable-tai-clock|--enable-tai-clock=yes) taiclock=true ;;
    --disable-tai-clock|--enable-tai-clock=no) taiclock=false ;;
    --enable-monotonic|--enable-monotonic=yes) echo "$0: warning: --enable-monotonic is now obsolete" 1>&2 ;;
    --disable-monotonic|--enable-monotonic=no) ;;
    --with-default-path=*) defaultpath=${arg#*=} ; dpathorig=false ;;
    --without-default-path) defaultpath=$ddefaultpath ; dpathorig=true ;;
    --with-sysdep-*=*) sysdeplist="$sysdeplist ${arg#--with-sysdep-}" ;;
    --without-sysdep-*) sysdeplist="$sysdeplist ${arg#--with-sysdep-}=no" ;; 
    --enable-*|--disable-*|--with-*|--without-*|--*dir=*) ;;
    --host=*|--target=*) target=${arg#*=} ;;
    --build=*) build=${arg#*=} ;;
    -* ) echo "$0: unknown option $arg" ;;
    *=*) ;;
    *) target=$arg ;;
  esac
done

# Add /usr in the default default case
if test -z "$prefix" ; then
  if test "$libdir" = '$prefix/lib/$package' ; then
    libdir=/usr/lib/$package
  fi
  if test "$includedir" = '$prefix/include' ; then
    includedir=/usr/include
  fi
  if test "$sysdepdir" = '$prefix/lib/$package/sysdeps' ; then
    sysdepdir=/usr/lib/$package/sysdeps
  fi
fi

# Expand installation directories
stripdir prefix
for i in exec_prefix dynlibdir libdir includedir datadir sysdepdir sysdepspre sproot ; do
  eval tmp=\${$i}
  eval $i=$tmp
  stripdir $i
done


# Get usable temp filenames
i=0
set -C
while : ; do
  i=$(($i+1))
  tmpc="./tmp-configure-$$-$PPID-$i.c"
  tmpe="./tmp-configure-$$-$PPID-$i.tmp"
  tmps="./tmp-configure-$$-$PPID-$i.sysdeps"
  2>|/dev/null > "$tmpc" && break
  2>|/dev/null > "$tmpe" && break
  test "$i" -gt 50 && fail "$0: cannot create temporary files"
done
set +C
trap 'rm -f "$tmpc" "$tmpe" "$tmps"' EXIT ABRT INT QUIT TERM HUP

# Set slashpackage values
if $slashpackage ; then
  home=${sproot}/package/${category}/${package}-${version}
  exthome=${sproot}/package/${category}/${package}
  sysdepdir=${home}/sysdeps
  binprefix=${home}/command
  extbinprefix=${exthome}/command
  dynlibdir=${home}/library.so
  libdir=${home}/library
  includedir=${home}/include
  if $dpathorig ; then
    if echo $defaultpath | tr : '\n' | grep -q '^/command$' ; then : ; else
      defaultpath="/command:$defaultpath"
    fi
  fi
fi

# Find a C compiler to use
if test -n "$target" && test x${build} != x${target} ; then
  cross=${target}-
else
  cross=
fi
echo "Checking for C compiler..."
trycc ${CC}
if test -n "$CC_AUTO" ; then
  b=`basename "$CC"`
  adjust_cross=false
  if test "$b" != "$CC" ; then
    adjust_cross=true
    echo "$0: warning: compiler $CC is declared with its own path. If it's not accessible via PATH, you will need to pass AR, RANLIB and STRIP make variables to the make invocation." 1>&2
  fi
  if test -n "$cross" ; then
    if test "$b" = "${b##$cross}" ; then
      echo "$0: warning: compiler $CC is declared as a cross-compiler for target $target but does not start with prefix ${cross}" 1>&2
    elif $adjust_cross ; then
      cross=`dirname "$CC"`/"$cross"
    fi
  fi
fi
trycc ${cross}gcc
trycc ${cross}clang
trycc ${cross}cc
test -n "$CC_AUTO" || fail "$0: cannot find a C compiler"
echo "  ... $CC_AUTO"
echo "Checking whether C compiler works... "
echo "typedef int x;" > "$tmpc"
if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -c -o /dev/null "$tmpc" 2>"$tmpe" ; then
  echo "  ... yes"
else
  echo "  ... no. Compiler output follows:"
  cat < "$tmpe"
  exit 1
fi

echo "Checking target system type..."
if test -z "$target" ; then
  if test -n "$build" ; then
    target=$build ;
  else
    target=$($CC_AUTO -dumpmachine 2>/dev/null) || target=unknown
  fi
fi
echo "  ... $target"

if $allpic ; then
  tryflag CPPFLAGS_AUTO -fPIC
fi
tryflag CFLAGS_AUTO -std=c99
tryflag CFLAGS -fomit-frame-pointer
tryflag CFLAGS_AUTO -fno-exceptions
tryflag CFLAGS_AUTO -fno-unwind-tables
tryflag CFLAGS_AUTO -fno-asynchronous-unwind-tables
tryflag CFLAGS_AUTO -Wa,--noexecstack
tryflag CFLAGS -fno-stack-protector
tryflag CPPFLAGS_AUTO -Werror=implicit-function-declaration
tryflag CPPFLAGS_AUTO -Werror=implicit-int
tryflag CPPFLAGS_AUTO -Werror=pointer-sign
tryflag CPPFLAGS_AUTO -Werror=pointer-arith
tryflag CPPFLAGS_AUTO -Wno-unused-value
tryflag CPPFLAGS_AUTO -Wno-parentheses
tryflag CFLAGS_AUTO -ffunction-sections
tryflag CFLAGS_AUTO -fdata-sections

tryldflag LDFLAGS_AUTO -Wl,--sort-section=alignment
tryldflag LDFLAGS_AUTO -Wl,--sort-common
if $shared ; then
  tryldflag LDFLAGS -Wl,--hash-style=both
fi

rm -f "$tmps"
if test -n "$sysdeplist" ; then
  :> "$tmps"
  for i in $sysdeplist ; do
    k=${i%%=*}
    v=${i#*=}
    if test "$v" = "true" ; then v=yes
    elif test "$v" = "false" ; then v=no
    fi
    if grep -qF -e "${k}: " "$tmps" ; then
      grep -vF -e "${k}: " "$tmps" > "$tmpe"
      mv -f "$tmpe" "$tmps"
    fi
    echo "${k}: $v" >> "$tmps"
  done
fi

sysdeps=sysdeps.cfg
mkdir -p $sysdeps
echo "$target" > $sysdeps/target
:> "$sysdeps/sysdeps"

exec 3>&1
util_lib=
echo > $sysdeps/util.lib

socket_lib=`trylibs lsock 'accessible socket functions' -lsocket -lnsl` || fail "$0: unable to determine socket.lib sysdep"
echo "$socket_lib" > $sysdeps/socket.lib

hasclock=yes
sysclock_lib=`trylibs clockrt 'clock_gettime()' -lrt` || hasclock=no
echo "$sysclock_lib" > $sysdeps/sysclock.lib
echo "clockrt: $hasclock" >> $sysdeps/sysdeps

choose cl clockmon CLOCK_MONOTONIC $sysclock_lib
choose cl clockboot CLOCK_BOOTTIME $sysclock_lib

hasspawn=yes
spawn_lib=`trylibs posixspawn 'posix_spawn()' -lrt` || hasspawn=no
echo "$spawn_lib" > $sysdeps/spawn.lib
echo "posixspawn: $hasspawn" >> $sysdeps/sysdeps

hastimer=yes
timer_lib=`trylibs timer 'timer_create()' -lrt` || hastimer=no
echo "$timer_lib" > $sysdeps/timer.lib
echo "timer: $hastimer" >> $sysdeps/sysdeps
exec 3>&-

tryendianness
trytypes
choose cl accept4 'accept4()'
choose c cmsgcloexec 'MSG_CMSG_CLOEXEC'
choose cl dirfd 'dirfd()'
choose cl eventfd 'eventfd()'
choose cl flock 'flock()'
choose cl getrandom 'getrandom()'
choose cl getpeereid 'getpeereid()'
choose cl sopeercred 'SO_PEERCRED'
choose cl getpeerucred 'getpeerucred()'
choose cl ipv6 'IPv6 support' $socket_lib
choose c msgdontwait 'MSG_DONTWAIT'
choose c odirectory 'O_DIRECTORY'
choose cl openat 'openat()'
choose cl linkat 'linkat()'
choose cl memmem 'memmem()'
choose cl pipe2 'pipe2()'
choose cl ppoll 'ppoll()'
choose cl revoke 'revoke()'
choose cl sendfile 'sendfile()'
choose cl setgroups 'setgroups()'
choose cl settimeofday 'settimeofday()'
choose cl signalfd 'signalfd()'
choose cl splice 'splice()'
choose cl strcasestr 'strcasestr()'
choose c strnlen 'strnlen()'
choose c uint64t 'uint64_t'
choose cl futimens 'futimens()'
choose cl futimes 'futimes()'
choose cl arc4random 'arc4random()'
choose cl arc4random_addrandom 'arc4random_addrandom()'
choose cl itimer 'setitimer()'
choose cl namespaces 'namespaces'
choose cl nsgetparent 'NS_GET_PARENT'
choose cl explicit_bzero 'explicit_bzero()'

# And here are the evil irreducible sysdeps.

choose clr devurandom '/dev/urandom'


rm -f "$tmps"
echo "Creating config.mak..."
cmdline=$(quote "$0")
for i ; do cmdline="$cmdline $(quote "$i")" ; done
exec 3>&1 1>config.mak
cat << EOF
# This file was generated by:
# $cmdline
# Any changes made here will be lost if configure is re-run.

target := $target
package := $package
prefix := $prefix
datadir := $datadir
sysdepdir := $sysdepdir
dynlibdir := $dynlibdir
libdir := $libdir
includedir := $includedir
sysdeps := $sysdeps
version := $version
sproot := $sproot
home := $home
exthome := ${exthome}
ipv6 := ${ipv6}
SPAWN_LIB := ${spawn_lib}
SOCKET_LIB := ${socket_lib}
SYSCLOCK_LIB := ${sysclock_lib}
TIMER_LIB := ${timer_lib}
UTIL_LIB := ${util_lib}
CC := ${CC_AUTO}
CPPFLAGS_AUTO := $CPPFLAGS_AUTO
CPPFLAGS := $CPPFLAGS $CPPFLAGS_POST
CFLAGS_AUTO := $CFLAGS_AUTO
CFLAGS := $CFLAGS $CFLAGS_POST
LDFLAGS_AUTO := $LDFLAGS_AUTO
LDFLAGS := $LDFLAGS $LDFLAGS_POST
LDFLAGS_NOSHARED := $LDFLAGS_NOSHARED
LDFLAGS_SHARED := $LDFLAGS_SHARED
CROSS_COMPILE := ${cross}
EOF
if test -n "$vpaths" ; then
  echo "vpath lib%a$vpaths"
fi
if test -n "$vpathd" ; then
  echo "vpath lib%.so$vpathd"
fi

if $static ; then
  echo "STATIC_LIBS := libskarnet.a.xyzzy"
else
  echo "STATIC_LIBS :="
fi
if $shared ; then
  echo "SHARED_LIBS := libskarnet.so.xyzzy"
else
  echo "SHARED_LIBS :="
fi
if $allpic ; then
  echo "STATIC_LIBS_ARE_PIC := 1"
else
  echo "STATIC_LIBS_ARE_PIC :="
fi

exec 1>&3 3>&-
echo "  ... done."

echo "Creating src/include/${package}/config.h..."
mkdir -p -m 0755 src/include/${package}
exec 3>&1 1> src/include/${package}/config.h
cat <<EOF
/* ISC license. */

/* Generated by: $cmdline */

#ifndef ${package_macro_name}_CONFIG_H
#define ${package_macro_name}_CONFIG_H

#define ${package_macro_name}_VERSION "$version"
#define ${package_macro_name}_DEFAULTPATH "$defaultpath"
#define ${package_macro_name}_ETC "$datadir"
#define ${package_macro_name}_SPROOT "$sproot"
#define ${package_macro_name}_HOME "$home"
EOF
if $taiclock ; then
  echo "#define ${package_macro_name}_FLAG_CLOCKISTAI"
else
  echo "#undef ${package_macro_name}_FLAG_CLOCKISTAI"
fi
if $ipv6 ; then
  echo "#define ${package_macro_name}_FLAG_WANTIPV6"
else
  echo "#undef ${package_macro_name}_FLAG_WANTIPV6"
fi
if $select ; then
  echo "#define ${package_macro_name}_FLAG_PREFERSELECT"
else
  echo "#undef ${package_macro_name}_FLAG_PREFERSELECT"
fi

echo
echo "#endif"
exec 1>&3 3>&-
echo "  ... done."
