GSoC - Weekly update 6
~2 min read • in opensourceHere is what I have been doing the past week.
Packages
charlock_holmes
This one gave me some headaches as it is a gem with c extensions and as it turned out I didn't ship the soname in the right directory. It took me some time but I finally understood how that works. Here are the steps I follow when packaging gems with c extensions.
-
From the initial spec file that gem2rpm creates, comment the line below:
mv %{buildroot}%{gem_instdir}/lib/shared_object.so %{buildroot}%{gem_extdir_mri}/lib/
-
Run
rpmbuild -bi rubygem-charlock_holmes.spec
in order not to remove the BUILDROOT directory. -
Find the soname files that get created:
find ~/rpmbuild/BUILDROOT/rubygem-charlock_holmes-0.6.9.4-1.fc19.x86_64/ -name '*.so' Output ------ ~/rpmbuild/BUILDROOT/rubygem-charlock_holmes-0.6.9.4-1.fc19.x86_64/usr/share/gems/gems/charlock_holmes-0.6.9.4/ext/charlock_holmes/charlock_holmes.so ~/rpmbuild/BUILDROOT/rubygem-charlock_holmes-0.6.9.4-1.fc19.x86_64/usr/share/gems/gems/charlock_holmes-0.6.9.4/lib/charlock_holmes/charlock_holmes.so
There are 2 files, one in
lib/
dir and one inext/
dir. We should ship the one inlib/
dir, so in our spec file we replace the line that we commented before with:mkdir -p %{buildroot}%{gem_extdir_mri}/lib/%{gem_name}/ mv %{buildroot}%{gem_libdir}/%{gem_name}/%{gem_name}.so %{buildroot}%{gem_extdir_mri}/lib/%{gem_name}/ # Remove the binary extension sources and build leftovers. rm -rf %{buildroot}/%{gem_instdir}/ext/
See what I did there? The lib dir when I used find was:
~/rpmbuild/BUILDROOT/rubygem-charlock_holmes-0.6.9.4-1.fc19.x86_64/usr/share/gems/gems/charlock_holmes-0.6.9.4/lib/charlock_holmes/charlock_holmes.so
which when written with macros translates to:
%{buildroot}%{gem_libdir}/%{gem_name}/%{gem_name}.so
which in turn gets copied to:
%{buildroot}%{gem_extdir_mri}/lib/%{gem_name}/
Tl;dr;
Follow the directory structure of lib/
where the soname resides and remove the
ext/
.
Beware that there are cases where this structure is not the same and the soname
is found right in lib/
dir and not in lib/%{gem_name}/
.
Take for example rubygem-pg compared to rubygem-charlock_holmes.
omniauth
I had some hard time with this too as it was failing the test suite. It turned out I was missing a BuildRequires dependency. A huge thanks to Ken Dreyer who pointed me out to the right direction in the mailing list as well as giving some nice tips about the packaging workflow.
sanitize
This was an easy one and was immediately accepted when reviewed.
orm_adapter
This is pending a review.
Update to GitLab 5.4
I updated the dependencies to version 5.4. Overall nothing changed except for the addition of unicorn, which is already submitted for review.