Project

General

Profile

Actions

Feature #13302

closed

Provide a (force) --enable-openssl switch for ruby ./configure (or similar)

Added by shevegen (Robert A. Heiler) about 7 years ago. Updated almost 7 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:80033]

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) about 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) about 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) almost 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) almost 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.

Actions #5

Updated by Anonymous almost 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) almost 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.

Actions #7

Updated by nobu (Nobuyoshi Nakada) almost 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0