cdesktopenv/cde/programs/dtappintegrate/dtappintegrate.src

464 lines
18 KiB
Plaintext
Executable File

XCOMM!KORNSHELL
XCOMM $XConsortium: dtappintegrate.src /main/4 1996/04/21 19:27:37 drk $
#define COMMENT_STAR *
XCOMM ###################################################################
XCOMM #
XCOMM dtappintegrate #
XCOMM #
XCOMM (c) Copyright 1996 Digital Equipment Corporation. #
XCOMM (c) Copyright 1993,1994,1996 Hewlett-Packard Company. #
XCOMM (c) Copyright 1993,1994,1996 International Business Machines Corp.#
XCOMM (c) Copyright 1993,1994,1996 Sun Microsystems, Inc. #
XCOMM (c) Copyright 1996 Novell, Inc. #
XCOMM (c) Copyright 1996 FUJITSU LIMITED. #
XCOMM (c) Copyright 1996 Hitachi. #
XCOMM (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of #
XCOMM Novell, Inc. #
XCOMM #
XCOMM This is the dt application integration script to assist #
XCOMM in integrating applications into COSE Desktop Environment. #
XCOMM #
XCOMM syntax: dtappintegrate -s <source> [-t <target>] [-l <lang>] [-u]#
XCOMM where #
XCOMM -s indicates application's root location. #
XCOMM source the path name of the application's root. #
XCOMM -t indicates a new location for the #
XCOMM application's group files. #
XCOMM target the path name of the target location. #
XCOMM -l indicates the language for this application. #
XCOMM language the language name as used by $LANG #
XCOMM environment variable. #
XCOMM -u indicates to unintegrate the application. #
XCOMM #
XCOMM #
XCOMM ###################################################################
XCOMM ------------------------------------------------------------------#
XCOMM ShowSyntax #
XCOMM #
XCOMM This routine is used to echo the command line syntax. #
XCOMM #
XCOMM input: #
XCOMM none #
XCOMM #
XCOMM return codes: #
XCOMM 0 - success #
XCOMM #
XCOMM ------------------------------------------------------------------#
function ShowSyntax
{
echo "Usage: $SCRIPT_NAME -s <source> [-t <target>] [-l <language>] [-u]" | tee -a $LOGFILE
return 0
}
XCOMM ------------------------------------------------------------------#
XCOMM GetAbsolutePath #
XCOMM #
XCOMM This routine is to resolve a path to its actual path, #
XCOMM following links, etc. #
XCOMM #
XCOMM input: #
XCOMM $1 = path #
XCOMM #
XCOMM output: #
XCOMM absolute path #
XCOMM #
XCOMM ------------------------------------------------------------------#
function GetAbsolutePath
{
if [ "/" = "$1" ]; then
echo $2
elif [ -L $1 ]; then
GetAbsolutePath `ls -l $1 | awk '{print $NF}'` $2
else
{
if [ "." = "$1" -o ".." = "$1" ]; then
GetAbsolutePath / /`basename $1`$2
else
GetAbsolutePath `dirname $1` /`basename $1`$2
fi
}
fi
}
XCOMM ------------------------------------------------------------------#
XCOMM GetRelativePath #
XCOMM #
XCOMM This routine is used to determine the relative path of #
XCOMM of the source path from the target path. #
XCOMM #
XCOMM input: #
XCOMM $1 = absolute source path #
XCOMM $2 = absolute target path #
XCOMM #
XCOMM return codes: #
XCOMM 0 - success #
XCOMM 1 - error #
XCOMM #
XCOMM ------------------------------------------------------------------#
function GetRelativePath
{
$AWK 'BEGIN {
src = ARGV[1]
dest = ARGV[2]
a = split(src, A, "/");
b = split(dest, B, "/");
s = 0;
for (i = 2; i < a && i < b; i++) {
if (match(A[i],B[i])) {
++s;
} else {
break;
}
}
for (i = 0 ; i <= (a - s - 2); i++) {
printf("../")
}
for (i = 2 + s; i <= b; i++) {
printf("%s%s", B[i], (i < b) ? "/":"\n");
}
}' $2 $1
}
XCOMM ------------------------------------------------------------------#
XCOMM LinkCfgs #
XCOMM #
XCOMM This routine creates the actual links from the application's#
XCOMM root config files to the target location. #
XCOMM #
XCOMM input: #
XCOMM #
XCOMM return codes: #
XCOMM n - number of files integrated or unintegrated #
XCOMM #
XCOMM ------------------------------------------------------------------#
function LinkCfgs
{
typeset source=$1 target=$2 torf=$3 spath="" tpath="" cfgfile="" rpath=""
typeset pattern="" files=""
shift;shift;shift
if [[ -L $source || -L $(dirname $source) ]] then
spath=$(GetAbsolutePath $source)
else
spath=$source
fi
if [[ -L $target || -L $(dirname $target) ]] then
tpath=$(GetAbsolutePath $target)
else
tpath=$target
fi
rpath=""
for pattern in "$@"
do
if [[ $pattern = "(*)" ]] then
files=$(ls -d $source/COMMENT_STAR 2>/dev/null)
else
files=$(ls -d $source/$pattern 2>/dev/null)
fi
if [[ $? = 0 ]] then
count=$(echo $files | wc -w)
for cfgfile in $files
do
basecfg=$(basename $cfgfile)
if [[ $torf = TRUE ]] then
if [[ $rpath = "" ]] then
rpath=$(GetRelativePath $spath $tpath)
fi
rm -f $tpath/$basecfg
echo "ln -sf $rpath/$basecfg $tpath/$basecfg" >> $LOGFILE
ln -sf $rpath/$basecfg $tpath/$basecfg >> $LOGFILE 2>&1
else
rm $tpath/$basecfg >/dev/null 2>&1
if [[ $? = 0 ]] then
echo "rm $tpath/$basecfg" >> $LOGFILE
fi
fi
done
fi
done
return $count
}
XCOMM ------------------------------------------------------------------#
XCOMM IntegrateUnintegrate #
XCOMM #
XCOMM This routine integrates the files into the cose desktop #
XCOMM environment or unintegrates them depending on the boolean #
XCOMM input parameter. #
XCOMM #
XCOMM input: #
XCOMM $1 = Integrate or not. TRUE=integrate. FALSE=unintegrate. #
XCOMM #
XCOMM return codes: #
XCOMM 0 - work was done #
XCOMM 1 - no work done #
XCOMM #
XCOMM ------------------------------------------------------------------#
function IntegrateUnintegrate
{
typeset torf=$1 srcs="" trgs="" fpats="" langs="" tpath="" spath="" rpath="" k="" languages="" lang=""
typeset cfgs="" srcabs="" trgabs=""
integer i=0 icons=0 types=1 help=2 appmgr=3
srcabs=$(GetAbsolutePath $APP_ROOT)
trgabs=$(GetAbsolutePath $APP_TARGET)
srcs[0]=$srcabs$ICONS$APP_LANG
srcs[1]=$srcabs$TYPES$APP_LANG
srcs[2]=$srcabs$HELP$APP_LANG
srcs[3]=$srcabs$APPMANAGER$APP_LANG
trgs[0]=$trgabs$ICONS$APP_LANG
trgs[1]=$trgabs$TYPES$APP_LANG
trgs[2]=$trgabs$HELP$APP_LANG
trgs[3]=$trgabs$APPMANAGER$APP_LANG
fpats[0]="$PIXMAP_FILES $BITMAP_FILES"
fpats[1]="$ACTIONDB_FILES"
fpats[2]="$HELPVOLUME_FILES_OLD $HELPVOLUME_FILES_NEW $HELPFAMILY_FILES"
fpats[3]="$APPMAN_FILES"
rc=1
while (( i < 4 ))
do
if [[ $APP_LANG = "" ]] then
languages=$(ls -d ${srcs[i]}/COMMENT_STAR 2>/dev/null)
if [[ $? = 0 ]] then
for lang in $languages
do
baselang=$(basename $lang)
if [[ -d $lang ]] then
if [[ $torf = TRUE ]] then
if [[ ! -d ${trgs[i]}/$baselang ]] then
mkdir -p ${trgs[i]}/$baselang
fi
fi
LinkCfgs ${srcs[i]}/$baselang ${trgs[i]}/$baselang $torf ${fpats[i]}
if [[ $? != 0 ]] then
rc=0
fi
fi
done
fi
else
LinkCfgs ${srcs[i]} ${trgs[i]} $torf ${fpats[i]}
if [[ $? != 0 ]] then
rc=0
fi
fi
i=i+1
done
return $rc
}
XCOMM ------------------------------------------------------------------#
XCOMM ExitOut #
XCOMM #
XCOMM Exit the program. #
XCOMM #
XCOMM input: #
XCOMM $1 = return code #
XCOMM #
XCOMM ------------------------------------------------------------------#
function ExitOut
{
typeset retcode=$1
echo "<<<<<<< END OF APPLICATION INTEGRATION >>>>>>>" >> $LOGFILE
echo "See $LOGFILE file for more information"
exit $retcode
}
XCOMM ----<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>-----
XCOMM ----<<<<<<<<<<<.-------------------------.>>>>>>>>>>>-----
XCOMM ----<<<<<<<<<<<| |>>>>>>>>>>>-----
XCOMM ----<<<<<<<<<<<| START OF MAIN ROUTINE |>>>>>>>>>>>>-----
XCOMM ----<<<<<<<<<<<|_________________________|>>>>>>>>>>>-----
XCOMM ----<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>-----
XCOMM -------------------------------------------------------------------
XCOMM Initialize variables
XCOMM -------------------------------------------------------------------
sFLAG=0
tFLAG=0
lFLAG=0
uFLAG=0
TYPES=/types
APPMANAGER=/appmanager
ICONS=/icons
HELP=/help
APPCONFIG=/dt/appconfig
CONFIG_TOP=CDE_CONFIGURATION_TOP
DT=`basename $CONFIG_TOP`
APP_TARGET=${CONFIG_TOP%/$DT}$APPCONFIG
PIXMAP_FILES=*.pm
BITMAP_FILES=*.bm
HELPVOLUME_FILES_OLD=*.hv
HELPVOLUME_FILES_NEW=*.sdl
HELPFAMILY_FILES=*.hf
ACTIONDB_FILES=*.dt
FRONTPANEL_FILES=*.fp
APPMAN_FILES="(*)"
ID=$(id)
LOGFILE=$(mktemp /tmp/dtappint.logXXXXXXXXXXXXXXXX)
PATH=CDE_INSTALLATION_TOP/bin:/usr/bin
XCOMM -------------------------------------------------------------------
XCOMM Save application's name in variable.
XCOMM -------------------------------------------------------------------
SCRIPT_NAME=$0
XCOMM -------------------------------------------------------------------
XCOMM Check if root user. Exit if not.
XCOMM -------------------------------------------------------------------
ID=${ID##*uid=}
ID=${ID#*\(}
ID=${ID%%\)*}
if [[ $ID != root ]] then
echo "Error: Must be root user to run $0!" >&2
exit 3
fi
XCOMM -------------------------------------------------------------------
XCOMM Put prolog into log file.
XCOMM -------------------------------------------------------------------
echo "<<<<<<< START OF APPLICATION INTEGRATION >>>>>>>" > $LOGFILE
XCOMM -------------------------------------------------------------------
XCOMM Put the date of application integration into the log file.
XCOMM -------------------------------------------------------------------
echo $(date) >> $LOGFILE
XCOMM -------------------------------------------------------------------
XCOMM Put the command line into the log file.
XCOMM -------------------------------------------------------------------
echo "$SCRIPT_NAME $*" >> $LOGFILE
XCOMM -------------------------------------------------------------------
XCOMM Check if there are no command line arguments.
XCOMM If none, then display the command syntax.
XCOMM -------------------------------------------------------------------
if [[ $# = 0 ]] then
ShowSyntax
ExitOut 0
fi
XCOMM -------------------------------------------------------------------
XCOMM Parse the command line into flags and variables.
XCOMM -------------------------------------------------------------------
while getopts s:t:l:u flag
do
case $flag in
s) sFLAG=1
APP_ROOT="$OPTARG";;
t) tFLAG=1
APP_TARGET="$OPTARG";;
l) lFLAG=1
APP_LANG="$OPTARG";;
u) uFLAG=1;;
?) echo " "
ShowSyntax
ExitOut 2;;
esac
done
XCOMM -------------------------------------------------------------------
XCOMM Check if application's root was specified and is valid.
XCOMM -------------------------------------------------------------------
if [[ $sFLAG = 0 ]] then
echo "Error: Did not specify -s option!" >&2
ExitOut 4
else
if [[ ! -d $APP_ROOT ]] then
APP_PATH=$APP_ROOT
echo "Error: $APP_PATH is not a directory!" >&2
ExitOut 4
fi
if [[ ! -r $APP_ROOT ]] || [[ ! -x $APP_ROOT ]] then
APP_PATH=$APP_ROOT
echo "Error: Can not read $APP_PATH directory!" >&2
ExitOut 4
fi
fi
if [[ ${APP_ROOT%%/COMMENT_STAR} != "" ]] then
APP_ROOT=$(pwd)/$APP_ROOT
fi
XCOMM -------------------------------------------------------------------
XCOMM If target is specified, do some sanity checks on this path.
XCOMM -------------------------------------------------------------------
if [[ $tFLAG = 1 ]] then
if [[ ! -d $APP_TARGET ]] then
APP_PATH=$APP_TARGET
echo "Error: $APP_PATH is not a directory!" >&2
ExitOut 4
fi
if [[ ! -r $APP_TARGET ]] || [[ ! -x $APP_TARGET ]] then
APP_PATH=$APP_TARGET
echo "Error: Can not read $APP_PATH directory!" >&2
ExitOut 4
fi
if [[ ${APP_TARGET%%/COMMENT_STAR} != "" ]] then
APP_TARGET=$(pwd)/$APP_TARGET
fi
fi
XCOMM -------------------------------------------------------------------
XCOMM Set up variables.
XCOMM -------------------------------------------------------------------
APP_ROOT=$APP_ROOT$APPCONFIG
if [[ $APP_LANG != "" ]] then
APP_LANG=/$APP_LANG
fi
XCOMM -------------------------------------------------------------------
XCOMM Unintegrate the application by un-doing the integration steps.
XCOMM -------------------------------------------------------------------
if [[ $uFLAG = 1 ]] then
IntegrateUnintegrate FALSE
if [[ $? = 0 ]] then
echo "Unintegration Complete"
else
echo "No files to unintegrate"
fi
ExitOut 0
fi
XCOMM -------------------------------------------------------------------
XCOMM See if these directories exist. If they don't, then create them.
XCOMM -------------------------------------------------------------------
for i in $APP_TARGET$ICONS$APP_LANG $APP_TARGET$TYPES$APP_LANG $APP_TARGET$APPMANAGER$APP_LANG $APP_TARGET$HELP$APP_LANG
do
if [[ ! -d $i ]] then
mkdir -p $i
fi
done
XCOMM -------------------------------------------------------------------
XCOMM Determine which awk to use.
XCOMM -------------------------------------------------------------------
$(type nawk > /dev/null 2>&1)
if [[ $? != 0 ]] then
AWK="awk"
else
AWK="nawk"
fi
XCOMM -------------------------------------------------------------------
XCOMM Integrate the application.
XCOMM -------------------------------------------------------------------
IntegrateUnintegrate TRUE
if [[ $? = 0 ]] then
echo "Integration Complete"
else
echo "No files to integrate"
fi
XCOMM -------------------------------------------------------------------
XCOMM Exit
XCOMM -------------------------------------------------------------------
ExitOut 0