This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via f639bae9e50a9317798a2a583b08dddc24f85f4e (commit) via 743fcf1e89a5e5172d46a3202b123bc441ec42ba (commit) from a03222b0b528e2598e835d69824a5160c70ee476 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f639bae9e50a9317798a2a583b08dddc24f85f4e commit f639bae9e50a9317798a2a583b08dddc24f85f4e Merge: a03222b 743fcf1 Author: Chuck Atkins <chuck.atk...@kitware.com> AuthorDate: Wed Nov 18 13:36:15 2015 -0500 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Wed Nov 18 13:36:15 2015 -0500 Merge topic 'add-cray-linux-platform' into next 743fcf1e Cray: Fix static / dynamic detection logic and parse more driver flags https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=743fcf1e89a5e5172d46a3202b123bc441ec42ba commit 743fcf1e89a5e5172d46a3202b123bc441ec42ba Author: Chuck Atkins <chuck.atk...@kitware.com> AuthorDate: Wed Nov 18 10:24:56 2015 -0600 Commit: Chuck Atkins <chuck.atk...@kitware.com> CommitDate: Wed Nov 18 13:36:00 2015 -0500 Cray: Fix static / dynamic detection logic and parse more driver flags diff --git a/Modules/Platform/CrayPrgEnv.cmake b/Modules/Platform/CrayPrgEnv.cmake index a78846d..d60266b 100644 --- a/Modules/Platform/CrayPrgEnv.cmake +++ b/Modules/Platform/CrayPrgEnv.cmake @@ -26,73 +26,53 @@ foreach(__lang C CXX Fortran) endforeach() # If the link type is not explicitly specified in the environment then -# the Cray wrappers assume that the code will be built staticly -if(NOT ((CMAKE_C_FLAGS MATCHES "(^| )-dynamic($| )") OR - (CMAKE_EXE_LINKER_FLAGS MATCHES "(^| )-dynamic($| )") OR - ("$ENV{CRAYPE_LINK_TYPE}" STREQUAL "dynamic"))) +# the Cray wrappers assume that the code will be built staticly so +# we check the following condition(s) are NOT met +# Compiler flags are explicitly dynamic +# Env var is dynamic and compiler flags are not explicitly static +if(NOT (((CMAKE_C_FLAGS MATCHES "(^| )-dynamic($| )") OR + (CMAKE_CXX_FLAGS MATCHES "(^| )-dynamic($| )") OR + (CMAKE_Fortran_FLAGS MATCHES "(^| )-dynamic($| )") OR + (CMAKE_EXE_LINKER_FLAGS MATCHES "(^| )-dynamic($| )")) + OR + (("$ENV{CRAYPE_LINK_TYPE}" STREQUAL "dynamic") AND + NOT ((CMAKE_C_FLAGS MATCHES "(^| )-static($| )") OR + (CMAKE_CXX_FLAGS MATCHES "(^| )-static($| )") OR + (CMAKE_Fortran_FLAGS MATCHES "(^| )-static($| )") OR + (CMAKE_EXE_LINKER_FLAGS MATCHES "(^| )-static($| )"))))) set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) set(BUILD_SHARED_LIBS FALSE CACHE BOOL "") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") set(CMAKE_LINK_SEARCH_START_STATIC TRUE) endif() -# Parse the implicit directories used by the wrappers -get_property(__langs GLOBAL PROPERTY ENABLED_LANGUAGES) -foreach(__lang IN LISTS __langs) - if(__lang STREQUAL "C") - set(__empty_fname empty.c) - elseif(__lang STREQUAL CXX) - set(__empty_fname empty.cxx) - elseif(__lang STREQUAL Fortran) - set(__empty_fname empty.f90) - else() - continue() - endif() - - execute_process( - COMMAND ${CMAKE_${__lang}_COMPILER} ${__verbose_flag} ${__empty_fname} - OUTPUT_VARIABLE __cray_output - ERROR_QUIET - ) - string(REGEX MATCH "(^|\n)[^\n]*${__empty_fname}[^\n]*" __cray_driver_cmd "${__cray_output}") - - # Parse include paths - string(REGEX MATCHALL " -I([^ ]+)" __cray_include_flags "${__cray_driver_cmd}") - foreach(_flag IN LISTS __cray_include_flags) - string(REGEX REPLACE "^ -I([^ ]+)" "\\1" _dir "${_flag}") - list(APPEND CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES ${_dir}) +function(__cray_parse_flags_with_sep OUTPUT FLAG_TAG SEP INPUT) + string(REGEX MATCHALL "${SEP}${FLAG_TAG}([^${SEP}]+)" FLAG_ARGS "${INPUT}") + foreach(FLAG_ARG IN LISTS FLAG_ARGS) + string(REGEX REPLACE + "^${SEP}${FLAG_TAG}([^${SEP}]+)" "\\1" FLAG_VALUE + "${FLAG_ARG}") + list(APPEND ${OUTPUT} ${FLAG_VALUE}) endforeach() - if(CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES) - list(REMOVE_DUPLICATES CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES) - endif() - - # Parse library paths - string(REGEX MATCHALL " -L([^ ]+)" __cray_library_dir_flags "${__cray_driver_cmd}") - foreach(_flag IN LISTS __cray_library_dir_flags) - string(REGEX REPLACE "^ -L([^ ]+)" "\\1" _dir "${_flag}") - list(APPEND CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES ${_dir}) - endforeach() - if(CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) - list(REMOVE_DUPLICATES CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) - endif() + set(${OUTPUT} ${${OUTPUT}} PARENT_SCOPE) +endfunction() +macro(__cray_parse_flags OUTPUT FLAG_TAG INPUT) + __cray_parse_flags_with_sep(${OUTPUT} ${FLAG_TAG} " " "${INPUT}") +endmacro() - # Parse library paths - string(REGEX MATCHALL " -l([^ ]+)" __cray_library_flags "${__cray_driver_cmd}") - foreach(_flag IN LISTS __cray_library_flags) - string(REGEX REPLACE "^ -l([^ ]+)" "\\1" _dir "${_flag}") - list(APPEND CMAKE_${__lang}_IMPLICIT_LINK_LIBRARIES ${_dir}) - endforeach() - if(CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) - list(REMOVE_DUPLICATES CMAKE_${__lang}_IMPLICIT_LINK_LIBRARIES) +# Remove duplicates in a list +macro(__cray_list_remove_duplicates VAR) + if(${VAR}) + list(REMOVE_DUPLICATES ${VAR}) endif() -endforeach() +endmacro() # Compute the intersection of several lists -macro(__list_intersection L_OUT L0) +function(__cray_list_intersect OUTPUT INPUT0) if(ARGC EQUAL 2) - list(APPEND ${L_OUT} ${${L0}}) + list(APPEND ${OUTPUT} ${${INPUT0}}) else() - foreach(I IN LISTS ${L0}) + foreach(I IN LISTS ${INPUT0}) set(__is_common 1) foreach(L IN LISTS ARGN) list(FIND ${L} "${I}" __idx) @@ -102,26 +82,68 @@ macro(__list_intersection L_OUT L0) endif() endforeach() if(__is_common) - list(APPEND ${L_OUT} "${I}") + list(APPEND ${OUTPUT} "${I}") endif() endforeach() endif() - if(${L_OUT}) - list(REMOVE_DUPLICATES ${L_OUT}) + set(${OUTPUT} ${${OUTPUT}} PARENT_SCOPE) +endfunction() + +# Parse the implicit directories used by the wrappers +get_property(__langs GLOBAL PROPERTY ENABLED_LANGUAGES) +foreach(__lang IN LISTS __langs) + if(__lang STREQUAL "C") + set(__empty empty.c) + elseif(__lang STREQUAL CXX) + set(__empty empty.cxx) + elseif(__lang STREQUAL Fortran) + set(__empty empty.f90) + else() + continue() endif() -endmacro() + + execute_process( + COMMAND ${CMAKE_${__lang}_COMPILER} ${__verbose_flag} ${__empty} + OUTPUT_VARIABLE __cmd_out + ERROR_QUIET + ) + string(REGEX MATCH "(^|\n)[^\n]*${__empty}[^\n]*" __driver "${__cmd_out}") + + # Parse include paths + set(__cray_flag_args) + __cray_parse_flags(__cray_flag_args "-I" "${__driver}") + __cray_parse_flags(__cray_flag_args "-isystem " "${__driver}") + list(APPEND CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES ${__cray_flag_args}) + __cray_list_remove_duplicates(CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES) + + # Parse library paths + set(__cray_flag_args) + __cray_parse_flags(__cray_flag_args "-L" "${__driver}") + list(APPEND CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES ${__cray_flag_args}) + __cray_list_remove_duplicates(CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) + + # Parse libraries + set(__cray_flag_args) + __cray_parse_flags(__cray_flag_args "-l" "${__driver}") + __cray_parse_flags(__cray_linker_flags "-Wl" "${__driver}") + foreach(F IN LISTS __cray_linker_flags) + __cray_parse_flags_with_sep(__cray_flag_args "-l" "," "${F}") + endforeach() + list(APPEND CMAKE_${__lang}_IMPLICIT_LINK_LIBRARIES ${__cray_flag_args}) + __cray_list_remove_duplicates(CMAKE_${__lang}_IMPLICIT_LINK_LIBRARIES) +endforeach() # Determine the common directories between all languages and add them # as system search paths -set(__cray_include_path_vars) -set(__cray_library_path_vars) +set(__cray_inc_path_vars) +set(__cray_lib_path_vars) foreach(__lang IN LISTS __langs) - list(APPEND __cray_include_path_vars CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES) - list(APPEND __cray_library_path_vars CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) + list(APPEND __cray_inc_path_vars CMAKE_${__lang}_IMPLICIT_INCLUDE_DIRECTORIES) + list(APPEND __cray_lib_path_vars CMAKE_${__lang}_IMPLICIT_LINK_DIRECTORIES) endforeach() -if(__cray_include_path_vars) - __list_intersection(CMAKE_SYSTEM_INCLUDE_PATH ${__cray_include_path_vars}) +if(__cray_inc_path_vars) + __cray_list_intersect(CMAKE_SYSTEM_INCLUDE_PATH ${__cray_inc_path_vars}) endif() -if(__cray_library_path_vars) - __list_intersection(CMAKE_SYSTEM_LIBRARY_PATH ${__cray_library_path_vars}) +if(__cray_lib_path_vars) + __cray_list_intersect(CMAKE_SYSTEM_LIBRARY_PATH ${__cray_lib_path_vars}) endif() ----------------------------------------------------------------------- Summary of changes: hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/mailman/listinfo/cmake-commits