@ -1275,6 +1275,33 @@ protected:
this - > DirPermissions | = mode_world_read ;
this - > DirPermissions | = mode_world_execute ;
}
bool GetDefaultDirectoryPermissions ( mode_t * * mode )
{
// check if default dir creation permissions were set
const char * default_dir_install_permissions =
this - > Makefile - > GetDefinition (
" CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS " ) ;
if ( default_dir_install_permissions & & * default_dir_install_permissions ) {
std : : vector < std : : string > items ;
cmSystemTools : : ExpandListArgument ( default_dir_install_permissions ,
items ) ;
for ( const auto & arg : items ) {
if ( ! this - > CheckPermissions ( arg , * * mode ) ) {
std : : ostringstream e ;
e < < this - > FileCommand - > GetError ( )
< < " Set with CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS "
" variable. " ;
this - > FileCommand - > SetError ( e . str ( ) ) ;
return false ;
}
}
} else {
* mode = nullptr ;
}
return true ;
}
} ;
bool cmFileCopier : : Parse ( std : : vector < std : : string > const & args )
@ -1668,8 +1695,15 @@ bool cmFileCopier::InstallDirectory(const char* source,
this - > ReportCopy ( destination , TypeDir ,
! cmSystemTools : : FileIsDirectory ( destination ) ) ;
// check if default dir creation permissions were set
mode_t default_dir_mode_v = 0 ;
mode_t * default_dir_mode = & default_dir_mode_v ;
if ( ! this - > GetDefaultDirectoryPermissions ( & default_dir_mode ) ) {
return false ;
}
// Make sure the destination directory exists.
if ( ! cmSystemTools : : MakeDirectory ( destination ) ) {
if ( ! cmSystemTools : : MakeDirectory ( destination , default_dir_mode ) ) {
std : : ostringstream e ;
e < < this - > Name < < " cannot make directory \" " < < destination
< < " \" : " < < cmSystemTools : : GetLastSystemError ( ) ;
@ -2073,23 +2107,9 @@ bool cmFileInstaller::HandleInstallDestination()
// check if default dir creation permissions were set
mode_t default_dir_mode_v = 0 ;
mode_t * default_dir_mode = nullptr ;
const char * default_dir_install_permissions = this - > Makefile - > GetDefinition (
" CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS " ) ;
if ( default_dir_install_permissions & & * default_dir_install_permissions ) {
std : : vector < std : : string > items ;
cmSystemTools : : ExpandListArgument ( default_dir_install_permissions , items ) ;
for ( const auto & arg : items ) {
if ( ! this - > CheckPermissions ( arg , default_dir_mode_v ) ) {
std : : ostringstream e ;
e < < this - > FileCommand - > GetError ( )
< < " Set with CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS variable. " ;
this - > FileCommand - > SetError ( e . str ( ) ) ;
return false ;
}
}
default_dir_mode = & default_dir_mode_v ;
mode_t * default_dir_mode = & default_dir_mode_v ;
if ( ! this - > GetDefaultDirectoryPermissions ( & default_dir_mode ) ) {
return false ;
}
if ( this - > InstallType ! = cmInstallType_DIRECTORY ) {