On Sat, 11 Dec 2004 09:32:42 +0900, nobu.nokada / softhome.net <nobu.nokada / softhome.net> wrote: > At Sat, 11 Dec 2004 07:10:54 +0900, > Berger, Daniel wrote in [ruby-core:03944]: >> It turns out that some Win32 functions, such as AttachConsole(), >> are only conditionally available, and depend on the values of >> specific macros. >> [...] > It doesn't seem meaningful to check the compiling environment. > Rather you should check the target, the environment to run that > extension, no? Yes, it should check the target environment as a native win32 compile, whether done by mingw32 or a Linux cross-compiler or Visual C++, because the problem exists in the Windows API header files. >> This will be more of an issue when 64-bit Windows becomes more >> popular, though I am even hitting it currently with some of the >> Win32Utils extensions I've been working on. >> >> Now, we could leave it up to individual extension authors to set >> this themselves manually, but that's a pain, and error prone >> (it's easy to forget, and some may not know to do it in the first >> place). I thought it would be nice if mkmf would set it for us. >> So, I submit the following patch for consideration: > I guess that developers who intend to restrict the target > should add such macros by themselves. I disagree completely. The developers may not be intending to restrict the target, but are using features that appear to be available in the Win32 API and are often silently not available based on the version of this _WIN32_WINNT or _WIN32_WINDOWS value. Additionally, differing behind-the-scenes implementations may be made present depending on this value (oddly enough). At work, we have had to set _WIN32_WINNT to 0x0501 in order to get the proper version of Winsock2. This is no different than setting optimisation levels based on the compiler accepts. Or maybe setting macros to ensure that BSD-style semantics are followed. Now, what I'll actually suggest is that this value should be set in the compiling of Ruby, not in mkmf and that this value should be used by mkmf from config.rb. That way, extensions are (by default) compiled to match the expectations of the compiled version of Ruby. If, then, the extension maintainer wants to compile to a different Windows target, it can be done easily. -austin -- Austin Ziegler * halostatue / gmail.com * Alternate: austin / halostatue.ca