どうせ和布蕪るなら、続き (インチキ mecab-config)

Windows 奈良では3

Windows 公式版では「mecab-config」がインストールされない。うーん。

Unix系ではこんなね:

mecab-config
  1 #!/bin/sh
  2 
  3 prefix=/usr
  4 exec_prefix=${prefix}
  5 exec_prefix_set=no
  6 
  7 usage()
  8 {
  9     cat <<EOF
 10 Usage: mecab-config [OPTIONS]
 11 
 12 Options:
 13   [--cxx]
 14   [--prefix[=DIR]]
 15   [--exec-prefix[=DIR]]
 16   [--libs]
 17   [--cflags]
 18   [--dicdir]
 19   [--libexecdir]
 20   [--sysconfdir]
 21   [--libs-only-L]
 22   [--libs-only-l]
 23   [--inc-dir]
 24   [--help]
 25   [--version]
 26 EOF
 27 
 28     exit $1
 29 }
 30 
 31 if test $# -eq 0; then
 32     usage 1
 33 fi
 34 
 35 cflags=false
 36 libs=false
 37 
 38 while test $# -gt 0; do
 39     case "$1" in
 40     -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
 41     *) optarg= ;;
 42     esac
 43 
 44     case "$1" in
 45     --cxx)
 46        echo g++
 47        ;;
 48        
 49     --cc)
 50        echo gcc
 51        ;;
 52        
 53     --prefix=*)
 54 	prefix=$optarg
 55         if test $exec_prefix_set = no ; then
 56           exec_prefix=$optarg
 57         fi
 58 	;;
 59 
 60     --prefix)
 61 	echo $prefix
 62 	;;
 63 
 64     --exec-prefix=*)
 65 	exec_prefix=$optarg
 66 	exec_prefix_set=yes
 67 	;;
 68 
 69     --exec-prefix)
 70 	echo $exec_prefix
 71 	;;
 72 
 73     --version)
 74 	echo 0.996
 75 	exit 0
 76 	;;
 77 
 78     --help)
 79 	usage 0
 80 	;;
 81 
 82     --cflags)
 83         if test ${prefix}/include != /usr/include ; then
 84           includes=-I${prefix}/include
 85         fi
 86         echo $includes
 87        	;;
 88 
 89     --libs)
 90        	echo -L${exec_prefix}/lib -lmecab -lstdc++
 91        	;;
 92 
 93     --dicdir)
 94        	echo ${exec_prefix}/lib/mecab/dic
 95        	;;
 96 	
 97     --inc-dir)
 98         echo ${prefix}/include
 99 	;;
100     
101     --libs-only-L)
102         echo ${exec_prefix}/lib
103 	;;
104 	
105     --libs-only-l)
106         echo -lmecab -lstdc++ | sed s/-l//g;
107 	;;
108 
109     --libexecdir)
110        	echo /usr/libexec/mecab
111        	;;
112 	
113     --sysconfdir)
114        	echo ${prefix}/etc
115        	;;
116 
117     *)
118 	usage
119 	exit 1
120 	;;
121     esac
122     shift
123 done
124 
125 exit 0

一応ソースを見ると Windows に色目を使ってる形跡はあるんだけれど、とにかくこれはインストールはされない。と思う。(思わぬ場所にいないなら。)

前にも何回か書いたと思うけど、ほぼ99% の OSS デベロッパが「MSYS? なにそれたべれんの」とまったく相手にしてくれない。mecab に関しては、その古さも関係しているけれど、最近の OSS だって負けず劣らず「そんなもん知らん」としてこれへのサポートは切り捨てられている。なんつーか、こういうちょっとしたスクリプトくらい、置くだけ置いといてくれてもいいのにね。(どのみちそれの実行は結局難儀はするけれど、存在を当てに出来るだけマシ。)

Windows 公式 MeCab + MSYS という前提で使う用途での最小限の書き換え:

mecab-config
  1 #!/bin/sh
  2 
  3 prefix="c:/Program Files (x86)/MeCab"  #/usr
  4 exec_prefix=${prefix}
  5 exec_prefix_set=no
  6 
  7 usage()
  8 {
  9     cat <<EOF
 10 Usage: mecab-config [OPTIONS]
 11 
 12 Options:
 13   [--cxx]
 14   [--prefix[=DIR]]
 15   [--exec-prefix[=DIR]]
 16   [--libs]
 17   [--cflags]
 18   [--dicdir]
 19   [--libexecdir]
 20   [--sysconfdir]
 21   [--libs-only-L]
 22   [--libs-only-l]
 23   [--inc-dir]
 24   [--help]
 25   [--version]
 26 EOF
 27 
 28     exit $1
 29 }
 30 
 31 if test $# -eq 0; then
 32     usage 1
 33 fi
 34 
 35 cflags=false
 36 libs=false
 37 
 38 while test $# -gt 0; do
 39     case "$1" in
 40     -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
 41     *) optarg= ;;
 42     esac
 43 
 44     case "$1" in
 45     --cxx)
 46        echo g++
 47        ;;
 48        
 49     --cc)
 50        echo gcc
 51        ;;
 52        
 53     --prefix=*)
 54 	prefix=$optarg
 55         if test $exec_prefix_set = no ; then
 56           exec_prefix=$optarg
 57         fi
 58 	;;
 59 
 60     --prefix)
 61 	echo $prefix
 62 	;;
 63 
 64     --exec-prefix=*)
 65 	exec_prefix=$optarg
 66 	exec_prefix_set=yes
 67 	;;
 68 
 69     --exec-prefix)
 70 	echo $exec_prefix
 71 	;;
 72 
 73     --version)
 74 	echo 0.996
 75 	exit 0
 76 	;;
 77 
 78     --help)
 79 	usage 0
 80 	;;
 81 
 82     --cflags)
 83         if test ${prefix}/include != /usr/include ; then
 84           includes=-I${prefix}/include
 85         fi
 86         echo $includes
 87        	;;
 88 
 89     --libs)
 90        	echo -L${exec_prefix}/lib -lmecab -lstdc++
 91        	;;
 92 
 93     --dicdir)
 94        	#echo ${exec_prefix}/lib/mecab/dic
 95        	echo ${exec_prefix}/dic
 96        	;;
 97 	
 98     --inc-dir)
 99         echo ${prefix}/include
100 	;;
101     
102     --libs-only-L)
103         echo ${exec_prefix}/lib
104 	;;
105 	
106     --libs-only-l)
107         echo -lmecab -lstdc++ | sed s/-l//g;
108 	;;
109 
110     --libexecdir)
111        	echo /usr/libexec/mecab
112        	;;
113 	
114     --sysconfdir)
115        	echo ${prefix}/etc
116        	;;
117 
118     *)
119 	usage
120 	exit 1
121 	;;
122     esac
123     shift
124 done
125 
126 exit 0

–prefix、–exec-prefix、–sysconfdir、–dicdir だけならこれで動く、かな、おそらく。

こいつはこれを前提にするように書き換えた。「MSYS からの利用を想定」すると少しヘンチクリンなことをする必要はあるんだけれど。(どういうことかはソース見てちょ。)