aboutsummaryrefslogtreecommitdiffstats
path: root/ext/openssl
diff options
context:
space:
mode:
authorJun Aruga <jaruga@redhat.com>2023-05-03 20:48:34 +0200
committerJun Aruga <jaruga@redhat.com>2023-07-25 16:47:33 +0200
commitca54087462b5bc48046974d40dc7cdf50da9619c (patch)
tree08c550363040fc7d9327233a335c9eeb3a86bbad /ext/openssl
parentee03210d39c5f037f8aacdbf5f02da69c05664dd (diff)
downloadruby-openssl-ca54087462b5bc48046974d40dc7cdf50da9619c.tar.gz
Raise an error when the specified OpenSSL library directory doesn't exist.
OpenSSL built from the source creates the library directory to the `/path/to/openssl_dir/lib64` as a default. In the case, the `bundle exec rake compile -- --with-openssl-dir=<openssl_dir>` cannot compile with the lib64 directory, and may compile with system OpenSSL's libraries unintentionally. This commit is to check this case to avoid linking with an unintentional library directory.
Diffstat (limited to 'ext/openssl')
-rw-r--r--ext/openssl/extconf.rb24
1 files changed, 22 insertions, 2 deletions
diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb
index 368145d2..4bcf7b9c 100644
--- a/ext/openssl/extconf.rb
+++ b/ext/openssl/extconf.rb
@@ -13,12 +13,32 @@
require "mkmf"
+ssl_dirs = nil
if defined?(::TruffleRuby)
# Always respect the openssl prefix chosen by truffle/openssl-prefix
require 'truffle/openssl-prefix'
- dir_config_given = dir_config("openssl", ENV["OPENSSL_PREFIX"]).any?
+ ssl_dirs = dir_config("openssl", ENV["OPENSSL_PREFIX"])
else
- dir_config_given = dir_config("openssl").any?
+ ssl_dirs = dir_config("openssl")
+end
+dir_config_given = ssl_dirs.any?
+
+_, ssl_ldir = ssl_dirs
+if ssl_ldir&.split(File::PATH_SEPARATOR)&.none? { |dir| File.directory?(dir) }
+ # According to the `mkmf.rb#dir_config`, the `--with-openssl-dir=<dir>` uses
+ # the value of the `File.basename(RbConfig::MAKEFILE_CONFIG["libdir"])` as a
+ # loaded library directory name.
+ ruby_ldir_name = File.basename(RbConfig::MAKEFILE_CONFIG["libdir"])
+
+ raise "OpenSSL library directory could not be found in '#{ssl_ldir}'. " \
+ "You might want to fix this error in one of the following ways.\n" \
+ " * Recompile OpenSSL by configuring it with --libdir=#{ruby_ldir_name} " \
+ " to specify the OpenSSL library directory.\n" \
+ " * Recompile Ruby by configuring it with --libdir=<dir> to specify the " \
+ "Ruby library directory.\n" \
+ " * Compile this openssl gem with --with-openssl-include=<dir> and " \
+ "--with-openssl-lib=<dir> options to specify the OpenSSL include and " \
+ "library directories."
end
dir_config("kerberos")