Feature #13302
closed
Updated by MSP-Greg (Greg L) over 8 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 8 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 <[email protected]>
Date: Mon, 13 Mar 2017 20:47:19 +0900
Subject: [] 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) about 8 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) about 8 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 first, you'll see conflicts.
Updated by Anonymous about 8 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 ]
Updated by rhenium (Kazuki Yamaguchi) about 8 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 first, you'll see conflicts.
Thanks for review, committed as r58404.
Updated by nobu (Nobuyoshi Nakada) about 8 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 ]template/exts.mk.tmpl: move
exit
at the end.