Browse Source

CrayPrgEnv: Don't use absolute paths for imlicit libraries

When parsing implicit include dirs, link dirs, and link libs, all
arguments are resolved to absolute paths instead of relative paths.
This is correct for link and include directories but link libraries
should only include the library name, not it's path.
Chuck Atkins 10 years ago
parent
commit
928d2085d8
1 changed files with 11 additions and 6 deletions
  1. 11 6
      Modules/Compiler/CrayPrgEnv.cmake

+ 11 - 6
Modules/Compiler/CrayPrgEnv.cmake

@@ -4,12 +4,14 @@ if(__craylinux_crayprgenv)
 endif()
 set(__craylinux_crayprgenv 1)
 
-macro(__cray_extract_args cmd tag_regex out_var)
+macro(__cray_extract_args cmd tag_regex out_var make_absolute)
   string(REGEX MATCHALL "${tag_regex}" args "${cmd}")
   foreach(arg IN LISTS args)
     string(REGEX REPLACE "^${tag_regex}$" "\\2" param "${arg}")
-    get_filename_component(param_abs "${param}" ABSOLUTE)
-    list(APPEND ${out_var} ${param_abs})
+    if(make_absolute)
+      get_filename_component(param "${param}" ABSOLUTE)
+    endif()
+    list(APPEND ${out_var} ${param})
   endforeach()
 endmacro()
 
@@ -21,15 +23,18 @@ function(__cray_extract_implicit src compiler_cmd link_cmd lang include_dirs_var
     OUTPUT_VARIABLE output
     ERROR_VARIABLE error
     )
+  set(include_dirs)
+  set(link_dirs)
+  set(link_libs)
   string(REGEX REPLACE "\r?\n" ";" output_lines "${output}\n${error}")
   foreach(line IN LISTS output_lines)
     if("${line}" MATCHES "${compiler_cmd}")
-      __cray_extract_args("${line}" " -(I ?|isystem )([^ ]*)" include_dirs)
+      __cray_extract_args("${line}" " -(I ?|isystem )([^ ]*)" include_dirs 1)
       set(processed_include 1)
     endif()
     if("${line}" MATCHES "${link_cmd}")
-      __cray_extract_args("${line}" " -(L ?)([^ ]*)" link_dirs)
-      __cray_extract_args("${line}" " -(l ?)([^ ]*)" link_libs)
+      __cray_extract_args("${line}" " -(L ?)([^ ]*)" link_dirs 1)
+      __cray_extract_args("${line}" " -(l ?)([^ ]*)" link_libs 0)
       set(processed_link 1)
     endif()
     if(processed_include AND processed_link)