<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>MINGW32.mk</filename>
    </added>
    <added>
      <filename>cross-compile.txt</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -33,27 +33,50 @@ end
 Rake::Task[:test].prerequisites &lt;&lt; :extensions
 Rake::Task[:check_manifest].prerequisites &lt;&lt; GENERATED_NODE
 
+task :build =&gt; :extensions
+
 # gem depends on the native extension actually building
 Rake::Task[:gem].prerequisites &lt;&lt; :extensions
 
 desc &quot;Our johnson requires extensions.&quot;
-task :extensions =&gt; [:submodules, &quot;lib/johnson/spidermonkey.#{kind}&quot;]
+task :extensions =&gt; [&quot;lib/johnson/spidermonkey.#{kind}&quot;]
+
+task :spidermonkey =&gt; :submodules do
+  if ENV['CROSS']
+    Dir.chdir(&quot;vendor/spidermonkey&quot;) { sh &quot;make -f Makefile.ref OS_CONFIG=#{ENV['CROSS']}&quot; }
+  else
+    Dir.chdir(&quot;vendor/spidermonkey&quot;) { sh &quot;make -f Makefile.ref&quot; }
+  end
+end
+task :spidermonkey =&gt; &quot;vendor/spidermonkey/config/#{ENV['CROSS']}.mk&quot; if ENV['CROSS']
+
+file &quot;vendor/spidermonkey/config/MINGW32.mk&quot; =&gt; &quot;MINGW32.mk&quot; do |t|
+  File.copy(t.prerequisites.first, t.name)
+end
 
 task :submodules do
   sh &quot;git submodule init &amp;&amp; git submodule update&quot;
 end
 
-# for testing, we toss the SpiderMonkey extension in lib/johnson
-file &quot;lib/johnson/spidermonkey.#{kind}&quot; =&gt;
-  FileList[&quot;ext/spidermonkey/Makefile&quot;, &quot;ext/spidermonkey/*.{c,h}&quot;] do
+file &quot;ext/spidermonkey/spidermonkey.#{kind}&quot; =&gt;
+  [&quot;ext/spidermonkey/Makefile&quot;] + FileList[&quot;ext/spidermonkey/*.{c,h}&quot;].to_a do
   
   Dir.chdir(&quot;ext/spidermonkey&quot;) { sh &quot;make&quot; }
-  sh &quot;cp ext/spidermonkey/spidermonkey.#{kind} lib/johnson/spidermonkey.#{kind}&quot;
+end
+
+# for testing, we toss the SpiderMonkey extension in lib/johnson
+file &quot;lib/johnson/spidermonkey.#{kind}&quot; =&gt;
+  &quot;ext/spidermonkey/spidermonkey.#{kind}&quot; do |t|
+
+  File.copy(t.prerequisites.first, t.name)
 end
 
 file &quot;ext/spidermonkey/Makefile&quot; =&gt;
-  [GENERATED_NODE, &quot;ext/spidermonkey/extconf.rb&quot;] do
-  Dir.chdir(&quot;ext/spidermonkey&quot;) { ruby &quot;extconf.rb&quot; }
+  [:spidermonkey, GENERATED_NODE, &quot;ext/spidermonkey/extconf.rb&quot;] do
+  
+  dirs = (ENV['CROSS'] ? [ENV[&quot;CROSSLIB&quot;]] : []) + $:
+  command = [&quot;ruby&quot;] + dirs.map{|dir| &quot;-I#{File.expand_path dir}&quot;} + [&quot;extconf.rb&quot;]
+  Dir.chdir(&quot;ext/spidermonkey&quot;) { sh *command }
 end
 
 def jsops
@@ -81,7 +104,7 @@ def tokens
   toks.uniq
 end
 
-file GENERATED_NODE =&gt; &quot;ext/spidermonkey/immutable_node.c.erb&quot; do |t|
+file GENERATED_NODE =&gt; [&quot;ext/spidermonkey/immutable_node.c.erb&quot;, &quot;vendor/spidermonkey/jsopcode.tbl&quot;, &quot;vendor/spidermonkey/jsscan.h&quot;] do |t|
   template = ERB.new(File.open(t.prerequisites.first, 'rb') { |x| x.read })
   File.open(GENERATED_NODE, 'wb') { |f|
     f.write template.result(binding)</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -3,14 +3,16 @@ ENV[&quot;ARCHFLAGS&quot;] = &quot;-arch #{`uname -p` =~ /powerpc/ ? 'ppc' : 'i386'}&quot;
 
 require &quot;mkmf&quot;
 
-$CFLAGS &lt;&lt; &quot; -g -DXP_UNIX&quot;
+if Config::CONFIG['target_os'] == 'mingw32'
+  $libs = append_library($libs, &quot;winmm&quot;)
+  $CFLAGS &lt;&lt; &quot; -DXP_WIN -DXP_WIN32&quot;
+else
+  $CFLAGS &lt;&lt; &quot; -g -DXP_UNIX&quot;
+end
 
 spidermonkey_base_dir = &quot;../../vendor/spidermonkey&quot;
 
-# we can't even run the extconf unless Spidermonkey has built
-Dir.chdir(spidermonkey_base_dir) { system &quot;make -f Makefile.ref&quot; }
-
-spidermonkey_obj_dir = Dir[spidermonkey_base_dir + &quot;/*.OBJ&quot;].first
+spidermonkey_obj_dir = Dir[spidermonkey_base_dir + &quot;/#{ENV['CROSS'] || ''}*.OBJ&quot;].first
 
 dir_config(&quot;johnson/spidermonkey&quot;)
 </diff>
      <filename>ext/spidermonkey/extconf.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>02a2b511c648be94f37cb5f81abcbd39c74a468e</id>
    </parent>
  </parents>
  <author>
    <name>Matthew Draper</name>
    <email>matthew@trebex.net</email>
  </author>
  <url>http://github.com/jbarnette/johnson/commit/1524e7377caaf59b005ff13c73b61448aaff475d</url>
  <id>1524e7377caaf59b005ff13c73b61448aaff475d</id>
  <committed-date>2008-04-23T08:17:10-07:00</committed-date>
  <authored-date>2008-04-23T08:10:04-07:00</authored-date>
  <message>First cut of a cross-compilation process so we can build for Windows.</message>
  <tree>624419380689c4376a9de5672002705be0a23718</tree>
  <committer>
    <name>Matthew Draper</name>
    <email>matthew@trebex.net</email>
  </committer>
</commit>
