Browse Source

refactor: 调整deps依赖搜索机制

SongZihuan 3 years ago
parent
commit
78ede556d0

+ 5 - 3
CMakeLists.txt

@@ -116,9 +116,11 @@ configure_file(${CMAKE_SOURCE_DIR}/include/base.h.in
 
 include(deps)  # 安装依赖
 add_subdirectory(deps)
-#include(${CMAKE_CURRENT_LIST_DIR}/lang/hgt.cmake)  # 安装lang库
-add_subdirectory(src)
-include(aFunHeader)
+if (DEPS_FOUND)
+    #include(${CMAKE_CURRENT_LIST_DIR}/lang/hgt.cmake)  # 安装lang库
+    add_subdirectory(src)
+    include(aFunHeader)
+endif()
 
 #install(EXPORT aFunlang
 #        NAMESPACE "aFunlang::"

+ 9 - 7
cmake/FindFFlags.cmake

@@ -1,18 +1,19 @@
 include(FindPackageHandleStandardArgs)
 set(_root ${FFlags_ROOT})
 
-if (NOT _root)
-    find_package_handle_standard_args(FFlags
-                                      FOUND_VAR FFlags_FOUND
-                                      REQUIRED_VARS _root)  # 强制搜不到包
-    unset(_root)
+if (_root)
+    set(_root_include ${_root}/include)
+    set(_root_lib ${_root}/lib)
 endif()
 
 # FFlags_ROOT 必须是 FFlags的安装目录
 
 # FFlags
-find_path(fflags_h NAMES fflags.h HINTS ${_root}/include DOC "FFlags include directory" NO_DEFAULT_PATH)
-find_library(fflags_lib NAMES FFlags libFFlags HINTS ${_root}/lib DOC "FFlags library" NO_DEFAULT_PATH)
+find_path(fflags_h NAMES fflags.h HINTS ${_root_include} DOC "FFlags include directory" NO_DEFAULT_PATH)
+find_library(fflags_lib NAMES FFlags libFFlags HINTS ${_root_lib} DOC "FFlags library" NO_DEFAULT_PATH)
+
+unset(_root_include)
+unset(_root_lib)
 
 set(fflags_INCLUDE_DIRS ${fflags_h})
 set(fflags_LIBRARIES ${fflags_lib})
@@ -30,6 +31,7 @@ endif()
 
 unset(fflags_h CACHE)
 unset(fflags_lib CACHE)
+unset(_root)
 
 find_package_handle_standard_args(FFlags
         FOUND_VAR FFlags_FOUND

+ 40 - 9
cmake/deps.cmake

@@ -3,24 +3,55 @@ include_guard(GLOBAL)
 set(PRINT_DEPS_INFO ON CACHE BOOL "Print deps info.")  # 默认设定为 ON
 set(_print ${PRINT_DEPS_INFO})
 
+set(DEPS_FOUND TRUE)
+
 if (WIN32 AND NOT CYGWIN)  # cygwin 不依赖 dl
-    find_package(dlfcn-win32 REQUIRED)
-    set(dlfcn_lib dlfcn-win32::dl)
-    wi_install_import(TARGETS dlfcn-win32::dl)
+    find_package(dlfcn-win32 QUIET)
+    if (NOT dlfcn-win32_FOUND)
+        set(DEPS_FOUND FALSE)
+        message(WARNING "dlfcn-win32 not found. But you can try install it by the cmake program.")
+    else()
+        set(dlfcn_lib dlfcn-win32::dl)
+        wi_install_import(TARGETS dlfcn-win32::dl)
+    endif()
 else()
     set(DLFCN_ROOT "" CACHE STRING "The directory of dl.")
     set(dlfcn_root ${DLFCN_ROOT})
     if (dlfcn_root)
-        find_library(dlfcn_path dl REQUIRED HINTS ${dlfcn_root})
+        find_library(dlfcn_path dl HINTS ${dlfcn_root})
     else()
-        find_library(dlfcn_path dl REQUIRED)
+        find_library(dlfcn_path dl)
+    endif()
+
+    if (NOT dlfcn_path)
+        set(DEPS_FOUND FALSE)
+        message(SEND_ERROR "dlfcn not found.")
     endif()
 
     unset(dlfcn_root)
     set(dlfcn_lib ${dlfcn_path})
 endif()
 
-find_package(FFlags REQUIRED)
-find_package(PCRE2 REQUIRED COMPONENTS 8BIT)
-find_package(Threads REQUIRED)
-wi_install_import(TARGETS FFlags::fflags Threads::Threads PCRE2::8BIT)
+find_package(FFlags QUIET)
+if (NOT FFlags_FOUND)
+    set(DEPS_FOUND FALSE)
+    message(WARNING "FFlags not found. But you can try install it by the cmake program.")
+else()
+    wi_install_import(TARGETS FFlags::fflags)
+endif()
+
+find_package(PCRE2 COMPONENTS 8BIT QUIET)
+if (NOT PCRE2_FOUND)
+    set(DEPS_FOUND FALSE)
+    message(WARNING "PCRE2 8BIT not found. But you can try install it by the cmake program.")
+else()
+    wi_install_import(TARGETS PCRE2::8BIT)
+endif()
+
+find_package(Threads QUIET)
+if (NOT Threads_FOUND)
+    set(DEPS_FOUND FALSE)
+    message(SEND_ERROR "Threads library not found.")
+else()
+    wi_install_import(TARGETS Threads::Threads)
+endif()

+ 1 - 1
src/main.cpp

@@ -38,7 +38,7 @@ int main(int argc, char **argv_ansi) {
     int main(int argc, char **argv) {
 #endif
     tty_stdin = isatty(fileno(stdin));
-    home_path = aFun::getExedir(1);
+    home_path = aFun::getHomePath();
     if (home_path.empty()) {
         aFun::cerr << "aFunlang init error.";
         exit(EXIT_FAILURE);

+ 1 - 1
src/tool/log.cpp

@@ -59,7 +59,6 @@ namespace aFuntool {
 
     LogFactory::LogFactory(const aFuntool::FilePath &path, bool is_async) noexcept(false)
         : sys_log{*this, "SYSTEM", log_info}{
-        int re = 1;
         std::unique_lock<std::mutex> ul{mutex_};
 
         char log_path[218] = {0};
@@ -94,6 +93,7 @@ namespace aFuntool {
         init_ = true;
         async_ = is_async;
         if (is_async) {
+            log_buf_ = nullptr;
             plog_buf_ = &log_buf_;
             auto *data = new ansyData{*this, mutex_};
             thread_ = std::thread(staticAnsyWritrLog, data);

+ 1 - 1
test/src/core-init.cpp

@@ -3,7 +3,7 @@ using namespace aFuncore;
 using namespace aFuntool;
 
 int main() {
-    std::string base_path = getExedir(1);
+    std::string base_path = getHomePath();
     if (base_path.empty()) {
         printf_stderr(0, "aFunlang init error.");
         aFunExit(EXIT_FAILURE);

+ 2 - 2
test/src/it-init.cpp

@@ -3,7 +3,7 @@ using namespace aFuncore;
 using namespace aFuntool;
 
 int main() {
-    std::string base_path = getExedir(1);
+    std::string base_path = getHomePath();
     if (base_path.empty()) {
         printf_stderr(0, "aFunlang init error.");
         aFunExit(EXIT_FAILURE);
@@ -13,7 +13,7 @@ int main() {
     auto core_logger = aFuntool::Logger(factor, "aFun-core");
     auto sys_logger = aFuntool::Logger(factor, "aFun-sys");
     auto aFun_logger = aFuntool::Logger(factor, "aFun");
-    aFunit::aFunInitInfo info {base_path, factor, core_logger, sys_logger, aFun_logger};
+    aFunit::aFunInitInfo info {base_path, factor, aFun_logger, core_logger, sys_logger};
 
     if (!aFunInit(&info)) {
         printf_stderr(0, "aFunlang init error.");

+ 1 - 1
test/src/run-code.cpp

@@ -299,7 +299,7 @@ int Main() {
 int main() {
     int exit_code = 0;
     try {
-        std::string base_path = getExedir(1);
+        std::string base_path = getHomePath();
         if (base_path.empty()) {
             printf_stderr(0, "aFunlang init error.");
             aFunExitReal(EXIT_FAILURE);

+ 1 - 1
test/src/tool-logger.cpp

@@ -4,7 +4,7 @@ using namespace aFuntool;
 int main(int argc, char **argv){
     int exit_code = 0;
     try {
-        std::string base_path = getExedir(1);
+        std::string base_path = getHomePath();
         if (base_path.empty()) {
             printf("Not Exe Dir\n");
             aFunExit(0);