123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- # Check the CMake source tree for suspicious policy introdcutions...
- #
- message("=============================================================================")
- message("CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
- message("")
- message("CMake_BINARY_DIR='${CMake_BINARY_DIR}'")
- message("CMake_SOURCE_DIR='${CMake_SOURCE_DIR}'")
- message("GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
- message("")
- # If this does not appear to be a git checkout, just pass the test here
- # and now. (Do not let the test fail if it is run in a tree *exported* from a
- # repository or unpacked from a .zip file source installer...)
- #
- set(is_git_checkout 0)
- if(EXISTS "${CMake_SOURCE_DIR}/.git")
- set(is_git_checkout 1)
- endif()
- message("is_git_checkout='${is_git_checkout}'")
- message("")
- if(NOT is_git_checkout)
- message("source tree is not a git checkout... test passes by early return...")
- return()
- endif()
- # If no GIT_EXECUTABLE, see if we can figure out which git was used
- # for the ctest_update step on this dashboard...
- #
- if(is_git_checkout AND NOT GIT_EXECUTABLE)
- set(ctest_ini_file "")
- set(exe "")
- # Use the old name:
- if(EXISTS "${CMake_BINARY_DIR}/DartConfiguration.tcl")
- set(ctest_ini_file "${CMake_BINARY_DIR}/DartConfiguration.tcl")
- endif()
- # But if it exists, prefer the new name:
- if(EXISTS "${CMake_BINARY_DIR}/CTestConfiguration.ini")
- set(ctest_ini_file "${CMake_BINARY_DIR}/CTestConfiguration.ini")
- endif()
- # If there is a ctest ini file, read the update command or git command
- # from it:
- #
- if(ctest_ini_file)
- file(STRINGS "${ctest_ini_file}" line REGEX "^GITCommand: (.*)$")
- string(REGEX REPLACE "^GITCommand: (.*)$" "\\1" line "${line}")
- if("${line}" MATCHES "^\"")
- string(REGEX REPLACE "^\"([^\"]+)\" *.*$" "\\1" line "${line}")
- else()
- string(REGEX REPLACE "^([^ ]+) *.*$" "\\1" line "${line}")
- endif()
- set(exe "${line}")
- if("${exe}" STREQUAL "GITCOMMAND-NOTFOUND")
- set(exe "")
- endif()
- if(exe)
- message("info: GIT_EXECUTABLE set by 'GITCommand:' from '${ctest_ini_file}'")
- endif()
- if(NOT exe)
- file(STRINGS "${ctest_ini_file}" line REGEX "^UpdateCommand: (.*)$")
- string(REGEX REPLACE "^UpdateCommand: (.*)$" "\\1" line "${line}")
- if("${line}" MATCHES "^\"")
- string(REGEX REPLACE "^\"([^\"]+)\" *.*$" "\\1" line "${line}")
- else()
- string(REGEX REPLACE "^([^ ]+) *.*$" "\\1" line "${line}")
- endif()
- set(exe "${line}")
- if("${exe}" STREQUAL "GITCOMMAND-NOTFOUND")
- set(exe "")
- endif()
- if(exe)
- message("info: GIT_EXECUTABLE set by 'UpdateCommand:' from '${ctest_ini_file}'")
- endif()
- endif()
- else()
- message("info: no DartConfiguration.tcl or CTestConfiguration.ini file...")
- endif()
- # If we have still not grokked the exe, look in the Update.xml file to see
- # if we can parse it from there...
- #
- if(NOT exe)
- file(GLOB_RECURSE update_xml_file "${CMake_BINARY_DIR}/Testing/Update.xml")
- if(update_xml_file)
- file(STRINGS "${update_xml_file}" line
- REGEX "^.*<UpdateCommand>(.*)</UpdateCommand>$" LIMIT_COUNT 1)
- string(REPLACE ""\;" "\"" line "${line}")
- string(REGEX REPLACE "^.*<UpdateCommand>(.*)</UpdateCommand>$" "\\1" line "${line}")
- if("${line}" MATCHES "^\"")
- string(REGEX REPLACE "^\"([^\"]+)\" *.*$" "\\1" line "${line}")
- else()
- string(REGEX REPLACE "^([^ ]+) *.*$" "\\1" line "${line}")
- endif()
- if(line)
- set(exe "${line}")
- endif()
- if(exe)
- message("info: GIT_EXECUTABLE set by '<UpdateCommand>' from '${update_xml_file}'")
- endif()
- else()
- message("info: no Update.xml file...")
- endif()
- endif()
- if(exe)
- set(GIT_EXECUTABLE "${exe}")
- message("GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
- message("")
- if(NOT EXISTS "${GIT_EXECUTABLE}")
- message(FATAL_ERROR "GIT_EXECUTABLE does not exist...")
- endif()
- else()
- message(FATAL_ERROR "could not determine GIT_EXECUTABLE...")
- endif()
- endif()
- if(is_git_checkout AND GIT_EXECUTABLE)
- # Check with "git grep" if there are any unacceptable cmPolicies additions
- #
- message("=============================================================================")
- message("This is a git checkout, using git grep to verify no unacceptable policies")
- message("are being introduced....")
- message("")
- execute_process(COMMAND ${GIT_EXECUTABLE} grep -En "[0-9][0-9][0-9][0-9][0-9].*cmPolicies"
- WORKING_DIRECTORY ${CMake_SOURCE_DIR}
- OUTPUT_VARIABLE grep_output
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- message("=== output of 'git grep -En \"[0-9][0-9][0-9][0-9][0-9].*cmPolicies\"' ===")
- message("${grep_output}")
- message("=== end output ===")
- message("")
- if(NOT "${grep_output}" STREQUAL "")
- message(FATAL_ERROR "git grep output is non-empty...
- New CMake policies must be introduced in a non-date-based version number.
- Send email to the cmake-developers list to figure out what the target
- version number for this policy should be...")
- endif()
- endif()
- # Still here? Good then...
- #
- message("test passes")
- message("")
|