]> git.wincent.com - wikitext.git/commit
Fix subtle Rakefile breakage
authorWincent Colaiuta <win@wincent.com>
Tue, 3 Feb 2009 22:48:00 +0000 (23:48 +0100)
committerWincent Colaiuta <win@wincent.com>
Tue, 3 Feb 2009 22:52:42 +0000 (23:52 +0100)
commit829011d06439d7dbb411dd1d8a489005a8f28ced
tree61f77106c9f59e9e57247cc601c684f0bd88567c
parentb12cb25186aaf9c6700e9bd80a4c83807b745c26
Fix subtle Rakefile breakage

As mentioned in b12cb25, the 1.4.0 release was broken due to a misfire
during "rake package".

The diagnosis was as follows; before each of the following tests, a
"rake clobber" was executed to start with a clean slate:

   - "rake gem": "make" does appear to be executed,
     but produced gem is incomplete
   - "rake make; rake gem": produced gem is complete
   - "rake package": "make" does appear to be executed,
     but produced gem is incomplete
   - "rake make; rake package": you can see "clobber"
     task getting executed, then "make"; you would
     expect this automated "make" not to work seeing
     as it is broken in two other cases above, but
     the built gem is complete and it works!

Specifically, in the incomplete gems, the generated
extension Makefile has these lines:

  SRCS = ary.c parser.c str.c token.c wikitext.c
  OBJS = ary.o parser.o str.o token.o wikitext.o

Instead of the desired:

  SRCS = ary.c parser.c str.c token.c wikitext.c wikitext_ragel.c
  OBJS = ary.o parser.o str.o token.o wikitext.o wikitext_ragel.o

Note that the Makefile in the sourcetree in all of these tests
was correct; it was only the file generated from the gems that
was incorrect.

Further inspection showed that the wikitext_ragel.c file was not
included in the gem. This was the key; the file was missing
from inside the gem even though it was correctly generated outside
while building the gem. Naturally, the Makefile was also missing the
file ("mkmf" generates the SRCS and OBJS lines based on what it
finds in the directory).

The reason the file was missing was that the "files" entry in the
Gem specification was evaluated too early, before the dependencies
in the tasks had been executed, and before the "wikitext_ragel.c"
file even existed.

Running "rake make" manually beforehand was enough to make
everything work because it ensured that the "wikitext_ragel.c"
file was present at the time the Gem specification was evaluated;
even though the file was later clobbered and rebuilt it didn't
matter because the "files" entry was correct.

It would have been nice for the gem build to fail due to the
missing file. I would have been alerted then to the fact that
1.4.0 was broken; I'm going to see if I can make the build process
barf in the face of a missing file like that.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Rakefile