For Modula-2 build-tree testing, also set up paths to compiler libraries (was: [PATCH] 17/19 modula2 front end: dejagnu expect library scripts)

Message ID 87zg9zaqp4.fsf@dem-tschwing-1.ger.mentorg.com
State Accepted
Headers
Series For Modula-2 build-tree testing, also set up paths to compiler libraries (was: [PATCH] 17/19 modula2 front end: dejagnu expect library scripts) |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Thomas Schwinge Jan. 31, 2023, 11:28 a.m. UTC
  Hi!

On 2022-10-10T16:31:26+0100, Gaius Mulley via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
> Here are the dejagnu expect library scripts for the gm2
> testsuite.

This (or some variant thereof; haven't checked), became part of
commit r13-4704-g1eee94d351774cdc2efc8ee508b82d065184c6ee
"Merge modula-2 front end onto gcc".


For build-tree testing ('$gccpath != ""'; such as standard 'make check'),
'gm2_link_flags' takes care to set up paths to a number of libraries that
may be necessary:

> --- /dev/null 2022-08-24 16:22:16.888000070 +0100
> +++ gcc-git-devel-modula2/gcc/testsuite/lib/gm2.exp   2022-10-07 20:21:18.718097775 +0100

> +set gm2_link_libraries "m2pim m2iso";

> +#  gm2_link_flags - detects the whereabouts of libraries (-lstdc++).
> +#
> +
> +proc gm2_link_flags { paths } {
> +    global srcdir;
> +    global ld_library_path;
> +    global gccpath;
> +    global gm2_link_libraries;
> +
> +    set gccpath ${paths}
> +    set libio_dir ""
> +    set flags ""
> +    set ld_library_path "."
> +
> +    set shlib_ext [get_shlib_extension]
> +    verbose "shared lib extension: $shlib_ext"
> +
> +    if { $gccpath == "" } {
> +      global tool_root_dir
> +
> +      set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
> +      if { $libstdcpp != "" } {
> +          append flags "-L${libstdcpp} "
> +          append ld_library_path ":${libstdcpp}"
> +      }
> +    } else {
> +     if [file exists "${gccpath}/lib/libstdc++.a"] {
> +         append ld_library_path ":${gccpath}/lib"
> +     }
> +     if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
> +         append flags "-L${gccpath}/libstdc++ "
> +         append ld_library_path ":${gccpath}/libstdc++"
> +     }
> +     if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] {
> +         append flags " -L${gccpath}/libstdc++-v3/src/.libs "
> +         append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
> +     }
> +     # Look for libstdc++.${shlib_ext}.
> +     if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] {
> +         append flags " -L${gccpath}/libstdc++-v3/src/.libs "
> +         append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
> +     }
> +
> +     # puts stderr "${gm2_link_libraries}  before foreach"
> +     foreach d [list {*}${gm2_link_libraries}] {
> +         # puts stderr "${d}  XXXX"
> +         send_log "ld_library_path was ${ld_library_path}\n"
> +         send_log "looking for ${gccpath}/lib${d}/.libs/lib${d}.a\n"
> +         if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
> +             send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
> +             # append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
> +             append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"
> +             append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
> +         }
> +         send_log "ld_library_path is ${ld_library_path}\n"
> +     }
> +    }
> +
> +    set_ld_library_path_env_vars
> +    return "$flags"
> +}

However, this misses compiler libraries (such as libgcc, which libstdc++
may depend on).  For example, I see my x86_64-pc-linux-gnu '-m32' testing
not pick up the build-tree libgcc, but instead some random system one,
which (expectedly) doesn't satisfy requirements of other build-tree
libraries:

    [...]/build-gcc/gcc/testsuite/gm225/m.x0: /lib/i386-linux-gnu/libgcc_s.so.1: version `GCC_7.0.0' not found (required by [...]/build-gcc/x86_64-pc-linux-gnu/32/libstdc++-v3/src/.libs/libstdc++.so.6)

..., and thus a lot of execution FAILs.

To cure that, OK to push the attached
"For Modula-2 build-tree testing, also set up paths to compiler libraries"?


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
  

Comments

Gaius Mulley Jan. 31, 2023, 2:35 p.m. UTC | #1
Thomas Schwinge <thomas@codesourcery.com> writes:

> Hi!
>
> On 2022-10-10T16:31:26+0100, Gaius Mulley via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>> Here are the dejagnu expect library scripts for the gm2
>> testsuite.
>
> This (or some variant thereof; haven't checked), became part of
> commit r13-4704-g1eee94d351774cdc2efc8ee508b82d065184c6ee
> "Merge modula-2 front end onto gcc".
>
>
> For build-tree testing ('$gccpath != ""'; such as standard 'make check'),
> 'gm2_link_flags' takes care to set up paths to a number of libraries that
> may be necessary:
>
>> --- /dev/null 2022-08-24 16:22:16.888000070 +0100
>> +++ gcc-git-devel-modula2/gcc/testsuite/lib/gm2.exp   2022-10-07 20:21:18.718097775 +0100
>
>> +set gm2_link_libraries "m2pim m2iso";
>
>> +#  gm2_link_flags - detects the whereabouts of libraries (-lstdc++).
>> +#
>> +
>> +proc gm2_link_flags { paths } {
>> +    global srcdir;
>> +    global ld_library_path;
>> +    global gccpath;
>> +    global gm2_link_libraries;
>> +
>> +    set gccpath ${paths}
>> +    set libio_dir ""
>> +    set flags ""
>> +    set ld_library_path "."
>> +
>> +    set shlib_ext [get_shlib_extension]
>> +    verbose "shared lib extension: $shlib_ext"
>> +
>> +    if { $gccpath == "" } {
>> +      global tool_root_dir
>> +
>> +      set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
>> +      if { $libstdcpp != "" } {
>> +          append flags "-L${libstdcpp} "
>> +          append ld_library_path ":${libstdcpp}"
>> +      }
>> +    } else {
>> +     if [file exists "${gccpath}/lib/libstdc++.a"] {
>> +         append ld_library_path ":${gccpath}/lib"
>> +     }
>> +     if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
>> +         append flags "-L${gccpath}/libstdc++ "
>> +         append ld_library_path ":${gccpath}/libstdc++"
>> +     }
>> +     if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] {
>> +         append flags " -L${gccpath}/libstdc++-v3/src/.libs "
>> +         append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
>> +     }
>> +     # Look for libstdc++.${shlib_ext}.
>> +     if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] {
>> +         append flags " -L${gccpath}/libstdc++-v3/src/.libs "
>> +         append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
>> +     }
>> +
>> +     # puts stderr "${gm2_link_libraries}  before foreach"
>> +     foreach d [list {*}${gm2_link_libraries}] {
>> +         # puts stderr "${d}  XXXX"
>> +         send_log "ld_library_path was ${ld_library_path}\n"
>> +         send_log "looking for ${gccpath}/lib${d}/.libs/lib${d}.a\n"
>> +         if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
>> +             send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
>> +             # append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
>> +             append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"
>> +             append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
>> +         }
>> +         send_log "ld_library_path is ${ld_library_path}\n"
>> +     }
>> +    }
>> +
>> +    set_ld_library_path_env_vars
>> +    return "$flags"
>> +}
>
> However, this misses compiler libraries (such as libgcc, which libstdc++
> may depend on).  For example, I see my x86_64-pc-linux-gnu '-m32' testing
> not pick up the build-tree libgcc, but instead some random system one,
> which (expectedly) doesn't satisfy requirements of other build-tree
> libraries:
>
>     [...]/build-gcc/gcc/testsuite/gm225/m.x0: /lib/i386-linux-gnu/libgcc_s.so.1: version `GCC_7.0.0' not found (required by [...]/build-gcc/x86_64-pc-linux-gnu/32/libstdc++-v3/src/.libs/libstdc++.so.6)
>
> ..., and thus a lot of execution FAILs.
>
> To cure that, OK to push the attached
> "For Modula-2 build-tree testing, also set up paths to compiler libraries"?
>
>
> Grüße
>  Thomas
>
>
> -----------------
> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
>
>>From 5d9c8bf1a5352317fc7fd3fffe66ba690d412a4f Mon Sep 17 00:00:00 2001
> From: Thomas Schwinge <thomas@codesourcery.com>
> Date: Tue, 31 Jan 2023 11:38:15 +0100
> Subject: [PATCH] For Modula-2 build-tree testing, also set up paths to
>  compiler libraries
>
> Currently, 'gcc/testsuite/lib/gm2.exp:gm2_link_flags' doesn't set up
> paths to compiler libraries (such as libgcc, which libstdc++
> may depend on).  For example, I see my x86_64-pc-linux-gnu '-m32' testing
> not pick up the build-tree libgcc, but instead some random system one,
> which (expectedly) doesn't satisfy requirements of other build-tree
> libraries:
>
>     [...]/build-gcc/gcc/testsuite/gm225/m.x0: /lib/i386-linux-gnu/libgcc_s.so.1: version `GCC_7.0.0' not found (required by [...]/build-gcc/x86_64-pc-linux-gnu/32/libstdc++-v3/src/.libs/libstdc++.so.6)
>
> ..., and thus a lot of execution FAILs.
>
> As seen in a number of other '[...]_link_flags' procedures, the standard idiom
> seems to be to also consider 'gcc-set-multilib-library-path' for
> 'ld_library_path'.
>
> 	gcc/testsuite/
> 	* lib/gm2.exp (gm2_link_flags) [$gccpath != ""]: Also consider
> 	'gcc-set-multilib-library-path' for 'ld_library_path'.
> ---
>  gcc/testsuite/lib/gm2.exp | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/gcc/testsuite/lib/gm2.exp b/gcc/testsuite/lib/gm2.exp
> index 15e3729e5a3..560cb719a15 100644
> --- a/gcc/testsuite/lib/gm2.exp
> +++ b/gcc/testsuite/lib/gm2.exp
> @@ -316,6 +316,9 @@ proc gm2_link_flags { paths } {
>  	    }
>  	    send_log "ld_library_path is ${ld_library_path}\n"
>  	}
> +
> +	global GCC_UNDER_TEST
> +	append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
>      }
>  
>      set_ld_library_path_env_vars

Hi Thomas,

many thanks - yes LGTM,

regards,
Gaius
  

Patch

From 5d9c8bf1a5352317fc7fd3fffe66ba690d412a4f Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Tue, 31 Jan 2023 11:38:15 +0100
Subject: [PATCH] For Modula-2 build-tree testing, also set up paths to
 compiler libraries

Currently, 'gcc/testsuite/lib/gm2.exp:gm2_link_flags' doesn't set up
paths to compiler libraries (such as libgcc, which libstdc++
may depend on).  For example, I see my x86_64-pc-linux-gnu '-m32' testing
not pick up the build-tree libgcc, but instead some random system one,
which (expectedly) doesn't satisfy requirements of other build-tree
libraries:

    [...]/build-gcc/gcc/testsuite/gm225/m.x0: /lib/i386-linux-gnu/libgcc_s.so.1: version `GCC_7.0.0' not found (required by [...]/build-gcc/x86_64-pc-linux-gnu/32/libstdc++-v3/src/.libs/libstdc++.so.6)

..., and thus a lot of execution FAILs.

As seen in a number of other '[...]_link_flags' procedures, the standard idiom
seems to be to also consider 'gcc-set-multilib-library-path' for
'ld_library_path'.

	gcc/testsuite/
	* lib/gm2.exp (gm2_link_flags) [$gccpath != ""]: Also consider
	'gcc-set-multilib-library-path' for 'ld_library_path'.
---
 gcc/testsuite/lib/gm2.exp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gcc/testsuite/lib/gm2.exp b/gcc/testsuite/lib/gm2.exp
index 15e3729e5a3..560cb719a15 100644
--- a/gcc/testsuite/lib/gm2.exp
+++ b/gcc/testsuite/lib/gm2.exp
@@ -316,6 +316,9 @@  proc gm2_link_flags { paths } {
 	    }
 	    send_log "ld_library_path is ${ld_library_path}\n"
 	}
+
+	global GCC_UNDER_TEST
+	append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
     }
 
     set_ld_library_path_env_vars
-- 
2.25.1