Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ruby 3.4 compatibility #322

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,20 @@ jobs:
strategy:
fail-fast: false
matrix:
ruby: ['2.7', '3.0', '3.1', '3.2', '3.3'] # 3.4+ is not yet supported by google-protobuf
os: ['ubuntu-latest', 'windows-latest']
ruby:
- '2.7'
- '3.0'
- '3.1'
- '3.2'
- '3.3'
# When 3.4 is released, replace `ruby-head` with `3.4`, `3.4.0-rc1` can't be used on `windows-latest`
- 'ruby-head'
os:
- 'ubuntu-latest'
- 'windows-latest'
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
Expand All @@ -21,4 +30,4 @@ jobs:
run: bundle exec rake test
- name: RuboCop
run: bundle exec rake lint
if: matrix.ruby != '3.1' && matrix.ruby != '3.2' && matrix.ruby != '3.3'
if: matrix.ruby != '3.1' && matrix.ruby != '3.2' && matrix.ruby != '3.3' && matrix.ruby != 'ruby-head'
43 changes: 23 additions & 20 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,35 @@ PATH
GEM
remote: https://rubygems.org/
specs:
ast (2.4.1)
diff-lcs (1.5.0)
docile (1.4.0)
google-protobuf (3.25.5)
parallel (1.20.1)
ast (2.4.2)
bigdecimal (3.1.8)
diff-lcs (1.5.1)
docile (1.4.1)
google-protobuf (4.29.2)
bigdecimal
rake (>= 13)
parallel (1.26.3)
parser (2.7.2.0)
ast (~> 2.4.1)
powerpack (0.1.3)
rainbow (2.2.2)
rake
rake (13.0.3)
rake (13.2.1)
rake-compiler (0.9.9)
rake
rspec (3.12.0)
rspec-core (~> 3.12.0)
rspec-expectations (~> 3.12.0)
rspec-mocks (~> 3.12.0)
rspec-core (3.12.2)
rspec-support (~> 3.12.0)
rspec-expectations (3.12.3)
rspec (3.13.0)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.2)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-mocks (3.12.6)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-support (3.12.1)
rspec-support (~> 3.13.0)
rspec-support (3.13.2)
rubocop (0.49.1)
parallel (~> 1.10)
parser (>= 2.3.3.1, < 3.0)
Expand All @@ -42,14 +45,14 @@ GEM
unicode-display_width (~> 1.0, >= 1.0.1)
rubocop-rspec (1.15.1)
rubocop (>= 0.42.0)
ruby-progressbar (1.10.1)
ruby-progressbar (1.13.0)
simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3)
simplecov-html (0.13.1)
simplecov_json_formatter (0.1.4)
unicode-display_width (1.7.0)
unicode-display_width (1.8.0)

PLATFORMS
ruby
Expand Down
32 changes: 28 additions & 4 deletions ext/pg_query/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,36 @@
$INCFLAGS = "-I#{File.join(__dir__, 'include', 'postgres', 'port', 'win32_msvc')} " + $INCFLAGS
end

SYMFILE =
if RUBY_PLATFORM =~ /freebsd/
File.join(__dir__, 'pg_query_ruby_freebsd.sym')
def have_ruby_abi_version()
# ruby_abi_version is only available in development versions: https://github.com/ruby/ruby/pull/6231
return false if RUBY_PATCHLEVEL >= 0

m = /(\d+)\.(\d+)/.match(RUBY_VERSION)
if m.nil?
puts "Failed to parse ruby version: #{RUBY_VERSION}. Assuming ruby_abi_version symbol is NOT present."
return false
end
major = m[1].to_i
minor = m[2].to_i
if major >= 3 and minor >= 2
puts "Ruby version #{RUBY_VERSION} >= 3.2. Assuming ruby_abi_version symbol is present."
return true
end
puts "Ruby version #{RUBY_VERSION} < 3.2. Assuming ruby_abi_version symbol is NOT present."
false
end

def ext_export_filename()
name = if RUBY_PLATFORM =~ /freebsd/
'pg_query_ruby_freebsd'
elsif RUBY_PLATFORM !~ /cygwin|mswin|mingw|bccwin|wince|emx/
File.join(__dir__, 'pg_query_ruby.sym')
'pg_query_ruby'
end
name += '-with-ruby-abi-version' if have_ruby_abi_version()
"#{name}.sym"
end

SYMFILE = File.join(__dir__, ext_export_filename())

if RUBY_PLATFORM =~ /darwin/
$DLDFLAGS << " -Wl,-exported_symbols_list #{SYMFILE}" unless defined?(::Rubinius)
Expand Down
2 changes: 2 additions & 0 deletions ext/pg_query/pg_query_ruby-with-ruby-abi-version.sym
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
_Init_pg_query
_ruby_abi_version
2 changes: 2 additions & 0 deletions ext/pg_query/pg_query_ruby_freebsd-with-ruby-abi-version.sym
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Init_pg_query
_ruby_abi_version
Loading