#!/bin/bash help(){ cat >&2 < : Define source directory (default: $SRCDIR) -n|--name : Define the pnd base name (default: $PND_NAME) -d|--dest : Define destination directory (default: $DESTDIR) -a|--author : programmers names (default: $AUTHOR) -v|--version : Define the version (default: $VERSION) -w|--website : Define the url (default: $WEBSITE) -b|--build : Define the build number (default: $BUILD) -f|--force : overide PXML.xml file if found -h|--help : show this screen ENDHELP } DEBUG(){ echo $*>&2 } buildApplicationList(){ #output " []" lines cd $DESTDIR DESTLST=$(find $SRCDIR -name "*desktop";find $DESTDIR -name "*desktop") if [ ! -z "$DESTLST" ];then { for d in $DESTLST;do EXE=$(awk -F= '/Exec/{print $2}'<$d|awk '{print $1}'|head -1) if [[ "x$EXE" != "x" ]];then BIN=$(find . -executable -type f -name $(basename $EXE)|head -1) echo ${BIN:-$EXE} $d fi done }|sort|awk 'BEGIN{P=""}$1!=P{print}{P=$1}' else find . -executable -type f \! -name "*sh" fi } getPATH(){ cd $DESTDIR L=$(find . -type d -name bin) echo $L|sed "s#\./#$(pwd)/#g;s# #:#g" } getLIBPATH(){ cd $DESTDIR L=$(find . -type d -name lib) echo $L|sed "s#\./#$(pwd)/#g;s# #:#g" } genLaunchScript() { S="$DESTDIR/scripts/$(basename $1).sh" if [ -e $S ];then mv $S ${S}.old fi cat>$S< " awk -F= '($1~/^Name/&&/en_US/)||$1~/^Name=/{print $1" "$2}'<$1|while read DN DNV;do l=$(echo $DN|sed 's/Name//;s/\[//;s/\]//') echo " $DNV" done awk -F= '($1~/^Comment/&&/en_US/)||$1~/^Comment=/{print $1" "$2}'<$1|while read DN DNV;do l=$(echo $DN|sed 's/Comment//;s/\[//;s/\]//') echo " $DNV" done ICON=$(awk -F= '$1~/^Icon/{print $2}'<$1) if [ ! -z "$ICON" ];then echo " ' if [ ! -e "$DEST/icon.png" ];then cp $(find $DESTDIR -name ${ICON}.png|head -1) $DEST/icon.png fi fi DOC=$(find $DESTDIR -type d -name html|head -1) if [ ! -z "$DOC" ];then cat < END fi cat < ENDCATEGORIES DCAT=$(awk -F= '$1=="Categories"{print $2}'<$1) CATCNT=$(($(echo $DCAT|sed "s/;/ /g"|wc -w) / 2)) if [ $CATCNT -gt 0 ];then for i in $(seq 1 $CATCNT);do DCATMAJ=$(echo $DCAT|awk -F\; "{print \$$(($i*2-1))}") DCATMIN=$(echo $DCAT|awk -F\; "{print \$$(($i*2))}") cat < ENDCATEGORIES done else cat < ENDCATEGORIES fi cat < ENDCATEGORIES } genPxml(){ # output the PXML.xml file if [ -e $DESTDIR/PXML.xml ];then mv $DESTDIR/PXML.xml $DESTDIR/PXML.xml.old fi cat >$DESTDIR/PXML.xml < ENDHEAD if [ ! -d $DESTDIR/previews ];then mkdir -p $DESTDIR/previews fi if [ ! -d $DESTDIR/scripts ];then mkdir $DESTDIR/scripts fi buildApplicationList|while read BIN DESK;do BASEB=$(basename $BIN) genLaunchScript $BIN cat >>$DESTDIR/PXML.xml < ENDAPP echo " " >>$DESTDIR/PXML.xml if [ ! -z "$(find $DESTDIR/previews -name "$BASEB*")" ];then for i in $(find $DESTDIR/previews -name "$BASEB*");do echo " " >>$DESTDIR/PXML.xml done else echo "" >>$DESTDIR/PXML.xml fi echo " " >>$DESTDIR/PXML.xml if [ ! -z "$DESK" ];then desktop2application $DESK >>$DESTDIR/PXML.xml else MAJOR=$(echo $VERSION|awk -F. '{print $1}') MINOR=$(echo $VERSION|awk -F. '{print $2}') REL=$(echo $VERSION|awk -F. '{print $3}') MINOR=${MINOR:-"0"} REL=${REL:-"0"} cat >>$DESTDIR/PXML.xml <$PND_NAME en_US Automatically generated pxml from $(pwd) PND=$PND_NAME ENDINFO fi cat >>$DESTDIR/PXML.xml < someIcon.png Yes No someDirectoryInsidePnd --> ENDINFO done echo "" >>$DESTDIR/PXML.xml } ##################### ### Script main : ## FORCE=0 BUILD=1 AUTHOR=$USER WEBSITE=${WEBSITE:-"http://www.openpandora.org"} SRCDIR=${SRCDIR:-$(pwd)} PND_NAME=${PND_NAME:-$(basename $SRCDIR|awk -F- '{print $1}')} VERSION=${VERSION:-$(basename $SRCDIR|awk -F- '{print $2}')} DESTDIR=${DESTDIR:-"/mnt/utmp/$PND_NAME"} RND=$RANDOM # Parse arguments while [ $# -gt 0 ];do case $1 in -s|--src) SRCDIR=$2;shift;; -d|--dest) DESTDIR=$2;shift;; -b|--build) BUILD=$2;shift;; -a|--author) AUTHOR=$2;shift;; -n|--name) PND_NAME=$2;shift;; -v|--version) VERSION=$2;shift;; -w|--website) WEBSITE=$2;shift;; -f|--force) FORCE=1;; -h|--help) help;exit 1;; *) echo "'$1' unknown argument">&2;help;exit 2;; esac shift; done # Validate arguments if [ ! -d $SRCDIR ];then echo "$SRCDIR don't exist" >&2 help exit 3 fi if [ ! -d $DESTDIR ] && [ $FORCE -eq 0 ];then echo "$DESTDIR don't exist" >&2 help exit 4 elif [ ! -d $DESTDIR ];then mkdir -p $DESTDIR if [ $? -ne 0 ];then echo "$DESTDIR don\'t exist and cannot be created" >&2 help exit 5 fi fi if [ $(buildApplicationList|wc -l) -le 0 ];then echo "No applications found">&2 help exit 6 fi if [ -e $DESTDIR/PXML.xml ] && [ $FORCE -eq 0 ];then echo "PXML file exist and force disabled." >&2 help exit 7 fi genPxml