case ${ARCH} in
    amd64)
        export NATIVE_ARCH="x86_64" ;;
    arm64)
        export NATIVE_ARCH="aarch64" ;;
    armv4)
        export NATIVE_ARCH="armv4l" ;;
    armv6hf)
        export NATIVE_ARCH="armv6l" ;;
    armv7hf)
        export NATIVE_ARCH="armv7l" ;;
    i486)
        export NATIVE_ARCH="i486" ;;
    loongarch64)
        export NATIVE_ARCH="loongarch64" ;;
    loongson2f)
        export NATIVE_ARCH="mips64" ;;
    loongson3)
        export NATIVE_ARCH="mips64" ;;
    m68k)
        export NATIVE_ARCH="m68k" ;;
    mips64r6el)
        export NATIVE_ARCH="mips64" ;;
    powerpc)
        export NATIVE_ARCH="ppc" ;;
    ppc64)
        export NATIVE_ARCH="ppc64" ;;
    ppc64el)
        export NATIVE_ARCH="ppc64le" ;;
    riscv64)
        export NATIVE_ARCH="riscv64" ;;
esac

abinfo "Generating hook_uname.c for ${NATIVE_ARCH} ..."
cat > "$SRCDIR"/hook_uname.c << EOF
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <sys/utsname.h>

typedef int (*uname_t) (struct utsname *name);
int uname (struct utsname *name) {
  int ret;
  uname_t real_uname = (uname_t) dlsym(RTLD_NEXT, "uname");
  ret = real_uname(name);
  if (!ret) {
EOF

for (( i=0; i<${#NATIVE_ARCH}; i++ )); do
    echo "    name->machine[$i] = '${NATIVE_ARCH:$i:1}';" \
        >> "$SRCDIR"/hook_uname.c
done

cat >> "$SRCDIR"/hook_uname.c << EOF
    name->machine[${#NATIVE_ARCH}] = '\0';
  }
  return ret;
}
EOF

abinfo "Building hook_uname.so ..."
gcc ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} \
    -fPIC -shared \
    "$SRCDIR"/hook_uname.c \
    -o "$SRCDIR"/hook_uname.so \
    -ldl

abinfo "Installing hook_uname.so ..."
install -Dvm755 "$SRCDIR"/hook_uname.so \
    "$PKGDIR"/usr/lib/hook_uname.so
