#!/bin/ksh
#
# Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved
#
# patchscript for security components Linux



date=`date +"%b\/%d\/%Y"`


#
# Commands
#
CP="/bin/cp"
LS="/bin/ls"
CAT="/bin/cat"
PWD="/bin/pwd"
SED="/bin/sed"
CHMOD="/bin/chmod"
MKDIR="/bin/mkdir"
AWK="/bin/awk"
GREP="/bin/grep"
RM="/bin/rm"

base_dir=`${PWD}`
security_base_dir="$base_dir/../.."

dest=${base_dir}/dist/patches

while getopts rp:b:f option
do
        case $option in
		p)      common=$OPTARG;;
        esac
done

if [ "$common" = "" ] ;
then
    echo "Usage $0 -p <patch_dir>"
    exit 1
fi

if [ ! -d $common ] ;
then
	echo "No patch description at $common"
	exit 1
fi


if [ ! "${JSS3_LOCATION}" = "" ] ;
then
    echo "Using JSS3 from ${JSS3_LOCATION}"
fi

common=`cd ${common};pwd`

echo "Using directory ${common} to build patch."

# Get component versions
get_nspr_mod () {
    from_file=$1
    search_string=$2
    value=`grep ^${search_string} ${from_file} | /usr/bin/sed -e 's: *::g' -e 's|^.*=||g'`

    echo ${value}
}
get_nspr_version () {
    if [ -f  ${security_base_dir}/nspr/config/module.df ] ;
    then
      # NSPR 4.1
      search_file=${security_base_dir}/nspr/config/module.df
      nspr_mod_version=`get_nspr_mod ${search_file} MOD_VERSION`
      nspr_mod_minor=`get_nspr_mod ${search_file} MOD_MINOR`
      nspr_mod_patch=`get_nspr_mod ${search_file} MOD_PATCH`
      value=${nspr_mod_version}.${nspr_mod_minor}.${nspr_mod_patch}
    else
      # NSPR 4.4
	  value=`grep PR_VERSION ${security_base_dir}/nspr/pr/include/prinit.h | sed -e 's/"$//' -e 's/.*"//' -e 's/ .*//'`
    fi
    echo $value
}

nspr_version=`get_nspr_version`
nss_version=`grep NSS_VERSION ${security_base_dir}/nss/lib/nss/nss.h | head -1 | sed -e 's/[^"]*"//' -e 's/".*//' -e 's/ .*//' | cut -d. -f1-3`
jss_version=`grep JSS_VERSION ${security_base_dir}/jss/org/mozilla/jss/util/jssver.h | sed -e 's/"$//' -e 's/.*"//' -e 's/ .*//'`
jss_major=`echo $jss_version | cut -d . -f 1`

echo "NSPR $nspr_version"
echo "NSS $nss_version"
echo "JSS $jss_version"

build_readme () {
  echo "from template:"
  ls -l ${common}/patch.README

  ${SED} -e 's/#PATCHID#/'${thispatchnum}'/g' \
      -e 's/#PATCHID_BASE#/'${patch_num}'/g' \
      -e 's/#PATCH_REV#/'${patch_rev}'/g' \
      -e 's/#DATE#/'${date}'/g' \
      -e 's/#SECURITY_VERSION#/'${security_version}'/g' \
      -e 's/#NSPR_VERSION#/'${nspr_version}'/g' \
      -e 's/#NSS_VERSION#/'${nss_version}'/g' \
      -e 's/#JSS_VERSION#/'${jss_version}'/g' \
      -e "s/#NSPR1_RPM#/${nspr1_rpm}/g" \
      -e "s/#NSPR2_RPM#/${nspr2_rpm}/g" \
      -e "s/#NSPR_RPM#/${nspr_rpm}/g" \
      -e "s/#NSPR_RPM64#/${nspr_rpm64}/g" \
      -e "s/#NSS1_RPM#/${nss1_rpm}/g" \
      -e "s/#NSS2_RPM#/${nss2_rpm}/g" \
      -e "s/#NSS_RPM#/${nss_rpm}/g" \
      -e "s/#NSS_RPM64#/${nss_rpm64}/g" \
      -e "s/#JSS_RPM#/${jss_rpm}/g" \
      -e "s/#JSS_RPM64#/${jss_rpm64}/g" \
      -e "s/#JSS3_RPM#/${jss3_rpm}/g" \
	  -e '/^#/d' \
      ${common}/patch.README > ${thispatch}/README.${thispatchnum}
}

# get variable from patch.infos file
INFO_SEP==

get_info () {
    info_param=$1
    value=`${GREP} ^$info_param$INFO_SEP ${common}/patch.infos | ${AWK} -F$INFO_SEP '{ print $2 }'`
    echo $value
}

# parse info files for this patch
patch_rev=`get_info REV`
patch_num=`get_info LINUX_NUM`
security_version=`get_info SECURITY_VERSION`
pkglist=`get_info LINUX_PKGLIST`
nspr_obj_dirname=`get_info NSPR_OBJ_DIRNAME`
nss_obj_dirname=`get_info NSS_OBJ_DIRNAME`
jss_obj_dirname=`get_info JSS_OBJ_DIRNAME`
nspr_obj64_dirname=`get_info NSPR_OBJ64_DIRNAME`
nss_obj64_dirname=`get_info NSS_OBJ64_DIRNAME`
jss_obj64_dirname=`get_info JSS_OBJ64_DIRNAME`
jss3_obj_dirname=`get_info JSS3_OBJ_DIRNAME`

echo "========================================"
echo "patch_rev=$patch_rev"
echo "patch_num=${patch_num}"
echo "========================================"

  thispatchnum=${patch_num}-${patch_rev}
  thispatch=${dest}/${thispatchnum}

security_dir="${base_dir}/../.."
nspr_dir="${security_dir}/${nspr_obj_dirname}"
nss_dir="${security_dir}/${nss_obj_dirname}"
jss_dir="${security_dir}/${jss_obj_dirname}"
nspr_dir64="${security_dir}/${nspr_obj64_dirname}"
nss_dir64="${security_dir}/${nss_obj64_dirname}"
jss_dir64="${security_dir}/${jss_obj64_dirname}"
jss3_dir="${JSS3_LOCATION}/${jss3_obj_dirname}"

nspr1_rpm=`cd ${nspr_dir};ls -1 sun-nspr-*.rpm | grep -v devel`
nspr2_rpm=`cd ${nspr_dir};ls -1 sun-nspr-*.rpm | grep devel`
nspr_rpm="${nspr1_rpm} ${nspr2_rpm}"
if [ -n "${nspr_dir64}" ] ;
then 
  nspr_rpm64=`cd ${nspr_dir64};ls -1 sun-nspr-*.rpm | grep -v devel | grep -v debuginfo`
fi
nss1_rpm=`cd ${nss_dir};ls -1 sun-nss-*.rpm | grep -v devel`
nss2_rpm=`cd ${nss_dir};ls -1 sun-nss-*.rpm | grep devel`
nss_rpm="${nss1_rpm} ${nss2_rpm}"
if [ -n "${nss_dir64}" ] ;
then
  nss_rpm64=`cd ${nss_dir64};ls -1 sun-nss-*.rpm | grep -v devel | grep -v debuginfo`
fi
jss_rpm=`cd ${jss_dir};ls -1 sun-jss-*.rpm | grep -v devel`
if [ -n "${jss_dir64}" ] ;
then
  jss_rpm64=`cd ${jss_dir64};ls -1 sun-jss-*.rpm | grep -v devel | grep -v debuginfo`
fi

if [ ! "${JSS3_LOCATION}" = "" ] ;
then
  jss3_rpm=`cd ${jss3_dir};ls -1 sun-jss3-*.rpm | grep -v devel`
fi

echo "thispatch=$thispatch"
echo "nspr_rpm=$nspr_rpm"
echo "nss_rpm=$nss_rpm"
echo "jss_rpm=$jss_rpm"
echo "nspr_rpm64=$nspr_rpm64"
echo "nss_rpm64=$nss_rpm64"
echo "jss_rpm64=$jss_rpm64"
echo "jss3_rpm=$jss3_rpm"

###########################
# Delete the old stuff
###########################
  if [ -d ${thispatch} ]; then
     echo "removing any previously built version of this patch"
     rm -rf ${thispatch}
  fi

###################################
# Create the patch output directory
##################################
  if [ ! -d ${thispatch} ]; then
     ${MKDIR} -p ${thispatch}
  fi

###############################
# Create README.<patchnum> file
###############################

  echo "======building readme...."
  build_readme
  echo "======done building readme...."

###############################
# Create the 'proto' area
################################
  for package in ${pkglist} 
  do
    echo "Adding rpm for $package"
    case $package in
    sun-nspr)
	echo "  Adding ${nspr_dir}/${nspr1_rpm}"
	cp ${nspr_dir}/${nspr1_rpm} ${thispatch}
	echo "  Adding ${nspr_dir}/${nspr2_rpm}"
	cp ${nspr_dir}/${nspr2_rpm} ${thispatch}
	if [ -n "${nspr_dir64}" ] ;
	then
	  echo "  Adding ${nspr_dir64}/${nspr_rpm64}"
	  cp ${nspr_dir64}/${nspr_rpm64} ${thispatch}
	fi	  
	;;
    sun-nss)
	echo "  Adding ${nss_dir}/${nss1_rpm}"
	cp ${nss_dir}/${nss1_rpm} ${thispatch}
	echo "  Adding ${nss_dir}/${nss2_rpm}"
	cp ${nss_dir}/${nss2_rpm} ${thispatch}
	if [ -n "${nss_dir64}" ] ;
	then
	  echo "  Adding ${nss_dir64}/${nss_rpm64}"
	  cp ${nss_dir64}/${nss_rpm64} ${thispatch}
	fi
	;;
    sun-jss)
	echo "  Adding  ${jss_dir}/${jss_rpm}"
	cp ${jss_dir}/${jss_rpm} ${thispatch}
	if [ -n "${jss_dir64}" ] ;
	then
	  echo "  Adding  ${jss_dir64}/${jss_rpm64}"
	  cp ${jss_dir64}/${jss_rpm64} ${thispatch}
	fi
	;;
    sun-jss3)
	if [ "${JSS3_LOCATION}" = "" ] ;
	then
	    echo "JSS3_LOCATION is not defined"
	else
	    echo "  Adding ${jss3_dir}/${jss3_rpm}"
	    cp ${jss3_dir}/${jss3_rpm} ${thispatch}
	fi
	;;
    esac
  done
  
########################
# Copy the "installpatch" script
########################
echo "============="
script_from=${common}/installpatch
if [ -f "${script_from}" ] ;
then
	echo "Adding installpatch script from ${script_from}"
	cp ${script_from} ${thispatch}
	chmod a+x ${thispatch}/installpatch
else
	echo "No installpatch script available for this patch"
fi


  echo "----------done creating Linux patches --------------"
