# GNU Install script for MPW.

Set OldExit "{Exit}"
Set Exit 0

Set TempUserStartup "{TempFolder}"__temp__UserStartup

Echo '# UserStartup generated by GNU Install script' > "{TempUserStartup}"
Echo ''						>> "{TempUserStartup}"

# (should) Check that disk space is sufficient for installation.

# Assume that the install script is where everything else is.

Set thisdir "`Directory`"

# Copy the binaries to the desired place.

Confirm -t "Copy the binaries to somewhere else?"
Set TmpStatus {Status}
If {TmpStatus} == 0
	Set bindest "`GetFileName -d -m "Where to install the binaries?"`"
	If {Status} == 0
		If "`Exists "{thisdir}bin"`" != ""
			For afile In "{thisdir}"bin:\Option-x
				Duplicate -y "{afile}" "{bindest}"
			End For
		Else
			Echo "bin directory not found, exiting"
			Exit 1
		End If
	Else
		Echo "No destination supplied, exiting"
		Exit 1
	End If
Else If {TmpStatus} == 4
	# Use the existing directory.
	Set bindest "{thisdir}bin:"
Else
	# Cancelled from confirmation, escape altogether.
	Exit 1
End If

# Copy the libraries to the desired place.

Confirm -t "Copy the libraries to somewhere else?"
Set TmpStatus {Status}
If {TmpStatus} == 0
	Set libdest "`GetFileName -d -m "Where to install the libraries?"`"
	If {Status} == 0
		If "`Exists "{thisdir}lib:"`" != ""
			For afile In "{thisdir}"lib:\Option-x
				Duplicate -y "{afile}" "{libdest}"
			End For
		Else
			Echo "lib directory not found, exiting"
			Exit 1
		End If
	Else
		Echo "No destination supplied, exiting"
		Exit 1
	End If
Else If {TmpStatus} == 4
	# Use the existing directory.
	Set libdest "{thisdir}lib:"
Else
	# Cancelled from confirmation, escape altogether.
	Exit 1
End If


# Add the location of the binaries to the command path.

Echo -n 'Set Commands "'			>> "{TempUserStartup}"
Echo -n "{bindest}"				>> "{TempUserStartup}"
Echo    ',{Commands}"'				>> "{TempUserStartup}"
Echo ''						>> "{TempUserStartup}"

# Set up GCC exec prefix.

Set gcclibdir "{libdest}"gcc-lib:

Echo -n 'Set GCC_EXEC_PREFIX "'			>> "{TempUserStartup}"
Echo -n "{gcclibdir}"				>> "{TempUserStartup}"
Echo    '"'					>> "{TempUserStartup}"
Echo "Export GCC_EXEC_PREFIX"			>> "{TempUserStartup}"
Echo ''						>> "{TempUserStartup}"

# Set up path to libgcc.xcoff etc.

Echo -n 'Set GCCPPCLibraries "'			>> "{TempUserStartup}"
Echo -n "{libdest}"				>> "{TempUserStartup}"
Echo    '"'					>> "{TempUserStartup}"
Echo "Export GCCPPCLibraries"			>> "{TempUserStartup}"
Echo ''						>> "{TempUserStartup}"

# Display contents of UserStartup, confirm installation.

Set UserStartupName "UserStartup\Option-8GNU"

Echo "Contents of" {UserStartupName} "will be:"
Catenate "{TempUserStartup}"

Confirm "Install {UserStartupName} into the MPW folder {MPW} ?"
If {Status} == 0
	Duplicate "{TempUserStartup}" "{MPW}{UserStartupName}"
	Delete -y "{TempUserStartup}"
Else
	Echo "{UserStartupName} file not installed"
End If

# (should) Check HEXA resource, warn if low.

# (should) Check for spaces in pathnames, warn if found.

Echo "Installation was successful."
Echo ""
Echo "Be sure to review the usage notes in 'Read Me for MPW' before proceeding!"

# Restore previous settings.

Set Exit "{OldExit}"
