go_gem 0.6.0 → 0.7.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/README.md +15 -3
- data/lib/go_gem/mkmf.rb +7 -9
- data/lib/go_gem/rake_task.rb +14 -48
- data/lib/go_gem/util.rb +47 -0
- data/lib/go_gem/version.rb +1 -1
- data/sig/go_gem/mkmf.rbs +1 -1
- data/sig/go_gem/rake_task.rbs +0 -6
- data/sig/go_gem/util.rbs +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 372d05e6534c3254be71447f646e7d290dd78613048742d2c914143e82d2fad6
|
4
|
+
data.tar.gz: aa14dcda3d97d4dc243d40c650b32779c32f4f0a396b76ce434b848b28162855
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3099662a439bff9fdfa46e72fbf7f80fccb8d057a9374fdc1481eeb62fa825b55c8342569f51d150c634e2004e93be7683fc066ec308accda474ae777e3efd6d
|
7
|
+
data.tar.gz: 2110ac170d7e3f63186fa8d90f4049132860b4a0038c66e0a54ebf2f828ce529cbd687ee3350d846b824f6e4627cbf23ac709241a3aafd65969dcb372ec5afdb
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ See below for details.
|
|
15
15
|
[/_tools/patch_for_go_gem/](/_tools/patch_for_go_gem/)
|
16
16
|
|
17
17
|
## Usage
|
18
|
-
### `create_go_makefile`
|
18
|
+
### [`create_go_makefile`](https://ruby-go-gem.github.io/go-gem-wrapper/GoGem/Mkmf.html#create_go_makefile-instance_method)
|
19
19
|
`create_go_makefile` is an extension of `create_makefile`.
|
20
20
|
|
21
21
|
Add a task and hacks to build Go against the `Makefile` generated by `create_makefile`.
|
@@ -31,9 +31,12 @@ require "go_gem/mkmf" # Append this
|
|
31
31
|
# Use create_go_makefile instead of create_makefile
|
32
32
|
# create_makefile("example/example")
|
33
33
|
create_go_makefile("example/example")
|
34
|
+
|
35
|
+
# Pass debug flags to `go build`
|
36
|
+
create_go_makefile("example/example", go_build_args: "-gcflags='all=-N -l'")
|
34
37
|
```
|
35
38
|
|
36
|
-
### `GoGem::RakeTask`
|
39
|
+
### [`GoGem::RakeTask`](https://ruby-go-gem.github.io/go-gem-wrapper/GoGem/RakeTask.html)
|
37
40
|
Provides rake tasks for `go test` with CRuby
|
38
41
|
|
39
42
|
#### Example (Without config)
|
@@ -85,7 +88,9 @@ namespace :go do
|
|
85
88
|
sh "which golangci-lint" do |ok, _|
|
86
89
|
raise "golangci-lint isn't installed. See. https://golangci-lint.run/welcome/install/" unless ok
|
87
90
|
end
|
88
|
-
|
91
|
+
|
92
|
+
build_tag = GoGem::Util.ruby_minor_version_build_tag
|
93
|
+
sh GoGem::RakeTask.build_env_vars, "golangci-lint run --build-tags #{build_tag} --modules-download-mode=readonly"
|
89
94
|
end
|
90
95
|
end
|
91
96
|
end
|
@@ -101,12 +106,19 @@ jobs:
|
|
101
106
|
- uses: actions/checkout@v4
|
102
107
|
- uses: actions/setup-go@v5
|
103
108
|
- uses: ruby/setup-ruby@v1
|
109
|
+
with:
|
110
|
+
bundler-cache: true
|
104
111
|
|
105
112
|
- name: export CGO_CFLAGS for golangci-lint
|
106
113
|
run: bundle exec rake go:build_envs[CGO_CFLAGS] >> $GITHUB_ENV
|
107
114
|
|
115
|
+
- name: export BUILD_TAG for golangci-lint
|
116
|
+
run: echo "BUILD_TAG=$(bundle exec rake go:build_tag)" >> $GITHUB_ENV
|
117
|
+
|
108
118
|
- name: Run golangci-lint
|
109
119
|
uses: golangci/golangci-lint-action@v6
|
120
|
+
with:
|
121
|
+
args: --build-tags ${{ env.BUILD_TAG }} --modules-download-mode=readonly
|
110
122
|
```
|
111
123
|
|
112
124
|
#### Available configurations
|
data/lib/go_gem/mkmf.rb
CHANGED
@@ -9,6 +9,7 @@ module GoGem
|
|
9
9
|
#
|
10
10
|
# @param target [String]
|
11
11
|
# @param srcprefix [String,nil]
|
12
|
+
# @param go_build_args [String,nil] Arguments passed to `go build`
|
12
13
|
#
|
13
14
|
# @example
|
14
15
|
# require "mkmf"
|
@@ -17,7 +18,10 @@ module GoGem
|
|
17
18
|
# # Use create_go_makefile instead of create_makefile
|
18
19
|
# # create_makefile("example/example")
|
19
20
|
# create_go_makefile("example/example")
|
20
|
-
|
21
|
+
#
|
22
|
+
# @example Pass debug flags to `go build`
|
23
|
+
# create_go_makefile("example/example", go_build_args: "-gcflags='all=-N -l'")
|
24
|
+
def create_go_makefile(target, srcprefix: nil, go_build_args: nil)
|
21
25
|
find_executable("go")
|
22
26
|
|
23
27
|
# rubocop:disable Style/GlobalVars
|
@@ -28,13 +32,7 @@ module GoGem
|
|
28
32
|
|
29
33
|
create_makefile(target, srcprefix)
|
30
34
|
|
31
|
-
|
32
|
-
when /Free Software Foundation/
|
33
|
-
ldflags = "-Wl,--unresolved-symbols=ignore-all"
|
34
|
-
when /clang/
|
35
|
-
ldflags = "-undefined dynamic_lookup"
|
36
|
-
end
|
37
|
-
|
35
|
+
ldflags = GoGem::Util.generate_ldflags
|
38
36
|
current_dir = File.expand_path(".")
|
39
37
|
|
40
38
|
goflags = "-tags=#{GoGem::Util.ruby_minor_version_build_tag}"
|
@@ -44,7 +42,7 @@ module GoGem
|
|
44
42
|
$(DLLIB): Makefile $(srcdir)/*.go
|
45
43
|
cd $(srcdir); \
|
46
44
|
CGO_CFLAGS='$(INCFLAGS)' CGO_LDFLAGS='#{ldflags}' GOFLAGS='#{goflags}' \
|
47
|
-
go build -p 4 -buildmode=c-shared -o #{current_dir}/$(DLLIB)
|
45
|
+
go build -p 4 -buildmode=c-shared -o #{current_dir}/$(DLLIB) #{go_build_args}
|
48
46
|
MAKEFILE
|
49
47
|
end
|
50
48
|
end
|
data/lib/go_gem/rake_task.rb
CHANGED
@@ -6,6 +6,8 @@ require "rake/tasklib"
|
|
6
6
|
require_relative "util"
|
7
7
|
|
8
8
|
module GoGem
|
9
|
+
# rubocop:disable Layout/LineLength
|
10
|
+
|
9
11
|
# Provides rake tasks for `go test` with CRuby
|
10
12
|
#
|
11
13
|
# @example Without config
|
@@ -38,11 +40,15 @@ module GoGem
|
|
38
40
|
# sh "which golangci-lint" do |ok, _|
|
39
41
|
# raise "golangci-lint isn't installed. See. https://golangci-lint.run/welcome/install/" unless ok
|
40
42
|
# end
|
41
|
-
#
|
43
|
+
#
|
44
|
+
# build_tag = GoGem::Util.ruby_minor_version_build_tag
|
45
|
+
# sh GoGem::RakeTask.build_env_vars, "golangci-lint run --build-tags #{build_tag} --modules-download-mode=readonly"
|
42
46
|
# end
|
43
47
|
# end
|
44
48
|
# end
|
45
|
-
class RakeTask < ::Rake::TaskLib
|
49
|
+
class RakeTask < ::Rake::TaskLib
|
50
|
+
# rubocop:enable Layout/LineLength
|
51
|
+
|
46
52
|
DEFAULT_TASK_NAMESPACE = :go
|
47
53
|
|
48
54
|
DEFAULT_GO_BIN_PATH = "go"
|
@@ -97,61 +103,21 @@ module GoGem
|
|
97
103
|
#
|
98
104
|
# @return [Hash<String, String>]
|
99
105
|
def self.build_env_vars
|
100
|
-
ldflags = generate_ldflags
|
101
|
-
cflags = generate_cflags
|
102
|
-
|
103
|
-
# FIXME: Workaround for Ubuntu (GitHub Actions)
|
104
|
-
if RUBY_PLATFORM =~ /linux/i
|
105
|
-
cflags.gsub!("-Wno-self-assign", "")
|
106
|
-
cflags.gsub!("-Wno-parentheses-equality", "")
|
107
|
-
cflags.gsub!("-Wno-constant-logical-operand", "")
|
108
|
-
cflags.gsub!("-Wsuggest-attribute=format", "")
|
109
|
-
cflags.gsub!("-Wold-style-definition", "")
|
110
|
-
cflags.gsub!("-Wsuggest-attribute=noreturn", "")
|
111
|
-
ldflags.gsub!("-Wl,--unresolved-symbols=ignore-all", "")
|
112
|
-
end
|
106
|
+
ldflags = GoGem::Util.generate_ldflags
|
107
|
+
cflags = GoGem::Util.generate_cflags
|
113
108
|
|
114
109
|
ld_library_path = RbConfig::CONFIG["libdir"].to_s
|
115
110
|
|
116
111
|
{
|
117
|
-
"GOFLAGS" => generate_goflags,
|
112
|
+
"GOFLAGS" => GoGem::Util.generate_goflags,
|
118
113
|
"CGO_CFLAGS" => cflags,
|
119
114
|
"CGO_LDFLAGS" => ldflags,
|
120
115
|
"LD_LIBRARY_PATH" => ld_library_path,
|
121
116
|
}
|
122
117
|
end
|
123
118
|
|
124
|
-
#
|
125
|
-
|
126
|
-
"-tags=#{GoGem::Util.ruby_minor_version_build_tag}"
|
127
|
-
end
|
128
|
-
private_class_method :generate_goflags
|
129
|
-
|
130
|
-
# @return [String]
|
131
|
-
def self.generate_ldflags
|
132
|
-
ldflags = "-L#{RbConfig::CONFIG["libdir"]} -l#{RbConfig::CONFIG["RUBY_SO_NAME"]}"
|
133
|
-
|
134
|
-
case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
|
135
|
-
when /Free Software Foundation/
|
136
|
-
ldflags << " -Wl,--unresolved-symbols=ignore-all"
|
137
|
-
when /clang/
|
138
|
-
ldflags << " -undefined dynamic_lookup"
|
139
|
-
end
|
140
|
-
|
141
|
-
ldflags
|
142
|
-
end
|
143
|
-
private_class_method :generate_ldflags
|
144
|
-
|
145
|
-
# @return [String]
|
146
|
-
def self.generate_cflags
|
147
|
-
[
|
148
|
-
RbConfig::CONFIG["CFLAGS"],
|
149
|
-
"-I#{RbConfig::CONFIG["rubyarchhdrdir"]}",
|
150
|
-
"-I#{RbConfig::CONFIG["rubyhdrdir"]}",
|
151
|
-
].join(" ")
|
152
|
-
end
|
153
|
-
private_class_method :generate_cflags
|
154
|
-
|
119
|
+
# Change current working dir inside `ext/<GEM_NAME>/`
|
120
|
+
#
|
155
121
|
# @yield
|
156
122
|
def within_target_dir
|
157
123
|
Dir.chdir(target_dir) do # rubocop:disable Style/ExplicitBlockArgument
|
@@ -159,7 +125,7 @@ module GoGem
|
|
159
125
|
end
|
160
126
|
end
|
161
127
|
|
162
|
-
# @return [String]
|
128
|
+
# @return [String] ext dir name (e.g.`ext/<GEM_NAME>/`)
|
163
129
|
def ext_dir
|
164
130
|
File.join("ext", gem_name)
|
165
131
|
end
|
data/lib/go_gem/util.rb
CHANGED
@@ -14,5 +14,52 @@ module GoGem
|
|
14
14
|
def self.ruby_minor_version_build_tag(ruby_version = RUBY_VERSION)
|
15
15
|
"ruby_#{ruby_version.to_f.to_s.gsub(".", "_")}"
|
16
16
|
end
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
def self.generate_ldflags
|
20
|
+
ldflags = "-L#{RbConfig::CONFIG["libdir"]} -l#{RbConfig::CONFIG["RUBY_SO_NAME"]}"
|
21
|
+
|
22
|
+
case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
|
23
|
+
when /Free Software Foundation/
|
24
|
+
ldflags << " -Wl,--unresolved-symbols=ignore-all"
|
25
|
+
when /clang/
|
26
|
+
ldflags << " -undefined dynamic_lookup"
|
27
|
+
end
|
28
|
+
|
29
|
+
# FIXME: Workaround for Ubuntu (GitHub Actions)
|
30
|
+
ldflags.gsub!("-Wl,--unresolved-symbols=ignore-all", "") if RUBY_PLATFORM =~ /linux/i
|
31
|
+
|
32
|
+
ldflags.strip
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [String]
|
36
|
+
def self.generate_cflags
|
37
|
+
cflags =
|
38
|
+
[
|
39
|
+
RbConfig::CONFIG["CFLAGS"],
|
40
|
+
"-I#{RbConfig::CONFIG["rubyarchhdrdir"]}",
|
41
|
+
"-I#{RbConfig::CONFIG["rubyhdrdir"]}",
|
42
|
+
].join(" ")
|
43
|
+
|
44
|
+
# FIXME: Workaround for Ubuntu (GitHub Actions)
|
45
|
+
if RUBY_PLATFORM =~ /linux/i
|
46
|
+
cflags.gsub!("-Wno-self-assign", "")
|
47
|
+
cflags.gsub!("-Wno-parentheses-equality", "")
|
48
|
+
cflags.gsub!("-Wno-constant-logical-operand", "")
|
49
|
+
cflags.gsub!("-Wsuggest-attribute=format", "")
|
50
|
+
cflags.gsub!("-Wold-style-definition", "")
|
51
|
+
cflags.gsub!("-Wsuggest-attribute=noreturn", "")
|
52
|
+
end
|
53
|
+
|
54
|
+
# FIXME: Workaround for Alpine
|
55
|
+
cflags.gsub!("-Wpointer-arith", "") if RUBY_PLATFORM =~ /linux-musl/i
|
56
|
+
|
57
|
+
cflags.strip
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def self.generate_goflags
|
62
|
+
"-tags=#{ruby_minor_version_build_tag}"
|
63
|
+
end
|
17
64
|
end
|
18
65
|
end
|
data/lib/go_gem/version.rb
CHANGED
data/sig/go_gem/mkmf.rbs
CHANGED
data/sig/go_gem/rake_task.rbs
CHANGED
@@ -30,12 +30,6 @@ module GoGem
|
|
30
30
|
|
31
31
|
def self.build_env_vars: () -> { "GOFLAGS" => String, "CGO_CFLAGS" => String, "CGO_LDFLAGS" => String, "LD_LIBRARY_PATH" => String }
|
32
32
|
|
33
|
-
def self.generate_goflags: () -> String
|
34
|
-
|
35
|
-
def self.generate_ldflags: () -> String
|
36
|
-
|
37
|
-
def self.generate_cflags: () -> String
|
38
|
-
|
39
33
|
private
|
40
34
|
|
41
35
|
def define_go_test_task: () -> void
|
data/sig/go_gem/util.rbs
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go_gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sue445
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-02-25 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
description: Helpers for compiling Go extensions for ruby
|
13
13
|
email:
|