#!/bin/sh

# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# Create sysinfo.go from gen-sysinfo.go and errno.i.

# This shell script creates the sysinfo.go file which holds types and
# constants extracted from the system header files.  This reads the
# raw data from gen-sysinfo.go which is generated using the
# -fdump-go-spec option.

# This currently exposes some names that ideally should not be
# exposed, as they match grep patterns.  E.g., WCHAR_MIN gets exposed
# because it starts with W, like the wait flags.

OUT=tmp-sysinfo.go

set -e

echo 'package syscall' > ${OUT}
echo 'import "unsafe"' >> ${OUT}
echo 'type _ unsafe.Pointer' >> ${OUT}

# Get all the consts and types, skipping ones which could not be
# represented in Go and ones which we need to rewrite.  We also skip
# function declarations, as we don't need them here.  All the symbols
# will all have a leading underscore.
grep -v '^// ' gen-sysinfo.go | \
  grep -v '^func' | \
  grep -v '^type _timeval ' | \
  grep -v '^type _timespec_t ' | \
  grep -v '^type _timespec ' | \
  grep -v '^type _timestruc_t ' | \
  grep -v '^type _epoll_' | \
  grep -v 'in6_addr' | \
  grep -v 'sockaddr_in6' | \
  sed -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
      -e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
      -e 's/\([^a-zA-Z0-9_]\)_timespec\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
      -e 's/\([^a-zA-Z0-9_]\)_timestruc_t\([^a-zA-Z0-9_]\)/\1Timestruc\2/g' \
    >> ${OUT}

# On AIX, the _arpcom struct, is filtered by the above grep sequence, as it as
# a field of type _in6_addr, but other types depend on _arpcom, so we need to
# put it back.
grep '^type _arpcom ' gen-sysinfo.go | \
  sed -e 's/_in6_addr/[16]byte/' >> ${OUT}

# The errno constants.  These get type Errno.
  egrep '#define E[A-Z0-9_]+ ' errno.i | \
  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}

# The O_xxx flags.
egrep '^const _(O|F|FD)_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
if ! grep '^const O_ASYNC' ${OUT} >/dev/null 2>&1; then
  echo "const O_ASYNC = 0" >> ${OUT}
fi
if ! grep '^const O_CLOEXEC' ${OUT} >/dev/null 2>&1; then
  echo "const O_CLOEXEC = 0" >> ${OUT}
fi

# The os package requires F_DUPFD_CLOEXEC to be defined.
if ! grep '^const F_DUPFD_CLOEXEC' ${OUT} >/dev/null 2>&1; then
  echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT}
fi

# AIX 7.1 is a 64 bits value for _FCLOEXEC (referenced by O_CLOEXEC)
# which leads to a constant overflow when using O_CLOEXEC in some
# go code. Issue wan not present in 6.1 (no O_CLOEXEC) and is no
# more present in 7.2 (_FCLOEXEC is a 32 bit value).
if test "${GOOS}" = "aix" && `oslevel | grep -q "^7.1"`; then
    sed -e 's/const __FCLOEXEC = .*/const __FCLOEXEC = 0/' ${OUT} > ${OUT}-2
    mv ${OUT}-2 ${OUT}
fi

# These flags can be lost on i386 GNU/Linux when using
# -D_FILE_OFFSET_BITS=64, because we see "#define F_SETLK F_SETLK64"
# before we see the definition of F_SETLK64.
for flag in F_GETLK F_SETLK F_SETLKW; do
  if ! grep "^const ${flag} " ${OUT} >/dev/null 2>&1 \
      && grep "^const ${flag}64 " ${OUT} >/dev/null 2>&1; then
    echo "const ${flag} = ${flag}64" >> ${OUT}
  fi
done

# The Flock_t struct for fcntl.
grep '^type _flock ' gen-sysinfo.go | \
    sed -e 's/type _flock/type Flock_t/' \
      -e 's/l_type/Type/' \
      -e 's/l_whence/Whence/' \
      -e 's/l_start/Start/' \
      -e 's/l_len/Len/' \
      -e 's/l_pid/Pid/' \
    >> ${OUT}

# The signal numbers.
grep '^const _SIG[^_]' gen-sysinfo.go | \
  grep -v '^const _SIGEV_' | \
  sed -e 's/^\(const \)_\(SIG[^= ]*\)\(.*\)$/\1\2 = Signal(_\2)/' >> ${OUT}
if ! grep '^const SIGPOLL ' ${OUT} >/dev/null 2>&1; then
  if grep '^const SIGIO ' ${OUT} > /dev/null 2>&1; then
    echo "const SIGPOLL = SIGIO" >> ${OUT}
  fi
fi
if ! grep '^const SIGCLD ' ${OUT} >/dev/null 2>&1; then
  if grep '^const SIGCHLD ' ${OUT} >/dev/null 2>&1; then
    echo "const SIGCLD = SIGCHLD" >> ${OUT}
  fi
fi

# The syscall numbers.  We force the names to upper case.
grep '^const _SYS_' gen-sysinfo.go | \
  sed -e 's/const _\(SYS_[^= ]*\).*$/\1/' | \
  while read sys; do
    sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
    echo "const $sup = _$sys" >> ${OUT}
  done

# The GNU/Linux support wants to use SYS_GETDENTS64 if available.
if ! grep '^const SYS_GETDENTS ' ${OUT} >/dev/null 2>&1; then
  echo "const SYS_GETDENTS = 0" >> ${OUT}
fi
if ! grep '^const SYS_GETDENTS64 ' ${OUT} >/dev/null 2>&1; then
  echo "const SYS_GETDENTS64 = 0" >> ${OUT}
fi

# Stat constants.
grep '^const _S_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(S_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# Mmap constants.
grep '^const _PROT_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(PROT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _MAP_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(MAP_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _MADV_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(MADV_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _MCL_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(MCL_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# Process status constants.
grep '^const _W' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(W[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# WSTOPPED was introduced in glibc 2.3.4.
if ! grep '^const _WSTOPPED = ' gen-sysinfo.go >/dev/null 2>&1; then
  if grep '^const _WUNTRACED = ' gen-sysinfo.go > /dev/null 2>&1; then
    echo 'const WSTOPPED = _WUNTRACED' >> ${OUT}
  else
    echo 'const WSTOPPED = 2' >> ${OUT}
  fi
fi
if grep '^const ___WALL = ' gen-sysinfo.go >/dev/null 2>&1 \
   && ! grep '^const _WALL = ' gen-sysinfo.go >/dev/null 2>&1; then
  echo 'const WALL = ___WALL' >> ${OUT}
fi

# Networking constants.
egrep '^const _(AF|ARPHRD|ETH|IN|SOCK|SOL|SO|IPPROTO|TCP|IP|IPV6)_' gen-sysinfo.go |
  sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _SOMAXCONN' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(SOMAXCONN[^= ]*\)\(.*\)$/\1\2 = _\2/' \
    >> ${OUT}
grep '^const _SHUT_' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(SHUT[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The net package requires some const definitions.
for m in IP_PKTINFO IPV6_V6ONLY IPPROTO_IPV6 IPV6_JOIN_GROUP IPV6_LEAVE_GROUP IPV6_TCLASS SO_REUSEPORT; do
  if ! grep "^const $m " ${OUT} >/dev/null 2>&1; then
    echo "const $m = 0" >> ${OUT}
  fi
done
for m in SOCK_CLOEXEC SOCK_NONBLOCK; do
  if ! grep "^const $m " ${OUT} >/dev/null 2>&1; then
    echo "const $m = -1" >> ${OUT}
  fi
done

# The syscall package requires AF_LOCAL.
if ! grep '^const AF_LOCAL ' ${OUT} >/dev/null 2>&1; then
  if grep '^const AF_UNIX ' ${OUT} >/dev/null 2>&1; then
    echo "const AF_LOCAL = AF_UNIX" >> ${OUT}
  fi
fi

# sysconf constants.
grep '^const __SC' gen-sysinfo.go |
  sed -e 's/^\(const \)__\(SC[^= ]*\)\(.*\)$/\1\2 = __\2/' >> ${OUT}

# pathconf constants.
grep '^const __PC' gen-sysinfo.go |
  sed -e 's/^\(const \)__\(PC[^= ]*\)\(.*\)$/\1\2 = __\2/' >> ${OUT}

# The PATH_MAX constant.
if grep '^const _PATH_MAX ' gen-sysinfo.go >/dev/null 2>&1; then
  echo 'const PathMax = _PATH_MAX' >> ${OUT}
fi

# epoll constants.
grep '^const _EPOLL' gen-sysinfo.go |
  grep -v EPOLLET |
  sed -e 's/^\(const \)_\(EPOLL[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# Make sure EPOLLET is positive.
if grep '^const _EPOLLET = [0-9]' gen-sysinfo.go >/dev/null 2>&1; then
  grep '^const _EPOLLET ' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(EPOLL[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
else
  echo "const EPOLLET = 0x80000000" >> ${OUT}
fi
# Make sure EPOLLRDHUP and EPOLL_CLOEXEC are defined.
if ! grep '^const EPOLLRDHUP' ${OUT} >/dev/null 2>&1; then
  echo "const EPOLLRDHUP = 0x2000" >> ${OUT}
fi
if ! grep '^const EPOLL_CLOEXEC' ${OUT} >/dev/null 2>&1; then
  echo "const EPOLL_CLOEXEC = 02000000" >> ${OUT}
fi

# Prctl constants.
grep '^const _PR_' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(PR_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# Ptrace constants.
grep '^const _PTRACE' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(PTRACE[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# We need some ptrace options that are not defined in older versions
# of glibc.
if ! grep '^const PTRACE_SETOPTIONS' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_SETOPTIONS = 0x4200" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACESYSGOOD' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACESYSGOOD = 0x1" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACEFORK' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACEFORK = 0x2" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACEVFORK' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACEVFORK = 0x4" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACECLONE' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACECLONE = 0x8" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACEEXEC' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACEEXEC = 0x10" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACEVFORKDONE' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACEVFORKDONE = 0x20" >> ${OUT}
fi
if ! grep '^const PTRACE_O_TRACEEXIT' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_TRACEEXIT = 0x40" >> ${OUT}
fi
if ! grep '^const PTRACE_O_MASK' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_O_MASK = 0x7f" >> ${OUT}
fi
if ! grep '^const _PTRACE_GETEVENTMSG' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_GETEVENTMSG = 0x4201" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_FORK' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_FORK = 1" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_VFORK' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_VFORK = 2" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_CLONE' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_CLONE = 3" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_EXEC' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_EXEC = 4" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_VFORK_DONE' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_VFORK_DONE = 5" >> ${OUT}
fi
if ! grep '^const PTRACE_EVENT_EXIT' ${OUT} > /dev/null 2>&1; then
  echo "const PTRACE_EVENT_EXIT = 6" >> ${OUT}
fi
if ! grep '^const _PTRACE_TRACEME' ${OUT} > /dev/null 2>&1; then
  echo "const _PTRACE_TRACEME = 0" >> ${OUT}
fi

# A helper function that prints a structure from gen-sysinfo.go with the first
# letter of the field names in upper case.  $1 is the name of structure.  If $2
# is not empty, the structure or type is renamed to $2.
upcase_fields () {
  name="$1"
  def=`grep "^type $name " gen-sysinfo.go`
  fields=`echo $def | sed -e 's/^[^{]*{\(.*\)}$/\1/'`
  prefix=`echo $def | sed -e 's/{.*//'`
  if test "$2" != ""; then
    prefix=`echo $prefix | sed -e "s/$1/$2/"`
  fi
  if test "$fields" != ""; then
    nfields=
    while test -n "$fields"; do
      field=`echo $fields | sed -e 's/^\([^;]*\);.*$/\1/'`
      fields=`echo $fields | sed -e 's/^[^;]*; *\(.*\)$/\1/'`
      # capitalize the next character.
      f=`echo $field | sed -e 's/^\(.\).*$/\1/'`
      r=`echo $field | sed -e 's/^.\(.*\)$/\1/'`
      f=`echo $f | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
      field="$f$r"
      nfields="$nfields $field;"
    done
    echo "${prefix} {$nfields }"
  fi
}

# The registers returned by PTRACE_GETREGS.  This is probably
# GNU/Linux specific; it should do no harm if there is no
# _user_regs_struct.
regs=`grep '^type _user_regs_struct struct' gen-sysinfo.go || true`
if test "$regs" = ""; then
  # s390
  regs=`grep '^type __user_regs_struct struct' gen-sysinfo.go || true`
  if test "$regs" != ""; then
    # Substructures of __user_regs_struct on s390
    upcase_fields "__user_psw_struct" "PtracePsw" >> ${OUT} || true
    upcase_fields "__user_fpregs_struct" "PtraceFpregs" >> ${OUT} || true
    upcase_fields "__user_per_struct" "PtracePer" >> ${OUT} || true
  fi
fi
if test "$regs" != ""; then
  regs=`echo $regs |
    sed -e 's/type __*user_regs_struct struct //' -e 's/[{}]//g'`
  regs=`echo $regs | sed -e s'/^ *//'`
  nregs=
  while test -n "$regs"; do
    field=`echo $regs | sed -e 's/^\([^;]*\);.*$/\1/'`
    regs=`echo $regs | sed -e 's/^[^;]*; *\(.*\)$/\1/'`
    # Capitalize the first character of the field.
    f=`echo $field | sed -e 's/^\(.\).*$/\1/'`
    r=`echo $field | sed -e 's/^.\(.*\)$/\1/'`
    f=`echo $f | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
    field="$f$r"
    field=`echo "$field" | sed \
      -e 's/__user_psw_struct/PtracePsw/' \
      -e 's/__user_fpregs_struct/PtraceFpregs/' \
      -e 's/__user_per_struct/PtracePer/'`
    nregs="$nregs $field;"
  done
  echo "type PtraceRegs struct {$nregs }" >> ${OUT}
fi

# Some basic types.
echo 'type Size_t _size_t' >> ${OUT}
echo "type Ssize_t _ssize_t" >> ${OUT}
if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
  echo "type Offset_t _off64_t" >> ${OUT}
else
  echo "type Offset_t _off_t" >> ${OUT}
fi
echo "type Mode_t _mode_t" >> ${OUT}
echo "type Pid_t _pid_t" >> ${OUT}
echo "type Uid_t _uid_t" >> ${OUT}
echo "type Gid_t _gid_t" >> ${OUT}
echo "type Socklen_t _socklen_t" >> ${OUT}

# The C int type.
sizeof_int=`grep '^const ___SIZEOF_INT__ = ' gen-sysinfo.go | sed -e 's/.*= //'`
if test "$sizeof_int" = "4"; then
  echo "type _C_int int32" >> ${OUT}
  echo "type _C_uint uint32" >> ${OUT}
elif test "$sizeof_int" = "8"; then
  echo "type _C_int int64" >> ${OUT}
  echo "type _C_uint uint64" >> ${OUT}
else
  echo 1>&2 "mksysinfo.sh: could not determine size of int (got $sizeof_int)"
  exit 1
fi

# The C long type, needed because that is the type that ptrace returns.
sizeof_long=`grep '^const ___SIZEOF_LONG__ = ' gen-sysinfo.go | sed -e 's/.*= //'`
if test "$sizeof_long" = "4"; then
  echo "type _C_long int32" >> ${OUT}
  echo "type _C_ulong uint32" >> ${OUT}
elif test "$sizeof_long" = "8"; then
  echo "type _C_long int64" >> ${OUT}
  echo "type _C_ulong uint64" >> ${OUT}
else
  echo 1>&2 "mksysinfo.sh: could not determine size of long (got $sizeof_long)"
  exit 1
fi

# Solaris 2 needs _u?pad128_t, but its default definition in terms of long
# double is commented by -fdump-go-spec.
if grep "^// type _pad128_t" gen-sysinfo.go > /dev/null 2>&1; then
  echo "type _pad128_t struct { _l [4]int32; }" >> ${OUT}
fi
if grep "^// type _upad128_t" gen-sysinfo.go > /dev/null 2>&1; then
  echo "type _upad128_t struct { _l [4]uint32; }" >> ${OUT}
fi

# The time_t type.
if grep '^type _time_t ' gen-sysinfo.go > /dev/null 2>&1; then
  echo 'type Time_t _time_t' >> ${OUT}
fi

# The time structures need special handling: we need to name the
# types, so that we can cast integers to the right types when
# assigning to the structures.
timeval=`grep '^type _timeval ' gen-sysinfo.go`
timeval_sec=`echo $timeval | sed -n -e 's/^.*tv_sec \([^ ]*\);.*$/\1/p'`
timeval_usec=`echo $timeval | sed -n -e 's/^.*tv_usec \([^ ]*\);.*$/\1/p'`
echo "type Timeval_sec_t $timeval_sec" >> ${OUT}
echo "type Timeval_usec_t $timeval_usec" >> ${OUT}
echo $timeval | \
  sed -e 's/type _timeval /type Timeval /' \
      -e 's/tv_sec *[a-zA-Z0-9_]*/Sec Timeval_sec_t/' \
      -e 's/tv_usec *[a-zA-Z0-9_]*/Usec Timeval_usec_t/' >> ${OUT}
timespec=`grep '^type _timespec ' gen-sysinfo.go || true`
if test "$timespec" = ""; then
  # IRIX 6.5 has __timespec instead.
  timespec=`grep '^type ___timespec ' gen-sysinfo.go || true`
fi
timespec_sec=`echo $timespec | sed -n -e 's/^.*tv_sec \([^ ]*\);.*$/\1/p'`
timespec_nsec=`echo $timespec | sed -n -e 's/^.*tv_nsec \([^ ]*\);.*$/\1/p'`
echo "type Timespec_sec_t $timespec_sec" >> ${OUT}
echo "type Timespec_nsec_t $timespec_nsec" >> ${OUT}
echo $timespec | \
  sed -e 's/^type ___timespec /type Timespec /' \
      -e 's/^type _timespec /type Timespec /' \
      -e 's/tv_sec *[a-zA-Z0-9_]*/Sec Timespec_sec_t/' \
      -e 's/tv_nsec *[a-zA-Z0-9_]*/Nsec Timespec_nsec_t/' >> ${OUT}

timestruc=`grep '^type _timestruc_t ' gen-sysinfo.go || true`
if test "$timestruc" != ""; then
  timestruc_sec=`echo $timestruc | sed -n -e 's/^.*tv_sec \([^ ]*\);.*$/\1/p'`
  timestruc_nsec=`echo $timestruc | sed -n -e 's/^.*tv_nsec \([^ ]*\);.*$/\1/p'`
  echo "type Timestruc_sec_t $timestruc_sec" >> ${OUT}
  echo "type Timestruc_nsec_t $timestruc_nsec" >> ${OUT}
  echo $timestruc | \
    sed -e 's/^type _timestruc_t /type Timestruc /' \
        -e 's/tv_sec *[a-zA-Z0-9_]*/Sec Timestruc_sec_t/' \
        -e 's/tv_nsec *[a-zA-Z0-9_]*/Nsec Timestruc_nsec_t/' >> ${OUT}
fi

# The tms struct.
grep '^type _tms ' gen-sysinfo.go | \
    sed -e 's/type _tms/type Tms/' \
      -e 's/tms_utime/Utime/' \
      -e 's/tms_stime/Stime/' \
      -e 's/tms_cutime/Cutime/' \
      -e 's/tms_cstime/Cstime/' \
    >> ${OUT}

# The stat type.
# Prefer largefile variant if available.
stat=`grep '^type _stat64 ' gen-sysinfo.go || true`
if test "$stat" != ""; then
  grep '^type _stat64 ' gen-sysinfo.go
else
  grep '^type _stat ' gen-sysinfo.go
fi | sed -e 's/type _stat64/type Stat_t/' \
         -e 's/type _stat/type Stat_t/' \
         -e 's/st_dev/Dev/' \
         -e 's/st_ino/Ino/g' \
         -e 's/st_nlink/Nlink/' \
         -e 's/st_mode/Mode/' \
         -e 's/st_uid/Uid/' \
         -e 's/st_gid/Gid/' \
         -e 's/st_rdev/Rdev/' \
         -e 's/st_size/Size/' \
         -e 's/st_blksize/Blksize/' \
         -e 's/st_blocks/Blocks/' \
         -e 's/st_atim/Atim/' \
         -e 's/st_mtim/Mtim/' \
         -e 's/st_ctim/Ctim/' \
         -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
         -e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
         -e 's/\([^a-zA-Z0-9_]\)_timespec\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
         -e 's/\([^a-zA-Z0-9_]\)_timestruc_t\([^a-zA-Z0-9_]\)/\1Timestruc\2/g' \
         -e 's/Godump_[0-9] struct { \([^;]*;\) };/\1/g' \
       >> ${OUT}

# The directory searching types.
# Prefer largefile variant if available.
dirent=`grep '^type _dirent64 ' gen-sysinfo.go || true`
if test "$dirent" != ""; then
  grep '^type _dirent64 ' gen-sysinfo.go
else
  grep '^type _dirent ' gen-sysinfo.go
fi | sed -e 's/type _dirent64/type Dirent/' \
         -e 's/type _dirent/type Dirent/' \
         -e 's/d_name \[0+1\]/d_name [0+256]/' \
         -e 's/d_name/Name/' \
         -e 's/]int8/]byte/' \
         -e 's/d_ino/Ino/' \
         -e 's/d_off/Off/' \
         -e 's/d_reclen/Reclen/' \
         -e 's/d_type/Type/' \
      >> ${OUT}
echo "type DIR _DIR" >> ${OUT}

# Values for d_type field in dirent.
grep '^const _DT_' gen-sysinfo.go |
  sed -e 's/^\(const \)_\(DT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The rusage struct.
rusage=`grep '^type _rusage struct' gen-sysinfo.go`
if test "$rusage" != ""; then
  # Remove anonymous unions from GNU/Linux <bits/resource.h>.
  rusage=`echo $rusage | sed -e 's/Godump_[0-9][0-9]* struct {\([^}]*\)};/\1/g'`
  rusage=`echo $rusage | sed -e 's/type _rusage struct //' -e 's/[{}]//g'`
  rusage=`echo $rusage | sed -e 's/^ *//'`
  nrusage=
  while test -n "$rusage"; do
    field=`echo $rusage | sed -e 's/^\([^;]*\);.*$/\1/'`
    rusage=`echo $rusage | sed -e 's/^[^;]*; *\(.*\)$/\1/'`
    # Drop the leading ru_, capitalize the next character.
    field=`echo $field | sed -e 's/^ru_//'`
    f=`echo $field | sed -e 's/^\(.\).*$/\1/'`
    r=`echo $field | sed -e 's/^.\(.*\)$/\1/'`
    f=`echo $f | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
    # Fix _timeval _timespec, and _timestruc_t.
    r=`echo $r | sed -e s'/ _timeval$/ Timeval/'`
    r=`echo $r | sed -e s'/ _timespec$/ Timespec/'`
    r=`echo $r | sed -e s'/ _timestruc_t$/ Timestruc/'`
    field="$f$r"
    nrusage="$nrusage $field;"
  done
  echo "type Rusage struct {$nrusage }" >> ${OUT}
else
  echo "type Rusage struct {}" >> ${OUT}
fi

# The RUSAGE constants.
grep '^const _RUSAGE_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(RUSAGE_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The utsname struct.
grep '^type _utsname ' gen-sysinfo.go | \
    sed -e 's/_utsname/Utsname/' \
      -e 's/sysname/Sysname/' \
      -e 's/nodename/Nodename/' \
      -e 's/release/Release/' \
      -e 's/version/Version/' \
      -e 's/machine/Machine/' \
      -e 's/domainname/Domainname/' \
    >> ${OUT}

# The iovec struct.
iovec=`grep '^type _iovec ' gen-sysinfo.go`
iovec_len=`echo $iovec | sed -n -e 's/^.*iov_len \([^ ]*\);.*$/\1/p'`
echo "type Iovec_len_t $iovec_len" >> ${OUT}
echo $iovec | \
    sed -e 's/_iovec/Iovec/' \
      -e 's/iov_base/Base/' \
      -e 's/iov_len *[a-zA-Z0-9_]*/Len Iovec_len_t/' \
    >> ${OUT}

# The msghdr struct.
msghdr=`grep '^type _msghdr ' gen-sysinfo.go`
msghdr_controllen=`echo $msghdr | sed -n -e 's/^.*msg_controllen \([^ ]*\);.*$/\1/p'`
echo "type Msghdr_controllen_t $msghdr_controllen" >> ${OUT}
echo $msghdr | \
    sed -e 's/_msghdr/Msghdr/' \
      -e 's/msg_name/Name/' \
      -e 's/msg_namelen/Namelen/' \
      -e 's/msg_iov/Iov/' \
      -e 's/msg_iovlen/Iovlen/' \
      -e 's/_iovec/Iovec/' \
      -e 's/msg_control/Control/' \
      -e 's/msg_controllen *[a-zA-Z0-9_]*/Controllen Msghdr_controllen_t/' \
      -e 's/msg_flags/Flags/' \
    >> ${OUT}

# The MSG_ flags for Msghdr.
grep '^const _MSG_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(MSG_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The cmsghdr struct.
cmsghdr=`grep '^type _cmsghdr ' gen-sysinfo.go`
if test -n "$cmsghdr"; then
  cmsghdr_len=`echo $cmsghdr | sed -n -e 's/^.*cmsg_len \([^ ]*\);.*$/\1/p'`
  echo "type Cmsghdr_len_t $cmsghdr_len" >> ${OUT}
  echo "$cmsghdr" | \
      sed -e 's/_cmsghdr/Cmsghdr/' \
        -e 's/cmsg_len *[a-zA-Z0-9_]*/Len Cmsghdr_len_t/' \
        -e 's/cmsg_level/Level/' \
        -e 's/cmsg_type/Type/' \
        -e 's/\[\]/[0]/' \
      >> ${OUT}
fi

# The SCM_ flags for Cmsghdr.
grep '^const _SCM_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(SCM_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The ucred struct.
upcase_fields "_ucred" "Ucred" >> ${OUT} || true

# The ip_mreq struct.
grep '^type _ip_mreq ' gen-sysinfo.go | \
    sed -e 's/_ip_mreq/IPMreq/' \
      -e 's/imr_multiaddr/Multiaddr/' \
      -e 's/imr_interface/Interface/' \
      -e 's/_in_addr/[4]byte/g' \
    >> ${OUT}

# We need IPMreq to compile the net package.
if ! grep 'type IPMreq ' ${OUT} >/dev/null 2>&1; then
  echo 'type IPMreq struct { Multiaddr [4]byte; Interface [4]byte; }' >> ${OUT}
fi

# The ipv6_mreq struct.
grep '^type _ipv6_mreq ' gen-sysinfo.go | \
    sed -e 's/_ipv6_mreq/IPv6Mreq/' \
      -e 's/ipv6mr_multiaddr/Multiaddr/' \
      -e 's/ipv6mr_interface/Interface/' \
      -e 's/_in6_addr/[16]byte/' \
    >> ${OUT}

# We need IPv6Mreq to compile the net package.
if ! grep 'type IPv6Mreq ' ${OUT} >/dev/null 2>&1; then
  echo 'type IPv6Mreq struct { Multiaddr [16]byte; Interface uint32; }' >> ${OUT}
fi

# The ip_mreqn struct.
grep '^type _ip_mreqn ' gen-sysinfo.go | \
    sed -e 's/_ip_mreqn/IPMreqn/' \
      -e 's/imr_multiaddr/Multiaddr/' \
      -e 's/imr_address/Address/' \
      -e 's/imr_ifindex/Ifindex/' \
      -e 's/_in_addr/[4]byte/g' \
    >> ${OUT}

# We need IPMreq to compile the net package.
if ! grep 'type IPMreqn ' ${OUT} >/dev/null 2>&1; then
  echo 'type IPMreqn struct { Multiaddr [4]byte; Interface [4]byte; Ifindex int32 }' >> ${OUT}
fi

# The icmp6_filter struct.
grep '^type _icmp6_filter ' gen-sysinfo.go | \
    sed -e 's/_icmp6_filter/ICMPv6Filter/' \
      -e 's/data/Data/' \
      -e 's/filt/Filt/' \
    >> ${OUT}

# We need ICMPv6Filter to compile the syscall package.
if ! grep 'type ICMPv6Filter ' ${OUT} > /dev/null 2>&1; then
  echo 'type ICMPv6Filter struct { Data [8]uint32 }' >> ${OUT}
fi

# The ip6_mtuinfo struct.
grep '^type _ip6_mtuinfo ' gen-sysinfo.go | \
    sed -e 's/_ip6_mtuinfo/IPv6MTUInfo/' \
      -e 's/ip6m_addr/Addr/' \
      -e 's/_sockaddr_in6/RawSockaddrInet6/' \
      -e 's/ip6m_mtu/Mtu/' \
    >> ${OUT}

# Try to guess the type to use for fd_set.
fd_set=`grep '^type _fd_set ' gen-sysinfo.go || true`
fds_bits_type="_C_long"
if test "$fd_set" != ""; then
    fds_bits_type=`echo $fd_set | sed -e 's/.*[]]\([^;]*\); }$/\1/'`
fi
echo "type fds_bits_type $fds_bits_type" >> ${OUT}

# The addrinfo struct.
grep '^type _addrinfo ' gen-sysinfo.go | \
    sed -e 's/_addrinfo/Addrinfo/g' \
      -e 's/ ai_/ Ai_/g' \
    >> ${OUT}

# The addrinfo and nameinfo flags and errors.
grep '^const _AI_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(AI_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _EAI_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(EAI_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _NI_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(NI_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# If nothing else defined EAI_OVERFLOW, make sure it has a value.
if ! grep "const EAI_OVERFLOW " ${OUT} >/dev/null 2>&1; then
  echo "const EAI_OVERFLOW = 0" >> ${OUT}
fi

# The passwd struct.
grep '^type _passwd ' gen-sysinfo.go | \
    sed -e 's/_passwd/Passwd/' \
      -e 's/ pw_/ Pw_/g' \
    >> ${OUT}

# The group struct.
grep '^type _group ' gen-sysinfo.go | \
    sed -e 's/_group/Group/' \
      -e 's/ gr_/ Gr_/g' \
    >> ${OUT}

# The ioctl flags for the controlling TTY.
grep '^const _TIOC' gen-sysinfo.go | \
    grep -v '_val =' | \
    sed -e 's/^\(const \)_\(TIOC[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _TUNSET' gen-sysinfo.go | \
    grep -v '_val =' | \
    sed -e 's/^\(const \)_\(TUNSET[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# We need TIOCGWINSZ.
if ! grep '^const TIOCGWINSZ' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCGWINSZ_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCGWINSZ = _TIOCGWINSZ_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCSWINSZ' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCSWINSZ_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCSWINSZ = _TIOCSWINSZ_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCNOTTY' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCNOTTY_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCNOTTY = _TIOCNOTTY_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCSCTTY' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCSCTTY_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCSCTTY = _TIOCSCTTY_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCGPGRP' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCGPGRP_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCGPGRP = _TIOCGPGRP_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCSPGRP' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCSPGRP_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCSPGRP = _TIOCSPGRP_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCGPTN' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCGPTN_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCGPTN = _TIOCGPTN_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCSPTLCK' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCSPTLCK_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCSPTLCK = _TIOCSPTLCK_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCGDEV' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCGDEV_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCGDEV = _TIOCGDEV_val' >> ${OUT}
  fi
fi
if ! grep '^const TIOCSIG' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TIOCSIG_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TIOCSIG = _TIOCSIG_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETNOCSUM' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETNOCSUM_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETNOCSUM = _TUNSETNOCSUM_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETDEBUG' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETDEBUG_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETDEBUG = _TUNSETDEBUG_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETIFF' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETIFF_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETIFF = _TUNSETIFF_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETPERSIST' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETPERSIST_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETPERSIST = _TUNSETPERSIST_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETOWNER' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETOWNER_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETOWNER = _TUNSETOWNER_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETLINK' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETLINK_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETLINK = _TUNSETLINK_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETGROUP' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETGROUP_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETGROUP = _TUNSETGROUP_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNGETFEATURES' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNGETFEATURES_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNGETFEATURES = _TUNGETFEATURES_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETOFFLOAD' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETOFFLOAD_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETOFFLOAD = _TUNSETOFFLOAD_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETTXFILTER' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETTXFILTER_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETTXFILTER = _TUNSETTXFILTER_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNGETIFF' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNGETIFF_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNGETIFF = _TUNGETIFF_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNGETSNDBUF' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNGETSNDBUF_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNGETSNDBUF = _TUNGETSNDBUF_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETSNDBUF' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETSNDBUF_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETSNDBUF = _TUNSETSNDBUF_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNATTACHFILTER' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNATTACHFILTER_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNATTACHFILTER = _TUNATTACHFILTER_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNDETACHFILTER' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNDETACHFILTER_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNDETACHFILTER = _TUNDETACHFILTER_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNGETVNETHDRSZ' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNGETVNETHDRSZ_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNGETVNETHDRSZ = _TUNGETVNETHDRSZ_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETVNETHDRSZ' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETVNETHDRSZ_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETVNETHDRSZ = _TUNSETVNETHDRSZ_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNSETQUEUE' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETQUEUE_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETQUEUE = _TUNSETQUEUE_val' >> ${OUT}
  fi
fi


if ! grep '^const TUNSETIFINDEX' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNSETIFINDEX_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNSETIFINDEX = _TUNSETIFINDEX_val' >> ${OUT}
  fi
fi

if ! grep '^const TUNGETFILTER' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TUNGETFILTER_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TUNGETFILTER = _TUNGETFILTER_val' >> ${OUT}
  fi
fi

# The ioctl flags for terminal control
grep '^const _TC[GS]ET' gen-sysinfo.go | grep -v _val | \
    sed -e 's/^\(const \)_\(TC[GS]ET[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
if ! grep '^const TCGETS' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TCGETS_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TCGETS = _TCGETS_val' >> ${OUT}
  fi
fi
if ! grep '^const TCSETS' ${OUT} >/dev/null 2>&1; then
  if grep '^const _TCSETS_val' ${OUT} >/dev/null 2>&1; then
    echo 'const TCSETS = _TCSETS_val' >> ${OUT}
  fi
fi

# ioctl constants.  Might fall back to 0 if TIOCNXCL is missing, too, but
# needs handling in syscalls.exec.go.
if ! grep '^const _TIOCSCTTY ' gen-sysinfo.go >/dev/null 2>&1; then
  if grep '^const _TIOCNXCL ' gen-sysinfo.go >/dev/null 2>&1; then
    echo "const TIOCSCTTY = TIOCNXCL" >> ${OUT}
  fi
fi

# If nothing else defined TIOCSCTTY, make sure it has a value.
if ! grep "const TIOCSCTTY " ${OUT} >/dev/null 2>&1; then
  echo "const TIOCSCTTY = 0" >> ${OUT}
fi

# The nlmsghdr struct.
grep '^type _nlmsghdr ' gen-sysinfo.go | \
    sed -e 's/_nlmsghdr/NlMsghdr/' \
      -e 's/nlmsg_len/Len/' \
      -e 's/nlmsg_type/Type/' \
      -e 's/nlmsg_flags/Flags/' \
      -e 's/nlmsg_seq/Seq/' \
      -e 's/nlmsg_pid/Pid/' \
    >> ${OUT}

# The nlmsg flags and operators.
grep '^const _NLM' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(NLM[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# NLMSG_HDRLEN is defined as an expression using sizeof.
if ! grep '^const NLMSG_HDRLEN' ${OUT} > /dev/null 2>&1; then
  if grep '^const _sizeof_nlmsghdr ' ${OUT} > /dev/null 2>&1; then
    echo 'const NLMSG_HDRLEN = (_sizeof_nlmsghdr + (NLMSG_ALIGNTO-1)) &^ (NLMSG_ALIGNTO-1)' >> ${OUT}
  fi
fi

# The rtmsg struct.
grep '^type _rtmsg ' gen-sysinfo.go | \
    sed -e 's/_rtmsg/RtMsg/' \
      -e 's/rtm_family/Family/' \
      -e 's/rtm_dst_len/Dst_len/' \
      -e 's/rtm_src_len/Src_len/' \
      -e 's/rtm_tos/Tos/' \
      -e 's/rtm_table/Table/' \
      -e 's/rtm_protocol/Protocol/' \
      -e 's/rtm_scope/Scope/' \
      -e 's/rtm_type/Type/' \
      -e 's/rtm_flags/Flags/' \
    >> ${OUT}

# The rtgenmsg struct.
grep '^type _rtgenmsg ' gen-sysinfo.go | \
    sed -e 's/_rtgenmsg/RtGenmsg/' \
      -e 's/rtgen_family/Family/' \
    >> ${OUT}

# The routing message flags.
grep '^const _RT_' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTA' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTF' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTF[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTCF' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTCF[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTM' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTM[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTN' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTN[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RTPROT' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(RTPROT[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The ifinfomsg struct.
grep '^type _ifinfomsg ' gen-sysinfo.go | \
    sed -e 's/_ifinfomsg/IfInfomsg/' \
      -e 's/ifi_family/Family/' \
      -e 's/ifi_type/Type/' \
      -e 's/ifi_index/Index/' \
      -e 's/ifi_flags/Flags/' \
      -e 's/ifi_change/Change/' \
    >> ${OUT}

# The interface information types and flags.
grep '^const _IFA' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(IFA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _IFLA' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(IFLA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _IFF' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(IFF[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _IFNAMSIZ' gen-sysinfo.go | \
    sed -e 's/^\(const \)_\(IFNAMSIZ[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _SIOC' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(SIOC[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The ifaddrmsg struct.
grep '^type _ifaddrmsg ' gen-sysinfo.go | \
    sed -e 's/_ifaddrmsg/IfAddrmsg/' \
      -e 's/ifa_family/Family/' \
      -e 's/ifa_prefixlen/Prefixlen/' \
      -e 's/ifa_flags/Flags/' \
      -e 's/ifa_scope/Scope/' \
      -e 's/ifa_index/Index/' \
    >> ${OUT}

# The rtattr struct.
grep '^type _rtattr ' gen-sysinfo.go | \
    sed -e 's/_rtattr/RtAttr/' \
      -e 's/rta_len/Len/' \
      -e 's/rta_type/Type/' \
    >> ${OUT}

# The in_pktinfo struct.
grep '^type _in_pktinfo ' gen-sysinfo.go | \
    sed -e 's/_in_pktinfo/Inet4Pktinfo/' \
      -e 's/ipi_ifindex/Ifindex/' \
      -e 's/ipi_spec_dst/Spec_dst/' \
      -e 's/ipi_addr/Addr/' \
      -e 's/_in_addr/[4]byte/g' \
    >> ${OUT}

# The in6_pktinfo struct.
grep '^type _in6_pktinfo ' gen-sysinfo.go | \
    sed -e 's/_in6_pktinfo/Inet6Pktinfo/' \
      -e 's/ipi6_addr/Addr/' \
      -e 's/ipi6_ifindex/Ifindex/' \
      -e 's/_in6_addr/[16]byte/' \
    >> ${OUT}

# The termios struct.
grep '^type _termios ' gen-sysinfo.go | \
    sed -e 's/_termios/Termios/' \
      -e 's/c_iflag/Iflag/' \
      -e 's/c_oflag/Oflag/' \
      -e 's/c_cflag/Cflag/' \
      -e 's/c_lflag/Lflag/' \
      -e 's/c_line/Line/' \
      -e 's/c_cc/Cc/' \
      -e 's/c_ispeed/Ispeed/' \
      -e 's/c_ospeed/Ospeed/' \
    >> ${OUT}

# The termios constants.
for n in IGNBRK BRKINT IGNPAR PARMRK INPCK ISTRIP INLCR IGNCR ICRNL IUCLC \
    IXON IXANY IXOFF IMAXBEL IUTF8 OPOST OLCUC ONLCR OCRNL ONOCR ONLRET \
    OFILL OFDEL NLDLY NL0 NL1 CRDLY CR0 CR1 CR2 CR3 CS5 CS6 CS7 CS8 TABDLY \
    BSDLY VTDLY FFDLY CBAUD CBAUDEX CSIZE CSTOPB CREAD PARENB PARODD HUPCL \
    CLOCAL LOBLK CIBAUD CMSPAR CRTSCTS ISIG ICANON XCASE ECHO ECHOE ECHOK \
    ECHONL ECHOCTL ECHOPRT ECHOKE DEFECHO FLUSHO NOFLSH TOSTOP PENDIN IEXTEN \
    VINTR VQUIT VERASE VKILL VEOF VMIN VEOL VTIME VEOL2 VSWTCH VSTART VSTOP \
    VSUSP VDSUSP VLNEXT VWERASE VREPRINT VDISCARD VSTATUS TCSANOW TCSADRAIN \
    TCSAFLUSH TCIFLUSH TCOFLUSH TCIOFLUSH TCOOFF TCOON TCIOFF TCION B0 B50 \
    B75 B110 B134 B150 B200 B300 B600 B1200 B1800 B2400 B4800 B9600 B19200 \
    B38400 B57600 B115200 B230400 B460800 B500000 B576000 B921600 B1000000 \
    B1152000 B1500000 B2000000 B2500000 B3000000 B3500000 B4000000; do

    grep "^const _$n " gen-sysinfo.go | \
	sed -e 's/^\(const \)_\([^=]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
done

# The mount flags
grep '^const _MNT_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(MNT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _MS_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(MS_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The fallocate flags.
grep '^const _FALLOC_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(FALLOC_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The statfs struct.
# Prefer largefile variant if available.
statfs=`grep '^type _statfs64 ' gen-sysinfo.go || true`
if test "$statfs" != ""; then
  grep '^type _statfs64 ' gen-sysinfo.go
else
  grep '^type _statfs ' gen-sysinfo.go
fi | sed -e 's/type _statfs64/type Statfs_t/' \
	 -e 's/type _statfs/type Statfs_t/' \
	 -e 's/f_type/Type/' \
	 -e 's/f_bsize/Bsize/' \
	 -e 's/f_blocks/Blocks/' \
	 -e 's/f_bfree/Bfree/' \
	 -e 's/f_bavail/Bavail/' \
	 -e 's/f_files/Files/' \
	 -e 's/f_ffree/Ffree/' \
	 -e 's/f_fsid/Fsid/' \
	 -e 's/f_namelen/Namelen/' \
	 -e 's/f_frsize/Frsize/' \
	 -e 's/f_flags/Flags/' \
	 -e 's/f_spare/Spare/' \
    >> ${OUT}

# The timex struct.
timex=`grep '^type _timex ' gen-sysinfo.go || true`
if test "$timex" = ""; then
  timex=`grep '^// type _timex ' gen-sysinfo.go || true`
  if test "$timex" != ""; then
    timex=`echo $timex | sed -e 's|// ||' -e 's/INVALID-bit-field/int32/g'`
  fi
fi
if test "$timex" != ""; then
  echo "$timex" | \
    sed -e 's/_timex/Timex/' \
      -e 's/modes/Modes/' \
      -e 's/offset/Offset/' \
      -e 's/freq/Freq/' \
      -e 's/maxerror/Maxerror/' \
      -e 's/esterror/Esterror/' \
      -e 's/status/Status/' \
      -e 's/constant/Constant/' \
      -e 's/precision/Precision/' \
      -e 's/tolerance/Tolerance/' \
      -e 's/ time / Time /' \
      -e 's/tick/Tick/' \
      -e 's/ppsfreq/Ppsfreq/' \
      -e 's/jitter/Jitter/' \
      -e 's/shift/Shift/' \
      -e 's/stabil/Stabil/' \
      -e 's/jitcnt/Jitcnt/' \
      -e 's/calcnt/Calcnt/' \
      -e 's/errcnt/Errcnt/' \
      -e 's/stbcnt/Stbcnt/' \
      -e 's/tai/Tai/' \
      -e 's/_timeval/Timeval/' \
    >> ${OUT}
fi

# The rlimit struct.
grep '^type _rlimit ' gen-sysinfo.go | \
    sed -e 's/_rlimit/Rlimit/' \
      -e 's/rlim_cur/Cur/' \
      -e 's/rlim_max/Max/' \
    >> ${OUT}

# The RLIMIT constants.
grep '^const _RLIMIT_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(RLIMIT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _RLIM_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(RLIM_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The sysinfo struct.
grep '^type _sysinfo ' gen-sysinfo.go | \
    sed -e 's/_sysinfo/Sysinfo_t/' \
      -e 's/uptime/Uptime/' \
      -e 's/loads/Loads/' \
      -e 's/totalram/Totalram/' \
      -e 's/freeram/Freeram/' \
      -e 's/sharedram/Sharedram/' \
      -e 's/bufferram/Bufferram/' \
      -e 's/totalswap/Totalswap/' \
      -e 's/freeswap/Freeswap/' \
      -e 's/procs/Procs/' \
      -e 's/totalhigh/Totalhigh/' \
      -e 's/freehigh/Freehigh/' \
      -e 's/mem_unit/Unit/' \
    >> ${OUT}

# The ustat struct.
grep '^type _ustat ' gen-sysinfo.go | \
    sed -e 's/_ustat/Ustat_t/' \
      -e 's/f_tfree/Tfree/' \
      -e 's/f_tinode/Tinoe/' \
      -e 's/f_fname/Fname/' \
      -e 's/f_fpack/Fpack/' \
    >> ${OUT}
# Force it to be defined, as on some older GNU/Linux systems the
# header file fails when using with <linux/filter.h>.
if ! grep 'type _ustat ' gen-sysinfo.go >/dev/null 2>&1; then
  echo 'type Ustat_t struct { Tfree int32; Tinoe uint64; Fname [5+1]int8; Fpack [5+1]int8; }' >> ${OUT}
fi

# The utimbuf struct.
grep '^type _utimbuf ' gen-sysinfo.go | \
    sed -e 's/_utimbuf/Utimbuf/' \
      -e 's/actime/Actime/' \
      -e 's/modtime/Modtime/' \
    >> ${OUT}

# The LOCK flags for flock.
grep '^const _LOCK_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The PRIO constants.
grep '^const _PRIO_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The GNU/Linux LINUX_REBOOT flags.
grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
    sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The GNU/Linux sock_filter struct.
grep '^type _sock_filter ' gen-sysinfo.go | \
    sed -e 's/_sock_filter/SockFilter/' \
      -e 's/code/Code/' \
      -e 's/jt/Jt/' \
      -e 's/jf/Jf/' \
      -e 's/k /K /' \
    >> ${OUT}

# The GNU/Linux sock_fprog struct.
grep '^type _sock_fprog ' gen-sysinfo.go | \
    sed -e 's/_sock_fprog/SockFprog/' \
      -e 's/len/Len/' \
      -e 's/filter/Filter/' \
      -e 's/_sock_filter/SockFilter/' \
    >> ${OUT}

# The GNU/Linux filter flags.
grep '^const _BPF_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(BPF_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The GNU/Linux nlattr struct.
grep '^type _nlattr ' gen-sysinfo.go | \
    sed -e 's/_nlattr/NlAttr/' \
      -e 's/nla_len/Len/' \
      -e 's/nla_type/Type/' \
    >> ${OUT}

# The GNU/Linux nlmsgerr struct.
grep '^type _nlmsgerr ' gen-sysinfo.go | \
    sed -e 's/_nlmsgerr/NlMsgerr/' \
      -e 's/error/Error/' \
      -e 's/msg/Msg/' \
      -e 's/_nlmsghdr/NlMsghdr/' \
    >> ${OUT}

# The GNU/Linux rtnexthop struct.
grep '^type _rtnexthop ' gen-sysinfo.go | \
    sed -e 's/_rtnexthop/RtNexthop/' \
      -e 's/rtnh_len/Len/' \
      -e 's/rtnh_flags/Flags/' \
      -e 's/rtnh_hops/Hops/' \
      -e 's/rtnh_ifindex/Ifindex/' \
    >> ${OUT}

# The GNU/Linux netlink flags.
grep '^const _NETLINK_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(NETLINK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _NLA_' gen-sysinfo.go | grep -v '_val =' | \
  sed -e 's/^\(const \)_\(NLA_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

if ! grep '^const NLA_HDRLEN' ${OUT} >/dev/null 2>&1; then
  if grep '^const _NLA_HDRLEN_val' ${OUT} >/dev/null 2>&1; then
    echo 'const NLA_HDRLEN = _NLA_HDRLEN_val' >> ${OUT}
  fi
fi

# The GNU/Linux packet socket flags.
grep '^const _PACKET_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(PACKET_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

# The GNU/Linux inotify_event struct.
grep '^type _inotify_event ' gen-sysinfo.go | \
    sed -e 's/_inotify_event/InotifyEvent/' \
      -e 's/wd/Wd/' \
      -e 's/mask/Mask/' \
      -e 's/cookie/Cookie/' \
      -e 's/len/Len/' \
      -e 's/name/Name/' \
      -e 's/\[\]/[0]/' \
      -e 's/\[0\]byte/[0]int8/' \
    >> ${OUT}

# The GNU/Linux CLONE flags.
grep '^const _CLONE_' gen-sysinfo.go | \
  sed -e 's/^\(const \)_\(CLONE_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# We need some CLONE constants that are not defined in older versions
# of glibc.
if ! grep '^const CLONE_NEWUSER ' ${OUT} > /dev/null 2>&1; then
  echo "const CLONE_NEWUSER = 0x10000000" >> ${OUT}
fi
if ! grep '^const CLONE_NEWNET ' ${OUT} > /dev/null 2>&1; then
  echo "const CLONE_NEWNET = 0x40000000" >> ${OUT}
fi

# Struct sizes.
set cmsghdr Cmsghdr ip_mreq IPMreq ip_mreqn IPMreqn ipv6_mreq IPv6Mreq \
    ifaddrmsg IfAddrmsg ifinfomsg IfInfomsg in_pktinfo Inet4Pktinfo \
    in6_pktinfo Inet6Pktinfo inotify_event InotifyEvent linger Linger \
    msghdr Msghdr nlattr NlAttr nlmsgerr NlMsgerr nlmsghdr NlMsghdr \
    rtattr RtAttr rtgenmsg RtGenmsg rtmsg RtMsg rtnexthop RtNexthop \
    sock_filter SockFilter sock_fprog SockFprog ucred Ucred \
    icmp6_filter ICMPv6Filter ip6_mtuinfo IPv6MTUInfo
while test $# != 0; do
    nc=$1
    ngo=$2
    shift
    shift
    if grep "^const _sizeof_$nc =" gen-sysinfo.go >/dev/null 2>&1; then
	echo "const Sizeof$ngo = _sizeof_$nc" >> ${OUT}
    fi
done

# In order to compile the net package, we need some sizes to exist
# even if the types do not.
if ! grep 'const SizeofIPMreq ' ${OUT} >/dev/null 2>&1; then
    echo 'const SizeofIPMreq = 8' >> ${OUT}
fi
if ! grep 'const SizeofIPv6Mreq ' ${OUT} >/dev/null 2>&1; then
    echo 'const SizeofIPv6Mreq = 20' >> ${OUT}
fi
if ! grep 'const SizeofIPMreqn ' ${OUT} >/dev/null 2>&1; then
    echo 'const SizeofIPMreqn = 12' >> ${OUT}
fi
if ! grep 'const SizeofICMPv6Filter ' ${OUT} >/dev/null 2>&1; then
    echo 'const SizeofICMPv6Filter = 32' >> ${OUT}
fi

# The Solaris 11 Update 1 _zone_net_addr_t struct.
grep '^type _zone_net_addr_t ' gen-sysinfo.go | \
    sed -e 's/_in6_addr/[16]byte/' \
    >> ${OUT}

# The Solaris 12 _flow_arp_desc_t struct.
grep '^type _flow_arp_desc_t ' gen-sysinfo.go | \
    sed -e 's/_in6_addr_t/[16]byte/g' \
    >> ${OUT}

# The Solaris 12 _flow_l3_desc_t struct.
grep '^type _flow_l3_desc_t ' gen-sysinfo.go | \
    sed -e 's/_in6_addr_t/[16]byte/g' \
    >> ${OUT}

# The Solaris 12 _mac_ipaddr_t struct.
grep '^type _mac_ipaddr_t ' gen-sysinfo.go | \
    sed -e 's/_in6_addr_t/[16]byte/g' \
    >> ${OUT}

# The Solaris 12 _mactun_info_t struct.
grep '^type _mactun_info_t ' gen-sysinfo.go | \
    sed -e 's/_in6_addr_t/[16]byte/g' \
    >> ${OUT}

exit $?
