#!/bin/sh
#
# Copyright(c) 1998, Space Science and Engineering Center, UW-Madison
# Refer to "McIDAS Software Acquisition and Distribution Policies"
# in the file  mcidas/data/license.txt
#
#	$Id: mcinst.sh,v 1.182 2025/12/23 15:51:09 davep Exp $
#
#-------
# This is the all-in-one unpack+make+install script for McIDAS-X and
# McIDAS-XRD.
#
# It assumes you have a tar file named foo.tar.Z or foo.tar in the
# current directory, where foo is the basename of this script.
#
# For instance, if this script is called 'mcidas2009.1.sh', then it
# assumes there is a file called 'mcidas2009.1.tar.Z' or a file called
# 'mcidas2009.1.tar' in the current directory.
#
# It further assumes that when you unpack the tar file you get a
# directory with the same basename.  For instance, that you get a
# directory named 'mcidas2009.1'.
#
# This script will also install the -XRD package for McIDAS.
#

#-------
# Set space requirements
#
# space_kb_x	the number of kilobytes of disk space required to unpack
#		and build McIDAS-X
# space_kb_xrd	the number of kilobytes of disk space required to unpack
#		and build McIDAS-XRD
#-------

space_kb_x=0
space_kb_xrd=0 
space_kb_xcd=0 
case `uname -s` in
AIX)
	space_kb_x=1000000
	space_kb_xrd=400000
	;;
Darwin)
	case `uname -p` in
	x86_64|i?86)
		space_kb_x=1082220
		space_kb_xrd=422200 
		space_kb_xcd=1600 
		;;
	arm64|arm)
		space_kb_x=1087560
		space_kb_xrd=425200 
		space_kb_xcd=1600 
		;;
	powerpc)
		space_kb_x=980000
		space_kb_xrd=390000 
		;;
	esac
	;;
HP-UX)
	space_kb_x=1000000
	space_kb_xrd=410000
	;;
IRIX|IRIX64)
	space_kb_x=1000000
	space_kb_xrd=450000
       	;;
Linux)
	case `uname -p` in
	x86_64)
		space_kb_x=1032000
		space_kb_xrd=424400 
		space_kb_xcd=1600 
		;;
	i?86)
		space_kb_x=952000
		space_kb_xrd=336000 
		space_kb_xcd=336000 
		;;
	ppc*)
		space_kb_x=950000
		space_kb_xrd=335000 
		space_kb_xcd=335000 
		;;
	*)
		space_kb_x=950000
		space_kb_xrd=335000 
		space_kb_xcd=335000 
		;;
	esac
	;;
SunOS)
	case `uname -p` in
	x86_64|i?86)
		space_kb_x=860000
		space_kb_xrd=356000
		;;
	sparc)
		space_kb_x=994000
		space_kb_xrd=423000
		;;
	*)
		space_kb_x=860000
		space_kb_xrd=356000
		;;
	esac
       	;;
Interix)
	space_kb_x=441000
	space_kb_xrd=390000
	;;
CYGWIN*)
	space_kb_x=310000
	space_kb_xrd=310000
	;;
esac

#-------
# dfh() - reports large amounts of free space
#
# Some OSs with a LOT of free space will fail to report df -k correctly.
# dfh will test for GB/TB free before ever falling through to dfk.
#-------
dfh() # [name]
{
	case $# in
	0)	set .
		;;
	1)	;;
	*)	>&2 echo "$0: Usage: $0 [name]"
		return 1
		;;
	esac

	# Some platforms don't support df -h
	gbtb=0
	suff=0
	case `uname -s` in
	IRIX|IRIX64)
		gbtb=`df -h $1 |tail -1 |awk '{print $5}'`
		;;
	OSF1|Linux|CYGWIN*|Darwin|SunOS)
		gbtb=`df -h $1 |tail -1 |awk '{print $4}'`
		;;
	esac
	gb=`echo "$gbtb" |grep "G"`
	tb=`echo "$gbtb" |grep "T"`
	if [ -n "$gb" -o -n "$tb" ]; then
		suff=1
	fi
	echo $suff
}

#-------
# dfk() - reports disk free (in KB) for the filesystem of the given
# pathname (defaults to the current directory)
#
# If filesystem names are long, at least some versions of df will print
# the entry for the filesystem on two lines.  To allow for this, we
# only allow querying one pathname at a time.  Given this, once we've
# discarded the header line from the df output, all the remaining lines
# are the fields for the df report for the pathname.
#-------

dfk()	# [name]
{
	case $# in
	0)	set .
		;;
	1)	;;
	*)	>&2 echo "$0: Usage: $0 [name]"
		return 1
		;;
	esac

	case `uname -s` in
#-------
# AIX 3:
#
# $ df .
# Filesystem    Total KB    free %used   iused %iused Mounted on
# /dev/lv02      1814528  575684   68%   52247    11% /home
#
# AIX 4:
#
# $ df -k .
# Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on
# /dev/lv00         1843200    237976   88%    71008    16% /home
#-------
	AIX)
		case `uname -v` in
		3)	set X `df $1 | sed 1d`; shift
			;;
		4)	set X `df -k $1 | sed 1d`; shift
			;;
		5)	set X `df -k $1 | sed 1d`; shift
			;;
		*)	>&2 echo "$0: Unknown AIX '`uname -v`'"
			return 1
			;;
		esac
		case $# in
		7)	set X $3 $7; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

#-------
# HP-UX:
#
# $ bdf .
# Filesystem           kbytes    used   avail capacity Mounted on
# /dev/dsk/c201d6s0    891938  721113   81631    90%   /
#-------
	HP-UX)	set X `bdf $1 | sed 1d`; shift
		case $# in
		6)	set X $4 $6; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

#-------
# IRIX, IRIX64:
#
# $ df -k .
# Filesystem                 Type  kbytes     use   avail %use  Mounted on
# /dev/dsk/lv1                efs 1902054 1123917  778137  59%  /home
#
# IRIX64 is 64-bit IRIX.
#-------
	IRIX|IRIX64)
		set X `df -k $1 | sed 1d`; shift
		case $# in
		7)	set X $5 $7; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

#-------
# OSF1, Linux, Cygwin, OS X:
#
# $ df -k .
# Filesystem  1024-blocks        Used       Avail Capacity  Mounted on
# /dev/rz3a         63231       33194       23713    58%    /
#-------
	OSF1|Linux|CYGWIN*|Darwin)
		set X `df -k $1 | sed 1d`; shift
		case $# in
		6)	set X $4 $6; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

#-------
# Interix:
#
# $ df -k .
# Filesystem           1k-blocks      Used Available Capacity Type  Mounted on
# //HarddiskVolume4    283586556  75529324 208057232    27%   ntfs  /dev/fs/C
#-------
	Interix)
		set X `df -k $1 | sed 1d`; shift
		case $# in
		7)	set X $4 $7; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

#-------
# SunOS 4:
#
# $ /usr/bin/df .
# Filesystem            kbytes    used   avail capacity  Mounted on
# /dev/sd3c            1836637 1564841   88133    95%    /home
#
# SunOS 5:
#
# $ df -k .
# Filesystem            kbytes    used   avail capacity  Mounted on
# /dev/dsk/c0t3d0s3  559598  126069  377579    25%    /home
#-------
	SunOS)
		case `uname -r` in
		4.*)	set X `/usr/bin/df $1 | sed 1d`; shift
			;;
		5.*)	set X `df -k $1 | sed 1d`; shift
			;;
		*)	>&2 echo "$0: Unknown SunOS '`uname -r`'"
			return 1
			;;
		esac
		case $# in
		6)	set X $4 $6; shift
			;;
		*)	>&2 echo "$0: ERROR: Unexpected df output"
			return 1
			;;
		esac
		;;

	*)	echo "$0: Unknown OS '`uname -s`'"
		return 1
		;;
	esac

	echo $@	# kbfree mountpoint
}

#-------
# checkspace() - exits if the amount of space available is less than the
# given number of kilobytes.
#-------

checkspace()	# KBneeded
{
	need_kb="$1"

	case $need_kb in
	0|'')	return
		;;
	esac

	set `dfh .`
	have_gb="$1"
	if	[ "$have_gb" -ne 1 ]
	then
		set `dfk .`
		have_kb="$1"
		if	[ "$have_kb" -lt "$need_kb" ]
		then	echo "$0: ERROR: Need $need_kb KB of disk space free"
			echo "$0:        Have $have_kb KB"
			echo "$0:  NOTE: Use -s to disable free space checking"
			exit 1
		fi
	fi
}

#-------
# make sure we are on the right platform
#-------
                                                                                
case `uname -s` in
	Windows_NT) echo "This install script is for Unix platforms and Mac OS X only."
		exit 1
		;;

#	Interix) echo "This install script is for Unix platforms and Mac OS X only."
#		exit 1
#		;;

	*)
		;;
esac

#-------
# set the umask so that the tar file will unpack the way it should
#-------

umask 022

#-------
# clean the environment before we try to find mysql
#-------

unset MySQL_CHECK
unset MySQL_ROOT
unset MySQL_LIB
unset MySQL_INC

#-------
# record the basename of the script/tarfile/package directory
#-------

base=`basename $0 .sh`

#-------
# havetar - nonempty if we have a tar file for this package
# tarcmd - the command to use to unpack the tar file
#
# They are either both empty, or both nonempty.
#-------

tarcmd=
havetar=
tarfile=$base.tar
tarzfile=$base.tar.Z

if	[ -f "$tarfile" ]
then	tarcmd="tar xf $tarfile"
	havetar=$tarfile
elif	[ -f "$tarzfile" ]
then	tarcmd="zcat < $tarzfile | tar xf -"
	havetar=$tarzfile
fi

#-------
# parse the undocumented options
#-------

#-------
# make:			default 'make' command
# do_space_check:	if nonempty, check for space required to unpack &
#			build the tar file
#-------

PATH="`pwd`/${base}/src:$PATH"
export PATH

# Force the usage of 32bit ar on Interix
if [ `uname -s` = "Interix" ]; then
	PATH=/opt/gcc.3.3/bin:$PATH
	LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
	export PATH LD_LIBRARY_PATH
fi

#-------
# Set compiler defaults
#-------

uname_s=`uname -s`

# Don't build c++ interfaces
# unless explicitly told that cxx compiler works
CXX=
export CXX
F90=
export F90

# Tcl/Tk version
MCTCLTK=8.4
export MCTCLTK

case $uname_s in
   Linux)
      gcc=true
      CC=gcc
      export CC
      FC=g77
      export FC
      CPPFLAGS=-Df2cFortran
      export CPPFLAGS
      C_COMP=gcc
      unset F_COMP
      make="make -j 1 VENDOR=-g77 STRIP=-Wl,-s DEBUG=-O"
      FOUND_GF=`which gfortran 2>/dev/null`
      if [ -n "$FOUND_GF" ]; then
        FC=gfortran
        export FC
        make="make -j 1 VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O"
        CFLAGS="-DMC_GCC $CFLAGS"
        export CFLAGS
      fi
   ;;
   CYGWIN*)
      gcc=true
      CC=gcc
      export CC
      FC=gfortran
      export FC
      CPPFLAGS=-Df2cFortran
      export CPPFLAGS
      make="make -j 1 VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O"
      C_COMP=gcc
      unset F_COMP
      CFLAGS='-DMC_FORCE_UNIX'
      CPP=/usr/bin/cpp
      CXXCPP=/usr/bin/cpp
      export CFLAGS CPP CXXCPP
   ;;
   Darwin)
      gcc=true
      CC=gcc
      export CC
      FC=gfortran
      export FC
      CPPFLAGS=-Df2cFortran
      export CPPFLAGS
      make="make VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O"
      C_COMP=gcc
      unset F_COMP
      MCTCLTK=8.5
   ;;
   HP-UX)
      make='make VENDOR=-vendor STRIP=-s DEBUG=-O'
      CC=cc
      export CC
      C_COMP=cc
      F_COMP=f77
      CFLAGS='-Aa -D_HPUX_SOURCE +e'
      export CFLAGS
      ver1=`uname -r | sed -e "s/^[A-Z]\.\([0-9]*\)\.[0-9]*$/\1/"`
      ver2=`uname -r | sed -e "s/^[A-Z]\.[0-9]*\.\([0-9]*\)$/\1/"`
      if [ "$ver1" -ge 11 ]; then
	export MCNSL=-lnsl
      fi
      if [ "$ver1" -eq 11 -a "$ver2" -ge 11 ]; then
        F_COMP=f90
      fi
      if [ "$ver1" -gt 11 ]; then
        F_COMP=f90
      fi
   ;;
   SunOS)
      case `uname -p` in
      i386)  # i.e. Solaris x86
        CC=gcc
        export CC
        FC=g77
        export FC
        make="make VENDOR=-g77 STRIP=-Wl,-s DEBUG=-O"
        C_COMP=gcc
        unset F_COMP
        ;;
      *)
	CC=gcc
	export CC
	FC=gfortran
	export FC
	make="make VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O"
	CPPFLAGS=-Df2cFortran
	export CPPFLAGS
	C_COMP=gcc
	unset F_COMP
        ;;
      esac
   ;;
   IRIX|IRIX64)
      make='make VENDOR=-vendor STRIP=-s DEBUG=-O'
      C_COMP=cc
      F_COMP=f77
      CC=cc
      export CC
      CFLAGS=-c99
      export CFLAGS
   ;;
   AIX)
      make='make VENDOR=-vendor STRIP=-s DEBUG=-O'
      C_COMP=cc
      F_COMP=f77
      CPPFLAGS=-DNDEBUG
      export CPPFLAGS
      CC=cc
      export CC
      CFLAGS=-qcpluscmt
      export CFLAGS
   ;;
   Interix)
      gcc=true
      CC=gcc
      export CC
      FC=g77
      export FC
      CPPFLAGS=-Df2cFortran
      export CPPFLAGS
      C_COMP=gcc
      unset F_COMP
      make="make"
      ;;
   *)
      make='make VENDOR=-vendor STRIP=-s DEBUG=-O'
      C_COMP=cc
      F_COMP=f77
   ;;
esac

do_space_check=true
action="link"
no_opt=
no_x11=
no_gui=
store_opts=

while [ $# -gt 0 ]
do
	store_opts="$store_opts $1"
	case $1 in
	-g)	make='make STRIP= DEBUG=-g'
		echo "$0: Building with debug"
		;;
	-s)	do_space_check=
		echo "$0: Skipping free space check"
		;;
	-v)	make='make VENDOR=-vendor STRIP=-s DEBUG=-O'
		unset CC
		unset FC
		C_COMP=cc
		F_COMP=f77
		case `uname -s` in
		HP-UX)
			CC=cc
			export CC
			ver1=`uname -r | sed -e "s/^[A-Z]\.\([0-9]*\)\.[0-9]*$/\1/"`
			ver2=`uname -r | sed -e "s/^[A-Z]\.[0-9]*\.\([0-9]*\)$/\1/"`
			if [ "$ver1" -ge 11 ]; then
				export MCNSL=-lnsl
			fi
			if [ "$ver1" -eq 11 -a "$ver2" -ge 11 ]; then
				F_COMP=f90
			fi
			if [ "$ver1" -gt 11 ]; then
				F_COMP=f90
			fi
			;;
		SunOS)
			CC=cc
			export CC
			;;
		IRIX|IRIX64)
			CC=cc
			export CC
			;;
		AIX)
			CC=cc
			export CC
			;;
		esac
		;;
	-f90)	FC=f90
		export FC
		F_COMP=f90
		;;
	-gfortran)
		CC=gcc
		export CC
		FC=gfortran
		export FC

		# ld32 on IRIX64 crashes with segmentation violation if you
		# pas the -s strip flag to the linker. Don't strip IRIX code if
		# building with gcc.
		case `uname -s` in
		IRIX|IRIX64)
			make="make VENDOR=-gfortran DEBUG=-O"
			;;
		HP-UX)
			make='make VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O'
			ver1=`uname -r | sed -e "s/^[A-Z]\.\([0-9]*\)\.[0-9]*$/\1/"`
			if [ "$ver1" -ge 11 ]; then
				export MCNSL=-lnsl
			fi
				CFLAGS='-D_HPUX_SOURCE'
			;;
		*)
			make="make VENDOR=-gfortran STRIP=-Wl,-s DEBUG=-O"
			;;
		esac
                C_COMP=gcc
		unset F_COMP
		CFLAGS="-DMC_GCC $CFLAGS"
		export CFLAGS
                echo "$0: Using GNU gcc + gfortran compilers"
		;;
        -gcc) 	CC=gcc
		export CC
		FC=g77
		export FC

		# ld32 on IRIX64 crashes with segmentation violation if you
		# pas the -s strip flag to the linker. Don't strip IRIX code if
		# building with gcc.
		case `uname -s` in
		IRIX|IRIX64)
			make="make VENDOR=-g77 DEBUG=-O"
			;;
		HP-UX)
			make='make VENDOR=-g77 STRIP=-Wl,-s DEBUG=-O'
			ver1=`uname -r | sed -e "s/^[A-Z]\.\([0-9]*\)\.[0-9]*$/\1/"`
			if [ "$ver1" -ge 11 ]; then
				export MCNSL=-lnsl
			fi
				CFLAGS='-D_HPUX_SOURCE'
			;;
		*)
			make="make VENDOR=-g77 STRIP=-Wl,-s DEBUG=-O"
			;;
		esac
                C_COMP=gcc
		unset F_COMP
		CFLAGS="-DMC_GCC $CFLAGS"
		export CFLAGS
                echo "$0: Using GNU gcc + g77 compilers"
                ;;
        -f2c) 	CC=gcc
		export CC
		FC=mcfc
		export FC

		# ld32 on IRIX64 crashes with segmentation violation if you
		# pas the -s strip flag to the linker. Don't strip IRIX code if
		# building with gcc.
		case `uname -s` in
		IRIX|IRIX64)
			make="make VENDOR=-f2c DEBUG=-O"
			;;
		HP-UX)
			make='make VENDOR=-f2c DEBUG=-O'
			ver1=`uname -r | sed -e "s/^[A-Z]\.\([0-9]*\)\.[0-9]*$/\1/"`
			if [ "$ver1" -ge 11 ]; then
				export MCNSL=-lnsl
			fi
			;;
		*)
			make="make VENDOR=-f2c STRIP=-Wl,-s DEBUG=-O"
			;;
		esac
                C_COMP=gcc
                unset F_COMP
		CFLAGS="-DMC_F2C $CFLAGS"
		export CFLAGS
                echo "$0: Using GNU gcc compiler and f2c"
                ;;
        -c)     action="copy"
                ;;
	-noopt)	no_opt=1
		;;
	-nox11)	no_x11=1
		;;
	-nogui)	no_gui=1
		;;
	-mysql*)CFLAGS="-DMySQL_INSTALLED $CFLAGS"
		export CFLAGS
		MySQL_CHECK=1
		MySQL_ROOT=`echo "$1" |awk -F= '{print $2}'`
		if [ -n "$MySQL_ROOT" ]; then
			MySQL_LIB="$MySQL_ROOT/lib/mysql"
			if [ -d $MySQL_ROOT/lib64/mysql ]; then
				MySQL_LIB="$MySQL_ROOT/lib64/mysql"
			fi
			MySQL_INC="$MySQL_ROOT/include/mysql"
			export MySQL_LIB
			export MySQL_INC
		fi
		# Necessary on Sun for runtime path to be found
		# -rpath and -R do *not* appear to work as expected!
		# convdlm needs this
		if [ `uname -s` = "SunOS" ]; then
			LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
			export LD_LIBRARY_PATH
		fi
		;;
	-tcl85)	MCTCLTK=8.5
		;;
	-*)	echo "$0: ERROR: Illegal argument: $1"
		exit 1
		;;
	*)	break
		;;
	esac

	shift
done
export C_COMP
export F_COMP

#-------
# check for action
#
# make		- unpack things as necessary, do the make
# install	- install this package (after the make completes)
# uninstall	- uninstall this package (presumably after installing
#		  it)
# unmake	- completely remove the package directory, if there's
#		  a tar file left
#-------

case $1 in
dump)
	echo "# Build environment"
	echo "CC=${CC}"
	echo "C_COMP=${C_COMP}"
	echo "CFLAGS=${CFLAGS}"
	echo "CPP=${CPP}"
	echo "CXX=${CXX}"
	echo "CXXCPP=${CXXCPP}"
	echo "FC=${FC}"
	echo "F_COMP=${F_COMP}"
	echo "MCTCLTK=${MCTCLTK}"
	exit 0
	;;
make)
	act=make
	;;
unmake)
	act=unmake
	;;
install)
	act=install
	;;
uninstall)
	act=uninstall
	;;
make-pod)
	act=make-pod
	;;
unmake-pod)
	act=unmake-pod
	;;
install-pod)
	act=install-pod
	;;
uninstall-pod)
	act=uninstall-pod
	;;
*)
	act=error
	;;
esac

#-------
# check for package
#
# x		- make/install -X package
# xrd		- make/install -XRD package
#-------

package=
srcsubdir=
case $2 in
''|x)
	package="McIDAS-X"
	srcsubdir="src"
	;;
xrd)
	package="McIDAS-XRD"
	srcsubdir="xrd/src"
	no_opt=1

	# Verify that -X has been built
	if [ ! -f "$base/src/libmcidas.a" ]; then
		echo "$0: ERROR: McIDAS-X must be built before -XRD"
		exit 1
	fi

	;;
xcd)
        package="McIDAS-XCD"
        srcsubdir="xcd/src"
        no_opt=1

        # Verify that -X has been built
        if [ ! -f "$base/src/libmcidas.a" ]; then
                echo "$0: ERROR: McIDAS-X must be built before -XCD"
                exit 1
        fi
        ;;
all)	
	package="ALL"
	;;
*)
	act=error
	;;
esac

if [ "$act" = "error" ]; then
cat <<EOF

To make, run the command

	sh ./$base.sh make [package]

To install, run the command

	sh ./$base.sh install [package]

To uninstall, run the command

	sh ./$base.sh uninstall [package]

To unmake, run the command

	sh ./$base.sh unmake [package]

Where [package] is optionally "x", "xrd", or "all"

EOF

# macOS + podman
if [ `uname -s` = "Darwin" ]; then
cat <<EOF
NOTE: For Podman support on macOS, use the commands"

	sh ./$base.sh make-pod
	sh ./$base.sh unmake-pod
	sh ./$base.sh install-pod
	sh ./$base.sh uninstall-pod

EOF
fi

	exit 0
fi

#-------
# Set 'McIDAS' to the name of the home directory of the mcidas account.
# It's empty if there is no mcidas account.
#-------

if [ `uname -s` = "Interix" ]; then
	McIDAS=`sh -c "echo ~mcidas" 2>/dev/null`
	if [ "$McIDAS" = "/" ]; then
		McIDAS=
	fi
else
	McIDAS=`sed -n "/^mcidas:/ s,.*:\([^:]*\):[^:]*$,\1,p" /etc/passwd`
	case $McIDAS in
	/*)	;;
	*)	McIDAS=`csh -f -c "echo ~mcidas" 2>/dev/null`
		;;
	esac
fi

#-------
# Set 'who' to 'mcidas' if we are installing this package in the mcidas
# account.
#
# It's empty if we are installing in any other account.
#
# Make sure we are not root while we're at it.
#-------

ID=`id`

MC_USER=`echo "$ID" |sed -e 's/(/ /g' -e 's/)/ /g' |awk '{print $2}'`
MC_GROUP=`echo "$ID" |sed -e 's/(/ /g' -e 's/)/ /g' |awk '{print $4}'`
export MC_USER
export MC_GROUP

case "$ID" in
'uid=0('*)
	echo "$0: ERROR: Cannot run as root"
	exit 1
	;;
uid=?"(mcidas)"*		|\
uid=??"(mcidas)"*		|\
uid=???"(mcidas)"*		|\
uid=????"(mcidas)"*		|\
uid=?????"(mcidas)"*		|\
uid=??????"(mcidas)"*		|\
uid=???????"(mcidas)"*		|\
uid=?"("*"+mcidas)"*		|\
uid=??"("*"+mcidas)"*		|\
uid=???"("*"+mcidas)"*		|\
uid=????"("*"+mcidas)"*		|\
uid=?????"("*"+mcidas)"*	|\
uid=??????"("*"+mcidas)"*	|\
uid=???????"("*"+mcidas)"*	)
	who=mcidas
	;;
*)	
	if [ -z "$(echo $act |grep "\-pod$")" ]; then
		echo "$0: WARNING: Using individual account instead of mcidas account"
	fi
	who=
	;;
esac

#-------
# be paranoid about possibly nuking ourselves with tar
#-------

case $0 in
*.sh)	;;
*)	echo "$0: ERROR: Script name must end in .sh to avoid conflicts"
	exit 1
	;;
esac

#-------
# set environment variables for the make
#
# McIDAS_ROOT	- where to find pre-installed stuff:
#	~mcidas		if it's installed in the mcidas acct
#	`pwd`/mcidas	if it's installed in this acct
# McINST_ROOT	- where to install this package
#	~mcidas		if it's installed in the mcidas acct
#	`pwd`/mcidas	if it's installed in this acct
# McINC_ROOT    - where to look for incremental upgrade candidates
#	~mcidas		if it's installed in the mcidas acct
#	`pwd`		if it's installed in this acct
#
# We need to check for whether the mcidas home directory exists, and
# whether we are installing in the mcidas account or somewhere else.
#-------

export McIDAS_ROOT
export McINST_ROOT
export McINC_ROOT
export MySQL_CHECK

if	[ -d "$McIDAS" ]
then	# the home directory of the mcidas account exists
	case $who in
	mcidas)	# installing in the mcidas account
		McIDAS_ROOT=$McIDAS
		McINST_ROOT=$McIDAS
		McINC_ROOT=$McIDAS
		;;
	*)	# installing in personal account
		McIDAS_ROOT=$McIDAS
		McINST_ROOT=`pwd`/mcidas
		McINC_ROOT=`pwd`
		;;
	esac
else	# the home directory of the mcidas account does NOT exist
	case $who in
	mcidas)	# installing in the mcidas account
		echo "$0: ERROR: User 'mcidas' has no home directory"
		exit 1
		;;
	*)	# installing in personal account
		# (any previously required mcidas software had
		# better also be there)
		McIDAS_ROOT=`pwd`/mcidas
		McINST_ROOT=`pwd`/mcidas
		McINC_ROOT=`pwd`
		;;
	esac
fi

#-------
# Preemptively capture all the podman-related stuff
#-------

if [ -n "$(echo $act |grep "\-pod$")" ]; then
	if [ `uname -s` != "Darwin" ]; then
		echo "$0: ERROR: Podman is only supported on macOS"
		exit 1
	fi

	# Configure
	McX_VERSION=$(basename $0 .sh |sed -e 's/^mcidas//')
	McX_CLEAN=$(echo ${McX_VERSION} |sed -e 's/\./-/g')
	ROCKY_NAME="rockylinux:9"
	IMAGE_NAME="mcidas-x-${McX_CLEAN}"
	CONTAINER_NAME="mcidas-x-${McX_CLEAN}"

	DOCKERFILE="Dockerfile.mcidas-x-${McX_CLEAN}"

	echo
	echo "Checking prerequisites..."

	printf "%-12s" "  Podman: "
	PODMAN=$(which podman |grep -v "not found")
	if [ -z "${PODMAN}" ]; then
        	echo "Not found"
        	echo "    Please visit https://podman.io install"
        	exit 1
	else
		echo "OK"
	fi

	printf "%-12s" "  Homebrew: "
        BREW=$(which brew |grep -v "not found")
        if [ -z "${BREW}" ]; then
                echo "Not found"
                echo "    Please visit https://brew.sh to install"
                exit 1
	else
		echo "OK"
        fi

	printf "%-12s" "  socat: "
	SOCAT=$(which socat |grep -v "not found")
	if [ -z "${SOCAT}" ]; then
        	echo "Not found"
                echo "    Please run \"brew install socat\" to install"
        	exit 1
	else
		echo "OK"
	fi

	# Inspect
	IMAGE_EXISTS=0
	${PODMAN} image exists ${CONTAINER_NAME}
	if [ $? -eq 0 ]; then
		IMAGE_EXISTS=1
	fi
	CONTAINER_EXISTS=0
	CONTAINER_STATUS=undefined
	${PODMAN} container exists ${CONTAINER_NAME}
	if [ $? -eq 0 ]; then
		CONTAINER_EXISTS=1
		CONTAINER_STATUS=$(${PODMAN} container inspect -f '{{.State.Status}}' ${CONTAINER_NAME})
	fi
	SOCAT_PORT=6000
	SOCAT_PID=$(ps -efw |grep socat | grep ":${SOCAT_PORT}" |awk '{print $2}')

	echo

fi

case $act
in
make-pod)

	McPOD_ROOT=${McINST_ROOT}/podman

	if [ ${IMAGE_EXISTS} -eq 1 ]; then
		echo "Warning: Image \"${IMAGE_NAME}\" already exists"
		exit 1
	fi
	if [ ! -f "mcidas${McX_VERSION}.tar.Z" -o ! -f "mcidas${McX_VERSION}.sh" ]; then
		echo "Error: Missing McIDAS-X installation file(s)"
		echo "       mcidas${McX_VERSION}.sh"
		echo "       mcidas${McX_VERSION}.tar.Z"
		exit 1
	fi

	McPOD_DISKREQUIRED=$((14*1024*1024*1024))
	McPOD_DISKBYTES=$(${PODMAN}  machine list --format json |jq -r '.[0].DiskSize')
	if [ -z "${McPOD_DISKBYTES}" -o "${McPOD_DISKBYTES}" = "null" ]; then
		echo "Error: Unable to get Podman machine disk size"
		exit 1
	elif [ ${McPOD_DISKBYTES} -lt ${McPOD_DISKREQUIRED} ]; then
		echo "Error: Podman machine disk size is too small"
		exit 1
	fi

	DOCKERFILE_BASE64="IyBEb2NrZXJmaWxlIGZvciBNY0lEQVMtWAoKIyBVc2UgUkVITCBmb3IgaW5zdGFsbApGUk9NIHJvY2t5bGludXg6OQpMQUJFTCBlZHUud2lzYy5zc2VjLm1jaWRhcy14PSJbVkVSU0lPTl0iCkFSRyBVU0VSPW1jdXNlcgoKIyBzc2hkCiNFWFBPU0UgMjIKUlVOIGRuZiAteSBpbnN0YWxsIG9wZW5zc2gtc2VydmVyIG9wZW5zc2gtY2xpZW50cwpSVU4gc3NoLWtleWdlbiAtQQpSVU4gZG5mIC15IGluc3RhbGwgeGF1dGggeHRlcm0KCiMgVXNlcnMKUlVOIHVzZXJhZGQgLXMgL2Jpbi9iYXNoIC1VIG1jaWRhcwpSVU4gcGFzc3dkIC1kIG1jaWRhcwpSVU4gbWtkaXIgLXAgL2hvbWUvbWNpZGFzClJVTiBjaG93biBtY2lkYXM6bWNpZGFzIC9ob21lL21jaWRhcwpSVU4gY2htb2QgNzU1IC9ob21lL21jaWRhcwoKUlVOIHVzZXJhZGQgLXMgL2Jpbi9iYXNoIC1VICRVU0VSClJVTiBlY2hvICIkVVNFUjokVVNFUiIgfCBjaHBhc3N3ZCAkVVNFUgpSVU4gbWtkaXIgLXAgL2hvbWUvJFVTRVIKUlVOIGNob3duICRVU0VSOiRVU0VSIC9ob21lLyRVU0VSClJVTiBjaG1vZCA3NTUgL2hvbWUvJFVTRVIKClJVTiBsbiAtcyAvaG9tZSAvVXNlcnMKCiMgRGVwZW5kZW5jaWVzClJVTiBkbmYgLXkgaW5zdGFsbCBnY2MgZ2ZvcnRyYW4gZ2NjLWMrKyBrZXJuZWwtZGV2ZWwgbmN1cnNlcy1kZXZlbApSVU4gZG5mIC15IGluc3RhbGwgbGliWDExLWRldmVsIGxpYlhleHQtZGV2ZWwgbGliWHBtLWRldmVsIGxpYlh0LWRldmVsClJVTiBkbmYgLXkgaW5zdGFsbCBkaWZmdXRpbHMgcHJvY3BzIHdoaWNoIGF1dG9tYWtlIG1ha2UgY21ha2UgbXlzcWwKUlVOIGRuZiAtLWVuYWJsZXJlcG89Y3JiIC15IGluc3RhbGwgbGlidGlycGMtZGV2ZWwgYmlzb24gZmxleCB0ZXhpbmZvIGVwZWwtcmVsZWFzZSBteXNxbC1kZXZlbAoKIyBNY0lEQVMtWApVU0VSIG1jaWRhcwpXT1JLRElSIC9ob21lL21jaWRhcwpDT1BZIC0tY2hvd249bWNpZGFzIC4vbWNpZGFzW1ZFUlNJT05dLnNoIC4KQ09QWSAtLWNob3duPW1jaWRhcyAuL21jaWRhc1tWRVJTSU9OXS50YXIuWiAuClJVTiBjaG1vZCB1K3ggLi9tY2lkYXNbVkVSU0lPTl0uc2gKUlVOIHNoIC4vbWNpZGFzW1ZFUlNJT05dLnNoIC1teXNxbCBtYWtlIGFsbApSVU4gc2ggLi9tY2lkYXNbVkVSU0lPTl0uc2ggLW15c3FsIGluc3RhbGwgYWxsCgojIFByb2ZpbGUKVVNFUiAkVVNFUgpXT1JLRElSIC9ob21lLyRVU0VSClJVTiBta2RpciAtcCAvaG9tZS8kVVNFUi9tY2lkYXMvZGF0YQpSVU4gZWNobyAiZXhwb3J0IFBBVEg9L2hvbWUvbWNpZGFzL2JpbjpcJFBBVEgiID4+IC9ob21lLyRVU0VSLy5iYXNoX3Byb2ZpbGUKUlVOIGVjaG8gImV4cG9ydCBNQ1BBVEg9L2hvbWUvJFVTRVIvbWNpZGFzL2RhdGE6L2hvbWUvbWNpZGFzL2RhdGE6L2hvbWUvbWNpZGFzL2hlbHAiID4+IC9ob21lLyRVU0VSLy5iYXNoX3Byb2ZpbGUKCiMgU3RhcnQgc3NoZCAobm90IGJ5IGRlZmF1bHQpCiNVU0VSIHJvb3QKI0NNRCBbIi91c3Ivc2Jpbi9zc2hkIiwgIi1EIiwgIi1lIl0K"

	echo "Working in directory ${McPOD_ROOT}"
	mkdir -p ${McPOD_ROOT}
	if [ ! -f ${McPOD_ROOT}/mcidas${McX_VERSION}.sh ]; then
		ln mcidas${McX_VERSION}.sh ${McPOD_ROOT}/.
	fi
	if [ ! -f ${McPOD_ROOT}/mcidas${McX_VERSION}.tar.Z ]; then
		ln mcidas${McX_VERSION}.tar.Z ${McPOD_ROOT}/.
	fi
	cd ${McPOD_ROOT}

	echo "Pulling image \"${ROCKY_NAME}\""
	${PODMAN} image pull ${ROCKY_NAME}
	if [ $? -ne 0 ]; then
		echo "Error: Unable to pull Podman image: ${ROCKY_NAME}"
		exit 1
	fi
	echo "${DOCKERFILE_BASE64}" |base64 -d >${DOCKERFILE}
	sed -i '' "s/\[VERSION\]/${McX_VERSION}/g" ${DOCKERFILE}
	echo "Building image \"${IMAGE_NAME}\""
	${PODMAN} image build --file ${DOCKERFILE} --tag ${IMAGE_NAME} --build-arg USER
	if [ $? -ne 0 ]; then
		echo "Error: Unable to build Podman image: ${IMAGE_NAME}"
		exit 1
	fi

	echo
	echo "$0: $package make-pod completed normally."
	echo

	exit 0
	;;

unmake-pod)

	McPOD_ROOT=${McINST_ROOT}/podman

	echo "Working in directory ${McPOD_ROOT}"

	if [ ${IMAGE_EXISTS} -eq 1 ]; then
		echo "Removing image \"${IMAGE_NAME}\""
		${PODMAN} image rm ${CONTAINER_NAME} >/dev/null
		if [ $? -ne 0 ]; then
			echo "Warning: Unable to rm Podman container: ${CONTAINER_NAME}"
		fi
	fi

	rm -f ${McPOD_ROOT}/Dockerfile.mcidas-x
	rm -f ${McPOD_ROOT}/mcidas${McX_VERSION}.sh
	rm -f ${McPOD_ROOT}/mcidas${McX_VERSION}.tar.Z

        echo
        echo "$0: $package unmake-pod completed normally."
        echo

	exit 0
        ;;

install-pod)

	McBIN_ROOT=${McINST_ROOT}/bin
	McDATA_ROOT=${McINST_ROOT}/data
	echo "Creating directories..."
	echo "  ${McBIN_ROOT}"
	mkdir -p ${McBIN_ROOT}
	echo "  ${McDATA_ROOT}"
	mkdir -p ${McDATA_ROOT}

	MCRC=${HOME}/.mcidasrc
	if [ ! -f ${MCRC} ]; then
cat <<EOF >${MCRC}
-f 10@480x640
-c '!@exec mccheck'
-c 'SKED SKEDFILE'
-c GUI
-font '9x15bold'
-ih 100
-oh 1000
-tcolbg0        'black'
-tcolbg96       'yellow4'
-tcolfg7        'grey80'
-tcolfg10       'green'
-tcolfg11       'cyan'
-tcolfg13       'magenta'
-tcolfg14       'yellow'
-tgeometry 85x26+300+400
-igeometry +5+5
-graphicsColors 16
-imageColors 128
-optimizeForSpeed
-manualResize
-config
EOF
	fi

	# See if a classic McX script already exists
	if [ -f ${McBIN_ROOT}/mcidas ]; then
		if [ $(wc -l ${McBIN_ROOT}/mcidas |awk '{print $1}') -gt 512 ]; then
			McX_SAVE="mcidas.$(date +%Y%m%d_%H%M%S)"
			echo
			echo "Renaming existing \"mcidas\" script to \"${McX_SAVE}\""
			mv ${McBIN_ROOT}/mcidas ${McBIN_ROOT}/${McX_SAVE}
		fi
	fi

	if [ ! -f ${McBIN_ROOT}/mcidas ]; then
cat <<EOF >${McBIN_ROOT}/mcidas
#!/bin/sh
#
# McIDAS-X Podman wrapper script
# Created by "install-pod" action

echo
echo "McIDAS-X Podman wrapper script for macOS"
echo

CONTAINER_NAME="${CONTAINER_NAME}"
IMAGE_NAME="${IMAGE_NAME}"
SOCAT_PORT=${SOCAT_PORT}

# Check our DISPLAY
if [ -z "\${DISPLAY}" ]; then
        echo "Error: DISPLAY is not set"
        exit 1
fi
if [ ! -S \${DISPLAY} ]; then
        echo "Error: DISPLAY is not a socket"
        exit 1
fi

# Get our IP
HOST_IP=\$(ifconfig |grep broadcast |\\
       	grep "inet [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* " |\\
       	awk '{print \$2}' |\\
       	head -1)

# Get container status
${PODMAN} container exists \${CONTAINER_NAME}
if [ \$? -ne 0 ]; then
        echo "Creating container \${CONTAINER_NAME}"
        ${PODMAN} container create --name=\${CONTAINER_NAME} -it -v ${MCRC}:/home/\${USER}/.mcidasrc:z -v ${McDATA_ROOT}:/home/\${USER}/mcidas/data:z \${IMAGE_NAME}
fi
CONTAINER_STATUS=\$(${PODMAN} container inspect -f '{{.State.Status}}' \${CONTAINER_NAME})
# Get status of the target container
if [ "\${CONTAINER_STATUS}" != "running" ]; then
        echo "Starting container \${CONTAINER_NAME}"
        ${PODMAN} container start \${CONTAINER_NAME}
fi

# Kill socat if it is running on another display
pgrep -q socat && pgrep -fq "socat.*\${DISPLAY}" || killall socat

# Forward host port \${SOCAT_PORT} to unix DISPLAY socket
nc -vz localhost \${SOCAT_PORT} 2>/dev/null
if [ \$? -ne 0 ]; then
        echo "Starting socat to allow DISPLAY connection"
        echo "    Host IP: \${HOST_IP}"
	echo "  Host Port: \${SOCAT_PORT}"
        ${SOCAT} TCP4-LISTEN:\${SOCAT_PORT},reuseaddr,fork,range=\${HOST_IP}/0 UNIX-CLIENT:\"\${DISPLAY}\" &
fi

# Exec mcidas
echo "Starting McIDAS-X in container \\"\${CONTAINER_NAME}\\""
MC_ARGS=\$@
${PODMAN} container exec -e DISPLAY=\${HOST_IP}:0 \${CONTAINER_NAME} bash -l -c "mcidas \${MC_ARGS}"
EOF
	chmod 755 ${McBIN_ROOT}/mcidas

	fi

	echo
	echo "Run \"${McBIN_ROOT}/mcidas\" to start McIDAS-X"

        echo
        echo "$0: $package install-pod completed normally."
        echo

	exit 0
        ;;

uninstall-pod)

	McBIN_ROOT=${McINST_ROOT}/bin

	if [ -n "${SOCAT_PID}" ]; then
		echo "Stopping socat port forwarding for X11"
		kill ${SOCAT_PID} 2>/dev/null
	fi
	echo "Removing container \"${CONTAINER_NAME}\""
	${PODMAN} container stop ${CONTAINER_NAME} >/dev/null 2>&1
	if [ $? -ne 0 ]; then
		echo "Warning: Unable to stop Podman container: ${CONTAINER_NAME}"
	fi
	${PODMAN} container rm ${CONTAINER_NAME} >/dev/null 2>&1
	if [ $? -ne 0 ]; then
		echo "Warning: Unable to rm Podman container: ${CONTAINER_NAME}"
	fi

	echo "Removing ${McBIN_ROOT}/mcidas"
	rm -f ${McBIN_ROOT}/mcidas

        echo
        echo "$0: $package uninstall-pod completed normally."
        echo

	exit 0
        ;;

esac

#-------
# Set space_kb to the appropriate value based on which package we are building
#-------

space_kb=0
if [ "$package" = "McIDAS-X" ]; then
	space_kb=$space_kb_x
elif [ "$package" = "McIDAS-XRD" ]; then
	space_kb=$space_kb_xrd
elif [ "$package" = "McIDAS-XCD" ]; then
	space_kb=$space_kb_xcd
elif [ "$package" = "ALL" ]; then
	space_kb=`expr "$space_kb_x" + "$space_kb_xrd" + "$space_kb_xcd"`
fi

if	[ -n "$do_space_check" -a $space_kb -eq 0 ]
then	echo "$0: ERROR: Unrecognized platform, did not set space_kb"
	echo "$0:        To skip this check, use the -s build option"
	exit 1
fi

#-------
# if package=ALL build each package in order
#-------
if [ "$package" = "ALL" ]
then
	if [ -n "$do_space_check" ]
	then
		checkspace "$space_kb"
	fi

	if [ "$act" = "unmake" -o "$act" = "uninstall" ]
	then
		sh $0 $store_opts xrd	&& \
		sh $0 $store_opts x
	else
		sh $0 $store_opts x	&& \
		sh $0 $store_opts xrd
	fi
	exit 0
fi

#-------
# set LD_LIBRARY_PATH if it looks like it might be needed
#-------
if [ -f /usr/local/lib/libgcc_s.so.1 ]; then
	# Do NOT do this on SunOS where we prefer /opt/csw for gcc
	if [ `uname -s` != "SunOS" ]; then
		LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
		export LD_LIBRARY_PATH
	fi
fi

#-------
# disable optimization if requested
#-------
if [ -n "$no_opt" ]; then
	make=`echo "$make" | sed -e 's/ DEBUG=-O//'`
	make="$make NOOPT=-noopt"
	echo "$0: Disabling optimizations"
fi

#-------
# notify the user of the Tcl/Tk version being used
#-------
echo "$0: Using Tcl/Tk version $MCTCLTK"

#-------
# disable X11 if requested
#-------
if [ -n "$no_x11" ]; then
	echo "$0: Building without X11 support"
fi

#-------
# disable GUI if requested
#-------
if [ -n "$no_gui" ]; then
	echo "$0: Building without GUI support"
fi

#-------
# notify the user that we will look for MySQL
#-------
if [ -n "$MySQL_CHECK" ]; then
	if [ -n "$MySQL_ROOT" ]; then
		echo "$0: Building with MySQL support from $MySQL_ROOT"
	else
		echo "$0: Building with MySQL support"
	fi
fi

#-------
# if doing a make check if compilers are present
#-------

if [ "$act" = "make" ]; then
   #check for C compiler
   if [ -n "${C_COMP}" ]; then
      type ${C_COMP} >/dev/null 2>&1
      if [ $? -ne 0 ]; then
 	 echo "$0: ERROR: ${C_COMP} compiler not found in PATH"
	 exit 1
      fi
   fi
   #check for fortran compiler
   if [ -n "${F_COMP}" ]; then
      type ${F_COMP} >/dev/null 2>&1
      if [ $? -ne 0 ]; then
 	 echo "$0: ERROR: ${F_COMP} compiler not found in PATH"
	 exit 1
      fi
   fi
   #check for X11
   if [ ! -d "/usr/X11R6" -a ! -d "/usr/lib/X11" -a ! -d "/usr/lib64/X11" -a ! -d "/opt/homebrew/lib" ]; then
      echo "$0: WARNING: could not locate X11.  Continue [y/n]?"
        read CONTYN
        case $CONTYN
        in
        y*)
                ;;
        *)      exit 1
                ;;
        esac
   fi
fi

#-------
# Check that $McINST_ROOT directories are okay, and create
# them if necessary.
#
# NOTE: The "src" directory is for backward compatibility,
# and is currently used only by the HELP command.
#-------

exit=0
dir_list="	$McINST_ROOT \
		$McINST_ROOT/bin \
		$McINST_ROOT/data \
		$McINST_ROOT/help \
		$McINST_ROOT/inc \
		$McINST_ROOT/lib \
		$McINST_ROOT/src \
		$McINST_ROOT/man \
		$McINST_ROOT/man/man3 \
		$McINST_ROOT/lib/gui \
		$McINST_ROOT/tcl"
for v in	$dir_list
do
	if	[ ! -d "$v" ]
	then	echo "$0: making directory $v"
		if	mkdir $v
		then	:
		else	echo "$0: ERROR in making directory $v"
			exit=1
		fi
	fi
done
case $exit in
1)	echo "$0: Cannot make required directories."
	exit $exit
	;;
esac

#-------
# dir - the root directory of the package distribution
#
# If it doesn't exist, try to create it using the tar file.
# If we don't have a tar file, we're stuck.
#-------

dir=$base

if	[ ! -d "$dir" ]
then
	case $havetar in
	'')	echo "$0: ERROR: Cannot find '$tarfile' or '$tarzfile'"
		exit 1
		;;
	esac

	if	[ ! -w . ]
	then	echo "$0: ERROR: No permission to write into the current directory"
		exit 1
	fi

	if [ -n "$do_space_check" ]
	then
		checkspace "$space_kb"
	fi

	echo "$0: Unpacking $havetar"

	eval $tarcmd

	if	[ ! -d "$dir" ]
	then	echo "$0: ERROR: Cannot unpack tar file!"
		exit 1
	fi

fi

# By here, we must have the directory, or we can't go on.

if	[ ! -d "$dir" ]
then	echo "$0: ERROR: Cannot find package directory!"
	exit 1
fi

#-------
# srcdir - the source directory of the package distribution
# This is where the top-level makefile lives.
#-------
srcdir="$dir/$srcsubdir"
if	[ ! -d "$srcdir" ]
then	echo "$0: ERROR: Cannot find source directory!"
	exit 1
fi

# Look for a platform-specific makefile
mf_specific=makefile.`uname -sm |sed -e 's/ /_/'`
if	[ -f "$srcdir/$mf_specific" ]
then
	if [ ! -f $srcdir/makefile.core ]
	then
		cp $srcdir/makefile $srcdir/makefile.core	
	fi
	echo "$0: using platform-specific makefile: $mf_specific"
	cp $srcdir/$mf_specific $srcdir/makefile
fi

if	[ ! -f "$srcdir/makefile" ]
then	echo "$0: ERROR: Package lacks a makefile!"
	exit 1
fi

# record current directory, just in case
pwd=`pwd`

# cd to the source directory
if	cd $srcdir
then	:
else	echo "$0: ERROR: Cannot cd to '$srcdir'"
	exit 1
fi

case $act
in
make)
	# Do the build.

	# The 'make clean' removes intermediate generated files
	# that we don't need in order to do the install.
	# This is to save space.

	if [ -n "$do_space_check" ]
	then
		checkspace "$space_kb"
	fi

	# Fix Solaris+GCC problem with HDF5
	if [ "$package" = "McIDAS-X" -a `uname -s` = "SunOS" ]; then
		SMFI="../hdf5/src/Makefile.in"
		HASH5D=`grep "^H5detect.o" ${SMFI}`
		if [ -z "$HASH5D" ]; then
			echo "" >> ${SMFI}
			echo "H5detect.o:" >> ${SMFI}
			printf "\tgcc -c H5detect.c\n" >> ${SMFI}
		fi
	fi

        # Link to the requested Tcl/Tk version
	if [ "$package" = "McIDAS-X" ]
	then
        	cd ..

		# Check for already linked Tcl/Tk versions
		if [ -L tcl -o -L tk ]; then
			TCLTARG=$(readlink tcl)
			TCLVER=$(echo ${TCLTARG} |sed -e 's/tcl//')
			TKTARG=$(readlink tk)
			TKVER=$(echo ${TKTARG} |sed -e 's/tk//')
			if [ ${TCLVER} != ${TKVER} ]; then
				echo "$0: ERROR: Tcl/Tk version mismatch (${TCLVER} vs ${TKVER})"
				exit 1
			fi
			if [ ${TCLVER} != ${MCTCLTK} -o ${TKVER} != ${MCTCLTK} ]; then
				echo "$0: ERROR: Tcl/Tk version mismatch (${TCLVER} installed)"
				exit 1
			fi
		fi

        	rm -f tcl && ln -s tcl${MCTCLTK} tcl
        	rm -f tk && ln -s tk${MCTCLTK} tk
        	cd $srcsubdir
	fi

	if [ -z "$no_x11" -a -z "$no_gui" ]; then
		if	eval $make all
		then	:
		else	echo "$0: ERROR: 'make all' failed"
			exit 1
		fi
	elif [ -n "$no_x11" ]; then
		if	eval $make all.nox
		then	:
		else	echo "$0: ERROR: 'make all.nox' failed"
			exit 1
		fi
	else
		if	eval $make all.nogui
		then	:
		else	echo "$0: ERROR: 'make all.nogui' failed"
			exit 1
		fi
	fi

	if	eval $make -n clean
	then	:
	else	echo "$0: ERROR: 'make clean' failed"
		exit 1
	fi

	# If we get to here everything is fine.

	echo
	echo "$0: $package make completed normally."
	echo
	;;

unmake)
	# Undo the build.

	if	eval $make clobber
	then	:
	else	echo "$0: ERROR: 'make clobber' failed"
		exit 1
	fi

	if	cd $pwd
	then	:
	else	echo "$0: ERROR: Cannot cd to '$pwd'"
		exit 1
	fi

	# Only remove dirs if unmaking McIDAS-X
	if [ "$package" = "McIDAS-X" ]
	then
		# Remove the Tcl/Tk links
		rm -f $dir/tcl
		rm -f $dir/tk

		case $havetar in
		?*)	if	rm -rf $dir
			then	:
			else	echo "$0: ERROR: 'rm -rf $dir' failed"
				exit 1
			fi
			;;
		*)	echo
			echo "$0: WARNING: No tar file, so not removing $dir"
			;;
		esac
	fi

	# If we get to here everything is fine.

	echo
	echo "$0: $package unmake completed normally."
	echo
	;;

install)
	# Do the install.

	if [ -z "$no_x11" -a -z "$no_gui" ]; then
		if	eval $make install.all
		then	:
		else	echo "$0: ERROR: 'make install.all' failed"
			exit 1
		fi
	elif [ -n "$no_x11" ]; then
		if	eval $make install.all.nox
		then	:
		else	echo "$0: ERROR: 'make install.all.nox' failed"
			exit 1
		fi
	else
		if	eval $make install.all.nogui
		then	:
		else	echo "$0: ERROR: 'make install.all.nogui' failed"
			exit 1
		fi
	fi

	# Install binary mcwish and required dylib for OS X compatibility
# For 2010.2: No longer use binary mcwish, but might want this back in the future
#        uname_s=`uname -s`
#        uname_m=`uname -m`
#        if [ "$package" = "McIDAS-X" -a \
#		"$uname_s" = "Darwin" -a \
#		"$uname_m" = "i386" ]; then
#
#		rm -f $McINST_ROOT/bin/libgfortran.3.dylib >/dev/null 2>&1
#		cp ./libgfortran.3.dylib \
#			$McINST_ROOT/bin/. >/dev/null 2>&1 && \
#			chmod 755 $McINST_ROOT/bin/libgfortran.3.dylib
#
#		rm -f $McINST_ROOT/bin/mcwish >/dev/null 2>&1
#		cp ./mcwish.osx \
#			$McINST_ROOT/bin/mcwish >/dev/null 2>&1 && \
#			chmod 755 $McINST_ROOT/bin/mcwish
#
#		diff ./libgfortran.3.dylib \
#			$McINST_ROOT/bin/libgfortran.3.dylib >/dev/null 2>&1
#		DIFF1=$?
#		diff ./mcwish.osx \
#			$McINST_ROOT/bin/mcwish >/dev/null 2>&1
#		DIFF2=$?
#		if [ $DIFF1 -ne 0 -o $DIFF2 -ne 0 ]; then
#			echo "$0: ERROR: Installing OS X mcwish binary failed"
#			exit 1
#		fi
#
#        else
#		rm -f ./mcwish.osx >/dev/null 2>&1
#		rm -f ./libgfortran.3.dylib >/dev/null 2>&1
#	fi

	# If we get to here everything is fine.

	echo
	echo "$0: $package install completed normally."
	echo
	;;

uninstall)
	# Do the uninstall.

	if [ -z "$no_x11" -a -z "$no_gui" ]; then
		if	eval $make uninstall.all
		then	:
		else	echo "$0: ERROR: 'make uninstall.all' failed"
			exit 1
		fi
	elif [ -n "$no_x11" ]; then
		if	eval $make uninstall.all.nox
		then	:
		else	echo "$0: ERROR: 'make uninstall.all.nox' failed"
			exit 1
		fi
	else
		if	eval $make uninstall.all.nogui
		then	:
		else	echo "$0: ERROR: 'make uninstall.all.nogui' failed"
			exit 1
		fi
	fi

	# If we get to here everything is fine.

	echo
	echo "$0: $package uninstall completed normally."
	echo
	;;

esac

exit 0
######################################################################
