#!/bin/sh # p4-init-env --- guess values for P4* env variables # Author: Noah Friedman # Public domain # $Id: p4-init-env,v 1.16 2005/11/03 23:19:29 friedman Exp $ # Commentary: # Output proper p4 environment variable settings based on subnet. # These should be eval'ed by the calling shell. # Usage: eval `p4-init-env {user} {-shell} {--override|--no-override}` # # user Set P4USER to this user. # -shell Emit shell's syntax for setting variables (e.g. "-tcsh") # --override indicates that P4* variables will be redefined even if # they are already present in the environment. # --no-override Any P4* variable already inherited from the environment # will not be overridden. # Code: PATH=$PATH:/usr/ucb export PATH uid=`whoami` logname=`logname 2> /dev/null` home_basename=`echo "$HOME" | sed -e 's/.*\///'` if [ -n "$logname" ]; then user=$logname elif [ -n "$home_basename" ]; then user=$home_basename else user=${SUDO_USER-${USER-${LOGNAME-$uid}}} fi hostname=${HOSTNAME-`hostname`} hostname=`echo "$hostname" | sed -e 's/\..*//'` shell=$SHELL opt_user= overridep=f while : ; do case $# in 0) break ;; esac case $1 in --override ) overridep=t ; shift ;; --no-override ) overridep=f ; shift ;; -* ) shell=$1 ; shift ;; * ) opt_user=$1 ; shift ;; esac done defconfig=${_def_P4CONFIG-$HOME/.p4.cfg} if [ -f "$defconfig" ]; then # This can be used to determine subnet based on default route gateway SUBNET=`netstat -rn \ | sed -n -e '/^default/b p' \ -e '/^0\.0\.0\.0/b p' \ -e d \ -e :p \ -e 's/[ ][ ]*/ /g' \ -e 's/^[^ ]* //' \ -e 's/ .*//' \ -e p -e q` _vars=`set | sed -e '/^P4/!d' -e 's/=.*//'` new=`unset $_vars _vars; . "$defconfig"; set | sed -e '/^P4/!d' -e 's/^/_def_/'` eval "$new" fi # Set P4USER only if not already set, or override was specified. case $overridep:${P4USER+set}:$opt_user in t:*:?* | f::?* ) P4USER=$opt_user ;; t:*: | f:: ) P4USER=${_def_P4USER-$user} ;; esac case $overridep:${P4CLIENT+set} in t:* | f: ) P4CLIENT=${_def_P4CLIENT-$uid.$hostname} ;; esac case $overridep:${P4PORT+set} in t:* | f: ) P4PORT=${_def_P4PORT-perforce} # Append default tcp port if missing. case $P4PORT in *:* ) : ;; * ) P4PORT=$P4PORT:1666 ;; esac ;; esac # Emit the right syntax based on login shell. case $shell in *[/-]* ) shell=`echo "$shell" \ | sed -e '/\//s=^.*/==' \ -e '/^-/s/^-//'` ;; esac case $shell in csh | tcsh ) echo "setenv P4USER $P4USER;" echo "setenv P4PORT $P4PORT;" echo "setenv P4CLIENT $P4CLIENT;" ;; perl ) echo '$ENV{P4USER}="'"$P4USER"'";' echo '$ENV{P4PORT}="'"$P4PORT"'";' echo '$ENV{P4CLIENT}="'"$P4CLIENT"'";' ;; gdb ) echo "set environment P4USER $P4USER" echo "set environment P4PORT $P4PORT" echo "set environment P4CLIENT $P4CLIENT" ;; emacs | rep | sawfish | clisp | scsh | guile ) progn="progn" setenv="setenv" case $shell in scsh | guile ) progn="begin" ;; clisp | gcl ) setenv="system::setenv" ;; esac echo "($progn" echo " ($setenv \"P4USER\" \"$P4USER\")" echo " ($setenv \"P4PORT\" \"$P4PORT\")" echo " ($setenv \"P4CLIENT\" \"$P4CLIENT\"))" ;; * ) # sh, ksh, bash, zsh, es, rc; others? echo "P4USER=$P4USER;" echo "P4PORT=$P4PORT;" echo "P4CLIENT=$P4CLIENT;" case $shell in es | rc ) : ;; * ) echo "export P4USER P4PORT P4CLIENT;" ;; esac ;; esac # p4-init-env ends here