summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2006-08-29 19:04:29 (GMT)
committerBrad King <brad.king@kitware.com>2006-08-29 19:04:29 (GMT)
commit27a67fb72f22bcff5007b45d96ed810405818833 (patch)
tree5aab2eccb41f5483c7211933023640268825d1fe
parent7001a88a746073a46200dde7c6613789cf4b9cc8 (diff)
downloadCMake-27a67fb72f22bcff5007b45d96ed810405818833.zip
CMake-27a67fb72f22bcff5007b45d96ed810405818833.tar.gz
CMake-27a67fb72f22bcff5007b45d96ed810405818833.tar.bz2
ENH: Add support to INSTALL(DIRECTORY) to install an empty directory. This addresses bug#3572.
-rw-r--r--Source/cmFileCommand.cxx13
-rw-r--r--Source/cmInstallCommand.cxx6
-rw-r--r--Tests/SimpleInstall/CMakeLists.txt12
-rw-r--r--Tests/SimpleInstallS2/CMakeLists.txt12
4 files changed, 41 insertions, 2 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 1b4ad55..d5d1eb2 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -519,6 +519,11 @@ bool cmFileInstaller::InstallDirectory(const char* source,
return true;
}
+ // Inform the user about this directory installation.
+ std::string message = "Installing ";
+ message += destination;
+ this->Makefile->DisplayStatus(message.c_str(), -1);
+
// Make sure the destination directory exists.
if(!cmSystemTools::MakeDirectory(destination))
{
@@ -568,7 +573,10 @@ bool cmFileInstaller::InstallDirectory(const char* source,
// Load the directory contents to traverse it recursively.
cmsys::Directory dir;
- dir.Load(source);
+ if(source && *source)
+ {
+ dir.Load(source);
+ }
unsigned long numFiles = static_cast<unsigned long>(dir.GetNumberOfFiles());
for(unsigned long fileNum = 0; fileNum < numFiles; ++fileNum)
{
@@ -1280,7 +1288,8 @@ bool cmFileCommand::HandleInstallCommand(
if(!cmSystemTools::SameFile(fromFile.c_str(), toFile.c_str()))
{
if(itype == cmTarget::INSTALL_DIRECTORY &&
- cmSystemTools::FileIsDirectory(fromFile.c_str()))
+ (fromFile.empty() ||
+ cmSystemTools::FileIsDirectory(fromFile.c_str())))
{
// Try installing this directory.
if(!installer.InstallDirectory(fromFile.c_str(), toFile.c_str(),
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index a5c0408..9cb37c9 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -1000,6 +1000,12 @@ cmInstallCommand::HandleDirectoryMode(std::vector<std::string> const& args)
}
}
+ // Support installing an empty directory.
+ if(dirs.empty() && destination)
+ {
+ dirs.push_back("");
+ }
+
// Check if there is something to do.
if(dirs.empty())
{
diff --git a/Tests/SimpleInstall/CMakeLists.txt b/Tests/SimpleInstall/CMakeLists.txt
index 4559f08..a99f6d3 100644
--- a/Tests/SimpleInstall/CMakeLists.txt
+++ b/Tests/SimpleInstall/CMakeLists.txt
@@ -107,6 +107,15 @@ IF(STAGE2)
MESSAGE(FATAL_ERROR "Bad sample script output: [${SAMPLE_SCRIPT_OUTPUT}]")
ENDIF(NOT "${SAMPLE_SCRIPT_OUTPUT}" MATCHES "Sample Script Output")
+ # Check for failure of empty directory installation.
+ IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ MESSAGE(FATAL_ERROR "Empty directory installation did not install.")
+ ENDIF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ FILE(GLOB EMPTY_FILES "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty/*")
+ IF(EMPTY_FILES)
+ MESSAGE(FATAL_ERROR "Empty directory installed [${EMPTY_FILES}].")
+ ENDIF(EMPTY_FILES)
+
# Make sure the test executable can run from the install tree.
SET_TARGET_PROPERTIES(SimpleInstallS2 PROPERTIES
INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
@@ -174,6 +183,9 @@ ELSE(STAGE2)
PATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
)
+ # Test empty directory installation.
+ INSTALL(DIRECTORY DESTINATION MyTest/share/empty)
+
# Test user-specified install scripts.
INSTALL(
SCRIPT InstallScript1.cmake
diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt
index 4559f08..a99f6d3 100644
--- a/Tests/SimpleInstallS2/CMakeLists.txt
+++ b/Tests/SimpleInstallS2/CMakeLists.txt
@@ -107,6 +107,15 @@ IF(STAGE2)
MESSAGE(FATAL_ERROR "Bad sample script output: [${SAMPLE_SCRIPT_OUTPUT}]")
ENDIF(NOT "${SAMPLE_SCRIPT_OUTPUT}" MATCHES "Sample Script Output")
+ # Check for failure of empty directory installation.
+ IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ MESSAGE(FATAL_ERROR "Empty directory installation did not install.")
+ ENDIF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ FILE(GLOB EMPTY_FILES "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty/*")
+ IF(EMPTY_FILES)
+ MESSAGE(FATAL_ERROR "Empty directory installed [${EMPTY_FILES}].")
+ ENDIF(EMPTY_FILES)
+
# Make sure the test executable can run from the install tree.
SET_TARGET_PROPERTIES(SimpleInstallS2 PROPERTIES
INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
@@ -174,6 +183,9 @@ ELSE(STAGE2)
PATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
)
+ # Test empty directory installation.
+ INSTALL(DIRECTORY DESTINATION MyTest/share/empty)
+
# Test user-specified install scripts.
INSTALL(
SCRIPT InstallScript1.cmake