Commit cab00a5a authored by Michael S. Tsirkin's avatar Michael S. Tsirkin
Browse files

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: look for configure
in the current directory.
If there - we know it's a source build!

Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 62622c11
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -403,6 +403,14 @@ fi
# make source path absolute
source_path=`cd "$source_path"; pwd`

# running configure in the source tree?
# we know that's the case if configure is there.
if test -f "./configure"; then
    pwd_is_source_path="y"
else
    pwd_is_source_path="n"
fi

check_define() {
cat > $TMPC <<EOF
#if !defined($1)
@@ -2940,7 +2948,7 @@ EOF
    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
@@ -5176,7 +5184,7 @@ do
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