Project

General

Profile

Bug #9824

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

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: 

 ~~~makefile 
 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: 

 ~~~makefile 
 #### Start of system configuration section. #### 

 srcdir = . 
 topdir = etc... 
 ~~~ 

 So I just added: 

 ~~~makefile 
 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: 

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

 I presume `top_srcdir` top_srcdir did not get printed out to the `Makefile` Makefile because `$extmk` $extmk (which I cannot figure out what it is) returned `false` false (notice the "`if $extmk`" "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! 

Back