qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] make: improve check for stale generated files i


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH] make: improve check for stale generated files in source dir
Date: Tue, 20 Mar 2018 14:36:01 +0000

On 20 March 2018 at 14:23, Daniel P. Berrangé <address@hidden> wrote:
> When doing a build with builddir != srcdir, if any generated files are
> accidentally present in srcdir from a previous build, these can cause
> unexpected failures.
>
> Currently there is a rule that checks for existance of config-host.mak,
> but there have been cases where config-host.mak is absent, while other
> generated files still exist.
>
> Update the check to look at every file listed in $(GENERATED_FILES). To
> do this we must move the check further down after $(GENERATED_FILES) has
> been populated.
>
> Signed-off-by: Daniel P. Berrangé <address@hidden>
> ---
>  Makefile | 29 +++++++++++++++++++----------
>  1 file changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index c8116694a0..73caabc019 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -52,16 +52,6 @@ endif
>
>  .git-submodule-status: git-submodule-update config-host.mak
>
> -# Check that we're not trying to do an out-of-tree build from
> -# a tree that's been used for an in-tree build.
> -ifneq ($(realpath $(SRC_PATH)),$(realpath .))
> -ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
> -$(error This is an out of tree build but your source tree ($(SRC_PATH)) \
> -seems to have been used for an in-tree build. You can fix this by running \
> -"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
> -endif
> -endif
> -
>  CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
>  CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
>  CONFIG_XEN := $(CONFIG_XEN_BACKEND)
> @@ -1027,6 +1017,25 @@ ifdef SIGNCODE
>  endif # SIGNCODE
>  endif # CONFIG_WIN
>
> +define nl
> +
> +
> +endef
> +
> +CHECK_FILES = config-host.mak $(filter-out .git-submodule-status, 
> $(GENERATED_FILES))
> +UNEXPECTED_FILES = $(wildcard $(CHECK_FILES:%=$(SRC_PATH)/%))
> +
> +# Check that we're not trying to do an out-of-tree build from
> +# a tree that's been used for an in-tree build.
> +ifneq ($(realpath $(SRC_PATH)),$(realpath .))
> +ifneq ($(UNEXPECTED_FILES),)
> +$(error Stale files in source tree:${nl}${nl} $(UNEXPECTED_FILES:%=  %${nl}) 
> ${nl}\
> +This is an out of tree build but your source tree ($(SRC_PATH)) \
> +seems to have been used for an in-tree build. You can fix this by running \
> +"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
> +endif
> +endif
> +
>  # Add a dependency on the generated files, so that they are always
>  # rebuilt before other object files
>  ifneq ($(wildcard config-host.mak),)
> --

Does this still mean the check is made sufficiently early, before
we start trying to build config-all-devices.mak and other things?
This change has moved it down after 'include' directives which
I think will cause make to try to build the file that it must
include.

It's also moved out of the "only run this if we've actually run
configure" block, but I think that part is OK.

thanks
-- PMM



reply via email to

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