configure: make source tree build more robust

When source directory can be arrived at by two paths,
configure might misdetect an out of tree build.
The simplest way to trigger the problem is running
configure using a full path. E.g. (<firstpath> refers to qemu source
tree):
    ln -s <firstpath> <secondpath>
    cd <firstpath>
    <secondpath>/configure

A more practical way is when make runs configure automatically:

1. cd <firstpath>/; ./configure
    SRC_PATH=<firstpath>/ is written into config_host.mak
2. cd <secondpath>/; touch configure; make
    make now runs <firstpath>/configure, so configure
    assumes it's an out of tree build

When this happens configure overwrites parts of
the current tree with symlinks.

Make the test more robust: create a canary file under
the build tree, then look for it in the source tree.
If there - we know it's a source build!

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
diff --git a/configure b/configure
index b08afc3..4a59cb7 100755
--- a/configure
+++ b/configure
@@ -404,6 +404,22 @@
 # make source path absolute
 source_path=`cd "$source_path"; pwd`
 
+# running configure in the source tree? create a temporary file
+# under pwd, check for it in source tree. Use .o suffix so that
+# make clean will blow it away if
+canary_path=`pwd`
+canary_fullpath=`mktemp "$canary_path/canary.XXXXXXXXXX.o"`
+if test -z "$canary_fullpath"; then
+    error_exit "Current directory $canary_path/ does not appear to be writeable"
+fi
+canary_basename=`basename "$canary_fullpath"`
+if test -e "$source_path/$canary_basename"; then
+    pwd_is_source_path="y"
+else
+    pwd_is_source_path="n"
+fi
+rm -f -- "$canary_fullpath"
+
 check_define() {
 cat > $TMPC <<EOF
 #if !defined($1)
@@ -2940,7 +2956,7 @@
     fdt=yes
     dtc_internal="yes"
     mkdir -p dtc
-    if [ "$source_path" != `pwd` ] ; then
+    if [ "$pwd_is_source_path" != "y" ] ; then
        symlink "$source_path/dtc/Makefile" "dtc/Makefile"
        symlink "$source_path/dtc/scripts" "dtc/scripts"
     fi
@@ -5178,7 +5194,7 @@
 done
 mkdir -p $DIRS
 for f in $FILES ; do
-    if [ -e "$source_path/$f" ] && [ "$source_path" != `pwd` ]; then
+    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
         symlink "$source_path/$f" "$f"
     fi
 done