https://github.com/Kitware/CMake
Revision d9a6e0ffc82fbc460289c6b0808eff27ac316235 authored by Craig Scott on 10 September 2022, 08:22:18 UTC, committed by Craig Scott on 10 September 2022, 08:23:21 UTC
The unset() command was using __cmake_contentNameLower before that
variable was restored from the __cmake_fcCurrentVarsStack. That means
if there had been a nested call to FetchContent_MakeAvailable(), the wrong
variable name would have been cleared (the nested name instead of the
one from the current call). That would have left the variable set upon return,
blocking the dependency provider from seeing any further calls to
FetchContent_MakeAvailable() in the current variable scope or below for the
current dependency.
1 parent a2f9e67
Raw File
Tip revision: d9a6e0ffc82fbc460289c6b0808eff27ac316235 authored by Craig Scott on 10 September 2022, 08:22:18 UTC
FetchContent: Fix unsetting wrong variable name after provider returns
Tip revision: d9a6e0f
CTestUpdateSVN.cmake.in
# This script drives creation of a Subversion repository and checks
# that CTest can update from it.

#-----------------------------------------------------------------------------
# Test in a directory next to this script.
get_filename_component(TOP "${CMAKE_CURRENT_LIST_FILE}" PATH)
string(APPEND TOP "/@CTestUpdateSVN_DIR@")
set(UPDATE_GLOBAL_ELEMENTS SVNPath)

# Include code common to all update tests.
include("@CMAKE_CURRENT_SOURCE_DIR@/CTestUpdateCommon.cmake")

#-----------------------------------------------------------------------------
# Report subversion tools in use.
message("Using subversion tools:")
set(SVN "@Subversion_SVN_EXECUTABLE@")
set(SVNADMIN "@Subversion_SVNADMIN_EXECUTABLE@")
message(" svn      = ${SVN}")
message(" svnadmin = ${SVNADMIN}")

# Isolate svn test operations from the user configuration.
file(MAKE_DIRECTORY ${TOP}/config)
set(SVNCMD ${SVN} --config-dir ${TOP}/config)
set(SVNUSER --username "test author" --non-interactive)

# Configure for this svn version.
execute_process(
  COMMAND ${SVN} help add OUTPUT_VARIABLE help_add ERROR_VARIABLE help_add
  )
if("${help_add}" MATCHES "--depth")
  set(depth_empty "--depth=empty")
else()
  set(depth_empty "")
endif()

#-----------------------------------------------------------------------------
# Initialize the testing directory.
message("Creating test directory...")
init_testing()

#-----------------------------------------------------------------------------
# Create the repository.
message("Creating repository...")
run_child(
  COMMAND ${SVNADMIN} create --config-dir ${TOP}/config ${TOP}/repo
  )
set(REPO file:///${TOP}/repo/trunk)

#-----------------------------------------------------------------------------
# Import initial content into the repository.
message("Importing content...")
create_content(import)

# Import the content into the repository.
run_child(
  WORKING_DIRECTORY ${TOP}/import
  COMMAND ${SVNCMD} import ${SVNUSER} -m "Initial content" . "${REPO}"
  )

#-----------------------------------------------------------------------------
# Create a working tree.
message("Checking out revision 1...")
run_child(
  WORKING_DIRECTORY ${TOP}
  COMMAND ${SVNCMD} co ${SVNUSER} ${REPO} user-source
  )

#-----------------------------------------------------------------------------
# Make changes in the working tree.
message("Changing content...")
update_content(user-source files_added files_removed dirs_added)
if(dirs_added)
  run_child(
    WORKING_DIRECTORY ${TOP}/user-source
    COMMAND ${SVNCMD} add ${depth_empty} ${dirs_added}
    )
endif()
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${SVNCMD} add ${files_added}
  )
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${SVNCMD} rm ${files_removed}
  )

#-----------------------------------------------------------------------------
# Commit the changes to the repository.
message("Committing revision 2...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${SVNCMD} commit -m "Changed content"
  )

#-----------------------------------------------------------------------------
# Make changes in the working tree.
message("Changing content again...")
change_content(user-source)

#-----------------------------------------------------------------------------
# Commit the changes to the repository.
message("Committing revision 3...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${SVNCMD} commit -m "Changed content again"
  )

#-----------------------------------------------------------------------------
# Go back to before the changes so we can test updating.
message("Backing up to revision 1...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${SVNCMD} up -r1
  )

# Create a modified file.
message("Modifying locally...")
modify_content(user-source)

#-----------------------------------------------------------------------------
# Test updating the user work directory with the command-line interface.
message("Running CTest Dashboard Command Line...")

# Create the user build tree.
create_build_tree(user-source user-binary)
file(APPEND ${TOP}/user-binary/CTestConfiguration.ini
  "# SVN command configuration
SVNCommand: ${SVN}
SVNUpdateOptions: --config-dir \"${TOP}/config\"
")

# Run the dashboard command line interface.
run_dashboard_command_line(user-binary)

#-----------------------------------------------------------------------------
# Test initial checkout and update with a dashboard script.
message("Running CTest Dashboard Script...")

create_dashboard_script(dash-binary
  "# Subversion command configuration
set(CTEST_SVN_COMMAND \"${SVN}\")
set(CTEST_SVN_UPDATE_OPTIONS
  \"--config-dir \\\"\${CTEST_DASHBOARD_ROOT}/config\\\"\")
set(CTEST_CHECKOUT_COMMAND
  \"\\\"\${CTEST_SVN_COMMAND}\\\" co -r1 \\\"${REPO}\\\" dash-source\")
")

# Run the dashboard script with CTest.
run_dashboard_script(dash-binary)

#-----------------------------------------------------------------------------
# Test ctest_update(RETURN_VALUE) on failure
message("Running CTest Dashboard Script (fail to update)...")

set(ctest_update_check [[
if(NOT ret LESS 0)
  message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
endif()
]])
create_dashboard_script(dash-binary-fail
  "set(CTEST_SVN_COMMAND \"update-command-does-not-exist\")
")
unset(ctest_update_check)

# Run the dashboard script with CTest.
set(FAIL_UPDATE 1)
run_dashboard_script(dash-binary-fail)
unset(FAIL_UPDATE)
back to top