#!/bin/ksh
# @(#)47 1.63 src/bldenv/pkgtools/ptfpkg.sh, pkgtools, bos41J, 9524C_all 6/12/95 16:20:19
#
# COMPONENT_NAME: (PKGTOOLS) BAI Build Tools
#
# FUNCTIONS: ptfpkg
# Clean_Up
# Usage
# create_ptf_image
# gen_boot_info
# get_boot_value
# get_comment
# get_lppname_info
# process_ptfs
# process_root_part
# repackage
#
# ORIGINS: 27
#
# (C) COPYRIGHT International Business Machines Corp. 1993
# All Rights Reserved
# Licensed Materials - Property of IBM
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
#
# NAME: Clean_Up
#
# FUNCTION: Clean up after running.
#
# INPUT: DEFECTAPARS (global) -
# TMPFILE (global) -
#
# OUTPUT: None.
#
# SIDE EFFECTS: None.
#
# RETURNS: 0 always.
#
function Clean_Up
{
[[ "${LPP_locked}" = "${TRUE}" ]] && bldlock -u "${LPP} ${BLDCYCLE}"
rm -f ${DEFECTAPARS} ${TMPFILE} ${TMPMAINTLEVELFILE} > /dev/null 2>&1
rm -f ${TMPVRMFFILE} ${PTFREQSLIST} ${TMPPTFOPTFILE} > /dev/null 2>&1
rm -f ${BOOTFILES} ${BOOTLIBS} > /dev/null 2>&1
return 0
}
#
# NAME: Usage
#
# FUNCTION: Usage statement.
#
# INPUT: None.
#
# OUTPUT: None.
#
# SIDE EFFECTS: None
#
# RETURNS: 0 always.
#
function Usage
{
print -u2 "Usage: ${command} -c -b [ -m mediatype] [ -d outputDirectory ]"
print -u2 "\twhere the -c and/or -b option is required."
return 0
}
#
# NAME: create_ccss_image
#
# FUNCTION: Generate a ccss format ptf image from a bff (backup format file).
#
# INPUT: bff image in current directory.
# PTF (global)
# LABEL_TABLE (set in bldinit)
#
# OUTPUT: ccss image named ${PTF}.ptf
#
# SIDE EFFECTS: Upon successful completion the .bff is removed
#
# RETURNS: Fatally exits if errors are detected. Otherwise, return 0.
#
function create_ccss_image
{
#----------------------------------------------------------
# 1st define the various variables/commands that
# will be used
#----------------------------------------------------------
typeset TOC="${PTF}.toc" # TOC fragment for image
typeset infoFile="${PTF}.infofile" # Info file
typeset BFF="${PTF}.bff" # File containing PTF.
typeset ccssFile="${PTF}.ptf" # File containing CCSS image.
typeset GENTOC="gen_toc_entry" # Cmd to generate toc file
typeset GENINFO="gen_infofile" # Cmd to generate the info file
typeset CCSS_PACK="ccss_pack" # Cmd to create ccss image.
typeset rc
rm -f ${TOC} ${INFOFILE} # Always start from scratch.
if [[ -z "${OUTPUTDIR}" ]]
then
${GENTOC} -b ${BFF} -t ${TOC} # create TOC section in a file
else
${GENTOC} -b "${OUTPUTDIR}/${BFF}" -t ${TOC}
fi
rc=$?
if [ $rc -ne 0 ]
then
$log -e "gen_toc_entry ended with code of $rc "
else
#--------------------------------------------------
# IFF everything OK so far, generate the CCSS
# info in a file.
#--------------------------------------------------
if [[ -z "${OUTPUTDIR}" ]]
then
${GENINFO} -i ${infoFile} -t ${COMPIDS} -p ${PTF} \
-o ${PTFOPTIONS} -v ${TMPVRMFFILE} -b ${BFF} \
-l ${LABEL_TABLE}
else
${GENINFO} -i ${infoFile} -t ${COMPIDS} -p ${PTF} \
-o ${PTFOPTIONS} -v ${TMPVRMFFILE} -b "${OUTPUTDIR}/${BFF}" \
-l ${LABEL_TABLE}
fi
rc=$?
if [ $rc -ne 0 ]
then
$log -e "gen_infofile ended with code of $rc "
fi
fi
if [ $rc -eq 0 ]
then
#--------------------------------------------------
# IFF everything OK so far, generate the CCSS
# image.
#--------------------------------------------------
headerFlag="N" # Do not do headerFlag yet!!!
if [ "$headerFlag" = "N" ]
then
if [[ -z "${OUTPUTDIR}" ]]
then
${CCSS_PACK} -p ${BFF} -i ${infoFile} -t ${TOC} \
-n ${PTF} -c ${ccssFile}
else
${CCSS_PACK} -p "${OUTPUTDIR}/${BFF}" -i ${infoFile} \
-t ${TOC} -n ${PTF} -c "${OUTPUTDIR}/${ccssFile}"
fi
rc=$?
else
if [[ -z "${OUTPUTDIR}" ]]
then
${CCSS_PACK} -p ${BFF} -i ${INFOFILE} -t ${TOC} \
-n ${PTF} -c ${CCSSFILE} -H "${classValue}"
else
${CCSS_PACK} -p "${OUTPUTDIR}/${BFF}" -i ${INFOFILE} -t ${TOC} \
-n ${PTF} -c "${OUTPUTDIR}/${CCSSFILE}" \
-H "${classValue}"
fi
rc=$?
fi
if [ "$rc" -ne 0 ]
then
$log -e "ccss_pack ended with code of $rc "
fi
fi
rm -f ${TOC} ${infoFile} # remove work files
# If anything failed, then exit
if [[ $rc -ne 0 ]]
then
Clean_Up
exit 200
else
return 0
fi
}
#
# NAME: create_ptf_image
#
# FUNCTION: This function creates the actual ptf image. An update
# inslist is generated for the files in this ptf. The
# adeinv command is run on the inslist to generate the
# liblpp.a files.
#
# INPUT: BOOT (global) -
# BLDCYCLE (global) -
# COMMENT[] (global) -
# COMMENT_INDEX (global) -
# CONTENT (global) -
# FIX (global) -
# FILENAMESLIST (global) -
# FORMAT (global) -
# MOD (global) -
# LANG (global) -
# ODE_TOOLS (global) -
# OPTIONPATH (global) -
# OPTION (global) -
# PLATFORM (global) -
# PRODNAME (global) -
# PKGPTFNAME (global) -
# PTF (global) -
# RELEASE (global) -
# SHIP_PATH (global) -
# TMPFILE (global) -
# VERSION (global) -
#
# OUTPUT: COMMENT (global) - May be altered if apar is found in ${PKGPTFNAME}
# file.
# CONTENT (global) - Will be altered if root part is found and not
# set to B.
#
# SIDE EFFECTS: Product the PTF image.
#
# RETURNS: 0 if PTF image is created, 1 if PTF image creation fails.
#
function create_ptf_image
{
typeset DATA_LIBLPPA="${OPTIONPATH}/data.liblpp.a.${BLDCYCLE}"
typeset USR_LIBLPPA="${OPTIONPATH}/usr.liblpp.a.${BLDCYCLE}"
typeset OPTIONLP="${OPTIONPATH}/${OPTION}.lp.${BLDCYCLE}"
typeset INSLIST="${OPTIONPATH}/${OPTION}.il.${BLDCYCLE}"
typeset DATA_OPTACF="${OPTIONPATH}/data.${OPTION}.acf"
typeset USR_OPTACF="${OPTIONPATH}/usr.${OPTION}.acf"
typeset UPSIZEFILE="${OPTIONPATH}/${OPTION}.upsize"
typeset ar_list="" # Argument list to ar.
typeset -i comment_index=1 # Used to index $COMMENT[].
typeset adeinv_aflag # adeinv's -a flag if user supplied acf
typeset shareDataFlag=${FALSE}
typeset -i rc=0 # Return code.
#-------------------------------------------------------------
# If the usr.liblpp.a, data.liblpp.a $OPTION.lp file and |
# inslist already exist for this build cycle then use them. |
# Else copy over the most recent copy (no BLDCYCLE suffix). |
#-------------------------------------------------------------
[ ! -f ${DATA_LIBLPPA} ] && \
cp ${OPTIONPATH}/data.liblpp.a ${DATA_LIBLPPA} > /dev/null 2>&1
[ ! -f ${USR_LIBLPPA} ] && \
cp ${OPTIONPATH}/usr.liblpp.a ${USR_LIBLPPA} > /dev/null 2>&1
[ ! -f ${OPTIONLP} ] && \
cp ${OPTIONPATH}/${OPTION}.lp ${OPTIONLP} > /dev/null 2>&1
[ ! -f ${INSLIST} ] && \
cp ${OPTIONPATH}/${OPTION}.il ${INSLIST} > /dev/null 2>&1
ROOT_PART="${FALSE}"
if [[ -f ${USR_LIBLPPA} ]]
then
cp ${USR_LIBLPPA} ./liblpp.a
elif [[ -f ${DATA_LIBLPPA} ]]
then
cp ${DATA_LIBLPPA} ./liblpp.a
else
$log -e "${USR_LIBLPPA} or ${DATA_LIBLPPA} do not exist for ${PTF}."
return 1
fi
#---------------------------------------------------------------
# setup the -a flag for adeinv. Variable is empty if user
# did not supply an acf file. Otherwise it contains the
# flag itself and the full path to the user's acf.
#---------------------------------------------------------------
if [[ -f ${USR_OPTACF} ]]
then
adeinv_aflag="-a ${USR_OPTACF}"
elif [[ -f ${DATA_OPTACF} ]]
then
adeinv_aflag="-a ${DATA_OPTACF}"
fi
# generate the inslist
ptfins -f ${FILENAMESLIST} -o ${OPTION} -i ${INSLIST}
if [[ $? -ne 0 ]]
then
$log -e "ptfins failed on ${PTF}"
$log -e "f = '${FILENAMESLIST}', 0 = '${OPTION}', i = '${INSLIST}'"
return 1
fi
#-------------------------------------------------------------
# If the