From 307437caee0f02e1ee866d6b3d70305a1c61e619 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Sat, 11 Apr 2020 19:10:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B1=D0=BD=D0=B0=D1=80=D1=83=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=B8=D0=B5=D1=80=D0=B0=D1=80?= =?UTF-8?q?=D1=85=D0=B8=D0=B8=20/usr/local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/myx/filesystem/paths.cpp | 25 +++++++++++++++++++++++-- src/myx/filesystem/paths.hpp | 23 +++++++++++++++++------ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/myx/filesystem/paths.cpp b/src/myx/filesystem/paths.cpp index 61cee87..d1fb8b4 100644 --- a/src/myx/filesystem/paths.cpp +++ b/src/myx/filesystem/paths.cpp @@ -48,6 +48,27 @@ Paths::HierarchyType Paths::getHierarchyType() return ( HierarchyType::kOpt ); } + if ( binaryDir.startsWith( QStringLiteral( "/usr/local" ) ) ) + { + QFileInfo etcDirInfo { "/usr/local/etc/" + m_projectName }; + if ( !etcDirInfo.isDir() || !etcDirInfo.isReadable() ) { return( HierarchyType::kFlat ); } + + QFileInfo constDataDirInfo { "/usr/local/share/" + m_projectName }; + if ( !constDataDirInfo.isDir() || !constDataDirInfo.isReadable() ) { return( HierarchyType::kFlat ); } + + QFileInfo varDataDirInfo { "/var/lib/" + m_projectName }; + if ( !varDataDirInfo.isDir() || !varDataDirInfo.isWritable() ) { return( HierarchyType::kFlat ); } + + QFileInfo logDirInfo { "/var/log/" + m_projectName }; + if ( !logDirInfo.isDir() || !logDirInfo.isWritable() ) { return( HierarchyType::kFlat ); } + + m_systemConfigDirectory = etcDirInfo.canonicalFilePath(); + m_systemConstDataDirectory = constDataDirInfo.canonicalFilePath(); + m_systemVarDataDirectory = varDataDirInfo.canonicalFilePath(); + m_systemLogDirectory = logDirInfo.canonicalFilePath(); + + return ( HierarchyType::kUsr ); + } if ( binaryDir.startsWith( QStringLiteral( "/usr" ) ) ) { QFileInfo etcDirInfo { "/etc/" + m_projectName }; @@ -67,7 +88,7 @@ Paths::HierarchyType Paths::getHierarchyType() m_systemVarDataDirectory = varDataDirInfo.canonicalFilePath(); m_systemLogDirectory = logDirInfo.canonicalFilePath(); - return ( HierarchyType::kStandard ); + return ( HierarchyType::kUsr ); } if ( binaryDir.startsWith( m_homeDirectory.canonicalPath() + "/.local/bin" ) || @@ -112,7 +133,7 @@ Paths::HierarchyType Paths::getHierarchyType() m_systemVarDataDirectory = varDataDirInfo.canonicalFilePath(); m_systemLogDirectory = logDirInfo.canonicalFilePath(); - return ( HierarchyType::kUser ); + return ( HierarchyType::kDevelopment ); } // Paths::getHierarchyType diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index ae74e79..72c2e33 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -23,12 +23,23 @@ class Paths { enum class HierarchyType : intptr_t { - kSplit = 0x00, - kFlat = 0x01, - kOpt = 0x02, - kStandard = 0x04, - kUser = 0x08, - kHome = 0x10, + /// @brief Тип расположения файлов не определён + kUndefined = 0x00, + /// @brief Не определено ни одно из типовых размещений файлов + /// @details Если исполняемый файл не находится в каталоге bin или не найдены + /// необходимые сопутствующие каталоги, то предполается, + /// что все файлы находятся в одном каталоге с исполняемым файлом + kFlat = 0x01, + /// @brief Исполняемый файл и сопутствующие каталоги находятся в иерахии /opt + kOpt = 0x02, + /// @brief Исполняемый файл и сопутствующие каталоги находятся в иерахии /usr + kUsr = 0x04, + /// @brief Исполняемый файл и сопутствующие каталоги находятся в иерахии /usr/local + kUsrLocal = 0x08, + /// @brief Исполняемый файл и сопутствующие каталоги находятся в иерахии /home + kHome = 0x10, + /// @brief Исполняемый файл и сопутствующие каталоги находятся в каталоге программного проекта + kDevelopment = 0x20 }; /// @brief Тип расположения файлов по каталогам