[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