Issue #9189 has been updated by phasis68 (Heesob Park).


Yes, the error message is not from ruby, but from mingw compilers.
And I found TMP environtment variable is the actual cause of this error.
Nevertheless, I think Ruby is not entirely free from this error.

If I run "ruby extconf.rb" in ext/bigdecimal folder,
The mkmf works as expected without error on the same environment.

Anyway, I leave this message for the record:
If you want to build ruby from source with Mingw toolchain,
the TMP environment variable should not contain non-ascii string.



----------------------------------------
Bug #9189: Build failure on Windows in case of nonascii TEMP environment.
https://bugs.ruby-lang.org/issues/9189#change-43309

Author: phasis68 (Heesob Park)
Status: Third Party's Issue
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category: 
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


I experienced a build failure during build extension library with trunk on Windows.

	make[2]: Entering directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
	generating bigdecimal-i386-mingw32.def
	compiling bigdecimal.c
	In file included from bigdecimal.c:20:0:
	bigdecimal.h:62:1: error: static declaration of 'labs' follows non-static declar
	ation
	make[2]: *** [bigdecimal.o] Error 1
	make[2]: Leaving directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
	make[1]: *** [ext/bigdecimal/all] Error 2
	make[1]: Leaving directory `/c/work/ruby-2.1.0-r43936'
	make: *** [build-ext] Error 2

I found the cause of this error is mkmk failure.
Here is a part of mkmf.log

	have_func: checking for labs() in stdlib.h... -------------------- no

	"i686-w64-mingw32-gcc -o conftest.exe -I../../.ext/include/i386-mingw32 -I../.././include -I../.././ext/bigdecimal -D_WIN32_WINNT=0x0501 -D_FILE_OFFSET_BITS=64   -O3 -fno-omit-frame-pointer -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -L../.. -L.      -lmsvcrt-ruby210-static  -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi  "

	This application has requested the Runtime to terminate it in an unusual way.
	Please contact the application's support team for more information.
	Cannot create temporary file in C:\Users\??????AppData\Local\Temp\: Invalid argument


The TEMP environment varable is
	
	C:\work\ruby-2.1.0-r43936>set TEMP
	TEMP=C:\Users\??Žė??\AppData\Local\Temp

It seems that miniruby cannot handle encoding properly.
	
	C:\work\ruby-2.1.0-r43936>miniruby -ve "p ENV['TEMP']"
	ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
	"C:\\Users\\\xED\x9D\xAC\xEC\x84\xAD\\AppData\\Local\\Temp"

	C:\work\ruby-2.1.0-r43936>miniruby.exe -ve "p ENV['TEMP'].encoding"
	ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
	#<Encoding:ASCII-8BIT>	
	
Whereas, the final ruby can handle encoding properly.

	C:\work>ruby -ve "p ENV['TEMP']"
	ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
	"C:\\Users\\??Žė??\\AppData\\Local\\Temp"	

	C:\work>ruby -ve "p ENV['TEMP'].encoding"
	ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
	#<Encoding:CP949>



-- 
http://bugs.ruby-lang.org/