diff mbox series

[v5,4/6] configure: Fix include and linkage issue on msys2

Message ID 20200826151006.80-4-luoyonggang@gmail.com
State New
Headers show
Series [v5,1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja | expand

Commit Message

Yonggang Luo Aug. 26, 2020, 3:10 p.m. UTC
From: Yonggang Luo <luoyonggang@gmail.com>

On msys2, the -I/e/path/to/qemu -L/e/path/to/qemu are not recognized by the compiler
Cause $PWD are result posix style path such as /e/path/to/qemu that can not be recognized
by mingw gcc, and `pwd -W` are result Windows style path such as E:/path/to/qemu that can
be recognized by the mingw gcc. So we replace all $PWD with $build_path that can
building qemu under msys2/mingw environment.

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 configure | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

Comments

Paolo Bonzini Aug. 26, 2020, 3:24 p.m. UTC | #1
I'm a bit wary of this patch, the effects are quite wide-ranging. If
we move all the detection of dependencies to meson, it will take a
while but we should get a similar effect.

However, I'm testing and queuing patches 1 to 3.

Paolo

On Wed, Aug 26, 2020 at 5:13 PM <luoyonggang@gmail.com> wrote:
>
> From: Yonggang Luo <luoyonggang@gmail.com>
>
> On msys2, the -I/e/path/to/qemu -L/e/path/to/qemu are not recognized by the compiler
> Cause $PWD are result posix style path such as /e/path/to/qemu that can not be recognized
> by mingw gcc, and `pwd -W` are result Windows style path such as E:/path/to/qemu that can
> be recognized by the mingw gcc. So we replace all $PWD with $build_path that can
> building qemu under msys2/mingw environment.
>
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
>  configure | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/configure b/configure
> index b1e11397a8..3b9e79923d 100755
> --- a/configure
> +++ b/configure
> @@ -13,8 +13,13 @@ export CCACHE_RECACHE=yes
>
>  # make source path absolute
>  source_path=$(cd "$(dirname -- "$0")"; pwd)
> +build_path=$PWD
> +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
> +source_path=$(cd "$(dirname -- "$0")"; pwd -W)
> +build_path=`pwd -W`
> +fi
>
> -if test "$PWD" = "$source_path"
> +if test "$build_path" = "$source_path"
>  then
>      echo "Using './build' as the directory for build output"
>
> @@ -346,7 +351,12 @@ ld_has() {
>      $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
>  }
>
> -if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
> +check_valid_build_path="[[:space:]:]"
> +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
> +check_valid_build_path="[[:space:]]"
> +fi
> +
> +if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path";
>  then
>    error_exit "main directory cannot contain spaces nor colons"
>  fi
> @@ -942,7 +952,7 @@ Linux)
>    linux="yes"
>    linux_user="yes"
>    kvm="yes"
> -  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
> +  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES"
>    libudev="yes"
>  ;;
>  esac
> @@ -4283,7 +4293,7 @@ EOF
>                symlink "$source_path/dtc/Makefile" "dtc/Makefile"
>            fi
>            fdt_cflags="-I${source_path}/dtc/libfdt"
> -          fdt_ldflags="-L$PWD/dtc/libfdt"
> +          fdt_ldflags="-L${build_path}/dtc/libfdt"
>            fdt_libs="$fdt_libs"
>        elif test "$fdt" = "yes" ; then
>            # Not a git build & no libfdt found, prompt for system install
> @@ -5268,7 +5278,7 @@ case "$capstone" in
>      else
>        LIBCAPSTONE=libcapstone.a
>      fi
> -    capstone_libs="-L$PWD/capstone -lcapstone"
> +    capstone_libs="-L${build_path}/capstone -lcapstone"
>      capstone_cflags="-I${source_path}/capstone/include"
>      ;;
>
> @@ -6268,8 +6278,8 @@ case "$slirp" in
>        git_submodules="${git_submodules} slirp"
>      fi
>      mkdir -p slirp
> -    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
> -    slirp_libs="-L$PWD/slirp -lslirp"
> +    slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src"
> +    slirp_libs="-L${build_path}/slirp -lslirp"
>      if test "$mingw32" = "yes" ; then
>        slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
>      fi
> @@ -8212,7 +8222,7 @@ fi
>  mv $cross config-meson.cross
>
>  rm -rf meson-private meson-info meson-logs
> -NINJA=$PWD/ninjatool $meson setup \
> +NINJA="${build_path}/ninjatool" $meson setup \
>          --prefix "${pre_prefix}$prefix" \
>          --libdir "${pre_prefix}$libdir" \
>          --libexecdir "${pre_prefix}$libexecdir" \
> @@ -8232,7 +8242,7 @@ NINJA=$PWD/ninjatool $meson setup \
>         -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
>         -Dgettext=$gettext -Dxkbcommon=$xkbcommon \
>          $cross_arg \
> -        "$PWD" "$source_path"
> +        "$build_path" "$source_path"
>
>  if test "$?" -ne 0 ; then
>      error_exit "meson setup failed"
> --
> 2.27.0.windows.1
>
Yonggang Luo Aug. 26, 2020, 3:33 p.m. UTC | #2
On Wed, Aug 26, 2020 at 11:24 PM Paolo Bonzini <pbonzini@redhat.com> wrote:

> I'm a bit wary of this patch, the effects are quite wide-ranging. If
> we move all the detection of dependencies to meson, it will take a
> while but we should get a similar effect.
>
Only on MINGW the $PWD sematic are changed, so I don't think there is side
effect of this patch.


>
> However, I'm testing and queuing patches 1 to 3.
>
> Paolo
>
> On Wed, Aug 26, 2020 at 5:13 PM <luoyonggang@gmail.com> wrote:
> >
> > From: Yonggang Luo <luoyonggang@gmail.com>
> >
> > On msys2, the -I/e/path/to/qemu -L/e/path/to/qemu are not recognized by
> the compiler
> > Cause $PWD are result posix style path such as /e/path/to/qemu that can
> not be recognized
> > by mingw gcc, and `pwd -W` are result Windows style path such as
> E:/path/to/qemu that can
> > be recognized by the mingw gcc. So we replace all $PWD with $build_path
> that can
> > building qemu under msys2/mingw environment.
> >
> > Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> > ---
> >  configure | 28 +++++++++++++++++++---------
> >  1 file changed, 19 insertions(+), 9 deletions(-)
> >
> > diff --git a/configure b/configure
> > index b1e11397a8..3b9e79923d 100755
> > --- a/configure
> > +++ b/configure
> > @@ -13,8 +13,13 @@ export CCACHE_RECACHE=yes
> >
> >  # make source path absolute
> >  source_path=$(cd "$(dirname -- "$0")"; pwd)
> > +build_path=$PWD
> > +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
> > +source_path=$(cd "$(dirname -- "$0")"; pwd -W)
> > +build_path=`pwd -W`
> > +fi
> >
> > -if test "$PWD" = "$source_path"
> > +if test "$build_path" = "$source_path"
> >  then
> >      echo "Using './build' as the directory for build output"
> >
> > @@ -346,7 +351,12 @@ ld_has() {
> >      $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
> >  }
> >
> > -if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
> > +check_valid_build_path="[[:space:]:]"
> > +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
> > +check_valid_build_path="[[:space:]]"
> > +fi
> > +
> > +if printf %s\\n "$source_path" "$build_path" | grep -q
> "$check_valid_build_path";
> >  then
> >    error_exit "main directory cannot contain spaces nor colons"
> >  fi
> > @@ -942,7 +952,7 @@ Linux)
> >    linux="yes"
> >    linux_user="yes"
> >    kvm="yes"
> > -  QEMU_INCLUDES="-isystem ${source_path}/linux-headers
> -I$PWD/linux-headers $QEMU_INCLUDES"
> > +  QEMU_INCLUDES="-isystem ${source_path}/linux-headers
> -I${build_path}/linux-headers $QEMU_INCLUDES"
> >    libudev="yes"
> >  ;;
> >  esac
> > @@ -4283,7 +4293,7 @@ EOF
> >                symlink "$source_path/dtc/Makefile" "dtc/Makefile"
> >            fi
> >            fdt_cflags="-I${source_path}/dtc/libfdt"
> > -          fdt_ldflags="-L$PWD/dtc/libfdt"
> > +          fdt_ldflags="-L${build_path}/dtc/libfdt"
> >            fdt_libs="$fdt_libs"
> >        elif test "$fdt" = "yes" ; then
> >            # Not a git build & no libfdt found, prompt for system install
> > @@ -5268,7 +5278,7 @@ case "$capstone" in
> >      else
> >        LIBCAPSTONE=libcapstone.a
> >      fi
> > -    capstone_libs="-L$PWD/capstone -lcapstone"
> > +    capstone_libs="-L${build_path}/capstone -lcapstone"
> >      capstone_cflags="-I${source_path}/capstone/include"
> >      ;;
> >
> > @@ -6268,8 +6278,8 @@ case "$slirp" in
> >        git_submodules="${git_submodules} slirp"
> >      fi
> >      mkdir -p slirp
> > -    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
> > -    slirp_libs="-L$PWD/slirp -lslirp"
> > +    slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src"
> > +    slirp_libs="-L${build_path}/slirp -lslirp"
> >      if test "$mingw32" = "yes" ; then
> >        slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
> >      fi
> > @@ -8212,7 +8222,7 @@ fi
> >  mv $cross config-meson.cross
> >
> >  rm -rf meson-private meson-info meson-logs
> > -NINJA=$PWD/ninjatool $meson setup \
> > +NINJA="${build_path}/ninjatool" $meson setup \
> >          --prefix "${pre_prefix}$prefix" \
> >          --libdir "${pre_prefix}$libdir" \
> >          --libexecdir "${pre_prefix}$libexecdir" \
> > @@ -8232,7 +8242,7 @@ NINJA=$PWD/ninjatool $meson setup \
> >         -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg
> -Dvnc_png=$vnc_png \
> >         -Dgettext=$gettext -Dxkbcommon=$xkbcommon \
> >          $cross_arg \
> > -        "$PWD" "$source_path"
> > +        "$build_path" "$source_path"
> >
> >  if test "$?" -ne 0 ; then
> >      error_exit "meson setup failed"
> > --
> > 2.27.0.windows.1
> >
>
>
Paolo Bonzini Aug. 26, 2020, 3:36 p.m. UTC | #3
On Wed, Aug 26, 2020 at 5:33 PM 罗勇刚(Yonggang Luo) <luoyonggang@gmail.com> wrote:
>
>
> On Wed, Aug 26, 2020 at 11:24 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>> I'm a bit wary of this patch, the effects are quite wide-ranging. If
>> we move all the detection of dependencies to meson, it will take a
>> while but we should get a similar effect.
>
> Only on MINGW the $PWD sematic are changed, so I don't think there is side effect of this patch.

Yes the side effect is only on MINGW but the affected variables are
used everywhere so it's a rather hard to review change.

Paolo
Yonggang Luo Aug. 26, 2020, 3:38 p.m. UTC | #4
On Wed, Aug 26, 2020 at 11:36 PM Paolo Bonzini <pbonzini@redhat.com> wrote:

> On Wed, Aug 26, 2020 at 5:33 PM 罗勇刚(Yonggang Luo) <luoyonggang@gmail.com>
> wrote:
> >
> >
> > On Wed, Aug 26, 2020 at 11:24 PM Paolo Bonzini <pbonzini@redhat.com>
> wrote:
> >> I'm a bit wary of this patch, the effects are quite wide-ranging. If
> >> we move all the detection of dependencies to meson, it will take a
> >> while but we should get a similar effect.
> >
> > Only on MINGW the $PWD sematic are changed, so I don't think there is
> side effect of this patch.
>
> Yes the side effect is only on MINGW but the affected variables are
> used everywhere so it's a rather hard to review change.
>
Gotcha, review it carefully

>
> Paolo
>
>
Mark Cave-Ayland Aug. 27, 2020, 4:14 p.m. UTC | #5
On 26/08/2020 16:10, luoyonggang@gmail.com wrote:

> From: Yonggang Luo <luoyonggang@gmail.com>
> 
> On msys2, the -I/e/path/to/qemu -L/e/path/to/qemu are not recognized by the compiler
> Cause $PWD are result posix style path such as /e/path/to/qemu that can not be recognized
> by mingw gcc, and `pwd -W` are result Windows style path such as E:/path/to/qemu that can
> be recognized by the mingw gcc. So we replace all $PWD with $build_path that can
> building qemu under msys2/mingw environment.
> 
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
>  configure | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/configure b/configure
> index b1e11397a8..3b9e79923d 100755
> --- a/configure
> +++ b/configure
> @@ -13,8 +13,13 @@ export CCACHE_RECACHE=yes
>  
>  # make source path absolute
>  source_path=$(cd "$(dirname -- "$0")"; pwd)
> +build_path=$PWD
> +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then

This still doesn't match the existing indentation as per my previous comment.

> +source_path=$(cd "$(dirname -- "$0")"; pwd -W)
> +build_path=`pwd -W`
> +fi
>  
> -if test "$PWD" = "$source_path"
> +if test "$build_path" = "$source_path"
>  then
>      echo "Using './build' as the directory for build output"
>  
> @@ -346,7 +351,12 @@ ld_has() {
>      $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
>  }
>  
> -if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
> +check_valid_build_path="[[:space:]:]"
> +if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then

Same again here too.

> +check_valid_build_path="[[:space:]]"
> +fi
> +
> +if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path";
>  then
>    error_exit "main directory cannot contain spaces nor colons"
>  fi
> @@ -942,7 +952,7 @@ Linux)
>    linux="yes"
>    linux_user="yes"
>    kvm="yes"
> -  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
> +  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES"
>    libudev="yes"
>  ;;
>  esac
> @@ -4283,7 +4293,7 @@ EOF
>                symlink "$source_path/dtc/Makefile" "dtc/Makefile"
>            fi
>            fdt_cflags="-I${source_path}/dtc/libfdt"
> -          fdt_ldflags="-L$PWD/dtc/libfdt"
> +          fdt_ldflags="-L${build_path}/dtc/libfdt"
>            fdt_libs="$fdt_libs"
>        elif test "$fdt" = "yes" ; then
>            # Not a git build & no libfdt found, prompt for system install
> @@ -5268,7 +5278,7 @@ case "$capstone" in
>      else
>        LIBCAPSTONE=libcapstone.a
>      fi
> -    capstone_libs="-L$PWD/capstone -lcapstone"
> +    capstone_libs="-L${build_path}/capstone -lcapstone"
>      capstone_cflags="-I${source_path}/capstone/include"
>      ;;
>  
> @@ -6268,8 +6278,8 @@ case "$slirp" in
>        git_submodules="${git_submodules} slirp"
>      fi
>      mkdir -p slirp
> -    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
> -    slirp_libs="-L$PWD/slirp -lslirp"
> +    slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src"
> +    slirp_libs="-L${build_path}/slirp -lslirp"
>      if test "$mingw32" = "yes" ; then
>        slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
>      fi
> @@ -8212,7 +8222,7 @@ fi
>  mv $cross config-meson.cross
>  
>  rm -rf meson-private meson-info meson-logs
> -NINJA=$PWD/ninjatool $meson setup \
> +NINJA="${build_path}/ninjatool" $meson setup \
>          --prefix "${pre_prefix}$prefix" \
>          --libdir "${pre_prefix}$libdir" \
>          --libexecdir "${pre_prefix}$libexecdir" \
> @@ -8232,7 +8242,7 @@ NINJA=$PWD/ninjatool $meson setup \
>  	-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
>  	-Dgettext=$gettext -Dxkbcommon=$xkbcommon \
>          $cross_arg \
> -        "$PWD" "$source_path"
> +        "$build_path" "$source_path"
>  
>  if test "$?" -ne 0 ; then
>      error_exit "meson setup failed"

Is the change to this last section for the NINJA variable really required to fix
linking? It would be useful to keep the NINJA variable and executable detection fix
as a separate patch if possible.


ATB,

Mark.
diff mbox series

Patch

diff --git a/configure b/configure
index b1e11397a8..3b9e79923d 100755
--- a/configure
+++ b/configure
@@ -13,8 +13,13 @@  export CCACHE_RECACHE=yes
 
 # make source path absolute
 source_path=$(cd "$(dirname -- "$0")"; pwd)
+build_path=$PWD
+if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
+source_path=$(cd "$(dirname -- "$0")"; pwd -W)
+build_path=`pwd -W`
+fi
 
-if test "$PWD" = "$source_path"
+if test "$build_path" = "$source_path"
 then
     echo "Using './build' as the directory for build output"
 
@@ -346,7 +351,12 @@  ld_has() {
     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
 }
 
-if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
+check_valid_build_path="[[:space:]:]"
+if [ "$MSYSTEM" = "MINGW64" -o  "$MSYSTEM" = "MINGW32" ]; then
+check_valid_build_path="[[:space:]]"
+fi
+
+if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path";
 then
   error_exit "main directory cannot contain spaces nor colons"
 fi
@@ -942,7 +952,7 @@  Linux)
   linux="yes"
   linux_user="yes"
   kvm="yes"
-  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
+  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES"
   libudev="yes"
 ;;
 esac
@@ -4283,7 +4293,7 @@  EOF
               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
           fi
           fdt_cflags="-I${source_path}/dtc/libfdt"
-          fdt_ldflags="-L$PWD/dtc/libfdt"
+          fdt_ldflags="-L${build_path}/dtc/libfdt"
           fdt_libs="$fdt_libs"
       elif test "$fdt" = "yes" ; then
           # Not a git build & no libfdt found, prompt for system install
@@ -5268,7 +5278,7 @@  case "$capstone" in
     else
       LIBCAPSTONE=libcapstone.a
     fi
-    capstone_libs="-L$PWD/capstone -lcapstone"
+    capstone_libs="-L${build_path}/capstone -lcapstone"
     capstone_cflags="-I${source_path}/capstone/include"
     ;;
 
@@ -6268,8 +6278,8 @@  case "$slirp" in
       git_submodules="${git_submodules} slirp"
     fi
     mkdir -p slirp
-    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
-    slirp_libs="-L$PWD/slirp -lslirp"
+    slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src"
+    slirp_libs="-L${build_path}/slirp -lslirp"
     if test "$mingw32" = "yes" ; then
       slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
     fi
@@ -8212,7 +8222,7 @@  fi
 mv $cross config-meson.cross
 
 rm -rf meson-private meson-info meson-logs
-NINJA=$PWD/ninjatool $meson setup \
+NINJA="${build_path}/ninjatool" $meson setup \
         --prefix "${pre_prefix}$prefix" \
         --libdir "${pre_prefix}$libdir" \
         --libexecdir "${pre_prefix}$libexecdir" \
@@ -8232,7 +8242,7 @@  NINJA=$PWD/ninjatool $meson setup \
 	-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
 	-Dgettext=$gettext -Dxkbcommon=$xkbcommon \
         $cross_arg \
-        "$PWD" "$source_path"
+        "$build_path" "$source_path"
 
 if test "$?" -ne 0 ; then
     error_exit "meson setup failed"