[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 メーリングリストの案内