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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de781c3ea978d43846ab114c957f973d1273a385b4a2cda8b4ab8bcae31e7b61
4
- data.tar.gz: ff9e4ec5ee199bcc5aeabeec13426caa2db9cf2d593bb5fdca44f164daed6f2f
3
+ metadata.gz: 372d05e6534c3254be71447f646e7d290dd78613048742d2c914143e82d2fad6
4
+ data.tar.gz: aa14dcda3d97d4dc243d40c650b32779c32f4f0a396b76ce434b848b28162855
5
5
  SHA512:
6
- metadata.gz: 55fe501bd31919fe173a8ed9dbb7998a51da0098679e15f3d1ad2da120c62b78d80dc91139feb9056f949d08e49ed0bcd5ef1e217dd6d7e52297baa9039b9871
7
- data.tar.gz: 82d8f84fb59e73fd7e555446fc02121e516fb5a376478a2484174bff7f2e3cdb60e7d5f461432783126fef30130c7b7e6e9081cbe6460957e87de0b1bf8b8cdd
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
- sh GoGem::RakeTask.build_env_vars, "golangci-lint run"
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
- def create_go_makefile(target, srcprefix = nil)
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
- case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition
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
@@ -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
- # sh GoGem::RakeTask.build_env_vars, "golangci-lint run"
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 # rubocop:disable Metrics/ClassLength
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
- # @return [String]
125
- def self.generate_goflags
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GoGem
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.1"
5
5
  end
data/sig/go_gem/mkmf.rbs CHANGED
@@ -2,6 +2,6 @@ module GoGem
2
2
  module Mkmf
3
3
  $objs: Array[untyped]
4
4
 
5
- def create_go_makefile: (String target, String? srcprefix) -> void
5
+ def create_go_makefile: (String target, ?srcprefix: String?, ?go_build_args: String?) -> void
6
6
  end
7
7
  end
@@ -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
@@ -1,5 +1,11 @@
1
1
  module GoGem
2
2
  module Util
3
3
  def self.ruby_minor_version_build_tag: (?String ruby_version) -> String
4
+
5
+ def self.generate_ldflags: () -> String
6
+
7
+ def self.generate_cflags: () -> String
8
+
9
+ def self.generate_goflags: () -> String
4
10
  end
5
11
  end
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.6.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-01-06 00:00:00.000000000 Z
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: