# This file is part of the src2pkg program: # Copyright 2005-2008 Gilbert Ashley # src2pkg is released under the GNU General Public License Version 2 make_description() { if [[ "$FAILED" = "" ]] ; then cd $CWD; mkdir -p $PKG_DIR/install chmod 755 $PKG_DIR/install if [[ -e $CWD/$PKG_DESC ]] ; then nol=$( cat $CWD/$PKG_DESC | grep $NAME: | wc -l ) if [[ $nol -lt 9 ]] || [[ $nol -gt 13 ]] ; then reject_desc make_default_desc else cat $CWD/$PKG_DESC > $PKG_DIR/install/$PKG_DESC chmod 644 $PKG_DIR/install/$PKG_DESC echo $BLUE"Verified $PKG_DESC found - "$NORMAL"Inserting in the package tree " fi elif [[ -e $CWD/$NAME.txt ]] ; then nol=$( cat $CWD/$NAME.txt | grep $NAME: | wc -l ) if [[ $nol -lt 9 ]] || [[ $nol -gt 13 ]] ; then make_default_desc else cat $CWD/$NAME.txt > $PKG_DIR/install/$PKG_DESC chmod 644 $PKG_DIR/install/$PKG_DESC echo $BLUE"Created $PKG_DESC from $NAME.txt - "$NORMAL"Inserting in the package tree " fi else make_default_desc fi fi } # Internal function called by make_description make_default_desc() { if [[ "$FAILED" = "" ]] ; then echo $BLUE"Creating $PKG_DESC - "$NORMAL"Creating $PKG_DESC file in PKG_DIR" cat /dev/null > $PKG_DIR/install/$PKG_DESC # Align the text formatting guide starting at ':' (plus one space) namelen=${#NAME} offset=$(( $namelen + 1 )) spaces=0 echo -n '#' >> $PKG_DIR/install/$PKG_DESC while [[ $spaces -lt $offset ]] ; do echo -n ' ' >> $PKG_DIR/install/$PKG_DESC (( spaces++ )) done echo "|-------------Use this guide to format your text with--------------|" >> $PKG_DIR/install/$PKG_DESC SPECFILE="" if [[ -e $SRC_DIR/$NAME.spec ]] ; then SPECFILE=$SRC_DIR/$NAME.spec elif [[ -e $SRC_DIR/$NAME.spec.in ]] ; then SPECFILE=$SRC_DIR/$NAME.spec.in fi if [[ -f $SPECFILE ]] ; then echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC cat $SPECFILE | read_rpm_desc | text_wrapper elif [[ -e $SRC_DIR/debian/control ]] ; then echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC cat $SRC_DIR/debian/control | read_deb_desc | text_wrapper elif [[ -e $SRC_DIR/PKG-INFO ]] ; then echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC cat $SRC_DIR/PKG-INFO | read_pkg-info_desc | text_wrapper elif [[ -e $SRC_DIR/$NAME.lsm ]] ; then echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC cat $SRC_DIR/$NAME.lsm | read_pkg-info_desc | text_wrapper else echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC cat /dev/null | text_wrapper fi if [[ ! -f $PKG_DIR/install/$PKG_DESC ]] ; then if [[ "$QUERY_FOR_PKG_DESC" = "YES" ]] ; then echo $BLUE"Interactive mode: "$NORMAL echo " Here you can give a description of this package for the $PKG_DESC file." echo " Type in the text as one long line and press ENTER when finished." echo " The text will automatically be formatted for you. Or just press ENTER " echo " to accept the default text: $BLURB_3" echo "" echo -n "> " read BLURB_3 echo "$NAME: $BLURB_1" >> $PKG_DIR/install/$PKG_DESC echo "$NAME: $BLURB_2" >> $PKG_DIR/install/$PKG_DESC if [[ "$BLURB_3" = "" ]] ; then BLURB_3="No description was given for this package." echo "$NAME: $BLURB_3" >> $PKG_DIR/install/$PKG_DESC cat /dev/null | text_wrapper else echo $BLURB_3 | text_wrapper fi else cat >> $PKG_DIR/install/$PKG_DESC << END $NAME: $BLURB_1 $NAME: $BLURB_2 $NAME: $BLURB_3 $NAME: $BLURB_4 $NAME: $BLURB_5 $NAME: $BLURB_6 $NAME: $BLURB_7 $NAME: $BLURB_8 $NAME: $BLURB_9 $NAME: $BLURB_10 END fi fi if [[ "$ADD_DEPENDS_IN_DESC" = "YES" ]] || [[ "$ADD_REQUIRED_FILE" = "YES" ]] ; then gen_deps_list if [[ -e deps_list ]] && [[ $(cat ${CWD}/deps_list) != "" ]] ; then if [[ "$ADD_DEPENDS_IN_DESC" = "YES" ]] ; then #echo -n $BLUE"Adding dependency info - "$NORMAL echo "$NAME: $BLURB_11 - This package depends on:" >> $PKG_DIR/install/$PKG_DESC cat $CWD/deps_list |wrap_deps #echo $GREEN"Done"$NORMAL fi if [[ "$ADD_REQUIRED_FILE" = "YES" ]] ; then echo $BLUE"Creating $PKG_REQUIRED - "$NORMAL"Creating $PKG_REQUIRED file in PKG_DIR" cat $CWD/deps_list > $PKG_DIR/install/$PKG_REQUIRED #echo $GREEN"Done"$NORMAL fi else echo "$NAME: $BLURB_11" >> $PKG_DIR/install/$PKG_DESC fi else echo "$NAME: $BLURB_11" >> $PKG_DIR/install/$PKG_DESC fi rm -f $CWD/deps_list [[ -e $CWD/slack-suggests ]] && cat $CWD/slack-suggests > $PKG_DIR/install/slack-suggests [[ -e $CWD/slack-conflicts ]] && cat $CWD/slack-conflicts > $PKG_DIR/install/slack-conflicts if [ "$EXEC_NAME" = "trackinstall" ] && [[ ! $AUTO_SCRIPT ]] ; then # skip this if we are using trackinstall or src2pkg without AUTO_SCRIPT true else echo $BLUE"Copying $PKG_DESC to:"$NORMAL" new.$PKG_DESC in CWD." cat $PKG_DIR/install/$PKG_DESC > $CWD/new.$PKG_DESC if [[ -f $PKG_DIR/install/$PKG_REQUIRED ]] ; then echo $BLUE"Copying $PKG_REQUIRED to:"$NORMAL" new.$PKG_REQUIRED in CWD." cat $PKG_DIR/install/$PKG_REQUIRED > $CWD/new.$PKG_REQUIRED fi echo " The files new.$PKG_DESC (and new.$PKG_REQUIRED) are copies" echo " of the $PKG_DESC (and $PKG_REQUIRED) files inserted in the" echo " package. If you want to change the content, edit and then" echo " save the files as simply $PKG_DESC (and $PKG_REQUIRED)." echo " Otherwise, they are re-created when you repeat the build." fi fi } gen_deps_list() { cd $PKG_DIR ; if [[ "$(find . |xargs file |grep ELF |grep -v 'relocatable'| grep -v 'shared object')" != "" ]] ; then find . |xargs file |grep ELF |grep -v 'relocatable'| grep -v "shared object" |cut -f 1 -d : |xargs ldd > ${CWD}/deps_list.tmp if [[ $(cat ${CWD}/deps_list.tmp) != "" ]] ; then cat ${CWD}/deps_list.tmp | white_out |cut -f1 -d' '|grep -v "./" > ${CWD}/deps_list rm -f ${CWD}/deps_list.tmp for PKG_DEP in $(cat ${CWD}/deps_list); do THIS_DEP="$(grep -n ${PKG_DEP} $ADM_DIR_NAME/packages/* |head --lines 1 |cut -f1 -d: |cut -f 5 -d/)" THIS_DEP=${THIS_DEP%-*} ; THIS_DEP=${THIS_DEP%-*} ; THIS_DEP=${THIS_DEP%-*} if [ ! "$THIS_DEP" == "glibc" ] && \ [ "$THIS_DEP" != "aaa_elflibs" ] && \ [ "$THIS_DEP" != "$NAME" ] ; then echo $THIS_DEP >> $CWD/deps_list.tmp fi done rm -f ${CWD}/deps_list if [[ -e deps_list.tmp ]] && [[ $(cat ${CWD}/deps_list.tmp) != "" ]] ; then for DEP in $(cat $CWD/deps_list.tmp) ; do echo $DEP >> $CWD/deps_list done rm -f ${CWD}/deps_list.tmp cat $CWD/deps_list |sort -u |uniq -u >> $CWD/deps_list.tmp rm -f $CWD/deps_list for dep in $(cat $CWD/deps_list.tmp) ; do echo $dep |rev |cut -f3- -d'-' |rev >> $CWD/deps_list done rm -f $CWD/deps_list.tmp else rm -f $CWD/deps_list.tmp fi fi fi } reject_desc() { echo $YELLOW"WARNING! "$NORMAL"The supplied $PKG_DESC file is not valid." echo "You need 9-13 lines that begin with '$NAME:' for this package." if ! [[ -e $CWD/rej.$PKG_DESC ]] ; then echo "It will be renamed to rej.$PKG_DESC and a new one created." mv $CWD/$PKG_DESC $CWD/rej.$PKG_DESC else rm -f $CWD/$PKG_DESC fi } # this function wraps text used in the PKG_DESC file and pads it # with extra lines when needed. text_wrapper() { # The first two lines of the PKG_DESC and the last one are reserved # so we only format 8 lines of text. Lines 12 and 13 can still be used # to add dependencies info.... # DESC_WRAP_LENGTH=70 # DESC_MAX_LINES=8 OUTPUT_LINE_COUNT=0 OUTPUT="" # collect all the input text into one long line while read LINE ; do STRING="$LINE" # replace newlines with a space STRING=${STRING/'\n'/ /} # add the new text to the OUTPUT with a space between # if there are double spaces they get removed below. OUTPUT="$OUTPUT $STRING" shift done PARSESTRING="$OUTPUT" while [[ $PARSESTRING != "" ]] ; do (( OUTPUT_LINE_COUNT++ )) # read the number of chars matching the wrap length CHUNK=${PARSESTRING:0:${DESC_WRAP_LENGTH}} # skip over everything but the last character of the CHUNK OFFSET_LENGTH=$(( $DESC_WRAP_LENGTH -1 )) # if the last character is a space or not null shorten the input line to the previous word if [[ "${CHUNK:$OFFSET_LENGTH:1}" = " " ]] || [[ "${CHUNK:$OFFSET_LENGTH:1}" != "" ]] ; then # keep everything before the last space CHUNK=${CHUNK%$" "*} fi # get the length of the finished chunk CHUNK_LENGTH=${#CHUNK} # advance the pointer the length of the chunk that we saved PARSESTRING=${PARSESTRING:$CHUNK_LENGTH} echo $NAME:"$CHUNK" >> $PKG_DIR/install/$PKG_DESC # exit if we have reached the maximum number of lines if [[ $OUTPUT_LINE_COUNT -gt $DESC_MAX_LINES ]] ; then break else CHUNK="" fi done # pad the PKG_DESC file to 11 lines if the above didn't reach that number while [[ $OUTPUT_LINE_COUNT -lt $DESC_MAX_LINES ]] ; do echo "$NAME:" >> $PKG_DIR/install/$PKG_DESC (( OUTPUT_LINE_COUNT++ )) done } wrap_deps() { OUTPUT_LINE_COUNT=0 OUTPUT="" while read LINE ; do STRING="$LINE" STRING=${STRING/'\n'//} OUTPUT="$OUTPUT $STRING" shift done PARSESTRING="$OUTPUT" while [[ $PARSESTRING != "" ]] ; do (( OUTPUT_LINE_COUNT++ )) CHUNK=${PARSESTRING:0:${DESC_WRAP_LENGTH}} OFFSET_LENGTH=$(( $DESC_WRAP_LENGTH -1 )) if [[ "${CHUNK:$OFFSET_LENGTH:1}" = " " ]] || [[ "${CHUNK:$OFFSET_LENGTH:1}" != "" ]] ; then CHUNK=${CHUNK%$" "*} #CHUNK=${CHUNK#*" "} fi CHUNK_LENGTH=${#CHUNK} PARSESTRING=${PARSESTRING:$CHUNK_LENGTH} # strip leading spaces from the chunk while [[ ${CHUNK:0:1} = " " ]] ; do CHUNK=${CHUNK#*" "} done echo $NAME:" $CHUNK" >> $PKG_DIR/install/$PKG_DESC if [[ $OUTPUT_LINE_COUNT -gt 2 ]] ; then break else CHUNK="" fi done } read_rpm_desc() { LINE_COUNT=0 FIRST_LINE=0 LAST_LINE=0 while read LINE ; do (( LINE_COUNT++ )) CHUNK=${LINE/\*/-} if [[ $FIRST_LINE -ne 0 ]] && [[ $LINE_COUNT -eq $FIRST_LINE ]] ; then echo $CHUNK elif [[ ${CHUNK:0:12} = "%description" ]] && [[ $FIRST_LINE -eq 0 ]] ; then FIRST_LINE=$(( $LINE_COUNT + 1 )) elif [[ ${CHUNK:0:1} = "%" ]] || [[ ${CHUNK:0:15} = "%description -l" ]] && [[ $FIRST_LINE -ne 0 ]] ; then LAST_LINE=$(( $LINE_COUNT -1 )) break elif [[ $FIRST_LINE -ne 0 ]] && [[ $LAST_LINE -eq 0 ]] ; then if [[ "$CHUNK" != "" ]] ; then echo $CHUNK fi fi done } read_deb_desc() { LINE_COUNT=0 FIRST_LINE=0 LAST_LINE=0 while read LINE ; do (( LINE_COUNT++ )) CHUNK=${LINE/\*/-} if [[ $FIRST_LINE -ne 0 ]] && [[ $LINE_COUNT -eq $FIRST_LINE ]] ; then echo $CHUNK elif [[ ${CHUNK:0:12} = "Description:" ]] && [[ $FIRST_LINE -eq 0 ]] ; then FIRST_LINE=$(( $LINE_COUNT + 1 )) elif [[ $CHUNK = "" ]] && [[ $FIRST_LINE -ne 0 ]] ; then LAST_LINE=$(( $LINE_COUNT -1 )) break elif [[ $FIRST_LINE -ne 0 ]] && [[ $LAST_LINE -eq 0 ]] ; then if [[ "$CHUNK" != "" ]] ; then echo $CHUNK fi fi done } read_pkg-info_desc() { LINE_COUNT=0 FIRST_LINE=0 LAST_LINE=0 while read LINE ; do (( LINE_COUNT++ )) CHUNK=${LINE/\*/-} if [[ ${CHUNK:0:12} = "Description:" ]] && [[ $FIRST_LINE -eq 0 ]] ; then echo ${CHUNK:12} FIRST_LINE=$(( $LINE_COUNT + 1 )) elif [[ $CHUNK = "" ]] || [[ "$(echo $CHUNK |grep ':')" != "" ]] && [[ $FIRST_LINE -ne 0 ]] ; then LAST_LINE=$(( $LINE_COUNT -1 )) break elif [[ $FIRST_LINE -ne 0 ]] && [[ $LAST_LINE -eq 0 ]] ; then if [[ "$CHUNK" != "" ]] ; then echo $CHUNK fi fi done }