[mew-dist 27485] Re: mewest for Windows
KIMURA Yasuhiro
yasu at example.com
2006年 11月 13日 (月) 00:53:48 JST
木村です。
From: KIMURA Yasuhiro <yasu at example.com>
Subject: [mew-dist 27480] Re: mewest for Windows
Date: Tue, 07 Nov 2006 23:17:44 +0900 (JST)
> ……ショックから立ち直れたら、今週末にでもmewestを動かすのに挑戦してみ
> ます。なんかあっさり動きそうな気がしますが……。
というわけで、挑戦してみました。
27469での近藤さんの報告によると、PATHとかの設定をうまくやれば現状のま
までも動くようですが、
* 必要な設定をできるだけ減らしたい
* HOMEとかPATHの設定に関して、できるだけ自由度を増やしたい
ということで、添付したpatchのような変更を施してみました。変更のポイン
トは以下の通りです。
* Cygwin環境の検出
* CygwinのコマンドはUnix/Windowsいずれの形式のパス表記でも受け付けるの
で、パスをWindows形式で扱うようにする
* Windowsにはnativeのfind.exeがあるが、これはUnixのfindとは非互換なの
で、Cgywinのfindを使うようにPATHを設定する
* Windowsではパスの途中に空白が入ることも有り得るので、そのような場合
でも正常に動作するようにする
この変更により、以下の環境&設定でとりあえず問題なく動いています。
1. Windos XP SP2
2. Meadow 2.1
3. Mew 5.1.51のWindows用バイナリに27459の変更を施したもの
4. Hyper Estraier 1.4.8のWindow用バイナリパッケージ
5. Cygwinで、Baseカテゴリ+αくらいをインストールした状態
6. Windowsの環境変数の設定で、PATHの最後に以下の2つを追加
- 4のバイナリパッケージを展開したディレクトリ
- 5のCygwinをインストールしたディレクトリの下のbinディレクトリ
また以下の環境でも問題なく動きました
* FreeBSD 6.1R
* portからインストールしたEmacs 21.3
* 現在のMewのCVS HEADにこのpatchを当てたもの
他のUnix系OSでも問題なく動くと思います。
From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Subject: [mew-dist 27484] Re: mewest for Windows
Date: Wed, 08 Nov 2006 10:59:35 +0900 (JST)
> 動かす手順が分かったら、教えて下さい。
> web に加筆します。
そのうち出るであろうMew 5.1.52のWindows用バイナリで、mewestがインストー
ルされるようになると仮定すると、Windows環境においてHyper EstraierをMew
から使うための設定は、以下のようになります。
1. Hyper Estraierのインストール
1.1. http://hyperestraier.sourceforge.net/win/ から最新のWindows用バ
イナリのアーカイブをダウンロードする
1.2. ダウンロードしたアーカイブを適当な場所に展開する
2. Cygwinのインストール
2.1. http://www.cygwin.com/ などからsetup.exeをダウンロードする
2.2. setup.exeを起動して、手順にしたがってインストールする。
"Select Packages"のところでは、パッケージの追加は特に必要はない。
3. PATHの設定
Windowsの環境変数の設定で、PATHの最後に以下の2つを追加
3.1. 1.2でHyper Estraierのアーカイブを展開した場所の下の、
estcmd.exeが存在するディレクトリ
4.2. 2.2の"Select Root Install Directory"で指定したディレクトリの下
の、binディレクトリ(デフォルトではc:\cygwin\bin)
---
木村 康浩
-------------- next part --------------
Index: bin/mewest
===================================================================
RCS file: /cvsmew/mew/bin/mewest,v
retrieving revision 1.13
diff -u -r1.13 mewest
--- bin/mewest 30 Jul 2006 13:30:22 -0000 1.13
+++ bin/mewest 12 Nov 2006 14:54:25 -0000
@@ -15,6 +15,7 @@
INDEXDIR=casket
OUTPUT=${OUTPUT:-/dev/null}
LOCK=${BASEDIR}/.mewest.lock
+CYGWINENV=no
usage () {
PROG=`basename $0`
@@ -27,7 +28,7 @@
}
cleanup_lock () {
- ${RM} -fr ${LOCK}
+ ${RM} -fr "${LOCK}"
exit 4
}
@@ -36,6 +37,55 @@
cleanup_lock
}
+# Check if environment is Cygwin.
+check_cygwin () {
+ if ! type uname > /dev/null
+ then
+ return -1
+ fi
+ case `uname -s` in
+ CYGWIN*)
+ if type cygpath > /dev/null
+ then
+ return 1
+ else
+ return -1
+ fi
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+}
+
+# Convert path style from Unix to Windows if environment is Cygwin.
+# Otherwise same path is simply echoed.
+path_conv() {
+ if [ $CYGWINENV = "yes" ];
+ then
+ cygpath -w "$1"
+ else
+ echo "$1"
+ fi
+}
+
+check_cygwin
+case $? in
+0)
+ CYGWINENV=no
+ ;;
+1)
+ CYGWINENV=yes
+ # There is native find.exe in Windows but it is incompatible
+ # with Unix's one. So make sure Cygwin's find.exe is used.
+ PATH=/usr/bin:/bin:$PATH
+ ;;
+*)
+ echo Environment check failed
+ exit -1
+ ;;
+esac
+
while getopts "hv" OPTION
do
case ${OPTION} in
@@ -56,19 +106,19 @@
trap cleanup_lock 1 2 3 9 15
# create and check lock
-if ! ${MKDIR} ${LOCK} > /dev/null 2>&1 ; then
+if ! ${MKDIR} "${LOCK}" > /dev/null 2>&1 ; then
echo "${LOCK} exists"
exit 5
fi
# Directory exist?
-if [ ! -d ${TGTDIR} ]; then
+if [ ! -d "${TGTDIR}" ]; then
cleanup_lock_exit "${TGTDIR} not found"
fi
-if [ -d ${BASEDIR}/${INDEXDIR} ]; then
+if [ -d "${BASEDIR}/${INDEXDIR}" ]; then
echo "Purging old messages..."
- ${ESTCMD} purge ${BASEDIR}/${INDEXDIR} ${TGTDIR} > ${OUTPUT} ||\
+ ${ESTCMD} purge "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" "`path_conv \"${TGTDIR}\"`" > ${OUTPUT} ||\
cleanup_lock_exit "Purging old messages...failed"
echo "Purging old messages...done"
fi
@@ -77,17 +127,17 @@
# "find"'s regular expression is NOT portable, sigh...
# "[0-9]*" matches both "123" and "234.mew".
-${FIND} ${TGTDIR} \
+${FIND} "`path_conv \"${TGTDIR}\"`" \
-type d -name "trash" -prune -o \
-type d -name ${INDEXDIR} -prune -o \
-type f \( -name "[0-9]" -o -name "[0-9]*[0-9]" -o -name "*.mew" \) -print |\
- ${ESTCMD} gather -cl -fm -cm -sd -xh ${BASEDIR}/${INDEXDIR} - > ${OUTPUT} ||\
+ ${ESTCMD} gather -cl -fm -cm -sd -xh "`path_conv \"${BASEDIR}/${INDEXDIR}\"`" - > ${OUTPUT} ||\
cleanup_lock_exit "Indexing new messages...failed"
echo "Indexing new messages...done"
# clean up lock
-${RM} -fr ${LOCK}
+${RM} -fr "${LOCK}"
exit 0
Mew-dist メーリングリストの案内