cc: deal with -Wl,-rpath= without value, deal with NAG (#37215)

Spack never parsed `nagfor` linker arguments put on the compiler line: 
```
nagfor -Wl,-Wl,,-rpath,,/path
````
so, let's continue not attempting to parse that.
This commit is contained in:
Harmen Stoppels 2023-05-05 12:16:31 +02:00 committed by GitHub
parent 3ecb84d398
commit bbc779f3f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 5 deletions

19
lib/spack/env/cc vendored
View File

@ -434,8 +434,6 @@ wl_expect_rpath=no
xlinker_expect_rpath=no
parse_Wl() {
# drop -Wl
shift
while [ $# -ne 0 ]; do
if [ "$wl_expect_rpath" = yes ]; then
if system_dir "$1"; then
@ -448,7 +446,9 @@ parse_Wl() {
case "$1" in
-rpath=*)
arg="${1#-rpath=}"
if system_dir "$arg"; then
if [ -z "$arg" ]; then
shift; continue
elif system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
@ -456,7 +456,9 @@ parse_Wl() {
;;
--rpath=*)
arg="${1#--rpath=}"
if system_dir "$arg"; then
if [ -z "$arg" ]; then
shift; continue
elif system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
@ -467,6 +469,11 @@ parse_Wl() {
;;
"$dtags_to_strip")
;;
-Wl)
# Nested -Wl,-Wl means we're in NAG compiler territory, we don't support
# it.
return 1
;;
*)
append other_args_list "-Wl,$1"
;;
@ -576,7 +583,9 @@ while [ $# -ne 0 ]; do
;;
-Wl,*)
IFS=,
parse_Wl $1
if ! parse_Wl ${1#-Wl,}; then
append other_args_list "$1"
fi
unset IFS
;;
-Xlinker)

View File

@ -352,6 +352,24 @@ def test_Wl_parsing(wrapper_environment):
)
@pytest.mark.regression("37179")
def test_Wl_parsing_with_missing_value(wrapper_environment):
check_args(
cc,
["-Wl,-rpath=/a,-rpath=", "-Wl,--rpath="],
[real_cc] + target_args + ["-Wl,--disable-new-dtags", "-Wl,-rpath,/a"],
)
@pytest.mark.regression("37179")
def test_Wl_parsing_NAG_is_ignored(wrapper_environment):
check_args(
fc,
["-Wl,-Wl,,x,,y,,z"],
[real_cc] + target_args + ["-Wl,--disable-new-dtags", "-Wl,-Wl,,x,,y,,z"],
)
def test_Xlinker_parsing(wrapper_environment):
# -Xlinker <x> ... -Xlinker <y> may have compiler flags inbetween, like -O3 in this
# example. Also check that a trailing -Xlinker (which is a compiler error) is not