standalone-ruby 1.3.1 → 1.4.1

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -23
  3. data/bin/standalone-ruby +3 -3
  4. data/lib/data/exe_template/launcher_stub.c +30 -0
  5. data/lib/data/exe_template/launcher_stub.cpp +9 -0
  6. data/lib/data/tcc/include/_mingw.h +54 -0
  7. data/lib/data/tcc/include/assert.h +71 -0
  8. data/lib/data/tcc/include/conio.h +159 -0
  9. data/lib/data/tcc/include/ctype.h +232 -0
  10. data/lib/data/tcc/include/dir.h +26 -0
  11. data/lib/data/tcc/include/direct.h +95 -0
  12. data/lib/data/tcc/include/dirent.h +96 -0
  13. data/lib/data/tcc/include/dos.h +110 -0
  14. data/lib/data/tcc/include/errno.h +117 -0
  15. data/lib/data/tcc/include/excpt.h +20 -0
  16. data/lib/data/tcc/include/fcntl.h +135 -0
  17. data/lib/data/tcc/include/fenv.h +85 -0
  18. data/lib/data/tcc/include/float.h +224 -0
  19. data/lib/data/tcc/include/inttypes.h +275 -0
  20. data/lib/data/tcc/include/io.h +296 -0
  21. data/lib/data/tcc/include/limits.h +115 -0
  22. data/lib/data/tcc/include/locale.h +100 -0
  23. data/lib/data/tcc/include/malloc.h +87 -0
  24. data/lib/data/tcc/include/math.h +438 -0
  25. data/lib/data/tcc/include/mem.h +8 -0
  26. data/lib/data/tcc/include/memory.h +9 -0
  27. data/lib/data/tcc/include/process.h +158 -0
  28. data/lib/data/tcc/include/setjmp.h +72 -0
  29. data/lib/data/tcc/include/share.h +44 -0
  30. data/lib/data/tcc/include/signal.h +111 -0
  31. data/lib/data/tcc/include/stdarg.h +16 -0
  32. data/lib/data/tcc/include/stdbool.h +10 -0
  33. data/lib/data/tcc/include/stddef.h +26 -0
  34. data/lib/data/tcc/include/stdint.h +184 -0
  35. data/lib/data/tcc/include/stdio.h +413 -0
  36. data/lib/data/tcc/include/stdlib.h +482 -0
  37. data/lib/data/tcc/include/string.h +206 -0
  38. data/lib/data/tcc/include/sys/fcntl.h +8 -0
  39. data/lib/data/tcc/include/sys/file.h +9 -0
  40. data/lib/data/tcc/include/sys/locking.h +52 -0
  41. data/lib/data/tcc/include/sys/stat.h +190 -0
  42. data/lib/data/tcc/include/sys/time.h +3 -0
  43. data/lib/data/tcc/include/sys/timeb.h +82 -0
  44. data/lib/data/tcc/include/sys/types.h +118 -0
  45. data/lib/data/tcc/include/sys/unistd.h +9 -0
  46. data/lib/data/tcc/include/sys/utime.h +89 -0
  47. data/lib/data/tcc/include/tchar.h +367 -0
  48. data/lib/data/tcc/include/time.h +219 -0
  49. data/lib/data/tcc/include/unistd.h +10 -0
  50. data/lib/data/tcc/include/values.h +4 -0
  51. data/lib/data/tcc/include/varargs.h +11 -0
  52. data/lib/data/tcc/include/wchar.h +318 -0
  53. data/lib/data/tcc/include/wctype.h +127 -0
  54. data/lib/data/tcc/include/winapi/basetsd.h +119 -0
  55. data/lib/data/tcc/include/winapi/basetyps.h +144 -0
  56. data/lib/data/tcc/include/winapi/winbase.h +1852 -0
  57. data/lib/data/tcc/include/winapi/wincon.h +207 -0
  58. data/lib/data/tcc/include/winapi/windef.h +240 -0
  59. data/lib/data/tcc/include/winapi/windows.h +176 -0
  60. data/lib/data/tcc/include/winapi/winerror.h +1054 -0
  61. data/lib/data/tcc/include/winapi/wingdi.h +2843 -0
  62. data/lib/data/tcc/include/winapi/winnetwk.h +346 -0
  63. data/lib/data/tcc/include/winapi/winnls.h +651 -0
  64. data/lib/data/tcc/include/winapi/winnt.h +2667 -0
  65. data/lib/data/tcc/include/winapi/winreg.h +159 -0
  66. data/lib/data/tcc/include/winapi/winsvc.h +309 -0
  67. data/lib/data/tcc/include/winapi/winuser.h +3472 -0
  68. data/lib/data/tcc/include/winapi/winver.h +133 -0
  69. data/lib/data/tcc/lib/gdi32.def +337 -0
  70. data/lib/data/tcc/lib/kernel32.def +763 -0
  71. data/lib/data/tcc/lib/libtcc1.a +0 -0
  72. data/lib/data/tcc/lib/msvcrt.def +782 -0
  73. data/lib/data/tcc/lib/user32.def +654 -0
  74. data/lib/data/tcc/tcc.exe +0 -0
  75. data/lib/data/tcc/tiny_impdef.exe +0 -0
  76. data/lib/data/tcc/tiny_libmaker.exe +0 -0
  77. data/lib/data/vbs/default_vbs.txt +1 -1
  78. data/lib/data/vbs/vbs_gui.txt +1 -1
  79. data/lib/standalone_ruby.rb +6 -6
  80. data/lib/utils/config_generator.rb +5 -0
  81. data/lib/utils/displayer.rb +60 -59
  82. data/lib/utils/exe_packer.rb +68 -0
  83. data/lib/utils/launcher.rb +15 -16
  84. data/lib/utils/launcher_handler.rb +2 -0
  85. data/lib/utils/logger_helper.rb +24 -24
  86. data/lib/utils/parameter_parser.rb +206 -201
  87. data/lib/utils/ruby_copy.rb +26 -26
  88. metadata +77 -3
  89. data/lib/data/bat/default_bat.txt +0 -9
@@ -1,60 +1,61 @@
1
- require_relative 'logger_helper'
2
-
3
- class Displayer
4
- def initialize(params)
5
- @params = params
6
- @logger = LoggerHelper.instance
7
- end
8
-
9
- def display_params
10
- begin
11
- display_text = []
12
-
13
- display_text << "Platform: #{@params[:platform]}" if @params[:platform]
14
- display_text << "Project Path: #{@params[:project_path]}" if @params[:project_path]
15
- display_text << "Ruby Path: #{@params[:ruby_path]}" if @params[:ruby_path]
16
- display_text << "Ruby Folder: #{File.basename(@params[:ruby_path])}" if @params[:ruby_path]
17
- display_text << "Main File: #{@params[:main_file]}" if @params[:main_file]
18
- display_text << "Launcher: #{@params[:launcher]}" if @params[:launcher]
19
- display_text << "Launcher Type: #{@params[:launcher_type]}" if @params[:launcher_type]
20
- display_text << "Template: #{@params[:template]}" if @params[:template]
21
- display_text << "Template: Default Template" unless @params[:template]
22
- display_text << "Log Path: Users Documents Directory"
23
-
24
- puts display_text.join("\n") unless display_text.empty?
25
-
26
- rescue Exception => e
27
- print("Display Error: ".red); puts("#{e.message}".red)
28
- @logger.error("Display Error: #{e.message}")
29
- end
30
- end
31
-
32
- def banner
33
- banner = -<<'BANNER'
34
- Standalone-Ruby v1.3.1
35
- # Github: https://github.com/ardatetikbey/Standalone-Ruby
36
- # RubyGems: https://rubygems.org/gems/standalone-ruby
37
-
38
- BANNER
39
-
40
- puts banner
41
- end
42
- end
43
-
44
- class String
45
- def red
46
- "\e[31m#{self}\e[0m"
47
- end
48
-
49
- def green
50
- "\e[32m#{self}\e[0m"
51
- end
52
-
53
- def magenta
54
- "\e[35m#{self}\e[0m"
55
- end
56
-
57
- def yellow
58
- "\e[33m#{self}\e[0m"
59
- end
1
+ require_relative 'logger_helper'
2
+
3
+ class Displayer
4
+ def initialize(params)
5
+ @params = params
6
+ @logger = LoggerHelper.instance
7
+ end
8
+
9
+ def display_params
10
+ begin
11
+ display_text = []
12
+
13
+ display_text << "Platform: #{@params[:platform]}" if @params[:platform]
14
+ display_text << "Project Path: #{@params[:project_path]}" if @params[:project_path]
15
+ display_text << "Exe File: #{@params[:exe]}" if @params[:exe]
16
+ display_text << "Ruby Path: #{@params[:ruby_path]}" if @params[:ruby_path]
17
+ display_text << "Ruby Folder: #{File.basename(@params[:ruby_path])}" if @params[:ruby_path]
18
+ display_text << "Main File: #{@params[:main_file]}" if @params[:main_file]
19
+ display_text << "Launcher: #{@params[:launcher]}" if @params[:launcher]
20
+ display_text << "Launcher Type: #{@params[:launcher_type]}" if @params[:launcher_type]
21
+ display_text << "Template: #{@params[:template]}" if @params[:template]
22
+ display_text << "Template: Default Template" unless @params[:template]
23
+ display_text << "Log Path: Users Documents Directory"
24
+
25
+ puts display_text.join("\n") unless display_text.empty?
26
+
27
+ rescue Exception => e
28
+ print("Display Error: ".red); puts("#{e.message}".red)
29
+ @logger.error("Display Error: #{e.message}")
30
+ end
31
+ end
32
+
33
+ def banner
34
+ banner = -<<'BANNER'
35
+ Standalone-Ruby v1.4.1 - Package your Ruby projects as exe!
36
+ # Github: https://github.com/ardatetikbey/Standalone-Ruby
37
+ # RubyGems: https://rubygems.org/gems/standalone-ruby
38
+
39
+ BANNER
40
+
41
+ puts banner
42
+ end
43
+ end
44
+
45
+ class String
46
+ def red
47
+ "\e[31m#{self}\e[0m"
48
+ end
49
+
50
+ def green
51
+ "\e[32m#{self}\e[0m"
52
+ end
53
+
54
+ def magenta
55
+ "\e[35m#{self}\e[0m"
56
+ end
57
+
58
+ def yellow
59
+ "\e[33m#{self}\e[0m"
60
+ end
60
61
  end
@@ -0,0 +1,68 @@
1
+ require_relative 'logger_helper'
2
+
3
+ class ExePacker
4
+ def initialize(params)
5
+ @params = params
6
+ @logger = LoggerHelper.instance
7
+ end
8
+
9
+ def pack
10
+ begin
11
+ stub_path = File.join(File.expand_path("../data/exe_template", __dir__), "launcher_stub.c")
12
+ @logger.info("Reading stub template from: #{stub_path}")
13
+
14
+ stub_content = File.read(stub_path)
15
+ stub_content.gsub!("LAUNCHER_FILE", "#{File.basename(@params[:launcher])}")
16
+
17
+ stub_output = "#{File.join(@params[:project_path].to_s, "launcher_stub.c")}"
18
+ exe_path = "#{File.join(@params[:project_path].to_s, @params[:exe].to_s)}"
19
+
20
+ File.open(stub_output, 'w') { |f| f.write(stub_content) }
21
+
22
+ if @params[:use_gcc]
23
+ puts "\nChecking GCC..."
24
+ output = `where gcc`
25
+
26
+ if File.exist?(output.strip)
27
+ gcc_path = output.strip
28
+ puts "GCC Path: #{gcc_path}"
29
+
30
+ command = "#{gcc_path} -o #{exe_path} #{stub_output}"
31
+ @logger.info("Running command: #{command}")
32
+ `#{command}`
33
+ else
34
+ print("Error: ".red); puts("GCC could not be found!");
35
+ exit!
36
+ end
37
+ else
38
+ puts "\nUsing TCC..."
39
+
40
+ tcc_path = File.join(File.expand_path("../data/tcc", __dir__), "tcc.exe")
41
+ @logger.info("TCC Path: #{tcc_path}")
42
+
43
+ command = "#{tcc_path} -o #{exe_path} #{stub_output} -lkernel32"
44
+ @logger.info("Running command: #{command}")
45
+ `#{command}`
46
+ end
47
+
48
+ File.delete(stub_output)
49
+ @logger.info("Stub file deleted successfully")
50
+
51
+ puts("\nExe file has been generated!")
52
+ @logger.info("Exe file generated successfully at: #{exe_path}")
53
+ rescue Exception => err
54
+ @logger.error("Error occurred: #{err.message}")
55
+ print("Error: ".red); puts(err.message)
56
+ end
57
+ end
58
+ end
59
+
60
+ class String
61
+ def red
62
+ "\e[31m#{self}\e[0m"
63
+ end
64
+
65
+ def yellow
66
+ "\e[33m#{self}\e[0m"
67
+ end
68
+ end
@@ -4,8 +4,10 @@ class Launcher
4
4
  require_relative 'displayer'
5
5
  require_relative 'parameter_parser'
6
6
  require_relative 'ruby_copy'
7
- require_relative 'launcher_handler'
8
7
  require_relative 'logger_helper'
8
+ require_relative 'exe_packer'
9
+ require_relative 'launcher_handler'
10
+ # require_relative 'config_generator'
9
11
 
10
12
  def initialize
11
13
  @parser = ParameterParser.new
@@ -14,8 +16,9 @@ class Launcher
14
16
 
15
17
  @displayer = Displayer.new(@params)
16
18
  @ruby_copy = RubyCopy.new(@params)
17
- @launcher_handler = LauncherHandler.new(@params)
18
19
  @logger = LoggerHelper.instance
20
+ @exe_packer = ExePacker.new(@params)
21
+ @launcher_handler = LauncherHandler.new(@params)
19
22
  end
20
23
 
21
24
  def platform_analysis
@@ -23,16 +26,10 @@ class Launcher
23
26
  when /win32|mingw|cygwin/
24
27
  @params[:platform] = 'Windows'
25
28
  @logger.info("Working on windows platform.")
26
- when /darwin/
27
- print("Error: ".red); puts("Mac OS platform is not supported at the moment! Exiting...")
28
- @logger.error("Mac OS platform is not supported at the moment! Exiting...")
29
- exit!
30
- when /linux/
31
- print("Error: ".red); puts("Linux platform is not supported at the moment! Exiting...")
32
- @logger.error("Linux platform is not supported at the moment! Exiting...")
33
- exit!
34
29
  else
35
- "#{RUBY_PLATFORM}"
30
+ print("Error: ".red); puts("This platform is not supported! Exiting...")
31
+ @logger.error("This platform is not supported! Exiting...")
32
+ exit!
36
33
  end
37
34
  end
38
35
 
@@ -51,14 +48,16 @@ class Launcher
51
48
  @logger.info("Banner display was made.")
52
49
  @displayer.display_params
53
50
  @logger.info("The parameters entered by the user are reflected on the screen.")
54
- @logger.info("The initiator file creator function has started processing.")
55
- @launcher_handler.handle
56
- @logger.info("The launcher file creator has finished its function.")
57
51
  @ruby_copy.robocopy_interpreter
58
52
  @logger.info("Ruby interpreter copy function completed.")
53
+ @launcher_handler.handle
54
+ @logger.info("Launcher handler finished.")
55
+ @exe_packer.pack
56
+ @logger.info("Exe pack finished.")
57
+
58
+ puts "\nThanks for using Standalone-Ruby!"
59
59
 
60
- puts "Program Output Path: #{@params[:project_path]}"
61
- puts "Thanks for using Standalone-Ruby!"
60
+ print("\nWARNING: ".yellow); puts("Instead of changing the path of the created exe file, create a shortcut. The same applies here as in every application.")
62
61
  @logger.info("Program finished.")
63
62
  rescue Exception => e
64
63
  @logger.error("Launcher Error: #{e.message}")
@@ -12,6 +12,8 @@ class LauncherHandler
12
12
  begin
13
13
  puts("\nThe template creation process has been started.")
14
14
 
15
+ # FileUtils.mkdir(File.join(@params[:project_path], "sRb_files"))
16
+
15
17
  if @params[:template]
16
18
  if @params[:gui] == true
17
19
  ruby_file = "rubyw.exe"
@@ -1,24 +1,24 @@
1
- require 'logger'
2
- require 'time'
3
- require 'fileutils'
4
-
5
- class LoggerHelper
6
- def self.instance
7
- documents_path = File.join(ENV['USERPROFILE'], 'Documents', 'standalone-ruby-logs')
8
-
9
- FileUtils.mkdir_p(documents_path) unless Dir.exist?(documents_path)
10
-
11
- timestamp = Time.now.strftime("%Y-%m-%d_%H-%M-%S")
12
- log_file = File.join(documents_path, "standalone-ruby_#{timestamp}.log")
13
-
14
- logger = Logger.new(log_file)
15
- logger.level = Logger::INFO
16
-
17
- logger.formatter = proc do |severity, datetime, progname, msg|
18
- msg = "(empty message)" if msg.nil? || msg.strip.empty?
19
- "#{datetime.strftime('%Y-%m-%d %H:%M:%S')} [#{severity}] #{msg}\n"
20
- end
21
-
22
- return logger
23
- end
24
- end
1
+ require 'logger'
2
+ require 'time'
3
+ require 'fileutils'
4
+
5
+ class LoggerHelper
6
+ def self.instance
7
+ documents_path = File.join(ENV['USERPROFILE'], 'Documents', 'standalone-ruby-logs')
8
+
9
+ FileUtils.mkdir_p(documents_path) unless Dir.exist?(documents_path)
10
+
11
+ timestamp = Time.now.strftime("%Y-%m-%d_%H-%M-%S")
12
+ log_file = File.join(documents_path, "standalone-ruby_#{timestamp}.log")
13
+
14
+ logger = Logger.new(log_file)
15
+ logger.level = Logger::INFO
16
+
17
+ logger.formatter = proc do |severity, datetime, progname, msg|
18
+ msg = "(empty message)" if msg.nil? || msg.strip.empty?
19
+ "#{datetime.strftime('%Y-%m-%d %H:%M:%S')} [#{severity}] #{msg}\n"
20
+ end
21
+
22
+ return logger
23
+ end
24
+ end