Feature #13302
closedProvide a (force) --enable-openssl switch for ruby ./configure (or similar)
Description
I am currently setting up a lot of programs on a fresh installation.
Ruby compiles fine but I am having some problem getting openssl to
work properly. Since it is not trivial for me to find out where
the problem is exactly, I would like to suggest a commandline
switch option such as --enable-openssl that will only compile
ruby if it can also use the openssl bindings.
The ruby that is compiled without openssl is for me not very
useful, largely because I can not use gem publish without
openssl.
If such an option would exist, it is my hope that I could use
it, and then ruby would also tell me why it can not use
openssl.
For the record, I was using the LFS way to install openssl:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssl.html
Openssl also compiled fine. I suspect that ruby may get
confused by some files by the host pclinuxos system but
until I have found out where the problem is, I think it
would be nice i ruby would have a corresponding switch
to only compile if openssl can also be used, as otherwise
this ruby variant is not very useful to me and I will waste
time compiling something that I know won't be too useful.
Sometimes going into ext/ can help here but ext/openssl
is also not useful for me right now.
Updated by MSP-Greg (Greg L) over 7 years ago
Robert A. Heiler wrote:
Ruby compiles fine
Openssl also compiled fine
Just to be clear, did OpenSSL test fine, along with Ruby?
I'm a windows type, so I have no experience with your OS, but I've been doing a lot of testing lately...
Updated by rhenium (Kazuki Yamaguchi) over 7 years ago
We can know whether the system OpenSSL library is usable or not only after a miniruby is built, which is probably too late for such an option to be useful.
However I agree there are rooms for improvement. Here is the message shown when ext/*/extconf.rb fails:
configuring openssl
<snip...>
*** Following extensions failed to configure:
../.././ext/openssl/extconf.rb:0: Failed to configure openssl. It will not be installed.
*** Fix the problems, then remove these directories and try again if you want.
This is not informative about what exactly caused the failure. Actually, everything is logged to ext/*/mkmf.log, but people would never find this without googling. Maybe a change to ext/extmk.rb something like this would make it better?
From 2048a2fcb63952201f2bab404c6d01a99159449a Mon Sep 17 00:00:00 2001
From: Kazuki Yamaguchi <k@rhe.jp>
Date: Mon, 13 Mar 2017 20:47:19 +0900
Subject: [PATCH] ext/extmk.rb: mention ext/*/mkmf.log if configuring
extensions fails
---
ext/extmk.rb | 39 ++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 4317a2a8a333..931242a31d5b 100755
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -222,7 +222,6 @@ def extmake(target, basedir = 'ext', maybestatic = true)
rescue SystemExit
# ignore
rescue => error
- lineno = error.backtrace_locations[0].lineno
ok = false
ensure
rm_f "conftest*"
@@ -238,18 +237,16 @@ def extmake(target, basedir = 'ext', maybestatic = true)
return true if !error and target.start_with?("-")
- if parent
- message = "Failed to configure #{target}. It will not be installed."
- else
- message = "Skipped to configure #{target}. Its parent is not configured."
- end
- if Logging.log_opened?
- Logging::message(error.to_s) if error
- Logging::message(message)
+ message = nil
+ if error
+ bl = error.backtrace_locations[0]
+ message = "#{bl.absolute_path}:#{bl.lineno}: #{error.message}"
+ if Logging.log_opened?
+ Logging::message("#{message}\n\t#{error.backtrace.join("\n\t")}\n")
+ end
end
- message = error.message if error
- return parent ? [conf, lineno||0, message] : true
+ return [parent, message]
end
args = $mflags
unless $destdir.to_s.empty? or $mflags.defined?("DESTDIR")
@@ -560,7 +557,7 @@ def create_makefile(*args, &block)
if !$nodynamic or $static
result = extmake(d, ext_prefix, !@gemname) or abort
extso |= $extso
- fails << result unless result == true
+ fails << [d, result] unless result == true
end
end
@@ -719,15 +716,19 @@ def mf.macro(name, values, max = 70)
mf.puts "\n""note:\n"
unless fails.empty?
- mf.puts %Q<\t@echo "*** Following extensions failed to configure:">
- fails.each do |d, n, err|
- d = "#{d}:#{n}:"
- if err
- err.scan(/.+/) do |ee|
- mf.puts %Q<\t@echo "#{d} #{ee.gsub(/["`$^]/, '\\\\\\&')}">
+ mf.puts %Q<\t@echo "*** Following extensions are not compiled:">
+ fails.each do |ext, (parent, err)|
+ mf.puts %Q<\t@echo "#{ext}:">
+ if parent
+ mf.puts %Q<\t@echo "\tCould not be configured. It will not be installed.">
+ if err
+ err&.scan(/.+/) do |ee|
+ mf.puts %Q<\t@echo "\t#{ee.gsub(/["`$^]/, '\\\\\\&')}">
+ end
end
+ mf.puts %Q<\t@echo "\tCheck #{ext_prefix}/#{ext}/mkmf.log for more details.">
else
- mf.puts %Q<\t@echo "#{d}">
+ mf.puts %Q<\t@echo "\tSkipped because its parent was not configured.">
end
end
mf.puts %Q<\t@echo "*** Fix the problems, then remove these directories and try again if you want.">
--
2.12.0.248.g76c07830f945.dirty
By the way, which directories does "*** Fix the problems, then remove these directories and try again if you want." refer to?
Updated by shyouhei (Shyouhei Urabe) over 7 years ago
We looked at this issue in yesterday's developer meeting.
Kazuki's improved log seems good so please go ahead.
Another possible way proposed there was to mandate openssl installation when configure is run with --with-ext=openssl, i.e. --with-ext (which is rarely used now) to generate Makefile so that make all depends on the given extension library.
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
rhenium (Kazuki Yamaguchi) wrote:
This is not informative about what exactly caused the failure. Actually, everything is logged to ext/*/mkmf.log, but people would never find this without googling. Maybe a change to ext/extmk.rb something like this would make it better?
Could you commit it?
If I commit my patch first, you'll see conflicts.
Updated by Anonymous over 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r58404.
extmk.rb: improve message printed when configuring extensions fails
Point to the mkmf.log if configuring an extension fails so that people
can find and fix the culprit easily. [ruby-core:80131] [Feature #13302]
Updated by rhenium (Kazuki Yamaguchi) over 7 years ago
- Status changed from Closed to Open
shyouhei (Shyouhei Urabe) wrote:
We looked at this issue in yesterday's developer meeting.
Kazuki's improved log seems good so please go ahead.
nobu (Nobuyoshi Nakada) wrote:
rhenium (Kazuki Yamaguchi) wrote:
This is not informative about what exactly caused the failure. Actually, everything is logged to ext/*/mkmf.log, but people would never find this without googling. Maybe a change to ext/extmk.rb something like this would make it better?
Could you commit it?
If I commit my patch first, you'll see conflicts.
Thanks for review, committed as r58404.
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r58412.
extmk.rb: fail for mandatory libraries
-
ext/extmk.rb: fail if a mandatory extension library failed to
configure. [ruby-core:80759] [Feature #13302] -
template/exts.mk.tmpl: move
exit
at the end.