[sheepdog] [PATCH 1/2] configure: shut up autotool warning "but option 'subdir-objects' is disabled"

Alexander Guy alexander at andern.org
Thu Mar 5 18:16:51 CET 2015


On Thu, Mar 05, 2015 at 04:20:08PM +0800, Liu Yuan wrote:
> From: Liu Yuan <liuyuan at cmss.chinamobile.com>
> 
> Signed-off-by: Liu Yuan <liuyuan at cmss.chinamobile.com>
> ---
>  configure.ac | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 9f2e7f3..cece3d8 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -24,7 +24,7 @@ m4_define([git_version],
>  
>  AC_INIT([sheepdog], m4_default(git_version, sheepdog_version),
>  	[sheepdog at lists.wpkg.org])
> -AM_INIT_AUTOMAKE([-Wno-portability])
> +AM_INIT_AUTOMAKE([-Wno-portability, subdir-objects])
>  
>  AC_CONFIG_SRCDIR([dog/dog.c])
>  AC_CONFIG_HEADER([include/config.h])
> -- 
> 1.9.1

Hello Liu,
    I had the same subdir-objects change in a local branch, but
hadn't submitted it because I ran into a problem with broken dependency
generation causing distclean to break.  This in turn breaks other things
(e.g. make deb).

I haven't had time to go through and figure out the right fix, but
maybe the correction will be clear to you.  Reordering targets might
cover-up the issue, but there's a deeper problem with where automake
thinks dependencies should live for the unit tests.

For example, on a freshly checked-out sheepdog tree:

./autogen.sh && ./configure && make distclean

make[2]: Leaving directory '/home/alexander/sandbox/sheepdog/tests/unit/mock'
Making distclean in dog
make[2]: Entering directory '/home/alexander/sandbox/sheepdog/tests/unit/dog'
Makefile:555: ../../../dog/.deps/common.Po: No such file or directory
make[2]: *** No rule to make target '../../../dog/.deps/common.Po'.  Stop.
make[2]: Leaving directory '/home/alexander/sandbox/sheepdog/tests/unit/dog'
Makefile:342: recipe for target 'distclean-recursive' failed
make[1]: *** [distclean-recursive] Error 1
make[1]: Leaving directory '/home/alexander/sandbox/sheepdog/tests/unit'
Makefile:452: recipe for target 'distclean-recursive' failed
make: *** [distclean-recursive] Error 1

The depedencies are removed before the unit tests get distcleaned, which
causes make to fail.

There's also another interesting symptom caused by the use of
$(top_srcdir) in automake *_SOURCES, e.g. inside
sheepdog/tests/unit/dog/Makefile.am:

test_common_SOURCES     = test_common.c mock_dog.c                      \
                          $(top_srcdir)/dog/common.c


... when used with subdir-objects, it's causing automake to create
dependencies under a literal '$(top_srcdir)' directory:

$ (cd sheepdog/tests/unit/ && find . -type d)
.
./dog
./dog/$(top_srcdir)
./dog/$(top_srcdir)/dog
./dog/$(top_srcdir)/dog/.deps
./dog/.deps
./mock
./sheep
./sheep/$(top_srcdir)
./sheep/$(top_srcdir)/sheep
./sheep/$(top_srcdir)/sheep/.deps
./sheep/$(top_srcdir)/sheep/cluster
./sheep/$(top_srcdir)/sheep/cluster/.deps
./sheep/.deps

.. which is clearly not right.

Thanks.


Alexander




More information about the sheepdog mailing list