From: katonbo@... Date: 2014-02-28T03:03:11+00:00 Subject: [ruby-core:61134] [ruby-trunk - Bug #9213] mkmf.rb emits invalid destination directory name for mswin32/64 Issue #9213 has been updated by Masahiro Kitajima. ��������������������������� ## Sample code ### sample.c
void Init_Sample() {
}
### extconf.rb
require "mkmf"
create_makefile("Sample")
## Operation
    C:\TMP>ruby extconf.rb
 1: creating Makefile
    C:\TMP>nmake /N
 1: 
 2: Microsoft (R) Program Maintenance Utility   Version 6.00.9782.0
 3: Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
 4: 
 5:     echo generating Sample-i386-mswin32.def
 6:      \ruby200\bin\ruby -e "puts 'EXPORTS', 'Init_Sample'"  > Sample-i386-mswin32.def
 7:     echo compiling sample.c
 8:      cl -nologo -I. -Ic:/ruby200/include/ruby-2.0.0/i386-mswin32 -Ic:/ruby200/include/ruby-2.0.0/ruby/backward -Ic:/ruby200/include/ruby-2.0.0 -I.  -MD -Zi -W2 -O2b2xg- -G6 -Zm600   -Fosample.obj -c -Tcsample.c
 9:     echo linking shared-object Sample.so
10:     \ruby200\bin\ruby -run -e rm -- -f Sample.so
11:      cl -nologo -LD -FeSample.so sample.obj msvcrt-ruby200.lib  oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib imagehlp.lib shlwapi.lib  -link -incremental:no -debug -opt:ref -opt:icf -incremental:no -debug -opt:ref -opt:icf -dll -libpath:. -libpath:/ruby200/lib  -implib:Sample-i386-mswin32.lib -pdb:Sample-i386-mswin32.pdb -def:Sample-i386-mswin32.def
6��������� 10���������$(RUBY) ������������������������������������������������������������ ---------------------------------------- Bug #9213: mkmf.rb emits invalid destination directory name for mswin32/64 https://bugs.ruby-lang.org/issues/9213#change-45515 * Author: Akio Tajima * Status: Closed * Priority: Normal * Assignee: * Category: lib * Target version: 2.1.0 * ruby -v: ruby 2.0.0p353 (2013-11-22) [i386-mswin32_100] * Backport: 1.9.3: UNKNOWN, 2.0.0: DONE ---------------------------------------- The install process of traditional extended library (=non gem) uses extconf.rb for creating Makefile and install the library by (n)make install. However it does not work correctly because of FileUtil.mkdir met bad directory name as 'c:c:/...'. This is caused by DESTDIR and prefix combination. When one does not specify DESTDIR, rbconfig.rb create it as 'DESTDIR = TOPDIR && TOPDIR[/\A[a-z]:/i] || '' unless defined? DESTDIR' #=> 'C:' or 'D:'. By the other hand CONFIG['prefix'] is (TOPDIR || DESTDIR + '/usr') so the prefixdir also contains 'c:' or 'd:' ... The definition for install directories in mkmf.rb is defined as both DESTDIR and CONFIG['prefix'] directory for example '$(DESTDIR)$(vendorarchdir)$(target_prefix)'. It causes the double drive letter name 'c:c:...'. While there are some workarounds as using setup.rb or gem, it's harmful for the testing phase of extended libraries. -- http://bugs.ruby-lang.org/