Re: [PATCHv2][RFC][DO NOT MERGE] insane: check for 'unsafe for cross-compilation' in log.do_compile and log.do_install again


Martin Jansa
 

FWIW: boost can also trigger this issue now:

    "x86_64-webos-linux-g++" "-m64" "-march=core2" "-mtune=core2" "-msse3" "-mfpmath=sse" "-Wl,-O1" "-Wl,--hash-style=gnu" "-Wl,--as-needed" "-fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0=/usr/src/debug/boost/1.80.0-r0" "-fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0=/usr/src/debug/boost/1.80.0-r0" "-fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/build=/usr/src/debug/boost/1.80.0-r0" "-fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/build=/usr/src/debug/boost/1.80.0-r0" "-fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot=" "-fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot=" "-fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot-native=" "--sysroot=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot"   -fvisibility-inlines-hidden  -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0=/usr/src/debug/boost/1.80.0-r0  -fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0=/usr/src/debug/boost/1.80.0-r0  -fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/build=/usr/src/debug/boost/1.80.0-r0  -fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/build=/usr/src/debug/boost/1.80.0-r0  -fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot=  -fmacro-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot=  -fdebug-prefix-map=/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/recipe-sysroot-native=  -fvisibility-inlines-hidden -m64 -pthread -O3 -finline-functions -Wno-inline -Wall -fvisibility=hidden -Wno-long-long -Wno-deprecated-declarations -DBOOST_ALL_NO_LIB=1 -DBOOST_CHRONO_STATIC_LINK=1 -DBOOST_LOCALE_NO_WINAPI_BACKEND=1 -DBOOST_LOCALE_WITH_ICONV=1 -DBOOST_LOCALE_WITH_ICU=1 -DBOOST_THREAD_BUILD_LIB=1 -DBOOST_THREAD_NO_LIB=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_LIB=1 -DNDEBUG  -I"." -I"/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0/libs/locale/src" -I"/usr/include"  -c -o "/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/build/boost/bin.v2/libs/locale/build/f2e0de3f303a0b3f8e80823b216d5db4/posix/converter.o" "/OE/build/luneos-langdale/webos-ports/tmp-glibc/work/core2-64-webos-linux/boost/1.80.0-r0/boost_1_80_0/libs/locale/src/boost/locale/posix/converter.cpp"

cc1plus: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories]


On Sat, Aug 6, 2022 at 2:55 PM Martin Jansa via lists.openembedded.org <Martin.Jansa=gmail.com@...> wrote:
* it was removed in:
  https://git.openembedded.org/openembedded-core/commit/?id=a67e9ebfd5b8002fd4a7d8d27ff0d997817f76e1
  but looks like the "follow-up patches":
    d039d6fbfc gcc-cross: make use of the system include directories fatal
    1fcaa5f452 gcc: add an option for --enable-poison-system-directories to be fatal
  don't work anymore? I was checking if e.g. -Wno-error is used in
  webkitgtk to disable them, but it's not there, so something else went
  wrong, because in webkit-gtk log.do_compile I've just noticed:

  # grep unsafe poky/build/tmp/work/core2-64-poky-linux/webkitgtk/2.36.4-r0/temp/log.do_compile.3901410 | sort | uniq -c
      6 cc1: warning: include location "/usr/include/gstreamer-1.0" is unsafe for cross-compilation [-Wpoison-system-directories]
   1267 cc1plus: warning: include location "/usr/include/gstreamer-1.0" is unsafe for cross-compilation [-Wpoison-system-directories]

Signed-off-by: Martin Jansa <Martin.Jansa@...>
---

 v2: fixed copy&paste issue in postfuncs reported by Jose

 meta/classes/insane.bbclass | 38 ++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index c8b434bb54..2cb730111b 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -35,8 +35,8 @@ ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
             version-going-backwards expanded-d invalid-chars \
             license-checksum dev-elf file-rdeps configure-unsafe \
             configure-gettext perllocalpod shebang-size \
-            already-stripped installed-vs-shipped ldflags compile-host-path \
-            install-host-path pn-overrides unknown-configure-option \
+            already-stripped installed-vs-shipped ldflags compile-unsafe \
+            install-unsafe pn-overrides unknown-configure-option \
             useless-rpaths rpaths staticdev empty-dirs \
             "
 # Add usrmerge QA check based on distro feature
@@ -1231,6 +1231,31 @@ python do_qa_patch() {
                    bb.error("Missing Upstream-Status in patch\n%s\nPlease add according to %s ." % (fullpath, guidelines))
 }

+def check_poisoned_system_directories(file):
+    import subprocess
+
+    statement = "grep -q -F -e 'is unsafe for cross-compilation' %s" % file
+    if subprocess.call(statement, shell=True) == 0:
+         return """This %s log indicates 'unsafe for cross-compilation' or '-Wpoison-system-directories' errors, it looked at host include and/or library paths""" % file
+
+python do_qa_compile() {
+    log = os.path.join(d.getVar('T'),"log.do_compile")
+    skip = (d.getVar('INSANE_SKIP') or "").split()
+    if 'compile-unsafe' not in skip and os.path.exists(log):
+        error_msg = check_poisoned_system_directories(log)
+        if error_msg:
+            oe.qa.handle_error("compile-unsafe", error_msg, d)
+}
+
+python do_qa_install() {
+    log = os.path.join(d.getVar('T'),"log.do_install")
+    skip = (d.getVar('INSANE_SKIP') or "").split()
+    if 'install-unsafe' not in skip and os.path.exists(log):
+        error_msg = check_poisoned_system_directories(log)
+        if error_msg:
+            oe.qa.handle_error("install-unsafe", error_msg, d)
+}
+
 python do_qa_configure() {
     import subprocess

@@ -1253,9 +1278,8 @@ python do_qa_configure() {
             statement = "grep -q -F -e 'is unsafe for cross-compilation' %s" % \
                         os.path.join(root,"config.log")
             if "config.log" in files:
-                if subprocess.call(statement, shell=True) == 0:
-                    error_msg = """This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities.
-Rerun configure task after fixing this."""
+                error_msg = check_poisoned_system_directories(os.path.join(root,"config.log"))
+                if error_msg:
                     oe.qa.handle_error("configure-unsafe", error_msg, d)

             if "configure.ac" in files:
@@ -1356,6 +1380,10 @@ do_patch[postfuncs] += "do_qa_patch "
 #addtask qa_configure after do_configure before do_compile
 do_configure[postfuncs] += "do_qa_configure "

+# Check poison-system-directories in log.do_compile and log.do_install
+do_compile[postfuncs] += "do_qa_compile"
+do_install[postfuncs] += "do_qa_install"
+
 # Check does S exist.
 do_unpack[postfuncs] += "do_qa_unpack"




Join openembedded-core@lists.openembedded.org to automatically receive all group messages.