PackagingDrafts/Gem expand stage change
From FedoraProject
Contents |
Propoposal to change the stage to expand RubyGem file
Current guidelines
Current guidelines for packaging RubyGem files here says:
- The
%prepand%buildsections of the specfile should be empty. - The install should be performed with the command
gem install --local --install-dir %{buildroot}%{gemdir} --force %{SOURCE0}
This means that
- usually RubyGem files should be expanded under
%{buildroot}directly without using%prepor%buildstage.
Issues with current guidelines
Some of the issues with current guidelines are already discussed on the thread beginning at here and continues to this.
- When we want to apply some needed patches after expanding Gem files, with current guidelines
%patchXXXmacro canot be used because%patchXXXmacro can be used only at %prep - When we want to execute some check programs to verify if the Gems to be installed really work, we usually create
%checkstage and execute them at the stage. With current guidelines we must execute these check programs under%{buildroot}.- This is troublesome if executing such programs create additional files (under
%{buildroot})
- This is troublesome if executing such programs create additional files (under
- Note that when Gem file creates C extension libraries, we have already moved the stage to expand Gem file from
%installto%build(not%prep, however) to createdebuginforpm correctly.
Proposal
All RubyGem files should be expanded at %prep first. i.e.
- RubyGem files should be expanded under
%{_builddir}/%{name}-%{version}%{gemdir}at prep first. This can usually be performed by the folloing lines:
%prep
%setup -q -c -T
mkdir -p .%{gemdir}
(If RubyGem creates C extension modules, adding the following line
is recommend:
export CONFIGURE_ARGS="--with-cflags='%{optflags}'"
)
gem install -V --local \
--install-dir $(pwd)/%{gemdir} \
--force --rdoc \
%{SOURCE0}
-
%buildstage can be empty. - Then at
%installstage the whole tree under the directory created at%prep stageshould be copied (not moved) to under%{buildroot}%{gemdir}by the following for example.
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{gemdir}
cp -a .%{gemdir}/* %{buildroot}%{gemdir}/
- Executing some test program at
%checkstage is recommended if there exists. This can performed by the following for example:
%global geminstdir %{gemdir}/gems/%{gemname}-%{version}
BuildRequires: rubygem(rake)
%check
export GEM_PATH=.%{gemdir}
pushd .%{geminstdir}
rake test
popd
Some notes
- There is an annoying discussion about whether expanding RubyGems should be at %prep or %build when Gem creates C extension modules. However as current Gem mechanism cannot allow for us to "expand" Gems and "build" them separately, I came to think that moving expansion stage from
%buildto%prepdoes not matter.