Project

General

Profile

Bug #9824

mkmf.rb top_srcdir not printed in Makefile of ext/openssl

Added by IgnacioRodrigo (Ignacio Rodrigo) over 6 years ago. Updated over 6 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.1.2-p95 (2014-05-08 revision 45877) [x64-mswin64_100]
[ruby-core:62497]

Description

Hi,

First of all, apologies in advance for the lack of technical knowledge about Ruby, I'm pretty new to it, but I think I have detected a bug in the build process of ext/openssl.

As a newbie, I was trying to build ruby 2.1.2-p95 on my Windows 64-bits machine by compiling everything natively. Compiling ruby itself for Windows x64 went fine, compiling the ext/zlib went fine but... when it came to ext/openssl:

In the windows command prompt I ran:

cd ext/openssl
ruby extconf.rb --with-openssl-dir=<openssl_path>

Everything run fine and the Makefile was created. Then I run:

nmake (using the x64 compiler)

...and got the following error:

NMAKE : fatal error U1073: don't know how to make 'thread_native.h'

After going crazy looking for answers on the internet to no avail I decided to have a look at the Makefile generated. On the last line, I saw:

ossl.obj: $(top_srcdir)/thread_native.h $(top_srcdir)/thread_$(THREAD_MODEL).h

So I said to myself, "OK, so I just need to specify the top_srcdir. I looked for it elsewhere in Makefile and it just wasn't specified anywhere! I realised that all the paths where specified at the top at:

#### Start of system configuration section. ####

srcdir = .
topdir = etc...

So I just added:

top_srcdir: D:\ruby-2.1.2 (the uncompressed ruby 2.1.2-p95 version folder, where thread_native.h and other *.h files are located).

Then I run again in ext/openssl:

nmake

...followed by...

nmake install

...and everything run fine and works!

As I'm pretty new to Ruby I have no idea of the inner workings of Ruby but I tried to track down why the top_srcdir: line was missing in the configuration in Makefile and I managed to track it down to mkmf.rb file in the ruby-2.1.2 folder. Specifically in line 1838 of mkmf.rb:

#{"top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/") if $extmk}

I presume top_srcdir did not get printed out to the Makefile because $extmk (which I cannot figure out what it is) returned false (notice the "if $extmk" conditional).

As I said, I am not at all familiar with the inner workings of Ruby so I was hoping one of you could help fix this so that other people in my same situation don't go crazy trying to fix it?

Thanks a lot for taking the time to read this and for your help in advance!

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Description updated (diff)
  • Status changed from Open to Rejected

Currently openssl extension is tightly bound with the core due to thread handling, so build without ext/extmk.rb is not supported.

Updated by djberg96 (Daniel Berger) over 6 years ago

What does ext/extmk.rb do exactly? There's no documentation for it. Could it be modified to work with the VS compiler?

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

Directs lib/mkmf.rb to sets some variables for header and library directories, e.g.: $top_srcdir.
And Visual C++ compilers have been supported already.

Updated by djberg96 (Daniel Berger) over 6 years ago

Ok, please help me to understand. If Visual C++ is supported, why doesn't $(top_srcdir) get set in the generated Makefile when compiling from source? And is there a way we can set it without resorting to hand editing?

Updated by naruse (Yui NARUSE) over 6 years ago

Daniel Berger wrote:

Ok, please help me to understand. If Visual C++ is supported, why doesn't $(top_srcdir) get set in the generated Makefile when compiling from source? And is there a way we can set it without resorting to hand editing?

run configure.bat and compile entire ruby, don't split.

configure.bat --with-openssl-dir=<dir>
nmake

Also available in: Atom PDF