Patching Ruby Gem GSL

The Github Gist code pasting service received some updates, which breaks the layout of the embedding tags used by this blogging engine octopress (Issue #847).

This issue was already fixed and got included in the development branch 2.1. I decided to upgrade my blog to the latest development version. Afterwards the Ruby version manager rvm asked to install a new ruby version. To meet the exact requirements of octopress I decided to give it a run, but when installing the required gems using bundle install I wasn't able to install gsl, the ruby binding to the GNU scientific library, which is used to speed-up the "related posts" calculation. I remembered to run into this problem once before. Unfortunately it isn't resolved yet. :(

1
2
3
vector_complex.c:1989:12: error: conflicting types for 'gsl_vector_complex_equal' /usr/include/gsl/gsl_vector_complex_double.h:167:5: note: previous declaration of 'gsl_vector_complex_equal' was here make: *** [vector_complex.o] Error 1

Solution

To get this gem installed nevertheless, you have to patch the sources of the native extension. For this, you have to find the building directory ext, which should be mentioned in the error message.

Put the patch rb-gsl.patch from below in this directory or download it using

1
wget 'https://gist.github.com/raw/2296214/c6b1c7150713da5d2640ddc799132611ac72cef4/rb-gsl.patch'

Then you have to apply the patch using patch -p2 < rb-gsl.patch from within the ext directory. To build the extension finally, you have to run the command make -j4. If you proceed with bundle install again, the source code will be unzipped again leaving you with same unpatched code as before. To work around this issue, a hint is given in the help of the gem install commmand (gem install --help).

1
2
3
4
5
6
7
8
9
10
11
12
13
If you correct the compilation errors by editing the gem files you will need to write the specification by hand. For example: $ gem install some_extension_gem [build fails] Gem files will remain installed in \ /path/to/gems/some_extension_gem-1.0 for inspection. Results logged to /path/to/gems/some_extension_gem-1.0/gem_make.out $ [cd /path/to/gems/some_extension_gem-1.0] $ [edit files or what-have-you and run make] $ gem spec ../../cache/some_extension_gem-1.0.gem --ruby > \ ../../specifications/some_extension_gem-1.0.gemspec $ gem list some_extension_gem

So I just did as I got told (still in exe directory):

1
gem spec ../../../cache/gsl-1.14.7.gem --ruby > ../../../specifications/gsl-1.14.7.gemspec

Afterwards bundle install will accept this gem. That's it!

Patch rb-gsl.patch