Project

General

Profile

Actions

Bug #3834

closed

ext/openssl fails to build in certain scenarios due to misordered pkg-config check

Added by erikh (Erik Hollensbe) over 13 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
ruby -v:
HEAD
Backport:
[ruby-core:32406]

Description

=begin
If mkmf via ext/openssl/extconf.rb is allowed to search for both headers and libs before consulting pkg-config, multiple installations of openssl will cause trouble during build time.

This is evident on my OS X 10.6 system with macports, gcc 4.2.1 from macports, openssl 1.0.0a from macports, and openssl 0.9.x provided by OS X. The problem appears at a glance is that it will locate the 1.0 headers first, the 0.9 libs first, and then prepare the conftest programs with improper ldflags based on its findings.

It's entirely probable there's a deeper autoconf, rbconfig, mkmf, or compiler issue that I am missing, but the solution I found is in the attached patch, which is to run pkg_config first, and in the event it fails, fall back to the default header / lib search that was previously in place. I think this will work for situations where pkg-config isn't available for openssl, but I was unable to test that case.
=end


Files

ssl_compile_fix.patch.gz (426 Bytes) ssl_compile_fix.patch.gz erikh (Erik Hollensbe), 09/16/2010 05:22 AM
Actions #1

Updated by tenderlovemaking (Aaron Patterson) over 13 years ago

  • Assignee set to tenderlovemaking (Aaron Patterson)

=begin
This patch seems good to me, but I'm not sure how pkg_config will behave on windows builds.

Luis, can you comment on this?
=end

Actions #2

Updated by luislavena (Luis Lavena) over 13 years ago

=begin
Hello,

RubyInstaller do not bundle pkg-config, so that part will fail and will check for crypto libeay32 and ssl ssleay32 as usual.

I just checked and compiles fine, following are the snip of mkmf.log that matters:


package configuration for openssl is not found
have_header: checking for openssl/ssl.h... -------------------- yes

"gcc -E -I../../.ext/include/i386-mingw32 -I../../../../../../ruby/include -I../../../../../../ruby/ext/openssl -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long conftest.c -o conftest.i"
checked program was:
/* begin /
1: #include "ruby.h"
2:
3: #include <winsock2.h>
4: #include <windows.h>
5: #include <openssl/ssl.h>
/
end */


=end

Actions #3

Updated by luislavena (Luis Lavena) over 13 years ago

=begin
Sorry, forgot to mention.

It needs to be:

result = pkg_config("openssl") && have_header("openssl/ssl.h")

As we don't want consider all the libraries found just because it found oepnssl/ssl.h header file. Correct?
=end

Actions #4

Updated by tenderlovemaking (Aaron Patterson) over 13 years ago

=begin
Yes, I think you're correct. I'll apply the patch and update with that change. Thanks for testing this Luis!
=end

Actions #5

Updated by Anonymous over 13 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r30167.
Erik, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0