#! /bin/sh

### onearch: find my generic architecture (onearch)
#Linux: uname -m=i686/x86_64            -i=i386/x86_64 -p=i386/i686/x86_64/unk
#Mac:   uname -m=i386/"Power Macintosh" -i=[illegal]   -p=i386/powerpc
#IRIX:  uname -m=IP22/IP30              -i=[illegal ]  -p=mips/...

### get uname info
#set hdrw = `uname -i` # Linux: i386/x86_64, Mac/IRIX: illegal option
syst=`uname -s` # Darwin, Linux, IRIX, IRIX64
proc=`uname -p` # powerpc, i386, i686, athlon, x86_64, mips, arm, Ubun->unknown
mach=`uname -m` # Power Macintosh, i686, IP30, x86_64, arm64
rele=`uname -r` # e.g., Darwin=8.11.0, Linux=2.6.23.17-88.fc7, IRIX=6.5

### hacks
fixldcycle=0    # only needed Darwin 10.5 (9.* kernels)
use64proc=1     # newer Mac: 64-bit binaries default, even on 32-bit OS
case "$rele" in 9.*.*) use64proc=0 ;; esac

### known
known="\
  Darwin-ppc Darwin-i386 Darwin-x86_64 \
  Linux-i386 Linux-x86_64 \
  IRIX-mips IRIX64-mips"
onearch=unknown

### my classify
if [ $syst = "Darwin" ] && [ $proc = "powerpc" ]; then
  onesyst=Darwin
  oneproc=ppc
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Darwin" ] && [ $proc = "i386" ]; then
  onesyst=Darwin
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Darwin" ] && [ $proc = "i386" ] && [ $use64proc -eq 0 ]; then
  onesyst=Darwin
  oneproc=i386
  onearch=${onesyst}-${oneproc}
  fixldcycle=1    # Apple-approved hack ldflag to fix link err cycle
fi
if [ $syst = "Darwin" ] && [ $proc = "i386" ] && [ $use64proc -eq 1 ]; then
  onesyst=Darwin
  oneproc=x86_64  # def:32bitOS
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Darwin" ] && [ "$mach" = "x86_64" ]; then
  onesyst=Darwin
  oneproc=x86_64  # def:32bitOS
  onearch=${onesyst}-${oneproc}
fi
#--------------------------------------------------------------------------
### tmp classify apple arm64 silicon as x86_64 (runs thru Rosetta 2 emulator)
if [ $syst = "Darwin" ] && [ $proc = "arm64" ]; then
  onesyst=Darwin
  oneproc=x86_64   # tmp
  #oneproc=arm64   # change to this when native (or universal) compile done
  onearch=${onesyst}-${oneproc}
fi
# not sure when apple silicon uname -p changed from "arm64" to "arm"
if [ $syst = "Darwin" ] && [ $proc = "arm" ]; then
  onesyst=Darwin
  oneproc=x86_64   # tmp
  #oneproc=arm64   # change to this when native (or universal) compile done
  onearch=${onesyst}-${oneproc}
fi
#----------------------------------------------------------------------
if [ $syst = "Linux" ] && [ $proc = "i386" ]; then
  onesyst=Linux
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "i686" ]; then
  onesyst=Linux
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "athlon" ]; then
  onesyst=Linux
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "unknown" ] && [ "$mach" = "i386" ]; then
  onesyst=Linux
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "unknown" ] && [ "$mach" = "i686" ]; then
  onesyst=Linux
  oneproc=i386
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "x86_64" ]; then
  onesyst=Linux
  oneproc=x86_64
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "Linux" ] && [ $proc = "unknown" ] && [ "$mach" = "x86_64" ]; then
  onesyst=Linux
  oneproc=x86_64
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "IRIX" ] && [ $proc = "mips" ]; then
  onesyst=IRIX    # -n32 vs -32
  oneproc=mips
  onearch=${onesyst}-${oneproc}
fi
if [ $syst = "IRIX64" ] && [ $proc = "mips" ]; then
  onesyst=IRIX    # -64
  oneproc=mips
  onearch=${onesyst}-${oneproc}
fi
# else onearch=unknown

### return onearch (or known or onesyst/oneproc/onearch)
if [ $# -lt 1 ]; then
  echo $onearch
else
  if [ $1 = "known" ]; then
    for onearch in $known; do
      echo "$onearch "
    done
  fi
  if [ $1 = "onesyst" ]; then echo $onesyst; fi
  if [ $1 = "oneproc" ]; then echo $oneproc; fi
  if [ $1 = "onearch" ]; then echo $onearch; fi
  if [ $1 = "fixldcycle" ]; then echo $fixldcycle; fi
  if [ $1 = "help" ] || [ $1 = "-help" ]; then
    echo "getonearch [known|onesyst|oneproc|fixldcycle|help]"
  fi
fi
