〜2001年2月上旬〜
% tar cfv foo.tar.bz2 foo --bzip2 tar: option `--bzip2' requires an argument Try `tar --help' for more information. % tar cfv foo.tar.bz2 foo --bzip2= foo
% tar cfv foo.tar.bz2 foo --use-compress-program=bzip2 foo--us=bzip2まで省略可能。
/usr/include/mingw/sys/types.h: ... #ifdef __MSVCRT__ typedef unsigned int _dev_t; #else typedef short _dev_t; #endif ... /usr/include/mingw/sys/stat.h: ... struct _stat { _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */ _ino_t st_ino; /* Always zero ? */ _mode_t st_mode; /* See above constants */ ...libmingw32.aのdirent.cが-D__MSVCRT__でコンパイルされてないから、 dirent.cの
if (!S_ISDIR (statDir.st_mode)) { /* Error, stat reports not a directory. */ errno = ENOTDIR; return (DIR *) 0; }で、st_modeに正しくアクセスできなくなる。
% mkdir vrswin010128 % cd vrswin010128 % lha xt /hoge/vrswin010128.lzh % mkdir cygwin mingw % cd cygwin % ruby -rfake_TARGET -s ../extconf.rb -target=i386-cygwin % make % upx *.so % make site-install % cd ../mingw % ruby -rfake_TARGET -s ../extconf.rb -target=i386-mingw32 % make % upx *.so % make site-install % cd .. % cat >../vrswin.contents DOC=Files.txt Readme.rd.* dtest.rb test*.rb CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/swin.so % make -f ../Makefile.pack PACKAGE=vrswin VERSION=010128 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=vrswin VERSION=010128 TARGET=i386-mingw32
% mkdir vruby010125 % cd vruby010125 % lha xt /hoge/vruby010125.lzh % cp -av vr ~/dist/i386-cygwin/usr/local/lib/ruby/site_ruby/1.6 % cp -av vr ~/dist/i386-mingw32/usr/local/lib/ruby/site_ruby/1.6 % cat >../vruby.contents DOC=DLLManager.rb Files.txt Readme.rd.* tests vrinstall.rb CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/vr/* % make -f ../Makefile.pack PACKAGE=vruby VERSION=010125 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=vruby VERSION=010125 TARGET=i386-mingw32
% tar xfvz cygwin-1.1.8-2-src.tar.gz % tar xfvz gcc-2.95.2-7-src.tar.gz % mkdir build % cd build % lndir ../cygwin-1.1.8-2 % mkdir gcc libio libstdc++ % for i in gcc libstdc++ libio;do mkdir $i;cd $i;\ lndir ../../gcc-2.95.2-7/$i;cd ..;done % mkdir obj % cd obj % CFLAGS=-Os CXXFLAGS=-Os ../configure --target=i686-pc-cygwin \ --prefix=/usr/local/cygwin --enable-languages=c,c++ % time make |& tee make.log ... make 2>& 1 3605.69s user 316.80s system 94% cpu 1:08:50.54 total tee make.log 0.11s user 0.91s system 0% cpu 1:08:50.46 total % make installlndirが面倒なら
% tar xfvz cygwin-1.1.8-2-src.tar.gz % tar xfvz gcc-2.95.2-7-src.tar.gz % cd cygwin-1.1.8-2 % mv ../gcc-2.95.2-7/{gcc,libstdc++,libio} . % mkdir obj % cd obj % <あとは同じ>でもいい。
% ./ruby -ve 'File.symlink "ruby.exe", "hoge.exe"' ruby 1.6.2 (2001-02-02) [i386-msdosdjgpp] % ls -l hoge.exe -rwxr-xr-x 1 watanabe ruby 2048 Feb 3 16:46 hoge.exe % ./hoge -v ruby 1.6.2 (2001-02-02) [i386-msdosdjgpp]でもできるのは.exeだけ。
% tar xfvz uconv-0.4.5.tar.gz % cd uconv % mkdir cygwin mingw % cd cygwin % ruby -rfake_TARGET -s ../extconf.rb -target=i386-cygwin % make % upx *.so % make site-install % cd ../mingw % ruby -rfake_TARGET -s ../extconf.rb -target=i386-mingw32 % make % upx *.so % make site-install % cd .. % cat >../uconv.contents DOC=MANIFEST README* samples % make -f ../Makefile.pack PACKAGE=uconv VERSION=0.4.5 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=uconv VERSION=0.4.5 TARGET=i386-mingw32
% tar xfvz tmail-0.8.18.tar.gz % cd tmail-0.8.18 % ruby -rfake_TARGET -s setup.rb -target=i386-cygwin config \ --ruby-path=/usr/local/bin/ruby % ruby -rfake_TARGET -s setup.rb -target=i386-cygwin setupここで破綻。そろそろsetup.rbをまじめに読むか。
% rm config.save % i386-cygwin-ruby setup.rb config \ --ruby-path=/usr/local/bin/i386-cygwin-ruby % i386-cygwin-ruby setup.rb setup % upx ext/*/*.so % i386-cygwin-ruby setup.rb installわらわらとインストールされる。
DOC=LGPL README.* doc.* sample CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/tmail/* \ usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/tmail/*としとくか。
% make -f ../Makefile.pack PACKAGE=tmail VERSION=0.8.18 TARGET=i386-cygwin
% i386-cygwin-ruby setup.rb clean % rm config.save ext/*/Makefile ext/*/*.def % i386-mingw32-ruby setup.rb config \ --ruby-path=/usr/local/bin/i386-mingw32-ruby \ --without=ext/cparse,ext/cscan,lib/amstd,lib/raccrt,lib/strscan % i386-mingw32-ruby setup.rb setup % rm ext/*/*.so % i386-mingw32-ruby setup.rb install % make -f ../Makefile.pack PACKAGE=tmail VERSION=0.8.18 TARGET=i386-mingw32
% time c:/usr/local/bin/ruby -v -rkconv -ep ruby 1.6.2 (2001-02-02) [i386-mingw32] c:/usr/local/bin/ruby -v -rkconv -ep 0.00s user 0.00s system 0% cpu 2.580 total % time ruby -v -rkconv -ep ruby 1.6.2 (2001-02-02) [i386-cygwin] ruby -v -rkconv -ep 0.00s user 0.00s system 0% cpu 0.280 totalkconvですらこんなに差がある。何の違いだろう?
% time c:/usr/local/bin/ruby -v -rjcode -ep ruby 1.6.2 (2001-02-02) [i386-mingw32] Warning: $KCODE is NONE. c:/usr/local/bin/ruby -v -rjcode -ep 0.00s user 0.00s system 0% cpu 8.840 total % time ruby -v -rjcode -ep ruby 1.6.2 (2001-02-02) [i386-cygwin] Warning: $KCODE is NONE. ruby -v -rjcode -ep 0.00s user 0.00s system 0% cpu 0.330 totalどうも、scriptのparseにものすごく時間がかかってるようだ。
% time c:/usr/local/bin/ruby -v -wc c:/usr/local/lib/ruby/1.6/jcode.rb ruby 1.6.2 (2001-02-02) [i386-mingw32] Syntax OK c:/usr/local/bin/ruby -v -wc c:/usr/local/lib/ruby/1.6/jcode.rb \ 0.00s user 0.00s system 0% cpu 8.840 totalあ、cygwin上のshellから実行すると遅くなるようだ。うーむ。
C:\usr\local\bin>c:\cygwin\bin\time ./ruby -v -wc ../lib/ruby/1.6/jcode.rb ruby 1.6.2 (2001-02-02) [i386-mingw32] Syntax OK 0.00user 0.00system 0:00.77elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+0minor)pagefaults 0swaps
% CC='i686-pc-cygwin-gcc -bmingw' \ AR='i686-pc-cygwin-ar rc' \ RANLIB=i686-pc-cygwin-ranlib \ prefix=/usr/local/mingw \ ./configure % make % make install
% tar xfvz ruby-zlib-0.4.0.tar.gz % cd ruby-zlib-0.4.0 % mkdir cygwin mingw % cd cygwin % i386-cygwin-ruby ../extconf.rb % make % upx zlib.so % make site-install % cd ../mingw % i386-mingw32-ruby ../extconf.rb % make % upx zlib.so % make site-install % cd .. % cat >../ruby-zlib.contents DOC= ChangeLog MANIFEST zlib.*.html CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/zlib.so % make -f ../Makefile.pack PACKAGE=ruby-zlib VERSION=0.4.0 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=ruby-zlib VERSION=0.4.0 TARGET=i386-mingw32
% unzip -a rubywin-0.0.2.6.zip % cd rubywin % mkdir cygwin mingw % cd cygwin % i386-cygwin-ruby ../config.rb % make ... i686-pc-cygwin-windres --include-dir .. --define USE_WINDRES ../resource.rc resource.o ../resource.rc:6: windows.h: No such file or directory i686-pc-cygwin-windres: ../resource.rc:17: parse error make: *** [resource.o] Error 1windres問題はちょっと面倒だね。 そろそろCygwin MLで文句が出るかもしれない。
--- config.rb.orig Fri Feb 2 00:00:00 2001 +++ config.rb Sat Feb 3 23:36:07 2001 @@ -49,7 +49,7 @@ $RESCC = <<STR resource.o: $(srcdir)/resource.rc $(srcdir)/resource.h - #{CONFIG['WINDRES']} --include-dir $(srcdir) --define USE_WINDRES $(srcdir)/resource.rc resource.o + #{CONFIG['WINDRES']} --preprocessor '$(CC) -E -xc-header -DRC_INVOKE #{CONFIG["MWIN32"]||""}' --include-dir $(srcdir) --define USE_WINDRES $(srcdir)/resource.rc resource.o STR endでもう一度。
% make % i686-pc-cygwin-strip rubywin.exe % upx rubywin.exe % make install RUBYOPT1='-rfake_TARGET -s' RUBYOPT2=-target=i386-cygwin % cd ../mingw % i386-mingw32-ruby ../config.rb % make % i686-pc-cygwin-strip rubywin.exe % upx rubywin.exe % make install RUBYOPT1='-rfake_TARGET -s' RUBYOPT2=-target=i386-mingw32 % cd .. % make
% diff -u1 Makefile.in Makefile --- Makefile.in Sat May 29 23:48:25 1999 +++ Makefile Sun Feb 4 15:32:59 2001 @@ -1 +1,2 @@ +# Generated automatically from Makefile.in by configure. #なんだそれは?きっと最新はちゃんとしてるんだろう。
i686-pc-cygwin-ar rcu lib$libname.a $objs
してお茶を濁すことにした。
gconvert.c:23: iconv.h: No such file or directory gconvert.c:48: #error libiconv in use but included iconv.h not from libiconv make: *** [gconvert.o] Error 1じゃ、次はiconvだな。
% CC='i686-pc-cygwin-gcc -bmingw' \ CFLAGS=-Os \ AR=i686-pc-cygwin-ar \ NM=/usr/local/cygwin/bin/i686-pc-cygwin-nm \ RANLIB=i686-pc-cygwin-ranlib \ ./configure \ --target=i386-mingw32 \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/mingw毎度お馴染の環境変数、オプションを指定する。 NMはなぜか絶対パスかどうかのチェックが入っている。
% ls -l lib/.libs/libiconv.a -rw-r--r-- 1 watanabe ruby 646550 Feb 4 16:12 lib/.libs/libiconv.avim6とかRubyのiconv拡張ライブラリとか考えるとDLLにしてもいいかな。
In file included from gtkcolorsel.c:34: gtkintl.h:7: libintl.h: No such file or directory make: *** [gtkcolorsel.o] Error 1と言われる。先にgettextか。
make: *** No rule to make target `win32/libgdk-win32.a', needed by `gdk-1.3.dll'. Stop.先にwin32のほうをmakeしなきゃいけないのか。
% tar xfvz gnome-ruby-snapshot-20010122.tar.gz % cd gnome-ruby-snapshot-20010122/gtk
--- gtk/extconf.rb.orig Fri Jan 19 20:52:55 2001 +++ gtk/extconf.rb Sun Feb 4 20:26:29 2001 @@ -64,3 +64,3 @@ lib_ary = [] - if /cygwin/ =~ PLATFORM + if /cygwin|mingw/ =~ PLATFORM elsif /mswin32/ !~ PLATFORM
% i386-mingw32-ruby extconf.rb gtk-1.3-config.mingw % make RUBY=i386-mingw32-ruby AR=i686-pc-cygwin-ar ... global.o(.text+0x2b9):global.c: undefined reference to \ `_imp__GTK_TYPE_GDK_EVENT' global.o(.text+0x315):global.c: undefined reference to \ `_imp__GTK_TYPE_CTREE_NODE' rbgtkobject.o(.text+0x1f1):rbgtkobject.c: undefined reference to \ `_imp__GTK_TYPE_GDK_EVENT' collect2: ld returned 1 exit statusあれ?__declspecは撲滅したはずなのになあ。 gtktypebuiltins.hはawkで作るようになってるのか。 じゃscriptを直さないと。 とりあえず/usr/local/mingw/include/gtk/gtktypebuiltins.hを修正して再開。
% make RUBY=i386-mingw32-ruby AR=i686-pc-cygwin-ar % ls -l src/gtk.so -rwxr-xr-x 1 watanabe ruby 2299904 Feb 4 21:32 src/gtk.so % upx src/gtk.so % ls -l src/gtk.so -rwxr-xr-x 1 watanabe ruby 1027584 Feb 4 21:32 src/gtk.soやっとできた。iconvも含んでいるからでかいと思い込んでいたが、 g_iconv*をRuby/GTKは呼んでないから純粋にこんなもんなんだろう。 これだけで他のDLLは要らないんだからよしとする。
Gtk-ERROR **:Imcompatible build! The code using GTK+ thinks GtkWindow is of different size than it actually is in this build of GTK+. On Windows, this probably means that you have compiled your code with gcc without the -fnative-struct switch. aborting...がーん。なるほどねえ。 gtk-1.3-config.mingwに-fnative-structを追加。 もう一度makeし直してWin98上でsample/helloworld.rbがちゃんと表示されることを確認。
include ../$(PACKAGE).contentsと固定になっているからだ。gnome-*の場合gtkのみをパッキングしたい。 ちょっと考えて こうすることにした。
-include ../$(PACKAGE).contents ifndef DOC -include ../../$(PACKAGE).contents endif深いのが出たらまた追加しよう。
% cat >../../gtk.contents DOC=BUGS COPYING* ChangeLog ENVIRONMENT MANIFEST README* ToDo doc sample % make -f ../../Makefile.pack PACKAGE=gtk VERSION=20010122 TARGET=i386-mingw32cygwinはまた今度。
% CC='i686-pc-cygwin-gcc' \ CFLAGS=-Os \ AR=i686-pc-cygwin-ar \ NM=/usr/local/cygwin/bin/i686-pc-cygwin-nm \ RANLIB=i686-pc-cygwin-ranlib \ ./configure \ --target=i686-pc-cygwin \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/cygwin-local % make % make install
% tar xfvz iconv-0.4.3.tar.gz % cd iconv-0.4.3 % mkdir cygwin mingw
% cd cygwin % i386-cygwin-ruby ../extconf.rb --with-opt-dir=/usr/local/cygwin-local checking for iconv.h... yes checking for iconv() in -liconv... no checking for rb_obj_freeze()... yes checking for rb_block_given_p()... yes creating Makefile-liconvを見つけてくれない。 /usr/local/cygwin-local/include/iconv.hが
#ifndef LIBICONV_PLUG #define iconv libiconv #endifとなってるからだ。なんかよくわからん。とりあえず
--- extconf.rb.orig Thu Sep 21 05:03:37 2000 +++ extconf.rb Mon Feb 5 02:13:20 2001 @@ -9,3 +9,3 @@ if have_header("iconv.h") - have_library("iconv", "iconv") + have_library("iconv", "iconv") || have_library("iconv", "libiconv") if method(:have_func).arity != 1としてみる。
% i386-cygwin-ruby ../extconf.rb --with-opt-dir=/usr/local/cygwin-local checking for iconv.h... yes checking for iconv() in -liconv... no checking for libiconv() in -liconv... yes checking for rb_obj_freeze()... yes checking for rb_block_given_p()... yes creating Makefile % make % upx iconv.so % make site-installよさそうだ。
% cd ../mingw % i386-mingw32-ruby ../extconf.rb --with-opt-dir=/usr/local/mingw % make % upx iconv.so % make site-install
% cd .. % cat >../iconv.contents DOC=MANIFEST iconv.rlog rd.css % make -f ../Makefile.pack PACKAGE=iconv VERSION=0.4.3 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=iconv VERSION=0.4.3 TARGET=i386-mingw32あれ?以前はiconv.rdもあったよね。てゆうかrd.cssだけあっても意味がないし。 MANIFESTからもれてるのが原因かな?
% TIMEFMT='%E real %U user %S sys %P cpu' % ls -l ruby-talk.0101 -rw------- 1 watanabe ruby 5663931 Feb 2 01:11 ruby-talk.0101 % time perl -ne 'print if index($_,"HOGE")>0' ruby-talk.0101 5.92s real 5.70s user 0.37s sys 102% cpu % time perl -ne 'print if /HOGE/' ruby-talk.0101 5.92s real 5.62s user 0.36s sys 101% cpu % time ruby -ne 'print if /HOGE/' ruby-talk.0101 8.86s real 8.56s user 0.34s sys 100% cpu % time ruby -ne 'print if $_.index "HOGE"' ruby-talk.0101 14.08s real 13.60s user 0.52s sys 100% cpuなぬ?rubyの場合 indexのほうが遅い。こりゃまいったね。indexは基本的には単純なmemcmpでしかないしね。 perlはBM法を使ってるもんなあ。
% cvs -d ~ruby/cvs co eruby % cd eruby % mkdir cygwin mingw % cd cygwin % i386-cygwin-ruby ../Makefile.RB % make % i686-pc-cygwin-strip eruby.exe % upx eruby.exe % make install ... /usr/local/lib/ruby/1.6/ftools.rb:32:in `open': No such file or directory \ - "/home/watanabe/dist/i386-cygwin/usr/local/include/eruby.h" (Errno::ENOENT) from /usr/local/lib/ruby/1.6/ftools.rb:32:in `syscopy' from /usr/local/lib/ruby/1.6/ftools.rb:59:in `copy' from /usr/local/lib/ruby/1.6/ftools.rb:179:in `install' from -e:1 make: [install] Error 1 (ignored) ...あ、これはまずいね。includeはあらかじめ作っておくことにしよう。
% mkdir ~/dist/i386-{cygwin,mingw32,msdosdjgpp}/usr/local/include % make install ../eruby.h -> /home/watanabe/dist/i386-cygwin/usr/local/include/eruby.h chmod 0644 /home/watanabe/dist/i386-cygwin/usr/local/include/eruby.h
% cd ../mingw % i386-mingw32-ruby ../Makefile.RB % make % i686-pc-cygwin-strip eruby.exe % upx eruby.exe % make install
% cd .. % cat >../eruby.contents DOC=ChangeLog README.* eruby.rd CONTENTS=usr/local/bin/eruby.exe \ usr/local/man/man1/eruby.1 % make -f ../Makefile.pack PACKAGE=eruby VERSION=20001222 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=eruby VERSION=20001222 TARGET=i386-mingw32
winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES) @echo "Making version.o and winver.o";\ $(SHELL) ${word 1,$^} ${word 2,$^} ${word 3,$^} $(WINDRES) && \ touch $@ && \ $(COMPILE_CXX) -o version.o version.ccでエラーに。 windresがi686-pc-cygwin-gccを呼ぼうとするが、 今作ってるんだからあるわけがない。とりあえず一時的に
% ln -s /usr/bin/gcc ~/bin/i686-pc-cygwin-gccしてごまかす。これはすでにインストールされてる環境だとcrossといえども 気づきにくい。nativeだとgccが呼ばれるだけだからエラーにもならないし。
% tar xfvz expat-1.95.0.tar.gz % cd expat-1.95.0 % mkdir cygwin mingw % CC=i686-pc-cygwin-gcc \ NM=i686-pc-cygwin-nm \ AR=i686-pc-cygwin-ar \ RANLIB=i686-pc-cygwin-ranlib \ LD=i686-pc-cygwin-ld \ CFLAGS=-Os \ ../configure \ --target=i386-cygwin \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/cygwin-local % make % make install ... /usr/bin/ginstall -c -m 644 expat.h /usr/local/cygwin-local/include /usr/bin/ginstall: expat.h: No such file or directory make[1]: *** [install] Error 1 ...あ、srcdirに対応してないなあ。面倒なのでcygwin/lib/Makefileを書き換える。
APIHEADER = $(srcdir)/expat.h
と思ったがこれからMinGWもあるのでlib/Makefile.inを書き換える。
% cd ../mingw % CC='i686-pc-cygwin-gcc -bmingw' \ NM=i686-pc-cygwin-nm \ AR=i686-pc-cygwin-ar \ RANLIB=i686-pc-cygwin-ranlib \ LD=i686-pc-cygwin-ld \ CFLAGS=-Os \ ../configure \ --target=i386-mingw32 \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/mingw ... checking whether byte ordering is bigendian... configure: error: \ can not run test program while cross compilingあ、bigendianチェックがあったのか。ac_cv_c_bigendian=yesを追加。
% CC='i686-pc-cygwin-gcc -bmingw' \ NM=i686-pc-cygwin-nm \ AR=i686-pc-cygwin-ar \ RANLIB=i686-pc-cygwin-ranlib \ LD=i686-pc-cygwin-ld \ CFLAGS=-Os \ ac_cv_c_bigendian=yes \ ../configure \ --target=i386-mingw32 \ --host=i686-pc-cygwin \ --build=i586-pc-linux \ --prefix=/usr/local/mingw % make % make install
% tar xfvz xmlparser-0.6.1.tar.gz % cd xmlparser % mkdir cygwin mingw
% cd cygwin % i386-cygwin-ruby ../extconf.rb % make ... xmlparser.o(.text+0x15):xmlparser.c: \ undefined reference to `_imp__XML_ParserFree' ...あれ?これも_imp__か。うーむ。結局
/usr/local/cygwin-local/include/expat.h /usr/local/mingw/include/expat.hを書き換えることにした。
% make clean % make % upx *.so % make site-install
% cd ../mingw % i386-mingw32-ruby ../extconf.rb % make % upx *.so % make site-installそういえばlib/*.rbがインストールされてない。 そもそもMakefileに出てこない。 mkmf.rbがsrcdirに対応してないようだ。 明日考えよう。
% cat >../xmlparser.contents DOC=Encodings MANIFEST README* obsolete samples CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/$(TARGET)/xmlparser.so \ usr/local/lib/ruby/site_ruby/$(RUBYVER)/{\ sax.rb,xmldigest.rb,xmltree.rb,xmltreevisitor.rb,\ saxdriver.rb,xmlencoding-ja.rb,xmltreebuilder-ja.rb,\ wget.rb,xmlparser.rb,xmltreebuilder.rb} % make -f ../Makefile.pack PACKAGE=xmlparser VERSION=0.6.1 TARGET=i386-cygwin % make -f ../Makefile.pack PACKAGE=xmlparser VERSION=0.6.1 TARGET=i386-mingw32{}を使いたくなったので Makefile.packにSHELL=/bin/bashを追加した。
c:/usr/local/bin\ruby.exe
が入ってるという話。それはかなり予想外だ。 Win98ではどう頑張っても
C:\USR\LOCAL\BIN\RUBY.EXE
にしかならない。PATH=c:/usr/local/binしても同じ。
どうせ/に変換するわけだから、先にすることにした。
これで「表bin」というディレクトリに置かれていた場合にも、
正しく対応できるようになるってかなり苦しいいいわけではある。
% CFLAGS=-Os ./configure --enable-kanji ... Note: Configure has discovered that you already have xmms installed and it do not match with the given --prefix. You have xmms installed in /usr/local/bin/xmms and you chose /usr/local/bin/bin/xmms Rerun configure with the --prefix option set to the correct location of the old xmms. Or simply uninstall the old xmms.と脅しがかかる。 なんかよくわからんが--prefix=/usr/localをつけてもう一度。
% CFLAGS=-Os ./configure --enable-kanji --prefix=/usr/local % make % sudo make install % sudo ldconfig % xmms Segmentation fault あなたはXMMSのバグを見つけたようです。 http://www.xmms.org/bugs を開いてバグレポートを送ってください。どうもxmms-1.2.4j-20010104.diff.bz2をあてるとSEGVるようだ。 とりあえず最新をまた探してこよう。
% CFLAGS=-Os ./configure --enable-kanji --prefix=/usr/local % make cd . && aclocal aclocal: configure.in: 10: macro `AM_DISABLE_STATIC' not found in library aclocal: configure.in: 11: macro `AM_PROG_LIBTOOL' not found in library aclocal: configure.in: 180: macro `AM_GNU_GETTEXT' not found in library make: *** [aclocal.m4] Error 1 % ls -l --fu aclocal.m4 configure.in -rw-r--r-- 1 watanabe ruby 77183 Sat Feb 10 19:44:16 2001 aclocal.m4 -rw-r--r-- 1 watanabe ruby 14949 Sat Feb 10 19:44:17 2001 configure.inpatchをあてるタイミングでconfigure.inのほうが新しくなってしまったのが原因だ。 アルファベット的にもconfigure.inのほうが新しくなる確率は高い *1。 touchすると今度はautomakeしようとするし、あー面倒。 autoconfしちゃえばいいんだけど、どうもautoconf 2.49あたりに依存してい るらしく、なんかこれも面倒。というわけでtouch作戦を敢行。
% touch aclocal.m4 % touch Makefile.in % touch configure % touch config.status % touch stamp-h.in % makeでよさそうだ。なんでもかんでもMakefileに書くのも善し悪しだ。
bash-2.04$ mkdir c:/bin bash-2.04$ cp c:/djgpp/bin/bash.exe c:/bin/sh.exeしておく。
bash-2.04$ autoconfで実行できるが、MS-DOSプロンプト上の場合は
> bash autoconfとする。
process.c:796: too many arguments to function `getpgrp'
で止まる。configure時に
checking whether getpgrp takes no argument... no
になってしまうのが原因だがなぜだろう?できあがったconfigureを見る。 なるほど。forkしてるのか。DJGPPはdummyのforkがあったりするのでこのテス トは無意味だ。クロスじゃないけどac_cv_func_getpgrp_void=yesを指定する のがいいね。それよりはconfigure.inに入れてしまったほうがいいような気も する。
gcc -Os -I. -I. -I/dev/env/DJDIR/include -c array.c
と表示されている。/dev/env/DJDIRなんてあり? kb.infoを見るとこういうことらしい。
You can use the special `/dev/env/foo/' construct in file names to expand it into the value of the environment variable `foo' at run time. `/dev/env/foo~bar~' will expand to `bar' if `foo' is undefined, or if its value is empty.$DJDIR/includeと同じ意味ってことか。なるほどねえ。
File names which begin with `/dev/X/', where X is a drive letter, are converted to the DOS `X:/' form; this is required for running some Unix shell scripts which take apart the `PATH' variable where colons separate directories.Cygwinの/cygdriveに相当するものだ。
`PATH' to pseudo-Unix form. For example, if the original value of `PATH' is like this: PATH=c:\djgpp\bin;d:\gnu\emacs\bin then setting `PATH_SEPARATOR=:' converts it to this: PATH=/dev/c/djgpp/bin:/dev/d/gnu/emacs/binのようにPATH_SEPARATORでPATHも変化する。 なかなか面白い仕組だ。
bash-2.04$ ./ruby -e 'print ARGF.gets' /dev/env/HOME/.zshrc setenv() { export $1=$2 }これだとcommand.comとかshellに依存することなく環境変数を参照できるわけだ。