go_gem 0.2.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +62 -0
- data/lib/go_gem/mkmf.rb +1 -1
- data/lib/go_gem/rake_task.rb +172 -0
- data/lib/go_gem/version.rb +1 -1
- data/sig/go_gem/mkmf.rbs +3 -1
- data/sig/go_gem/rake_task.rbs +45 -0
- data/sig/go_gem.rbs +4 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fbdc6040e9635fef05c0681a1a3513871ea4d4eab781541c802f66dabddf57d
|
4
|
+
data.tar.gz: 97b35d3393324cc1ada05ca9c43095c16c989d4b00f360ec9af940ff6cfdaefa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 954874dbeab6830e58ab484958bbc3679725fdefffce73df7d94a6451a3c31bfa5ab28e2a4a989c51a4194f0572b4b55247ac53dbed98d65e233e50d3be88ad7
|
7
|
+
data.tar.gz: 2cbc0745b9885ec8cfcb42e6ef5eb11edc06ed9e4b6574388fbb5e34ca128f800f4f0edcd650cab1d474ce998f4e27812ce7b9e283400c7406e9b9f59add0e89
|
data/README.md
CHANGED
@@ -33,6 +33,68 @@ require "go_gem/mkmf" # Append this
|
|
33
33
|
create_go_makefile("example/example")
|
34
34
|
```
|
35
35
|
|
36
|
+
### `GoGem::RakeTask`
|
37
|
+
Provides rake tasks for `go test` with CRuby
|
38
|
+
|
39
|
+
#### Example (Without config)
|
40
|
+
```ruby
|
41
|
+
# Rakefile
|
42
|
+
require "go_gem/rake_task"
|
43
|
+
|
44
|
+
GoGem::RakeTask.new("gem_name")
|
45
|
+
```
|
46
|
+
|
47
|
+
Following tasks are generated
|
48
|
+
|
49
|
+
* `rake go:test`
|
50
|
+
* `rake go:testrace`
|
51
|
+
* `rake go:fmt`
|
52
|
+
|
53
|
+
#### Example (With config)
|
54
|
+
```ruby
|
55
|
+
# Rakefile
|
56
|
+
require "go_gem/rake_task"
|
57
|
+
|
58
|
+
GoGem::RakeTask.new("gem_name") do |t|
|
59
|
+
t.task_namespace = "go5"
|
60
|
+
t.go_bin_path = "/path/to/go"
|
61
|
+
t.go_test_args = "-mod=readonly"
|
62
|
+
t.target_dir = "/dir/to/go-mod/"
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Following tasks are generated
|
67
|
+
|
68
|
+
* `rake go5:test`
|
69
|
+
* `rake go5:testrace`
|
70
|
+
* `rake go5:fmt`
|
71
|
+
|
72
|
+
#### Example (Add additional tasks)
|
73
|
+
```ruby
|
74
|
+
# Rakefile
|
75
|
+
require "go_gem/rake_task"
|
76
|
+
|
77
|
+
go_task = GoGem::RakeTask.new("gem_name")
|
78
|
+
|
79
|
+
namespace :go do
|
80
|
+
desc "Run golangci-lint"
|
81
|
+
task :lint do
|
82
|
+
go_task.within_target_dir do
|
83
|
+
sh "which golangci-lint" do |ok, _|
|
84
|
+
raise "golangci-lint isn't installed. See. https://golangci-lint.run/welcome/install/" unless ok
|
85
|
+
end
|
86
|
+
sh GoGem::RakeTask.build_env_vars, "golangci-lint run"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
92
|
+
#### Available configurations
|
93
|
+
* `task_namespace` : task namespace (default: `:go`)
|
94
|
+
* `go_bin_path` : path to go binary (default: `"go"`)
|
95
|
+
* `go_test_args` : argument passed to `go test` (default: `"-mod=readonly -count=1"`)
|
96
|
+
* `target_dir` : directory when executing go commands. (default: `"ext/#{gem_name}"`)
|
97
|
+
|
36
98
|
## Development
|
37
99
|
|
38
100
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/go_gem/mkmf.rb
CHANGED
@@ -26,7 +26,7 @@ module GoGem
|
|
26
26
|
|
27
27
|
create_makefile(target, srcprefix)
|
28
28
|
|
29
|
-
case `#{CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
|
29
|
+
case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
|
30
30
|
when /Free Software Foundation/
|
31
31
|
ldflags = "-Wl,--unresolved-symbols=ignore-all"
|
32
32
|
when /clang/
|
@@ -0,0 +1,172 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rake"
|
4
|
+
require "rake/tasklib"
|
5
|
+
|
6
|
+
module GoGem
|
7
|
+
# Provides rake tasks for `go test` with CRuby
|
8
|
+
#
|
9
|
+
# @example Without config
|
10
|
+
# # Rakefile
|
11
|
+
# require "go_gem/rake_task"
|
12
|
+
#
|
13
|
+
# GoGem::RakeTask.new("gem_name")
|
14
|
+
#
|
15
|
+
# @example With config
|
16
|
+
# # Rakefile
|
17
|
+
# require "go_gem/rake_task"
|
18
|
+
#
|
19
|
+
# GoGem::RakeTask.new("gem_name") do |t|
|
20
|
+
# t.task_namespace = "go5"
|
21
|
+
# t.go_bin_path = "/path/to/go"
|
22
|
+
# t.go_test_args = "-mod=readonly"
|
23
|
+
# t.target_dir = "/dir/to/go-mod/"
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# @example additional tasks
|
27
|
+
# # Rakefile
|
28
|
+
# require "go_gem/rake_task"
|
29
|
+
#
|
30
|
+
# t = GoGem::RakeTask.new("gem_name")
|
31
|
+
#
|
32
|
+
# namespace :go do
|
33
|
+
# desc "Run golangci-lint"
|
34
|
+
# task :lint do
|
35
|
+
# t.within_target_dir do
|
36
|
+
# sh "which golangci-lint" do |ok, _|
|
37
|
+
# raise "golangci-lint isn't installed. See. https://golangci-lint.run/welcome/install/" unless ok
|
38
|
+
# end
|
39
|
+
# sh GoGem::RakeTask.build_env_vars, "golangci-lint run"
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
class RakeTask < ::Rake::TaskLib
|
44
|
+
DEFAULT_TASK_NAMESPACE = :go
|
45
|
+
|
46
|
+
DEFAULT_GO_BIN_PATH = "go"
|
47
|
+
|
48
|
+
DEFAULT_GO_TEST_ARGS = "-mod=readonly -count=1"
|
49
|
+
|
50
|
+
# @!attribute [r] gem_name
|
51
|
+
# @return [String]
|
52
|
+
attr_reader :gem_name
|
53
|
+
|
54
|
+
# @!attribute task_namespace
|
55
|
+
# @return [Symbol,String] task namespace (default: `:go`)
|
56
|
+
attr_accessor :task_namespace
|
57
|
+
|
58
|
+
# @!attribute go_bin_path
|
59
|
+
# @return [String] path to go binary (default: `"go"`)
|
60
|
+
attr_accessor :go_bin_path
|
61
|
+
|
62
|
+
# @!attribute go_test_args
|
63
|
+
# @return [String] argument passed to `go test` (default: `"-mod=readonly -count=1"`)
|
64
|
+
attr_accessor :go_test_args
|
65
|
+
|
66
|
+
# @!attribute cwd
|
67
|
+
# @return [String] directory when executing go commands. (default: `"ext/#{gem_name}"`)
|
68
|
+
attr_accessor :target_dir
|
69
|
+
|
70
|
+
# @param gem_name [String]
|
71
|
+
# @yield configuration of {RakeTask}
|
72
|
+
# @yieldparam t [RakeTask]
|
73
|
+
def initialize(gem_name)
|
74
|
+
super()
|
75
|
+
|
76
|
+
@gem_name = gem_name
|
77
|
+
|
78
|
+
@task_namespace = DEFAULT_TASK_NAMESPACE
|
79
|
+
@go_bin_path = DEFAULT_GO_BIN_PATH
|
80
|
+
@go_test_args = DEFAULT_GO_TEST_ARGS
|
81
|
+
@target_dir = ext_dir
|
82
|
+
|
83
|
+
yield(self) if block_given?
|
84
|
+
|
85
|
+
namespace(task_namespace) do
|
86
|
+
define_go_test_task
|
87
|
+
define_go_testrace_task
|
88
|
+
define_go_fmt_task
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Generate environment variables to build go programs in the Go gem
|
93
|
+
#
|
94
|
+
# @return [Hash<String, String>]
|
95
|
+
def self.build_env_vars
|
96
|
+
ldflags = "-L#{RbConfig::CONFIG["libdir"]} -l#{RbConfig::CONFIG["RUBY_SO_NAME"]}"
|
97
|
+
|
98
|
+
case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
|
99
|
+
when /Free Software Foundation/
|
100
|
+
ldflags << " -Wl,--unresolved-symbols=ignore-all"
|
101
|
+
when /clang/
|
102
|
+
ldflags << " -undefined dynamic_lookup"
|
103
|
+
end
|
104
|
+
|
105
|
+
cflags = [
|
106
|
+
RbConfig::CONFIG["CFLAGS"],
|
107
|
+
"-I#{RbConfig::CONFIG["rubyarchhdrdir"]}",
|
108
|
+
"-I#{RbConfig::CONFIG["rubyhdrdir"]}",
|
109
|
+
].join(" ")
|
110
|
+
|
111
|
+
# FIXME: Workaround for Ubuntu (GitHub Actions)
|
112
|
+
if RUBY_PLATFORM =~ /linux/i
|
113
|
+
cflags.gsub!("-Wno-self-assign", "")
|
114
|
+
cflags.gsub!("-Wno-parentheses-equality", "")
|
115
|
+
cflags.gsub!("-Wno-constant-logical-operand", "")
|
116
|
+
cflags.gsub!("-Wsuggest-attribute=format", "")
|
117
|
+
cflags.gsub!("-Wold-style-definition", "")
|
118
|
+
cflags.gsub!("-Wsuggest-attribute=noreturn", "")
|
119
|
+
ldflags.gsub!("-Wl,--unresolved-symbols=ignore-all", "")
|
120
|
+
end
|
121
|
+
|
122
|
+
ld_library_path = RbConfig::CONFIG["libdir"]
|
123
|
+
|
124
|
+
{
|
125
|
+
"CGO_CFLAGS" => cflags,
|
126
|
+
"CGO_LDFLAGS" => ldflags,
|
127
|
+
"LD_LIBRARY_PATH" => ld_library_path,
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
# @yield
|
132
|
+
def within_target_dir
|
133
|
+
Dir.chdir(target_dir) do # rubocop:disable Style/ExplicitBlockArgument
|
134
|
+
yield
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# @return [String]
|
139
|
+
def ext_dir
|
140
|
+
File.join("ext", gem_name)
|
141
|
+
end
|
142
|
+
|
143
|
+
private
|
144
|
+
|
145
|
+
def define_go_test_task
|
146
|
+
desc "Run #{go_bin_path} test"
|
147
|
+
task(:test) do
|
148
|
+
within_target_dir do
|
149
|
+
sh RakeTask.build_env_vars, "#{go_bin_path} test #{go_test_args} ./..."
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def define_go_testrace_task
|
155
|
+
desc "Run #{go_bin_path} test -race"
|
156
|
+
task(:testrace) do
|
157
|
+
within_target_dir do
|
158
|
+
sh RakeTask.build_env_vars, "#{go_bin_path} test #{go_test_args} -race ./..."
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def define_go_fmt_task
|
164
|
+
desc "Run #{go_bin_path} fmt"
|
165
|
+
task(:fmt) do
|
166
|
+
within_target_dir do
|
167
|
+
sh "#{go_bin_path} fmt ./..."
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
data/lib/go_gem/version.rb
CHANGED
data/sig/go_gem/mkmf.rbs
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
module GoGem
|
2
|
+
class RakeTask < ::Rake::TaskLib
|
3
|
+
@gem_name: String
|
4
|
+
|
5
|
+
@task_namespace: Symbol | String
|
6
|
+
|
7
|
+
@go_bin_path: String
|
8
|
+
|
9
|
+
@go_test_args: String
|
10
|
+
|
11
|
+
@target_dir: String
|
12
|
+
|
13
|
+
DEFAULT_TASK_NAMESPACE: Symbol
|
14
|
+
|
15
|
+
DEFAULT_GO_BIN_PATH: String
|
16
|
+
|
17
|
+
DEFAULT_GO_TEST_ARGS: String
|
18
|
+
|
19
|
+
attr_reader gem_name: String
|
20
|
+
|
21
|
+
attr_accessor task_namespace: Symbol | String
|
22
|
+
|
23
|
+
attr_accessor go_bin_path: String
|
24
|
+
|
25
|
+
attr_accessor go_test_args: String
|
26
|
+
|
27
|
+
attr_accessor target_dir: String
|
28
|
+
|
29
|
+
def initialize: (String gem_name) ?{ (RakeTask) -> void } -> void
|
30
|
+
|
31
|
+
def self.build_env_vars: () -> { "CGO_CFLAGS" => String, "CGO_LDFLAGS" => String, "LD_LIBRARY_PATH" => String }
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def define_go_test_task: () -> void
|
36
|
+
|
37
|
+
def define_go_testrace_task: () -> void
|
38
|
+
|
39
|
+
def define_go_fmt_task: () -> void
|
40
|
+
|
41
|
+
def within_target_dir: () { () -> void } -> void
|
42
|
+
|
43
|
+
def ext_dir: () -> String
|
44
|
+
end
|
45
|
+
end
|
data/sig/go_gem.rbs
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go_gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sue445
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Helpers for compiling Go extensions for ruby
|
14
14
|
email:
|
@@ -23,9 +23,11 @@ files:
|
|
23
23
|
- Rakefile
|
24
24
|
- lib/go_gem.rb
|
25
25
|
- lib/go_gem/mkmf.rb
|
26
|
+
- lib/go_gem/rake_task.rb
|
26
27
|
- lib/go_gem/version.rb
|
27
28
|
- sig/go_gem.rbs
|
28
29
|
- sig/go_gem/mkmf.rbs
|
30
|
+
- sig/go_gem/rake_task.rbs
|
29
31
|
homepage: https://github.com/ruby-go-gem/go-gem-wrapper
|
30
32
|
licenses:
|
31
33
|
- MIT
|
@@ -50,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
52
|
- !ruby/object:Gem::Version
|
51
53
|
version: '0'
|
52
54
|
requirements: []
|
53
|
-
rubygems_version: 3.5.
|
55
|
+
rubygems_version: 3.5.22
|
54
56
|
signing_key:
|
55
57
|
specification_version: 4
|
56
58
|
summary: Helpers for compiling Go extensions for ruby
|