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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -23
- data/bin/standalone-ruby +3 -3
- data/lib/data/exe_template/launcher_stub.c +30 -0
- data/lib/data/exe_template/launcher_stub.cpp +9 -0
- data/lib/data/tcc/include/_mingw.h +54 -0
- data/lib/data/tcc/include/assert.h +71 -0
- data/lib/data/tcc/include/conio.h +159 -0
- data/lib/data/tcc/include/ctype.h +232 -0
- data/lib/data/tcc/include/dir.h +26 -0
- data/lib/data/tcc/include/direct.h +95 -0
- data/lib/data/tcc/include/dirent.h +96 -0
- data/lib/data/tcc/include/dos.h +110 -0
- data/lib/data/tcc/include/errno.h +117 -0
- data/lib/data/tcc/include/excpt.h +20 -0
- data/lib/data/tcc/include/fcntl.h +135 -0
- data/lib/data/tcc/include/fenv.h +85 -0
- data/lib/data/tcc/include/float.h +224 -0
- data/lib/data/tcc/include/inttypes.h +275 -0
- data/lib/data/tcc/include/io.h +296 -0
- data/lib/data/tcc/include/limits.h +115 -0
- data/lib/data/tcc/include/locale.h +100 -0
- data/lib/data/tcc/include/malloc.h +87 -0
- data/lib/data/tcc/include/math.h +438 -0
- data/lib/data/tcc/include/mem.h +8 -0
- data/lib/data/tcc/include/memory.h +9 -0
- data/lib/data/tcc/include/process.h +158 -0
- data/lib/data/tcc/include/setjmp.h +72 -0
- data/lib/data/tcc/include/share.h +44 -0
- data/lib/data/tcc/include/signal.h +111 -0
- data/lib/data/tcc/include/stdarg.h +16 -0
- data/lib/data/tcc/include/stdbool.h +10 -0
- data/lib/data/tcc/include/stddef.h +26 -0
- data/lib/data/tcc/include/stdint.h +184 -0
- data/lib/data/tcc/include/stdio.h +413 -0
- data/lib/data/tcc/include/stdlib.h +482 -0
- data/lib/data/tcc/include/string.h +206 -0
- data/lib/data/tcc/include/sys/fcntl.h +8 -0
- data/lib/data/tcc/include/sys/file.h +9 -0
- data/lib/data/tcc/include/sys/locking.h +52 -0
- data/lib/data/tcc/include/sys/stat.h +190 -0
- data/lib/data/tcc/include/sys/time.h +3 -0
- data/lib/data/tcc/include/sys/timeb.h +82 -0
- data/lib/data/tcc/include/sys/types.h +118 -0
- data/lib/data/tcc/include/sys/unistd.h +9 -0
- data/lib/data/tcc/include/sys/utime.h +89 -0
- data/lib/data/tcc/include/tchar.h +367 -0
- data/lib/data/tcc/include/time.h +219 -0
- data/lib/data/tcc/include/unistd.h +10 -0
- data/lib/data/tcc/include/values.h +4 -0
- data/lib/data/tcc/include/varargs.h +11 -0
- data/lib/data/tcc/include/wchar.h +318 -0
- data/lib/data/tcc/include/wctype.h +127 -0
- data/lib/data/tcc/include/winapi/basetsd.h +119 -0
- data/lib/data/tcc/include/winapi/basetyps.h +144 -0
- data/lib/data/tcc/include/winapi/winbase.h +1852 -0
- data/lib/data/tcc/include/winapi/wincon.h +207 -0
- data/lib/data/tcc/include/winapi/windef.h +240 -0
- data/lib/data/tcc/include/winapi/windows.h +176 -0
- data/lib/data/tcc/include/winapi/winerror.h +1054 -0
- data/lib/data/tcc/include/winapi/wingdi.h +2843 -0
- data/lib/data/tcc/include/winapi/winnetwk.h +346 -0
- data/lib/data/tcc/include/winapi/winnls.h +651 -0
- data/lib/data/tcc/include/winapi/winnt.h +2667 -0
- data/lib/data/tcc/include/winapi/winreg.h +159 -0
- data/lib/data/tcc/include/winapi/winsvc.h +309 -0
- data/lib/data/tcc/include/winapi/winuser.h +3472 -0
- data/lib/data/tcc/include/winapi/winver.h +133 -0
- data/lib/data/tcc/lib/gdi32.def +337 -0
- data/lib/data/tcc/lib/kernel32.def +763 -0
- data/lib/data/tcc/lib/libtcc1.a +0 -0
- data/lib/data/tcc/lib/msvcrt.def +782 -0
- data/lib/data/tcc/lib/user32.def +654 -0
- data/lib/data/tcc/tcc.exe +0 -0
- data/lib/data/tcc/tiny_impdef.exe +0 -0
- data/lib/data/tcc/tiny_libmaker.exe +0 -0
- data/lib/data/vbs/default_vbs.txt +1 -1
- data/lib/data/vbs/vbs_gui.txt +1 -1
- data/lib/standalone_ruby.rb +6 -6
- data/lib/utils/config_generator.rb +5 -0
- data/lib/utils/displayer.rb +60 -59
- data/lib/utils/exe_packer.rb +68 -0
- data/lib/utils/launcher.rb +15 -16
- data/lib/utils/launcher_handler.rb +2 -0
- data/lib/utils/logger_helper.rb +24 -24
- data/lib/utils/parameter_parser.rb +206 -201
- data/lib/utils/ruby_copy.rb +26 -26
- metadata +77 -3
- data/lib/data/bat/default_bat.txt +0 -9
data/lib/utils/displayer.rb
CHANGED
@@ -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 << "
|
16
|
-
display_text << "Ruby
|
17
|
-
display_text << "
|
18
|
-
display_text << "
|
19
|
-
display_text << "Launcher
|
20
|
-
display_text << "
|
21
|
-
display_text << "Template:
|
22
|
-
display_text << "
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
#
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
data/lib/utils/launcher.rb
CHANGED
@@ -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
|
-
"
|
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
|
-
|
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}")
|
data/lib/utils/logger_helper.rb
CHANGED
@@ -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
|