help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Makefile remaking loop


From: Frank Küster
Subject: Makefile remaking loop
Date: Mon, 07 Mar 2005 18:27:31 +0100
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.3 (gnu/linux)

Hi,

I have written a Makefile for a Debian package which works just fine on
my local machine.  However, on one of the autobuilders (in this case
it's for Debian experimental) it goes in a seemingly endless loop. 

The Makefile is called as

debian/rules <sometarget>

and since there is a file debian/rules.in and a rule how to make files
from .in files, it is remade.  On my system, this happens only once, but
on the problematic one (I don't have access there) it goes into a
remaking loop.  These are the relevant parts of the makefile:

,----
| #!/usr/bin/make -f
| [...]
| eperl_sourcefiles=debian/variables debian/COPYRIGHT.scripts \
|    debian/common.variables debian/common.functions
| timepattern=.*[[:alpha:]]*[[:space:]]*[[:digit:]] \([[:digit:].]*\) \.\./.*
| real_common_variables=../../tetex-common/common.variables
| real_common_functions=../../tetex-common/common.functions.in
| [...]
| % :: %.in commonstuff_update $(eperl_sourcefiles) 
|       eperl -P -o $@ $<
| 
| # common.variables and common.functions are shared between the tetex-base and
| # tetex-bin source packages. If you want to use this mechanism, check out the
| # tetex-common tree and put it two directories above the package directory.
| # I use ~/src/Packages/tetex-common together with 
~/src/Packages/tetex-base/tetex-base-$version/.
| commonstuff_update: common.variables_update common.functions_update 
debian/common.variables debian/common.functions
| common.variables_update:
|       test -e $(real_common_variables) && \
|         test $(real_common_variables) -nt debian/common.variables && \
|         touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.variables | \
|           sed -e 'address@hidden(timepattern)@\1@'` 
debian/common.variables_newer || true
| 
| debian/common.variables: debian/common.variables_newer
|       -cp ../../tetex-common/common.variables debian/ 2>/dev/null
| 
| common.functions_update:
|       test -e $(real_common_functions) && \
|         test $(real_common_functions) -nt debian/common.functions.in && \
|         touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.functions.in | \
|           sed -e 'address@hidden(timepattern)@\1@'` 
debian/common.functions_newer || true
| 
| debian/common.functions: debian/common.functions_newer
|       -cp ../../tetex-common/common.functions.in debian/ 2>/dev/null
|       eperl -P -o $@ debian/common.functions.in
`----

And this is what happens on my system, irrespective of whether this
tetex-common directory and its contents do exist:

$ debian/rules configure
test -e ../../tetex-common/common.variables && \
  test ../../tetex-common/common.variables -nt debian/common.variables && \
  touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.variables | \
    sed -e 'address@hidden:alpha:]]*[[:space:]]*[[:digit:]] \([[:digit:].]*\) 
\.\./address@hidden@'` debian/common.variables_newer || true
test -e ../../tetex-common/common.functions.in && \
  test ../../tetex-common/common.functions.in -nt debian/common.functions.in && 
\
  touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.functions.in | \
    sed -e 'address@hidden:alpha:]]*[[:space:]]*[[:digit:]] \([[:digit:].]*\) 
\.\./address@hidden@'` debian/common.functions_newer || true
eperl -P -o debian/rules debian/rules.in
test -e ../../tetex-common/common.variables && \
  test ../../tetex-common/common.variables -nt debian/common.variables && \
  touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.variables | \
    sed -e 'address@hidden:alpha:]]*[[:space:]]*[[:digit:]] \([[:digit:].]*\) 
\.\./address@hidden@'` debian/common.variables_newer || true
test -e ../../tetex-common/common.functions.in && \
  test ../../tetex-common/common.functions.in -nt debian/common.functions.in && 
\
  touch -t `ls -l --time-style=+%Y%m%d%H%M.%S 
../../tetex-common/common.functions.in | \
    sed -e 'address@hidden:alpha:]]*[[:space:]]*[[:digit:]] \([[:digit:].]*\) 
\.\./address@hidden@'` debian/common.functions_newer || true
eperl -P -o debian/rules debian/rules.in
patch -p0 -N -g0 -i debian/patches/patch-deb

Which means that it first processes the commonstuff_update target, which
is needed for remaking the Makefile, then remakes it (eperl
... rules.in).  I never bothered about this, but even here it remakes it
twice, then it processes the patch-stamp target on which configure
depends.  On the other system, where the tetex-common stuff does not
exist, it goes into an endless loop; the output can be seen at

http://experimental.ftbfs.de/fetch.php?&pkg=tetex-bin&ver=2.99.12.20050203-beta-1&arch=arm&stamp=1110038196&file=log&as=raw

Any idea what I am doing wrong?

TIA, Frank



-- 
Frank Küster
Inst. f. Biochemie der Univ. Zürich
Debian Developer





reply via email to

[Prev in Thread] Current Thread [Next in Thread]