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:
parent
3ecb84d398
commit
bbc779f3f0
19
lib/spack/env/cc
vendored
19
lib/spack/env/cc
vendored
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user