Browse Source

Updated submodules and modernized cmake files

merge-requests/365/head
eidheim 8 years ago
parent
commit
88b55ca1ff
  1. 77
      CMakeLists.txt
  2. 4
      ci/compile.sh
  3. 94
      cmake_modules/FindLibClang.cmake
  4. 2
      libclangmm
  5. 131
      src/CMakeLists.txt
  6. 89
      tests/CMakeLists.txt
  7. 2
      tests/lldb_test_files/CMakeLists.txt
  8. 2
      tiny-process-library

77
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 <gtksourceview/gtksource.h> 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()

4
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

94
cmake_modules/FindLibClang.cmake

@ -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)

2
libclangmm

@ -1 +1 @@
Subproject commit 0ab1692d125b1e3b742a4b43abe37fc2e84e5f2c
Subproject commit 817bbbfb1debb3af1784f46cc7f3dbabc1f4ef20

131
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_OBJECTS:project_shared>)
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)

89
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_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(process_test ${global_libraries})
add_executable(process_test process_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(process_test juci_shared)
add_test(process_test process_test)
add_executable(compile_commands_test compile_commands_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(compile_commands_test ${global_libraries})
add_executable(compile_commands_test compile_commands_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(compile_commands_test juci_shared)
add_test(compile_commands_test compile_commands_test)
add_executable(filesystem_test filesystem_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(filesystem_test ${global_libraries})
add_executable(filesystem_test filesystem_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(filesystem_test juci_shared)
add_test(filesystem_test filesystem_test)
add_executable(cmake_build_test cmake_build_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(cmake_build_test ${global_libraries})
add_executable(cmake_build_test cmake_build_test.cc $<TARGET_OBJECTS:test_stubs>)
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_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(meson_build_test ${global_libraries})
add_executable(meson_build_test meson_build_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(meson_build_test juci_shared)
add_test(meson_build_test meson_build_test)
add_executable(source_test source_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(source_test ${global_libraries})
add_executable(source_test source_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(source_test juci_shared)
add_test(source_test source_test)
add_executable(source_clang_test source_clang_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(source_clang_test ${global_libraries})
add_executable(source_clang_test source_clang_test.cc $<TARGET_OBJECTS:test_stubs>)
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_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(source_key_test ${global_libraries})
add_executable(source_key_test source_key_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(source_key_test juci_shared)
add_test(source_key_test source_key_test)
add_executable(terminal_test terminal_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(terminal_test ${global_libraries})
add_executable(terminal_test terminal_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(terminal_test juci_shared)
add_test(terminal_test terminal_test)
add_executable(usages_clang_test usages_clang_test.cc
$<TARGET_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(usages_clang_test ${global_libraries})
add_executable(usages_clang_test usages_clang_test.cc $<TARGET_OBJECTS:test_stubs>)
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_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(lldb_test ${global_libraries})
add_executable(lldb_test lldb_test.cc $<TARGET_OBJECTS:test_stubs>)
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_OBJECTS:project_shared> $<TARGET_OBJECTS:stubs>)
target_link_libraries(git_test ${global_libraries})
add_executable(git_test git_test.cc $<TARGET_OBJECTS:test_stubs>)
target_link_libraries(git_test juci_shared)
add_test(git_test git_test)

2
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)

2
tiny-process-library

@ -1 +1 @@
Subproject commit cf212df358680ef0b4b30569672c770bd723a7aa
Subproject commit 72790542e064aad188641626d7385d40640abc0c
Loading…
Cancel
Save