Oops forgot something

Le 15/01/2025 à 20:39, Christos Gavros via lists.openembedded.org a écrit :
> Users reported issues caused by missing the right libstdc++-version-dev.
> A new function 'check_c_toolchain' added in sanity.bbclass to test linking 
> libstdc++
> Fixes [YOCTO #<15712>]
> 
> Signed-off-by: Christos Gavros <[email protected]>
> ---
> v1->v2
> * use shortlog
> * drop the meta-oe prefix
> * fix format for bug reference
> * change function description including libstdc++
> * use BUILD_CC instead of specific compiler
> * lines in comments are removed
> * patch message less than 200 char
> * bb.fatal is removed
> * follow pattern of other functions in class
> * use docstring instead of # in functions description
> * make the print out message more clear
> * fix comment style where the function is called
> * change "hello world" from C++ to C program
> * use gcc instead of g++
> ---
>  meta/classes-global/sanity.bbclass | 40 ++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/meta/classes-global/sanity.bbclass 
> b/meta/classes-global/sanity.bbclass
> index 7b8a497d5a..3a5a1f5d66 100644
> --- a/meta/classes-global/sanity.bbclass
> +++ b/meta/classes-global/sanity.bbclass
> @@ -780,6 +780,43 @@ def sanity_check_locale(d):
>      except locale.Error:
>          raise_sanity_error("Your system needs to support the en_US.UTF-8 
> locale.", d)
>  
> +def check_c_toolchain(d):
> +    """
> +    it checks if the c compiling and linking to libstdc++ works properly in 
> the native system
> +    """
> +    import os
> +    import subprocess
> +    from tempfile import NamedTemporaryFile
> +    
   ^^^^
I forgot to tell you that you have whitespaces here

> +    try:
> +        with NamedTemporaryFile(delete=False, suffix=".c") as c_file:
> +            c_code = """
> +            #include <stdio.h>
> +            int main() {
> +                printf(\"Hello, World!\\n\");
> +                return 0;
> +            }
> +            """
> +            c_file.write(c_code.encode('utf-8'))
> +            c_file_name = c_file.name
> +
> +        build_cc = d.getVar('BUILD_CC').strip()
> +        output_binary = c_file_name + ".out"
> +        compile_command = [build_cc, c_file_name, '-o', 
> output_binary,'-lstdc++']
> +        result = subprocess.run(compile_command, stdout=subprocess.PIPE, 
> stderr=subprocess.PIPE)
> +
> +        if result.returncode == 0:
> +            return None
> +        else:
> +            return f"C toolchain check failed to link against libstdc++. 
> Please ensure libstdc++ and headers are installed. 
> Error:\n{result.stderr.decode()}"
> +    except Exception as e:
> +        return f"An unexpected issue occurred during the C toolchain check: 
> {str(e)}"
> +    finally:
> +        if c_file_name and os.path.exists(c_file_name):
> +            os.remove(c_file_name)
> +        if output_binary and os.path.exists(output_binary):
> +            os.remove(output_binary)
> +
>  def check_sanity_everybuild(status, d):
>      import os, stat
>      # Sanity tests which test the users environment so need to run at each 
> build (or are so cheap
> @@ -976,6 +1013,9 @@ def check_sanity_everybuild(status, d):
>          if '/dash' not in real_sh and '/bash' not in real_sh:
>              status.addresult("Error, /bin/sh links to %s, must be dash or 
> bash\n" % real_sh)
>  
> +    # Check if linking with lstdc++ is failing 
and here ----------------------------------------^

> +    status.addresult(check_c_toolchain(d))
> +
>  def check_sanity(sanity_data):
>      class SanityStatus(object):
>          def __init__(self):
> 
> 
> 
> 
> 

-- 
Yoann Congal
Smile ECS - Tech Expert

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#209929): 
https://lists.openembedded.org/g/openembedded-core/message/209929
Mute This Topic: https://lists.openembedded.org/mt/110634330/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to