1+ require 'stringio'
2+ require 'zlib'
3+
14MRuby ::Gem ::Specification . new ( 'picoruby-shell' ) do |spec |
25 spec . license = 'MIT'
36 spec . author = 'HASUMI Hitoshi'
@@ -9,6 +12,7 @@ MRuby::Gem::Specification.new('picoruby-shell') do |spec|
912 spec . add_dependency 'picoruby-editor'
1013 spec . add_dependency 'picoruby-sandbox'
1114 spec . add_dependency 'picoruby-env'
15+ spec . add_dependency 'picoruby-crc'
1216 if build . posix?
1317 if build . vm_mrubyc?
1418 spec . add_dependency ( 'picoruby-dir' )
@@ -44,7 +48,7 @@ MRuby::Gem::Specification.new('picoruby-shell') do |spec|
4448 mrbc . run ( f , t . prerequisites [ 0 ] , "executable_#{ t . name . pathmap ( "%n" ) . gsub ( '-' , '_' ) } " , cdump : false )
4549 end
4650 end
47- executable_mrbfiles << mrbfile
51+ executable_mrbfiles << { mrbfile : mrbfile , rbfile : rbfile }
4852 objfile = "#{ build_dir } /shell_executables/#{ rbfile . pathmap ( '%n' ) } .o"
4953 file objfile => mrbfile
5054 build . libmruby_objs << objfile
@@ -58,15 +62,22 @@ MRuby::Gem::Specification.new('picoruby-shell') do |spec|
5862 end
5963 open ( t . name , 'w' ) do |f |
6064 executable_mrbfiles . each do |vm_code |
61- Rake ::FileTask [ vm_code ] . invoke
62- f . puts "#include \" #{ vm_code } \" "
65+ Rake ::FileTask [ vm_code [ :mrbfile ] ] . invoke
66+ f . puts "#include \" #{ vm_code [ :mrbfile ] } \" "
6367 end
6468 f . puts
6569 f . puts "static shell_executables executables[] = {"
6670 executable_mrbfiles . each do |vm_code |
67- basename = File . basename ( vm_code , ".c" )
71+ sio = StringIO . new ( "hoge" , 'w+' )
72+ sio . set_encoding ( 'ASCII-8BIT' )
73+ mrbc . compile_options = "--remove-lv -o-"
74+ mrbc . run ( sio , vm_code [ :rbfile ] , "" , cdump : false )
75+ sio . rewind
76+ crc = Zlib . crc32 ( sio . read . chomp )
77+ sio . close
78+ basename = File . basename ( vm_code [ :mrbfile ] , ".c" )
6879 dirname = pathmap . find { _1 [ :basename ] == basename } [ :dir ]
69- line = " {\" #{ dirname } /#{ basename } \" , executable_#{ basename . gsub ( '-' , '_' ) } },"
80+ line = " {\" #{ dirname } /#{ basename } \" , executable_#{ basename . gsub ( '-' , '_' ) } , #{ crc } },"
7081 f . puts line
7182 end
7283 f . puts " {NULL, NULL} /* sentinel */"
0 commit comments