#!/bin/sh
# This script is intended to be run by the administrator of a UNIX system
# who desires to start the FlexLM license server at system boot time.
# A detailed description of the actions performed by this script are
# contained in the sys5_idl_lmgrd script.
#
# Usage: This script must be run in the directory that contains 
# the 'sys5_idl_lmgrd' script (<IDL_DIR>/bin/). 
#

if [ ! -f ./sys5_idl_lmgrd ] ; then
    echo "Cannot find sys5_idl_lmgrd."
    echo "Please run this script from the bin subdirectory of your IDL distribution."
    exit 1
fi

IDL_BIN_DIR=`pwd`

UNAME=`uname`
case $UNAME in

  "Darwin")

    # Check for current user root
    if ! test "`whoami`" = "root"
    then
      echo "Error: You must be "root" to install the ITT license manger service.\n\
Workaround: cd to $IDL_BIN_DIR then issue the command:\n\n\
    sudo ./lmgrd_install\n"
      exit 1
    fi

    VERS=`sw_vers -productVersion`
    case $VERS in

      # If we're running OS X 10.4 or earlier, then use the old StartupItems style launching mechanism.
      10.[0-4]*)
        if [ ! -d /Library/StartupItems ]; then
          mkdir /Library/StartupItems
        fi
        if [ ! -d /Library/StartupItems/IDL_LMGRD ]; then
          mkdir /Library/StartupItems/IDL_LMGRD
        fi
        cp sys5_idl_lmgrd /Library/StartupItems/IDL_LMGRD/IDL_LMGRD
        (
        cat <<END
{
  Description    = "IDL FlexLM License Manager";
  Provides       = ("IDL_License_Manager");
  Requires       = ("Network", "Resolver");
  OrderPreference = "Late";
  Messages        = 
  {
    start = "Starting the IDL FlexLM License Manager";
    stop = "Stopping the IDL FlexLM License Manager";
  };
}
END
        ) > /Library/StartupItems/IDL_LMGRD/StartupParameters.plist
      ;;
      #Otherwise, use the new and fancy launchd launch mechanism.
      *)

        # Remove old ITT FLEXnet license manager boot scripts
        if [ -d /Library/StartupItems/IDL_LMGRD ] ; then
          rm -Rf /Library/StartupItems/IDL_LMGRD
        fi
        
        # Unload old ITT FLEXnet license manager LaunchDaemon service
        if [ -f /Library/LaunchDaemons/com.ittvis.lmgrd.plist ] ; then
          /bin/launchctl unload -w /Library/LaunchDaemons/com.ittvis.lmgrd.plist
          rm -f /Library/LaunchDaemons/com.ittvis.lmgrd.plist
        fi
        
        # Check for instance of ITT FLEXnet license manager service still running
        if [  -f /var/tmp/lockidl_lmgrd ] ; then
          echo "Old ITT FLEXnet license manager session detected. Please reboot,\
 after running this script, to launch new license manager service."
        fi

        # Install ITT FLEXnet license manager service
        if [ ! -d /Library/LaunchDaemons ]; then
          mkdir /Library/StartupItems
        fi
        (
        cat <<END
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version='1.0'>
  <dict>
    <key>Label</key>
    <string>com.ittvis.lmgrd</string>
    <key>ProgramArguments</key>
    <array>
      <string>$IDL_BIN_DIR/lmgrd</string>
      <string>-z</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>
END
        ) > /Library/LaunchDaemons/com.ittvis.lmgrd.plist

        # Load ITT FLEXnet license manager LaunchDaemon service
        /bin/launchctl load -w /Library/LaunchDaemons/com.ittvis.lmgrd.plist
      ;;
    esac
  ;;

  "SunOS")				# Solaris
    cp sys5_idl_lmgrd /etc/init.d
    if [ -f /etc/rc3.d/S99sys5_idl_lmgrd ]; then
      rm -f /etc/rc3.d/S99sys5_idl_lmgrd
    fi
    if [ -f /etc/rc0.d/K01sys5_idl_lmgrd ]; then
      rm -f /etc/rc0.d/K01sys5_idl_lmgrd
    fi
    ln -s /etc/init.d/sys5_idl_lmgrd /etc/rc3.d/S99sys5_idl_lmgrd
    ln -s /etc/init.d/sys5_idl_lmgrd /etc/rc0.d/K01sys5_idl_lmgrd
  ;;


  "Linux")
    # determine upper level boot dir
    if [ -d /etc/init.d ]
      then
      # Ubuntu, SuSE, Mandrake
      BOOT_DIR=/etc/init.d
      else
      if [ -d /etc/rc.d/init.d ]
        then
        # RedHat
        BOOT_DIR=/etc/rc.d/init.d
        else
        echo "$APPLICATION: Installer failed to find boot directory."
      fi
    fi

    # determine directory where the boot level directories live
    if [ -d /etc/rc2.d ]
      then
      # RedHat, Debian, Ubuntu
      BOOTLEVEL_DIR=/etc
      else
      if [ -d /etc/init.d/rc2.d ]
        then
        # SuSE
        BOOTLEVEL_DIR=/etc/init.d
        else
        echo "$APPLICATION: Installer failed to find boot level directory."
      fi
    fi

    cp sys5_idl_lmgrd $BOOT_DIR
    if [ -f $BOOTLEVEL_DIR/rc2.d/S99sys5_idl_lmgrd ]; then
      rm -f $BOOTLEVEL_DIR/rc2.d/S99sys5_idl_lmgrd
    fi
    if [ -f $BOOTLEVEL_DIR/rc3.d/S99sys5_idl_lmgrd ]; then
      rm -f $BOOTLEVEL_DIR/rc3.d/S99sys5_idl_lmgrd
    fi
    if [ -f $BOOTLEVEL_DIR/rc4.d/S99sys5_idl_lmgrd ]; then
      rm -f $BOOTLEVEL_DIR/rc4.d/S99sys5_idl_lmgrd
    fi
    if [ -f $BOOTLEVEL_DIR/rc0.d/S99sys5_idl_lmgrd ]; then
      rm -f $BOOTLEVEL_DIR/rc4.d/S99sys5_idl_lmgrd
    fi
    if [ -f $BOOTLEVEL_DIR/rc0.d/K01sys5_idl_lmgrd ]; then
      rm -f /etc/rc0.d/K01sys5_idl_lmgrd
    fi
    ln -s $BOOT_DIR/sys5_idl_lmgrd $BOOTLEVEL_DIR/rc2.d/S99sys5_idl_lmgrd
    ln -s $BOOT_DIR/sys5_idl_lmgrd $BOOTLEVEL_DIR/rc3.d/S99sys5_idl_lmgrd
    ln -s $BOOT_DIR/sys5_idl_lmgrd $BOOTLEVEL_DIR/rc4.d/S99sys5_idl_lmgrd
    ln -s $BOOT_DIR/sys5_idl_lmgrd $BOOTLEVEL_DIR/rc5.d/S99sys5_idl_lmgrd
    ln -s $BOOT_DIR/sys5_idl_lmgrd $BOOTLEVEL_DIR/rc0.d/K01sys5_idl_lmgrd
    ;;

    *)
    echo "$APPLICATION: Unable to recognize system architecture."
    exit 1
  ;;

esac

