-
Notifications
You must be signed in to change notification settings - Fork 383
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'jgfouca/cime/fix_findpetsc' into master (PR #3326)
Add missing files from jeds repo [BFB] * jgfouca/cime/fix_findpetsc: Add missing files from jeds repo
- Loading branch information
Showing
3 changed files
with
224 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# CorrectWindowsPaths - this module defines one macro | ||
# | ||
# CONVERT_CYGWIN_PATH( PATH ) | ||
# This uses the command cygpath (provided by cygwin) to convert | ||
# unix-style paths into paths useable by cmake on windows | ||
|
||
macro (CONVERT_CYGWIN_PATH _path) | ||
if (WIN32) | ||
EXECUTE_PROCESS(COMMAND cygpath.exe -m ${${_path}} | ||
OUTPUT_VARIABLE ${_path}) | ||
string (STRIP ${${_path}} ${_path}) | ||
endif (WIN32) | ||
endmacro (CONVERT_CYGWIN_PATH) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
# PackageMultipass - this module defines two macros | ||
# | ||
# FIND_PACKAGE_MULTIPASS (Name CURRENT | ||
# STATES VAR0 VAR1 ... | ||
# DEPENDENTS DEP0 DEP1 ...) | ||
# | ||
# This function creates a cache entry <UPPERCASED-Name>_CURRENT which | ||
# the user can set to "NO" to trigger a reconfiguration of the package. | ||
# The first time this function is called, the values of | ||
# <UPPERCASED-Name>_VAR0, ... are saved. If <UPPERCASED-Name>_CURRENT | ||
# is false or if any STATE has changed since the last time | ||
# FIND_PACKAGE_MULTIPASS() was called, then CURRENT will be set to "NO", | ||
# otherwise CURRENT will be "YES". IF not CURRENT, then | ||
# <UPPERCASED-Name>_DEP0, ... will be FORCED to NOTFOUND. | ||
# Example: | ||
# find_path (FOO_DIR include/foo.h) | ||
# FIND_PACKAGE_MULTIPASS (Foo foo_current | ||
# STATES DIR | ||
# DEPENDENTS INCLUDES LIBRARIES) | ||
# if (NOT foo_current) | ||
# # Make temporary files, run programs, etc, to determine FOO_INCLUDES and FOO_LIBRARIES | ||
# endif (NOT foo_current) | ||
# | ||
# MULTIPASS_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS LANGUAGE) | ||
# Always runs the given test, use this when you need to re-run tests | ||
# because parent variables have made old cache entries stale. The LANGUAGE | ||
# variable is either C or CXX indicating which compiler the test should | ||
# use. | ||
# MULTIPASS_C_SOURCE_RUNS (Name INCLUDES LIBRARIES SOURCE RUNS) | ||
# DEPRECATED! This is only included for backwards compatability. Use | ||
# the more general MULTIPASS_SOURCE_RUNS instead. | ||
# Always runs the given test, use this when you need to re-run tests | ||
# because parent variables have made old cache entries stale. | ||
|
||
macro (FIND_PACKAGE_MULTIPASS _name _current) | ||
string (TOUPPER ${_name} _NAME) | ||
set (_args ${ARGV}) | ||
list (REMOVE_AT _args 0 1) | ||
|
||
set (_states_current "YES") | ||
list (GET _args 0 _cmd) | ||
if (_cmd STREQUAL "STATES") | ||
list (REMOVE_AT _args 0) | ||
list (GET _args 0 _state) | ||
while (_state AND NOT _state STREQUAL "DEPENDENTS") | ||
# The name of the stored value for the given state | ||
set (_stored_var PACKAGE_MULTIPASS_${_NAME}_${_state}) | ||
if (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") | ||
set (_states_current "NO") | ||
endif (NOT "${${_stored_var}}" STREQUAL "${${_NAME}_${_state}}") | ||
set (${_stored_var} "${${_NAME}_${_state}}" CACHE INTERNAL "Stored state for ${_name}." FORCE) | ||
list (REMOVE_AT _args 0) | ||
list (GET _args 0 _state) | ||
endwhile (_state AND NOT _state STREQUAL "DEPENDENTS") | ||
endif (_cmd STREQUAL "STATES") | ||
|
||
set (_stored ${_NAME}_CURRENT) | ||
if (NOT ${_stored}) | ||
set (${_stored} "YES" CACHE BOOL "Is the configuration for ${_name} current? Set to \"NO\" to reconfigure." FORCE) | ||
set (_states_current "NO") | ||
endif (NOT ${_stored}) | ||
|
||
set (${_current} ${_states_current}) | ||
if (NOT ${_current} AND PACKAGE_MULTIPASS_${_name}_CALLED) | ||
message (STATUS "Clearing ${_name} dependent variables") | ||
# Clear all the dependent variables so that the module can reset them | ||
list (GET _args 0 _cmd) | ||
if (_cmd STREQUAL "DEPENDENTS") | ||
list (REMOVE_AT _args 0) | ||
foreach (dep ${_args}) | ||
set (${_NAME}_${dep} "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) | ||
endforeach (dep) | ||
endif (_cmd STREQUAL "DEPENDENTS") | ||
set (${_NAME}_FOUND "NOTFOUND" CACHE INTERNAL "Cleared" FORCE) | ||
endif () | ||
set (PACKAGE_MULTIPASS_${name}_CALLED YES CACHE INTERNAL "Private" FORCE) | ||
endmacro (FIND_PACKAGE_MULTIPASS) | ||
|
||
|
||
macro (MULTIPASS_SOURCE_RUNS includes libraries source runs language) | ||
include (Check${language}SourceRuns) | ||
# This is a ridiculous hack. CHECK_${language}_SOURCE_* thinks that if the | ||
# *name* of the return variable doesn't change, then the test does | ||
# not need to be re-run. We keep an internal count which we | ||
# increment to guarantee that every test name is unique. If we've | ||
# gotten here, then the configuration has changed enough that the | ||
# test *needs* to be rerun. | ||
if (NOT MULTIPASS_TEST_COUNT) | ||
set (MULTIPASS_TEST_COUNT 00) | ||
endif (NOT MULTIPASS_TEST_COUNT) | ||
math (EXPR _tmp "${MULTIPASS_TEST_COUNT} + 1") # Why can't I add to a cache variable? | ||
set (MULTIPASS_TEST_COUNT ${_tmp} CACHE INTERNAL "Unique test ID") | ||
set (testname MULTIPASS_TEST_${MULTIPASS_TEST_COUNT}_${runs}) | ||
set (CMAKE_REQUIRED_INCLUDES ${includes}) | ||
set (CMAKE_REQUIRED_LIBRARIES ${libraries}) | ||
if(${language} STREQUAL "C") | ||
check_c_source_runs ("${source}" ${testname}) | ||
elseif(${language} STREQUAL "CXX") | ||
check_cxx_source_runs ("${source}" ${testname}) | ||
endif() | ||
set (${runs} "${${testname}}") | ||
endmacro (MULTIPASS_SOURCE_RUNS) | ||
|
||
macro (MULTIPASS_C_SOURCE_RUNS includes libraries source runs) | ||
multipass_source_runs("${includes}" "${libraries}" "${source}" ${runs} "C") | ||
endmacro (MULTIPASS_C_SOURCE_RUNS) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
# ResolveCompilerPaths - this module defines two macros | ||
# | ||
# RESOLVE_LIBRARIES (XXX_LIBRARIES LINK_LINE) | ||
# This macro is intended to be used by FindXXX.cmake modules. | ||
# It parses a compiler link line and resolves all libraries | ||
# (-lfoo) using the library path contexts (-L/path) in scope. | ||
# The result in XXX_LIBRARIES is the list of fully resolved libs. | ||
# Example: | ||
# | ||
# RESOLVE_LIBRARIES (FOO_LIBRARIES "-L/A -la -L/B -lb -lc -ld") | ||
# | ||
# will be resolved to | ||
# | ||
# FOO_LIBRARIES:STRING="/A/liba.so;/B/libb.so;/A/libc.so;/usr/lib/libd.so" | ||
# | ||
# if the filesystem looks like | ||
# | ||
# /A: liba.so libc.so | ||
# /B: liba.so libb.so | ||
# /usr/lib: liba.so libb.so libc.so libd.so | ||
# | ||
# and /usr/lib is a system directory. | ||
# | ||
# Note: If RESOLVE_LIBRARIES() resolves a link line differently from | ||
# the native linker, there is a bug in this macro (please report it). | ||
# | ||
# RESOLVE_INCLUDES (XXX_INCLUDES INCLUDE_LINE) | ||
# This macro is intended to be used by FindXXX.cmake modules. | ||
# It parses a compile line and resolves all includes | ||
# (-I/path/to/include) to a list of directories. Other flags are ignored. | ||
# Example: | ||
# | ||
# RESOLVE_INCLUDES (FOO_INCLUDES "-I/A -DBAR='\"irrelevant -I/string here\"' -I/B") | ||
# | ||
# will be resolved to | ||
# | ||
# FOO_INCLUDES:STRING="/A;/B" | ||
# | ||
# assuming both directories exist. | ||
# Note: as currently implemented, the -I/string will be picked up mistakenly (cry, cry) | ||
include (CorrectWindowsPaths) | ||
|
||
macro (RESOLVE_LIBRARIES LIBS LINK_LINE) | ||
string (REGEX MATCHALL "((-L|-l|-Wl)([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))" _all_tokens "${LINK_LINE}") | ||
set (_libs_found "") | ||
set (_directory_list "") | ||
foreach (token ${_all_tokens}) | ||
if (token MATCHES "-L([^\" ]+|\"[^\"]+\")") | ||
# If it's a library path, add it to the list | ||
string (REGEX REPLACE "^-L" "" token ${token}) | ||
string (REGEX REPLACE "//" "/" token ${token}) | ||
convert_cygwin_path(token) | ||
list (APPEND _directory_list ${token}) | ||
elseif (token MATCHES "^(-l([^\" ]+|\"[^\"]+\")|[^\" ]+\\.(a|so|dll|lib))") | ||
# It's a library, resolve the path by looking in the list and then (by default) in system directories | ||
if (WIN32) #windows expects "libfoo", linux expects "foo" | ||
string (REGEX REPLACE "^-l" "lib" token ${token}) | ||
else (WIN32) | ||
string (REGEX REPLACE "^-l" "" token ${token}) | ||
endif (WIN32) | ||
set (_root "") | ||
if (token MATCHES "^/")# We have an absolute path | ||
#separate into a path and a library name: | ||
string (REGEX MATCH "[^/]*\\.(a|so|dll|lib)$" libname ${token}) | ||
string (REGEX MATCH ".*[^${libname}$]" libpath ${token}) | ||
convert_cygwin_path(libpath) | ||
set (_directory_list ${_directory_list} ${libpath}) | ||
set (token ${libname}) | ||
endif (token MATCHES "^/") | ||
set (_lib "NOTFOUND" CACHE FILEPATH "Cleared" FORCE) | ||
find_library (_lib ${token} HINTS ${_directory_list} ${_root}) | ||
if (_lib) | ||
string (REPLACE "//" "/" _lib ${_lib}) | ||
list (APPEND _libs_found ${_lib}) | ||
else (_lib) | ||
message (STATUS "Unable to find library ${token}") | ||
endif (_lib) | ||
endif (token MATCHES "-L([^\" ]+|\"[^\"]+\")") | ||
endforeach (token) | ||
set (_lib "NOTFOUND" CACHE INTERNAL "Scratch variable" FORCE) | ||
# only the LAST occurence of each library is required since there should be no circular dependencies | ||
if (_libs_found) | ||
list (REVERSE _libs_found) | ||
list (REMOVE_DUPLICATES _libs_found) | ||
list (REVERSE _libs_found) | ||
endif (_libs_found) | ||
set (${LIBS} "${_libs_found}") | ||
endmacro (RESOLVE_LIBRARIES) | ||
|
||
macro (RESOLVE_INCLUDES INCS COMPILE_LINE) | ||
string (REGEX MATCHALL "-I([^\" ]+|\"[^\"]+\")" _all_tokens "${COMPILE_LINE}") | ||
set (_incs_found "") | ||
foreach (token ${_all_tokens}) | ||
string (REGEX REPLACE "^-I" "" token ${token}) | ||
string (REGEX REPLACE "//" "/" token ${token}) | ||
convert_cygwin_path(token) | ||
if (EXISTS ${token}) | ||
list (APPEND _incs_found ${token}) | ||
else (EXISTS ${token}) | ||
message (STATUS "Include directory ${token} does not exist") | ||
endif (EXISTS ${token}) | ||
endforeach (token) | ||
list (REMOVE_DUPLICATES _incs_found) | ||
set (${INCS} "${_incs_found}") | ||
endmacro (RESOLVE_INCLUDES) |