rubygo 0.0.2
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 +7 -0
- data/bin/rubygo +136 -0
- data/ext/rubygo/bin/rubygo.go +16 -0
- data/ext/rubygo/extconf.rb +22 -0
- data/ext/rubygo/lib/test/test.go +9 -0
- data/lib/rubygo.rb +10 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 95415fca20df4f0c95726957a081fe5e21f93e6d50d373535ed3b121b50cd85a
|
4
|
+
data.tar.gz: 9f62430580c44d32e6c858fa31cfdd6143c5f9ae09f7a7c0487f0fc4c274c2c0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 97b92aab318d0cc3b4267d7dbe78ff5ef4c4e483e0bc0f4828e5460c59d2ec882bd2e783f5212d7f16acea437b410272ded9c707d313251c1c5e55fe3d044f76
|
7
|
+
data.tar.gz: 2cfaecc9fadaf90a79e05cb2b2f1232b6e926d0de4b7d76161540b7afe382df6033fbc033cfd94fe2eeebe3de52d9355b5bf65ef1abb3a4d523a985b999e03fd
|
data/bin/rubygo
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "hilighter"
|
4
|
+
require "io/wait"
|
5
|
+
require "optparse"
|
6
|
+
require "pathname"
|
7
|
+
require "rubygo"
|
8
|
+
|
9
|
+
class RubyGoExit
|
10
|
+
GOOD = 0
|
11
|
+
INVALID_OPTION = 1
|
12
|
+
INVALID_ARGUMENT = 2
|
13
|
+
MISSING_ARGUMENT = 3
|
14
|
+
EXTRA_ARGUMENTS = 4
|
15
|
+
EXCEPTION = 5
|
16
|
+
AMBIGUOUS_ARGUMENT = 6
|
17
|
+
UNSUPPORTED_ART = 7
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse(args)
|
21
|
+
options = Hash.new
|
22
|
+
options["verbose"] = false
|
23
|
+
|
24
|
+
info = "Test go native extension."
|
25
|
+
|
26
|
+
parser = OptionParser.new do |opts|
|
27
|
+
opts.summary_width = 16
|
28
|
+
|
29
|
+
opts.banner = [
|
30
|
+
"Usage: #{File.basename($0)} [OPTIONS]",
|
31
|
+
"<add|sub> <a> <b>"
|
32
|
+
].join(" ")
|
33
|
+
|
34
|
+
opts.on("", "DESCRIPTION")
|
35
|
+
|
36
|
+
info.scan(/\S.{0,76}\S(?=\s|$)|\S+/).each do |line|
|
37
|
+
opts.on(" #{line}")
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on("", "OPTIONS")
|
41
|
+
|
42
|
+
opts.on("-h", "--help", "Display this help message") do
|
43
|
+
puts opts
|
44
|
+
exit RubyGoExit::GOOD
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on(
|
48
|
+
"-v",
|
49
|
+
"--verbose",
|
50
|
+
"Show backtrace when error occurs"
|
51
|
+
) do
|
52
|
+
options["verbose"] = true
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on("--version", "Show version") do
|
56
|
+
__FILE__.match(/rubygo-(\d+\.\d+\.\d+)/) do |m|
|
57
|
+
puts m[1]
|
58
|
+
end
|
59
|
+
exit RubyGoExit::GOOD
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
begin
|
64
|
+
parser.parse!
|
65
|
+
rescue OptionParser::InvalidOption => e
|
66
|
+
puts e.message
|
67
|
+
puts parser
|
68
|
+
exit RubyGoExit::INVALID_OPTION
|
69
|
+
rescue OptionParser::InvalidArgument => e
|
70
|
+
puts e.message
|
71
|
+
puts parser
|
72
|
+
exit RubyGoExit::INVALID_ARGUMENT
|
73
|
+
rescue OptionParser::MissingArgument => e
|
74
|
+
puts e.message
|
75
|
+
puts parser
|
76
|
+
exit RubyGoExit::MISSING_ARGUMENT
|
77
|
+
rescue OptionParser::AmbiguousOption => e
|
78
|
+
puts e.message
|
79
|
+
puts parser
|
80
|
+
exit RubyGoExit::AMBIGUOUS_ARGUMENT
|
81
|
+
end
|
82
|
+
|
83
|
+
if (args.length > 3)
|
84
|
+
puts parser
|
85
|
+
exit RubyGoExit::EXTRA_ARGUMENTS
|
86
|
+
elsif (args.length != 3)
|
87
|
+
puts parser
|
88
|
+
exit RubyGoExit::MISSING_ARGUMENT
|
89
|
+
end
|
90
|
+
|
91
|
+
options["operation"] = args[0]
|
92
|
+
options["a"] = args[1].to_i
|
93
|
+
options["b"] = args[2].to_i
|
94
|
+
|
95
|
+
return options
|
96
|
+
end
|
97
|
+
|
98
|
+
begin
|
99
|
+
options = parse(ARGV)
|
100
|
+
rescue Interrupt
|
101
|
+
# Exit gracefully on ^C
|
102
|
+
exit RubyGoExit::GOOD
|
103
|
+
end
|
104
|
+
|
105
|
+
begin
|
106
|
+
case options["operation"]
|
107
|
+
when "add"
|
108
|
+
puts RubyGo.Add(options["a"], options["b"])
|
109
|
+
when "sub"
|
110
|
+
puts RubyGo.Minus(options["a"], options["b"])
|
111
|
+
else
|
112
|
+
puts "Unsupported operation"
|
113
|
+
end
|
114
|
+
rescue Interrupt
|
115
|
+
# Exit gracefully on ^C
|
116
|
+
rescue Errno::EPIPE
|
117
|
+
# Do nothing. This can happen if piping to another program such as
|
118
|
+
# less. Usually if less is closed before we're done with STDOUT.
|
119
|
+
rescue Exception => e
|
120
|
+
$stderr.puts "Oops! Looks like an error has occured! If the " \
|
121
|
+
"error persists, file a bug at:".wrap
|
122
|
+
$stderr.puts
|
123
|
+
$stderr.puts " https://gitlab.com/mjwhitta/rubygo/issues"
|
124
|
+
$stderr.puts
|
125
|
+
$stderr.puts "Maybe the message below will help. If not, you " \
|
126
|
+
"can use the --verbose flag to get a backtrace.".wrap
|
127
|
+
|
128
|
+
$stderr.puts e.message.white.on_red
|
129
|
+
if (options["verbose"])
|
130
|
+
e.backtrace.each do |line|
|
131
|
+
$stderr.puts line.light_yellow
|
132
|
+
end
|
133
|
+
end
|
134
|
+
exit RubyGoExit::EXCEPTION
|
135
|
+
end
|
136
|
+
exit RubyGoExit::GOOD
|
@@ -0,0 +1,16 @@
|
|
1
|
+
package main
|
2
|
+
|
3
|
+
import "C"
|
4
|
+
import "../lib/test"
|
5
|
+
|
6
|
+
//export Add
|
7
|
+
func Add(a, b C.int) C.int {
|
8
|
+
return C.int(test.Add(int(a), int(b)))
|
9
|
+
}
|
10
|
+
|
11
|
+
//export Minus
|
12
|
+
func Minus(a, b C.int) C.int {
|
13
|
+
return C.int(test.Minus(int(a), int(b)))
|
14
|
+
}
|
15
|
+
|
16
|
+
func main() {} // Ignore
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
File.open("Makefile", "w") do |f|
|
4
|
+
f.write("BINS = $(shell find bin -type f)\n")
|
5
|
+
f.write("\n")
|
6
|
+
f.write("all: build\n")
|
7
|
+
f.write("\n")
|
8
|
+
f.write(".PHONY: $(BINS)\n")
|
9
|
+
f.write("$(BINS):\n")
|
10
|
+
f.write("\t@mkdir -p build\n")
|
11
|
+
f.write("\tgo build -buildmode=c-shared ")
|
12
|
+
f.write("-o build/$(shell basename $@ .go).so $@\n")
|
13
|
+
f.write("\n")
|
14
|
+
f.write("build: $(BINS)\n")
|
15
|
+
f.write("\n")
|
16
|
+
f.write("clean:\n")
|
17
|
+
f.write("\t@rm -rf build ../../lib/*.so\n")
|
18
|
+
f.write("\n")
|
19
|
+
f.write("install:\n")
|
20
|
+
f.write("\t@mkdir -p ../../lib\n")
|
21
|
+
f.write("\t@mv build/*.so ../../lib/\n")
|
22
|
+
end
|
data/lib/rubygo.rb
ADDED
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubygo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Miles Whittaker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '12.3'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 12.3.0
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '12.3'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 12.3.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ffi
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.9'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.9.23
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.9'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.9.23
|
53
|
+
description: Test building and running go native extension.
|
54
|
+
email: mjwhitta@gmail.com
|
55
|
+
executables:
|
56
|
+
- rubygo
|
57
|
+
extensions:
|
58
|
+
- ext/rubygo/extconf.rb
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- bin/rubygo
|
62
|
+
- ext/rubygo/bin/rubygo.go
|
63
|
+
- ext/rubygo/extconf.rb
|
64
|
+
- ext/rubygo/lib/test/test.go
|
65
|
+
- lib/rubygo.rb
|
66
|
+
homepage: https://mjwhitta.github.io/rubygo
|
67
|
+
licenses:
|
68
|
+
- GPL-3.0
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.7.6
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Test go native extension.
|
90
|
+
test_files: []
|