@@ -112,12 +112,184 @@ task :release => :compile do
112112 end
113113end
114114
115- MRBGEMS_ROOT = "#{ MRUBY_ROOT } /build/mrbgems"
116- if Dir . exist? ( "#{ MRBGEMS_ROOT } /mruby-cli-distpackage" )
117- import "#{ MRBGEMS_ROOT } /mruby-cli-distpackage/tasks/package.rake"
118- task :package => :release
119- else
120- task :package do
121- puts "not installed"
115+ namespace :package do
116+ require 'fileutils'
117+ require 'tmpdir'
118+ require_relative "#{ MRUBY_ROOT } /../mrblib/mruby-cli/version"
119+
120+ version = MRubyCLI ::Version ::VERSION
121+ release_dir = "releases/v#{ version } "
122+ package_dir = "packages/v#{ version } "
123+ release_path = Dir . pwd + "/../#{ release_dir } "
124+ package_path = Dir . pwd + "/../#{ package_dir } "
125+ FileUtils . mkdir_p ( package_path )
126+
127+ def check_fpm_installed?
128+ `gem list -i fpm` . chomp == "true"
129+ end
130+
131+ def check_msi_installed?
132+ `wixl --version`
133+ $?. success?
134+ end
135+
136+ def check_dmg_installed?
137+ `genisoimage --version`
138+ $?. success?
139+ end
140+
141+ def wxs_content ( version , arch )
142+ arch_wxs = case arch
143+ when "x86_64"
144+ {
145+ string : "64-bit" ,
146+ program_files_folder : "ProgramFiles64Folder" ,
147+ define : "<?define Win64 = \" yes\" ?>"
148+ }
149+ else
150+ {
151+ string : "32-bit" ,
152+ program_files_folder : "ProgramFilesFolder" ,
153+ define : "<?define Win64 = \" no\" ?>"
154+ }
155+ end
156+
157+ <<-EOF
158+ <?xml version='1.0' encoding='utf-8'?>
159+ <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
160+
161+ #{ arch_wxs [ :define ] }
162+
163+ <Product
164+ Name='mruby-cli #{ arch_wxs [ :string ] } '
165+ Id='F43E56B6-5FF2-450C-B7B7-0B12BF066ABD'
166+ Version='#{ version } '
167+ Language='1033'
168+ Manufacturer='mruby-cli'
169+ UpgradeCode='12268671-59a0-42d3-b1f2-79e52b5657a6'
170+ >
171+
172+ <Package InstallerVersion="200" Compressed="yes" Comments="comments" InstallScope="perMachine"/>
173+
174+ <Media Id="1" Cabinet="cabinet.cab" EmbedCab="yes"/>
175+
176+ <Directory Id='TARGETDIR' Name='SourceDir'>
177+ <Directory Id='#{ arch_wxs [ :program_files_folder ] } ' Name='PFiles'>
178+ <Directory Id='INSTALLDIR' Name='mruby-cli'>
179+ <Component Id='MainExecutable' Guid='3DCA4C4D-205C-4FA4-8BB1-C0BF41CA5EFA'>
180+ <File Id='mruby-cliEXE' Name='mruby-cli.exe' DiskId='1' Source='mruby-cli.exe' KeyPath='yes'/>
181+ </Component>
182+ </Directory>
183+ </Directory>
184+ </Directory>
185+
186+ <Feature Id='Complete' Level='1'>
187+ <ComponentRef Id='MainExecutable' />
188+ </Feature>
189+ </Product>
190+ </Wix>
191+ EOF
192+ end
193+
194+ def info_plist_content ( version , arch )
195+ <<-EOF
196+ <?xml version="1.0" encoding="UTF-8"?>
197+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
198+ <plist version="1.0">
199+ <dict>
200+ <key>CFBundleExecutable</key>
201+ <string>mruby-cli</string>
202+ <key>CFBundleGetInfoString</key>
203+ <string>mruby-cli #{ version } #{ arch } </string>
204+ <key>CFBundleName</key>
205+ <string>mruby-cli</string>
206+ <key>CFBundleIdentifier</key>
207+ <string>mruby-cli</string>
208+ <key>CFBundlePackageType</key>
209+ <string>APPL</string>
210+ <key>CFBundleShortVersionString</key>
211+ <string>#{ version } </string>
212+ <key>CFBundleSignature</key>
213+ <string>mrbc</string>
214+ <key>CFBundleInfoDictionaryVersion</key>
215+ <string>6.0</string>
216+ </dict>
217+ </plist>
218+ EOF
219+ end
220+
221+ def osx_setup_bash_path_script
222+ <<-EOF
223+ #!/bin/bash
224+ echo "export PATH=$PATH:/Applications/mruby-cli.app/Contents/MacOs" >> $HOME/.bash_profile
225+ source $HOME/.bash_profile
226+ EOF
227+ end
228+
229+ def log ( package_dir , version , package )
230+ puts "Writing packages #{ package_dir } /#{ version } /#{ package } "
231+ end
232+
233+ desc "create deb package"
234+ task :deb => [ :release ] do
235+ abort ( "fpm is not installed. Please check your docker install." ) unless check_fpm_installed?
236+
237+ [ "x86_64" , "i686" ] . each do |arch |
238+ release_tar_file = "mruby-cli-#{ version } -#{ arch } -pc-linux-gnu.tgz"
239+ arch_name = ( arch == "x86_64" ? "amd64" : arch )
240+ log ( package_dir , version , "mruby-cli_#{ version } _#{ arch_name } .deb" )
241+ `fpm -s tar -t deb -a #{ arch } -n mruby-cli -v #{ version } --prefix /usr/bin -p #{ package_path } #{ release_path } /#{ release_tar_file } `
242+ end
243+ end
244+
245+ desc "create rpm package"
246+ task :rpm => [ :release ] do
247+ abort ( "fpm is not installed. Please check your docker install." ) unless check_fpm_installed?
248+
249+ [ "x86_64" , "i686" ] . each do |arch |
250+ release_tar_file = "mruby-cli-#{ version } -#{ arch } -pc-linux-gnu.tgz"
251+ log ( package_dir , version , "mruby-cli-#{ version } -1.#{ arch } .rpm" )
252+ `fpm -s tar -t rpm -a #{ arch } -n mruby-cli -v #{ version } --prefix /usr/bin -p #{ package_path } #{ release_path } /#{ release_tar_file } `
253+ end
122254 end
255+
256+ desc "create msi package"
257+ task :msi => [ :release ] do
258+ abort ( "msitools is not installed. Please check your docker install." ) unless check_msi_installed?
259+ [ "x86_64" , "i686" ] . each do |arch |
260+ log ( package_dir , version , "mruby-cli-#{ version } -#{ arch } .msi" )
261+ release_tar_file = "mruby-cli-#{ version } -#{ arch } -w64-mingw32.tgz"
262+ Dir . mktmpdir do |dest_dir |
263+ Dir . chdir dest_dir
264+ `tar -zxf #{ release_path } /#{ release_tar_file } `
265+ File . write ( "mruby-cli-#{ version } -#{ arch } .wxs" , wxs_content ( version , arch ) )
266+ `wixl -v mruby-cli-#{ version } -#{ arch } .wxs && mv mruby-cli-#{ version } -#{ arch } .msi #{ package_path } `
267+ end
268+ end
269+ end
270+
271+ desc "create dmg package"
272+ task :dmg => [ :release ] do
273+ abort ( "dmg tools are not installed. Please check your docker install." ) unless check_dmg_installed?
274+ [ "x86_64" , "i386" ] . each do |arch |
275+ log ( package_dir , version , "mruby-cli-#{ version } -#{ arch } .dmg" )
276+ release_tar_file = "mruby-cli-#{ version } -#{ arch } -apple-darwin14.tgz"
277+ Dir . mktmpdir do |dest_dir |
278+ Dir . chdir dest_dir
279+ `tar -zxf #{ release_path } /#{ release_tar_file } `
280+ FileUtils . chmod 0755 , "mruby-cli"
281+ FileUtils . mkdir_p "mruby-cli.app/Contents/MacOs"
282+ FileUtils . mv "mruby-cli" , "mruby-cli.app/Contents/MacOs"
283+ File . write ( "mruby-cli.app/Contents/Info.plist" , info_plist_content ( version , arch ) )
284+ File . write ( "add-mruby-cli-to-my-path.sh" , osx_setup_bash_path_script )
285+ FileUtils . chmod 0755 , "add-mruby-cli-to-my-path.sh"
286+ `genisoimage -V mruby-cli -D -r -apple -no-pad -o #{ package_path } /mruby-cli-#{ version } -#{ arch } .dmg #{ dest_dir } `
287+ end
288+ end
289+ end
290+
123291end
292+
293+ desc "create all packages"
294+ task :package => [ "package:deb" , "package:rpm" , "package:msi" , "package:dmg" ]
295+
0 commit comments