diff --git a/CMakeLists.txt b/CMakeLists.txt index 585a66b..7c8246a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,20 +16,21 @@ set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/cppit/jucipp") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) include(CPack) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJUCI_VERSION=\\\"${JUCI_VERSION}\\\" -std=c++1y -pthread -Wall -Wextra -Wno-unused-parameter") +add_compile_options(-std=c++1y -pthread -Wall -Wextra -Wno-unused-parameter) +add_definitions(-DJUCI_VERSION="${JUCI_VERSION}") if(CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + add_compile_options(-O3) endif() # temporarily disable these warnings: Only can be included directly. if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-cpp") + add_definitions(-Wno-cpp) elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-#warnings") + add_definitions("-Wno-#warnings") endif() if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -undefined dynamic_lookup -Wno-unused-command-line-argument") #TODO: fix this + add_definitions(-undefined dynamic_lookup -Wno-unused-command-line-argument) #TODO: fix this link_directories(/usr/local/lib /usr/local/opt/gettext/lib) include_directories(/usr/local/opt/gettext/include) set(CMAKE_MACOSX_RPATH 1) @@ -39,9 +40,22 @@ if(${CMAKE_SYSTEM_NAME} MATCHES FreeBSD) link_directories(/usr/local/lib) endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules/") -find_package(LibClang REQUIRED) +option(BUILD_TESTING OFF) + +set(BUILD_TESTING_SAVED ${BUILD_TESTING}) +set(BUILD_TESTING OFF CACHE BOOL "Disable sub-project tests" FORCE) +add_subdirectory(libclangmm) +add_subdirectory(tiny-process-library) +set(BUILD_TESTING ${BUILD_TESTING_SAVED} CACHE BOOL "Set to previous value" FORCE) +find_package(Boost 1.54 COMPONENTS system filesystem serialization REQUIRED) +find_package(ASPELL REQUIRED) +include(FindPkgConfig) +pkg_check_modules(GTKMM gtkmm-3.0 REQUIRED) +pkg_check_modules(GTKSVMM gtksourceviewmm-3.0 REQUIRED) +pkg_check_modules(LIBGIT2 libgit2 REQUIRED) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/libclangmm/cmake_modules/") +find_package(LibClang REQUIRED) #Find liblldb with the same version as the version of libclang found string(REPLACE libclang liblldb LIBLLDB_LIBRARIES "${LIBCLANG_LIBRARIES}") if(EXISTS "${LIBLLDB_LIBRARIES}") @@ -51,57 +65,28 @@ elseif(EXISTS "${LIBLLDB_LIBRARIES}.1") set(LIBLLDB_FOUND TRUE) endif() if(LIBLLDB_FOUND) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJUCI_ENABLE_DEBUG") + add_definitions(-DJUCI_ENABLE_DEBUG) else() set(LIBLLDB_LIBRARIES "") message("liblldb not found. Building juCi++ without debugging support") endif() -find_package(Boost 1.54 COMPONENTS system filesystem serialization REQUIRED) -find_package(ASPELL REQUIRED) -include(FindPkgConfig) -pkg_check_modules(GTKMM gtkmm-3.0 REQUIRED) -pkg_check_modules(GTKSVMM gtksourceviewmm-3.0 REQUIRED) -pkg_check_modules(LIBGIT2 libgit2 REQUIRED) - -if(MSYS) - set(global_libraries winpthread) -endif() -set(global_libraries ${global_libraries} - ${GTKMM_LIBRARIES} - ${GTKSVMM_LIBRARIES} - ${Boost_LIBRARIES} - ${LIBCLANG_LIBRARIES} - ${LIBLLDB_LIBRARIES} - ${ASPELL_LIBRARIES} - ${LIBGIT2_LIBRARIES} - ) - -set(global_includes - ${Boost_INCLUDE_DIRS} - ${GTKMM_INCLUDE_DIRS} - ${GTKSVMM_INCLUDE_DIRS} - ${LIBCLANG_INCLUDE_DIRS} - ${ASPELL_INCLUDE_DIR} - ${LIBGIT2_INCLUDE_DIRS} - ${PROJECT_SOURCE_DIR}/libclangmm/src - ${PROJECT_SOURCE_DIR}/tiny-process-library - ${PROJECT_SOURCE_DIR}/src +# For both src and tests targets +include_directories( + ${Boost_INCLUDE_DIRS} + ${GTKMM_INCLUDE_DIRS} + ${GTKSVMM_INCLUDE_DIRS} + ${LIBCLANG_INCLUDE_DIRS} + ${ASPELL_INCLUDE_DIR} + ${LIBGIT2_INCLUDE_DIRS} ) add_subdirectory("src") #TODO: instead of the if-expression below, disable tests on Travis CI for clang++ builds if(NOT (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") AND (NOT $ENV{distribution} STREQUAL ""))) - if(ENABLE_TESTING) + if(BUILD_TESTING) enable_testing() add_subdirectory(tests) endif() endif() - -if(${CMAKE_SYSTEM_NAME} MATCHES Linux|.*BSD|DragonFly) - install(FILES "${CMAKE_SOURCE_DIR}/share/juci.desktop" - DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") - install(FILES "${CMAKE_SOURCE_DIR}/share/juci.svg" - DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps") -endif() diff --git a/ci/compile.sh b/ci/compile.sh index 18ee1bc..d1c9ad3 100755 --- a/ci/compile.sh +++ b/ci/compile.sh @@ -7,10 +7,10 @@ if [ "${cmake_command}" == "" ]; then else mingw="mingw32" fi - cmake_command="cmake -G\"MSYS Makefiles\" -DCMAKE_INSTALL_PREFIX=/${mingw} -DENABLE_TESTING=1 .." + cmake_command="cmake -G\"MSYS Makefiles\" -DCMAKE_INSTALL_PREFIX=/${mingw} -DBUILD_TESTING=1 .." make_command="make" else - cmake_command="cmake -DENABLE_TESTING=1 .." + cmake_command="cmake -DBUILD_TESTING=1 .." fi fi diff --git a/cmake_modules/FindLibClang.cmake b/cmake_modules/FindLibClang.cmake deleted file mode 100644 index d87bb69..0000000 --- a/cmake_modules/FindLibClang.cmake +++ /dev/null @@ -1,94 +0,0 @@ -# -# Try to find libclang -# -# Once done this will define: -# - LIBCLANG_FOUND -# System has libclang. -# - LIBCLANG_INCLUDE_DIRS -# The libclang include directories. -# - LIBCLANG_LIBRARIES -# The libraries needed to use libclang. -# - LIBCLANG_LIBRARY_DIR -# The path to the directory containing libclang. -# - LIBCLANG_KNOWN_LLVM_VERSIONS -# Known LLVM release numbers. - -# most recent versions come first -set(LIBCLANG_KNOWN_LLVM_VERSIONS 5.0.1 5.0.0 5.0 - 4.0.1 - 4.0.0_1 4.0.0 4.0 - 3.9.1 - 3.9.0 3.9 - 3.8.1 - 3.8.0 3.8 - 3.7.1 - 3.7 - 3.6.2 - 3.6.1 - 3.6 - 3.5.1 - 3.5.0 3.5 - 3.4.2 3.4.1 3.4 3.3 3.2 3.1) - -set(libclang_llvm_header_search_paths) -set(libclang_llvm_lib_search_paths - # LLVM Fedora - /usr/lib/llvm - ) - -foreach (version ${LIBCLANG_KNOWN_LLVM_VERSIONS}) - list(APPEND libclang_llvm_header_search_paths - # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/ - "/usr/lib/llvm-${version}/include" - # LLVM MacPorts - "/opt/local/libexec/llvm-${version}/include" - # LLVM Homebrew - "/usr/local/Cellar/llvm/${version}/include" - # LLVM Homebrew/versions - "/usr/local/lib/llvm-${version}/include" - ) - - list(APPEND libclang_llvm_lib_search_paths - # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/ - "/usr/lib/llvm-${version}/lib/" - # LLVM MacPorts - "/opt/local/libexec/llvm-${version}/lib" - # LLVM Homebrew - "/usr/local/Cellar/llvm/${version}/lib" - # LLVM Homebrew/versions - "/usr/local/lib/llvm-${version}/lib" - ) -endforeach() - -find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h - PATHS ${libclang_llvm_header_search_paths} - PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/ - llvm50/include llvm41/include llvm40/include llvm39/include llvm38/include llvm37/include llvm36/include # FreeBSD - DOC "The path to the directory that contains clang-c/Index.h") - -# On Windows with MSVC, the import library uses the ".imp" file extension -# instead of the comon ".lib" -if (MSVC) - find_file(LIBCLANG_LIBRARY libclang.imp - PATH_SUFFIXES LLVM/lib - DOC "The file that corresponds to the libclang library.") -endif() - -find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang - PATHS ${libclang_llvm_lib_search_paths} - PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/ - llvm50/lib llvm41/lib llvm40/lib llvm39/lib llvm38/lib llvm37/lib llvm36/lib # FreeBSD - DOC "The file that corresponds to the libclang library.") - -get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH) - -set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY}) -set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LIBCLANG_FOUND to TRUE if -# all listed variables are TRUE -find_package_handle_standard_args(LibClang DEFAULT_MSG - LIBCLANG_LIBRARY LIBCLANG_INCLUDE_DIR) - -mark_as_advanced(LIBCLANG_INCLUDE_DIR LIBCLANG_LIBRARY) diff --git a/libclangmm b/libclangmm index 0ab1692..817bbbf 160000 --- a/libclangmm +++ b/libclangmm @@ -1 +1 @@ -Subproject commit 0ab1692d125b1e3b742a4b43abe37fc2e84e5f2c +Subproject commit 817bbbfb1debb3af1784f46cc7f3dbabc1f4ef20 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ff9f3df..7121fbb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,88 +1,65 @@ -if(MSYS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSYS_PROCESS_USE_SH") -endif() - -set(project_files - config.cc - dialogs.cc - dialogs_unix.cc - directories.cc - entrybox.cc - info.cc - juci.cc - notebook.cc - project.cc - selection_dialog.cc - tooltips.cc - window.cc +# Files used both in ../src and ../tests +set(JUCI_SHARED_FILES + autocomplete.cc + cmake.cc + compile_commands.cc + ctags.cc + dispatcher.cc + filesystem.cc + git.cc + menu.cc + meson.cc + project_build.cc + source.cc + source_clang.cc + source_diff.cc + source_spellcheck.cc + terminal.cc + usages_clang.cc ) - -#Files used both in ../src and ../tests -set(project_shared_files - autocomplete.cc - cmake.cc - compile_commands.cc - ctags.cc - dispatcher.cc - filesystem.cc - git.cc - menu.cc - meson.cc - project_build.cc - source.cc - source_clang.cc - source_diff.cc - source_spellcheck.cc - terminal.cc - usages_clang.cc - - ${PROJECT_SOURCE_DIR}/libclangmm/src/CodeCompleteResults.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/CompilationDatabase.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/CompileCommand.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/CompileCommands.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/CompletionString.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Cursor.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Diagnostic.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Index.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/SourceLocation.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/SourceRange.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Token.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Tokens.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/TranslationUnit.cc - ${PROJECT_SOURCE_DIR}/libclangmm/src/Utility.cc - - ${PROJECT_SOURCE_DIR}/tiny-process-library/process.cpp -) - if(LIBLLDB_FOUND) - list(APPEND project_shared_files debug_lldb.cc) -endif() - -if(MSYS) - list(APPEND project_shared_files ${PROJECT_SOURCE_DIR}/tiny-process-library/process_win.cpp) -else() - list(APPEND project_shared_files ${PROJECT_SOURCE_DIR}/tiny-process-library/process_unix.cpp) + list(APPEND JUCI_SHARED_FILES debug_lldb.cc) endif() +add_library(juci_shared STATIC ${JUCI_SHARED_FILES}) +target_link_libraries(juci_shared + ${GTKMM_LIBRARIES} + ${GTKSVMM_LIBRARIES} + ${Boost_LIBRARIES} + ${LIBLLDB_LIBRARIES} + ${ASPELL_LIBRARIES} + ${LIBGIT2_LIBRARIES} + clangmm + tiny-process-library +) -include_directories(${global_includes}) - -add_library(project_shared OBJECT ${project_shared_files}) - -if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") AND (NOT $ENV{distribution} STREQUAL "")) - add_library(${CMAKE_PROJECT_NAME} OBJECT ${project_files}) -else() - add_executable(${CMAKE_PROJECT_NAME} ${project_files} $) - target_link_libraries(${CMAKE_PROJECT_NAME} ${global_libraries}) - install(TARGETS ${CMAKE_PROJECT_NAME} - RUNTIME DESTINATION bin - ) -endif() +add_executable(juci + config.cc + dialogs.cc + dialogs_unix.cc + directories.cc + entrybox.cc + info.cc + juci.cc + notebook.cc + project.cc + selection_dialog.cc + tooltips.cc + window.cc +) +target_link_libraries(juci juci_shared) -if(APPLE) - install(CODE "execute_process(COMMAND /usr/bin/python ${CMAKE_SOURCE_DIR}/share/set_icon_macos.py ${CMAKE_SOURCE_DIR}/share/juci.png ${CMAKE_INSTALL_PREFIX}/bin/juci)") +install(TARGETS juci RUNTIME DESTINATION bin) +if(${CMAKE_SYSTEM_NAME} MATCHES Linux|.*BSD|DragonFly) + install(FILES "${CMAKE_SOURCE_DIR}/share/juci.desktop" + DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") + install(FILES "${CMAKE_SOURCE_DIR}/share/juci.svg" + DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps") +elseif(APPLE) + install(CODE "execute_process(COMMAND /usr/bin/python ${CMAKE_SOURCE_DIR}/share/set_icon_macos.py ${CMAKE_SOURCE_DIR}/share/juci.png ${CMAKE_INSTALL_PREFIX}/bin/juci)") endif() # add a target to generate API documentation with Doxygen +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules/") find_package(Plantuml) find_package(Doxygen) if(DOXYGEN_FOUND) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d07968b..e873016 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,79 +1,70 @@ -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-access-control -DJUCI_BUILD_PATH=\\\"${CMAKE_BINARY_DIR}\\\" -DJUCI_TESTS_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"") +add_compile_options(-fno-access-control) +add_definitions(-DJUCI_BUILD_PATH="${CMAKE_BINARY_DIR}" -DJUCI_TESTS_PATH="${CMAKE_CURRENT_SOURCE_DIR}") -set(stub_files - stubs/config.cc - stubs/dialogs.cc - stubs/directories.cc - stubs/info.cc - stubs/notebook.cc - stubs/project.cc - stubs/selection_dialog.cc - stubs/tooltips.cc +include_directories( + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/libclangmm/src + ${CMAKE_SOURCE_DIR}/tiny-process-library ) -add_library(stubs OBJECT ${stub_files}) - -include_directories(${global_includes}) +add_library(test_stubs OBJECT + stubs/config.cc + stubs/dialogs.cc + stubs/directories.cc + stubs/info.cc + stubs/notebook.cc + stubs/project.cc + stubs/selection_dialog.cc + stubs/tooltips.cc +) -add_executable(process_test process_test.cc - $ $) -target_link_libraries(process_test ${global_libraries}) +add_executable(process_test process_test.cc $) +target_link_libraries(process_test juci_shared) add_test(process_test process_test) -add_executable(compile_commands_test compile_commands_test.cc - $ $) -target_link_libraries(compile_commands_test ${global_libraries}) +add_executable(compile_commands_test compile_commands_test.cc $) +target_link_libraries(compile_commands_test juci_shared) add_test(compile_commands_test compile_commands_test) -add_executable(filesystem_test filesystem_test.cc - $ $) -target_link_libraries(filesystem_test ${global_libraries}) +add_executable(filesystem_test filesystem_test.cc $) +target_link_libraries(filesystem_test juci_shared) add_test(filesystem_test filesystem_test) -add_executable(cmake_build_test cmake_build_test.cc - $ $) -target_link_libraries(cmake_build_test ${global_libraries}) +add_executable(cmake_build_test cmake_build_test.cc $) +target_link_libraries(cmake_build_test juci_shared) add_test(cmake_build_test cmake_build_test) -add_executable(meson_build_test meson_build_test.cc - $ $) -target_link_libraries(meson_build_test ${global_libraries}) +add_executable(meson_build_test meson_build_test.cc $) +target_link_libraries(meson_build_test juci_shared) add_test(meson_build_test meson_build_test) -add_executable(source_test source_test.cc - $ $) -target_link_libraries(source_test ${global_libraries}) +add_executable(source_test source_test.cc $) +target_link_libraries(source_test juci_shared) add_test(source_test source_test) -add_executable(source_clang_test source_clang_test.cc - $ $) -target_link_libraries(source_clang_test ${global_libraries}) +add_executable(source_clang_test source_clang_test.cc $) +target_link_libraries(source_clang_test juci_shared) add_test(source_clang_test source_clang_test) -add_executable(source_key_test source_key_test.cc - $ $) -target_link_libraries(source_key_test ${global_libraries}) +add_executable(source_key_test source_key_test.cc $) +target_link_libraries(source_key_test juci_shared) add_test(source_key_test source_key_test) -add_executable(terminal_test terminal_test.cc - $ $) -target_link_libraries(terminal_test ${global_libraries}) +add_executable(terminal_test terminal_test.cc $) +target_link_libraries(terminal_test juci_shared) add_test(terminal_test terminal_test) -add_executable(usages_clang_test usages_clang_test.cc - $ $) -target_link_libraries(usages_clang_test ${global_libraries}) +add_executable(usages_clang_test usages_clang_test.cc $) +target_link_libraries(usages_clang_test juci_shared) add_test(usages_clang_test usages_clang_test) if(LIBLLDB_FOUND) - add_executable(lldb_test lldb_test.cc - $ $) - target_link_libraries(lldb_test ${global_libraries}) + add_executable(lldb_test lldb_test.cc $) + target_link_libraries(lldb_test juci_shared) add_test(lldb_test lldb_test) add_subdirectory("lldb_test_files") endif() -add_executable(git_test git_test.cc - $ $) -target_link_libraries(git_test ${global_libraries}) +add_executable(git_test git_test.cc $) +target_link_libraries(git_test juci_shared) add_test(git_test git_test) diff --git a/tests/lldb_test_files/CMakeLists.txt b/tests/lldb_test_files/CMakeLists.txt index 92fae30..de74e74 100644 --- a/tests/lldb_test_files/CMakeLists.txt +++ b/tests/lldb_test_files/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8) -set(CMAKE_CXX_FLAGS "-g") +add_compile_options(-O0 -g) add_executable(lldb_test_executable main.cpp) diff --git a/tiny-process-library b/tiny-process-library index cf212df..7279054 160000 --- a/tiny-process-library +++ b/tiny-process-library @@ -1 +1 @@ -Subproject commit cf212df358680ef0b4b30569672c770bd723a7aa +Subproject commit 72790542e064aad188641626d7385d40640abc0c