# Top-level script fragment to build everything for MPW.

Set savedir "`Directory`"

#Set Echo 1

Set ThisScript "{0}"

Set objdir ":"

Set verify 0

Set BuildTarget "none"

# Parse arguments.

Loop
	Break If {#} == 0
		If "{BuildTarget}" =~ /none/
			Set BuildTarget "{1}"
		Else
			Echo Only one build target allowed, ignoring "{1}"
		End If
	Shift 1
End Loop

If "{BuildTarget}" =~ /none/
	Set BuildTarget "all"
End If

If {verify} == 1
	Echo "#" Doing "{ThisScript}" "{BuildTarget}" in "`Directory`" ... 
End If

Set ranmake 0

If "`Exists Makefile`" != ""
	Echo "Set Echo 1" >{BuildTarget}.makeout
	Make -f Makefile {BuildTarget} >>{BuildTarget}.makeout
	{BuildTarget}.makeout
	Delete {BuildTarget}.makeout
	Set ranmake 1
End If

If "`Exists Makefile.PPC`" != ""
	Echo "Set Echo 1" >{BuildTarget}.makeout.ppc
	Make -f Makefile.PPC {BuildTarget} >>{BuildTarget}.makeout.ppc
	{BuildTarget}.makeout.ppc
	Delete {BuildTarget}.makeout.ppc
	Set ranmake 1
End If

If {ranmake} == 1
	Exit
End If

# Dispatch on various pseudo-targets.

If "{BuildTarget}" =~ /all/
	Echo Started `Date`
	"{ThisScript}" all-gcc
	"{ThisScript}" all-ld
	"{ThisScript}" all-gdb
	Echo Finished `Date`
Else If "{BuildTarget}" =~ /all-libiberty/
	"{ThisScript}" do-libiberty
Else If "{BuildTarget}" =~ /all-bfd/
	"{ThisScript}" do-bfd
Else If "{BuildTarget}" =~ /all-opcodes/
	"{ThisScript}" do-opcodes
Else If "{BuildTarget}" =~ /all-byacc/
	"{ThisScript}" do-byacc
Else If "{BuildTarget}" =~ /all-flex/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-byacc
	"{ThisScript}" do-flex
Else If "{BuildTarget}" =~ /all-binutils/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-bfd
	"{ThisScript}" all-opcodes
	"{ThisScript}" all-byacc
	"{ThisScript}" all-flex
	"{ThisScript}" do-binutils
Else If "{BuildTarget}" =~ /all-gas/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-bfd
	"{ThisScript}" all-opcodes
	"{ThisScript}" do-gas
Else If "{BuildTarget}" =~ /all-gcc/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-byacc
	"{ThisScript}" all-gas
	"{ThisScript}" all-binutils
	"{ThisScript}" do-gcc
Else If "{BuildTarget}" =~ /all-gdb/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-bfd
	"{ThisScript}" all-opcodes
	"{ThisScript}" all-byacc
	"{ThisScript}" do-gdb
Else If "{BuildTarget}" =~ /all-ld/
	"{ThisScript}" all-libiberty
	"{ThisScript}" all-bfd
	"{ThisScript}" all-opcodes
	"{ThisScript}" all-byacc
	"{ThisScript}" all-flex
	"{ThisScript}" do-ld
Else If "{BuildTarget}" =~ /do-byacc/
	SetDirectory :byacc:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-flex/
	SetDirectory :flex:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-bfd/
	SetDirectory :bfd:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-libiberty/
	SetDirectory :libiberty:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-opcodes/
	SetDirectory :opcodes:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-binutils/
	SetDirectory :binutils:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-gas/
	SetDirectory :gas:
	::mpw-build stamps
	::mpw-build all
Else If "{BuildTarget}" =~ /do-gcc/
	SetDirectory :gcc:
	# Need separate step to build all the insn-... etc files.
	::mpw-build stamps-h
	::mpw-build stamps-c
	::mpw-build all
Else If "{BuildTarget}" =~ /do-gdb/
	SetDirectory :gdb:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-ld/
	SetDirectory :ld:
	::mpw-build all
Else If "{BuildTarget}" =~ /do-newlib/
	SetDirectory :newlib:
	::mpw-build all
Else If "{BuildTarget}" =~ /install/
	"{ThisScript}" install-binutils
	"{ThisScript}" install-gas
	"{ThisScript}" install-gcc
	"{ThisScript}" install-ld
	"{ThisScript}" install-gdb
Else If "{BuildTarget}" =~ /install-binutils/
	SetDirectory :binutils:
	::mpw-build install
Else If "{BuildTarget}" =~ /install-gas/
	SetDirectory :gas:
	::mpw-build install
Else If "{BuildTarget}" =~ /install-gcc/
	SetDirectory :gcc:
	::mpw-build install
Else If "{BuildTarget}" =~ /install-gdb/
	SetDirectory :gdb:
	::mpw-build install
Else If "{BuildTarget}" =~ /install-ld/
	SetDirectory :ld:
	::mpw-build install
Else If "{BuildTarget}" =~ /install-only/
	"{ThisScript}" install-only-binutils
	"{ThisScript}" install-only-gas
	"{ThisScript}" install-only-gcc
	"{ThisScript}" install-only-gdb
	"{ThisScript}" install-only-ld
Else If "{BuildTarget}" =~ /install-only-binutils/
	SetDirectory :binutils:
	::mpw-build install-only
Else If "{BuildTarget}" =~ /install-only-gas/
	SetDirectory :gas:
	::mpw-build install-only
Else If "{BuildTarget}" =~ /install-only-gcc/
	SetDirectory :gcc:
	::mpw-build install-only
Else If "{BuildTarget}" =~ /install-only-gdb/
	SetDirectory :gdb:
	::mpw-build install-only
Else If "{BuildTarget}" =~ /install-only-ld/
	SetDirectory :ld:
	::mpw-build install-only
Else
	Echo {BuildTarget} not understood, ignoring
End If

SetDirectory "{savedir}"