#!/bin/sh # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2004 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" # # This script sets up the environment variables for a SunOS # codemgr workspace and spawns a shell with the environment # setup. # # The following Environment variables are set: # CODEMGR_WS # ONBLD_DIR # SRC # TSRC # ROOT # PARENT_ROOT # MACH # MAKEFLAGS # ENVCPPFLAGS{1-4} # ENVLDLIBS{1-3} # # The MAKEFLAGS environment variable is set to force make # to read default make variables from the environment. # # Workspace names can be specified in two forms: pathname # and hostname:pathname. If the hostname:pathname form is used # the script accesses the environment through the /net automounter # map. # # # function to produce a pathname from a workspace name or subdirectory. # The workspace name can have hostname:pathname format. # fmtwsname(){ awk -F: '$1 != $0 { print "/net/"$1$2 } \ $1 == $0 { print $0 }' } # # function to check to see if a proto area is new or old format # check_proto() { # Check for problematic parent specification and adjust proto=`echo $1|fmtwsname` # # if proto contains a /usr/include directory we assume # that this is an old style proto area # if [ -d $proto/usr/include ]; then echo $proto else echo "${proto}/root_${MACH}" fi } cleanup_env() { # keep the env. clean when returning unset setenv osbld_flag os_rev wsosdir protofile wsname ofs proto \ pwd parent PROTO1 PROTO2 PROTO3 tmpwsname return 0 } if [ "$1" = "-e" ]; then setenv=true shift else setenv=false fi if [ $# -lt 1 ]; then set -- `workspace name` [ $# -eq 1 ] && echo "Defaulting to workspace $1" fi if [ $# -lt 1 ]; then echo "usage: ws [-e] [workspace_name]" >&2 if $setenv; then cleanup_env return 1 else exit 1 fi fi # # This variable displays the nested activations of workspaces. # This is done here to get the exact name the user entered. # WS_STACK="$1 $WS_STACK"; export WS_STACK wsname=`echo $1|fmtwsname` shift # # Checking for CODEMGR_WSPATH # if [ "(" "${CODEMGR_WSPATH}x" != "x" ")" -a "(" ! -d $wsname ")" -a \ "(" `expr "$wsname" : "\/"` = "0" ")" ] then ofs=$IFS IFS=": " for i in $CODEMGR_WSPATH do if [ -d ${i}/${wsname} ]; then wsname=${i}/${wsname} break fi done IFS=$ofs fi # to translate it to an absolute pathname. We need an # absolute pathname in order to set CODEMGR_WS. # if [ `expr "$wsname" : "\/"` = "0" ] then pwd=`pwd` wsname="$pwd/$wsname" fi if [ ! -d $wsname/Codemgr_wsdata ]; then echo "Error: $wsname is not a workspace" >&2 if $setenv; then cleanup_env return 1 else exit 1 fi fi tmpwsname=`(cd $wsname >/dev/null && workspace name)` if [ -z "$tmpwsname" ]; then echo "Error: $wsname is not a workspace" >&2 if $setenv; then cleanup_env return 1 else exit 1 fi fi wsname=$tmpwsname # # Check to see if this is a valid workspace # if [ ! -d $wsname ]; then echo "$wsname . . . no such directory" >&2 if $setenv; then cleanup_env return 1 else exit 1 fi fi if [ -d ${wsname}/Codemgr_wsdata ]; then CM_DATA=Codemgr_wsdata else echo "$wsname is not a workspace" >&2 if $setenv; then cleanup_env return 1 else exit 1 fi fi CODEMGR_WS=$wsname; export CODEMGR_WS SRC=$CODEMGR_WS/usr/src; export SRC TSRC=$CODEMGR_WS/usr/ontest; export TSRC wsosdir=$CODEMGR_WS/$CM_DATA/sunos protofile=$wsosdir/protodefs if [ ! -f $protofile ]; then if [ ! -w $CODEMGR_WS/$CM_DATA ]; then # # The workspace doesn't have a protodefs file and I am # unable to create one. Tell user and use /tmp instead. # echo "Unable to create the proto defaults file ($protofile)." # Just make one in /tmp wsosdir=/tmp protofile=$wsosdir/protodefs fi if [ ! -d $wsosdir ]; then mkdir $wsosdir fi cat << PROTOFILE_EoF > $protofile #!/bin/sh # # Set default proto areas for this workspace # NOTE: This file was initially automatically generated. # # Feel free to edit this file. If this file is removed # it will be rebuilt containing default values. # # The variable CODEMGR_WS is available to this script. # # PROTO1 is the first proto area searched and is typically set # to a proto area associated with the workspace. The ROOT # environment variable is set to the same as PROTO1. If you # will be doing make installs this proto area needs to be writable. # # PROTO2 and PROTO3 are set to proto areas to search before the # search proceeds to the local machine or the proto area specified by # TERMPROTO. # # TERMPROTO (if specified) is the last place searched. If # TERMPROTO is not specified the search will end at the local # machine. # PROTO1=\$CODEMGR_WS/proto if [ -f "\$CODEMGR_WS/Codemgr_wsdata/parent" ]; then # # If this workspace has an codemgr parent then set PROTO2 to # point to the parents proto space. # parent=\`workspace parent \$CODEMGR_WS\` if [ -n \$parent ]; then PROTO2=\$parent/proto fi fi PROTOFILE_EoF fi . $protofile # This means you don't have to type make -e all of the time MAKEFLAGS=e; export MAKEFLAGS # # Set up the environment variables # MACH=`uname -p` ROOT=/proto/root_${MACH} # default ENVCPPFLAGS1= ENVCPPFLAGS2= ENVCPPFLAGS3= ENVCPPFLAGS4= ENVLDLIBS1= ENVLDLIBS2= ENVLDLIBS3= if [ "$PROTO1" != "" ]; then # first proto area specifed PROTO1=`check_proto $PROTO1` ROOT=$PROTO1 ENVCPPFLAGS1=-I$ROOT/usr/include export ENVCPPFLAGS1 ENVLDLIBS1="-L$ROOT/lib -L$ROOT/usr/lib" export ENVLDLIBS1 if [ "$PROTO2" != "" ]; then # second proto area specifed PROTO2=`check_proto $PROTO2` ENVCPPFLAGS2=-I$PROTO2/usr/include export ENVCPPFLAGS2 ENVLDLIBS2="-L$PROTO2/lib -L$PROTO2/usr/lib" export ENVLDLIBS2 if [ "$PROTO3" != "" ]; then # third proto area specifed PROTO3=`check_proto $PROTO3` ENVCPPFLAGS3=-I$PROTO3/usr/include export ENVCPPFLAGS3 ENVLDLIBS3="-L$PROTO3/lib -L$PROTO3/usr/lib" export ENVLDLIBS3 fi fi fi export ROOT if [ "$TERMPROTO" != "" ]; then # fallback area specifed TERMPROTO=`check_proto $TERMPROTO` ENVCPPFLAGS4="-Y I,$TERMPROTO/usr/include" export ENVCPPFLAGS4 ENVLDLIBS3="$ENVLDLIBS3 -Y P,$TERMPROTO/lib:$TERMPROTO/usr/lib" export ENVLDLIBS3 fi # # Now let's set those variables which are either 4.1.x specific # or 5.0 specific # os_rev=`uname -r` osbld_flag=0 if [ `expr $os_rev : "4\.1"` = "3" ]; then # This is a 4.1.x machine # # Enable all of the DOUBLECROSS_ROOT components for the 4.1.x compile # DOUBLECROSS_ROOT=${DOUBLECROSS_ROOT="/crossroot"} PATH=$DOUBLECROSS_ROOT/usr/ccs/bin:$DOUBLECROSS_ROOT/usr/bin:$DOUBLECROSS_ROOT/usr/sbin:$PATH export DOUBLECROSS_ROOT PATH elif [ `expr $os_rev : "5\."` = "2" ]; then # # Enable any 5.x specific variables here # if [ ${ONBLD_DIR:-NULL} = "NULL" ]; then if [ -d /opt/onbld/bin ]; then ONBLD_DIR=/opt/onbld/bin elif [ -d /usr/onbld/bin ]; then ONBLD_DIR=/usr/onbld/bin fi fi if [ -d ${ONBLD_DIR:-\\NULL} ] ; then PATH=${ONBLD_DIR}:${PATH} osbld_flag=1 export PATH fi if [ "$PROTO2" != "" ]; then # This should point to the parent's proto PARENT_ROOT=$PROTO2 export PARENT_ROOT else # Clear it in case it's already in the env. PARENT_ROOT= fi export ONBLD_DIR export MACH else # # This is neither a 5.x machine nor a 4.1.x machine - something is wrong # echo "***WARNING: this script is meant to be run on a 4.1.x and/or a 5.x" echo " operating system. This machine appears to be running:" echo " $os_rev " fi echo "" echo "Workspace (\$CODEMGR_WS) : $CODEMGR_WS" if [ -n "$parent" ]; then echo "Workspace Parent : $parent" fi echo "Proto area (\$ROOT) : $ROOT" if [ -n "$PARENT_ROOT" ]; then echo "Parent proto area (\$PARENT_ROOT) : $PARENT_ROOT" fi echo "Root of source (\$SRC) : $SRC" echo "Root of test source (\$TSRC) : $TSRC" if [ $osbld_flag = "1" ]; then echo "Prepended to PATH : $ONBLD_DIR" fi echo "Current directory (\$PWD) : $CODEMGR_WS" echo "" cd $CODEMGR_WS if $setenv; then cleanup_env else exec ${SHELL:-sh} "$@" fi