Hello, all I am trying to use a new PDK. This PDK requests: 1) set some environments such as OPUSDIR = <Cadence_install_path> 2) link Cadence_install_path>/tools/dfII/local -> <design_kit_install>/xxxxxxx/local But the change will bother other CDS users who're using other PDK. So a Cadence install with all files linking to the Cadence install is created, except for the "local" which is linked to <design_kit_install>/xxxxxx/local The reason for the link is that the PDK provides some utility and menus there. Then I execute the PDK script which set some envs and then invoke Cadence from OPUSDIR (OPUSDIR is set to the path of created Cadence mentioned above in 2). The problem I met is like I can't use keyboard to type in many menus and windows. Most of the warning message is like: -------------------------------------------------------------- \o Warning: translation table syntax error: Unknown keysym name: osfActivate \o Warning: ... found while parsing ':<Key>osfActivate: ManagerParentActivate()' ....... \o Warning: Cannot convert string "<Key>SunCopy" to type VirtualBinding ....... -------------------------------------------------------------- I googled and found a few similar questions asked before. It is said to have something to do with "unset XKEYSYMDB". I just wonder when I need unset the env? before running the script/Cadence or what? And once the env is unset, the Cadence I guess can't find right keyboard mapping. So what will Cadence do after that? Thanks for reading through this little long story. Any comments will be appreciated much. -Andy
Hi Andy, The question is, where is XKEYSYMDB being set? Is it in a system file (eg. /etc/bashrc), or in your own dotfiles (eg. ~/.bashrc, ~/.cshrc, etc)? I've seen a few people who've had this problem, and in all cases they were setting it up themselves, it was NOT set by the system. The value of XKEYSYMDB was, in case you were wondering, completely platform-specific and entirely inappropriate for non-Solaris platforms, which was when they noticed the problem. If you are setting it yourself in your own dotfiles, the simple solution is to remove that line and logout/log back in. If you don't want to go to the extent of logging out and in again, then you could put a line in your shell startup file (~/.cshrc for csh, ~/.bashrc for bash, etc) which explicitly unsets the variable (since it will be set in your login environment, all new shells will inherit this unless you either logout or explicitly unset it). Don't worry about the tools not being able to find the keymap - this is really nothing we're doing explicitly with the tools, it's a low-level X thing. Once you unset XKEYSYMDB, you shouldn't have any more problems, but if you do, one other cause of being unable to use the mouse or keyboard are the locale environment variables - from 'man locale': LANG=locale_x LC_CTYPE="locale_x" LC_NUMERIC="locale_x" LC_TIME="locale_x" LC_COLLATE=locale_y LC_MONETARY="locale_x" LC_MESSAGES="locale_x" LC_ALL= You probably won't have too many (or any) of these set, but I've seen problems if they're set to "C". If you still experience problems after unsetting your XKEYSYMDB envar, try playing about with your locale settings. LANG=C usually causes problems, for some reason - if you have this set, try unsetting it and see if that helps. Let me know if this doesn't work... Regards, Graeme.
You pretty much should never have XKEYSYMDB set. When it is not set, the XKeysymDB file is found in the default location -- in /usr/openwin/lib/X11 on a Solaris system. In most cases you WANT to use the default XKeysymDB file because it is the correct one for the system. The only time XKEYSYMDB should be set is when you have a specific reason. Such as a long time ago before Solaris when the SunOS XKeysymDB file didn't have keys required for NetScape, so you needed to point to NetScape's XKeysymDB file when running NetScape. But this is no longer necessary for NetScape, since Solaris has a proper XKeysymDB. -Pete Zakel () "I only like two kinds of men: domestic and foreign." - Mae West
Hi, Graeme, Pete and all Thanks so much for reading my post and reply. I tried what you guys said but I was still out of luck. I should have specified the problem in more detail. Actually, as far as I try the only weird thing only happens to the libManager Window. When you opened a schematic or analog artist window, the keyboard and mouse work well. But the libManager was dumb to the input from keyboard but responsed to mouse well. I guess that it has nothing to do with the XKEYSYMDB. Any more comments? rgds -Andy
That could be due to your locale settings. Try "setenv LANG C" before starting the tools and see if that makes a difference. -Pete Zakel () "God requireth not a uniformity of religion." -Roger Williams
(Cont'd ) Hello, there I am back with some new episodes about the problem still haunting me. Still thousands of thanks to those read and replied my post. After some try and communication with PDK support staff, the potential reason to cause the problem still focuses on setting of XKEYSYMDB. As I described above, a script is executed to invoke Cadence and meanwhile introduce some menu and utility specific to the PDK. When I started up Cadence and typed getShellEnvVar("XKEYSYMDB") in the CIW window, I got the response like /syn/hercules/.../.../XKeysymDB The support staff told me that if the synopsis' XKeysymDB is sourced, the key mapping of Cadence will be messed up there. The script is executed in Bourne shell (the first line of the script is #! /bin/sh). And even if I inserted the lines unset XKEYSYMDB or XKEYSYMDB="usr/X11R6/lib/X11/XKeysymDB" export XKEYSYMDB before invoking Cadence in the script, I still got the same result by executing getShellEnvVar("XKEYSYMDB"). I guess that the var XKEYSYMDB is overrided somewhere I dont know. My login shell is tcsh and I didn't find some conflict from the system profile file. I dont know much about Unix on the system level, so I am still looking forward to any comments here. Thanks! -Andy
I also attach the script below. I had to modify the script a little for some reason. #! /bin/sh # This script is enhanced to be worked for both Solaris & Linux # It will launch data from /designPackages which can do: # # # Read "I" for environment setup for 12 different binaries that # integrate into this PDK. # Read "II" to setup your EDA binaries. # Read "III" for the upcoming change log. #----------------------------------------------------------------------------- # #----------------------------------------------------------------------------- # I. Make sure the following environment variables and # defined/installed at your site. # ----------------MUST INSTALL/setup---------------------------------------- # DPPDK - DesignPackages installation path # default is: /designPackages # OPUSDIR - Cadence 50 installation path # default is: /cad/cadence.IC50 # -----------------Optional install/setup if the following tool will be used # avanti_home_dir - Advanti Hercules tool installation path # default is: /cad/avanti/hercules # HSPICEDIR - Spice installation path # default is: /cad/hspice # LDV - 50 Verilog path # default is: /cad/cadence.LDV50 # NEOCELLDIR - NEO cell installation path # default is: /cad/cadence.neocell_500 # NASSDA_HOME - NASSDA HSIMD simulation installation path # # ASSURAHOME - ASSURA installation path # default is: /cad/cadence.assura_500 # STARRCXTHOME - starRCXT installation path # default is: /cad/avanti/star-rcxt # CCTHOME -Virtuoso Custom Router(VCR) # VCR/CCAR software installation. # default is: /cad/cadence.ICC # ACV_ROOT - Aptivia Setup # default is:/cad/cadence.VSDE33/tools/acv # DRACULAHOME - /cad/dracula #------------------------------------------------------------------------------ # II. If the above env(s) are not defined in default path, # you have two choices: #------------------------------------------------------------------------------ # 1. setenv before you invoke this script # 2. Commented the following lines and edit your # own path between the double quote. # DPPDK="" export PDKHOME # OPUSDIR="" export OPUSDIR # avanti_home_dir="" export avanti_home_dir # HSPICEDIR="" export HSPICEDIR # LDV="" export LDV # NEOCELLDIR="" export NEOCELLDIR # NASSDA_HOME="" export NASSDA_HOME # ASSURAHOME="" export ASSURAHOME # STARRCXTHOME="" export STARRCXTHOME # CCTHOME="" export CCTHOME # ACV_ROOT="" export ACV_ROOT # DRACULAHOME="" export DRACULAHOME #-------------------------------------------------------- # #-------------------------------------------------------- # # # PDKOS=`uname | grep Linux` if [ ! "$PDKOS" ]; then PDKOS="SunOS" fi export PDKOS PDK50date="2004-09-02" # # yvonne to do it might cause license issue # if [ ! "$CDS_LIC_FILE" ]; then CDS_LIC_FILE="" export CDS_LIC_FILE fi if [ ! "$CDS_LIC_TIMEOUT" ]; then CDS_LIC_TIMEOUT=300 export CDS_LIC_TIMEOUT fi if [ "$PDKOS" = "Linux" ]; then if [ ! "$LD_ASSUME_KERNEL" ]; then LD_ASSUME_KERNEL="2.4.1" export LD_ASSUME_KERNEL fi fi AVLAST="no" #------------------------------------------------- # WARNING........WARNING......WARNING............ # Don't modify anything after this line, otherwise # you might messed up the PDK flow. #------------------------------------------------- # -------------------- # Parsing command line # -------------------- CMDNAME=`basename $0` usage () { echo "Usage: $CMDNAME [command-options]" >&2 echo " where the command-options can be:" >&2 echo " -rel Rn.n" >&2 echo " -rel Rn.nalpha " >&2 echo " -log <Redirect CDS running LOG file>" >&2 echo " -help" >&2 echo " -display host:display.screen" >&2 echo " -PDKuser da" >&2 echo " -<cadence command options>" >&2 exit 2 } # Check if there is .process file exist in # the current work directory. If not, print # message and exit. #--------------------------------------------- if [ ! -f .process ]; then echo "*PDK error* Please specify processname in .process file in current working directory" echo " -PDK Environment Group" echo "" exit 1 fi echo "" echo "" echo " echo "" if [ -f "./cds.lib" ]; then ANALIB=`cat ./cds.lib | grep '\$LIBRARY_RELEASE/\$GENERIC/setup/libraryPath/current/cds.lib'` if [ ! "$ANALIB" ]; then echo "Notification....." echo "Please add the following line in ./cds.lib file for analogLib definition " echo "" echo " INCLUDE \$LIBRARY_RELEASE/\$GENERIC/setup/libraryPath/current/cds.lib" echo "" fi fi SUFV="_50" export SUFV CURT="current" export CURT usr=`whoami` export usr PDKPROCESS=`cat ./.process | tr -d ' '` export PDKPROCESS if [ $PDKPROCESS = "generic" ]; then echo "" echo " PDK Error....." echo " The .process file cannot specify generic process" echo " please modify it and re-start" exit fi if [ "$PDKOS" = "SunOS" ]; then if [ ! "$OPENWINHOME" ]; then OPENWINHOME="/usr/openwin" export OPENWINHOME fi if [ $OPENWINHOME ] then if [ $LD_LIBRARY_PATH ] then LD_LIBRARY_PATH="$OPENWINHOME/lib:$LD_LIBRARY_PATH" else LD_LIBRARY_PATH="$OPENWINHOME/lib" fi export LD_LIBRARY_PATH fi fi #---------------------------- # Advanti tools physical path #---------------------------- HOST=`hostname` export HOST if [ "$PDKOS" = "Linux" ]; then if [ ! "$avanti_home_dir" ]; then avanti_home_dir="/cad/avanti/hercules" export avanti_home_dir fi if [ -d "${avanti_home_dir}/bin" ]; then PATH="$avanti_home_dir/bin/IA.32:$PATH" export PATH fi if [ ! "$HERCULES_HOME_DIR" ]; then HERCULES_HOME_DIR=$avanti_home_dir export HERCULES_HOME_DIR fi if [ -d "${HERCULES_HOME_DIR}/bin" ]; then PATH="$PATH:$avanti_home_dir/bin/IA.32" export PATH fi else if [ ! "$avanti_home_dir" ]; then avanti_home_dir="/cad/avanti/hercules" export avanti_home_dir fi if [ -d "${avanti_home_dir}/bin" ]; then PATH="$avanti_home_dir/bin:$PATH" export PATH fi if [ ! "$HERCULES_HOME_DIR" ]; then HERCULES_HOME_DIR=$avanti_home_dir export HERCULES_HOME_DIR fi if [ -d "${HERCULES_HOME_DIR}/bin" ]; then PATH="$PATH:$avanti_home_dir/bin" export PATH fi fi PDKAVANTI="yes" if [ ! -d "${avanti_home_dir}" ]; then PDKAVANTI="no" fi export PDKAVANTI # yvonne if [ "$PDKOS" = "Linux" ]; then if [ ! "$STARRCXTHOME" ]; then STARRCXTHOME="/cad/avanti/star-rcxt" PATH=$STARRCXTHOME/IA.32_star-rcxt/bin:$PATH export STARRCXTHOME fi else if [ ! "$STARRCXTHOME" ]; then STARRCXTHOME="/cad/avanti/star-rcxt" PATH=$STARRCXTHOME/SUN.64_star-rcxt/bin:$PATH export STARRCXTHOME fi fi #-------------------------- # Aptivia Setup #-------------------------- if [ ! "$ACV_ROOT" ] ; then ACV_ROOT="/cad/cadence.VSDE33/tools/acv" export ACV_ROOT fi if [ -d "${ACV_ROOT}/bin" ] ; then PATH="$ACV_ROOT/bin:$PATH" export PATH fi #---------------------------- # hspice path #---------------------------- if [ ! "$HSPICEDIR" ]; then HSPICEDIR="/cad/hspice" export HSPICEDIR fi #---------------------------- # Cadence tools physical path #---------------------------- if [ "$PDKOS" = "Linux" ]; then if [ ! "$OPUSDIR" ]; then OPUSDIR="/cad/cadence.IC50" export OPUSDIR echo "" echo "" fi else if [ ! "$OPUSDIR" ]; then OPUSDIR="/cad/cadence.IC50" export OPUSDIR echo "" echo "" fi fi if [ "$PDKOS" = "Linux" ]; then PDKtmp=`ls -al $OPUSDIR/tools | grep 'tools\.lnx'` if [ ! "$PDKtmp" ]; then echo "" echo "***Cadence Installation Error:" echo " The cadence IC50 tool installation path...." echo " $OPUSDIR/tools NOT Linux version" echo "" echo " correct Cadence Linux installation" echo " - PDK Environment Group" echo "" exit fi else PDKtmp=`ls -al $OPUSDIR/tools | grep 'tools\.sun'` if [ ! "$PDKtmp" ]; then echo "" echo "***Cadence Installation Error:" echo " The cadence IC50 tool installation path...." echo " $OPUSDIR/tools NOT Solaris version" echo "" echo "" exit fi fi if [ $PDKOS = "Linux" ]; then PDKtmp=`ls -al $OPUSDIR/tools/dfII/local | grep '\.lnx'` if [ ! "$PDKtmp" ]; then echo "***PDK50 Installtion error:" echo " The cadence IC50 tool installation path...." echo " $OPUSDIR/tools/dfII/local " echo " IS NOT LINKED to PDK50 Linux Version" echo "" echo "" exit fi fi #---------------------------- # Verilog Path #--------------------------- if [ ! "$LDV" ]; then LDV="/cad/cadence.LDV51" export LDV fi if [ -d "${LDV}/tools/bin" ]; then PATH="$LDV/tools/bin:$LDV/tools/verilog/bin:$PATH" export PATH fi CDS_INST_DIR="$OPUSDIR" export CDS_INST_DIR CDSHOME="$CDS_INST_DIR" export CDSHOME CDS_SITE="$OPUSDIR/tools/dfII/local" export CDS_SITE LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${CDS_INST_DIR}/tools/lib" export LD_LIBRARY_PATH CDS_Netlisting_Mode="Analog" export CDS_Netlisting_Mode tblquote () { echo "========================================================================" } # # Set PDK Default Settings # please do not touch after this line # It is for whole architecture of PDK tools #----------------------------------------------------- : ${PDKUSER:="designer"} : ${LIBRARYAREA:="release"} : ${SKILLAREA:="release"} : ${RELEASEID:="release"} # initial arglist is null CDSARGS= if [ "$PDKOS" = "Linux" ]; then if [ -f $HOME/.cdsinit50.lnx ] ; then echo "" echo "PDK50 Copy .cdsinit50.lnx to .cdsinit in your home directory" /bin/cp $HOME/.cdsinit50.lnx $HOME/.cdsinit fi if [ -f $HOME/.cdsenv50.lnx ] ; then echo "PDK50 Copy .cdsenv50.lnx to .cdsenv in your home directory" echo "" /bin/cp $HOME/.cdsenv50.lnx $HOME/.cdsenv fi else if [ -f $HOME/.cdsinit50 ] ; then echo "" echo "PDK50 Copy .cdsinit50 to .cdsinit in your home directory" /usr/bin/cp $HOME/.cdsinit50 $HOME/.cdsinit fi if [ -f $HOME/.cdsenv50 ] ; then echo "PDK50 Copy .cdsenv50 to .cdsenv in your home directory" echo "" /usr/bin/cp $HOME/.cdsenv50 $HOME/.cdsenv fi fi # #add for project management directory # if [ "$PDKOS" = "Linux" ]; then if [ -f ./.cdsinit50.lnx ] ; then if [ ! -f ./.cdsinit ] ; then echo "PDK50 Copy .cdsinit50.lnx to .cdsinit in your current working directory" /bin/cp ./.cdsinit50.lnx ./.cdsinit chmod 777 ./.cdsinit fi fi if [ -f ./.cdsenv50.lnx ] ; then if [ ! -f ./.cdsenv.lnx ] ; then echo "PDK50: Copy .cdsenv50 to .cdsenv in your current working directory" /bin/cp ./.cdsenv50.lnx ./.cdsenv chmod 777 ./.cdsenv fi fi else if [ -f ./.cdsinit50 ] ; then if [ ! -f ./.cdsinit ] ; then echo "PDK50 Copy .cdsinit50 to .cdsinit in your current working directory" /usr/bin/cp ./.cdsinit50 ./.cdsinit chmod 777 ./.cdsinit fi fi if [ -f ./.cdsenv50 ] ; then if [ ! -f ./.cdsenv ] ; then echo "PDK50: Copy .cdsenv50 to .cdsenv in your current working directory" /usr/bin/cp ./.cdsenv50 ./.cdsenv chmod 777 ./.cdsenv fi fi fi #CDS_AUTO_64BIT="ALL" #export CDS_AUTO_64BIT NOVS="t" export NOVS ########################### # cshrc setup ######################## # Default executable is icfb. EXECUTABLE=icfb export EXECUTABLE # Parse command line args. while [ $# -gt 0 ]; do case $1 in -help | -h) usage ;; -display | -dis | -d) # Set the environment display variable so # that all sub-clients can be started on # the correct display. if [ $# -lt 2 ]; then echo "${CMDNAME}: $1 option requires a display name" exit 2 fi shift DISPLAY="$1" export DISPLAY ;; -nodefkeys) # Set the environment variable for no default # bindkeys to be loaded. NODEFKEYS=1 export NODEFKEYS ;; -exec | -e) # Set a user defined OPUS executable if [ $# -lt 2 ]; then echo "${CMDNAME}: $1 option requires an executable file name" exit 2 fi shift EXECUTABLE="$1" ;; -PDKuser) # Set PDK User if [ $# -lt 2 ]; then echo "${CMDNAME}: $1 option requires one argument" exit 2 fi if [ $2 = "designer" ] || [ $2 = "da" ] || [ $2 = "PDKmd" ] ; then echo " WARNING.........." echo " PDK developers is no longer using this script. This script will invoke " echo " /designPackages data. Please invoke the script at:" echo " /cad/bin/PDK50dev" exit else echo "${CMDNAME}: \"$2\" is not a valid value for \"$1\"." echo " Valid values are \"designer\" and \"da\"." exit 2 fi shift ;; -novs) NOVS="t" export NOVS ;; -vs) NOVS="" export NOVS ;; -avlast) AVLAST="yes" export AVLAST ;; -toolcheck) PDKTOOLCHECK="t" export PDKTOOLCHECK ;; -release | -rel) # Set the area for skill (test or release) if [ $PDKUSER = "da" ]; then echo "${CMDNAME}: -release option not available" exit 2 fi # # no /cad/PDK50/.../release number any more * # RELEASEID="release_$2" LIBRARYAREA="release_$2" SKILLAREA="release_$2" CURT="$2" export CURT shift ;; *) CDSARGS="$CDSARGS $1" ;; esac shift done DEV="public" export DEV if [ "$PDKOS" = "Linux" ]; then GENERIC="generic.lnx" else GENERIC="generic" fi export GENERIC # # LIBRARY_RELEASE /cad/PDK50/public/generic_50/release # if [ ! "$DPPDK" ]; then DPPDK="/designPackages" export DPPDK fi if [ ! "$PDKHOME" ]; then PDKHOME="$DPPDK/$PDKPROCESS/$CURT/tools/PDK" export PDKHOME fi if [ ! "$LIBRARY_RELEASE" ]; then if [ "$PDKOS" = "Linux" ]; then LIBRARY_RELEASE="$PDKHOME/public/generic_50.lnx/release" PDKSKILLDIR="$PDKHOME/public/generic_50.lnx/release/$GENERIC/skill" else LIBRARY_RELEASE="$PDKHOME/public/$GENERIC$SUFV/release" PDKSKILLDIR="$PDKHOME/public/$GENERIC$SUFV/release/$GENERIC/skill" fi fi if [ ! "$PROCESS_RELEASE" ]; then PROCESS_RELEASE="$PDKHOME/public/$PDKPROCESS$SUFV/release" fi export PDKHOME export RELEASEID export PDKUSER export SKILLAREA export PDKSKILLDIR export LIBRARYAREA export LIBRARY_RELEASE export PROCESS_RELEASE export EXECUTABLE #----------------------------------- # neocell required # todo NEOHOME need to final define #----------------------------------- if [ ! "$LM_LICENSE_FILE" ]; then LM_LICENSE_FILE="" export LM_LICENSE_FILE fi if [ "$PDKOS" = "Linux" ]; then if [ ! "$NEOCELLDIR" ]; then ##NEOCELLDIR="/cad/cadence.neocell_500" NEOCELLDIR="/cad/cadence.NEOCELL34" export NEOCELLDIR NEOCELLARCH="$NEOCELLDIR/tools/NeoCell/bin" NEOHOME="$NEOCELLDIR/tools/NeoCell/bin" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$NEOCELLDIR/tools/NeoCell/lib.linux" export LD_LIBRARY_PATH export NEOCELLARCH export NEOHOME fi else if [ ! "$NEOCELLDIR" ]; then NEOCELLDIR="/cad/cadence.neocell_500" export NEOCELLDIR NEOCELLARCH="$NEOCELLDIR/tools/NeoCell/bin" NEOHOME="$NEOCELLDIR/tools/NeoCell/bin" export NEOCELLARCH export NEOHOME fi fi if [ "$PDKOS" = "Linux" ]; then if [ ! "$CCTHOME" ]; then CCTHOME="/cad/cadence.ICC11133/tools.lnx86/iccraft/bin" export CCTHOME fi else if [ ! "$CCTHOME" ]; then CCTHOME="/cad/cadence.ICC/tools/iccraft/bin" export CCTHOME fi fi if [ -d "$CCTHOME" ]; then PATH="$CCTHOME:$PATH" export PATH fi PDKNEOCELL="no" NEOHOME="$NEOCELLDIR/tools/NeoCell" if [ -d "${NEOHOME}/bin" ]; then PDKNEOCELL="yes" # Yvonne Lin This change valid after 06/30/2004 # if [ ! "$XPATH" ]; then # XPATH="$OPENWINHOME/bin:$OPENWINHOME/demo" # PATH=$XPATH:$PATH # fi # SHELL="/bin/csh" # VALIDDIR="$CDS_INST_DIR/tools" PATH="${NEOHOME}/bin:$PATH" # NEOTEMP="./tmp" # export NEOTEMP export NEOHOME export PATH # export XPATH # export VALIDDIR fi export PDKNEOCELL # # HSIM integration setup # if [ ! "$NASSDA_HOME" ]; then NASSDA_HOME="/cad/hsim" fi if [ -d "${NASSDA_HOME}/bin" ]; then PDKHSIM="yes" NASSDA_ARTISTIF="${LIBRARY_RELEASE}/$GENERIC/hsimGUI/current" PATH=$NASSDA_HOME/bin:$PATH export PATH export NASSDA_HOME export NASSDA_ARTISTIF fi export PDKHSIM export NASSDA_HOME if [ "$PDKOS" = "Linux" ]; then if [ ! "$ASSURAHOME" ]; then ASSURAHOME="/cad/cadence.assura_500" fi else if [ ! "$ASSURAHOME" ]; then ASSURAHOME="/cad/cadence.assura_500" fi fi if [ -d "$PROCESS_RELEASE/$PDKPROCESS/techfiles/ASSURA" ]; then if [ -d "${ASSURAHOME}/tools/assura/bin" ]; then PATH=$ASSURAHOME/tools/assura/bin:$PATH export PATH export ASSURAHOME fi fi if [ -d "$PROCESS_RELEASE/$PDKPROCESS/dracula" ]; then if [ ! "$DRACULAHOME" ]; then DRACULAHOME="/cad/dracula" fi PATH=$DRACULAHOME/bin:$PATH export PATH export DRACULAHOME fi if [ $PDKTOOLCHECK ]; then echo ""; echo "-----------------------------Invocation PDK50 script: $PDK50date" #----Cadence---------- echo ""; echo ""; tblquote if [ "$OPUSDIR" ]; then if [ -d "${OPUSDIR}/tools/dfII/bin" ]; then wkdir=`pwd`; cd $OPUSDIR; tmpdir=`pwd` _vv=`echo $tmpdir | grep "5033"` if [ ! "$_vv" ]; then echo "**PDK50 Error ** Cadence path (\$OPUSDIR):$OPUSDIR is not OPUS 5.0" else echo "--PDK50 INFO -- Cadence path (\$OPUSDIR):$OPUSDIR OK" fi; cd $wkdir else echo "**PDK50 Error ** Cadence path (\$OPUSDIR):$OPUSDIR is not a valid OPUS 5.0 directory" fi fi #----ASSURA------------- if [ "$ASSURAHOME" ]; then if [ -d "${ASSURAHOME}/tools/dfII/bin" ]; then wkdir=`pwd`; cd $ASSURAHOME; tmpdir=`pwd` _vv=`echo $tmpdir | grep "500"` if [ ! "$_vv" ]; then echo "**PDK50 Error ** Assura path (\$ASSURAHOME):$ASSURAHOME incompatible in OPUS 5.0" else echo "--PDK50 INFO -- Assura path (\$ASSURAHOME):$ASSURAHOME OK" fi; cd $wkdir else echo "**PDK50 Error ** Assura path (\$ASSURAHOME):$ASSURAHOME is NOT installed" fi fi #----aptivia------------- if [ "$ACV_ROOT" ]; then if [ -d "${ACV_ROOT}/bin" ]; then wkdir=`pwd`; cd $ACV_ROOT; tmpdir=`pwd` _vv=`echo $tmpdir | grep "33"` if [ ! "$_vv" ]; then echo "**PDK50 Error ** Aptivia path (\$ACV_ROOT):$ACV_ROOT incompatible in OPUS 5.0" else echo "--PDK50 INFO -- Aptivia path (\$ACV_ROOT):$ACV_ROOT OK" fi; cd $wkdir else echo "**PDK50 Error ** Aptivia path (\$ACV_ROOT):$ACV_ROOT is NOT installed" fi fi #----Hercules---------- if [ "$avanti_home_dir" ]; then if [ -d "${avanti_home_dir}/bin" ]; then wkdir=`pwd`; cd $avanti_home_dir; tmpdir=`pwd` _vv=`echo $tmpdir | grep "2003"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** Hercules path (\$avanti_home_dir):$avanti_home_dir is out-of-date" else echo "--PDK50 INFO -- Hercules path (\$avanti_home_dir):$avanti_home_dir OK" fi; cd $wkdir else echo "**PDK50 WARNING** Hercules path (\$avanti_home_dir):$avanti_home_dir is NOT installed" fi fi #----HSIM---------- if [ "$NASSDA_HOME" ]; then if [ -d "${NASSDA_HOME}/bin" ]; then wkdir=`pwd`; cd $NASSDA_HOME; tmpdir=`pwd` _vv=`echo $tmpdir | grep "3.0"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** Hsim path (\$NASSDA_HOME):$NASSDA_HOME is out-of-date" else echo "--PDK50 INFO -- Hsim path (\$NASSDA_HOME):$NASSDA_HOME OK" fi; cd $wkdir else echo "**PDK50 WARNING** Hsim path (\$NASSDA_HOME):$NASSDA_HOME is NOT installed" fi fi #----HSIM---------- if [ "$HSPICEDIR" ]; then if [ -d "${HSPICEDIR}/bin" ]; then wkdir=`pwd`; cd $HSPICEDIR; tmpdir=`pwd` _vv=`echo $tmpdir | grep "2002"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** hspice path (\$HSPICEDIR):$HSPICEDIR is out-of-date" else echo "--PDK50 INFO -- hspice path (\$HSPICEDIR):$HSPICEDIR OK" fi; cd $wkdir else echo "**PDK50 WARNING** hspice path (\$HSPICEDIR):$HSPICEDIR is NOT installed" fi fi #----verilog---------- if [ "$LDV" ]; then if [ -d "${LDV}/tools/bin" ]; then wkdir=`pwd`; cd $LDV; tmpdir=`pwd` _vv=`echo $tmpdir | grep "LDV5"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** Verilog path (\$LDV):$LDV is out-of-date" else echo "--PDK50 INFO -- Verilog path (\$LDV):$LDV OK" fi; cd $wkdir else echo "**PDK50 WARNING** Verilog path (\$LDV):$LDV is NOT installed" fi fi #----NEOCELL---------- if [ "$NEOCELLDIR" ]; then if [ -d "${NEOCELLDIR}/tools/NeoCell/bin" ]; then wkdir=`pwd`; cd $NEOCELLDIR; tmpdir=`pwd` _vv=`echo $tmpdir | grep "335"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** neocell path (\$NEOCELLDIR):$NEOCELLDIR is out-of-date" else echo "--PDK50 INFO -- neocell path (\$NEOCELLDIR):$NEOCELLDIR OK" fi; cd $wkdir else echo "**PDK50 WARNING** neocell path (\$NEOCELLDIR):$NEOCELLDIR is NOT installed" fi fi #----VCR---------- if [ "$CCTHOME" ]; then if [ -d "$CCTHOME" ]; then wkdir=`pwd`; cd $CCTHOME; tmpdir=`pwd` _vv=`echo $tmpdir | grep "ICC111"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** VCR Custom Router path (\$CCTHOME):$CCTHOME is out-of-date" else echo "--PDK50 INFO -- VCR Custom Router path (\$CCTHOME):$CCTHOME OK" fi; cd $wkdir else echo "**PDK50 WARNING** VCR Custom Router path (\$CCTHOME):$CCTHOME is NOT installed" fi fi #----STARRCXT---------- if [ "$STARRCXTHOME" ]; then if [ -d "${STARRCXTHOME}/SUN.64_star-rcxt/bin" ]; then wkdir=`pwd`; cd $STARRCXTHOME; tmpdir=`pwd` _vv=`echo $tmpdir | grep "2003"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** starrcxt path (\$STARRCXTHOME):$STARRCXTHOME is out-of-date" else echo "--PDK50 INFO -- starrcxt path (\$STARRCXTHOME):$STARRCXTHOME OK" fi; cd $wkdir else echo "**PDK50 WARNING** starrcxt path (\$STARRCXTHOME):$STARRCXTHOME is NOT installed" fi fi #----dracula---------- if [ "$DRACULAHOME" ]; then if [ -d "${DRACULAHOME}/bin" ]; then wkdir=`pwd`; cd $DRACULAHOME; tmpdir=`pwd` _vv=`echo $tmpdir | grep "4.8"` if [ ! "$_vv" ]; then echo "**PDK50 WARNING** Dracula path (\$DRACULAHOME):$DRACULAHOME is out-of-date" else echo "--PDK50 INFO -- Dracula path (\$DRACULAHOME):$DRACULAHOME OK" fi; cd $wkdir else echo "**PDK50 WARNING** Dracula path (\$DRACULAHOME):$DRACULAHOME is NOT installed" fi fi tblquote exit 3 fi # # After setup the PDK wrapper, invoke cadence tool # if [ ! -f "${OPUSDIR}/tools/dfII/bin/${EXECUTABLE}" ] then echo "PDK50 error* Cannot find Cadence executable path :" echo " ${OPUSDIR}/tools/dfII/bin/${EXECUTABLE}." exit 3 fi VSPATH=$OPUSDIR/tools/bin export VSPATH # CDS_AUTO_CKIN="all" export CDS_AUTO_CKIN # # pm set up # PDK442PMPATH="" if [ -f ./.project ]; then PROJECTDIR=`pwd` PDK442PMPATH=${PROJECTDIR}/work_${usr} if [ "$AVLAST" = "no" ]; then if [ -f $PDK442PMPATH/.assuraLastRun ]; then mv $PDK442PMPATH/.assuraLastRun $PDK442PMPATH/.assuraLastRun.PDKbk chmod 775 $PDK442PMPATH/.assuraLastRun.PDKbk fi if [ -f $PDK442PMPATH/.drc.Last.state ]; then mv $PDK442PMPATH/.drc.Last.state $PDK442PMPATH/.drc.Last.state.PDKbk chmod 775 $PDK442PMPATH/.drc.Last.state.PDKbk fi if [ -f $PDK442PMPATH/.lvs.Last.state ]; then mv $PDK442PMPATH/.lvs.Last.state $PDK442PMPATH/.lvs.Last.state.PDKbk chmod 775 $PDK442PMPATH/.lvs.Last.state.PDKbk fi if [ -f $PDK442PMPATH/.rcx.Last.state ]; then mv $PDK442PMPATH/.rcx.Last.state $PDK442PMPATH/.rcx.Last.state.PDKbk chmod 775 $PDK442PMPATH/.rcx.Last.state.PDKbk fi fi else if [ "$AVLAST" = "no" ]; then if [ -f ./.assuraLastRun ]; then mv ./.assuraLastRun ./.assuraLastRun.PDKbk chmod 775 ./.assuraLastRun.PDKbk fi if [ -f ./.drc.Last.state ]; then mv ./.drc.Last.state ./.drc.Last.state.PDKbk chmod 775 ./.drc.Last.state.PDKbk fi if [ -f ./.lvs.Last.state ]; then mv ./.lvs.Last.state ./.lvs.Last.state.PDKbk chmod 775 ./.lvs.Last.state.PDKbk fi if [ -f ./.rcx.Last.state ]; then mv ./.rcx.Last.state ./.rcx.Last.state.PDKbk chmod 775 ./.rcx.Last.state.PDKbk fi fi fi export PDK442PMPATH # # /designPackages/$PDKPROCESS/$CURT/tools/PDK/public/$PDKPROCESS$SUFV # /designPackages/$PDKPROCESS/$CURT/tools/PDK/public/$GENERIC # PDK50Install="ok" if [ ! -d $PROCESS_RELEASE ]; then echo "" echo " **PDK50 Install Error** No <$PDKPROCESS> PDK50 Design Data in " echo " --> $PROCESS_RELEASE" PDK50Install="no" fi if [ ! -d $LIBRARY_RELEASE ]; then echo "" echo " **PDK50 Install Error** No PDK50 generic release in" echo " --> $LIBRARY_RELEASE" PDK50Install="no" fi if [ $CURT = "release" ]; then releaseID=`/usr/ucb/ls -al $PDKHOME | awk '{print $10}'` else releaseID=$CURT fi if [ $CURT = "current" ]; then if [ "$PDKOS" = "Linux" ]; then releaseID=`/bin/ls -al $DPPDK/$PDKPROCESS/current | awk '{print $11}'` else releaseID=`/usr/ucb/ls -al $DPPDK/$PDKPROCESS/current | awk '{print $10}'` fi fi if [ $PDK50Install != "ok" ]; then echo " ---------------------------------------------------------------------------" echo "" echo " - PDK Environment Group" echo "" exit else echo "" echo " PDK50 : Invoke $PDKPROCESS $releaseID" echo " PDK50 Data :$PDKHOME/public" fi if [ -d "/usr/openwin/bin" ]; then PATH="$PATH:/usr/openwin/bin" export PATH fi if [ -d "/usr/bin" ]; then PATH="$PATH:/usr/bin" export PATH fi if [ -d "/usr/ucb" ]; then PATH="$PATH:/usr/ucb" export PATH fi PATH=$OPUSDIR/tools/dfII/bin:$OPUSDIR/tools/bin:$PATH if [ -d "${HSPICEDIR}/bin" ]; then PATH="$HSPICEDIR/bin:$PATH" export PATH fi if [ ! "$CLS_CDSD_COMPATIBILITY_LOCKING" ] ; then CLS_CDSD_COMPATIBILITY_LOCKING="NO" export CLS_CDSD_COMPATIBILITY_LOCKING fi echo "" echo "" echo " You are running......OS type: $PDKOS" echo "" # # Add the CDS.log file for each user at ~projectDir/work_<userName> # requested by Fort Collin if [ "$YDEBUG" ]; then echo "" echo ".....LIBRARY_RELEASE......$LIBRARY_RELEASE" echo ".....PROCESS .............$PROCESS_RELEASE" echo ".....OPUS.........$OPUSDIR" echo ".....PDKSKILLDIR..$PDKSKILLDIR" echo ".....PDKOS........$PDKOS" echo ".....GENERIC......$GENERIC" fi if [ "$PDKSITE" = "fc" ] ; then if [ ! "$CDS_LOG_VERSION" ] ; then CDS_LOG_VERSION=sequential export CDS_LOG_VERSION fi if [ ! "$CLS_CDSD_COMPATIBILITY_LOCKING" ] ; then CLS_CDSD_COMPATIBILITY_LOCKING="NO" export CLS_CDSD_COMPATIBILITY_LOCKING fi if [ "$PDK442PMPATH" != "" ] ; then if [ ! "$CDS_LOG_PATH" ] ; then CDS_LOG_PATH=$PDK442PMPATH export CDS_LOG_PATH fi else if [ ! "$CDS_LOG_PATH" ] ; then CDS_LOG_PATH="." export CDS_LOG_PATH fi fi FCLOGFILE="CDS.log.$3`date '+20%y%m%d%H%M%S'`" export FCLOGFILE $EXECUTABLE $CDSARGS -log "${CDS_LOG_PATH}/${FCLOGFILE}" else $EXECUTABLE $CDSARGS fi exit 0
Hi Andy, This is strange... so in the script you posted, you have unset XKEYSYMDB before calling the exe and it's still set?: unset XKEYSYMDB # <---------------******* if [ "$PDKSITE" = "fc" ] ; then if [ ! "$CDS_LOG_VERSION" ] ; then CDS_LOG_VERSION=sequential export CDS_LOG_VERSION fi if [ ! "$CLS_CDSD_COMPATIBILITY_LOCKING" ] ; then CLS_CDSD_COMPATIBILITY_LOCKING="NO" export CLS_CDSD_COMPATIBILITY_LOCKING fi if [ "$PDK442PMPATH" != "" ] ; then if [ ! "$CDS_LOG_PATH" ] ; then CDS_LOG_PATH=$PDK442PMPATH export CDS_LOG_PATH fi else if [ ! "$CDS_LOG_PATH" ] ; then CDS_LOG_PATH="." export CDS_LOG_PATH fi fi FCLOGFILE="CDS.log.$3`date '+20%y%m%d%H%M%S'`" export FCLOGFILE $EXECUTABLE $CDSARGS -log "${CDS_LOG_PATH}/${FCLOGFILE}" else $EXECUTABLE $CDSARGS fi If you start a new shell, is XKEYSYMDB set by default? If it is, you probably need to figure out where this is being set. If you are on Linux (I couldn't see any mention of the OS you're using, but this issue usually crops up on Linux), then try doing 'Ctrl-Alt-F1' to go to a virtual terminal and login. See if XKEYSYMDB is set after you login. If so, you probably need to trace what you are sourcing in your ~/.tcshrc (assuming tcsh is your default shell and you're not starting it manually after the default shell is invoked). (Press 'Ctrl-Alt-F7' to get back to your X session!). Do any other users have XKEYXYMDB set when they login, or is it set when they start a Cadence product? The manpage for tcsh indicates a number of files which you may want to look into: ------------------------ FILES /etc/csh.cshrc Read first by every shell. ConvexOS, Stellix and Intel use /etc/cshrc and NeXTs use /etc/cshrc.std. A/UX, AMIX, Cray and IRIX have no equivalent in csh(1), but read this file in tcsh anyway. Solaris 2.x does not have it either, but tcsh reads /etc/.cshrc. (+) /etc/csh.login Read by login shells after /etc/csh.cshrc. ConvexOS, Stellix and Intel use /etc/login, NeXTs use /etc/login.std, Solaris 2.x uses /etc/.login and A/UX, AMIX, Cray and IRIX use /etc/cshrc. ~/.tcshrc (+) Read by every shell after /etc/csh.cshrc or its equiva- lent. ~/.cshrc Read by every shell, if ~/.tcshrc doesn't exist, after /etc/csh.cshrc or its equivalent. This manual uses `~/.tcshrc' to mean `~/.tcshrc or, if ~/.tcshrc is not found, ~/.cshrc'. ~/.history Read by login shells after ~/.tcshrc if savehist is set, but see also histfile. ~/.login Read by login shells after ~/.tcshrc or ~/.history. The shell may be compiled to read ~/.login before instead of after ~/.tcshrc and ~/.history; see the ver- sion shell variable. ~/.cshdirs (+) Read by login shells after ~/.login if savedirs is set, but see also dirsfile. /etc/csh.logout Read by login shells at logout. ConvexOS, Stellix and Intel use /etc/logout and NeXTs use /etc/logout.std. A/UX, AMIX, Cray and IRIX have no equivalent in csh(1), but read this file in tcsh anyway. Solaris 2.x does not have it either, but tcsh reads /etc/.logout. (+) ~/.logout Read by login shells at logout after /etc/csh.logout or its equivalent. ------------------------ Have you asked the support staff if they know where it's being set? Are you sourcing any Synopsis setup scripts anywhere in your tcsh config files? Failing that, you may want to just try a grep Something like this may do it: grep XKEYSYMDB .[a-zA-Z0-9]* grep XKEYSYMDB /etc/* Of course, if you're sourcing something which sets this, the greps above won't find it - you'll have to manually inspect each file your shell initialization sources to see if it is setting XKEYSYMDB (or loading another file which does). Regards, Graeme.
That's probably because it should be "unsetenv XKEYSYMDB" not "unset XKEYSYMDB". unset is the csh command to unset a shell variable. unsetenv is the csh command to unset an environment variable. Andrew.
Just to illustrate this: andrewb_15> setenv FRED hello andrewb_16> unset FRED andrewb_17> echo $FRED hello andrewb_18> unsetenv FRED andrewb_19> echo $FRED FRED: Undefined variable
Andrew, the script looks like beeing written in sh (use of export, syntax of if, ...) , and for sh unset remove the environment variable. Yours,
Jean-Marc, You're quite right. I don't think I've had enough coffee this morning (actually I've not had _any_ coffee) and so I missed the fact that it was a Bourne shell script. Silly me. Andrew.
Andrew, Bunyan I tried according to what you said. But still out of luck there. As I told you before, I found that the var XKEYSYMDB was set to the path below "/syn/hercules/lib/X11/XKeysymDB" which might mess up the Cadence key mapping. However I found that actually there's no such a directory "/lib" under "/syn/hercules" in our Unix system, which might be a one expected by the PDK. Since the PDK requests that environment var "avanti_home_dir" be set to the path of installation directory of avanti Hercules (which is /syn/hercules in our case). I took a try to change it to a fake path like "/syn1/hercules". This did make a fool of Cadence/PDK. Right now we are free of the typing problem in the Cadence libManager and all warnings from that. When I check the setting of XKEYSYMDB in CIW window, Cadence returns me XKEYSYMDB="/usr/X11R6/lib/X11/XKeysymDB", which should be a correct response. But still a little problem there, when I open "create->new library", the menu appears without "attach to a library" option. So I will talk to our administrator to do further test on that. Thanks a lot! -Andy
Dude, that's my *last* name! If I understand this correctly, setting "avanti_home_dir" to a non-existent path causes the XKEYSYMDB to remain at the /usr/X11R6/... value above? Does your setup (eg. .cshrc or any other files you source) use avanti_home_dir anywhere, in particular, does it source any files from that directory? I'm guessing that, somewhere in /syn/hercules is the file which is setting XKEYSYMDB - try a recursive grep and see what you come up with. Regards, Graeme.
It looks like his script is actually a Bourne shell script, in which case unset is correct. (It's generally preferred to write shell scripts in Bourne; I've encountered some radically broken implementations of csh on fairly common platforms...)
Also, Bourne sh tends to be have less overhead than csh. -Pete Zakel () "Time is nature's way of making sure that everything doesn't happen at once."
Oh, Graeme I'm terribly sorry for that. I should have used "Mr. Bunyan" in my last post. As you predicted, I did find that there exist the shell files "hercules_setup.csh" and "hercules_setup.sh" under the directory "/syn/hercules". Also there's setup about the environment var of "XKEYSYMDB" in these files. But I am still confused here. I pick up all of setup involved with "avanti_home_dir" from the script and paste them as below. if [ ! "$avanti_home_dir" ]; then avanti_home_dir="/cad/avanti/hercules" export avanti_home_dir fi if [ -d "${avanti_home_dir}/bin" ]; then PATH="$avanti_home_dir/bin:$PATH" export PATH fi if [ ! "$HERCULES_HOME_DIR" ]; then HERCULES_HOME_DIR=$avanti_home_dir export HERCULES_HOME_DIR fi if [ -d "${HERCULES_HOME_DIR}/bin" ]; then PATH="$PATH:$avanti_home_dir/bin" export PATH fi ....... ACEAVANTI="yes" if [ ! -d "${avanti_home_dir}" ]; then ACEAVANTI="no" fi export ACEAVANTI ....... if [ "$avanti_home_dir" ]; then if [ -d "${avanti_home_dir}/bin" ]; then wkdir=`pwd`; cd $avanti_home_dir; tmpdir=`pwd` _vv=`echo $tmpdir | grep "2003"` if [ ! "$_vv" ]; then echo "**ACE50 WARNING** Hercules path (\$avanti_home_dir):$avanti_home_dir is out-of-date" else echo "--ACE50 INFO -- Hercules path (\$avanti_home_dir):$avanti_home_dir OK" fi; cd $wkdir else echo "**ACE50 WARNING** Hercules path (\$avanti_home_dir):$avanti_home_dir is NOT installed" fi fi Actually I didn't see the script source the hercules' setup anywhere. I guess that the script never touched the hercules' setup files at all. In our Unix system, the file "XKeysymDB" is located under "/syn/hercules/lib-u/X11" whereas the script actually set the var "XKEYSYMDB" to "/syn/hercules/lib/X11" after manually setting "avanti_home_dir" to "/syn/hercules". It means somewhere there exists some setting like this: XKEYSYMDB=$avanti_home_dir/lib/X11/XKeysymDB ( However we dont have the directory "/lib" there.) The script essentially setup some environment vars for Cadence and then invoke icfb. I just wonder why it also do some business with Hercules in the same script. Does it inform that Syn and Cad are co-operating with each other? Thanks! -Andy
Have you tried "trace"ing the binary and flagging every OS file system access. It is tedious, but you can track down where it gets set! -- G
Hi, G I really like to try what you said. But I don't know much about how to do in Unix world. Could you give me further hints on that? Thanks a lot! -Andy
Unfortunately, environment variable read/writes do not involve system calls (the entire environment is held in userspace). strace, truss, etc., won't see the write.