| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since Rubygems 3.3.21, the Gem::Platform name always contains the
library version for gnu platforms. So where the rake-compiler config
entries previously were:
```yaml
---
rbconfig-x86_64-linux-gnu-2.7.0: "/usr/local/rake-compiler/ruby/x86_64-redhat-linux/ruby-2.7.0/lib/ruby/2.7.0/x86_64-linux-gnu/rbconfig.rb"
rbconfig-x86_64-linux-2.7.0: "/usr/local/rake-compiler/ruby/x86_64-redhat-linux/ruby-2.7.0/lib/ruby/2.7.0/x86_64-linux-gnu/rbconfig.rb"
```
with later versions of rubygems, it is only
```yaml
---
rbconfig-x86_64-linux-gnu-2.7.0: "/usr/local/rake-compiler/ruby/x86_64-redhat-linux/ruby-2.7.0/lib/ruby/2.7.0/x86_64-linux-gnu/rbconfig.rb"
```
This means that the current way of finding a matching runtime, by doing
a string comparison on the config keys, is no longer appropriate. This
is causing failing builds downstream in `rake-compiler-dock`.
This PR:
- extracts a new CompilerConfig class to encapsulate the logic
- uses `Gem::Platform#=~` to tell if the gem platform matches the
runtime platform
|
|
|
|
|
|
|
| |
Because yaml requires stringio implicitly. If stringio is required, we
can't use rake-compiler for stringio.
See also: https://github.com/ruby/stringio/pull/21#issuecomment-1082632676
|
|
|
|
|
|
|
| |
(#199)
The required_ruby_version was set twice, although one in define_native_tasks is enough.
Fixes #198
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
GitHub: fix GH-195
It's caused when base Ruby and cross Ruby use different
RbConfig::CONFIG["ENABLE_SHARED"]. Gem's extension directory is depend
on it. So we should use the same RbConfig::CONFIG["ENABLE_SHARED"] for
both base Ruby and cross Ruby.
Reported by Mike Dalessio. Thanks!!!
|
|
|
|
|
|
| |
GitHub: fix GH-194
Reported by Andrew Kane. Thanks!!!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"rake native gem" without "cross" didn't set the ruby version constraint.
Instead it failed with NoMethodError like so:
/ffi $ rake native gem
no configuration section for specified version of Ruby (rbconfig-i386-mingw32-2.6.3)
no configuration section for specified version of Ruby (rbconfig-x64-mingw32-2.6.3)
install -c build/x86_64-linux/ffi_c/2.6.3/ffi_c.so lib/ffi_c.so
cp build/x86_64-linux/ffi_c/2.6.3/ffi_c.so build/x86_64-linux/stage/lib/ffi_c.so
rake aborted!
NoMethodError: undefined method `split' for nil:NilClass
/home/lars/.rvm/gems/ruby-2.6.3/gems/rake-compiler-1.0.9/lib/rake/extensiontask.rb:515:in `ruby_api_version'
/home/lars/.rvm/gems/ruby-2.6.3/gems/rake-compiler-1.0.9/lib/rake/extensiontask.rb:262:in `block in define_native_tasks'
/home/lars/.rvm/gems/ruby-2.6.3/gems/rake-12.3.3/exe/rake:27:in `<top (required)>'
/home/lars/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `eval'
/home/lars/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => native => native:x86_64-linux => native:ffi:x86_64-linux
(See full trace by running task with --trace)
|
|
|
|
|
|
| |
Until now rake-compiler uses "make" to build the extension binary, but doesn't use "make install" to copy it into the lib directory.
This has the downside, that only the extension binary is copied, but no additional files.
In particular files registered per mkmf's $INSTALLFILES mechanism are not respected.
Using "make install" fixes this.
|
| |
|
| |
|
|
|
| |
lib/rake/extensiontask.rb:471: warning: instance variable @make not initialized
|
|
|
|
|
|
| |
GitHub: fix #150
Reported by MSP-Greg. Thanks!!!
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
This way the gem, that is not built for the ruby version in use,
fails at install time rather than runtime.
Moreover a clear error message is given to the user or bundler can
select the source gem instead.
|
|
|
|
| |
Same as in commit d0fd3260c.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
GitHub: #123
Reported by Aaron Stone. Thanks!!!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The previous fake mechanism worked by hooking onto the
"require 'rbconfig'" call.
This is problematic because bundler internally requires rbconfig, but doesn't
work corretly in a faked environment.
It then fails to load gems that are also part of the standard library, like
json and rdoc.
This results in issues like https://github.com/rake-compiler/rake-compiler-dock/issues/8
The fake mechanism is now changed to hook onto the "require 'mkrb'" call,
which is typically part of the extconf file, and it is where the faked platform
values are actually needed.
That way it is loaded after bundler/setup, so that the library paths are
set according to the Gemfile.lock, to the native Linux libraries, before
the fake environment is active.
Please note, that the build directory of a given gem needs to be cleared,
in order to get updated fake files. So do a "rm tmp pkg -rf".
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some platforms provide a working `make' program out of the box, but
some versions of this program won't return a successful exit status
code when given `-v' as argument.
One such platform is FreeBSD, providing the `make' program in the base
system which is based on `pmake'. This version won't accept `-v':
$ make -v
usage: make [-BeikNnqrstWwX]
[-C directory] [-D variable] [-d flags] [-f makefile]
[-I directory] [-J private] [-j max_jobs] [-m directory] [-T file]
[-V variable] [variable=value] [target ...]
zsh: exit 2 make -v
This change ensures detection with `gmake -v` or `make -v` will
continue to work as expected, but adds a fallback on plain `make' when
tested successfully with the `command' shell builtin.
|
| |
|
| |
|
|
|
|
| |
Resolves #98
|
|
|
|
|
|
| |
"cannot load such file -- win32/resolv" when it is required later on.
This solves issue https://github.com/tjschuck/rake-compiler-dev-box/issues/5
|
| |
|
|\
| |
| | |
Add support for cross builds for multiple target platforms.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Building gems for distinct platforms within one rake run conflicted
in the lib/ directory, because all binary extensions were stored
there and were copied from there to become packaged.
This resulted in storing a binary extension of a wrong platform in
a gem.
To avoid this, the files to package are now stored in a platform specific
stage directory and are used to package the specific gem.
|
| |
| |
| |
| |
| | |
This is especially useful to set distinct library paths for different
target platforms.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Also prefix the selection of rbconfig in config.yml with the corresponding
Ruby platform.
This allowes to use cross compiled Ruby-builds for multiple target
architectures on the same machine. This is especially usefull to compile
for Ruby-2.0 i386-mingw32 and x64-mingw32 platforms.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ruby 1.9 bundles RubyGems and it is required automatically before
command line "-r" option. It breaks fake.rb trick. We cannot build fat
gem without fake.rb trick because building fat gem requires two or
more Rubies and fake.rb fakes Rubies.
/tmp/rbconfig.rb:
p :rbconfig
puts caller
module RbConfig
Config = {}
end
/tmp/fake.rb:
p :fake
Command:
% cd /tmp
% ruby -v -I . -r fake -e ''
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
:rbconfig
/usr/lib/ruby/1.9.1/rubygems.rb:31:in `require'
/usr/lib/ruby/1.9.1/rubygems.rb:31:in `<top (required)>'
<internal:gem_prelude>:1:in `require'
<internal:gem_prelude>:1:in `<compiled>'
:fake
The command output shows fake.rb that is used to change RUBY_PLATFORM,
RUBY_VERSION and so on in rake-compiler is required after
rbconfig.rb. And rbconfig.rb is required from RubyGems.
fake.rb should be required before rbconfig.rb because rbconfig.rb uses
RUBY_VERSION. So this change puts 'require "fake.rb"' into
rbconfig.rb. It ensures that fake.rb is evaluated before rbconfig.rb
body is evaluated.
|
| |
|
|
|
|
| |
This fixes issue #16.
|
|\
| |
| | |
Only emit warnings when doing cross-compilation tasks
|
| | |
|
| |
| |
| |
| | |
And also update History to reflect the new change in codebase
|