#!/bin/sh

fout="$1"
sysdeps="$2"

define()
{
  echo "#define $1 $2" | sed -e 's/SYSDEP/SYS/g' >> "${fout}"
}

cat >> "${fout}" <<EOF
#ifndef _SYSINFO_H
#define _SYSINFO_H

EOF

#----------------------------------------------------------------------
# C

define SYS_OS "${SYSDEP_OS}"
define SYS_OSVERSION \""${SYSDEP_OSVERSION}"\"
define SYS_ARCH "${SYSDEP_ARCH}"
define SYS_CCTYPE "${SYSDEP_CCTYPE}"
define SYS_CFLAGS \""${SYSDEP_CFLAGS}"\"
define SYS_LDFLAGS \""${SYSDEP_LDFLAGS}"\"
define SYS_CCVERSION \""${SYSDEP_CCVERSION}"\"

major=`echo "${SYSDEP_CCVERSION}" | awk -F. '{print $1}'`
minor=`echo "${SYSDEP_CCVERSION}" | awk -F. '{print $2}'`
patch=`echo "${SYSDEP_CCVERSION}" | awk -F. '{print $3}'`

define SYS_CCVERSION_MAJOR "$major"
define SYS_CCVERSION_MINOR "$minor"
define SYS_CCVERSION_PATCH "$patch"

#----------------------------------------------------------------------
# Ada

if [ ! -z "${SYSDEP_ADA_COMP}" ]
then
  define SYS_ADA_CFLAGS \""${SYSDEP_ADA_CFLAGS}"\"
  define SYS_ADA_BFLAGS \""${SYSDEP_ADA_BFLAGS}"\"
  define SYS_ADA_LDFLAGS \""${SYSDEP_ADA_LDFLAGS}"\"

  major=`echo "${SYSDEP_ADA_VERSION}" | awk -F. '{print $1}'`
  minor=`echo "${SYSDEP_ADA_VERSION}" | awk -F. '{print $2}'`
  patch=`echo "${SYSDEP_ADA_VERSION}" | awk -F. '{print $3}'`

  define SYS_ADA_TYPE "${SYSDEP_ADA_TYPE}"
  define SYS_ADA_VERSION \""${SYSDEP_ADA_VERSION}"\"
  define SYS_ADA_VERSION_MAJOR "$major"
  define SYS_ADA_VERSION_MINOR "$minor"
  define SYS_ADA_VERSION_PATCH "$patch"
fi

#----------------------------------------------------------------------
# cpu

define SYS_CPU_NUM "${SYSDEP_CPU_NUM}"
define SYS_CPU_L1_INST_CACHE_SIZE "${SYSDEP_CPU_L1_INST_CACHE_SIZE}"
define SYS_CPU_L1_DATA_CACHE_SIZE "${SYSDEP_CPU_L1_DATA_CACHE_SIZE}"
define SYS_CPU_L2_CACHE_SIZE "${SYSDEP_CPU_L2_CACHE_SIZE}"
define SYS_CPU_L3_CACHE_SIZE "${SYSDEP_CPU_L3_CACHE_SIZE}"
define SYS_CPU_CACHE_LINE_SIZE "${SYSDEP_CPU_CACHE_LINE_SIZE}"
define SYS_CPU_FREQ "${SYSDEP_CPU_FREQ}"

ext="(0"
for f in ${SYSDEP_CPU_EXT}
do
  ext="${ext} | $f"
done
ext="${ext})"
define SYS_CPU_EXT "${ext}"

for f in ${SYSDEP_CPU_EXT}
do
  have=`echo "${f}" | sed -e 's/SYSDEP_/SYSDEP_HAVE_/g'`
  define "${have}"
done

cat >> "${fout}" <<EOF

#endif
EOF

os=`grep 'SYS_OS ' _sysinfo.h \
 | sed -e 's/SYS_OS_//g' | awk '{print $NF}'`
ver=`grep 'SYS_OSVERSION ' _sysinfo.h \
 | sed -e 's/SYS_OSVERSION_//g' | awk '{print $NF}'`
cc=`grep 'SYS_CCTYPE ' _sysinfo.h \
 | sed -e 's/SYS_CCTYPE_//g' | awk '{print $NF}'`
ccver=`grep 'SYS_CCVERSION ' _sysinfo.h \
 | sed -e 's/SYS_CCVERSION//g' | awk '{print $NF}'`
arch=`grep 'SYS_ARCH ' _sysinfo.h \
 | sed -e 's/SYS_ARCH_//g' | awk '{print $NF}'`

ada=`grep 'SYS_ADA_TYPE ' _sysinfo.h \
 | sed -e 's/SYS_ADA_TYPE_//g' | awk '{print $NF}'`
adaver=`grep 'SYS_ADA_VERSION ' _sysinfo.h \
 | sed -e 's/SYS_ADA_VERSION//g' | awk '{print $NF}'`

echo "sysinfo: ${os} ${ver} ${cc} ${ccver} ${arch} ${ada} ${adaver}" \
  | tr [A-Z] [a-z] | sed -e 's/"//g' >> "${sysdeps}"

echo "sysinfo-cflags: ${SYSDEP_CFLAGS}" >> "${sysdeps}"
echo "sysinfo-ldflags: ${SYSDEP_LDFLAGS}" >> "${sysdeps}"

echo "sysinfo-ada-cflags: ${SYSDEP_ADA_CFLAGS}" >> "${sysdeps}"
echo "sysinfo-ada-bflags: ${SYSDEP_ADA_BFLAGS}" >> "${sysdeps}"
echo "sysinfo-ada-ldflags: ${SYSDEP_ADA_LDFLAGS}" >> "${sysdeps}"
