#!/bin/csh -f

set pstatus = 0
onintr cleanup
alias usage 'echo "USAGE: $0:t [-h] [-n] [-obj obj-root] [gmake-flags] [VAR=...] [toolname (default: opt)]"; set pstatus = 1; goto cleanup'

set EXEC = opt
set GMAKE_OPTS = ""
set DEBUG = 0

## Search path for automatically finding the obj-root to use.
## Note: The src root directory ${LLVMDIR} will be prepended to this path later.
## 
set OBJROOTDIRLIST = ( "/localhome/$USER/llvm" )

set doit = 1
unset options_done
while ( !( $?options_done ) && ($#argv > 0))
    switch ($argv[1])
	case -h :
	    usage
	case -f :
	    if ($#argv < 2) usage
	    shift argv; set MFILE = $argv[1]; shift argv; breaksw
	case -n :
	    set doit = 0; shift argv; breaksw
	case -obj :
	    set OBJROOT = $argv[2]; shift argv; shift argv
	    if (! -d "$OBJROOT") then
		echo "FATAL: Illegal obj-root directory ${OBJROOT}"
		exit 1
	    endif
	    breaksw
	case -d :
	    set doit = 0; set DEBUG = 1; shift argv; breaksw
	case -* :
	    set GMAKE_OPTS = ( $GMAKE_OPTS $argv[1] ); shift argv; breaksw
	default :
	    set optarg = `echo -n $argv[1] | sed 's/^[^=]*$//'`
	    if ($#optarg) then
	        set GMAKE_OPTS = ( $GMAKE_OPTS $optarg )
	        shift argv
	    else
	        set options_done
	    endif
            breaksw
    endsw
end

if ($#argv > 1) then
    echo 'ERROR: More than one tool is not supported by "makellvm"'
    usage
endif
if ($#argv > 0) then
    set EXEC = $argv[1]
endif
if ($DEBUG) then
    echo "DEBUG: EXEC = $EXEC"
endif

## Compute LLVMDIR: the root of the current LLVM tree.
## It is recorded in the variable LEVEL in Makefile, to compute it
## 
if (! $?MFILE) then
    if (-f GNUmakefile) then
	set MFILE = GNUmakefile
    else if (-f makefile) then
	set MFILE = makefile
    else
	set MFILE = Makefile
    endif
endif
if ($DEBUG) then
    echo "DEBUG: MFILE = $MFILE"
endif
if (! -f $MFILE) then
    echo "Missing or invalid makefile: $MFILE"
    exit 1
endif

set LLVMDIR = `awk '/LEVEL[ 	]*=/ {print $NF}' $MFILE`
if ($DEBUG) then
    echo "DEBUG: LLVMDIR = $LLVMDIR"
endif

if ($#LLVMDIR == 0 || ! -d "$LLVMDIR") then
    echo "Unable to find LLVM src-root directory or directory is invalid."
    echo "Are you within a valid LLVM directory for running gmake?"
    exit 1
endif

## Try to determine the obj-root directory automatically if not specified
## 
set OBJROOTDIRLIST = ( ${LLVMDIR} $OBJROOTDIRLIST )	## add src dir
if ($?OBJROOT == 0) then
    ## Try to determine object root directory by looking for Makefile.config
    foreach objdir ( $OBJROOTDIRLIST )
	if (-f "${objdir}/Makefile.config") then
	    set OBJROOT = ${objdir}
            break
        endif
    end
    if ($?OBJROOT == 0) then
	echo "FATAL: Could not choose an obj-root directory from these choices:"
	echo "       ${OBJROOTDIRLIST}."
	echo "       You can specify it explicitly using '-obj obj-root'."
	exit 1
    endif
    echo "Using OBJ-ROOT = ${OBJROOT} (specify '-obj obj-root' to override)."
endif
if (${OBJROOT} == ${LLVMDIR}) then
    # run make in the source directory itself
    set BUILDROOT = .
else
    # run make in the in the obj-root tree, in the directory for $cwd
    set SRCROOT = `sh -c "cd $LLVMDIR; pwd | sed 's/\//\\\//g'"` 
    set CURSRCDIR = `echo $cwd | sed -e "s/${SRCROOT}//"`
    set BUILDROOT = ${OBJROOT}/${CURSRCDIR}
    unset SRCROOT CURSRCDIR
endif
if ($DEBUG) then
    echo "DEBUG: BUILDROOT = $BUILDROOT"
endif
if (! -d $BUILDROOT) then
    echo "FATAL: Invalid build directory: ${BUILDROOT}"
    exit 1
endif
cd $BUILDROOT 

set CMD = "gmake $GMAKE_OPTS && (cd $LLVMDIR/tools/$EXEC && gmake $GMAKE_OPTS)"

if ($doit == 1) then
    csh -f -c "$CMD"
else
    echo '(NOT EXECUTING) COMMAND:'
    echo "  $CMD"
endif


#=========================================================
# CODE TO BE EXECUTED IF INTERRUPT IS RECEIVED
#=========================================================
cleanup:
    exit($pstatus)
