All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] Fixes msys2 building after the meson convert
@ 2020-08-27  5:05 luoyonggang
  2020-08-27  5:05 ` [PATCH v2 1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja luoyonggang
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

These patch series fixes the building of newest qemu under
msys2 environment

Yonggang Luo (6):
  meson: Fixes the ninjatool issue that E$$: are generated in
    Makefile.ninja
  meson: fixes relpath may fail on win32.
  meson: Mingw64 gcc doesn't recognize system include_type for sdl2
  configure: Fix include and linkage issue on msys2
  meson: Fixes ninjatool can not be recognized as script under
    Window/MSYS2
  meson: Convert undefsym.sh to undefsym.py

 configure             | 28 ++++++++++++++-------
 meson.build           |  5 ++--
 scripts/mtest2make.py | 11 +++++++--
 scripts/ninjatool.py  |  2 +-
 scripts/undefsym.py   | 57 +++++++++++++++++++++++++++++++++++++++++++
 scripts/undefsym.sh   | 20 ---------------
 6 files changed, 88 insertions(+), 35 deletions(-)
 create mode 100644 scripts/undefsym.py
 delete mode 100755 scripts/undefsym.sh

-- 
2.27.0.windows.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  2020-08-27  5:05 ` [PATCH v2 2/6] meson: fixes relpath may fail on win32 luoyonggang
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

SIMPLE_PATH_RE should match the full path token.
Or the $ and : contained in path would not matched if the path are start with C:/ and E:/

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 scripts/ninjatool.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/ninjatool.py b/scripts/ninjatool.py
index cc77d51aa8..6ca8be6f10 100755
--- a/scripts/ninjatool.py
+++ b/scripts/ninjatool.py
@@ -55,7 +55,7 @@ else:
 
 PATH_RE = r"[^$\s:|]+|\$[$ :]|\$[a-zA-Z0-9_-]+|\$\{[a-zA-Z0-9_.-]+\}"
 
-SIMPLE_PATH_RE = re.compile(r"[^$\s:|]+")
+SIMPLE_PATH_RE = re.compile(r"^[^$\s:|]+$")
 IDENT_RE = re.compile(r"[a-zA-Z0-9_.-]+$")
 STRING_RE = re.compile(r"(" + PATH_RE + r"|[\s:|])(?:\r?\n)?|.")
 TOPLEVEL_RE = re.compile(r"([=:#]|\|\|?|^ +|(?:" + PATH_RE + r")+)\s*|.")
-- 
2.27.0.windows.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 2/6] meson: fixes relpath may fail on win32.
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
  2020-08-27  5:05 ` [PATCH v2 1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  2020-08-27  5:05 ` [PATCH v2 3/6] meson: Mingw64 gcc doesn't recognize system include_type for sdl2 luoyonggang
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

On win32, os.path.relpath would raise exception when do the following relpath:
C:/msys64/mingw64/x.exe relative to E:/path/qemu-build would fail.
So we try catch it for stopping it from raise exception on msys2

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 scripts/mtest2make.py | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py
index bdb257bbd9..d7a51bf97e 100644
--- a/scripts/mtest2make.py
+++ b/scripts/mtest2make.py
@@ -53,9 +53,16 @@ i = 0
 for test in json.load(sys.stdin):
     env = ' '.join(('%s=%s' % (shlex.quote(k), shlex.quote(v))
                     for k, v in test['env'].items()))
-    executable = os.path.relpath(test['cmd'][0])
+    executable = test['cmd'][0]
+    try:
+        executable = os.path.relpath(executable)
+    except:
+        pass
     if test['workdir'] is not None:
-        test['cmd'][0] = os.path.relpath(test['cmd'][0], test['workdir'])
+        try:
+            test['cmd'][0] = os.path.relpath(executable, test['workdir'])
+        except:
+            test['cmd'][0] = executable
     else:
         test['cmd'][0] = executable
     cmd = '$(.test.env) %s %s' % (env, ' '.join((shlex.quote(x) for x in test['cmd'])))
-- 
2.27.0.windows.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 3/6] meson: Mingw64 gcc doesn't recognize system include_type for sdl2
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
  2020-08-27  5:05 ` [PATCH v2 1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja luoyonggang
  2020-08-27  5:05 ` [PATCH v2 2/6] meson: fixes relpath may fail on win32 luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  2020-08-27  5:05 ` [PATCH v2 4/6] configure: Fix include and linkage issue on msys2 luoyonggang
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

Fixes this for msys2/mingw64 by remove the include_type for sdl2 discovery in meson

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 meson.build | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/meson.build b/meson.build
index f0fe5f8799..1644bbd83c 100644
--- a/meson.build
+++ b/meson.build
@@ -224,8 +224,7 @@ if 'CONFIG_BRLAPI' in config_host
   brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
 endif
 
-sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static,
-                 include_type: 'system')
+sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
 sdl_image = not_found
 if sdl.found()
   # work around 2.0.8 bug
-- 
2.27.0.windows.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 4/6] configure: Fix include and linkage issue on msys2
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
                   ` (2 preceding siblings ...)
  2020-08-27  5:05 ` [PATCH v2 3/6] meson: Mingw64 gcc doesn't recognize system include_type for sdl2 luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  2020-08-27  5:05 ` [PATCH v2 5/6] meson: Fixes ninjatool can not be recognized as script under Window/MSYS2 luoyonggang
  2020-08-27  5:05 ` [PATCH v2 6/6] meson: Convert undefsym.sh to undefsym.py luoyonggang
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

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



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 5/6] meson: Fixes ninjatool can not be recognized as script under Window/MSYS2
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
                   ` (3 preceding siblings ...)
  2020-08-27  5:05 ` [PATCH v2 4/6] configure: Fix include and linkage issue on msys2 luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  2020-08-27  5:05 ` [PATCH v2 6/6] meson: Convert undefsym.sh to undefsym.py luoyonggang
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

use ninja instead ${build_path}/ninjatool

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 configure | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/configure b/configure
index 3b9e79923d..2ad0c58492 100755
--- a/configure
+++ b/configure
@@ -8222,7 +8222,7 @@ fi
 mv $cross config-meson.cross
 
 rm -rf meson-private meson-info meson-logs
-NINJA="${build_path}/ninjatool" $meson setup \
+NINJA="ninja" $meson setup \
         --prefix "${pre_prefix}$prefix" \
         --libdir "${pre_prefix}$libdir" \
         --libexecdir "${pre_prefix}$libexecdir" \
-- 
2.27.0.windows.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 6/6] meson: Convert undefsym.sh to undefsym.py
  2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
                   ` (4 preceding siblings ...)
  2020-08-27  5:05 ` [PATCH v2 5/6] meson: Fixes ninjatool can not be recognized as script under Window/MSYS2 luoyonggang
@ 2020-08-27  5:05 ` luoyonggang
  5 siblings, 0 replies; 7+ messages in thread
From: luoyonggang @ 2020-08-27  5:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo, Daniel P . Berrang茅

From: Yonggang Luo <luoyonggang@gmail.com>

undefsym.sh are not msys2 compatible, convert it to python script

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
 meson.build         |  2 +-
 scripts/undefsym.py | 57 +++++++++++++++++++++++++++++++++++++++++++++
 scripts/undefsym.sh | 20 ----------------
 3 files changed, 58 insertions(+), 21 deletions(-)
 create mode 100644 scripts/undefsym.py
 delete mode 100755 scripts/undefsym.sh

diff --git a/meson.build b/meson.build
index 1644bbd83c..d6e3bcea7e 100644
--- a/meson.build
+++ b/meson.build
@@ -845,7 +845,7 @@ foreach d, list : modules
 endforeach
 
 nm = find_program('nm')
-undefsym = find_program('scripts/undefsym.sh')
+undefsym = find_program('scripts/undefsym.py')
 block_syms = custom_target('block.syms', output: 'block.syms',
                              input: [libqemuutil, block_mods],
                              capture: true,
diff --git a/scripts/undefsym.py b/scripts/undefsym.py
new file mode 100644
index 0000000000..c690f88c7a
--- /dev/null
+++ b/scripts/undefsym.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Before a shared module's DSO is produced, a static library is built for it
+# and passed to this script.  The script generates -Wl,-u options to force
+# the inclusion of symbol from libqemuutil.a if the shared modules need them,
+# This is necessary because the modules may use functions not needed by the
+# executable itself, which would cause the function to not be linked in.
+# Then the DSO loading would fail because of the missing symbol.
+
+
+"""
+Compare the static library with the shared module for compute the symbol duplication
+"""
+
+import sys
+import subprocess
+
+def filter_lines_set(stdout, is_static = True):
+    linesSet = set()
+    for line in stdout.splitlines():
+        tokens = line.split(b' ')
+        if len(tokens) >= 1:
+            if len(tokens) > 1:
+                if is_static and tokens[1] == b'U':
+                    continue
+                if not is_static and tokens[1] != b'U':
+                    continue
+            new_line = b'-Wl,-u,' + tokens[0]
+            if not new_line in linesSet:
+                linesSet.add(new_line)
+    return linesSet
+
+def main(args):
+    if len(args) <= 3:
+        sys.exit(0)
+
+    nm = args[1]
+    staticlib = args[2]
+    pc = subprocess.run([nm, "-P", "-g", staticlib], stdout=subprocess.PIPE)
+    if pc.returncode != 0:
+        sys.exit(-1)
+    lines_set_left = filter_lines_set(pc.stdout)
+
+    shared_modules = args[3:]
+    pc = subprocess.run([nm, "-P", "-g"] + shared_modules, stdout=subprocess.PIPE)
+    if pc.returncode != 0:
+        sys.exit(-1)
+    lines_set_right = filter_lines_set(pc.stdout, False)
+    lines = []
+    for line in sorted(list(lines_set_right)):
+        if line in lines_set_left:
+            lines.append(line)
+    sys.stdout.write(b'\n'.join(lines).decode())
+
+if __name__ == "__main__":
+    main(sys.argv)
diff --git a/scripts/undefsym.sh b/scripts/undefsym.sh
deleted file mode 100755
index b9ec332e95..0000000000
--- a/scripts/undefsym.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /usr/bin/env bash
-
-# Before a shared module's DSO is produced, a static library is built for it
-# and passed to this script.  The script generates -Wl,-u options to force
-# the inclusion of symbol from libqemuutil.a if the shared modules need them,
-# This is necessary because the modules may use functions not needed by the
-# executable itself, which would cause the function to not be linked in.
-# Then the DSO loading would fail because of the missing symbol.
-
-if test $# -le 2; then
-  exit 0
-fi
-
-NM=$1
-staticlib=$2
-shift 2
-# Find symbols defined in static libraries and undefined in shared modules
-comm -12 \
-  <( $NM -P -g $staticlib | awk '$2!="U"{print "-Wl,-u," $1}' | sort -u) \
-  <( $NM -P -g "$@" | awk '$2=="U"{print "-Wl,-u," $1}' | sort -u)
-- 
2.27.0.windows.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-08-27  5:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-27  5:05 [PATCH v2 0/6] Fixes msys2 building after the meson convert luoyonggang
2020-08-27  5:05 ` [PATCH v2 1/6] meson: Fixes the ninjatool issue that E$$: are generated in Makefile.ninja luoyonggang
2020-08-27  5:05 ` [PATCH v2 2/6] meson: fixes relpath may fail on win32 luoyonggang
2020-08-27  5:05 ` [PATCH v2 3/6] meson: Mingw64 gcc doesn't recognize system include_type for sdl2 luoyonggang
2020-08-27  5:05 ` [PATCH v2 4/6] configure: Fix include and linkage issue on msys2 luoyonggang
2020-08-27  5:05 ` [PATCH v2 5/6] meson: Fixes ninjatool can not be recognized as script under Window/MSYS2 luoyonggang
2020-08-27  5:05 ` [PATCH v2 6/6] meson: Convert undefsym.sh to undefsym.py luoyonggang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.