diff --git a/_gem/lib/go_gem/mkmf.rb b/_gem/lib/go_gem/mkmf.rb index 14305e95..894dd1ac 100644 --- a/_gem/lib/go_gem/mkmf.rb +++ b/_gem/lib/go_gem/mkmf.rb @@ -28,13 +28,7 @@ def $objs.empty?; false; end create_makefile(target, srcprefix) - case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition - when /Free Software Foundation/ - ldflags = "-Wl,--unresolved-symbols=ignore-all" - when /clang/ - ldflags = "-undefined dynamic_lookup" - end - + ldflags = GoGem::Util.generate_ldflags current_dir = File.expand_path(".") goflags = "-tags=#{GoGem::Util.ruby_minor_version_build_tag}" diff --git a/_gem/lib/go_gem/rake_task.rb b/_gem/lib/go_gem/rake_task.rb index 7b2984ca..5ee51c70 100644 --- a/_gem/lib/go_gem/rake_task.rb +++ b/_gem/lib/go_gem/rake_task.rb @@ -44,7 +44,7 @@ module GoGem # end # end # end - class RakeTask < ::Rake::TaskLib # rubocop:disable Metrics/ClassLength + class RakeTask < ::Rake::TaskLib DEFAULT_TASK_NAMESPACE = :go DEFAULT_GO_BIN_PATH = "go" @@ -99,61 +99,19 @@ def initialize(gem_name) # # @return [Hash] def self.build_env_vars - ldflags = generate_ldflags - cflags = generate_cflags - - # FIXME: Workaround for Ubuntu (GitHub Actions) - if RUBY_PLATFORM =~ /linux/i - cflags.gsub!("-Wno-self-assign", "") - cflags.gsub!("-Wno-parentheses-equality", "") - cflags.gsub!("-Wno-constant-logical-operand", "") - cflags.gsub!("-Wsuggest-attribute=format", "") - cflags.gsub!("-Wold-style-definition", "") - cflags.gsub!("-Wsuggest-attribute=noreturn", "") - ldflags.gsub!("-Wl,--unresolved-symbols=ignore-all", "") - end + ldflags = GoGem::Util.generate_ldflags + cflags = GoGem::Util.generate_cflags ld_library_path = RbConfig::CONFIG["libdir"].to_s { - "GOFLAGS" => generate_goflags, + "GOFLAGS" => GoGem::Util.generate_goflags, "CGO_CFLAGS" => cflags, "CGO_LDFLAGS" => ldflags, "LD_LIBRARY_PATH" => ld_library_path, } end - # @return [String] - def self.generate_goflags - "-tags=#{GoGem::Util.ruby_minor_version_build_tag}" - end - private_class_method :generate_goflags - - # @return [String] - def self.generate_ldflags - ldflags = "-L#{RbConfig::CONFIG["libdir"]} -l#{RbConfig::CONFIG["RUBY_SO_NAME"]}" - - case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition - when /Free Software Foundation/ - ldflags << " -Wl,--unresolved-symbols=ignore-all" - when /clang/ - ldflags << " -undefined dynamic_lookup" - end - - ldflags - end - private_class_method :generate_ldflags - - # @return [String] - def self.generate_cflags - [ - RbConfig::CONFIG["CFLAGS"], - "-I#{RbConfig::CONFIG["rubyarchhdrdir"]}", - "-I#{RbConfig::CONFIG["rubyhdrdir"]}", - ].join(" ") - end - private_class_method :generate_cflags - # @yield def within_target_dir Dir.chdir(target_dir) do # rubocop:disable Style/ExplicitBlockArgument diff --git a/_gem/lib/go_gem/util.rb b/_gem/lib/go_gem/util.rb index b3a0de26..c0a40e24 100644 --- a/_gem/lib/go_gem/util.rb +++ b/_gem/lib/go_gem/util.rb @@ -14,5 +14,52 @@ module Util def self.ruby_minor_version_build_tag(ruby_version = RUBY_VERSION) "ruby_#{ruby_version.to_f.to_s.gsub(".", "_")}" end + + # @return [String] + def self.generate_ldflags + ldflags = "-L#{RbConfig::CONFIG["libdir"]} -l#{RbConfig::CONFIG["RUBY_SO_NAME"]}" + + case `#{RbConfig::CONFIG["CC"]} --version` # rubocop:disable Lint/LiteralAsCondition + when /Free Software Foundation/ + ldflags << " -Wl,--unresolved-symbols=ignore-all" + when /clang/ + ldflags << " -undefined dynamic_lookup" + end + + # FIXME: Workaround for Ubuntu (GitHub Actions) + ldflags.gsub!("-Wl,--unresolved-symbols=ignore-all", "") if RUBY_PLATFORM =~ /linux/i + + ldflags.strip + end + + # @return [String] + def self.generate_cflags + cflags = + [ + RbConfig::CONFIG["CFLAGS"], + "-I#{RbConfig::CONFIG["rubyarchhdrdir"]}", + "-I#{RbConfig::CONFIG["rubyhdrdir"]}", + ].join(" ") + + # FIXME: Workaround for Ubuntu (GitHub Actions) + if RUBY_PLATFORM =~ /linux/i + cflags.gsub!("-Wno-self-assign", "") + cflags.gsub!("-Wno-parentheses-equality", "") + cflags.gsub!("-Wno-constant-logical-operand", "") + cflags.gsub!("-Wsuggest-attribute=format", "") + cflags.gsub!("-Wold-style-definition", "") + cflags.gsub!("-Wsuggest-attribute=noreturn", "") + end + + # FIXME: Workaround for Alpine + cflags.gsub!("-Wpointer-arith", "") if RUBY_PLATFORM =~ /linux-musl/i + + cflags.strip + end + + # @return [String] + def self.generate_goflags + "-tags=#{ruby_minor_version_build_tag}" + end end end diff --git a/_gem/sig/go_gem/rake_task.rbs b/_gem/sig/go_gem/rake_task.rbs index 7944719e..b293c777 100644 --- a/_gem/sig/go_gem/rake_task.rbs +++ b/_gem/sig/go_gem/rake_task.rbs @@ -30,12 +30,6 @@ module GoGem def self.build_env_vars: () -> { "GOFLAGS" => String, "CGO_CFLAGS" => String, "CGO_LDFLAGS" => String, "LD_LIBRARY_PATH" => String } - def self.generate_goflags: () -> String - - def self.generate_ldflags: () -> String - - def self.generate_cflags: () -> String - private def define_go_test_task: () -> void diff --git a/_gem/sig/go_gem/util.rbs b/_gem/sig/go_gem/util.rbs index 0da14a18..2e45578c 100644 --- a/_gem/sig/go_gem/util.rbs +++ b/_gem/sig/go_gem/util.rbs @@ -1,5 +1,11 @@ module GoGem module Util def self.ruby_minor_version_build_tag: (?String ruby_version) -> String + + def self.generate_ldflags: () -> String + + def self.generate_cflags: () -> String + + def self.generate_goflags: () -> String end end