gemspec は実行可能コードを含まない YAML にシリアル化されるため、gemspec で条件を使用することはできません。
Gemfile
ローカルの Rails プロジェクト (gem ではない) で関連する問題に直面しました。
現在、Gemfile には以下が含まれています。
group :test do
...
# on Mac os X
gem 'rb-fsevent' if RUBY_PLATFORM.include?("x86_64-darwin")
gem 'ruby_gntp' if RUBY_PLATFORM.include?("x86_64-darwin")
# on Linux
gem 'rb-inotify' unless RUBY_PLATFORM.include?("x86_64-darwin")
gem 'libnotify' unless RUBY_PLATFORM.include?("x86_64-darwin")
end
これは、Mac および Linux システムでの開発では (醜いですが) 機能します。
Gemfile.lock
ただし、異なるプラットフォームの開発者がコードをチェックインするたびに変更されるため、チェックインを停止しました。
そのため、マルチプラットフォームの Gemfile のソリューションは の問題も解決するはずですGemfile.lock
。
他のソリューションでは、ターゲット OS ごとに複数の.gemspec ファイルを作成し、各プラットフォームのプラットフォームと依存関係の両方を変更します。
gemspec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
end
# here build the normal gem
# Now for linux:
gemspec.platform = "linux"
gemspec.add_dependency ...
# build the newer gemspec
...