Sha256: c70e53b9c100491402d68bb20bf24eadc35fdf34255922f261f1bd8f1aa8d5b9

Contents?: true

Size: 965 Bytes

Versions: 48

Compression:

Stored size: 965 Bytes

Contents

# frozen_string_literal: true

require "shellwords"

module RbSys
  class CargoBuilder < Gem::Ext::Builder
    # Converts Ruby link flags into something cargo understands
    # @api private
    class LinkFlagConverter
      FILTERED_PATTERNS = [
        /compress-debug-sections/, # Not supported by all linkers, and not required for Rust
        /^\s*-s\s*$/
      ]

      def self.convert(args)
        Shellwords.split(args).flat_map { |arg| convert_arg(arg) }
      end

      def self.convert_arg(arg)
        return [] if FILTERED_PATTERNS.any? { |p| p.match?(arg) }

        case arg.chomp
        when /^-L\s*(.+)$/
          ["-L", "native=#{$1}"]
        when /^--library=(\w+\S+)$/, /^-l\s*(\w+\S+)$/
          ["-l", $1]
        when /^-l\s*:lib(\S+).(so|dylib|dll)$/
          ["-l", "dylib=#{$1}"]
        when /^-F\s*(.*)$/
          ["-l", "framework=#{$1}"]
        else
          ["-C", "link-arg=#{arg}"]
        end
      end
    end
  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
rb_sys-0.9.110 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.109 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.108 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.107 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.106 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.105 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.104 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.103 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.102 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.101 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.100 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.99 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.98 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.97 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.96 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.94 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.93 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.92 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.91 lib/rb_sys/cargo_builder/link_flag_converter.rb
rb_sys-0.9.90 lib/rb_sys/cargo_builder/link_flag_converter.rb