#!/bin/bash
#
# Where is the documentation of this lib??? (erics)
#

#---------------------------------------------------------------------
#-item cross_install_menu
##
## This menu function is called only if the CROSS_INSTALL is turned on,
## it provides the user with a choice of the default INSTALL_ROOT (see
## invoke_cross_environment() for default location) or fill in his/her
## desired INSTALL_ROOT location.
##
## sorcery menu function
#---------------------------------------------------------------------
function cross_install_menu() {

  debug "libcrossinstall" "cross_install_menu is being built now..."

  while

    D_HELP="Select the default install root (/opt/cross-install/\$HOST)."
    C_HELP="Fill in your own preferred install root location."

    COMMAND=`eval $DIALOG '  --title "Cross Install Menu"                     \
                             --item-help                                      \
                             --ok-label      "Select"                         \
                             --cancel-label  "Exit"                           \
                             --menu                                           \
                             ""                                               \
                             0 0 0                                            \
                             "D"  "Default install root location"  "$D_HELP"  \
                             "C"  "Set install root location"      "$C_HELP"'`

  do

    case $COMMAND in
      D)  modify_local_config "INSTALL_ROOT" "/opt/cross-install/${HOST}"  &&
          msg_set_install_root  ;;
      C)  set_install_root_menu     ;;
    esac

  done

}


#---------------------------------------------------------------------
#-item msg_set_install_root_menu
##
## This menu function shows the user that the INSTALL_ROOT location
## has been set and then exits sorcery.
##
#---------------------------------------------------------------------
function msg_set_install_root() {

  eval $DIALOG '  --msgbox "Your install root has been set to the following \
	                          value, happy compiling:  $INSTALL_ROOT"  0 0'
	goodbye

}
		
			
#---------------------------------------------------------------------
#-item set_install_root_menu
##
## This menu function allows the user to fill in an INSTALL_ROOT location.
##
#---------------------------------------------------------------------
function set_install_root_menu() {

  PROMPT="Please enter the install root location where you want to compile."

  debug "libcrossinstall" "set_install_root_menu - is starting..."
	
  if  INSTALL_ROOT=`eval $DIALOG '  --ok-label  "Commit"         \
                                    --inputbox                   \
                                    "$PROMPT"                    \
                                    0 0  "$INSTALL_ROOT"'`

  then

    modify_local_config  "INSTALL_ROOT"  "$INSTALL_ROOT"  &&
    msg_set_install_root

  fi

}


invoke_cross_environment() 
{

	if  [[ $CROSS_INSTALL == on ]]; then

           # Set directory options.

            INSTALL_ROOT=${INSTALL_ROOT:-/opt/cross-install/${HOST}}

          DEPENDS_CONFIG=${INSTALL_ROOT}/etc/sorcery/local/depends
          LOCAL_EXCLUDED=${INSTALL_ROOT}/etc/sorcery/local/excluded
  SM_CONFIG_OPTION_CACHE=${INSTALL_ROOT}/etc/sorcery/local/config_option_cache

            ACTIVITY_LOG=${INSTALL_ROOT}/var/log/sorcery/activity
            SECURITY_LOG=${INSTALL_ROOT}/var/log/sorcery/security
            INSTALL_LOGS=${INSTALL_ROOT}/var/log/sorcery/install
            COMPILE_LOGS=${INSTALL_ROOT}/var/log/sorcery/compile
             MD5SUM_LOGS=${INSTALL_ROOT}/var/log/sorcery/md5sum
           INSTALL_QUEUE=${INSTALL_ROOT}/var/log/sorcery/queue/install
            REMOVE_QUEUE=${INSTALL_ROOT}/var/log/sorcery/queue/remove

          DEPENDS_STATUS=${INSTALL_ROOT}/var/state/sorcery/depends
   DEPENDS_STATUS_BACKUP=${INSTALL_ROOT}/var/state/sorcery/depends.backup
            SPELL_STATUS=${INSTALL_ROOT}/var/state/sorcery/packages
     SPELL_STATUS_BACKUP=${INSTALL_ROOT}/var/state/sorcery/packages.backup
            TRIGGER_LIST=${INSTALL_ROOT}/var/state/sorcery/triggers
             MENU_STATUS=${INSTALL_ROOT}/var/state/sorcery/menus
      MENU_STATUS_BACKUP=${INSTALL_ROOT}/var/state/sorcery/menus.backup

           INSTALL_CACHE=${INSTALL_ROOT}/var/cache/sorcery

         BUILD_DIRECTORY=${INSTALL_ROOT}/usr/src
      DOCUMENT_DIRECTORY=${INSTALL_ROOT}/usr/share/doc

  	debug "libcrossinstall" "Install root is ${INSTALL_ROOT}"

  	# Set environment for cross-compilation.
       PATH=${PATH}:/opt/cross-build/bin
         CC=${HOST}-gcc
  	BUILDCC=gcc

  	export PATH CC BUILDCC

		# check if sorcery needs to be installed.
		if  [  !  -d  ${INSTALL_ROOT}/etc/sorcery  ]; then
			cross_install_sorcery 
		fi
	fi
}

#
# Will install sorcery in cross-install directories, by copying from
# the existing sorcery install on the machine using this function.
#
cross_install_sorcery()
{
	
	message -n "${MESSAGE_COLOR}Setting up Sorcery for cross-install environment."
	message -n "${DEFAULT_COLOR}"
	
	mkdir -p ${INSTALL_ROOT}/etc/init.d/runlevels/{%DEV,%1,%2,%3,%4,%5,%S}
	mkdir -p ${INSTALL_ROOT}/etc/{sorcery,sysconfig/network}
	mkdir -p ${INSTALL_ROOT}/{boot,home,root,dev,lib,bin,sbin,mnt,proc}
	mkdir -p -m 1777 ${INSTALL_ROOT}/tmp
	mkdir -p ${INSTALL_ROOT}/var/state/sorcery
	mkdir -p ${INSTALL_ROOT}/var/cache/sorcery
	mkdir -p ${INSTALL_ROOT}/usr/{src,sbin,bin,lib}
	mkdir -p ${INSTALL_ROOT}/usr/share/info
        ln -sf ./share/info ${INSTALL_ROOT}/usr/info
	mkdir -p ${INSTALL_ROOT}/usr/share/man/{man1,man2,man3,man4,man5,man6,man7,man8}
        ln -sf ./share/man ${INSTALL_ROOT}/usr/man
  mkdir -p ${INSTALL_ROOT}/var/lock
  mkdir -p ${INSTALL_ROOT}/var/run
	mkdir -p ${INSTALL_ROOT}/var/log/sorcery/compile/
	mkdir -p ${INSTALL_ROOT}/var/log/sorcery/install/
	mkdir -p ${INSTALL_ROOT}/var/log/sorcery/md5sum/
	mkdir -p ${INSTALL_ROOT}/var/log/sorcery/queue/
	mkdir -p ${INSTALL_ROOT}/var/lib/sorcery/codex/
	mkdir -p ${INSTALL_ROOT}/var/spool/{mail,sorcery}
	mkdir -p -m 1777 ${INSTALL_ROOT}/var/tmp
	cp -ruv /etc/sorcery/{accounts,config,groups,mirrors,version,cabal,dialogrc,licenses,uid,compile_config,gid,update} ${INSTALL_ROOT}/etc/sorcery
        mkdir -p ${INSTALL_ROOT}/etc/sorcery/local/depends
        cp -f /etc/sorcery/local/depends/README ${INSTALL_ROOT}/etc/sorcery/local/depends
        cp /etc/sysconfig/init ${INSTALL_ROOT}/etc/sysconfig
        touch ${INSTALL_ROOT}/var/state/sorcery/{depends,packages,triggers}
        cp -ruv /var/lib/sorcery/{archspecs,excluded,protected,subroutines,build,modules,solo,sustained} ${INSTALL_ROOT}/var/lib/sorcery/         
        cp -p /usr/sbin/{cast,dispel,gaze,invoke,scribbler,scribe,sorcery,summon,vcast,xsorcery} ${INSTALL_ROOT}/usr/sbin
        cp -p /usr/share/man/man8/{cast.8*,dispel.8*,invoke.8*,scribbler.8*,scribe.8*,sorcery.8*,summon.8*} ${INSTALL_ROOT}/usr/share/man/man8
        cp -p /usr/share/man/man1/gaze.1* ${INSTALL_ROOT}/usr/share/man/man1/
        cp -p /usr/share/man/man5/grimoire.5* ${INSTALL_ROOT}/usr/share/man/man5/

}
