
# Setup environment for necessary for the
# makefiles, etc.

# Set this flag for integarting CML2 config with the builds.
# 
setenv USE_CML2_CONFIG 1

# How is VOB_BASE_DIR value set?
# 1. If there is an argument to the setup script execution, use that. 
# 2. Else, check if the value is already set and use that. 
# 3. Throw an error.
# @TODO : Obsolete VOB_BASE_DIR when that macro is no longer used.

if ($# >= 1) then
   setenv VOB_BASE_DIR $1
   echo Set VOB_BASE_DIR to $VOB_BASE_DIR ...
else
   if (! $?VOB_BASE_DIR) then
      echo "Error. !!!!!!!VOB_BASE_DIR is not set!!!!!!!"
   else
      echo VOB_BASE_DIR already defined as $VOB_BASE_DIR ...
   endif
endif

# Set the PV_TOP
#
setenv PV_TOP $VOB_BASE_DIR/oscl
echo Set PV_TOP to $PV_TOP ...

setenv PROJECT $PV_TOP
echo Set PROJECT to $PROJECT ...

setenv MK $VOB_BASE_DIR/tools_v2/build/make
echo Set MK to $MK ...

setenv CCASE_MAKE_COMPAT gnu
echo Set CCASE_MAKE_COMPAT to $CCASE_MAKE_COMPAT ...

if (! -f $MK/../bin/archtype) then
   echo "Error. Cannot find archtype script $MK/../bin/archtype."
endif

set arch_bin_path = `$MK/../bin/archtype`
set extern_tools_path = $VOB_BASE_DIR/extern_tools_v2/bin/$arch_bin_path
set path = (./$arch_bin_path  $extern_tools_path $path)
unset arch_bin_path
unset extern_tools_path

if ( -f ./setup.extras ) then
  echo File setup.extras found, sourcing ...
  source ./setup.extras
else
  echo File setup.extras not found, skipping ...
endif

# Rehash
#
rehash
rehash

# Finita
#
echo 
echo Environment is ready if no errors reported
echo 

# END OF SCRIPT - NO CODE BEYOND THIS POINT 
