#!/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 = ( )

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 = "make $GMAKE_OPTS && (cd $LLVMDIR/tools/$EXEC && make $GMAKE_OPTS)"

if ($doit == 1) then
    csh -f -c "$CMD"
    set pstatus = $?
else
    echo '(NOT EXECUTING) COMMAND:'
    echo "  $CMD"
endif


#=========================================================
# CODE TO BE EXECUTED IF INTERRUPT IS RECEIVED
#=========================================================
cleanup:
    exit($pstatus)
