From: nobu.nakada@... Date: 2000-07-13T07:35:09+09:00 Subject: [ruby-dev:10306] Re: environment variables なかだです。 At Tue, 11 Jul 2000 15:28:41 +0900, Nobuyoshi-Nakada wrote: > > : それと、Win95/98 だとあまり環境変数を作られてもうれしくない、どっちか > > :というとバイナリのインストールされているディレクトリからの相対で見てくれ > > :た方がいい、ということもあるようです。 > > > > それはわからないでもないけど, これは rbconfig.rb にもからん > > でくるのでたぶんもうちょっと考える必要があります. > > 現在 rbconfig.rb で得られる Config::CONFIG['sitedir'] 等の値 > > は静的に make 時に決まってしまうためこれをなんとかしないと, > > あとから拡張ライブラリをインストールするときに困ると思います. > > うーん、どっちかというとこっちの方が問題かもしれません。スクリプトレベ > ルでインタプリタ自身のパス名って知る方法ないですよね。 これは rbconfig.rb からの相対にすることでなんとかできそうな気 がしてきました。 いっぺんパッチを整理してみます。 * Windows と DJGPP 環境で、 $(prefix) 以下の make 時に決まる ディレクトリを実行ファイルからの相対パスで見るようにする * このとき RUBYLIB_PREFIX は見ない * prefix は空にしておく(cygwin は configure に --prefix= を付 ける) * prefix が空のとき、Config["prefix"] を rbconfig.rb のパスか ら実行時に決定する というところです。 Index: mkconfig.rb =================================================================== RCS file: /home/cvs/ruby/mkconfig.rb,v retrieving revision 1.4 diff -u -2 -p -r1.4 mkconfig.rb --- mkconfig.rb 2000/06/19 03:37:52 1.4 +++ mkconfig.rb 2000/07/12 22:21:03 @@ -73,7 +73,20 @@ if not has_version end +if prefix = v_fast.grep(/"prefix"/)[0] and /""$/ =~ prefix + prefix = Regexp.quote(RUBY_VERSION.sub(/\.\d+$/,'')) + '/' + Regexp.quote(RUBY_PLATFORM) + print [ + TOPDIR = __FILE__.sub(%r'/lib/ruby/#{prefix}/[^/]*\\Z', '') +] +else + prefix = nil +end + v_fast.collect! do |x| if /"prefix"/ === x - x.sub(/= /, '= DESTDIR + ') + if prefix + x.sub(/= (.*)/, '= (prefix = DESTDIR + \1).empty? ? TOPDIR : prefix') + else + x.sub(/= /, '= DESTDIR + ') + end else x Index: ruby.c =================================================================== RCS file: /home/cvs/ruby/ruby.c,v retrieving revision 1.25 diff -u -2 -p -w -r1.25 ruby.c --- ruby.c 2000/07/07 03:20:52 1.25 +++ ruby.c 2000/07/12 21:57:46 @@ -889,11 +889,11 @@ ruby_libpath() #elif defined(DJGPP) extern char *__dos_argv0; - strcpy(libpath, __dos_argv0); + strncpy(libpath, __dos_argv0, FILENAME_MAX); #endif p = strrchr(libpath, '\\'); if (p) { *p = 0; - if (!strcasecmp(p-4, "\\bin")) - p -= 4; + if (p-libpath > 3 && !strcasecmp(p-4, "\\bin")) + p[-4] = 0; } else { strcpy(libpath, "."); @@ -901,5 +901,4 @@ ruby_libpath() } - strcpy(p, "\\lib"); #if defined(__CYGWIN32__) p = (char *)malloc(strlen(libpath)+10); @@ -910,5 +909,8 @@ ruby_libpath() free(p); #else - for (p = libpath; *p; p++) +#ifndef CharNext /* defined as CharNext[AW] on Windows. */ +#define CharNext(p) ((p) + 1) +#endif + for (p = libpath; *p; p = CharNext(p)) if (*p == '\\') *p = '/'; @@ -921,4 +923,14 @@ void ruby_prog_init() { +#if defined(_WIN32) || defined(DJGPP) + char *libpath = ruby_libpath(); + int prefix_len = strlen(libpath); + +#define ADDPATH(p) (strncpy(libpath + prefix_len, (p), FILENAME_MAX - prefix_len), \ + rb_ary_unshift(rb_load_path, rb_str_new2(libpath))) +#else +#define ADDPATH(p) addpath(p) +#endif + init_ids(); @@ -932,19 +944,16 @@ ruby_prog_init() rb_define_readonly_variable("$-l", &do_line); - addpath(RUBY_LIB); -#if defined(_WIN32) || defined(DJGPP) - addpath(ruby_libpath()); -#endif + ADDPATH(RUBY_LIB); - addpath(RUBY_ARCHLIB); + ADDPATH(RUBY_ARCHLIB); #ifdef RUBY_THIN_ARCHLIB - addpath(RUBY_THIN_ARCHLIB); + ADDPATH(RUBY_THIN_ARCHLIB); #endif - addpath(RUBY_SITE_LIB); - addpath(RUBY_SITE_LIB2); - addpath(RUBY_SITE_ARCHLIB); + ADDPATH(RUBY_SITE_LIB); + ADDPATH(RUBY_SITE_LIB2); + ADDPATH(RUBY_SITE_ARCHLIB); #ifdef RUBY_SITE_THIN_ARCHLIB - addpath(RUBY_SITE_THIN_ARCHLIB); + ADDPATH(RUBY_SITE_THIN_ARCHLIB); #endif Index: win32/config.h =================================================================== RCS file: /home/cvs/ruby/win32/config.h,v retrieving revision 1.7 diff -u -2 -p -w -r1.7 config.h --- win32/config.h 2000/05/16 15:50:48 1.7 +++ win32/config.h 2000/07/12 22:05:07 @@ -41,10 +41,10 @@ #define DLEXT ".so" #define DLEXT2 ".dll" -#define RUBY_LIB "/usr/local/lib/ruby/1.5" -#define RUBY_SITE_LIB "/usr/local/lib/ruby/site_ruby" -#define RUBY_SITE_LIB2 "/usr/local/lib/ruby/site_ruby/1.5" +#define RUBY_LIB "/lib/ruby/1.5" +#define RUBY_SITE_LIB "/lib/ruby/site_ruby" +#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/1.5" #define RUBY_PLATFORM "i386-mswin32" -#define RUBY_ARCHLIB "/usr/local/lib/ruby/1.5/i386-mswin32" -#define RUBY_SITE_ARCHLIB "/usr/local/lib/ruby/site_ruby/1.5/i386-mswin32" +#define RUBY_ARCHLIB "/lib/ruby/1.5/i386-mswin32" +#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/1.5/i386-mswin32" #define SIZEOF_INT 4 Index: win32/config.status =================================================================== RCS file: /home/cvs/ruby/win32/config.status,v retrieving revision 1.12 diff -u -2 -p -w -r1.12 config.status --- win32/config.status 2000/05/31 03:10:07 1.12 +++ win32/config.status 2000/07/12 22:05:07 @@ -10,5 +10,5 @@ s%@LDFLAGS@%-nologo -Ox%g s%@LIBS@%user32.lib advapi32.lib wsock32.lib%g s%@exec_prefix@%${prefix}%g -s%@prefix@%/usr/local%g +s%@prefix@%%g s%@program_transform_name@%s,x,x,%g s%@bindir@%${exec_prefix}/bin%g -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦