From a5eb548b81d6515a4f4937f673e36a3368514aa4 Mon Sep 17 00:00:00 2001 From: aiekick Date: Sat, 6 Jul 2024 21:08:47 +0200 Subject: [PATCH] [FIX] : fix compiler warnings by disabling what is coming for unmaintained libs --- .gitignore | 2 + CMakeLists.txt | 66 ++++++++--------- ImGuiFileDialog | 2 +- cmake/boost.cmake | 5 ++ cmake/glad.cmake | 5 ++ cmake/glfw.cmake | 6 ++ cmake/imgui.cmake | 33 +++++---- cmake/imwidgets.cmake | 28 +++---- tests/CMakeLists.txt | 4 + tests/ImGuiFileDialog/Test_FileManager.cpp | 86 +++++++++++++++++++++- tests/main.cpp | 24 +++++- 11 files changed, 191 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 9893080e..fe839b70 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ build /cmake-build-debug /cmake-build-minsizerel /cmake-build-release +/bin +/.PVS-Studio diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c4af537..ce8e0c05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,20 +43,23 @@ if (USE_BOOST_FILESYSTEM) add_definitions(-DCUSTOM_FILESYSTEM_INCLUDE="${CMAKE_CURRENT_SOURCE_DIR}/FileSystemBoost.hpp") endif() -if(MSVC) +set(ORIGINAL_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_definitions(-DMSVC) if (USE_STD_FILESYSTEM) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11") endif() -else () +else() + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wdeprecated-declarations -Wunused-parameter") if (USE_STD_FILESYSTEM) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wextra -Wpedantic -Wdeprecated-declarations -Wunused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wdeprecated-declarations -Wunused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() -endif () +endif() add_definitions(${GLFW_DEFINITIONS}) add_definitions(-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS) @@ -90,30 +93,32 @@ file(GLOB RES_WIDGETS file(GLOB RES_DEMO_DIALOG ${CMAKE_CURRENT_SOURCE_DIR}/DemoDialog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/DemoDialog.h) + +file(GLOB_RECURSE CMAKE_SOURCES ${CMAKE_SOURCE_DIR}/cmake/*.*) if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") -file(GLOB MAIN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/mainAndroid.cpp) -file(GLOB IMGUIIMPL_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_android.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_android.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.h - ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) + file(GLOB MAIN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/mainAndroid.cpp) + file(GLOB IMGUIIMPL_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_android.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_android.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.h + ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) else() -file(GLOB MAIN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/mainWinLinuxMacos.cpp) -file(GLOB IMGUIIMPL_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_glfw.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_glfw.h - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.h) + file(GLOB MAIN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/mainWinLinuxMacos.cpp) + file(GLOB IMGUIIMPL_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_glfw.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_glfw.h + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/backends/imgui_impl_opengl3.h) endif() -source_group(main FILES ${MAIN_SOURCES}) -source_group(src\\DemoDialog FILES ${RES_DEMO_DIALOG}) -source_group(src\\Custom FILES ${CUSTOM_SOURCES}) -source_group(src\\ImGuiImpl FILES ${IMGUIIMPL_SOURCES}) +source_group(cmake FILES ${CMAKE_SOURCES}) source_group(src\\Res FILES ${RES_SOURCES}) source_group(src\\Widgets FILES ${RES_WIDGETS}) +source_group(src\\Custom FILES ${CUSTOM_SOURCES}) +source_group(src\\DemoDialog FILES ${RES_DEMO_DIALOG}) +source_group(src\\ImGuiImpl FILES ${IMGUIIMPL_SOURCES}) if (APPLE) ##set(ICON icon.icns) @@ -149,25 +154,20 @@ target_link_libraries(ImGuiFileDialog PRIVATE ${BOOST_FILESYSTEM_LIBRARIES} ) -if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") -add_library(${PROJECT} SHARED +set(SOURCES ${RES_SOURCES} ${RES_WIDGETS} ${MAIN_SOURCES} ${BOOST_SOURCES} + ${CMAKE_SOURCES} ${CUSTOM_SOURCES} ${RES_DEMO_DIALOG} ${IMGUIIMPL_SOURCES}) + +if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") + add_library(${PROJECT} SHARED ${SOURCES}) else() -add_executable(${PROJECT} - MACOSX_BUNDLE - ${RES_SOURCES} - ${RES_WIDGETS} - ${MAIN_SOURCES} - ${BOOST_SOURCES} - ${CUSTOM_SOURCES} - ${RES_DEMO_DIALOG} - ${IMGUIIMPL_SOURCES}) + add_executable(${PROJECT} MACOSX_BUNDLE ${SOURCES}) endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/ImGuiFileDialog b/ImGuiFileDialog index e39a4bb5..6bda1bee 160000 --- a/ImGuiFileDialog +++ b/ImGuiFileDialog @@ -1 +1 @@ -Subproject commit e39a4bb5c6a01e7873ef522aa6f41497d5c156e9 +Subproject commit 6bda1beeaa29c156dc3a3b9caf50e40885e46050 diff --git a/cmake/boost.cmake b/cmake/boost.cmake index 6ee08337..3c0124eb 100644 --- a/cmake/boost.cmake +++ b/cmake/boost.cmake @@ -37,6 +37,11 @@ function(set_target_dir _PREFIX DIR TARGET_DIR) foreach (_var IN LISTS _matchedVars) if (TARGET ${_var}) set_target_properties(${_var} PROPERTIES FOLDER ${TARGET_DIR}) +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + #target_compile_options(${_var} PRIVATE "-Wno-everything") +else() + target_compile_options(${_var} PRIVATE "-Wno-everything") +endif() endif() endforeach() get_property(SUBDIRS DIRECTORY "${DIR}" PROPERTY SUBDIRECTORIES) diff --git a/cmake/glad.cmake b/cmake/glad.cmake index 48e1e97a..94353e1c 100644 --- a/cmake/glad.cmake +++ b/cmake/glad.cmake @@ -8,6 +8,11 @@ include_directories(${GLAD_INCLUDE_DIR}) set_target_properties(glad PROPERTIES LINKER_LANGUAGE C) set_target_properties(glad PROPERTIES FOLDER 3rdparty) +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + #target_compile_options(glad PRIVATE "-Wno-everything") +else() + target_compile_options(glad PRIVATE "-Wno-everything") +endif() set(GLAD_LIBRARIES glad) diff --git a/cmake/glfw.cmake b/cmake/glfw.cmake index 4c2b971f..f23a4e12 100644 --- a/cmake/glfw.cmake +++ b/cmake/glfw.cmake @@ -8,6 +8,12 @@ add_subdirectory(${CMAKE_SOURCE_DIR}/3rdparty/glfw) set_target_properties(glfw PROPERTIES FOLDER 3rdparty) # Override standard 'GLFW3' subfolder +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + #target_compile_options(glfw PRIVATE "-Wno-everything") +else() + target_compile_options(glfw PRIVATE "-Wno-everything") +endif() + set(GLFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/3rdparty/glfw/include) set(GLFW_DEFINITIONS -DGLFW_INCLUDE_NONE) set(GLFW_LIBRARIES ${GLFW_LIBRARIES} glfw) diff --git a/cmake/imgui.cmake b/cmake/imgui.cmake index 77b81c77..d87eac83 100644 --- a/cmake/imgui.cmake +++ b/cmake/imgui.cmake @@ -7,27 +7,28 @@ add_library(imgui STATIC ${IMGUI_SOURCES}) add_definitions(-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS) if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") - -add_definitions(-DIMGUI_IMPL_OPENGL_ES3) -include_directories(${IMGUI_INCLUDE_DIR}) - + add_definitions(-DIMGUI_IMPL_OPENGL_ES3) + include_directories(${IMGUI_INCLUDE_DIR}) else() - -add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD) -include_directories( - ${IMGUI_INCLUDE_DIR} - ${OPENGL_INCLUDE_DIR} - ${GLFW_INCLUDE_DIR} - ${GLAD_INCLUDE_DIR}) -target_link_libraries(imgui - ${OPENGL_LIBRARIES} - ${GLFW_LIBRARIES} - ${GLAD_LIBRARIES}) - + add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD) + include_directories( + ${IMGUI_INCLUDE_DIR} + ${OPENGL_INCLUDE_DIR} + ${GLFW_INCLUDE_DIR} + ${GLAD_INCLUDE_DIR}) + target_link_libraries(imgui + ${OPENGL_LIBRARIES} + ${GLFW_LIBRARIES} + ${GLAD_LIBRARIES}) endif() set_target_properties(imgui PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(imgui PROPERTIES FOLDER 3rdparty) +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + #target_compile_options(imgui PRIVATE "-Wno-everything") +else() + target_compile_options(imgui PRIVATE "-Wno-everything") +endif() set(IMGUI_LIBRARIES imgui) diff --git a/cmake/imwidgets.cmake b/cmake/imwidgets.cmake index 599e7674..ae8d3d69 100644 --- a/cmake/imwidgets.cmake +++ b/cmake/imwidgets.cmake @@ -5,23 +5,19 @@ file(GLOB IMWIDGETS_HEADERS ${IMWIDGETS_INCLUDE_DIR}/*.h) add_library(imwidgets STATIC ${IMWIDGETS_SOURCES}) if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") - -add_definitions(-DIMGUI_IMPL_OPENGL_ES3) -include_directories(${IMWIDGETS_INCLUDE_DIR}) - + add_definitions(-DIMGUI_IMPL_OPENGL_ES3) + include_directories(${IMWIDGETS_INCLUDE_DIR}) else() - -add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD) -include_directories( - ${IMWIDGETS_INCLUDE_DIR} - ${OPENGL_INCLUDE_DIR} - ${GLFW_INCLUDE_DIR} - ${GLAD_INCLUDE_DIR}) -target_link_libraries(imwidgets - ${IMGUI_LIBRARIES} - ${GLFW_LIBRARIES} - ${GLAD_LIBRARIES}) - + add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD) + include_directories( + ${IMWIDGETS_INCLUDE_DIR} + ${OPENGL_INCLUDE_DIR} + ${GLFW_INCLUDE_DIR} + ${GLAD_INCLUDE_DIR}) + target_link_libraries(imwidgets + ${IMGUI_LIBRARIES} + ${GLFW_LIBRARIES} + ${GLAD_LIBRARIES}) endif() set_target_properties(imwidgets PROPERTIES LINKER_LANGUAGE CXX) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 51853985..38f7fe69 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -133,6 +133,10 @@ SetTest(Test_IGFD_FileManager_Filtering_insensitive_case_1) ## Test_IGFD_FileManager -- FileInfos SearchForExts SetTest(Test_IGFD_FileManager_FileInfos_SearchForExts_0) +## Test_IGFD_FileManager -- GetResultingFilePathName +SetTest(Test_IGFD_FileManager_GetResultingFilePathName_issue_144) +SetTest(Test_IGFD_FileManager_GetResultingFilePathName_issue_184) + ## Test_IGFD_FileStyle ##SetTest(Test_IGFD_FileStyle_ByExtention_0) ##SetTest(Test_IGFD_FileStyle_ByExtention_1) diff --git a/tests/ImGuiFileDialog/Test_FileManager.cpp b/tests/ImGuiFileDialog/Test_FileManager.cpp index fadc681f..e6ec121a 100644 --- a/tests/ImGuiFileDialog/Test_FileManager.cpp +++ b/tests/ImGuiFileDialog/Test_FileManager.cpp @@ -2,7 +2,18 @@ #include -#include "ImGuiFileDialog/ImGuiFileDialog.h" +#include + +#include + +// specific +#ifdef WIN32 +#include // _chdir +#define GetCurrentDir _getcwd +#elif defined(UNIX) +#include // chdir +#define GetCurrentDir getcwd +#endif #pragma region Helper @@ -10,9 +21,10 @@ class FileManagerTestHelper { private: IGFD::FileDialogInternal fd; std::set arr; + std::unique_ptr m_FileSystemPtr = nullptr; private: - void compute_name_array() { + void m_compute_name_array() { for (const auto& file_ptr : fd.fileManager.m_FileList) { if (file_ptr) { arr.emplace(file_ptr->fileNameExt); @@ -36,9 +48,21 @@ class FileManagerTestHelper { } }; + void createDirectoryOnDisk(const std::string& vDirectory) { + fd.fileManager.m_FileSystemPtr->CreateDirectoryIfNotExist(vDirectory); + } + + void createFileOnDisk(const std::string& vFile) { + std::ofstream fileWriter(vFile, std::ios::out); + if (!fileWriter.bad()) { + fileWriter << "for testing"; + fileWriter.close(); + } + } + bool isFileExist(const std::string& vFile) { if (arr.empty()) { - compute_name_array(); + m_compute_name_array(); } return (arr.find(vFile) != arr.end()); } @@ -54,6 +78,24 @@ class FileManagerTestHelper { IGFD::FileDialogInternal& getFileDialogInternal() { return fd; } + + void setInput(const std::string& vInput) { + if (!vInput.empty()) { + ImFormatString(fd.fileManager.fileNameBuffer, MAX_FILE_DIALOG_NAME_BUFFER, "%s", vInput.c_str()); + } else { + fd.fileManager.fileNameBuffer[0] = '\0'; + } + } + + void setCurrentPath(const std::string& vPath) { + fd.fileManager.m_CurrentPath = vPath; + } + + std::string getCurrentDir() { + char buffer[1024 + 1] = "\0"; + GetCurrentDir(buffer, 1024); + return std::string(buffer); + } }; #pragma endregion @@ -226,6 +268,42 @@ bool Test_IGFD_FileManager_FileInfos_SearchForExts_0() { #pragma endregion +#pragma region GetResultingFilePathName + +// ensure #144 +bool Test_IGFD_FileManager_GetResultingFilePathName_issue_144() { + FileManagerTestHelper mgr; + auto& fd = mgr.getFileDialogInternal(); + mgr.setInput("toto.cpp"); + if (fd.fileManager.GetResultingFileName(fd, IGFD_ResultMode_AddIfNoFileExt) != "toto.cpp") return false; + mgr.createDirectoryOnDisk("TITI"); + const std::string& existing_path_file = "TITI" + IGFD::Utils::GetPathSeparator() + "toto.cpp "; + mgr.createFileOnDisk(existing_path_file); + mgr.setInput(existing_path_file); + if (fd.fileManager.GetResultingFilePathName(fd, IGFD_ResultMode_AddIfNoFileExt) != existing_path_file) return false; + return true; +} + +// ensure #184 +bool Test_IGFD_FileManager_GetResultingFilePathName_issue_184() { + FileManagerTestHelper mgr; + auto& fd = mgr.getFileDialogInternal(); + mgr.setInput("toto.cpp"); + if (fd.fileManager.GetResultingFileName(fd, IGFD_ResultMode_AddIfNoFileExt) != "toto.cpp") return false; + mgr.createFileOnDisk("toto.cpp"); // we create a local file toto.cpp + mgr.createDirectoryOnDisk("TITI"); + const std::string& exisitng_path = mgr.getCurrentDir() + IGFD::Utils::GetPathSeparator() + "TITI"; + const std::string& existing_path_file = exisitng_path + IGFD::Utils::GetPathSeparator() + "toto.cpp"; + mgr.createFileOnDisk(existing_path_file); // we crate also a local file toto.cpp in the dir TITI + mgr.setInput("toto.cpp"); // we select the file toto.cpp + mgr.setCurrentPath(exisitng_path); // in the dir TITI + // but we must ensure than the returned file path is TITI/toto.cpp and not the toto.cpp from the current dir + if (fd.fileManager.GetResultingFilePathName(fd, IGFD_ResultMode_AddIfNoFileExt) != existing_path_file) return false; + return true; +} + +#pragma endregion + #pragma region Entry Point #define IfTestExist(v) \ @@ -244,6 +322,8 @@ bool Test_FileManager(const std::string& vTest) { IfTestExist(Test_IGFD_FileManager_Filtering_insensitive_case_0); IfTestExist(Test_IGFD_FileManager_Filtering_insensitive_case_1); IfTestExist(Test_IGFD_FileManager_FileInfos_SearchForExts_0); + IfTestExist(Test_IGFD_FileManager_GetResultingFilePathName_issue_144); + IfTestExist(Test_IGFD_FileManager_GetResultingFilePathName_issue_184); assert(0); diff --git a/tests/main.cpp b/tests/main.cpp index 386a1dc3..f5f2c5df 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -1,13 +1,35 @@ #include "ImGuiFileDialog/Test_ImGuiFileDialog.h" #include +// specific +#ifdef WIN32 +#include // _chdir +#define GetCurrentDir _getcwd +#define SetCurrentDir _chdir +#define ROOT_SLASH "\\" +#elif defined(UNIX) +#include // chdir +#define GetCurrentDir getcwd +#define SetCurrentDir chdir +#define ROOT_SLASH "/" +#endif + int main(int argc, char** argv) { + // set current dir when we create files for testing + std::string root_path = argv[0]; + const auto& pos = root_path.find_last_of(ROOT_SLASH); + if (pos != std::string::npos) { + root_path = root_path.substr(0, pos); + } + SetCurrentDir(root_path.c_str()); + + // exec a specific test for ctest if (argc > 1) { printf("Exec test : %s\n", argv[1]); return Test_ImGuiFileDialog(argv[1]) ? 0 : 1; } - return Test_ImGuiFileDialog("Test_IGFD_FileManager_FileInfos_SearchForExts_0") ? 0 : 1; + return Test_ImGuiFileDialog("Test_IGFD_FileManager_GetResultingFilePathName_issue_184") ? 0 : 1; return 0; } \ No newline at end of file