Sorry, some details are missing and not accurate. The correct situation is : The lack of WIN32 causes bad result (compilation error) of conftest for some type of win32 extension libraries depending structure's complicacy. The problem is: - define 'have_header('..') in extconf.rb, and the header file uses some kludge for push/pop for struct padding. (for example: http.h) - mkmf.rb creates conftest.c for the header with some usual ruby's (cf, win32.h). - but no other user specific macro or header are supplied, so at this point conftest.c has neither _WIN64 nor WIN32. - start to compile contest.c by mkmf.rb - win32.h includes winsock2.h and it requires WIN32 or _WIN64 but there is no chance to supply it. This causes no push/pop for structures's padding. - then the targeted header is included and failed by bad padding (because the last status of padding of winsock2.h) - so compilation of conftest.c fails. - building the extension library may fail too. So, it's very harmful for Win32 ruby extension library programers without r30989. -- arton <artonx / yahoo.co.jp>