#!/bin/bash
#-*- mode: shell-script; -*-

prefix=/usr/local

usage() {
    echo "Usage: $0 [<options>]

  --help             print this message
  --prefix=<DIR>     set install root dir as <DIR>        (default: /usr/local)
  --bindir=<DIR>     set executable install dir as <DIR>  (default: \${prefix}/bin)
  --libdir=<DIR>     set library install dir as <DIR>     (default: \${prefix}/lib)
  --mandir=<DIR>     set manual doc install dir as <DIR>  (default: \${prefix}/share/man)
  --objdir=<DIR>     set build dir as <DIR>               (default: \${PWD})
"
    exit 1
}

while getopts ":ho:-:" opt; do
    case "$opt" in
        -)
	    # process --long-options
	    case "$OPTARG" in
                help)  usage ;;
                *=*)   opt=${OPTARG%=*}; val=${OPTARG#*=}
                       eval "$opt=$val" ;;
                *)     val="${!OPTIND}"; OPTIND=$((OPTIND + 1));
                       eval "$OPTARG=$val" ;;
            esac
	    ;;
        o)       output=$OPTARG ;;
        *)       usage ;;
    esac
done
shift $((OPTIND - 1))

for arg in "$@"; do
    opt=${arg%=*}
    val=${arg#*=}
    eval "$opt='$val'"
done

if [ -z "$ARCH" ]; then
    uname_M=$(uname -m 2>/dev/null || echo not)
    ARCH=$(echo $uname_M | sed -e s/i.86/i386/ -e s/arm.*/arm/ )
    if [ "$ARCH" = "x86_64" ] && echo "$CFLAGS" | grep -w m32 ; then
        ARCH=i386
    fi
fi

bindir=${bindir:-${prefix}/bin}
libdir=${libdir:-${prefix}/lib}
etcdir=${etcdir:-${prefix}/etc}
mandir=${mandir:-${prefix}/share/man}

if echo ${etcdir} | grep -qs /usr/local; then
    etcdir=$(echo ${etcdir} | sed -e "s^/usr/local^^")
fi
if echo ${etcdir} | grep -qs /usr; then
    etcdir=$(echo ${etcdir} | sed -e "s^/usr^^")
fi

CC=${CC:-${CROSS_COMPILE}gcc}
LD=${LD:-${CROSS_COMPILE}ld}

srcdir=$(readlink -f $(dirname $0))
objdir=${objdir:-${PWD}}
output=${output:-${objdir}/.config}

echo "# this file is generated automatically" > $output
echo override prefix := $prefix  >> $output
echo override bindir := $bindir  >> $output
echo override libdir := $libdir  >> $output
echo override mandir := $mandir  >> $output
echo override etcdir := $etcdir  >> $output
echo                             >> $output
echo override ARCH   := $ARCH    >> $output
echo override CC     := $CC      >> $output
echo override LD     := $LD      >> $output
echo override CFLAGS  = $CFLAGS  >> $output
echo override LDFLAGS = $LDFLAGS >> $output
echo                             >> $output
echo override srcdir := $srcdir  >> $output
echo override objdir := $objdir  >> $output

if [ "$srcdir" != "$objdir" ]; then
    cat > $objdir/Makefile <<EOF
ARCH := $ARCH

srcdir := $srcdir
objdir := $objdir

export ARCH srcdir objdir

MAKEFLAGS = --no-print-directory

all: prepare
	@\$(MAKE) -C \$(srcdir)

config:
	@\$(srcdir)/configure \$(MAKEOVERRIDES)

clean:
	@rm -rf arch libmcount libtraceevent utils
	@rm -f ftrace version.h *.o *.op

prepare:
	@mkdir -p arch/\$(ARCH) libmcount libtraceevent utils

test: all
	@\$(MAKE) -C \$(srcdir)/tests TESTARG="\$(TESTARG)" test

.PHONY: all config clean test
EOF
fi
