#!/usr/bin/bash
 
function secureNeeded() {
if [ "$XDG_CURRENT_DESKTOP" = "" ]
then
  desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
  desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "use desktop $desktop"
if [ "$desktop" == "gnome" ];
      then
      return 1
fi
if [ "$desktop" == "unity" ];
      then
      return 1
fi
if [ "$desktop" == "kde" ];
      then
      return 1
fi
if [ "$desktop" == "xfce" ];
      then
      return 1
fi
   return 0
}

 DIR="$( cd "$( dirname "$0" )" && pwd )"
 
 BASE=$DIR
 FILE="layout"

 if [ -f "$DIR/bin/layout" ]; then
     BASE=$DIR
     FILE=$DIR"/bin/layout"
 else 
     if [ -f "/opt/layout/bin/layout" ]; then
          BASE="/opt/layout"
          FILE="/opt/layout/bin/layout"
     else
          echo "executable not found"
          exit 1
     fi
 fi
 
 echo "LayoutEditor installed at $BASE"
 
 if [ -d $BASE"/lib" ]; then
   # extra libraries
   export LD_LIBRARY_PATH=$BASE/lib:$LD_LIBRARY_PATH
 fi
 

 # OpenAccess
 pycell=""
 if [ -f "$DIR/bin/getsetup" ]; then
    pycell=$($DIR/bin/getsetup pycell)
    if [ "$pycell" = "default" ]; then
      pycell="/opt/synopsys";
    fi
    if [ "$pycell" = "CNI_ROOT" ]; then
      pycell=$CNI_ROOT
    fi
 fi
 OADIR=""
 if [ ! -z "$pycell" ]; then
      if [ -d "$pycell" ]; then
          PLATDIR=$(ls $pycell|grep plat*)
          echo "using pycell for platform '$PLATDIR'"
          COMP=$( echo $PLATDIR | sed -e "s/plat_linux_//g" |sed -e "s/_[0-9][0-9]//g")
          OADIR="$pycell/$PLATDIR/3rd/oa"
          #OADIR=$(ls $CNI_ROOT/$PLATDIR/3rd/oa/lib|grep linux_*)

          if [ -d "$OADIR/bin" ]; then
            if [ -d "$OADIR/data" ]; then
             if [ -d "$OADIR/lib" ]; then
                echo "OpenAccess libraries found at $OADIR"
             else
                echo "OpenAccess libraries not found at $pycell"
                $pycell=""
             fi
            else
              echo "OpenAccess libraries not found at $pycell"
              $pycell=""
            fi
          else
            echo "OpenAccess libraries not found at $pycell"
            $pycell=""
          fi
      fi
 fi
 if [ ! -z "$pycell" ]; then
   #use pycell
   CNI_ROOT="$pycell"
   if [ -z "$OA_SYSNAME" ]; then
      if [ -f "$OADIR/bin/sysname" ]; then
        SYSNAME=$($OADIR/bin/sysname)
        export OA_SYSNAME=$SYSNAME
        if [ "$SYSNAME" == "unknown" ]; then
          SYSNAME=$(ls $pycell/$PLATDIR/3rd/oa/bin|grep linux_*)
          SYSNAME=${SYSNAME%_64}
          SYSNAME=${SYSNAME%_32}
          export OA_SYSNAME=$SYSNAME
        fi
      else
        SYSNAME=$(ls $pycell/$PLATDIR/3rd/oa/bin|grep linux_*)
        SYSNAME=${SYSNAME%_64}
        SYSNAME=${SYSNAME%_32}
        export OA_SYSNAME=$SYSNAME
      fi
   fi
   echo "using sysname $OA_SYSNAME, if no correct please set OA_SYSNAME"
   if [ -z "$OA_BIT" ]; then
       machine=`uname -m`
       case $machine in
              *86_64 )
                bit=64 ;;
              *86  )
                bit=32 ;;
              * )
                bit=32 ;;
       esac
       export OA_BIT=$bit
   fi
   if [ -f "$OADIR/bin/oaGetVersion" ]; then
      OAVER=$($OADIR/bin/oaGetVersion  2> /dev/null |grep oaBase | sed 's/.*oaBase\(.*\)\..*/\1/' | sed 's/[[:blank:]]//g')
   else
      OAPLATDIR=$(ls $CNI_ROOT/$PLATDIR/3rd/oa/bin|grep linux_*)
      if [ -f "$OADIR/bin/$OAPLATDIR/opt/oaGetVersion" ]; then
        export LD_LIBRARY_PATH=$OADIR/lib/$OAPLATDIR/opt:$LD_LIBRARY_PATH
        OAVER=$($OADIR/bin/$OAPLATDIR/opt/oaGetVersion  2> /dev/null |grep oaBase | sed 's/.*oaBase\(.*\)\..*/\1/' | sed 's/[[:blank:]]//g')
      else
        echo "oaGetVersion not found"
        if [ -z "$OA_VERSION" ]; then
          echo "try OpenAccess version 22.04, if not correct set OA_VERSION"
        else
          OAVER=$OA_VERSION
        fi
      fi
   fi
   echo "use OpenAccess version $OAVER"

   if [ -f "$OADIR/bin/oaGetLibPath" ]; then
       OALIBPATH=$($BASE/oa/bin/oaGetLibPath -numBits $bit)
   else
       OAPLATDIR=$(ls $CNI_ROOT/$PLATDIR/3rd/oa/bin|grep linux_*)
       if [ -d "$OADIR/lib/$OAPLATDIR/opt" ]; then
          OALIBPATH=$OADIR/lib/$OAPLATDIR/opt
       else
          OALIBPATH="$OADIR/lib/""$OA_SYSNAME""_$bit/opt"
       fi
   fi

   echo "use OpenAccess library path $OALIBPATH"

   export CNI_PLAT_ROOT=$CNI_ROOT/$PLATDIR
   #export OA_COMPILER=$COMP

   export PATH=$CNI_PLAT_ROOT/3rd/bin:$CNI_PLAT_ROOT/bin:$CNI_ROOT/bin:$PATH
   export PYTHONHOME=$CNI_PLAT_ROOT/3rd
   export PYTHONPATH=$CNI_ROOT/pylib:$CNI_PLAT_ROOT/lib:$CNI_PLAT_ROOT/3rd/lib:$BASE/python:$PYTHONPATH
   export RUBYLIB=$BASE/ruby:$RUBYLIB

   #export CNI_LOG_DEFAULT=/var/log/OpenAccess

   export LD_LIBRARY_PATH=$OALIBPATH:$CNI_PLAT_ROOT/lib:$LDBACKUP:$LD_LIBRARY_PATH
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib64:/usr/lib32:/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu:$CNI_PLAT_ROOT/3rd/lib
   #export OA_PLUGIN_PATH=$CNI_ROOT/quickstart
   export OA_PLUGIN_PATH=$OADIR/data/plugins
   #
   #
   #ldd $DIR/layout |grep "not found" && export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu::$LD_LIBRARY_PATH
   #
   export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu:/lib:/lib32:/lib64:$LD_LIBRARY_PATH


   #echo $LD_LIBRARY_PATH


   #ldd $BASE/plugins/libpluginoa22.50.so

   #ldd $DIR/layout
   echo "start: $FILE"
   if secureNeeded
   then
        $FILE --secure --oa$OAVER "$@"
   else
        $FILE --oa$OAVER "$@"
   fi

   exit 0
 else
   #no pycell
   OADIR="$BASE/oa"
   echo "using openAccess library $OADIR"
   OAVER=""
   if [ -L "$OADIR" ]; then
     if [ -f "$OADIR/bin/oaGetVersion" ]; then
        echo "OpenAccess libraries found at $OADIR"
     else
        echo "oaGetVersion not found"
        echo "OpenAccess version cannot detected, oa may not work"
        if secureNeeded
        then
             $FILE --secure "$@"
        else
             $FILE "$@"
        fi
        exit 0
     fi

     SYSNAME=$($BASE/oa/bin/sysname)
     export OA_SYSNAME=$SYSNAME
     if [ "$SYSNAME" == "unknown" ]; then
        SYSNAME=$(ls $BASE/oa/bin|grep linux_*)
        SYSNAME=${SYSNAME%_64}
        SYSNAME=${SYSNAME%_32}
        export OA_SYSNAME=$SYSNAME
     fi

     OAVER=$($BASE/oa/bin/oaGetVersion 2> /dev/null |grep oaBase | sed 's/.*oaBase\(.*\)\..*/\1/' | sed 's/[[:blank:]]//g')
     echo "use OpenAccess version $OAVER"
     machine=`uname -m`
     case $machine in
          *86_64 )
            bit=64 ;;
          *86  )
            bit=32 ;;
          * )
            bit=32 ;;
     esac
     LIBPATH=$($BASE/oa/bin/oaGetLibPath -numBits $bit)
     export LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH

     if [ -d "$BASE/plugins/lePcell$OAVER" ]; then
         export OA_PLUGIN_PATH=$BASE/oa/data/plugins:$BASE/plugins/lePcell$OAVER
     else
         export OA_PLUGIN_PATH=$BASE/oa/data/plugins
     fi
     # start LayoutEditor with OpenAccess version $OAVER
     if secureNeeded
     then
          $FILE --secure --oa$OAVER "$@"
     else
          $FILE --oa$OAVER "$@"
     fi

   else
     echo "OpenAccess not found. Add a link to the oa binaries folder at layout/oa to use OpenAccess"
     # start LayoutEditor without OpenAccess or with  universal plugin
     if secureNeeded
     then
          $FILE --secure "$@"
     else
          $FILE "$@"
     fi

   fi
 fi

 

