RubyPackager 0.1.1.20091105 → 0.2.1.20101110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. data/ChangeLog +28 -0
  2. data/LICENSE +1 -1
  3. data/ReleaseInfo +3 -3
  4. data/TODO +2 -0
  5. data/bin/Release.rb +4 -2
  6. data/lib/RubyPackager/Distributors/SourceForge.rb +5 -6
  7. data/lib/RubyPackager/Installers/Gem.rb +98 -64
  8. data/lib/RubyPackager/ReleaseInfo.rb +10 -8
  9. data/lib/RubyPackager/Releaser.rb +18 -17
  10. data/lib/RubyPackager/Tools.rb +1 -1
  11. data/lib/RubyPackager/i386-cygwin/PlatformReleaser.rb +112 -0
  12. data/lib/RubyPackager/i386-linux/PlatformReleaser.rb +15 -20
  13. data/lib/RubyPackager/i386-mswin32/Installers/NSIS.rb +1 -1
  14. data/lib/RubyPackager/i386-mswin32/PlatformReleaser.rb +23 -25
  15. metadata +34 -56
  16. data/test/Common.rb +0 -346
  17. data/test/PlatformIndependent/CommandLine.rb +0 -156
  18. data/test/PlatformIndependent/Executable.rb +0 -31
  19. data/test/PlatformIndependent/Library.rb +0 -31
  20. data/test/PlatformIndependent/Misc.rb +0 -62
  21. data/test/PlatformIndependent/Plugins/Distributors/SourceForge.rb +0 -81
  22. data/test/PlatformIndependent/Plugins/Installers/Gem.rb +0 -142
  23. data/test/Repository/Applications/Basic/Distribution/ReleaseInfo.rb +0 -27
  24. data/test/Repository/Applications/Basic/Distribution/ReleaseInfo_Exe.rb +0 -33
  25. data/test/Repository/Applications/Basic/Distribution/ReleaseInfo_ExeTerm.rb +0 -33
  26. data/test/Repository/Applications/Basic/Distribution/ReleaseInfo_Gem.rb +0 -32
  27. data/test/Repository/Applications/Basic/Distribution/i386-mswin32/Icon.ico +0 -0
  28. data/test/Repository/Applications/Basic/Distribution/i386-mswin32/Installer/Icon.ico +0 -0
  29. data/test/Repository/Applications/Basic/Distribution/i386-mswin32/Installer/InstallLicense.txt +0 -31
  30. data/test/Repository/Applications/Basic/Distribution/i386-mswin32/Installer/install.nsi +0 -51
  31. data/test/Repository/Applications/Basic/Main.rb +0 -8
  32. data/test/Repository/Libraries/Basic/Add.rb +0 -6
  33. data/test/Repository/Libraries/Basic/Distribution/Icon.ico +0 -0
  34. data/test/Repository/Libraries/Basic/Distribution/InstallLicense.txt +0 -31
  35. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo.rb +0 -24
  36. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_Additional.rb +0 -27
  37. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_Gem.rb +0 -29
  38. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_GemDep.rb +0 -32
  39. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_NSIS.rb +0 -28
  40. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_SF.rb +0 -28
  41. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_Test.rb +0 -27
  42. data/test/Repository/Libraries/Basic/Distribution/ReleaseInfo_TestGem.rb +0 -33
  43. data/test/Repository/Libraries/Basic/Distribution/install.nsi +0 -53
  44. data/test/Repository/Libraries/Basic/MainLib.rb +0 -6
  45. data/test/Repository/Libraries/Basic/Test.rb +0 -6
  46. data/test/i386-linux/Executable.rb +0 -86
  47. data/test/i386-mswin32/Executable.rb +0 -90
  48. data/test/i386-mswin32/Plugins/Installers/NSIS.rb +0 -39
  49. data/test/run.rb +0 -23
data/ChangeLog CHANGED
@@ -1,5 +1,33 @@
1
1
  = RubyPackager Release History
2
2
 
3
+ == 0.2.0.20101110 (Beta)
4
+
5
+ === Misc
6
+
7
+ * Changed DevStatus to Beta.
8
+ * Updated Copyright information.
9
+ * Used rUtilAnts' changeDir.
10
+
11
+ === New features
12
+
13
+ * Release files can now specify several executables to be considered.
14
+ * Release files can now specify several require paths to be considered using :RequirePaths
15
+
16
+ === API changes
17
+
18
+ * API change for Installer plugins: added parameter to know if test files are part of the release.
19
+ * Changed API for plugins generating executables: executable info is given instead of all info.
20
+ * Changed API for plugins getting executables information: :ExecutableInfo replaced by :ExecutablesInfo, giving a list of executables info.
21
+
22
+ === Bug corrections
23
+
24
+ * Bug correction: Gem Installer: Unable to release a gem without test files if test files were declared in the release info.
25
+ * Bug correction: Gem Installer: Unable to release a gem with a platform other than Ruby.
26
+ * Bug correction: Executables generated for Linux did not run.
27
+ * Bug correction: Read ReleaseInfo from its correct location.
28
+ * Bug correction: Running executables on Windows did not work sometimes.
29
+ * Bug correction: When Ruby version did include a patch level, output of Ruby was expected incorrectly.
30
+
3
31
  == 0.1.1.20091105 (Alpha)
4
32
 
5
33
  === New features
data/LICENSE CHANGED
@@ -6,7 +6,7 @@ This list is found in the file named AUTHORS.
6
6
  The AUTHORS and LICENSE files have to be included in any release of software
7
7
  embedding source code of this package, or using it as a derivative software.
8
8
 
9
- Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
9
+ Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
10
10
 
11
11
  Redistribution and use in source and binary forms, with or without
12
12
  modification, are permitted provided that the following conditions are met:
data/ReleaseInfo CHANGED
@@ -2,7 +2,7 @@
2
2
  # This file has been generated by RubyPackager during a delivery.
3
3
  # More info about RubyPackager: http://rubypackager.sourceforge.net
4
4
  {
5
- :Version => '0.1.1.20091105',
6
- :Tags => [],
7
- :DevStatus => 'Alpha'
5
+ :Version => '0.2.1.20101110',
6
+ :Tags => [ 'Beta' ],
7
+ :DevStatus => 'Beta'
8
8
  }
data/TODO CHANGED
@@ -12,3 +12,5 @@
12
12
  ** Make it run under MacOS
13
13
  ** Make rdoc modifications part of a real Gem or an RDoc improvement.
14
14
  ** Use RDI in checkContext methods.
15
+ ** As it is possible to have many failures when delivering or generating installers, and as generating executables and documentation is a long process, it should be better to reuse partially generated content.
16
+ ** Delivering a Gem has to be done using "gem push" with a RubyGems.org account info.
data/bin/Release.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!env ruby
2
2
  #--
3
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
4
4
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
5
5
  #++
6
6
 
@@ -13,6 +13,8 @@
13
13
 
14
14
  require 'rUtilAnts/Logging'
15
15
  RUtilAnts::Logging::initializeLogging("#{File.dirname(__FILE__)}/..", 'http://sourceforge.net/tracker/?group_id=274236&atid=1165400')
16
+ require 'rUtilAnts/Misc'
17
+ RUtilAnts::Misc.initializeMisc
16
18
 
17
19
  module RubyPackager
18
20
 
@@ -36,7 +38,7 @@ module RubyPackager
36
38
  :Tags => [],
37
39
  :DevStatus => 'Unofficial'
38
40
  }
39
- lReleaseInfoFileName = "#{File.dirname(FILE_PATH)}/ReleaseInfo"
41
+ lReleaseInfoFileName = "#{File.dirname(FILE_PATH)}/../ReleaseInfo"
40
42
  if (File.exists?(lReleaseInfoFileName))
41
43
  File.open(lReleaseInfoFileName, 'r') do |iFile|
42
44
  lRPReleaseInfo = eval(iFile.read)
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -59,7 +59,7 @@ module RubyPackager
59
59
  @SFReleaseDir = "/home/frs/project/#{@SFProjectSubPath}/#{@ReleaseVersion}"
60
60
  createSFShell
61
61
  createReleaseOnSFNET
62
- # It is possible that he RDoc has not been generated
62
+ # It is possible that the RDoc has not been generated
63
63
  if (File.exists?("#{@DocDir}/rdoc"))
64
64
  uploadRDocOnSFNET
65
65
  end
@@ -93,10 +93,9 @@ module RubyPackager
93
93
  def uploadRDocOnSFNET
94
94
  logDebug 'Uploading RDoc on SF.NET ...'
95
95
  # Zip the RDoc
96
- lOldDir = Dir.getwd
97
- Dir.chdir(@DocDir)
98
- system("zip -r rdoc.zip rdoc")
99
- Dir.chdir(lOldDir)
96
+ changeDir(@DocDir) do
97
+ system("zip -r rdoc.zip rdoc")
98
+ end
100
99
  # Send it
101
100
  lRDocBaseDir = "/home/groups/#{@SFProjectSubPath}/htdocs/rdoc"
102
101
  sshWithPassword(
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -17,52 +17,80 @@ module RubyPackager
17
17
  # * *iInstallerDir* (_String_): The directory where the installer has to be put
18
18
  # * *iVersion* (_String_): Release version
19
19
  # * *iReleaseInfo* (_ReleaseInfo_): Release info
20
+ # * *iIncludeTest* (_Boolean_): Are test files part of the release ?
20
21
  # Return:
21
22
  # * _String_: File name to distribute, or nil in case of failure
22
- def createInstaller(iRootDir, iReleaseDir, iInstallerDir, iVersion, iReleaseInfo)
23
+ def createInstaller(iRootDir, iReleaseDir, iInstallerDir, iVersion, iReleaseInfo, iIncludeTest)
23
24
  rFileName = nil
24
25
 
25
- lOldDir = Dir.getwd
26
- Dir.chdir(iReleaseDir)
27
- # 1. Generate the gemspec that will build the gem
28
- lStrHasRDoc = nil
29
- if (iReleaseInfo.GemInfo[:HasRDoc])
30
- lStrHasRDoc = 'true'
31
- else
32
- lStrHasRDoc = 'false'
33
- end
34
- # !!! Don't use absolute paths here, otherwise they will be stored in the Gem
35
- lStrFiles = "iSpec.files = [ '#{Dir.glob('**/*').join('\', \'')}' ]"
36
- lStrExtraRDocFiles = ''
37
- if ((iReleaseInfo.GemInfo[:ExtraRDocFiles] != nil) and
38
- (!iReleaseInfo.GemInfo[:ExtraRDocFiles].empty?))
39
- lStrExtraRDocFiles = "iSpec.extra_rdoc_files = [ '#{iReleaseInfo.GemInfo[:ExtraRDocFiles].join('\', \'')}' ]"
40
- RubyPackager::copyFiles(iRootDir, iReleaseDir, iReleaseInfo.GemInfo[:ExtraRDocFiles])
41
- end
42
- lGemDepsStrList = []
43
- if (iReleaseInfo.GemInfo[:GemDependencies] != nil)
44
- iReleaseInfo.GemInfo[:GemDependencies].each do |iGemDepInfo|
45
- iGemName, iGemVersion = iGemDepInfo
46
- if (iGemVersion != nil)
47
- lGemDepsStrList << "iSpec.add_dependency('#{iGemName}', '#{iGemVersion}')"
48
- else
49
- lGemDepsStrList << "iSpec.add_dependency('#{iGemName}')"
26
+ changeDir(iReleaseDir) do
27
+ # 1. Generate the gemspec that will build the gem
28
+ lStrHasRDoc = nil
29
+ if (iReleaseInfo.GemInfo[:HasRDoc])
30
+ lStrHasRDoc = 'true'
31
+ else
32
+ lStrHasRDoc = 'false'
33
+ end
34
+ # !!! Don't use absolute paths here, otherwise they will be stored in the Gem
35
+ lStrFiles = "iSpec.files = [ '#{Dir.glob('**/*').join('\', \'')}' ]"
36
+ lStrExtraRDocFiles = ''
37
+ if ((iReleaseInfo.GemInfo[:ExtraRDocFiles] != nil) and
38
+ (!iReleaseInfo.GemInfo[:ExtraRDocFiles].empty?))
39
+ lStrExtraRDocFiles = "iSpec.extra_rdoc_files = [ '#{iReleaseInfo.GemInfo[:ExtraRDocFiles].join('\', \'')}' ]"
40
+ RubyPackager::copyFiles(iRootDir, iReleaseDir, iReleaseInfo.GemInfo[:ExtraRDocFiles])
41
+ end
42
+ lGemDepsStrList = []
43
+ if (iReleaseInfo.GemInfo[:GemDependencies] != nil)
44
+ iReleaseInfo.GemInfo[:GemDependencies].each do |iGemDepInfo|
45
+ iGemName, iGemVersion = iGemDepInfo
46
+ if (iGemVersion != nil)
47
+ lGemDepsStrList << "iSpec.add_dependency('#{iGemName}', '#{iGemVersion}')"
48
+ else
49
+ lGemDepsStrList << "iSpec.add_dependency('#{iGemName}')"
50
+ end
50
51
  end
51
52
  end
52
- end
53
- lStrTestFile = ''
54
- if (iReleaseInfo.GemInfo[:TestFile] != nil)
55
- lStrTestFile = "iSpec.test_file = '#{iReleaseInfo.GemInfo[:TestFile]}'"
56
- end
57
- lStrBinDir = ''
58
- lStrDefaultExecutable = ''
59
- if (iReleaseInfo.ExecutableInfo[:StartupRBFile] != nil)
60
- lStrBinDir = "iSpec.bindir = '#{File.dirname(iReleaseInfo.ExecutableInfo[:StartupRBFile])}'"
61
- lStrDefaultExecutable = "iSpec.executables = [ '#{File.basename(iReleaseInfo.ExecutableInfo[:StartupRBFile])}' ]"
62
- end
63
- lGemSpecFileName = 'release.gemspec.rb'
64
- File.open(lGemSpecFileName, 'w') do |oFile|
65
- oFile << "
53
+ lStrTestFile = ''
54
+ if ((iIncludeTest) and
55
+ (iReleaseInfo.GemInfo[:TestFile] != nil))
56
+ lStrTestFile = "iSpec.test_file = '#{iReleaseInfo.GemInfo[:TestFile]}'"
57
+ end
58
+ # Compute the list of executable files and the executable directory
59
+ lBinError = false
60
+ lExecutablesDir = nil
61
+ lExecutablesBase = []
62
+ iReleaseInfo.ExecutablesInfo.each do |iExecutableInfo|
63
+ if (lExecutablesDir == nil)
64
+ lExecutablesDir = File.dirname(iExecutableInfo[:StartupRBFile])
65
+ elsif (lExecutablesDir != File.dirname(iExecutableInfo[:StartupRBFile]))
66
+ # Error
67
+ logErr "Executables should be all in the same directory. \"#{lExecutablesDir}\" and \"#{File.dirname(iExecutableInfo[:StartupRBFile])}\" are different directories."
68
+ lBinError = true
69
+ end
70
+ lExecutablesBase << File.basename(iExecutableInfo[:StartupRBFile])
71
+ end
72
+ if (!lBinError)
73
+ lStrBinDir = ''
74
+ lStrExecutables = ''
75
+ if (lExecutablesDir != nil)
76
+ lStrBinDir = "iSpec.bindir = '#{lExecutablesDir}'"
77
+ lStrExecutables = "iSpec.executables = #{lExecutablesBase.inspect}"
78
+ end
79
+ # Compute require paths
80
+ lRequirePaths = []
81
+ if (iReleaseInfo.GemInfo[:RequirePath] != nil)
82
+ lRequirePaths = [ iReleaseInfo.GemInfo[:RequirePath] ]
83
+ end
84
+ if (iReleaseInfo.GemInfo[:RequirePaths] != nil)
85
+ lRequirePaths.concat(iReleaseInfo.GemInfo[:RequirePaths])
86
+ end
87
+ lStrRequirePaths = 'iSpec.require_path = \'\''
88
+ if (!lRequirePaths.empty?)
89
+ lStrRequirePaths = "iSpec.require_paths = #{lRequirePaths.inspect}"
90
+ end
91
+ lGemSpecFileName = 'release.gemspec.rb'
92
+ File.open(lGemSpecFileName, 'w') do |oFile|
93
+ oFile << "
66
94
  Gem::Specification.new do |iSpec|
67
95
  iSpec.name = '#{iReleaseInfo.GemInfo[:GemName]}'
68
96
  iSpec.version = '#{iVersion}'
@@ -73,39 +101,45 @@ Gem::Specification.new do |iSpec|
73
101
  iSpec.summary = '#{iReleaseInfo.ProjectInfo[:Summary].gsub(/'/,'\\\\\'')}'
74
102
  iSpec.description = '#{iReleaseInfo.ProjectInfo[:Description].gsub(/'/,'\\\\\'')}'
75
103
  #{lStrFiles}
76
- iSpec.require_path = '#{iReleaseInfo.GemInfo[:RequirePath]}'
104
+ #{lStrRequirePaths}
77
105
  iSpec.has_rdoc = #{lStrHasRDoc}
78
106
  #{lStrExtraRDocFiles}
79
107
  iSpec.rubyforge_project = '#{iReleaseInfo.RFInfo[:ProjectUnixName]}'
80
108
  #{lStrTestFile}
81
109
  #{lStrBinDir}
82
- #{lStrDefaultExecutable}
110
+ #{lStrExecutables}
83
111
  #{lGemDepsStrList.join("\n")}
84
112
  end
85
113
  "
86
- end
87
- # 2. Call gem build with this gemspec
88
- # Load RubyGems
89
- require 'rubygems/command_manager'
90
- # Build gem
91
- lGemOK = true
92
- begin
93
- ::Gem::CommandManager.instance.find_command('build').invoke(lGemSpecFileName)
94
- rescue ::Gem::SystemExitException
95
- # For RubyGems, this is normal behaviour: success results in an exception thrown with exit_code 0.
96
- if ($!.exit_code != 0)
97
- logErr "RubyGems returned error #{$!.exit_code}."
98
- lGemOK = false
114
+ end
115
+ # 2. Call gem build with this gemspec
116
+ # Load RubyGems
117
+ require 'rubygems/command_manager'
118
+ # Build gem
119
+ lGemOK = true
120
+ begin
121
+ ::Gem::CommandManager.instance.find_command('build').invoke(lGemSpecFileName)
122
+ rescue ::Gem::SystemExitException
123
+ # For RubyGems, this is normal behaviour: success results in an exception thrown with exit_code 0.
124
+ if ($!.exit_code != 0)
125
+ logErr "RubyGems returned error #{$!.exit_code}."
126
+ lGemOK = false
127
+ end
128
+ end
129
+ File.unlink(lGemSpecFileName)
130
+ if (lGemOK)
131
+ # Move the Gem to the destination directory
132
+ require 'fileutils'
133
+ # Find the name of the Gem: it can differ depending on the platform
134
+ rFileName = Dir.glob("#{iReleaseInfo.GemInfo[:GemName]}-#{iVersion}*.gem")[0]
135
+ if (rFileName == nil)
136
+ logErr "Unable to find generated gem \"#{iReleaseInfo.GemInfo[:GemName]}-#{iVersion}*.gem\""
137
+ else
138
+ FileUtils::mv(rFileName, "#{iInstallerDir}/#{rFileName}")
139
+ end
140
+ end
99
141
  end
100
142
  end
101
- File.unlink(lGemSpecFileName)
102
- if (lGemOK)
103
- # Move the Gem to the destination directory
104
- require 'fileutils'
105
- rFileName = "#{iReleaseInfo.GemInfo[:GemName]}-#{iVersion}.gem"
106
- FileUtils::mv(rFileName, "#{iInstallerDir}/#{rFileName}")
107
- end
108
- Dir.chdir(lOldDir)
109
143
 
110
144
  return rFileName
111
145
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -16,9 +16,9 @@ module RubyPackager
16
16
  # map< Symbol, Object >
17
17
  attr_reader :ProjectInfo
18
18
 
19
- # Information about the executable
20
- # map< Symbol, Object >
21
- attr_reader :ExecutableInfo
19
+ # Information about the executables
20
+ # list< map< Symbol, Object > >
21
+ attr_reader :ExecutablesInfo
22
22
 
23
23
  # Information about the installer
24
24
  # map< Symbol, Object >
@@ -53,7 +53,7 @@ module RubyPackager
53
53
  # This sets also default values
54
54
  @AuthorInfo = {}
55
55
  @ProjectInfo = {}
56
- @ExecutableInfo = {}
56
+ @ExecutablesInfo = []
57
57
  @InstallInfo = {}
58
58
  @SFInfo = {}
59
59
  @RFInfo = {}
@@ -99,7 +99,8 @@ module RubyPackager
99
99
  return self
100
100
  end
101
101
 
102
- # Add executable package properties
102
+ # Add executable package properties.
103
+ # This method can be called several times to specify several executables.
103
104
  #
104
105
  # Parameters:
105
106
  # * *iParams* (<em>map<Symbol,Object></em>): The parameters:
@@ -110,7 +111,7 @@ module RubyPackager
110
111
  # Return:
111
112
  # * _ReleaseInfo_: self
112
113
  def executable(iParams)
113
- @ExecutableInfo.merge!(iParams)
114
+ @ExecutablesInfo << iParams
114
115
 
115
116
  return self
116
117
  end
@@ -163,7 +164,8 @@ module RubyPackager
163
164
  # * *iParams* (<em>map<Symbol,Object></em>): The parameters:
164
165
  # ** *:GemName* (_String_): The Gem name
165
166
  # ** *:GemPlatformClassName* (_String_): The name of the Gem platform class
166
- # ** *:RequirePath* (_String_): Path to require
167
+ # ** *:RequirePath* (_String_): Single path to require
168
+ # ** *:RequirePaths* (<em>list<String></em>): Paths to require
167
169
  # ** *:HasRDoc* (_String_): Include RDoc in the Gem ?
168
170
  # ** *:ExtraRDocFiles* (<em>list<String></em>): List of file patterns to be included in the RDoc but not in the Gem
169
171
  # ** *:TestFile* (_String_): Name of the test file to execute
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -102,7 +102,7 @@ module RubyPackager
102
102
  (!@ReleaseInfo.checkReadyForRelease(@RootDir)))
103
103
  rSuccess = false
104
104
  end
105
- if (@ReleaseInfo.ExecutableInfo[:ExeName] != nil)
105
+ if (!@ReleaseInfo.ExecutablesInfo.empty?)
106
106
  # Check tools for platform dependent considerations
107
107
  if (!@PlatformReleaseInfo.checkExeTools(@RootDir, @IncludeRuby))
108
108
  rSuccess = false
@@ -146,7 +146,7 @@ module RubyPackager
146
146
  @Installers.each do |iInstallerName|
147
147
  logOp("Create installer #{iInstallerName}") do
148
148
  @PluginsManager.accessPlugin('Installers', iInstallerName) do |ioPlugin|
149
- lFileName = ioPlugin.createInstaller(@RootDir, @ReleaseDir, @InstallerDir, @ReleaseVersion, @ReleaseInfo)
149
+ lFileName = ioPlugin.createInstaller(@RootDir, @ReleaseDir, @InstallerDir, @ReleaseVersion, @ReleaseInfo, @IncludeTest)
150
150
  if (lFileName == nil)
151
151
  rSuccess = false
152
152
  else
@@ -217,11 +217,13 @@ module RubyPackager
217
217
  "
218
218
  end
219
219
  end
220
- if (@ReleaseInfo.ExecutableInfo[:ExeName] != nil)
221
- logOp('Create binary') do
222
- # TODO (crate): When crate will work correctly under Windows, use it here to pack everything
223
- # For now the executable creation is platform dependent
224
- rSuccess = @PlatformReleaseInfo.createBinary(@RootDir, @ReleaseDir, @IncludeRuby, @ReleaseInfo)
220
+ @ReleaseInfo.ExecutablesInfo.each do |iExecutableInfo|
221
+ if (iExecutableInfo[:ExeName] != nil)
222
+ logOp("Create binary #{iExecutableInfo[:ExeName]}") do
223
+ # TODO (crate): When crate will work correctly under Windows, use it here to pack everything
224
+ # For now the executable creation is platform dependent
225
+ rSuccess = @PlatformReleaseInfo.createBinary(@RootDir, @ReleaseDir, @IncludeRuby, iExecutableInfo)
226
+ end
225
227
  end
226
228
  end
227
229
  if (rSuccess)
@@ -278,16 +280,15 @@ module RubyPackager
278
280
  "--output=#{@DocDir}/rdoc"
279
281
  ]
280
282
  # Bug (RDoc): Sometimes it does not change current directory correctly (not deterministic)
281
- lOldDir = Dir.getwd
282
- Dir.chdir(@ReleaseDir)
283
- # First try with Muriel's template
284
- begin
285
- RDoc::RDoc.new.document( lRDocOptions + [ '--fmt=muriel' ] )
286
- rescue Exception
287
- # Then try with default template
288
- RDoc::RDoc.new.document( lRDocOptions )
283
+ changeDir(@ReleaseDir) do
284
+ # First try with Muriel's template
285
+ begin
286
+ RDoc::RDoc.new.document( lRDocOptions + [ '--fmt=muriel' ] )
287
+ rescue Exception
288
+ # Then try with default template
289
+ RDoc::RDoc.new.document( lRDocOptions )
290
+ end
289
291
  end
290
- Dir.chdir(lOldDir)
291
292
  end
292
293
 
293
294
  return rSuccess
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -0,0 +1,112 @@
1
+ #--
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
+ # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
+ #++
5
+
6
+ # This file prepares a cygwin distribution
7
+
8
+ # Require needed to generate the temporary ruby file that produces the executable
9
+ require 'tmpdir'
10
+
11
+ module RubyPackager
12
+
13
+ class PlatformReleaser
14
+
15
+ PLATFORM_DIR = File.dirname(__FILE__)
16
+
17
+ # Check if the tools we will use to generate an executable are present
18
+ #
19
+ # Parameters:
20
+ # * *iRootDir* (_String_): Root directory
21
+ # * *iIncludeRuby* (_Boolean_): Do we include Ruby in the release ?
22
+ # Return:
23
+ # * _Boolean_: Are tools correctly useable ?
24
+ def checkExeTools(iRootDir, iIncludeRuby)
25
+ rSuccess = true
26
+
27
+ if (iIncludeRuby)
28
+ # We need allinoneruby
29
+ if (Gem.find_files('allinoneruby').empty?)
30
+ logErr "Need to have allinoneruby gem to release including Ruby.\nPlease install allinoneruby gem (gem install allinoneruby)."
31
+ rSuccess = false
32
+ end
33
+ end
34
+
35
+ return rSuccess
36
+ end
37
+
38
+ # Create the binary.
39
+ # This is called when the core library has been copied in the release directory.
40
+ #
41
+ # Parameters:
42
+ # * *iRootDir* (_String_): Root directory
43
+ # * *iReleaseDir* (_String_): Release directory
44
+ # * *iIncludeRuby* (_Boolean_): Do we include Ruby in the release ?
45
+ # * *iExecutableInfo* (<em>map<Symbol,Object></em>): The executable information
46
+ # Return:
47
+ # * _Boolean_: Success ?
48
+ def createBinary(iRootDir, iReleaseDir, iIncludeRuby, iExecutableInfo)
49
+ rSuccess = true
50
+
51
+ lBinSubDir = "Launch/#{RUBY_PLATFORM}/bin"
52
+ lRubyBaseBinName = 'ruby'
53
+ lBinName = "#{lRubyBaseBinName}-#{RUBY_VERSION}.bin"
54
+ if (iIncludeRuby)
55
+ # First create the binary containing all ruby
56
+ lBinDir = "#{iReleaseDir}/#{lBinSubDir}"
57
+ FileUtils::mkdir_p(lBinDir)
58
+ changeDir(lBinDir) do
59
+ lCmd = "allinoneruby #{lBinName}"
60
+ rSuccess = system(lCmd)
61
+ if (!rSuccess)
62
+ logErr "Error while executing \"#{lCmd}\""
63
+ end
64
+ end
65
+ end
66
+ if (rSuccess)
67
+ # Then create the real executable
68
+ # Generate the Shell file that launches everything for Linux
69
+ File.open("#{iReleaseDir}/#{iExecutableInfo[:ExeName]}", 'w') do |oFile|
70
+ oFile << "\#!/bin/sh
71
+ \#--
72
+ \# Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
73
+ \# Licensed under the terms specified in LICENSE file. No warranty is provided.
74
+ \#++
75
+
76
+ \# This file is generated by RubyPackager for Cygwin.
77
+
78
+ \# This file has to launch the correct binary. There can be several binaries dependending on the configuration.
79
+ \# This is the file that will be created as the executable to launch.
80
+
81
+ \# Test Ruby's existence
82
+ which ruby >/dev/null 2>/dev/null
83
+ if [ $? == 1 ]
84
+ then
85
+ echo 'Ruby not found on current platform. Use embedded one.'
86
+ if [ ! -d tempruby ]
87
+ then
88
+ echo 'Extracting Ruby distribution...'
89
+ mkdir tempruby
90
+ cd tempruby
91
+ ../#{lBinSubDir}/#{lBinName} --eee-justextract
92
+ cd ..
93
+ fi
94
+ \# Set the environment correctly to execute Ruby from the extracted dir
95
+ export LD_LIBRARY_PATH=`pwd`/tempruby/bin:`pwd`/tempruby/lib:`pwd`/tempruby/lib/lib1:`pwd`/tempruby/lib/lib2:`pwd`/tempruby/lib/lib3:`pwd`/tempruby/lib/lib4:${LD_LIRARY_PATH}
96
+ export RUBYOPT=
97
+ ./tempruby/bin/ruby -w #{iExecutableInfo[:StartupRBFile]}
98
+ else
99
+ echo 'Ruby found on current platform. Use it directly.'
100
+ ruby -w #{iExecutableInfo[:StartupRBFile]}
101
+ fi
102
+ "
103
+ end
104
+ File.chmod(0755, "#{iReleaseDir}/#{iExecutableInfo[:ExeName]}")
105
+ end
106
+
107
+ return rSuccess
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5
 
@@ -42,39 +42,34 @@ module RubyPackager
42
42
  # * *iRootDir* (_String_): Root directory
43
43
  # * *iReleaseDir* (_String_): Release directory
44
44
  # * *iIncludeRuby* (_Boolean_): Do we include Ruby in the release ?
45
- # * *iReleaseInfo* (_ReleaseInfo_): The release information
45
+ # * *iExecutableInfo* (<em>map<Symbol,Object></em>): The executable information
46
46
  # Return:
47
47
  # * _Boolean_: Success ?
48
- def createBinary(iRootDir, iReleaseDir, iIncludeRuby, iReleaseInfo)
48
+ def createBinary(iRootDir, iReleaseDir, iIncludeRuby, iExecutableInfo)
49
49
  rSuccess = true
50
50
 
51
51
  lBinSubDir = "Launch/#{RUBY_PLATFORM}/bin"
52
- lRubyBaseBinName = nil
53
- lRubyLaunchCmd = nil
54
52
  lRubyBaseBinName = 'ruby'
55
- lRubyLaunchCmd = 'ruby'
56
53
  lBinName = "#{lRubyBaseBinName}-#{RUBY_VERSION}.bin"
57
54
  if (iIncludeRuby)
58
55
  # First create the binary containing all ruby
59
56
  lBinDir = "#{iReleaseDir}/#{lBinSubDir}"
60
57
  FileUtils::mkdir_p(lBinDir)
61
- lOldDir = Dir.getwd
62
- Dir.chdir(lBinDir)
63
- lCmd = "allinoneruby #{lBinName}"
64
- rSuccess = system(lCmd)
65
- if (!rSuccess)
66
- logErr "Error while executing \"#{lCmd}\""
58
+ changeDir(lBinDir) do
59
+ lCmd = "allinoneruby #{lBinName}"
60
+ rSuccess = system(lCmd)
61
+ if (!rSuccess)
62
+ logErr "Error while executing \"#{lCmd}\""
63
+ end
67
64
  end
68
- Dir.chdir(lOldDir)
69
65
  end
70
66
  if (rSuccess)
71
67
  # Then create the real executable
72
68
  # Generate the Shell file that launches everything for Linux
73
- File.open("#{iReleaseDir}/#{iReleaseInfo.ExecutableInfo[:ExeName]}", 'w') do |oFile|
74
- oFile << "
75
- \#!/bin/sh
69
+ File.open("#{iReleaseDir}/#{iExecutableInfo[:ExeName]}", 'w') do |oFile|
70
+ oFile << "\#!/bin/sh
76
71
  \#--
77
- \# Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
72
+ \# Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
78
73
  \# Licensed under the terms specified in LICENSE file. No warranty is provided.
79
74
  \#++
80
75
 
@@ -99,14 +94,14 @@ then
99
94
  \# Set the environment correctly to execute Ruby from the extracted dir
100
95
  export LD_LIBRARY_PATH=`pwd`/tempruby/bin:`pwd`/tempruby/lib:`pwd`/tempruby/lib/lib1:`pwd`/tempruby/lib/lib2:`pwd`/tempruby/lib/lib3:`pwd`/tempruby/lib/lib4:${LD_LIRARY_PATH}
101
96
  export RUBYOPT=
102
- ./tempruby/bin/ruby -w #{iReleaseInfo.ExecutableInfo[:StartupRBFile]}
97
+ ./tempruby/bin/ruby -w #{iExecutableInfo[:StartupRBFile]}
103
98
  else
104
99
  echo 'Ruby found on current platform. Use it directly.'
105
- ruby -w #{iReleaseInfo.ExecutableInfo[:StartupRBFile]}
100
+ ruby -w #{iExecutableInfo[:StartupRBFile]}
106
101
  fi
107
102
  "
108
103
  end
109
- File.chmod(0755, "#{iReleaseDir}/#{iReleaseInfo.ExecutableInfo[:ExeName]}")
104
+ File.chmod(0755, "#{iReleaseDir}/#{iExecutableInfo[:ExeName]}")
110
105
  end
111
106
 
112
107
  return rSuccess
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2009 Muriel Salvan (murielsalvan@users.sourceforge.net)
2
+ # Copyright (c) 2009-2010 Muriel Salvan (murielsalvan@users.sourceforge.net)
3
3
  # Licensed under the terms specified in LICENSE file. No warranty is provided.
4
4
  #++
5
5