[#18440] racc segv revisited — "Akinori MUSHA" <knu@...>

 次のバグの件なんですが、現時点では原因究明を含めて未解決という

24 messages 2002/10/02
[#18617] Re: racc segv revisited — "Akinori MUSHA" <knu@...> 2002/11/02

At Wed, 2 Oct 2002 23:19:59 +0900,

[ruby-dev:18588] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib: ext/extmk.rb(78) : The unnecessary error when installing by bccwin32 is controlled.

From: nobu.nakada@...
Date: 2002-10-27 17:15:19 UTC
List: ruby-dev #18588
なかだです。

At Mon, 28 Oct 2002 00:59:44 +0900,
WATANABE Hirofumi wrote:
> >   Log:
> >     ext/extmk.rb(78) : The unnecessary error when installing by bccwin32  is controlled. 
> 
> all:と同じように
> install: Makefile
> とすればbccwin32専用にする必要はありません。
> こういう専用の処理を入れるのは最後の手段にしましょう。

install:だけ後から適当に付け足したところからしてダメくさいので、
ダミーのMakefileを作る関数を別にしたほうがよさそうです。という
かmakerulesに余計なものを詰め込みすぎ。

> >     lib/mkmf.rb(773) : Also in the case of bccwin32, the path was added.
> 
> $nmakeは
> 
> case
> when $mswin
>   $nmake = ?m if /nmake/i =~ $make
> when $bccwin
>   $nmake = ?b if /\bbcc/i =~ $make or /\bbcc/i =~ find_executable0($make)
> end
> 
> となっているので$nmake||$bccwinとする必要はないはずです。
> それともc:\boarland\bcc55とは全然違う名前のディレクトリにイ
> ンストールしてるんでしょうか?

そうであれば、extmk.rbのほうも修正する必要があります。

> だとするとmake -hかなにか実行して判断するしかないかな。

あるいは、makeと同じディレクトリにCCがあるかとか、bccwin32のと
きは無条件に$nmake = ?bにするか。


Index: ext/extmk.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/extmk.rb,v
retrieving revision 1.10
diff -u -2 -p -r1.10 extmk.rb
--- ext/extmk.rb	27 Oct 2002 09:04:55 -0000	1.10
+++ ext/extmk.rb	27 Oct 2002 09:38:40 -0000
@@ -75,5 +75,5 @@ def extmake(target)
     else
       open("./Makefile", "w") {|f|
-        f.print configuration($srcdir), makerules(nil), "install:\n"
+        f.print dummy_makefile($srcdir)
       }
     end
Index: lib/mkmf.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v
retrieving revision 1.112
diff -u -2 -p -r1.112 mkmf.rb
--- lib/mkmf.rb	27 Oct 2002 09:04:55 -0000	1.112
+++ lib/mkmf.rb	27 Oct 2002 17:02:12 -0000
@@ -446,8 +446,9 @@ end
 def find_executable0(bin, path = nil)
   path = (path || ENV['PATH']).split(File::PATH_SEPARATOR)
-  bin += Config::CONFIG['EXEEXT']
+  ext = config_string('EXEEXT')
   file = nil
   path.each do |dir|
     return file if File.executable?(file = File.join(dir, bin))
+    return file if ext and File.executable?(file << ext)
   end
   nil
@@ -581,52 +582,6 @@ INSTALL_DATA = $(RUBY) -r ftools -e 'Fil
 end
 
-def makerules(target, target_prefix = "")
-  mk = []
-  if target
-    mk << %{
-target_prefix = #{target_prefix}
-LOCAL_LIBS = #{$LOCAL_LIBS}
-LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}
-OBJS = #{$objs}
-TARGET = #{target}
-DLLIB = $(TARGET).#{$static ? $LIBEXT : CONFIG['DLEXT']}
-}
-    if $extmk
-      mk << %{
-RUBYCOMMONDIR = $(rubylibdir)
-RUBYLIBDIR    = $(rubylibdir)$(target_prefix)
-RUBYARCHDIR   = $(archdir)$(target_prefix)
-}
-    else
-      mk << %{
-RUBYCOMMONDIR = $(sitedir)$(target_prefix)
-RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
-RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
-}
-    end
-    mk << %{
-all:		$(DLLIB)
-
-clean:
-		@$(RM) $(TARGET).lib $(TARGET).exp $(TARGET).il? $(TARGET).tds $(TARGET).map
-}
-  else
-    mk << %{
-all:		Makefile
-
-clean:
-}
-  end
-  mk << %{\
-		@$(RM) *.#{$OBJEXT} *.so *.sl *.#{$LIBEXT} $(DLLIB)
-		@$(RM) *.pdb *.bak $(CLEANFILES)
-
-distclean:	clean
-		@$(RM) Makefile extconf.h conftest.* mkmf.log
-		@$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
-
-realclean:	distclean
-
-}
+def dummy_makefile(srcdir)
+  configuration(srcdir) << "all:\ninstall:\n" << CLEANINGS
 end
 
@@ -637,8 +592,8 @@ def create_makefile(target, srcprefix = 
   rm_f "conftest*"
   if CONFIG["DLEXT"] == $OBJEXT
-    for lib in $libs.split
+    for lib in libs = $libs.split
       lib.sub!(/-l(.*)/, %%"lib\\1.#{$LIBEXT}"%)
     end
-    $defs.push(format("-DEXTLIB='%s'", $libs.split.join(",")))
+    $defs.push(format("-DEXTLIB='%s'", libs.join(",")))
   end
 
@@ -704,6 +659,33 @@ DEFFILE = #{deffile}
 CLEANFILES = #{cleanfiles.join(' ')}
 DISTCLEANFILES = #{distcleanfiles.join(' ')}
+
+target_prefix = #{target_prefix}
+LOCAL_LIBS = #{$LOCAL_LIBS}
+LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}
+OBJS = #{$objs}
+TARGET = #{target}
+DLLIB = $(TARGET).#{$static ? $LIBEXT : CONFIG['DLEXT']}
+}
+  if $extmk
+    mfile.print %{
+RUBYCOMMONDIR = $(rubylibdir)
+RUBYLIBDIR    = $(rubylibdir)$(target_prefix)
+RUBYARCHDIR   = $(archdir)$(target_prefix)
+}
+  else
+    mfile.print %{
+RUBYCOMMONDIR = $(sitedir)$(target_prefix)
+RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
+RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
+}
+  end
+  mfile.print %{
+all:		$(DLLIB)
+
+clean::
+		@$(RM) "$(TARGET).{lib,exp,il?,tds,map}" $(DLLIB)
+		@$(RM) "*.{#{$OBJEXT},#{$LIBEXT},s[ol],pdb,bak}"
 }
-  mfile.print makerules(target, target_prefix)
+  mfile.print CLEANINGS
   dirs = []
   unless $static
@@ -814,5 +796,7 @@ when $mswin
   $nmake = ?m if /nmake/i =~ $make
 when $bccwin
-  $nmake = ?b if /\bbcc/i =~ $make or /\bbcc/i =~ find_executable0($make)
+  $nmake = ?b if /\bbcc/i =~ $make or
+    find_executable0(Shellwords.shellwords(Config::CONFIG["CC"])[0],
+		     File.dirname(find_executable0($make)))
 end
 
@@ -863,2 +847,13 @@ LINK_SO = config_string('LINK_SO') ||
 LIBPATHFLAG = config_string('LIBPATHFLAG') || ' -L%s'
 LIBARG = config_string('LIBARG') || '-l%s'
+
+CLEANINGS = "
+clean::
+		@$(RM) $(CLEANFILES)
+
+distclean::	clean
+		@$(RM) Makefile extconf.h conftest.* mkmf.log
+		@$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
+
+realclean::	distclean
+"


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread