Patchwork [02/31] Move generation of config-host.h to Makefile from configure

login
register
mail settings
Submitter Juan Quintela
Date Oct. 7, 2009, 12:40 a.m.
Message ID <479bbb59a908a1b60cb921e5f9718b7cd54d58d0.1254875337.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/35190/
State Accepted
Commit 1215c6e7615897e4a0bfd6867b762a47fc34f37f
Headers show

Comments

Juan Quintela - Oct. 7, 2009, 12:40 a.m.
Use timestamp based appreach to avoid not needed recompilation.
Add it to rules.mak

Many thanks to Paolo Bonzini for helpding the design, and the debug.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 Makefile      |   13 +++++++++----
 configure     |   20 +-------------------
 create_config |    2 ++
 rules.mak     |    9 +++++++++
 4 files changed, 21 insertions(+), 23 deletions(-)
Jan Kiszka - Oct. 9, 2009, 7:06 a.m.
Juan Quintela wrote:
> Use timestamp based appreach to avoid not needed recompilation.
> Add it to rules.mak
> 

This patch somehow raises the build noise ratio:

make[1]: `qemu-io' is up to date.
make[1]: `qemu-img' is up to date.
make[1]: `qemu-doc.html' is up to date.
make[1]: `qemu-tech.html' is up to date.
make[1]: `qemu.1' is up to date.
make[1]: `qemu-img.1' is up to date.
make[1]: `qemu-nbd.8' is up to date.
...

I don't immediately see why, but I bet you are so deep into this that
you can quickly find and fix the reason. :)

Thanks,
Jan

> Many thanks to Paolo Bonzini for helpding the design, and the debug.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  Makefile      |   13 +++++++++----
>  configure     |   20 +-------------------
>  create_config |    2 ++
>  rules.mak     |    9 +++++++++
>  4 files changed, 21 insertions(+), 23 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index c552739..144b392 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -29,7 +29,10 @@ else
>  DOCS=
>  endif
> 
> -build-all: $(TOOLS) $(DOCS) recurse-all
> +SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory)
> +
> +build-all: config-host.h
> +	$(call quiet-command, $(MAKE) $(SUBDIR_MAKEFLAGS) $(TOOLS) $(DOCS) recurse-all,)
> 
>  config-host.mak: configure
>  ifneq ($(wildcard config-host.mak),)
> @@ -37,10 +40,12 @@ ifneq ($(wildcard config-host.mak),)
>  	@sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh
>  endif
> 
> -SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory)
> +config-host.h: config-host.h-timestamp
> +config-host.h-timestamp: config-host.mak
> +
>  SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
> 
> -subdir-%:
> +subdir-%: config-host.h
>  	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
> 
>  $(filter %-softmmu,$(SUBDIR_RULES)): libqemu_common.a
> @@ -200,7 +205,7 @@ clean:
>          done
> 
>  distclean: clean
> -	rm -f config-host.mak config-host.h config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi
> +	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi
>  	rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
>  	for d in $(TARGET_DIRS) libhw32 libhw64 libuser; do \
>  	rm -rf $$d || exit 1 ; \
> diff --git a/configure b/configure
> index ed5d7d6..fd3cb24 100755
> --- a/configure
> +++ b/configure
> @@ -1800,13 +1800,8 @@ echo "-> Your SDL version is too old - please upgrade to have SDL support"
>  fi
> 
>  config_host_mak="config-host.mak"
> -config_host_h="config-host.h"
>  config_host_ld="config-host.ld"
> 
> -#echo "Creating $config_host_mak and $config_host_h"
> -
> -test -f $config_host_h && mv $config_host_h ${config_host_h}~
> -
>  echo "# Automatically generated by configure - do not modify" > $config_host_mak
>  printf "# Configured with:" >> $config_host_mak
>  printf " '%s'" "$0" "$@" >> $config_host_mak
> @@ -2064,18 +2059,6 @@ echo "LIBS+=$LIBS" >> $config_host_mak
>  echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
>  echo "EXESUF=$EXESUF" >> $config_host_mak
> 
> -echo "/* Automatically generated by configure - do not modify */" > $config_host_h
> -
> -/bin/sh $source_path/create_config < $config_host_mak >> $config_host_h
> -
> -if test -f ${config_host_h}~ ; then
> -  if cmp -s $config_host_h ${config_host_h}~ ; then
> -    mv ${config_host_h}~ $config_host_h
> -  else
> -    rm ${config_host_h}~
> -  fi
> -fi
> -
>  # generate list of library paths for linker script
> 
>  $ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld}
> @@ -2474,8 +2457,7 @@ fi
>  echo "LDFLAGS+=$ldflags" >> $config_mak
>  echo "QEMU_CFLAGS+=$cflags" >> $config_mak
> 
> -echo "/* Automatically generated by configure - do not modify */" > $config_h
> -echo "#include \"../config-host.h\"" >> $config_h
> +echo "#include \"../config-host.h\"" > $config_h
> 
>  /bin/sh $source_path/create_config < $config_mak >> $config_h
> 
> diff --git a/create_config b/create_config
> index 5bc8fb6..30d0487 100755
> --- a/create_config
> +++ b/create_config
> @@ -1,5 +1,7 @@
>  #!/bin/sh
> 
> +echo "/* Automatically generated by create_config - do not modify */"
> +
>  while read line; do
> 
>  case $line in
> diff --git a/rules.mak b/rules.mak
> index b380903..ca95351 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -35,3 +35,12 @@ quiet-command = $(if $(V),$1,$(if $(2),@echo $2 && $1, @$1))
> 
>  cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
>                >/dev/null 2>&1 && echo OK), $2, $3)
> +
> +# Generate timestamp files for .h include files
> +
> +%.h: %.h-timestamp
> +	@test -f $@ || cp $< $@
> +
> +%.h-timestamp: %.mak
> +	$(call quiet-command, $(SRC_PATH)/create_config < $< > $@, "  GEN   $*.h")
> +	@cmp $@ $*.h >/dev/null 2>&1 || cp $@ $*.h

Patch

diff --git a/Makefile b/Makefile
index c552739..144b392 100644
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,10 @@  else
 DOCS=
 endif

-build-all: $(TOOLS) $(DOCS) recurse-all
+SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory)
+
+build-all: config-host.h
+	$(call quiet-command, $(MAKE) $(SUBDIR_MAKEFLAGS) $(TOOLS) $(DOCS) recurse-all,)

 config-host.mak: configure
 ifneq ($(wildcard config-host.mak),)
@@ -37,10 +40,12 @@  ifneq ($(wildcard config-host.mak),)
 	@sed -n "/.*Configured with/s/[^:]*: //p" $@ | sh
 endif

-SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory)
+config-host.h: config-host.h-timestamp
+config-host.h-timestamp: config-host.mak
+
 SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))

-subdir-%:
+subdir-%: config-host.h
 	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)

 $(filter %-softmmu,$(SUBDIR_RULES)): libqemu_common.a
@@ -200,7 +205,7 @@  clean:
         done

 distclean: clean
-	rm -f config-host.mak config-host.h config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi
+	rm -f config-host.mak config-host.h* config-host.ld $(DOCS) qemu-options.texi qemu-img-cmds.texi
 	rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
 	for d in $(TARGET_DIRS) libhw32 libhw64 libuser; do \
 	rm -rf $$d || exit 1 ; \
diff --git a/configure b/configure
index ed5d7d6..fd3cb24 100755
--- a/configure
+++ b/configure
@@ -1800,13 +1800,8 @@  echo "-> Your SDL version is too old - please upgrade to have SDL support"
 fi

 config_host_mak="config-host.mak"
-config_host_h="config-host.h"
 config_host_ld="config-host.ld"

-#echo "Creating $config_host_mak and $config_host_h"
-
-test -f $config_host_h && mv $config_host_h ${config_host_h}~
-
 echo "# Automatically generated by configure - do not modify" > $config_host_mak
 printf "# Configured with:" >> $config_host_mak
 printf " '%s'" "$0" "$@" >> $config_host_mak
@@ -2064,18 +2059,6 @@  echo "LIBS+=$LIBS" >> $config_host_mak
 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
 echo "EXESUF=$EXESUF" >> $config_host_mak

-echo "/* Automatically generated by configure - do not modify */" > $config_host_h
-
-/bin/sh $source_path/create_config < $config_host_mak >> $config_host_h
-
-if test -f ${config_host_h}~ ; then
-  if cmp -s $config_host_h ${config_host_h}~ ; then
-    mv ${config_host_h}~ $config_host_h
-  else
-    rm ${config_host_h}~
-  fi
-fi
-
 # generate list of library paths for linker script

 $ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld}
@@ -2474,8 +2457,7 @@  fi
 echo "LDFLAGS+=$ldflags" >> $config_mak
 echo "QEMU_CFLAGS+=$cflags" >> $config_mak

-echo "/* Automatically generated by configure - do not modify */" > $config_h
-echo "#include \"../config-host.h\"" >> $config_h
+echo "#include \"../config-host.h\"" > $config_h

 /bin/sh $source_path/create_config < $config_mak >> $config_h

diff --git a/create_config b/create_config
index 5bc8fb6..30d0487 100755
--- a/create_config
+++ b/create_config
@@ -1,5 +1,7 @@ 
 #!/bin/sh

+echo "/* Automatically generated by create_config - do not modify */"
+
 while read line; do

 case $line in
diff --git a/rules.mak b/rules.mak
index b380903..ca95351 100644
--- a/rules.mak
+++ b/rules.mak
@@ -35,3 +35,12 @@  quiet-command = $(if $(V),$1,$(if $(2),@echo $2 && $1, @$1))

 cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
               >/dev/null 2>&1 && echo OK), $2, $3)
+
+# Generate timestamp files for .h include files
+
+%.h: %.h-timestamp
+	@test -f $@ || cp $< $@
+
+%.h-timestamp: %.mak
+	$(call quiet-command, $(SRC_PATH)/create_config < $< > $@, "  GEN   $*.h")
+	@cmp $@ $*.h >/dev/null 2>&1 || cp $@ $*.h