|
|
893a03a |
# The RubyGems root folder.
|
|
|
893a03a |
%gem_dir %{_datadir}/gems
|
|
|
56d430e |
%gem_archdir %{_libdir}/gems
|
|
|
893a03a |
|
|
|
05a6c9c |
# %gem_name_version - Provides gem_name-version string.
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
# Usage: %gem_name_version [custom_gem_name]
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
# Prints gem_name-version string, by default joining %gem_name, %version and
|
|
|
05a6c9c |
# %prerelease macros. When [custom_gem_name] is provided, the
|
|
|
05a6c9c |
# custom_gem_name is joined with %custom_gem_name_version macro which needs
|
|
|
05a6c9c |
# to be predefined. Please note that for the version macros are the dashes
|
|
|
05a6c9c |
# replaced by underscores.
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{?prerelease}
|
|
|
05a6c9c |
|
|
|
893a03a |
# Common gem locations and files.
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
# These macros leverages %gem_name_version macro and accepts custom gem_name.
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
# -d Use default gem install location.
|
|
|
05a6c9c |
#
|
|
|
05a6c9c |
%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}}
|
|
|
05a6c9c |
%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}}
|
|
|
05a6c9c |
%gem_libdir() %{gem_instdir %{?1}}/lib
|
|
|
05a6c9c |
%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem
|
|
|
05a6c9c |
%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec
|
|
|
05a6c9c |
%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}}
|
|
|
05a6c9c |
%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb
|
|
|
893a03a |
|
|
|
2e9e67a |
|
|
|
2e9e67a |
# %gem_install - Install gem into appropriate directory.
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# Usage: %gem_install [options]
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# -n <gem_file> Overrides gem file name for installation.
|
|
|
2e9e67a |
# -d <install_dir> Set installation directory.
|
|
|
2e9e67a |
#
|
|
|
893a03a |
%gem_install(d:n:) \
|
|
|
893a03a |
mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \
|
|
|
893a03a |
\
|
|
|
6b2ff68 |
CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\
|
|
|
893a03a |
gem install \\\
|
|
|
893a03a |
-V \\\
|
|
|
893a03a |
--local \\\
|
|
|
4c12d4e |
--build-root %{-d*}%{!?-d:.} \\\
|
|
|
893a03a |
--force \\\
|
|
|
893a03a |
--document=ri,rdoc \\\
|
|
|
3130f89 |
%{-n*}%{!?-n:%{gem_name}-%{version}%{?prerelease}.gem} \
|
|
|
893a03a |
%{nil}
|
|
|
ec04753 |
|
|
|
2e9e67a |
|
|
|
8ef3cc0 |
# The 'read' command in %%gemspec_* macros is not essential, but it is usefull
|
|
|
8ef3cc0 |
# to make the sript appear in build log.
|
|
|
4fb1d9c |
|
|
|
2e9e67a |
|
|
|
2e9e67a |
# %gemspec_add_dep - Add dependency into .gemspec.
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# Usage: %gemspec_add_dep -g <gem> [options] [requirements]
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# Add dependency named <gem> to .gemspec file. The macro adds runtime
|
|
|
2e9e67a |
# dependency by default. The [requirements] argument can be used to specify
|
|
|
2e9e67a |
# the dependency constraints more precisely. It is expected to be valid Ruby
|
|
|
2e9e67a |
# code.
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# -s <gemspec_file> Overrides the default .gemspec location.
|
|
|
2e9e67a |
# -d Add development dependecy.
|
|
|
4fb1d9c |
#
|
|
|
4fb1d9c |
%gemspec_add_dep(g:s:d) \
|
|
|
4fb1d9c |
read -d '' gemspec_add_dep_script << 'EOR' || : \
|
|
|
13a1b3e |
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
name = '%{-g*}' \
|
|
|
4fb1d9c |
requirements = %{*}%{!?1:nil} \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
type = :%{!?-d:runtime}%{?-d:development} \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
spec = Gem::Specification.load(gemspec_file) \
|
|
|
4fb1d9c |
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
|
|
4fb1d9c |
if dep \
|
|
|
4fb1d9c |
dep.requirement.concat requirements \
|
|
|
4fb1d9c |
else \
|
|
|
4fb1d9c |
spec.public_send "add_#{type}_dependency", name, requirements \
|
|
|
4fb1d9c |
end \
|
|
|
4fb1d9c |
File.write gemspec_file, spec.to_ruby \
|
|
|
4fb1d9c |
EOR\
|
|
|
4fb1d9c |
echo "$gemspec_add_dep_script" | ruby \
|
|
|
4fb1d9c |
unset -v gemspec_add_dep_script \
|
|
|
4fb1d9c |
%{nil}
|
|
|
4fb1d9c |
|
|
|
2e9e67a |
|
|
|
2e9e67a |
# %gemspec_remove_dep - Remove dependency from .gemspec.
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# Usage: %gemspec_remove_dep -g <gem> [options] [requirements]
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# Remove dependency named <gem> from .gemspec file. The macro removes runtime
|
|
|
2e9e67a |
# dependency by default. The [requirements] argument can be used to specify
|
|
|
2e9e67a |
# the dependency constraints more precisely. It is expected to be valid Ruby
|
|
|
2e9e67a |
# code. The macro fails if these specific requirements can't be removed.
|
|
|
2e9e67a |
#
|
|
|
2e9e67a |
# -s <gemspec_file> Overrides the default .gemspec location.
|
|
|
2e9e67a |
# -d Remove development dependecy.
|
|
|
4fb1d9c |
#
|
|
|
4fb1d9c |
%gemspec_remove_dep(g:s:d) \
|
|
|
4fb1d9c |
read -d '' gemspec_remove_dep_script << 'EOR' || : \
|
|
|
13a1b3e |
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
name = '%{-g*}' \
|
|
|
4fb1d9c |
requirements = %{*}%{!?1:nil} \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
type = :%{!?-d:runtime}%{?-d:development} \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
spec = Gem::Specification.load(gemspec_file) \
|
|
|
4fb1d9c |
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
|
4fb1d9c |
\
|
|
|
4fb1d9c |
dep = spec.dependencies.detect { |d| d.type == type && d.name == name } \
|
|
|
4fb1d9c |
if dep \
|
|
|
4fb1d9c |
if requirements \
|
|
|
4fb1d9c |
requirements = Gem::Requirement.create(requirements).requirements \
|
|
|
4fb1d9c |
requirements.each do |r| \
|
|
|
4fb1d9c |
unless dep.requirement.requirements.reject! { |dependency_requirements| dependency_requirements == r } \
|
|
|
4fb1d9c |
abort("Requirement '#{r.first} #{r.last}' was not possible to remove for dependency '#{dep}'!") \
|
|
|
4fb1d9c |
end \
|
|
|
4fb1d9c |
end \
|
|
|
4fb1d9c |
spec.dependencies.delete dep if dep.requirement.requirements.empty? \
|
|
|
4fb1d9c |
else \
|
|
|
4fb1d9c |
spec.dependencies.delete dep \
|
|
|
4fb1d9c |
end \
|
|
|
4fb1d9c |
else \
|
|
|
4fb1d9c |
abort("Dependency '#{name}' was not found!") \
|
|
|
4fb1d9c |
end \
|
|
|
4fb1d9c |
File.write gemspec_file, spec.to_ruby \
|
|
|
4fb1d9c |
EOR\
|
|
|
4fb1d9c |
echo "$gemspec_remove_dep_script" | ruby \
|
|
|
4fb1d9c |
unset -v gemspec_remove_dep_script \
|
|
|
4fb1d9c |
%{nil}
|
|
|
8ef3cc0 |
|
|
|
8ef3cc0 |
|
|
|
8ef3cc0 |
# %%gemspec_add_file - Add files to various files lists in .gemspec.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# Usage: %%gemspec_add_file [options] <file>
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# Add files to .gemspec file. <file> is expected to be valid Ruby code.
|
|
|
8ef3cc0 |
# Path to file is expected. Does not check real files in any way.
|
|
|
8ef3cc0 |
# By default, `files` list is edited.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# -s <gemspec_file> Overrides the default .gemspec location.
|
|
|
8ef3cc0 |
# -t Edit test_files only.
|
|
|
8ef3cc0 |
# -r Edit extra_rdoc_files only.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
%gemspec_add_file(s:tr) \
|
|
|
8ef3cc0 |
read -d '' gemspec_add_file_script << 'EOR' || : \
|
|
|
13a1b3e |
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
abort("gemspec_add_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
filenames = %{*}%{!?1:nil} \
|
|
|
8ef3cc0 |
filenames = Array(filenames) \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
spec = Gem::Specification.load(gemspec_file) \
|
|
|
8ef3cc0 |
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
spec.%{?-t:test_}%{?-r:extra_rdoc_}files += filenames \
|
|
|
8ef3cc0 |
File.write gemspec_file, spec.to_ruby \
|
|
|
8ef3cc0 |
EOR\
|
|
|
8ef3cc0 |
echo "$gemspec_add_file_script" | ruby \
|
|
|
8ef3cc0 |
unset -v gemspec_add_file_script \
|
|
|
8ef3cc0 |
%{nil}
|
|
|
8ef3cc0 |
|
|
|
8ef3cc0 |
|
|
|
8ef3cc0 |
# %%gemspec_remove_file - Remove files from various files lists in .gemspec.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# Usage: %%gemspec_remove_file [options] <file>
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# Remove files from .gemspec file. <file> is expected to be valid Ruby code.
|
|
|
8ef3cc0 |
# Path to file is expected. Does not check/remove real files in any way.
|
|
|
8ef3cc0 |
# By default, `files` list is edited. File has to be removed from `test_files`
|
|
|
8ef3cc0 |
# first in order to be removable from `files`.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
# -s <gemspec_file> Overrides the default .gemspec location.
|
|
|
8ef3cc0 |
# -t Edit test_files only.
|
|
|
8ef3cc0 |
# -r Edit extra_rdoc_files only.
|
|
|
8ef3cc0 |
#
|
|
|
8ef3cc0 |
%gemspec_remove_file(s:tr) \
|
|
|
8ef3cc0 |
read -d '' gemspec_remove_file_script << 'EOR' || : \
|
|
|
13a1b3e |
gemspec_file = '%{-s*}%{!?-s:%{_builddir}/%{gem_name}-%{version}%{?prerelease}.gemspec}' \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
abort("gemspec_remove_file: Use only one '-t' or '-r' at a time.") if "%{?-t}%{?-r}" == "-t-r" \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
filenames = %{*}%{!?1:nil} \
|
|
|
8ef3cc0 |
filenames = Array(filenames) \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
spec = Gem::Specification.load(gemspec_file) \
|
|
|
8ef3cc0 |
abort("#{gemspec_file} is not accessible.") unless spec \
|
|
|
8ef3cc0 |
\
|
|
|
8ef3cc0 |
spec.%{?-t:test_}%{?-r:extra_rdoc_}files -= filenames \
|
|
|
8ef3cc0 |
File.write gemspec_file, spec.to_ruby \
|
|
|
8ef3cc0 |
EOR\
|
|
|
8ef3cc0 |
echo "$gemspec_remove_file_script" | ruby \
|
|
|
8ef3cc0 |
unset -v gemspec_remove_file_script \
|
|
|
8ef3cc0 |
%{nil}
|