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:
		
							
								
								
									
										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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels