Fuck Make

Make, Colons, and Paths: A Journey Through Hell

We were running into this error while running bundle install on Ubuntu:

/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include... no
checking for rb_thread_blocking_region()... yes
checking for ruby_native_thread_p()... yes
checking for rb_thread_call_with_gvl()... yes
creating extconf.h
creating Makefile

Makefile:158: *** target pattern contains no `%'.  Stop.

The confusing part was when we ran gem install ffi it ran without a problem. Googling around told us nothing about why ffi would be failing to build.

We had run across a post about QT where a similar error was encountered.

Then I found a StackOverflow question which references a GNU mailing list thread that explains the complete impossibility of make being able to parse a Makefile containing colons.

It turns out we did have colons in the filename: We were using %T in the timestamps on our integration server, thus make was choking.

The fix was simple, we just replaced the %T with a non-colon-delimited time string and everything worked just fine.