[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Problem with r32409 (fix for 'BSD make' compatibility).

From: Karl Fogel <kfogel_at_red-bean.com>
Date: Wed, 27 Aug 2008 14:25:00 -0400

I was just reviewing r32409 (last change in the STATUS file for 1.5.2),
and have a question about it:

> ------------------------------------------------------------------------
> r32409 | stsp | 2008-08-08 15:13:02 -0400 (Fri, 08 Aug 2008) | 40 lines
> Changed paths:
> M /trunk/build/generator/gen_make.py
>
> Fix an incompatibility with BSD make, which was introduced in r24293.
>
> Even though r24293 was meant to fix a compilation failure in the
> bindings when compiling Subversion from a different directory than
> where the source tree is located, this still didn't work for me.
>
> To illustrate, a command sequence like
>
> $ svn co https://svn.collab.net/repos/svn/trunk subversion
> $ mkdir obj
> $ cd obj
> $ ../subversion/configure --prefix= ...
> $ make
> $ make swig-py
>
> failed with:
> make: don't know how to make subversion/bindings/swig/python/svn_client.c. Stop
>
> It turned out to be a problem specific to BSD make.
> With GNU make, things worked fine.
>
> The problem was that in build-outputs.mk, the generated binding
> source files were preceeded with '$(top_builddir)/' when listed
> as targets, but did not have any prefix (i.e. were relative paths)
> when listed as dependencies. BSD make is apparently too naive to
> figure out that e.g. 'foo.c' and './foo.c' are meant to refer to
> the same file.
>
> Since '$(top_builddir)' is hardcoded to just '.' (a dot)
> at the top of Makefile.in, it is redundant and can be ommitted.
> As soon as the target and dependency paths matched, the problem
> went away. Turns out GNU make does not care either way, so this
> commit makes both make implementations happy.

Hmmm. So we've stopped including "$(top_builddir)/" as a prefix to
bindings source files listed as targets... This feels like a halfway
solution, though. Exactly one of the following two cases is true, i
think:

   1. $top_builddir is conceivably useful, in which case we should
      include it everywhere we might need it; after all, it might not
      always be hardcoded to '.'

         -OR-

   2. $top_builddir is not useful (will *always* be hardcoded to '.'),
      in which case, shouldn't we get rid of it entirely, instead of
      just ceasing to use it in this one instance?

-Karl

> * build/generator/gen_make.py
> (Generator.write): Don't prefix the names of generated binding
> source files with '$(top_builddir)/' when listing them as target,
> because this confuses BSD make. When listed as dependencies,
> the files do not have this prefix either.
>
> Index: trunk/build/generator/gen_make.py
> ===================================================================
> --- trunk/build/generator/gen_make.py (revision 32408)
> +++ trunk/build/generator/gen_make.py (revision 32409)
> @@ -186,7 +186,7 @@
> source_dir = build_path_dirname(source)
> opts = self.swig.opts[objname.lang]
> if not self.release_mode:
> - self.ofile.write('$(top_builddir)/%s: %s\n' % (objname, deps) +
> + self.ofile.write('%s: %s\n' % (objname, deps) +
> '\t$(SWIG) $(SWIG_INCLUDES) %s ' % opts +
> '-o $@ $(top_srcdir)/%s\n' % source
> )

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-08-27 20:25:15 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.