Commit 464567a5 authored by Brad King's avatar Brad King
Browse files

file(INSTALL): Report existing DIRECTORY as Up-to-date



Teach cmFileCopier::InstallDirectory to detect whether the destination
directory exists.  If so, report it as "Up-to-date" instead of
"Installing".  This resolves message asymmetry with file installations.

Extend the RunCMake.file and RunCMake.install tests to check the
installation output on both the first and second run.
Suggested-by: Jim B's avatarJ Decker <d3ck0r@gmail.com>
parent f701b0b7
......@@ -1613,7 +1613,8 @@ bool cmFileCopier::InstallDirectory(const char* source,
MatchProperties const& match_properties)
{
// Inform the user about this directory installation.
this->ReportCopy(destination, TypeDir, true);
this->ReportCopy(destination, TypeDir,
!cmSystemTools::FileIsDirectory(destination));
// Make sure the destination directory exists.
if(!cmSystemTools::MakeDirectory(destination))
......
-- Before Installing
-- Installing: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir
-- Installing: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir/empty.txt
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir
-- Up-to-date: .*/Tests/RunCMake/file/INSTALL-DIRECTORY-build/dir/empty.txt
-- After Installing
set(src ${CMAKE_CURRENT_SOURCE_DIR}/dir)
set(dst ${CMAKE_CURRENT_BINARY_DIR}/dir)
file(REMOVE RECURSE ${dst})
message(STATUS "Before Installing")
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY)
file(INSTALL FILES ${src}/ DESTINATION ${dst} TYPE DIRECTORY)
message(STATUS "After Installing")
include(RunCMake)
run_cmake(INSTALL-DIRECTORY)
run_cmake(FileOpenFailRead)
file(REMOVE_RECURSE ${RunCMake_TEST_BINARY_DIR}/prefix)
execute_process(COMMAND ${CMAKE_COMMAND} -P ${RunCMake_TEST_BINARY_DIR}/cmake_install.cmake
OUTPUT_VARIABLE out ERROR_VARIABLE err)
set(expect "
-- Installing: [^\n]*/prefix/dir\r?
-- Installing: [^\n]*/prefix/dir/empty.txt\r?
")
if(NOT out MATCHES "${expect}")
string(REGEX REPLACE "\n" "\n " out " ${out}")
set(RunCMake_TEST_FAILED
"${RunCMake_TEST_FAILED}First install did not say 'Installing' as expected:\n${out}")
endif()
set(f ${RunCMake_TEST_BINARY_DIR}/prefix/dir/empty.txt)
if(NOT EXISTS "${f}")
set(RunCMake_TEST_FAILED
"${RunCMake_TEST_FAILED}File was not installed:\n ${f}\n")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -P ${RunCMake_TEST_BINARY_DIR}/cmake_install.cmake
OUTPUT_VARIABLE out ERROR_VARIABLE err)
set(expect "
-- Up-to-date: [^\n]*/prefix/dir\r?
-- Up-to-date: [^\n]*/prefix/dir/empty.txt\r?
")
if(NOT out MATCHES "${expect}")
string(REGEX REPLACE "\n" "\n " out " ${out}")
set(RunCMake_TEST_FAILED
"${RunCMake_TEST_FAILED}Second install did not say 'Up-to-date' as expected:\n${out}")
endif()
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/prefix")
install(DIRECTORY dir/ DESTINATION dir)
include(RunCMake)
run_cmake(DIRECTORY-message)
run_cmake(SkipInstallRulesWarning)
run_cmake(SkipInstallRulesNoWarning1)
run_cmake(SkipInstallRulesNoWarning2)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment