#!/bin/sh
# Usage: q3arch arch|platform|compat_arch BUILD|HOST
#
# Output an architecture or platform name that Quake 3 could use for the
# build or host CPU architecture or operating system.

set -e

case $1 in

arch|compat_arch)
    # In the upstream Makefile the architecture is given by uname -m, with the
    # following substitutions:
    #
    # i.86 -> x86 (used to be i386)
    # powerpc -> ppc
    # powerpc64 -> ppc64
    # axp -> alpha on Linux and FreeBSD (used to be axp)
    #
    # However, for most architectures the build system doesn't actually care,
    # it's just "some other architecture", so we can get away with using the
    # GNU CPU as-is. i386, ppc and x86_64 are the unusual ones.
    #
    # On the other hand, in q_platform.h it all becomes rather more
    # significant: the engine expects to see one of:
    #
    # x86, x86_64, AXP (Windows)
    # x86, x86_64, ppc64, ppc, s390, s390x, ia64, alpha, sparc, arm, cris,
    #    hppa, mips, sh (Linux, kFreeBSD)
    # some subset of the Linux set (Mac OS, *BSD, SunOS, Irix)

    DEB_X_GNU_CPU=`dpkg-architecture -qDEB_$2_GNU_CPU`
    COMPAT_Q3ARCH=

    case ${DEB_X_GNU_CPU} in

    i?86)
        Q3ARCH=x86
	COMPAT_Q3ARCH=i386
        ;;

    alpha)
        Q3ARCH=alpha
	COMPAT_Q3ARCH=axp
        ;;

    powerpc)
        Q3ARCH=ppc
        ;;

    powerpc64)
        Q3ARCH=ppc64
        ;;

    mipsel)
        Q3ARCH=mips
	;;

    x86_64|s390|s390x|ia64|sparc|hppa|mips|arm)
        Q3ARCH=${DEB_X_GNU_CPU}
	;;

    sh4)
        Q3ARCH=sh
        ;;

    *)
        echo "CPU ${DEB_X_GNU_CPU} not supported by Quake 3, might not work" >&2
        Q3ARCH=${DEB_X_GNU_CPU}
        ;;

    esac

    case $1 in
    (arch)
        echo "DEB_$2_GNU_CPU = ${DEB_X_GNU_CPU}, using Q3 architecture ${Q3ARCH}">&2
        echo ${Q3ARCH}
        ;;
    (compat_arch)
        if test -n "${COMPAT_ARCH}"; then
            echo "DEB_$2_GNU_CPU = ${DEB_X_GNU_CPU}, older ioquake3 would use ${COMPAT_ARCH}">&2
            echo ${COMPAT_ARCH}
        fi
        ;;
    esac

    ;;

platform)
    # In the upstream Makefile the platform is given by uname, with the
    # following substitutions:
    #
    # anything after _ removed
    # folded to lower case
    # / -> _
    #
    # This would result in Debian builds being done for linux, gnu_kfreebsd and
    # gnu.
    #
    # However, for most platform names the build system doesn't actually care,
    # it's just "some other platform", so we can get away with using the
    # GNU system as-is.
    #
    # (For instance, on Debian kFreeBSD buildd, uname says GNU/kFreeBSD whereas
    # the GNU CPU type is kfreebsd-gnu, but that's not important because the
    # Makefile doesn't actually do anything different.)

    DEB_X_GNU_SYSTEM=`dpkg-architecture -qDEB_$2_GNU_SYSTEM`

    case ${DEB_X_GNU_SYSTEM} in

    linux-gnu*)
        # including, but not limited to:
	# arm-linux-gnueabi (Debian armel: ARM EABI, LE)
	# arm-linux-gnueabihf (Debian armhf: ARM EABI, LE, hardfloat)
	# powerpc-linux-gnuspe (Debian powerpcspe: Signal Processing Extension)
        Q3OS=linux
        ;;

    *)
        Q3OS=${DEB_X_GNU_SYSTEM}
        ;;

    esac

    echo "DEB_$2_GNU_SYSTEM = ${DEB_X_GNU_SYSTEM}, using Q3 platform ${Q3OS}">&2
    echo ${Q3OS}

    ;;

*)
    echo "Usage: sh q3arch.sh arch|compat_arch|platform BUILD|HOST" >&2
    exit 1
    ;;

esac

# Copyright 2009-2013 Simon McVittie <smcv@debian.org>
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided this notice is preserved.
# This file is offered as-is, without any warranty.
