Issue #16517 has been updated by larskanis (Lars Kanis).


I think `mkmf.rb` is a good place to add `require 'devkit'`. It doesn't catch the cases where the Rakefile makes use of development or shell tools (`which` etc.), but it would enable the typical extension build in CI without further measurements. `require 'devkit'` will fail in cross build environment aka. rake-compiler-dock, but since it's rescued, it doesn't matter much.

If this is not acceptable to be added to ruby, I'm positive to add this to RubyInstaller including backports. That's maybe the better place anyway, since the corresponding `gem install` hook is added in RubyInstaller as well (not in ruby or rubygems).

Although I don't case much about mswin alias Visual-C platform, `require 'devkit'` could be useful there as well. They use a similar development environment which is enabled by various environment variables.

----------------------------------------
Feature #16517: mkmf.rb - changes for Windows ?
https://bugs.ruby-lang.org/issues/16517#change-83979

* Author: MSP-Greg (Greg L)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
I propose two changes to mkmf.rb to make it more Windows friendly.

1) mingw - `devkit` has been the standard for 'enabling' compile tools in publicly available MinGW builds for quite a while.  Could something like the following be added?  Not sure whether to rescue on LoadError or not, or whether to output anything if it doesn't load.

```ruby
if $mingw
  begin
    require 'devkit'
  rescue
  end
end
```

2) mswin - most compile tools other than msvc will find libraries without a lib prefix.  Note the following code in extconf.rb for OpenSSL:

```ruby
ret = have_library("crypto", "CRYPTO_malloc") &&
  have_library("ssl", "SSL_new")
return ret if ret

if $mswin
  # OpenSSL >= 1.1.0: libcrypto.lib and libssl.lib.
  if have_library("libcrypto", "CRYPTO_malloc") &&
      have_library("libssl", "SSL_new")
    return true
  end
```

If something like the following was added, the above wouldn't be needed:

```ruby
if $mswin
  alias_method :orig_find_library, :find_library
  
  def find_library(lib, func, *paths, &b)
    orig_find_library(lib, func, *paths, b) || orig_find_library("lib#{lib}", func, *paths, b)
  end

  alias_method :orig_have_library, :have_library

  def have_library(lib, func = nil, headers = nil, opt = "", &b)
    orig_have_library(lib, func, headers, opt, b) || orig_have_library("lib#{lib}", func, headers, opt, b)
  end
end
```

Adding something similar to above two items would remove the need for Windows specific build code in many extension gems.




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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>