From: nobu@... Date: 2014-05-10T15:23:13+00:00 Subject: [ruby-core:62513] [ruby-trunk - Bug #9824] mkmf.rb top_srcdir not printed in Makefile of ext/openssl Issue #9824 has been updated by Nobuyoshi Nakada. 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. ---------------------------------------- Bug #9824: mkmf.rb top_srcdir not printed in Makefile of ext/openssl https://bugs.ruby-lang.org/issues/9824#change-46674 * Author: Ignacio Rodrigo * Status: Rejected * Priority: Normal * Assignee: * Category: ext/openssl * Target version: * ruby -v: 2.1.2-p95 (2014-05-08 revision 45877) [x64-mswin64_100] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- 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= ~~~ 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` 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! -- https://bugs.ruby-lang.org/