Index: Makefile.in
===================================================================
RCS file: /cvs/ruby/src/ruby/Makefile.in,v
retrieving revision 1.68
diff -U2 -p -d -r1.68 Makefile.in
--- Makefile.in	7 Apr 2004 01:43:26 -0000	1.68
+++ Makefile.in	22 May 2004 02:28:35 -0000
@@ -118,24 +118,11 @@ $(LIBRUBY_SO):
 				$(LIBRUBY_ALIASES) || true
 
-fake.rb:	Makefile
-		@echo ' \
-		class Object; \
-		  CROSS_COMPILING = RUBY_PLATFORM; \
-		  remove_const :RUBY_PLATFORM; \
-		  remove_const :RUBY_VERSION; \
-		  RUBY_PLATFORM = "@arch@"; \
-		  RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"; \
-		end; \
-		if RUBY_PLATFORM =~ /mswin|bccwin|mingw/; \
-		  class File; \
-		    remove_const :ALT_SEPARATOR; \
-		    ALT_SEPARATOR = "\\"; \
-		  end; \
-		end; \
-		' > $@
+cross-compiling.rb:	cross-compiling.rb.in
+
+$(arch)-ruby: wrapper.sh.in
 
 Makefile:	$(srcdir)/Makefile.in
 
-$(MKFILES): config.status $(srcdir)/common.mk
+$(MKFILES) cross-compiling.rb $(arch)-ruby: config.status $(srcdir)/common.mk
 		MAKE=$(MAKE) $(SHELL) ./config.status
 		@{ \
@@ -170,5 +157,5 @@ clean-local::
 
 distclean-local::
-	@$(RM) ext/config.cache $(RBCONFIG)
+	@$(RM) ext/config.cache $(RBCONFIG) cross-compiling.rb $(arch)-ruby
 
 ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)
Index: common.mk
===================================================================
RCS file: /cvs/ruby/src/ruby/common.mk,v
retrieving revision 1.8
diff -U2 -p -d -r1.8 common.mk
--- common.mk	27 Apr 2004 05:43:36 -0000	1.8
+++ common.mk	22 May 2004 01:44:01 -0000
@@ -104,5 +104,5 @@ clean: clean-ext clean-local
 clean-local::
 	@$(RM) $(OBJS) $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)
-	@$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(PREP) $(ARCHFILE)
+	@$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(ARCHFILE)
 clean-ext:
 	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(EXTMK_ARGS) clean
Index: configure.in
===================================================================
RCS file: /cvs/ruby/src/ruby/configure.in,v
retrieving revision 1.234
diff -U2 -p -d -r1.234 configure.in
--- configure.in	20 May 2004 04:34:07 -0000	1.234
+++ configure.in	22 May 2004 02:26:01 -0000
@@ -1112,6 +1112,6 @@ fi
 
 if test x"$cross_compiling" = xyes; then
-  test x"$MINIRUBY" = x && MINIRUBY="${RUBY-ruby} -I`pwd` -rfake"
-  PREP=fake.rb
+  test x"$MINIRUBY" = x && MINIRUBY="${RUBY-ruby} \"-I`pwd`\" -rcross-compiling"
+  PREP="cross-compiling.rb"
   RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
 else
@@ -1486,6 +1486,13 @@ fi
 
 AC_CONFIG_FILES($FIRSTMAKEFILE)
+if test x"$cross_compiling" = xyes; then
+  AC_CONFIG_FILES($PREP)
+  AC_CONFIG_FILES(${arch}-ruby:wrapper.sh.in, [chmod +x "${arch}-ruby"], [arch=$arch])
+  PREP="$PREP ${arch}-ruby"
+fi
 AC_CONFIG_FILES(Makefile, [{
-	echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
+	echo
+	test x"$EXEEXT" = x ||
+	  sed -n ['s/^\([^: ]*\)\(\$(EXEEXT)\):.*/\1: \1\2/p'] ${srcdir}/common.mk
 	test "$RUBY_INSTALL_NAME$EXEEXT" = ruby || echo 'ruby: $(PROGRAM);'
 	sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk
Index: cross-compiling.rb.in
===================================================================
RCS file: cross-compiling.rb.in
diff -N cross-compiling.rb.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cross-compiling.rb.in	21 May 2004 09:17:18 -0000
@@ -0,0 +1,14 @@
+# -*- ruby -*-
+class Object
+  CROSS_COMPILING = RUBY_PLATFORM
+  remove_const :RUBY_PLATFORM
+  remove_const :RUBY_VERSION
+  RUBY_PLATFORM = "@arch@"
+  RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"
+end
+if RUBY_PLATFORM =~ /mswin|bccwin|mingw/
+  class File
+    remove_const :ALT_SEPARATOR
+    ALT_SEPARATOR = "\\"
+  end
+end
Index: wrapper.sh.in
===================================================================
RCS file: wrapper.sh.in
diff -N wrapper.sh.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ wrapper.sh.in	22 May 2004 02:02:19 -0000
@@ -0,0 +1,20 @@
+#!/bin/sh
+path=`expr "$0" : '\(.*\)/.*'`
+case "$path" in
+  */bin) path=`expr "$0" : '\(.*\)/bin'`;;
+esac
+case "$path" in
+  /*) ;;
+  *)
+    pwd="`pwd`"
+    if [ "$pwd" = / ]; then pwd=""; fi
+    path="$pwd/$path"
+    ;;
+esac
+archdir="$path/lib/@MAJOR@.@MINOR@/@arch@"
+[ -d "$archdir" ] || archdir="$path"
+RUBYLIB="$archdir${RUBYLIB+:$RUBYLIB}"
+RUBYOPT="rcross-compiling${RUBYOPT+ $RUBYOPT}"
+RUBY="${RUBY-ruby}"
+export RUBYLIB RUBYOPT RUBY
+exec $RUBY -I"$archdir" -rcross-compiling "$@"
