#!/usr/bin/bash

 DIR="$( cd "$( dirname "$0" )" && pwd )"

 BASE=$DIR
 FILE="layout"
 ADD=""
 if [[ "$XDG_SESSION_TYPE" == "wayland" ]]; then
   echo "Wayland is in use."
   ADD="-platform xcb"
 fi


 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
 # XFAB dir to default installation
 if [ -z "$FTK_KIT_DIR" ]; then
    export FTK_KIT_DIR=$HOME/LayoutEditor
 fi

 # OpenAccess
 pycell=""
 if [ -f "$BASE/bin/getsetup" ]; then
    pycell=$($BASE/bin/getsetup pycell 2>/dev/null)
    if [ "$pycell" = "default" ]; then
      pycell="/opt/synopsys";
    fi
    if [ "$pycell" = "CNI_ROOT" ]; then
      pycell=$CNI_ROOT
    fi
    #echo "PyCell settings: '$pycell'"
 fi
 OADIR=""
 if [ -z "$pycell" ]; then
    if [ -d "$BASE/oa" ]; then
       OADIR="$BASE/oa"
    else
        if [ -d "/opt/layout/oa" ]; then
           OADIR="/opt/layout/oa"
        else
            if [ -d "/opt/openaccess" ]; then
               OADIR="/opt/openaccess"
            else
                if [ -d "/opt/synopsys" ]; then
                   echo "OpenAccess without PyCell not found, activating PyCell"
                   pycell="/opt/synopsys";
                fi
            fi
        fi
    fi
 fi

 if [ ! -z "$pycell" ]; then
      if [ -d "$pycell" ]; then
          if [ -d "$pycell/linux64" ]; then
             PLATDIR="linux64"
          else
             PLATDIR=$(ls $pycell|grep plat*)
          fi
          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
   echo "PyCell enabled in setup"
   #use pycell
   CNI_ROOT="$pycell"
   if [ ! -d "$pycell/$PLATDIR/3rd/oa/bin/Ssysname" ]; then
        SYSNAME=$(ls $pycell/$PLATDIR/3rd/oa/bin|grep linux_*)
        SYSNAME=${SYSNAME%_64}
        SYSNAME=${SYSNAME%_32}
        export OA_SYSNAME=$SYSNAME
      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
      if [ ! -d "$pycell/$PLATDIR/3rd/oa/bin/Ssysname" ]; then
           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 not 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')
      #echo "-$OAVER-"
      if [ -z "$OAVER" ]; then
          if [ -z "$OA_VERSION" ]; then
            echo "try OpenAccess version 22.62, if not correct set OA_VERSION"
            OAVER="22.62"
          else
            OAVER=$OA_VERSION
          fi
      fi
      if [ ${#OAVER} -lt 4 ]; then
         OAVER="22.62"
      fi
   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.62, if not correct set OA_VERSION"
          OAVER="22.62"
        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

   # PyCell ships several ABIs. Versioned plugins (cnDloPcell38/311) coexist;
   # unversioned libcnDloPcell.so exists in both python-25 and python-26 — never
   # put both on the path (Synopsys also picks 25 XOR 26). Default like CNI:
   # python-26 first, then 311/38. Skip python-25. Stdlib via PYTHONHOME only.
   pycellPyLibPaths=""
   for cand in python-26 python-311 python-38; do
     d="$CNI_PLAT_ROOT/lib/$cand"
     [ -d "$d" ] || continue
     pycellPyLibPaths="${pycellPyLibPaths}${pycellPyLibPaths:+:}$d"
   done
   # Any other versioned dirs (future) except python-25
   if [ -d "$CNI_PLAT_ROOT/lib" ]; then
     for d in "$CNI_PLAT_ROOT"/lib/python-*; do
       [ -d "$d" ] || continue
       base=$(basename "$d")
       case "$base" in
         python-25|python-26|python-311|python-38) continue ;;
       esac
       pycellPyLibPaths="${pycellPyLibPaths}${pycellPyLibPaths:+:}$d"
     done
   fi
   if [ -n "$pycellPyLibPaths" ]; then
     echo "using PyCell Python paths: ${pycellPyLibPaths//:/ }"
   fi

   export PATH=$CNI_PLAT_ROOT/3rd/bin:$CNI_PLAT_ROOT/bin:$CNI_ROOT/bin:$PATH
   if [ -z "$PYTHONHOME" ]; then
        export PYTHONHOMEORIGINAL=$PYTHONHOME
   else
         unset PYTHONHOMEORIGINAL
   fi
   if [ -z "$PYTHONPATH" ]; then
        export PYTHONPATHORIGINAL=$PYTHONPATH
   else
         unset PYTHONPATHORIGINAL
   fi
   if [ -d "$CNI_PLAT_ROOT/3rd/Python" ]; then
      export PYTHONHOME=$CNI_PLAT_ROOT/3rd/Python
      _pp="$CNI_PLAT_ROOT/lib"
      [ -n "$pycellPyLibPaths" ] && _pp="$_pp:$pycellPyLibPaths"
      export PYTHONPATH=$_pp:$BASE/python${PYTHONPATH:+:$PYTHONPATH}
   else
      export PYTHONHOME=$CNI_PLAT_ROOT/3rd
      _pp="$CNI_ROOT/pylib:$CNI_PLAT_ROOT/lib:$CNI_PLAT_ROOT/3rd/lib"
      [ -n "$pycellPyLibPaths" ] && _pp="$_pp:$pycellPyLibPaths"
      export PYTHONPATH=$_pp:$BASE/python${PYTHONPATH:+:$PYTHONPATH}
   fi
   unset _pp

   #export CNI_LOG_DEFAULT=/var/log/OpenAccess

   export LD_LIBRARY_PATH=$OALIBPATH:$CNI_PLAT_ROOT/lib:$LD_LIBRARY_PATH
   # Prepend so unversioned libcnDloPcell.so resolves to python-26 first
   [ -n "$pycellPyLibPaths" ] && \
      export LD_LIBRARY_PATH=$pycellPyLibPaths:$LD_LIBRARY_PATH
   [ -d "$CNI_PLAT_ROOT/3rd/Python/lib" ] && \
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CNI_PLAT_ROOT/3rd/Python/lib

   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=$OADIR/data/plugins
   #
   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

   echo "start: $FILE"
   $FILE --oa$OAVER "$@" $ADD

   exit 0
 else
   #no pycell
   #echo "PyCell disabled"
   if [ -z "$OADIR" ]; then
        echo "OpenAccess not found."
        #Please run 'sudo ln -s /opt/layout/plugins/liboa22.62/ /opt/layout/oa' to use the shipped OpenAccess package. "
        # start LayoutEditor without OpenAccess
        $FILE "$@" $ADD
   else
        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"
             LIBPATH=$($OADIR/bin/oaGetLibPath -numBits 64)
             export LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH
             $FILE "$@" $ADD
             exit 0
          fi

          SYSNAME=$($OADIR/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=$($OADIR/bin/oaGetVersion 2> /dev/null |grep oaBase | sed 's/.*oaBase\(.*\)\..*/\1/' | sed 's/[[:blank:]]//g')
          if [ -z "$OAVER" ]; then
              OAVER=22.62
          fi
          echo "use OpenAccess version $OAVER"
          machine=`uname -m`
          case $machine in
               *86_64 )
                 bit=64 ;;
               *86  )
                 bit=32 ;;
               * )
                 bit=32 ;;
          esac
          LIBPATH=$($OADIR/bin/oaGetLibPath -numBits $bit)
          export LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH
          export OA_PLUGIN_PATH=$OADIR/data/plugins

          # start LayoutEditor with OpenAccess version $OAVER
          $FILE --oa$OAVER "$@" $ADD
       fi
   fi
 fi

 

