From 9f60e210b7ff836bda3e132c1edb8820ac78f0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lien=20Sell=C3=A6g?= Date: Wed, 29 Jul 2015 16:54:55 +0200 Subject: [PATCH] Cleanup cmakelists --- CMakeLists.txt | 19 ++ src/CMakeLists.txt | 246 +++++++++++-------------- src/cmake/Modules/FindLibClangmm.cmake | 9 +- 3 files changed, 124 insertions(+), 150 deletions(-) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3b69577 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required (VERSION 2.8.4) + +set(project_name juci) +set(module juci_to_python_api) + +#### TODO WINDOWS SUPPORT #### +set(juci_config_folder "$ENV{HOME}/.juci") +set(bin_install_path "/usr/local/bin") +set(lib_install_path "/usr/local/lib/python2.7/dist-packages/") +##### + +project (${project_name}) + +add_subdirectory("src") + +install( + DIRECTORY "config" "plugins" + DESTINATION ${juci_config_folder} + USE_SOURCE_PERMISSIONS) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 694961c..79323c8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,164 +1,124 @@ -cmake_minimum_required (VERSION 2.8.4) -set(project_name juci) -set(module juci_to_python_api) -project (${project_name}) add_definitions(-DBOOST_LOG_DYN_LINK) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++11 -pthread -Wall -Wno-reorder") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/") -#You are of course using Homebrew: if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L/usr/local/opt/gettext/lib -I/usr/local/opt/gettext/include -undefined dynamic_lookup") #TODO: fix this + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L/usr/local/opt/gettext/lib -I/usr/local/opt/gettext/include -undefined dynamic_lookup") #T set(CMAKE_MACOSX_RPATH 1) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig") endif() INCLUDE(FindPkgConfig) -message("Searcing for libclang") -#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. -find_package(LibClangmm) -find_package(LibClang) +set(validation true) + +function(install_help APPLE UNIX WINDOWS) + message("Install package with:") + if(UNIX) + if(APPLE) + message("brew install ${APPLE}") + else() + message("sudo apt-get install ${UNIX}") + endif(APPLE) + endif(UNIX) + if(WINDOWS) + message("choco install ${WINDOWS}") + endif(WINDOWS) +endfunction(install_help) + +function(validate FOUND APPLE UNIX WINDOWS) + if(!${FOUND}) + set(validation false) + install_help(${APPLE} ${UNIX} ${WINDOWS}) + endif() +endfunction(validate) -if(${LCL_FOUND}) - message("libclangmm libraries found. Continuing") - message("${LCL_INCLUDE_DIRS}") -else() - message(FATAL_ERROR "The libclangmm libraries are required. Quitting.") -endif() +find_package(LibClangmm) +validate(${LCL_FOUND} "clangmm" "clangmm" "clangmm") -if(${LIBCLANG_FOUND}) - message("libclangmm libraries found. Continuing") - message("${LIBCLANG_INCLUDE_DIRS}") -else() - message(FATAL_ERROR "The libclangmm libraries are required. Quitting.") -endif() +find_package(LibClang) +validate(${LIBCLANG_FOUND} "clang" "libclang-dev" "llvm") -#### Finding boost, the variables below is set ##### -#PYTHONLIBS_FOUND - True if headers and requested libraries were found -#PYTHON_INCLUDE_DIRS - Boost include directories -#PYTHON_LIBRARIES - Boost component libraries to be linked find_package(PythonLibs 2.7) +validate(${PYTHONLIBS_FOUND} "python" "libpython-dev" "python") -#If python is found -if(${PYTHONLIBS_FOUND}) - message("Python libraries found. Continuing") -else() - message("Please install python libraries. The libraries where not found.") - message("Python include dirs: ${PYTHON_INCLUDE_DIRS}") - message("Python link dirs ${PYTHON_LIBRARIES}") - message(FATAL_ERROR "The python libraries are required. Quitting.") -endif() - -#### Finding boost, the variables below is set ##### -#Boost_FOUND - True if headers and requested libraries were found -#Boost_INCLUDE_DIRS - Boost include directories -#Boost_LIBRARY_DIRS - Link directories for Boost libraries -#Boost_LIBRARIES - Boost component libraries to be linked find_package(Boost 1.55 COMPONENTS python thread log system filesystem REQUIRED) +validate(${Boost_FOUND} "boost" "libboost-all-dev" "boost") -#If boost is not found -if(${Boost_FOUND}) - message("Boost libraries found. Continuing") -else() - message("Please install boost libraries. The libraries where not found.") - message("Boost library dirs: ${Boost_LIBRARY_DIRS}") - message("Boost include dirs: ${Boost_INCLUDE_DIRS}") - message("Boost link dirs ${Boost_LIBRARIES}") - message(FATAL_ERROR "The boost libraries are required. Quitting.") -endif() - -#### Finding gtkmm, the variables below is set ##### -#GTKMM_FOUND - True if headers and requested libraries were found -#GTKMM_INCLUDE_DIRS - GTKMM include directories -#GTKMM_LIBRARY_DIRS - Link directories for GTKMM libraries -#GTKMM_LIBRARIES - GTKMM libraries to be linked pkg_check_modules(GTKMM gtkmm-3.0) # The name GTKMM is set here for the variables abouve - -#If gtkmm is not found -if(${GTKMM_FOUND}) - message("Gtkmm libraries found. Continuing") -else() - message("Please install gtkmm libraries. The libraries where not found.") - message("Gtkmm library dirs ${GTKMM_LIBRARY_DIRS}") - message("Gtkmm include dirs ${GTKMM_INCLUDE_DIRS}") - message("Gtkmm link dirs ${GTKMM_LIBRARIES}") - message(FATAL_ERROR "The gtkmm libraries are required. Quitting.") -endif() +validate(${GTKMM_FOUND} "gtkmm" "libgtkmm-dev" "gtkmm") pkg_check_modules(GTKSVMM gtksourceviewmm-3.0) -if(${GTKSVMM_FOUND}) - message("Gtksourceviewmm libraries found. Continuing") -else() - message(FATAL_ERROR "The gtksourceviewmm libraries are required. Quitting.") -endif() - -# name of the executable on Windows will be example.exe -add_executable(${project_name} - #list of every needed file to create the executable - juci.h - juci.cc - menu.h - menu.cc - source.h - source.cc - selectiondialog.h - selectiondialog.cc - config.h - config.cc - sourcefile.h - sourcefile.cc - window.cc - window.h - api.h - api.cc - notebook.cc - notebook.h - entrybox.h - entrybox.cc - directories.h - directories.cc - terminal.h - terminal.cc - tooltips.h - tooltips.cc - singletons.h - singletons.cc - ) - -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - - -add_library(${module} SHARED - api - api_ext - ) -# dependencies - -include_directories( - ${Boost_INCLUDE_DIRS} - ${PYTHON_INCLUDE_DIRS} - ${GTKMM_INCLUDE_DIRS} - ${GTKSVMM_INCLUDE_DIRS} - ${LCL_INCLUDE_DIRS} - ${LIBCLANG_INCLUDE_DIRS} - ) -link_directories( - ${GTKMM_LIBRARY_DIRS} - ${GTKSVMM_LIBRARY_DIRS} - ${Boost_LIBRARY_DIRS} - ${PYTHON_INCLUDE_DIRS} - ${LCL_LIBRARY_DIRS} - ${LIBCLANG_LIBRARY_DIRS} - ) -#module: -set_target_properties(${module} PROPERTIES PREFIX "" -LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/") -target_link_libraries(${module} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES}) -#executable: -target_link_libraries(${project_name} ${LIVCLANG_LIBRARIES} ${LCL_LIBRARIES} ${GTKMM_LIBRARIES} ${GTKSVMM_LIBRARIES} ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) - +validate(${GTKSVMM_FOUND} "gtksvmm" "libgtksvmm-dev" "gtkmmsv") + +if(${validation}) + add_executable(${project_name} + juci.h + juci.cc + menu.h + menu.cc + source.h + source.cc + selectiondialog.h + selectiondialog.cc + config.h + config.cc + sourcefile.h + sourcefile.cc + window.cc + window.h + api.h + api.cc + notebook.cc + notebook.h + entrybox.h + entrybox.cc + directories.h + directories.cc + terminal.h + terminal.cc + tooltips.h + tooltips.cc + singletons.h + singletons.cc) + + add_library(${module} SHARED + api + api_ext) + + include_directories( + ${Boost_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${GTKMM_INCLUDE_DIRS} + ${GTKSVMM_INCLUDE_DIRS} + ${LCL_INCLUDE_DIRS} + ${LIBCLANG_INCLUDE_DIRS}) + + link_directories( + ${GTKMM_LIBRARY_DIRS} + ${GTKSVMM_LIBRARY_DIRS} + ${Boost_LIBRARY_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${LCL_LIBRARY_DIRS} + ${LIBCLANG_LIBRARY_DIRS}) + + set_target_properties(${module} + PROPERTIES PREFIX "" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/") + + target_link_libraries(${module} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES}) + + target_link_libraries(${project_name} + ${LIBCLANG_LIBRARIES} + ${LCL_LIBRARIES} + ${GTKMM_LIBRARIES} + ${GTKSVMM_LIBRARIES} + ${Boost_LIBRARIES} + ${PYTHON_LIBRARIES}) + + install(TARGETS ${project_name} ${module} + RUNTIME DESTINATION ${bin_install_path} + LIBRARY DESTINATION ${lib_install_path} + ) + +endif(${validation}) diff --git a/src/cmake/Modules/FindLibClangmm.cmake b/src/cmake/Modules/FindLibClangmm.cmake index 0cb9fc5..49f950b 100644 --- a/src/cmake/Modules/FindLibClangmm.cmake +++ b/src/cmake/Modules/FindLibClangmm.cmake @@ -1,20 +1,15 @@ -# - Try to find LCL - - -# Once done this will define # LCL_FOUND - Libclangmm is available # LCL_INCLUDE_DIRS - The libclangmm include directories # LCL_LIBRARIES - -# LCL_DEFINITIONS - Compiler switches required for using libclangmm find_package(PkgConfig) find_path(LCL_INCLUDE_DIR clangmm.h - HINTS "/usr/local/lib/libclangmm/include/" + HINTS "/usr/local/include/libclangmm/" ) find_library(LCL_LIBRARY NAMES clangmm - HINTS "/usr/local/lib/libclangmm/" + HINTS "/usr/local/lib/" ) set(LCL_LIBRARIES ${LCL_LIBRARY} )