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
CTestUpdateHG.cmake.in
# This script drives creation of a Mercurial 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 "/@CTestUpdateHG_DIR@")

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

#-----------------------------------------------------------------------------
# Report hg tools in use.
message("Using HG tools:")
set(HG "@HG_EXECUTABLE@")
message(" hg = ${HG}")

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

#-----------------------------------------------------------------------------
# Create the repository.
message("Creating repository...")
file(MAKE_DIRECTORY ${TOP}/repo.hg)
run_child(
  WORKING_DIRECTORY ${TOP}/repo.hg
  COMMAND ${HG} init
  )
if(NOT "${TOP}" MATCHES "^/")
  set(slash /)
endif()
set(REPO file://${slash}${TOP}/repo.hg)

#-----------------------------------------------------------------------------
# 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 ${HG} init
  )
run_child(WORKING_DIRECTORY ${TOP}/import
  COMMAND ${HG} add .
  )
run_child(WORKING_DIRECTORY ${TOP}/import
  COMMAND ${HG} commit -m "Initial content"
                       -u "Test Author <testauthor@cmake.org>"
  )
run_child(WORKING_DIRECTORY ${TOP}/import
  COMMAND ${HG} push "${REPO}"
  )

#-----------------------------------------------------------------------------
# Create a working tree.
message("Checking out first revision...")
run_child(
  WORKING_DIRECTORY ${TOP}
  COMMAND ${HG} clone ${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 ${HG} add ${dirs_added}
    )
endif()
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} add ${files_added}
  )
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} rm ${files_removed}
  )
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} add
  )

#-----------------------------------------------------------------------------
# Commit the changes to the repository.
message("Committing revision 2...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} commit -m "Changed content"
                       -u "Test Author <testauthor@cmake.org>"
  )
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} push
  )

#-----------------------------------------------------------------------------
# Make changes in the working tree.
message("Changing content again...")
change_content(user-source)
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} add
  )

#-----------------------------------------------------------------------------
# Commit the changes to the repository.
message("Committing revision 3...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} commit -m "Changed content again"
                       -u "Test Author <testauthor@cmake.org>"
  )
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} push
  )

#-----------------------------------------------------------------------------
# Go back to before the changes so we can test updating.
message("Backing up to first revision...")
run_child(
  WORKING_DIRECTORY ${TOP}/user-source
  COMMAND ${HG} update -C -r 0
  )

# Create a modified file.
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
  "# HG command configuration
UpdateCommand: ${HG}
")

# 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
  "# hg command configuration
set(CTEST_HG_COMMAND \"${HG}\")
set(CTEST_HG_UPDATE_OPTIONS)
execute_process(
  WORKING_DIRECTORY \"${TOP}\"
  COMMAND \"${HG}\" clone \"${REPO}\" dash-source
  )
execute_process(
  WORKING_DIRECTORY \"${TOP}/dash-source\"
  COMMAND \"${HG}\" update -C -r 0
  )
")

# 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_HG_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