Skip to content

Commit 73ba872

Browse files
authored
Merge pull request #763 from joshcooper/libffi_pdk
Install missing dependencies for Ruby 3.2
2 parents 944f15c + 81059f6 commit 73ba872

File tree

3 files changed

+46
-30
lines changed

3 files changed

+46
-30
lines changed

Diff for: configs/components/_base-ruby.rb

+29-11
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,32 @@
114114
[ "#{platform[:make]} -j$(shell expr $(shell #{platform[:num_cores]}) + 1) install" ]
115115
end
116116

117+
# For the pdk runtime, the ruby bin directory is different then the main bin
118+
# directory. In order to run ruby *outside* of the normal pdk.bat then we need
119+
# to copy all dlls that ruby depends on from the main bin directory to ruby's
120+
# bin directory. This is because the main bin directory is not in our system
121+
# PATH and Windows doesn't support RPATH. However, as mentioned in
122+
# https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order,
123+
# Windows searches for DLLs in "The folder the calling process was loaded from
124+
# (the executable's folder)."
125+
#
126+
# The agent runtime used to have the same issue prior to puppet 6, for example
127+
# RE-7593. However, Windows paths were changed to match *nix in puppet 6, see
128+
# commit 4b9d126dd5b. So only the pdk has this issue.
117129
if platform.is_windows? && settings[:bindir] != ruby_bindir
118-
# As things stand right now, ssl should build under [INSTALLDIR]\Puppet\puppet on
119-
# windows. However, if things need to run *outside* of the normal batch file runs
120-
# (puppet.bat ,mco.bat etcc) the location of openssl away from where ruby is
121-
# installed will cause a failure. Specifically this is meant to help services like
122-
# mco that require openssl but don't have access to environment.bat. Refer to
123-
# https://tickets.puppetlabs.com/browse/RE-7593 for details on why this causes
124-
# failures and why these copies fix that.
125-
# -Sean P. McDonald 07/01/2016
130+
bindir = settings[:bindir]
131+
132+
# Ruby 3+
133+
if Gem::Version.new(pkg.get_version) >= Gem::Version.new('3.0')
134+
pkg.install do
135+
[
136+
"cp #{settings[:gcc_bindir]}/libssp-0.dll #{ruby_bindir}",
137+
"cp #{bindir}/libffi-8.dll #{ruby_bindir}",
138+
"cp #{bindir}/libyaml-0-2.dll #{ruby_bindir}"
139+
]
140+
end
141+
end
142+
126143
if platform.architecture == "x64"
127144
gcc_postfix = 'seh'
128145
ssl_postfix = '-x64'
@@ -131,6 +148,7 @@
131148
ssl_postfix = ''
132149
end
133150

151+
# OpenSSL
134152
if Gem::Version.new(settings[:openssl_version]) >= Gem::Version.new('3.0')
135153
ssl_lib = "libssl-3#{ssl_postfix}.dll"
136154
crypto_lib = "libcrypto-3#{ssl_postfix}.dll"
@@ -144,9 +162,9 @@
144162

145163
pkg.install do
146164
[
147-
"cp #{settings[:bindir]}/libgcc_s_#{gcc_postfix}-1.dll #{ruby_bindir}",
148-
"cp #{settings[:bindir]}/#{ssl_lib} #{ruby_bindir}",
149-
"cp #{settings[:bindir]}/#{crypto_lib} #{ruby_bindir}",
165+
"cp #{bindir}/libgcc_s_#{gcc_postfix}-1.dll #{ruby_bindir}",
166+
"cp #{bindir}/#{ssl_lib} #{ruby_bindir}",
167+
"cp #{bindir}/#{crypto_lib} #{ruby_bindir}"
150168
]
151169
end
152170

Diff for: configs/components/runtime-pdk.rb

+17-13
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,30 @@
77
pkg.install_file File.join(settings[:gcc_bindir], dll), File.join(settings[:bindir], dll)
88
end
99

10-
# Ruby needs zlib
10+
tools_bindir = File.join(settings[:tools_root], 'bin')
11+
12+
# curl, openssl, etc need zlib, so install in *main* bin dir
1113
pkg.build_requires "pl-zlib-#{platform.architecture}"
12-
pkg.install_file "#{settings[:tools_root]}/bin/zlib1.dll", "#{settings[:bindir]}/zlib1.dll"
14+
pkg.install_file "#{tools_bindir}/zlib1.dll", "#{settings[:bindir]}/zlib1.dll"
1315

1416
# zlib, gdbm, yaml-cpp and iconv are all runtime dependancies of ruby, and their libraries need
15-
# To exist inside our vendored ruby
16-
pkg.install_file "#{settings[:tools_root]}/bin/zlib1.dll", "#{settings[:ruby_bindir]}/zlib1.dll"
17-
pkg.install_file "#{settings[:tools_root]}/bin/libgdbm-4.dll", "#{settings[:ruby_bindir]}/libgdbm-4.dll"
18-
pkg.install_file "#{settings[:tools_root]}/bin/libgdbm_compat-4.dll", "#{settings[:ruby_bindir]}/libgdbm_compat-4.dll"
19-
pkg.install_file "#{settings[:tools_root]}/bin/libiconv-2.dll", "#{settings[:ruby_bindir]}/libiconv-2.dll"
20-
pkg.install_file "#{settings[:tools_root]}/bin/libffi-6.dll", "#{settings[:ruby_bindir]}/libffi-6.dll"
17+
# to exist inside our primary ruby's bin dir
18+
ruby_bindir = settings[:ruby_bindir]
19+
pkg.install_file "#{tools_bindir}/zlib1.dll", "#{ruby_bindir}/zlib1.dll"
20+
pkg.install_file "#{tools_bindir}/libgdbm-4.dll", "#{ruby_bindir}/libgdbm-4.dll"
21+
pkg.install_file "#{tools_bindir}/libgdbm_compat-4.dll", "#{ruby_bindir}/libgdbm_compat-4.dll"
22+
pkg.install_file "#{tools_bindir}/libiconv-2.dll", "#{ruby_bindir}/libiconv-2.dll"
23+
pkg.install_file "#{tools_bindir}/libffi-6.dll", "#{ruby_bindir}/libffi-6.dll" if settings[:ruby_version].start_with?('2')
2124

2225
# Copy the DLLs into additional ruby install bindirs as well.
2326
if settings.has_key?(:additional_rubies)
2427
settings[:additional_rubies].each do |rubyver, local_settings|
25-
pkg.install_file "#{settings[:tools_root]}/bin/zlib1.dll", "#{local_settings[:ruby_bindir]}/zlib1.dll"
26-
pkg.install_file "#{settings[:tools_root]}/bin/libgdbm-4.dll", "#{local_settings[:ruby_bindir]}/libgdbm-4.dll"
27-
pkg.install_file "#{settings[:tools_root]}/bin/libgdbm_compat-4.dll", "#{local_settings[:ruby_bindir]}/libgdbm_compat-4.dll"
28-
pkg.install_file "#{settings[:tools_root]}/bin/libiconv-2.dll", "#{local_settings[:ruby_bindir]}/libiconv-2.dll"
29-
pkg.install_file "#{settings[:tools_root]}/bin/libffi-6.dll", "#{local_settings[:ruby_bindir]}/libffi-6.dll"
28+
local_bindir = local_settings[:ruby_bindir]
29+
pkg.install_file "#{tools_bindir}/zlib1.dll", "#{local_bindir}/zlib1.dll"
30+
pkg.install_file "#{tools_bindir}/libgdbm-4.dll", "#{local_bindir}/libgdbm-4.dll"
31+
pkg.install_file "#{tools_bindir}/libgdbm_compat-4.dll", "#{local_bindir}/libgdbm_compat-4.dll"
32+
pkg.install_file "#{tools_bindir}/libiconv-2.dll", "#{local_bindir}/libiconv-2.dll"
33+
pkg.install_file "#{tools_bindir}/libffi-6.dll", "#{local_bindir}/libffi-6.dll" if rubyver.start_with?('2')
3034
end
3135
end
3236

Diff for: configs/projects/_pdk-components.rb

-6
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@
2525
proj.component 'libxslt' unless platform.is_windows?
2626
proj.component "ruby-#{proj.ruby_version}"
2727

28-
# After installing ruby, we need to copy libssp to the ruby bindir on windows
29-
if platform.is_windows?
30-
ruby_component = @project.get_component "ruby-#{proj.ruby_version}"
31-
ruby_component.install.push "cp '#{settings[:bindir]}/libssp-0.dll' '#{settings[:ruby_bindir]}/libssp-0.dll'"
32-
end
33-
3428
proj.component 'ruby-augeas' unless platform.is_windows?
3529
proj.component 'ruby-selinux' if platform.is_el? || platform.is_fedora?
3630
proj.component 'ruby-stomp'

0 commit comments

Comments
 (0)