[crossfire] Building crossfire 1.71.0 server fails without arches
Kari Pahula
kaol at debian.org
Sun Apr 13 05:14:26 CDT 2014
Hi.
Crossfire 1.71.0 server is unbuildable without the arch directory.
Here's what happens in lib/ directory (from make -d's output):
Considering target file `smooth'.
Considering target file `.collect-stamp'.
File `.collect-stamp' does not exist.
Finished prerequisites of target file `.collect-stamp'.
Must remake target `.collect-stamp'.
touch .collect-stamp
Putting child 0x01251550 (.collect-stamp) PID 15874 on the chain.
Live child 0x01251550 (.collect-stamp) PID 15874
Reaping winning child 0x01251550 PID 15874
Removing child 0x01251550 PID 15874 from chain.
Successfully remade target file `.collect-stamp'.
Finished prerequisites of target file `smooth'.
Prerequisite `.collect-stamp' is newer than target `smooth'.
Must remake target `smooth'.
touch .collect-stamp
Putting child 0x012744c0 (smooth) PID 15875 on the chain.
Live child 0x012744c0 (smooth) PID 15875
Reaping winning child 0x012744c0 PID 15875
make collect
...
Considering target file `collect'.
File `collect' does not exist.
Finished prerequisites of target file `collect'.
Must remake target `collect'.
make[1]: Entering directory `/home/kaol/deb/crossfire/crossfire-1.71.0/lib'
/usr/bin/perl -I. collect.pl ./arch
Putting child 0x013c6600 (collect) PID 15877 on the chain.
Live child 0x013c6600 (collect) PID 15877
collect.pl: looking ...
couldn't open ./arch at collect.pl line 500.
Reaping losing child 0x013c6600 PID 15877
make[1]: *** [collect] Error 2
Here's the relevant rules from lib/Makefile.am:
.collect-stamp:
touch .collect-stamp
collect:
$(PERL) -I$(srcdir) collect.pl $(builddir)/arch
$(PERL) $(srcdir)/adm/collect_images.pl -src $(srcdir) -png
archetypes faces animations bmaps.paths smooth: .collect-stamp
touch .collect-stamp
$(MAKE) collect
install-data-local: archetypes crossfire.0 faces animations smooth collect.pl util.pl
In short, install-data-local requires smooth, which requires
.collect-stamp, which gets created with touch. Then smooth's rule
decides that smooth needs to be regenerated since .collect-stamp is
fresher than smooth, making the build fail since there's no arch
directory.
This would work if there was a lib/.collect-stamp with a correct
timestamp included with the server package, but there isn't. I could
suggest that it wouldn't be a dot file since it wouldn't get waylaid
so easily then. But this part would, IMHO, work even better without
using a stamp file at all. The collect.pl script generates a fairly
limited set of files and you had listed them already in the
Makefile.am file itself. I'm not sure how make -jn friendly the
current code is, either.
I ran into this while packaging 1.71.0 for Debian. I worked around it
by calling touch -t 197001010101 lib/.collect-stamp before building
the server.
More information about the crossfire
mailing list