Issue #13302 has been updated by rhenium (Kazuki Yamaguchi).


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?


----------------------------------------
Feature #13302: Provide a (force) --enable-openssl switch for ruby ./configure (or similar)
https://bugs.ruby-lang.org/issues/13302#change-63558

* Author: shevegen (Robert A. Heiler)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
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.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>