#!/bin/sh
#Barry Kauler (c) Copyight 2007 www.puppylinux.com
#This script will create a PET package.
#Just create a directory with the name of the package, for example 'abiword-0.5.6'
#and put what you want in it.
#It should have abiword-0.5.6/usr/share/applications/abiword.desktop if the 
#application requires a menu entry, but if there isn't one this script will ask
#some simple questions and create one.
#This script will also create abiword-0.5.6/abiword-0.5.6.pet.specs, which has
#some information useful to the PETget package manager.

if [ ! $1 ];then
 echo "このスクリプトは次のように呼び出す事が必要です。:
# dir2petjp abiword-0.5.6
'abiword-0.5.6'は、このターミナルウインドウが開いている
同じディレクトリ内のディレクトリです。'abiword-0.5.6'は
は一例です。そしてPETパッケージになるサブディレクトリと
ファイルを含みます。"
 exit
fi

if [ ! -d $1 ];then
 echo "$1 はディレクトリでなければいけません"
 exit
fi

ADIR=$1
MYPID=${$}

#split ADIR path/filename into components...
BASEPKG="`basename $ADIR`"
DIRPKG="`dirname $ADIR`"
[ "$DIRPKG" = "/" ] && DIRPKG=""
#difficult task, separate package name from version part... 
#not perfect, some start with non-numeric version info...
NAMEONLY="`echo -n "$BASEPKG" | sed -e 's/\-[0-9].*$//g'`"
#...if that fails, do it the old way...
[ "$NAMEONLY" = "$BASEPKG" ] && NAMEONLY="`echo "$BASEPKG" | cut -f 1 -d "-"`"

clear
echo "'dir2petjp' スクリプトにようこそ。"
echo "これはディレクトリをPETパッケージに変換します。例えば、'abiword-0.5.6'と"
echo "いう名前のディレクトリがあり、その中にパッケージに必要とされるものを"
echo "何でも置きます。例えば、usr/local/bin/abiword (実行ファイル)、そして"
echo "/usr/share/applications/abiword.desktop (XDGメニューファイル)。"
echo ".desktopファイルがなくても気にしないで下さい。このスクリプトがいくつかの"
echo "簡単な質問をしてパッケージに必要な物を何でも勝手に作ってくれます。"
echo "メニューエントリを作成するならパッケージは .desktopファイルと"
echo "メニュー用に16x16ピクセルアイコンだけが必要です。"
echo "アイコンはxpmイメージで置く場所は /usr/local/lib/X11/mini-icons/"
echo "である事が望まれます。でもどこでもいいです。"
echo
echo "ディレクトリ $BASEPKG はパッケージ名にダッシュを続けて"
echo "アラビア数字でバージョン番号を付けます。例： abiword-0.5.6"
echo
echo "パッケージは任意でインストール後と削除後のスクリプトを持ちます。"
echo "これは 'pinstall.sh' と 'puninstall.sh' でトップディレクトリに置かれます。"
echo "(Unleashed用に公式PETを作るには、そのREADMEファイルを読んで下さい"
echo "スクリプトを正しく作成する方法が詳しく書かれています)"
echo
echo "上記のどれにもさらに進む必要がなければ、ここでCTRL-Cを押して"
echo "このスクリプトを終了できます。そうでなければENTERを押して下さい。"
echo -n "続けるにはENTERキーを押して下さい: "
read goforit

. /etc/xdg/menus/hierarchy #has PUPHIERARCHY variable.

DESKTOPFILE=""
ADESKTOPFILE="`find $ADIR -type f -name \*.desktop`"
[ ! "$ADESKTOPFILE" = "" ] && DESKTOPFILE="yes"

echo
echo -en "\\033[1;31mステップ 1" #red
echo -e "\\033[0;39m"
echo "${BASEPKG}アプリケーションのメニュー項目が必要なければ"
echo "ここで「no」とタイプして下さい(引用符なしで)。"
echo "メニュー項目が必要なら、ただENTERキーだけを押して下さい。"
echo -n "「no」とタイプするか、ただENTERキーを押して下さい: "
read NOMENU
[ ! "$NOMENU" = "" ] && DESKTOPFILE="ignore"


PUPAPPLICATION=""
PUPCATEGORY=""
PUPEXECUTABLE=""
PUPICON16=""
PUPAPPLICATION=""
if [ "$DESKTOPFILE" = "" ];then
 echo
 echo -en "\\033[1;31mステップ 1B" #red
 echo -e "\\033[0;39m"
 echo "ウィンドウマネージャメニューエントリを作成したいアプリケーション"
 echo "のカテゴリを入力して下さい。公式パピーには以下のメニュー階層"
 echo "があります:"
 echo "('X-' カテゴリは非公式です。パピー仕様)"
 echo "$PUPHIERARCHY"
 echo
 echo -n "CATEGORIESコラムから1語を入力して下さい。: "
 read PUPCATEGORY

 echo 
 echo -en "\\033[1;31mステップ 1C" #red
 echo -e "\\033[0;39m"
 echo "実行ファイルの名前を入力して下さい。以下の実行可能な検索パス"
 echo "にあるならば、すなわち /bin, /sbin, /usr/bin,"
 echo "/usr/sbin, /root/my-applications/bin か /usr/local/bin,"
 echo "パス無しで実行ファイル名だけを入力して下さい。"
 echo "例: mtpaint"
 echo "(もちろん、ここでパスを指定する必要があるならば"
 echo "それはパッケージがインストールされた [後] のパスです)"
 echo
 echo -n "実行ファイルの [パス] を入力して下さい: "
 read PUPEXECUTABLE

 echo 
 echo -en "\\033[1;31mステップ 1D" #red
 echo -e "\\033[0;39m"
 echo "ウィンドウマネージャメニューエントリで使われるアイコン名を入力"
 echo "して下さい。これは16x16ピクセルのxpmファイルでなければいけません"
 echo "(pngでもOKですが全てのウィンドウマネージャには合いません)。"
 echo "このアイコンが /usr/local/lib/X11/mini-icons にあるならば"
 echo "パスを指定する必要はありません。"
 echo "アイコンがそれ以外の場所にある時はフルパスで指定しなければ"
 echo "いけません。例: パッケージ gfnrename-0.4 が16x16アイコンを"
 echo " /usr/local/gfnrename-0.4/icon.xpmにインストールします"
 echo "(もちろん、ここでパスを指定する必要があるならば"
 echo "それはパッケージがインストールされた [後] のパスです)"
 echo "==16x16アイコンでなければいけません。大きくてはだめです！=="
 echo
 echo -n "アイコンの [パス] を入力して下さい: "
 read PUPICON16

 echo 
 echo -en "\\033[1;31mステップ 1E" #red
 echo -e "\\033[0;39m"
 echo "メニューに表示させたいアプリケーション名を入力して下さい。"
 echo "それはメニューエントリの最初の単語になります。"
 echo "例: Abiword"
 echo
 echo -n "アプリケーション名を入力して下さい: "
 read PUPAPPLICATION
fi

echo
echo -en "\\033[1;31mステップ 2" #red
echo -e "\\033[0;39m"
echo "1-3語の説明を入力して下さい。"
if [ "$DESKTOPFILE" = "" ];then
 echo "これはとても短くなければなりません。ウインドウマネージャ"
 echo "メニューエントリのアプリケーション名の直後に表示されます。"
fi
echo "これはPETgetによるパッケージ管理のためなど"
echo "いろいろな目的に使われます。"
echo "Abiword の例では: wordprocessor"
echo
echo -n "非常に[短い]説明を（引用符なしで）入力して下さい: "
read PUPMENUDESCR

echo
echo "List of official packages built-in to Puppy:"
cat /root/.packages/packages.txt | grep '" on "' | cut -f 2 -d '"' | cut -f 1 -d '-' | tr '\n' ' ' #' Geany fix.
echo
echo
echo "上記のリストはパピーに組み込まれるパッケージです。これらは全て"
echo " (もしCDから起動していればCDの) pup_xxx.sfs ファイルにあります。"
echo -n "続けるにはENTERキーを押して下さい: "
read yabbado
echo
echo "利用できる追加の公式パッケージがここにあります。:"
cat /root/.packages/packages.txt | grep '" off "' | cut -f 2 -d '"' | cut -f 1 -d '-' | tr '\n' ' ' #' Geany fix.
echo
echo
echo "上記のPETパッケージは、pup_xxx.sfsファイルに組み込む"
echo "選択をされなかったUnleashed一式にあります。"
echo "しかしいつでも個々にインストールできます。"
echo -n "続けるにはENTERキーを押して下さい: "
read yabbado

#if pkg is a split-off, already has a known dependency...
DEPBASE="";DEPNOTE=""
[ ! "`echo -n "$NAMEONLY" | grep '_DEV'`" = "" ] &&  DEPBASE="+`echo -n "$NAMEONLY" | sed -e 's/_DEV//g'`"
[ ! "`echo -n "$NAMEONLY" | grep '_DOC'`" = "" ] &&  DEPBASE="+`echo -n "$NAMEONLY" | sed -e 's/_DOC//g'`"
[ ! "`echo -n "$NAMEONLY" | grep '_NLS'`" = "" ] &&  DEPBASE="+`echo -n "$NAMEONLY" | sed -e 's/_NLS//g'`"
if [ ! "$DEPBASE" = "" ];then
 DEPNOTE="NOTE5: It is strongly suggested that you at least enter ${DEPBASE}
       the main package (add version# if this is to be an unofficial pkg)
"
fi

echo
echo -en "\\033[1;31mステップ 3" #red
echo -e "\\033[0;39m"
echo "現在作成中のPETパッケージ用の依存リストを入力して下さい。"
echo "すでにパピーに組み込んだパッケージは依存ファイルとして"
echo "はっきりと名前を付ける必要はありません（パピーの縮小ベアボーン"
echo "バージョン以外は、これら全てを組み込んでないかも知れません。"
echo "最悪の場合の状況について考えなければならないかも知れません）。"
echo "この依存リストを入力する方法を一例で示します: パッケージ"
echo "'pupdvdtool-0.5b' は以下の依存リストがあります:"
echo "+vamps,+vobcopy,+ffmpeg,+dvdauthor,+gtkdialog"
echo "各パッケージ名は先頭が「+」で始まり「,」で区切られます。"
echo "注意１: このgtkdialogはGTKライブラリを要求しますが"
echo "       下位依存ファイルを指定する必要はありません。gtkdialogを"
echo "       インストールする必要があれば、それ自身の依存リストがあります。"
echo "注意２: /root/.packages/packages.txtファイルで"
echo "       各パッケージの依存リストを調べる事ができます。"
echo "注意３: パッケージが非公式の依存ファイルを必要としない限り"
echo "       パッケージバージョン番号の指定は要求されません。"
echo "       (バージョン化したどんな依存ファイルでも自動的に非公式である事を意味します)"
echo "注意４: (何を指定して良いかわからなければ、ENTERキーを押して下さい)"
echo "       (PETgetはまだいくつかの基本的な依存性をチェックします)"
echo "$DEPNOTE"
echo -n "依存リストを入力して下さい: "
read PUPOFFICIALDEPS

echo
echo -en "\\033[1;31mステップ 4" #red
echo -e "\\033[0;39m"
echo "PETパッケージはインストール時にPETget（パッケージマネージャ）に"
echo "登録しないオプションがあります。これはバグフィックスやPETパッケージに"
echo "パッチを当てる時に役立ちます。ここでは通常ENTERキーを押すだけです。"
echo "通常はパッケージをアンインストールできるようPETgetに登録したい"
echo "でしょうから。"
echo "PETパッケージをPETgetに登録しますか？"
echo -n "「はい」ならENTERキーを押して下さい。そうでなければ「no」と入力して下さい: "
read PETREGISTER
[ "$PETREGISTER" = "" ] && PETREGISTER="yes"

echo
echo -en "\\033[1;31mステップ 5" #red
echo -e "\\033[0;39m"

#create tarball...
rm -f $DIRPKG/${BASEPKG}.tar 2>/dev/null
rm -f $DIRPKG/${BASEPKG}.tar.gz 2>/dev/null
rm -f $DIRPKG/${BASEPKG}.pet 2>/dev/null
if [ "$DESKTOPFILE" = "" ];then
 mkdir -p $DIRPKG/$BASEPKG/usr/share/applications
 echo '[Desktop Entry]' > $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo 'Encoding=UTF-8' >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Name=${PUPAPPLICATION} ${PUPMENUDESCR}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Icon=${PUPICON16}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Comment=${PUPAPPLICATION} ${PUPMENUDESCR}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Exec=${PUPEXECUTABLE}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Terminal=false" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Type=Application" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "Categories=${PUPCATEGORY}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo "GenericName=${PUPAPPLICATION} ${PUPMENUDESCR}" >> $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop
 echo
 echo "ファイル $DIRPKG/$BASEPKG/usr/share/applications/${NAMEONLY}.desktop を作成しました。"
fi
#echo "PUPAPPLICATION='${PUPAPPLICATION}'" > $DIRPKG/$BASEPKG/${BASEPKG}.pet.specs
echo "PETMENUDESCR='${PUPMENUDESCR}'" > $DIRPKG/$BASEPKG/${BASEPKG}.pet.specs
echo "PETOFFICIALDEPS='${PUPOFFICIALDEPS}'" >> $DIRPKG/$BASEPKG/${BASEPKG}.pet.specs
echo "PETREGISTER='${PETREGISTER}'" >> $DIRPKG/$BASEPKG/${BASEPKG}.pet.specs
echo "ファイル $DIRPKG/$BASEPKG/${BASEPKG}.pet.specs を作成しました。"
echo "これはPETgetでパッケージ管理のために使われます。"
tar -c -f $DIRPKG/${BASEPKG}.tar $DIRPKG/$BASEPKG/
sync
gzip $DIRPKG/${BASEPKG}.tar
#rmdir $DIRPKG/$BASEPKG
TARBALL="$DIRPKG/${BASEPKG}.tar.gz"

echo
echo "ファイル $DIRPKG/${BASEPKG}.tar.gz を作成しました。 .petに変換中です..."
FULLSIZE="`stat --format=%s ${TARBALL}`"
MD5SUM="`md5sum $TARBALL | cut -f 1 -d ' '`"
echo -n "$MD5SUM" >> $TARBALL
sync
mv -f $TARBALL $DIRPKG/${BASEPKG}.pet
sync

echo
echo "${BASEPKG}.pet が作成されました。完了。"
echo
echo " ${BASEPKG} に新しい '.specs' ファイルがあります。"
if [ "$DESKTOPFILE" = "" ];then
 echo "そして $BASEPKG/usr/share/applications/ に新しい '.desktop' ファイルがあります。"
fi
echo "これでディレクトリ $BASEPKG はPETパッケージとして正しく構成されました"
echo "今後は二度とこのスクリプトを走らせる必要はありません。"
echo "必要ならばファイルを手で編集する事ができます。そして"
echo "次のようにしてもう一つの.petパッケージを作れます:"
echo "# tar -c -f ${BASEPKG}.tar ${BASEPKG}/"
echo "# gzip ${BASEPKG}.tar"
echo "# tgz2pet ${BASEPKG}.tar.gz"
echo
echo "dir2petjp 終了。"

###END###
