blob: 753f24fc3e533a9a72cfe7e6c985a3e04102a0aa [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# frozen_string_literal: true
tracked_files_or_glob = lambda do |dir|
git_dir = File.join(dir, ".git")
if File.exist?(git_dir)
IO.popen(["git", "-C", dir, "ls-files", "-z"], &:read).split("\x0")
else
Dir.chdir(dir) do
Dir.glob("**/*", File::FNM_DOTMATCH).reject do |f|
File.directory?(f)
end
end
end
end
Gem::Specification.new do |spec|
spec.name = "opendal"
# RubyGems integrates and expects `cargo`.
# Read more about
# [Gem::Ext::CargoBuilder](https://github.com/rubygems/rubygems/blob/v3.5.23/lib/rubygems/ext/cargo_builder.rb)
#
# OpenDAL relies on "version" in `Cargo.toml` for the release process. You can read this gem spec with:
# `bundle exec ruby -e 'puts Gem::Specification.load("opendal.gemspec")'`
#
# Read from Cargo.toml directly so Bundler can evaluate this gemspec from an
# unpacked native gem without requiring the Rust workspace or network access.
cargo_toml = File.read(File.join(__dir__, "Cargo.toml"))
spec.version = cargo_toml.match(/^\s*version\s*=\s*"([^"]+)"/)[1]
spec.authors = ["OpenDAL Contributors"]
spec.email = ["dev@opendal.apache.org"]
spec.summary = "OpenDAL Ruby Binding"
spec.homepage = "https://opendal.apache.org/"
spec.license = "Apache-2.0"
spec.metadata = {
"bug_tracker_uri" => "https://github.com/apache/opendal/issues",
"changelog_uri" => "https://github.com/apache/opendal/releases",
"documentation_uri" => "https://opendal.apache.org/docs/ruby/",
"homepage_uri" => spec.homepage,
"source_code_uri" => "https://github.com/apache/opendal",
"rubygems_mfa_required" => "true"
}
# Specify which files should be added to a source release gem when we release OpenDAL Ruby gem.
# Prefer git-tracked files while building from a checkout, and fall back to
# the unpacked files when Bundler loads this gemspec from an installed gem.
spec.files = Dir.chdir(__dir__) do
git_files = tracked_files_or_glob.call(__dir__).reject do |f|
f.start_with?(*%w[gems/ pkg/ target/ tmp/ .git])
end
# When building release package, include core directory files for rake build
distributed_core_dir = "core"
if Dir.exist?(distributed_core_dir)
# Core files should already be copied by the Rakefile's copy_core task
core_files = tracked_files_or_glob.call(File.expand_path(distributed_core_dir, __dir__)).map do |f|
"#{distributed_core_dir}/#{f}"
end
git_files + core_files
else
git_files
end
end
spec.require_paths = ["lib"]
native_extension = Dir.glob(File.join(__dir__, "lib", "opendal_ruby.*")).any? do |path|
File.file?(path) && File.extname(path) != ".rb"
end
spec.extensions = native_extension ? [] : ["./Cargo.toml"]
# Exclude non-Ruby files from RDoc to prevent parsing errors
spec.rdoc_options = ["--exclude", "Cargo\\..*", "--exclude", "core/", "--exclude", "\\.rs$"]
spec.requirements = ["Rust >= 1.85"]
# use a Ruby version which:
# - supports Rubygems with the ability of compilation of Rust gem
# - not end of life
#
# keep in sync with `Rakefile`.
spec.required_ruby_version = ">= 3.2"
# intentionally skipping rb_sys gem because newer Rubygems will be present
end