Forráskód Böngészése

refactor: 调整文件寻址策略

SongZihuan 3 éve
szülő
commit
fc5a29196b
5 módosított fájl, 36 hozzáadás és 45 törlés
  1. 1 18
      CMakeLists.txt
  2. 0 12
      cmake/InstallDir.cmake
  3. 0 5
      include/base.h.in
  4. 2 1
      include/tool/file.h
  5. 33 9
      src/tool/file.cpp

+ 1 - 18
CMakeLists.txt

@@ -63,10 +63,6 @@ else()
     wi_set_install_dir_quiet(NAMES aFunlang)  # 设置安装路径
 endif()
 
-to_native_path(${INSTALL_LOGDIR} INSTALL_LOGDIR_NATIVE)
-to_native_path(${INSTALL_LOCALSTATEDIR} INSTALL_LOCALSTATEDIR_NATIVE)
-to_native_path(${INSTALL_LANGDIR} INSTALL_LANGDIR_NATIVE)
-
 include(filename)
 
 # CMake对象属性的初始化值的相关设定
@@ -78,7 +74,6 @@ set(CMAKE_MACOSX_RPATH TRUE)
 include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR})  # 添加默认的include路径
 
 set(definitions
-
     aFunVersion="${PROJECT_VERSION}"
     aFunDescription="${PROJECT_DESCRIPTION}"
 
@@ -93,11 +88,7 @@ set(definitions
     aFunShareSuffix="${CMAKE_SHARED_LIBRARY_SUFFIX}"
     aFunStaticPrefix="${CMAKE_STATIC_LIBRARY_PREFIX}"
     aFunStaticSuffix="${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    aFunExeSuffix="${CMAKE_EXECUTABLE_SUFFIX}"
-
-    aFunLogDir="${INSTALL_LOGDIR_NATIVE}"
-    aFunVarLibDir="${INSTALL_LOCALSTATEDIR_NATIVE}"
-    aFunLangDir="${INSTALL_LANGDIR_NATIVE}")  # 默认的预定义宏
+    aFunExeSuffix="${CMAKE_EXECUTABLE_SUFFIX}")  # 默认的预定义宏
 
 if (WIN32 OR CYGWIN)
     list(APPEND definitions aFunWIN32=1)
@@ -191,14 +182,6 @@ include(aFunHeader)
 #        ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfigVersion.cmake
 #        DESTINATION ${INSTALL_CMAKEDIR})
 #
-function(install_directory dir)
-    file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${dir})  # 安装log输出的目录
-    install(CODE "file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${dir})")  # 创建log目录
-endfunction()
-
-install_directory(${INSTALL_LOGDIR})
-install_directory(${INSTALL_LOCALSTATEDIR})
-install_directory(${INSTALL_LANGDIR})
 
 set(BUILD_TEST FALSE CACHE BOOL "Enable run test program")
 set(_build_test ${BUILD_TEST})

+ 0 - 12
cmake/InstallDir.cmake

@@ -37,17 +37,11 @@ function(wi_set_install_dir_quiet)
         set(DEF_INSTALL_CMAKEDIR cmake)
         set(DEF_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR})
         set(DEF_INSTALL_RESOURCEDIR ${CMAKE_INSTALL_DATAROOTDIR})  # 关联文件
-        set(DEF_INSTALL_LOCALSTATEDIR ${CMAKE_INSTALL_LOCALSTATEDIR}/lib)
-        set(DEF_INSTALL_LANGDIR ${DEF_INSTALL_LOCALSTATEDIR}/lang)
-        set(DEF_INSTALL_LOGDIR ${CMAKE_INSTALL_LOCALSTATEDIR}/log)
     else()
         # unix类系统(Unix, Linux, MacOS, Cygwin等)把cmake文件安装到指定的系统的cmake文件夹中
         set(DEF_INSTALL_CMAKEDIR ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${_names})
         set(DEF_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/${_names})
         set(DEF_INSTALL_RESOURCEDIR ${CMAKE_INSTALL_DATAROOTDIR}/${_names})  # 关联文件 CMAKE_INSTALL_DATAROOTDIR指: share
-        set(DEF_INSTALL_LOCALSTATEDIR ${CMAKE_INSTALL_LOCALSTATEDIR}/lib/${_names})
-        set(DEF_INSTALL_LANGDIR ${DEF_INSTALL_LOCALSTATEDIR}/lang)
-        set(DEF_INSTALL_LOGDIR ${CMAKE_INSTALL_LOCALSTATEDIR}/log/${_names})
     endif()
 
     # 设定安装的目录
@@ -56,16 +50,10 @@ function(wi_set_install_dir_quiet)
     set(INSTALL_CMAKEDIR ${DEF_INSTALL_CMAKEDIR} CACHE PATH "Installation directory for CMake files")
     set(INSTALL_INCLUDEDIR ${DEF_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files")
     set(INSTALL_RESOURCEDIR ${DEF_INSTALL_RESOURCEDIR} CACHE PATH "Installation directory for resource files")  # 关联文件
-    set(INSTALL_LOCALSTATEDIR ${DEF_INSTALL_LOCALSTATEDIR} CACHE PATH "Installation directory for lib files")
-    set(INSTALL_LANGDIR ${DEF_INSTALL_LANGDIR} CACHE PATH "Installation directory for lang files")
-    set(INSTALL_LOGDIR ${DEF_INSTALL_LOGDIR} CACHE PATH "Installation directory for log files")
 
     unset(DEF_INSTALL_CMAKEDIR)
     unset(DEF_INSTALL_INCLUDEDIR)
     unset(DEF_INSTALL_RESOURCEDIR)
-    unset(DEF_INSTALL_LOCALSTATEDIR)
-    unset(DEF_INSTALL_LANGDIR)
-    unset(DEF_INSTALL_LOGDIR)
 endfunction()
 
 function(wi_set_install_dir)

+ 0 - 5
include/base.h.in

@@ -24,11 +24,6 @@
 #define aFunStaticSuffix "@CMAKE_STATIC_LIBRARY_SUFFIX@"
 #define aFunExeSuffix "@CMAKE_EXECUTABLE_SUFFIX@"
 
-// 运行路径
-#define aFunLogDir "@INSTALL_LOGDIR_NATIVE@"
-#define aFunVarLibDir "@INSTALL_LOCALSTATEDIR_NATIVE@"
-#define aFunLangDir "@INSTALL_LANGDIR_NATIVE@"
-
 #cmakedefine aFunWIN32
 #cmakedefine aFunWIN32_NO_CYGWIN
 #cmakedefine aFunCYGWIN

+ 2 - 1
include/tool/file.h

@@ -13,7 +13,8 @@ namespace aFuntool {
     AFUN_TOOL_EXPORT std::string getFileSurfix(const std::string &path);
     AFUN_TOOL_EXPORT std::string fileNameToVar(const std::string &name);
     AFUN_TOOL_EXPORT std::string findPath(const std::string &path, const std::string &env);
-    AFUN_TOOL_EXPORT std::string getExedir(int dep);
+    AFUN_TOOL_EXPORT std::string getHomePath();
+    AFUN_TOOL_EXPORT std::string getExePath();
     AFUN_TOOL_EXPORT uintmax_t getFileSize(const std::string &path);
     AFUN_TOOL_EXPORT bool isCharUTF8(const char *str);
     AFUN_TOOL_EXPORT bool isCharUTF8(const std::string &str);

+ 33 - 9
src/tool/file.cpp

@@ -198,23 +198,47 @@ namespace aFuntool {
      * 获取可执行程序目录
      * @param dep 从可执行程序往回跳出的层数
      */
-    std::string getExedir(int dep) {
-        aFun_path exepath[218] = {0};
+    std::string getHomePath() {
+        aFun_path exe_path[218] = {0};
 #ifdef aFunWIN32_NO_CYGWIN
-        DWORD ret = GetModuleFileNameW(nullptr, exepath, 217);  // 预留一位给NUL
-        if (ret == 0 || wcslen(exepath) == 0)
+        DWORD ret = GetModuleFileNameW(nullptr, exe_path, 217);  // 预留一位给NUL
+        if (ret == 0 || wcslen(exe_path) == 0)
             return "";
         char *path = nullptr;
-        if (convertFromWideByte(&path, exepath, CP_UTF8) == 0)
+        if (convertFromWideByte(&path, exe_path, CP_UTF8) == 0)
             return "";
-        std::string re = getFilePath(path, dep + 1);
+        std::string re = getFilePath(path, 2);
         safeFree(path);
         return re;
 #else
-        ssize_t ret =  readlink("/proc/self/exe", exepath, 217);  // 预留一位给NUL
-        if (ret == -1 || strlen(exepath) == 0)
+        ssize_t ret =  readlink("/proc/self/exe", exe_path, 217);  // 预留一位给NUL
+        if (ret == -1 || strlen(exe_path) == 0)
             return "";
-        return getFilePath(exepath, dep + 1);
+        return getFilePath(exe_path, 2);
+#endif
+    }
+
+    /**
+     * 获取可执行程序目录
+     * @param dep 从可执行程序往回跳出的层数
+     */
+    std::string getExePath() {
+        aFun_path exe_path[218] = {0};
+#ifdef aFunWIN32_NO_CYGWIN
+        DWORD ret = GetModuleFileNameW(nullptr, exe_path, 217);  // 预留一位给NUL
+        if (ret == 0 || wcslen(exe_path) == 0)
+            return "";
+        char *path = nullptr;
+        if (convertFromWideByte(&path, exe_path, CP_UTF8) == 0)
+            return "";
+        std::string re = path;
+        safeFree(path);
+        return re;
+#else
+        ssize_t ret =  readlink("/proc/self/exe", exe_path, 217);  // 预留一位给NUL
+        if (ret == -1 || strlen(exe_path) == 0)
+            return "";
+        return exe_path;
 #endif
     }