#!/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