diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..91de954
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "external/CatalogueAPI"]
+ path = external/CatalogueAPI
+ url = https://hephaistos.lpp.polytechnique.fr/rhodecode/HG_REPOSITORIES/LPP/INSTRUMENTATION/USERS/JEANDET/CatalogueAPI
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 52bef36..57fa3b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,18 +1,61 @@
-
+cmake_minimum_required(VERSION 3.6)
+project(SciQLOP CXX)
-## Main CMakeLists for SCIQLOP
-CMAKE_MINIMUM_REQUIRED (VERSION 3.6.1)
-cmake_policy(VERSION 3.6)
+include(GNUInstallDirs)
-PROJECT(SCIQLOP)
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake")
+OPTION (CPPCHECK "Analyzes the source code with cppcheck" OFF)
+OPTION (CLANG_TIDY "Analyzes the source code with Clang Tidy" OFF)
+OPTION (IWYU "Analyzes the source code with Include What You Use" OFF)
-#
-# build the CatalogueAPI dependencu
-#
-INCLUDE("extern/CatalogueAPI.cmake")
+set(CMAKE_CXX_STANDARD 14)
-#
-# build the project
-#
-INCLUDE("cmake/sciqlop.cmake")
+set(CMAKE_AUTOMOC ON)
+#https://gitlab.kitware.com/cmake/cmake/issues/15227
+#set(CMAKE_AUTOUIC ON)
+if(POLICY CMP0071)
+ cmake_policy(SET CMP0071 OLD)
+endif()
+set(CMAKE_AUTORCC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+if(NOT DEFINED CMAKE_INSTALL_RPATH_USE_LINK_PATH)
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif()
+if(NOT DEFINED CMAKE_MACOSX_RPATH)
+ set(CMAKE_MACOSX_RPATH TRUE)
+endif()
+
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
+endif()
+
+find_package(Qt5 COMPONENTS Core Widgets Network PrintSupport Svg Test REQUIRED)
+
+IF(CPPCHECK)
+ set(CMAKE_CXX_CPPCHECK "cppcheck;--enable=warning,style")
+ENDIF(CPPCHECK)
+
+IF(CLANG_TIDY)
+ set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-style=file;-checks=*")
+ENDIF(CLANG_TIDY)
+
+IF(IWYU)
+ set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "include-what-you-use")
+ENDIF(IWYU)
+
+enable_testing()
+
+
+find_package(CatalogueAPI CONFIG QUIET)
+if (NOT CatalogueAPI_FOUND)
+ execute_process(COMMAND git submodule update --init external/CatalogueAPI WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+ add_subdirectory(external/CatalogueAPI)
+endif()
+
+add_subdirectory(core)
+add_subdirectory(gui)
+add_subdirectory(app)
+add_subdirectory(plugins)
+add_subdirectory(docs)
diff --git a/README.md b/README.md
index f0da02b..d520005 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,10 @@
-![](gui/resources/icones/sciqlop2PNG_1024.png){:.some-css-class style="width: 20%"}
+
+
+
+
+
+
+
# Overview
diff --git a/analyzer/cmake/FindClangAnalyzer.cmake b/analyzer/cmake/FindClangAnalyzer.cmake
deleted file mode 100644
index b13c0a7..0000000
--- a/analyzer/cmake/FindClangAnalyzer.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-# - try to find scan-build tool
-#
-# Cache Variables:
-# CLANGANALYZER_ROOT_DIR
-# CLANGANALYZER_EXECUTABLE
-#
-# Non-cache variables you might use in your CMakeLists.txt:
-# CLANGANALYZER_FOUND
-#
-# Requires these CMake modules:
-# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
-
-file(TO_CMAKE_PATH "${CLANGANALYZER_ROOT_DIR}" CLANGANALYZER_ROOT_DIR)
-set(CLANGANALYZER_ROOT_DIR
- "${CLANGANALYZER_ROOT_DIR}"
- CACHE
- PATH
- "Path to search for scan-build")
-
-if(CLANGANALYZER_EXECUTABLE AND NOT EXISTS "${CLANGANALYZER_EXECUTABLE}")
- set(CLANGANALYZER_EXECUTABLE "notfound" CACHE PATH FORCE "")
-endif()
-
-# If we have a custom path, look there first.
-if(CLANGANALYZER_ROOT_DIR)
- find_program(CLANGANALYZER_EXECUTABLE
- NAMES
- scan-build
- PATHS
- "${CLANGANALYZER_ROOT_DIR}"
- PATH_SUFFIXES
- bin
- NO_DEFAULT_PATH)
-endif()
-
-find_program(CLANGANALYZER_EXECUTABLE NAMES scan-build)
-
-IF(NOT("${CLANGANALYZER_EXECUTABLE}" STREQUAL ""))
- set(CLANGANALYZER_FOUND TRUE)
-endif()
-
-mark_as_advanced(CLANGANALYZER_EXECUTABLE)
diff --git a/analyzer/cmake/Findcppcheck.cmake b/analyzer/cmake/Findcppcheck.cmake
deleted file mode 100644
index 2dcf799..0000000
--- a/analyzer/cmake/Findcppcheck.cmake
+++ /dev/null
@@ -1,167 +0,0 @@
-# - try to find cppcheck tool
-#
-# Cache Variables:
-# CPPCHECK_EXECUTABLE
-#
-# Non-cache variables you might use in your CMakeLists.txt:
-# CPPCHECK_FOUND
-# CPPCHECK_POSSIBLEERROR_ARG
-# CPPCHECK_UNUSEDFUNC_ARG
-# CPPCHECK_STYLE_ARG
-# CPPCHECK_QUIET_ARG
-# CPPCHECK_INCLUDEPATH_ARG
-# CPPCHECK_FAIL_REGULAR_EXPRESSION
-# CPPCHECK_WARN_REGULAR_EXPRESSION
-# CPPCHECK_MARK_AS_ADVANCED - whether to mark our vars as advanced even
-# if we don't find this program.
-#
-# Requires these CMake modules:
-# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
-#
-# Original Author:
-# 2009-2010 Ryan Pavlik
-# http://academic.cleardefinition.com
-# Iowa State University HCI Graduate Program/VRAC
-#
-# Copyright Iowa State University 2009-2010.
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or copy at
-# http://www.boost.org/LICENSE_1_0.txt)
-
-file(TO_CMAKE_PATH "${CPPCHECK_ROOT_DIR}" CPPCHECK_ROOT_DIR)
-set(CPPCHECK_ROOT_DIR
- "${CPPCHECK_ROOT_DIR}"
- CACHE
- PATH
- "Path to search for cppcheck")
-
-# cppcheck app bundles on Mac OS X are GUI, we want command line only
-set(_oldappbundlesetting ${CMAKE_FIND_APPBUNDLE})
-set(CMAKE_FIND_APPBUNDLE NEVER)
-
-if(CPPCHECK_EXECUTABLE AND NOT EXISTS "${CPPCHECK_EXECUTABLE}")
- set(CPPCHECK_EXECUTABLE "notfound" CACHE PATH FORCE "")
-endif()
-
-# If we have a custom path, look there first.
-if(CPPCHECK_ROOT_DIR)
- find_program(CPPCHECK_EXECUTABLE
- NAMES
- cppcheck
- cli
- PATHS
- "${CPPCHECK_ROOT_DIR}"
- PATH_SUFFIXES
- cli
- NO_DEFAULT_PATH)
-endif()
-
-find_program(CPPCHECK_EXECUTABLE NAMES cppcheck)
-
-# Restore original setting for appbundle finding
-set(CMAKE_FIND_APPBUNDLE ${_oldappbundlesetting})
-
-# Find out where our test file is
-get_filename_component(_cppcheckmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
-set(_cppcheckdummyfile "${_cppcheckmoddir}/Findcppcheck.cpp")
-if(NOT EXISTS "${_cppcheckdummyfile}")
- message(FATAL_ERROR
- "Missing file ${_cppcheckdummyfile} - should be alongside Findcppcheck.cmake, can be found at https://github.com/rpavlik/cmake-modules")
-endif()
-
-function(_cppcheck_test_arg _resultvar _arg)
- if(NOT CPPCHECK_EXECUTABLE)
- set(${_resultvar} NO)
- return()
- endif()
- execute_process(COMMAND
- "${CPPCHECK_EXECUTABLE}"
- "${_arg}"
- "--quiet"
- "${_cppcheckdummyfile}"
- RESULT_VARIABLE
- _cppcheck_result
- OUTPUT_QUIET
- ERROR_QUIET)
- if("${_cppcheck_result}" EQUAL 0)
- set(${_resultvar} YES PARENT_SCOPE)
- else()
- set(${_resultvar} NO PARENT_SCOPE)
- endif()
-endfunction()
-
-function(_cppcheck_set_arg_var _argvar _arg)
- if("${${_argvar}}" STREQUAL "")
- _cppcheck_test_arg(_cppcheck_arg "${_arg}")
- if(_cppcheck_arg)
- set(${_argvar} "${_arg}" PARENT_SCOPE)
- endif()
- endif()
-endfunction()
-
-if(CPPCHECK_EXECUTABLE)
-
- # Check for the two types of command line arguments by just trying them
- _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--enable=style")
- _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--style")
- if("${CPPCHECK_STYLE_ARG}" STREQUAL "--enable=style")
-
- _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG
- "--enable=unusedFunction")
- _cppcheck_set_arg_var(CPPCHECK_INFORMATION_ARG "--enable=information")
- _cppcheck_set_arg_var(CPPCHECK_MISSINGINCLUDE_ARG
- "--enable=missingInclude")
- _cppcheck_set_arg_var(CPPCHECK_POSIX_ARG "--enable=posix")
- _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG
- "--enable=possibleError")
- _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--enable=all")
-
- if(MSVC)
- set(CPPCHECK_TEMPLATE_ARG --template vs)
- set(CPPCHECK_FAIL_REGULAR_EXPRESSION "[(]error[)]")
- set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
- elseif(CMAKE_COMPILER_IS_GNUCXX)
- set(CPPCHECK_TEMPLATE_ARG --template gcc)
- set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
- set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
- else()
- set(CPPCHECK_TEMPLATE_ARG --template gcc)
- set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
- set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
- endif()
- elseif("${CPPCHECK_STYLE_ARG}" STREQUAL "--style")
- # Old arguments
- _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG "--unused-functions")
- _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--all")
- set(CPPCHECK_FAIL_REGULAR_EXPRESSION "error:")
- set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
- else()
- # No idea - some other issue must be getting in the way
- message(STATUS
- "WARNING: Can't detect whether CPPCHECK wants new or old-style arguments!")
- endif()
-
- set(CPPCHECK_QUIET_ARG "--quiet")
- set(CPPCHECK_INCLUDEPATH_ARG "-I")
-
-endif()
-
-set(CPPCHECK_ALL
- "${CPPCHECK_EXECUTABLE} ${CPPCHECK_POSSIBLEERROR_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path")
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(cppcheck
- DEFAULT_MSG
- CPPCHECK_ALL
- CPPCHECK_EXECUTABLE
- CPPCHECK_POSSIBLEERROR_ARG
- CPPCHECK_UNUSEDFUNC_ARG
- CPPCHECK_STYLE_ARG
- CPPCHECK_INCLUDEPATH_ARG
- CPPCHECK_QUIET_ARG)
-
-if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED)
- mark_as_advanced(CPPCHECK_ROOT_DIR)
-endif()
-
-mark_as_advanced(CPPCHECK_EXECUTABLE)
diff --git a/analyzer/cmake/Findcppcheck.cpp b/analyzer/cmake/Findcppcheck.cpp
deleted file mode 100644
index 84350db..0000000
--- a/analyzer/cmake/Findcppcheck.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \file Findcppcheck.cpp
- * \brief Dummy C++ source file used by CMake module Findcppcheck.cmake
- *
- * \author
- * Ryan Pavlik, 2009-2010
- *
- * http://academic.cleardefinition.com/
- *
- */
-
-
-
-int main(int argc, char* argv[]) {
- return 0;
-}
diff --git a/analyzer/launch-clang-analyzer-linux.sh b/analyzer/launch-clang-analyzer-linux.sh
deleted file mode 100644
index 63ce517..0000000
--- a/analyzer/launch-clang-analyzer-linux.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-
-export CC=/usr/libexec/ccc-analyzer
-export CXX=/usr/libexec/c++-analyzer
-export CCC_CC=clang
-export CCC_CXX=clang++
-export LD=clang++
-export CCC_ANALYZER_VERBOSE=1
-
-LD_LIBRARY_PATH=/usr/local/lib64
-export LD_LIBRARY_PATH
-
-rm -rf build_clang-analyzer
-mkdir build_clang-analyzer
-cd build_clang-analyzer
-
-scan-build cmake -DCMAKE_CXX_COMPILER=clazy -DENABLE_ANALYSIS=false -DENABLE_CPPCHECK=false -DENABLE_FORMATTING=false -DENABLE_CHECKSTYLE=false -BUILD_DOCUMENTATION=false -BUILD_TESTS=false -DCMAKE_BUILD_TYPE=Debug ../../SCIQLOP-Initialisation/
-
-scan-build -o clang-analyzer-output make -j2
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 251e0a7..e381645 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -1,157 +1,34 @@
+include_directories(include)
-## sciqlop - CMakeLists.txt
-SET(EXECUTABLE_NAME "sciqlop")
-SCIQLOP_SET_TO_PARENT_SCOPE(EXECUTABLE_NAME)
-SET(SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
-SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
-SET(UI_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/ui)
-SET(RES_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/resources)
+FILE (GLOB_RECURSE app_SRCS
+ include/*.h
+ src/*.cpp
+ resources/*.qrc
+ )
-# Include gui directory
-include_directories("${INCLUDES_DIR}")
-
-#
-# Find Qt modules
-#
-SCIQLOP_FIND_QT(Core Widgets)
-
-
-#
-# Find dependent libraries
-# ========================
-find_package(sciqlop-gui)
-
-SET(LIBRARIES ${SCIQLOP-GUI_LIBRARIES})
-SET(EXTERN_SHARED_LIBRARIES)
-
-INCLUDE_DIRECTORIES(${SCIQLOP-GUI_INCLUDE_DIR})
-
-# Add sqpcore to the list of libraries to use
-list(APPEND LIBRARIES ${SQPCORE_LIBRARY_NAME})
-
-# Include core directory
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../core/include")
-
-# Add dependent shared libraries
-list(APPEND SHARED_LIBRARIES ${SQPCORE_SHARED_LIBRARIES})
-
-# Retrieve the location of the dynamic library to copy it to the output path
-#get_property(sqpcoreLocation TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY LOCATION)
-list(APPEND SHARED_LIBRARIES_FROM_TARGETS ${sqpcoreLocation})
-
-# Ui files
-FILE (GLOB_RECURSE PROJECT_FORMS ${UI_FOLDER}/*.ui)
-
-#
-# Compile the application
-#
-FILE (GLOB_RECURSE APPLICATION_SOURCES
- ${INCLUDES_DIR}/*.h
- ${SOURCES_DIR}/*.c
- ${SOURCES_DIR}/*.cpp
- ${SOURCES_DIR}/*.h
- ${PROJECT_FORMS})
-
-FILE (GLOB_RECURSE APPLICATION_RESOURCES ${RES_FOLDER}/*.qrc)
-
-QT5_ADD_RESOURCES(RCC_HDRS ${APPLICATION_RESOURCES} )
-
-QT5_WRAP_UI(UIS_HDRS
- ${PROJECT_FORMS}
+QT5_WRAP_UI(UiGenerated_SRCS
+ ui/MainWindow.ui
)
-
-ADD_EXECUTABLE(${EXECUTABLE_NAME} ${APPLICATION_SOURCES} ${RCC_HDRS} ${UIS_HDRS})
-set_property(TARGET ${EXECUTABLE_NAME} PROPERTY CXX_STANDARD 14)
-set_property(TARGET ${EXECUTABLE_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
-target_link_libraries(${EXECUTABLE_NAME}
- ${LIBRARIES})
-
-INSTALL(TARGETS ${EXECUTABLE_NAME}
- RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
- LIBRARY DESTINATION ${INSTALL_BINARY_DIR}
- ARCHIVE DESTINATION ${INSTALL_BINARY_DIR}
+add_executable(sciqlopapp ${app_SRCS} ${UiGenerated_SRCS})
+if(NOT BUILD_SHARED_LIBS)
+ add_definitions(-DQT_STATICPLUGIN)
+ target_link_libraries(sciqlopapp mockplugin)
+ target_link_libraries(sciqlopapp amdaplugin)
+endif()
+
+target_link_libraries(sciqlopapp
+ Qt5::Core
+ Qt5::Widgets
+ Qt5::Network
+ Qt5::PrintSupport
+ Qt5::Svg
+ sciqlopgui
+ sciqlopcore
)
-# Link with Qt5 modules
-qt5_use_modules(${EXECUTABLE_NAME} Core Widgets)
-
-
-add_dependencies(${EXECUTABLE_NAME} ${SQPGUI_LIBRARY_NAME} ${SQPCORE_LIBRARY_NAME})
-
-
-
-# Add the files to the list of files to be analyzed
-LIST(APPEND CHECKSTYLE_INPUT_FILES ${APPLICATION_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
-# Vera++ exclusion files
-LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/vera-exclusions/exclusions.txt)
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
-
-#
-# Compile the tests
-#
-IF(BUILD_TESTS)
-
- INCLUDE_DIRECTORIES(${SOURCES_DIR})
- FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
- FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
- SET( TEST_LIBRARIES ${LIBRARIES})
-
- FOREACH( testFile ${TESTS_SOURCES} )
- GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
- GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
-
- # Add to the list of sources files all the sources in the same
- # directory that aren't another test
- FILE (GLOB currentTestSources
- ${testDirectory}/*.c
- ${testDirectory}/*.cpp
- ${testDirectory}/*.h)
- LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
- LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
-
- ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
- TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES})
- qt5_use_modules(${testName} Test)
-
- ADD_TEST( NAME ${testName} COMMAND ${testName} )
-
- SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName})
- ENDFOREACH( testFile )
-
- LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
- LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
- LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
-
- SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
-ENDIF(BUILD_TESTS)
-#
-# Set the files that must be formatted by clang-format.
-#
-LIST (APPEND FORMATTING_INPUT_FILES ${APPLICATION_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
+install(TARGETS sciqlopapp DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(FILES resources/SciQLOP.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/)
+install(FILES resources/sciqlopLOGO.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/SciQLOP/icons/)
-#
-# Set the directories that doxygen must browse to generate the
-# documentation.
-#
-# Source directories:
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
-# Source directories to exclude from the documentation generation
-#LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
-#
-# Set the directories with the sources to analyze and propagate the
-# modification to the parent scope
-#
-# Source directories to analyze:
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
-# Source directories to exclude from the analysis
-#LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
diff --git a/app/resources/SciQLOP.desktop b/app/resources/SciQLOP.desktop
new file mode 100644
index 0000000..d928f6c
--- /dev/null
+++ b/app/resources/SciQLOP.desktop
@@ -0,0 +1,18 @@
+[Desktop Entry]
+Version=1.0
+Name=QLop
+Name[en_US]=SciQLOP
+
+Type=Application
+GenericName=SciQLOP
+Comment=SCIentific Qt application for Learning from Observations of Plasmas
+
+Exec=sciqlopapp
+Icon=/usr/share/SciQLOP/icons/sciqlopLOGO.svg
+Terminal=false
+
+Categories=Qt;Education;Science;
+
+#MimeType=text/x-python;
+
+
diff --git a/app/src/Main.cpp b/app/src/Main.cpp
index 8cc71ae..1e3e10c 100644
--- a/app/src/Main.cpp
+++ b/app/src/Main.cpp
@@ -25,7 +25,7 @@
#include
#include
-#include
+#include
#include
#include
diff --git a/app/src/MainWindow.cpp b/app/src/MainWindow.cpp
index 8698463..d195733 100644
--- a/app/src/MainWindow.cpp
+++ b/app/src/MainWindow.cpp
@@ -133,7 +133,7 @@ MainWindow::MainWindow(QWidget *parent)
auto openInspector = [this](bool checked, bool right, auto action) {
- action->setIcon(QIcon{(checked xor right) ? ":/icones/next.png" : ":/icones/previous.png"});
+ action->setIcon(QIcon{(checked ^ right) ? ":/icones/next.png" : ":/icones/previous.png"});
auto &lastInspectorSize
= right ? impl->m_LastOpenRightInspectorSize : impl->m_LastOpenLeftInspectorSize;
diff --git a/cmake/FindCatalogueAPI.cmake b/cmake/FindCatalogueAPI.cmake
deleted file mode 100644
index e1ec0e8..0000000
--- a/cmake/FindCatalogueAPI.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# - Try to find CatalogueAPI Module
-# Once done this will define
-# CATALOGUEAPI_FOUND - System has CatalogueAPI
-# CATALOGUEAPI_INCLUDE_DIRS - The CatalogueAPI include directories
-# CATALOGUEAPI_LIBRARIES - The libraries needed to use CatalogueAPI
-# CATALOGUEAPI_SHARED_LIBRARIES - The shared libraries for CatalogueAPI
-
-set(CATALOGUEAPI_ROOT_DIR "${CATALOGUEAPI_EXTERN_FOLDER}"
- CACHE PATHS
- "Path to the installation of CatalogueAPI"
- ${libRootDirForceValue})
-
-find_path(CATALOGUEAPI_INCLUDE_DIR CatalogueDao.h
- HINTS ${CATALOGUEAPI_ROOT_DIR} ${CATALOGUEAPI_EXTERN_FOLDER}
- PATH_SUFFIXES src )
-
-find_library(CATALOGUEAPI_LIBRARY NAMES CatalogueAPI
- HINTS ${CATALOGUEAPI_ROOT_DIR} ${CATALOGUEAPI_EXTERN_FOLDER}
- PATH_SUFFIXES lib)
-
-set(CATALOGUEAPI_LIBRARIES ${CATALOGUEAPI_LIBRARY} )
-set(CATALOGUEAPI_INCLUDE_DIRS ${CATALOGUEAPI_INCLUDE_DIR} )
-
-include(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set CATALOGUEAPI_FOUND to TRUE
-# if all listed variables are TRUE
-find_package_handle_standard_args(CatalogueAPI FOUND_VAR CATALOGUEAPI_FOUND
- REQUIRED_VARS CATALOGUEAPI_LIBRARY CATALOGUEAPI_INCLUDE_DIR)
-mark_as_advanced(CATALOGUEAPI_INCLUDE_DIR CATALOGUEAPI_LIBRARY )
diff --git a/cmake/compiler/compiler.cmake b/cmake/compiler/compiler.cmake
deleted file mode 100644
index 63c661c..0000000
--- a/cmake/compiler/compiler.cmake
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# compiler.cmake : configure the compilation flags
-#
-
-message("Compiler id: ${CMAKE_CXX_COMPILER_ID}")
-IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- MESSAGE("Compiler supported")
-ELSEIF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- MESSAGE("Compiler supported")
-ELSEIF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
- INCLUDE("cmake/compiler/compiler_msvc.cmake")
-ELSE()
- MESSAGE(FATAL_ERROR "Compiler not supported")
-ENDIF()
diff --git a/cmake/compiler/compiler_msvc.cmake b/cmake/compiler/compiler_msvc.cmake
deleted file mode 100644
index 32d15fa..0000000
--- a/cmake/compiler/compiler_msvc.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# compiler_msvc.cmake : specific configuration for MSVC compilers
-#
-
-ADD_DEFINITIONS( /D _USE_MATH_DEFINES)
-ADD_DEFINITIONS( /D _VARIADIC_MAX=10 )
-ADD_DEFINITIONS( /D _CRT_SECURE_NO_WARNINGS)
diff --git a/cmake/find_libs.cmake b/cmake/find_libs.cmake
deleted file mode 100644
index f797685..0000000
--- a/cmake/find_libs.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# findslibs.cmake
-#
-
-#
-# Qt
-#
-# Find Qt here so that a message is displayed in the console when executing
-# cmake, but each application must call SCIQLOP_FIND_QT() to load the Qt modules that
-# it needs.
-FIND_PACKAGE(Qt5Core REQUIRED)
-FIND_PACKAGE(Qt5Test REQUIRED)
-FIND_PACKAGE(Qt5Gui REQUIRED)
-
-#
-# doxygen tools
-#
-FIND_PACKAGE(Doxygen)
-
-#
-# Analyzer tools
-#
-LIST( APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/analyzer/cmake")
-FIND_PACKAGE(cppcheck)
-FIND_PACKAGE(ClangAnalyzer)
-
-#
-# Formatting tools
-#
-LIST( APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/formatting/cmake")
-FIND_PACKAGE(vera++)
-FIND_PACKAGE(ClangFormat)
diff --git a/cmake/sciqlop.cmake b/cmake/sciqlop.cmake
deleted file mode 100644
index bf62108..0000000
--- a/cmake/sciqlop.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# sciqlop.cmake
-#
-
-#
-# Update the CMAKE_MODULE_PATH to use custom FindXXX files
-#
-LIST( APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/CMakeModules/")
-
-# Include the sciqlop version file
-INCLUDE("cmake/sciqlop_version.cmake")
-
-# Include the sciqlop cmake macros
-INCLUDE("cmake/sciqlop_macros.cmake")
-
-#
-# Define the project parameters
-#
-INCLUDE("cmake/sciqlop_params.cmake")
-
-#
-# Configure the compiler
-#
-#INCLUDE("cmake/compiler/compiler.cmake")
-
-#
-# Find all necessary dependencies
-#
-INCLUDE("cmake/find_libs.cmake")
-
-#
-# Compile all applications
-#
-INCLUDE("cmake/sciqlop_applications.cmake")
-
-#
-# Package creation using CPack
-#
-INCLUDE("cmake/sciqlop_package.cmake")
diff --git a/cmake/sciqlop_applications.cmake b/cmake/sciqlop_applications.cmake
deleted file mode 100644
index 3509844..0000000
--- a/cmake/sciqlop_applications.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-
-if(BUILD_TESTS)
- INCLUDE ("cmake/sciqlop_code_coverage.cmake")
- APPEND_COVERAGE_COMPILER_FLAGS()
-endif(BUILD_TESTS)
-
-#
-# Compile the diffents modules
-#
-set(sciqlop-plugin_DIR "${CMAKE_SOURCE_DIR}/plugin/cmake")
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-plugin_DIR}")
-ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/plugin")
-
-set(sciqlop-core_DIR "${CMAKE_SOURCE_DIR}/core/cmake")
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-core_DIR}")
-ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/core")
-
-set(sciqlop-gui_DIR "${CMAKE_SOURCE_DIR}/gui/cmake")
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-gui_DIR}")
-ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/gui")
-
-ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/app")
-
-OPTION (BUILD_PLUGINS "Build the plugins" OFF)
-IF(BUILD_PLUGINS)
- set(sciqlop-mockplugin_DIR "${CMAKE_SOURCE_DIR}/plugins/mockplugin/cmake")
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-mockplugin_DIR}")
- ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/plugins/mockplugin")
-
- # Sets AMDA server that will be used during execution.
- # Available values are:
- # - "default": default AMDA server
- # - "amdatest": AMDA test server
- # - "hybrid": use both the default server and the test server (the server used is relative to each product, according to its "server" property in the JSON file)
- # - "localhost": use local AMDA server
- # Any other value will lead to the use of the default server
- ADD_DEFINITIONS(-DSCIQLOP_AMDA_SERVER="hybrid")
-
- set(sciqlop-amda_DIR "${CMAKE_SOURCE_DIR}/plugins/amda/cmake")
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${sciqlop-amda_DIR}")
- ADD_SUBDIRECTORY("${CMAKE_SOURCE_DIR}/plugins/amda")
-
- # Temporary target to copy to plugins dir
- find_package(sciqlop-mockplugin)
- find_package(sciqlop-amda)
- ADD_CUSTOM_TARGET(plugins
- COMMAND ${CMAKE_COMMAND} -E copy ${SCIQLOP-MOCKPLUGIN_LIBRARIES} "${LIBRARY_OUTPUT_PATH}/plugins/${SCIQLOP-MOCKPLUGIN_LIBRARIES_NAME}"
- COMMAND ${CMAKE_COMMAND} -E copy ${SCIQLOP-AMDA_LIBRARIES} "${LIBRARY_OUTPUT_PATH}/plugins/${SCIQLOP-AMDA_LIBRARIES_NAME}"
- )
-ENDIF(BUILD_PLUGINS)
-
-# LOGGER
-set(QTLOGGING_INI_FILE "${CMAKE_SOURCE_DIR}/config/QtProject/qtlogging.ini")
-FILE(COPY ${QTLOGGING_INI_FILE} DESTINATION ${CONFIG_OUTPUT_PATH})
-
-
-#
-# Code formatting
-#
-# Vera++ exclusion files
-LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/formatting/vera-exclusions/exclusions.txt)
-#SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
-INCLUDE ("cmake/sciqlop_formatting.cmake")
-
-#
-# Documentation generation
-#
-INCLUDE ("cmake/sciqlop_doxygen.cmake")
-
-#
-# Source code analysis
-#
-INCLUDE ("cmake/sciqlop_code_analysis.cmake")
-INCLUDE ("cmake/sciqlop_code_cppcheck.cmake")
diff --git a/cmake/sciqlop_code_analysis.cmake b/cmake/sciqlop_code_analysis.cmake
deleted file mode 100644
index 45418dc..0000000
--- a/cmake/sciqlop_code_analysis.cmake
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# sciqlop_code_analysis.cmake
-
-# Launch code source analysis with CLANGANALYZER. Can be activated with the
-# ENABLE_ANALYSIS option.
-#
-# The following CACHE variables are available:
-# * CLANGANALYZER_EXTRA_ARGS: extra arguments for CLANGANALYZER;
-# * CLANGANALYZER_OUTPUT: path to the xml report of CLANGANALYZER.
-#
-# The following variables are used (must be set by the cmake file calling this
-# one):
-# * ANALYSIS_INPUT_DIRS: directories to analyze;
-# * ANALYSIS_EXCLUDE_DIRS: directories to exclude from the analysis.
-#
-
-#
-# Analyze the source code with CLANGANALYZER
-#
-OPTION (ENABLE_ANALYSIS "Analyze the source code with clang_analyze" ON)
-IF (ENABLE_ANALYSIS)
-
- # Make sure CLANGANALYZER has been found, otherwise the source code can't be
- # analyzed
- IF (CLANGANALYZER_FOUND)
-
- SET (CLANGANALYZER_OUTPUT "${CMAKE_BINARY_DIR}/clang-analyzer-ouput"
- CACHE STRING "Output file for the CLANGANALYZER report")
- MARK_AS_ADVANCED (CLANGANALYZER_OUTPUT)
-
- SET (CLANGANALYZER_EXTRA_ARGS -o ${CLANGANALYZER_OUTPUT}
- CACHE STRING "Extra arguments for CLANGANALYZER")
- MARK_AS_ADVANCED (CLANGANALYZER_EXTRA_ARGS)
-
- # Add the analyze target to launch CLANGANALYZER
- ADD_CUSTOM_TARGET (analyze
- COMMAND
- sh ${CMAKE_CURRENT_SOURCE_DIR}/analyzer/launch-clang-analyzer-linux.sh
- )
-
- ELSE (CLANGANALYZER_FOUND)
- MESSAGE (STATUS "The source code won't be analyzed - CLANGANALYZER not found")
- ENDIF (CLANGANALYZER_FOUND)
-ENDIF (ENABLE_ANALYSIS)
diff --git a/cmake/sciqlop_code_coverage.cmake b/cmake/sciqlop_code_coverage.cmake
deleted file mode 100644
index 5184084..0000000
--- a/cmake/sciqlop_code_coverage.cmake
+++ /dev/null
@@ -1,191 +0,0 @@
-# Copyright (c) 2012 - 2017, Lars Bilke
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# 3. Neither the name of the copyright holder nor the names of its contributors
-# may be used to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# CHANGES:
-#
-# 2012-01-31, Lars Bilke
-# - Enable Code Coverage
-#
-# 2013-09-17, Joakim Söderberg
-# - Added support for Clang.
-# - Some additional usage instructions.
-#
-# 2016-02-03, Lars Bilke
-# - Refactored functions to use named parameters
-#
-# 2017-06-02, Lars Bilke
-# - Merged with modified version from github.com/ufz/ogs
-#
-#
-# USAGE:
-#
-# 1. Copy this file into your cmake modules path.
-#
-# 2. Add the following line to your CMakeLists.txt:
-# include(CodeCoverage)
-#
-# 3. Append necessary compiler flags:
-# APPEND_COVERAGE_COMPILER_FLAGS()
-#
-# 4. If you need to exclude additional directories from the report, specify them
-# using the COVERAGE_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE.
-# Example:
-# set(COVERAGE_EXCLUDES 'dir1/*' 'dir2/*')
-#
-# 5. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target
-# which runs your test executable and produces a lcov code coverage report:
-# Example:
-# SETUP_TARGET_FOR_COVERAGE(
-# my_coverage_target # Name for custom target.
-# test_driver # Name of the test driver executable that runs the tests.
-# # NOTE! This should always have a ZERO as exit code
-# # otherwise the coverage generation will not complete.
-# coverage # Name of output directory.
-# )
-#
-# 6. Build a Debug build:
-# cmake -DCMAKE_BUILD_TYPE=Debug ..
-# make
-# make my_coverage_target
-#
-
-include(CMakeParseArguments)
-
-# Check prereqs
-find_program( GCOV_PATH gcov )
-find_program( LCOV_PATH lcov )
-find_program( GENHTML_PATH genhtml )
-find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
-find_program( SIMPLE_PYTHON_EXECUTABLE python )
-
-if(NOT GCOV_PATH)
- message(FATAL_ERROR "gcov not found! Aborting...")
-endif() # NOT GCOV_PATH
-
-if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
- if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
- message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
- endif()
-elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
- message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
-endif()
-
-set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
- CACHE INTERNAL "")
-
-set(CMAKE_CXX_FLAGS_COVERAGE
- ${COVERAGE_COMPILER_FLAGS}
- CACHE STRING "Flags used by the C++ compiler during coverage builds."
- FORCE )
-set(CMAKE_C_FLAGS_COVERAGE
- ${COVERAGE_COMPILER_FLAGS}
- CACHE STRING "Flags used by the C compiler during coverage builds."
- FORCE )
-set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
- ""
- CACHE STRING "Flags used for linking binaries during coverage builds."
- FORCE )
-set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
- ""
- CACHE STRING "Flags used by the shared libraries linker during coverage builds."
- FORCE )
-mark_as_advanced(
- CMAKE_CXX_FLAGS_COVERAGE
- CMAKE_C_FLAGS_COVERAGE
- CMAKE_EXE_LINKER_FLAGS_COVERAGE
- CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
-
-if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
- message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
-endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
-
-if(CMAKE_COMPILER_IS_GNUCXX)
- link_libraries(gcov)
-else()
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
-endif()
-
-# Defines a target for running and collection code coverage information
-# Builds dependencies, runs the given executable and outputs reports.
-# NOTE! The executable should always have a ZERO as exit code otherwise
-# the coverage generation will not complete.
-#
-# SETUP_TARGET_FOR_COVERAGE(
-# NAME testrunner_coverage # New target name
-# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
-# DEPENDENCIES testrunner # Dependencies to build first
-# )
-function(SETUP_TARGET_FOR_COVERAGE)
-
- set(options NONE)
- set(oneValueArgs NAME TARGET OUTPUT)
- set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
- cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
- if(NOT LCOV_PATH)
- message(FATAL_ERROR "lcov not found! Aborting...")
- endif() # NOT LCOV_PATH
-
- if(NOT GENHTML_PATH)
- message(FATAL_ERROR "genhtml not found! Aborting...")
- endif() # NOT GENHTML_PATH
-
- # Setup target
- add_custom_target(${Coverage_TARGET}
-
- # Cleanup lcov
- COMMAND ${LCOV_PATH} --directory . --zerocounters
-
- # Run tests
- COMMAND ${Coverage_EXECUTABLE}
-
- # Capturing lcov counters and generating report
- COMMAND ${LCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info
- COMMAND ${LCOV_PATH} --remove ${Coverage_NAME}.info ${COVERAGE_EXCLUDES} --output-file ${Coverage_NAME}.info.cleaned
- COMMAND ${GENHTML_PATH} -o ${Coverage_OUTPUT} ${Coverage_NAME}.info.cleaned
- COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.info ${Coverage_NAME}.info.cleaned
-
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
- DEPENDS ${Coverage_DEPENDENCIES}
- COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
- )
-
- # Show info where to find the report
-# message("Nome de la target ${Coverage_TARGET}")
-# add_custom_command(TARGET ${Coverage_TARGET} POST_BUILD
-# COMMAND ;
-# COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
-# )
-
-endfunction()
-
-function(APPEND_COVERAGE_COMPILER_FLAGS)
- set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
- message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
-endfunction() # APPEND_COVERAGE_COMPILER_FLAGS
diff --git a/cmake/sciqlop_code_cppcheck.cmake b/cmake/sciqlop_code_cppcheck.cmake
deleted file mode 100644
index 772d0eb..0000000
--- a/cmake/sciqlop_code_cppcheck.cmake
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# sciqlop_code_analysis.cmake
-
-# Launch code source analysis with cppcheck. Can be activated with the
-# ENABLE_CPPCHECK option.
-#
-# The following CACHE variables are available:
-# * CPPCHECK_EXTRA_ARGS: extra arguments for cppcheck;
-# * CPPCHECK_OUTPUT: path to the xml report of cppcheck.
-#
-# The following variables are used (must be set by the cmake file calling this
-# one):
-# * ANALYSIS_INPUT_DIRS: directories to analyze;
-# * ANALYSIS_EXCLUDE_DIRS: directories to exclude from the analysis.
-#
-
-#
-# Analyze the source code with cppcheck
-#
-OPTION (ENABLE_CPPCHECK "Analyze the source code with cppcheck" ON)
-IF (ENABLE_CPPCHECK)
-
- # Make sure cppcheck has been found, otherwise the source code can't be
- # analyzed
- IF (CPPCHECK_FOUND)
- SET (CPPCHECK_EXTRA_ARGS --inline-suppr --xml --xml-version=2 --enable="warning,style" --force -v
- CACHE STRING "Extra arguments for cppcheck")
- MARK_AS_ADVANCED (CPPCHECK_EXTRA_ARGS)
-
- SET (CPPCHECK_OUTPUT "${CMAKE_BINARY_DIR}/cppcheck-report.xml"
- CACHE STRING "Output file for the cppcheck report")
- MARK_AS_ADVANCED (CPPCHECK_OUTPUT)
-
- SET (CPPCHECK_EXCLUDE_DIRS)
- FOREACH (dir ${ANALYSIS_EXCLUDE_DIRS})
- LIST (APPEND CPPCHECK_EXCLUDE_DIRS "-i${dir}")
- ENDFOREACH ()
-
- # Add the analyze target to launch cppcheck
- ADD_CUSTOM_TARGET (cppcheck
- COMMAND
- ${CPPCHECK_EXECUTABLE}
- ${CPPCHECK_EXTRA_ARGS}
- ${ANALYSIS_INPUT_DIRS}
- ${CPPCHECK_EXCLUDE_DIRS}
- 2> ${CPPCHECK_OUTPUT}
- )
-
- ELSE (CPPCHECK_FOUND)
- MESSAGE (STATUS "The source code won't be analyzed - Cppcheck not found")
- ENDIF (CPPCHECK_FOUND)
-ENDIF (ENABLE_CPPCHECK)
diff --git a/cmake/sciqlop_doxygen.cmake b/cmake/sciqlop_doxygen.cmake
deleted file mode 100644
index e1fe072..0000000
--- a/cmake/sciqlop_doxygen.cmake
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# sciqlop_doxygen.cmake
-#
-# Launch doxygen generation. Can be activated with the BUILD_DOCUMENTATION
-# option.
-#
-# The following CACHE variables are available:
-# * DOXYGEN_LANGUAGE: Documentation language;
-#
-# The following variables are used (must be set by the cmake file calling this
-# one):
-# * DOXYGEN_INPUT_DIRS: directories to document;
-# * DOXYGEN_EXCLUDE_PATTERNS: directories to exclude from the documentation
-# generation.
-#
-
-#
-# Compile the doxygen documentation
-#
-OPTION (BUILD_DOCUMENTATION "Build the doxygen-based documentation" ON)
-IF (BUILD_DOCUMENTATION)
-
- # Make sure Doxygen is on the system, if not then the documentation can't be built
- IF (DOXYGEN_FOUND)
-
- # Append the global docs directory to the list of input directories
- LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_SOURCE_DIR}/docs")
- LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_BINARY_DIR}/gendocs")
-
- # Exclude the "*_private.h" files by default
- list(APPEND DOXYGEN_EXCLUDE_PATTERNS "*_private.h")
- # Exclude cpp files
- list(APPEND DOXYGEN_EXCLUDE_PATTERNS "*.cpp")
-
- # Set the variables used by the Doxyfile template
- SET (PROJECT_NAME "${CMAKE_PROJECT_NAME}")
- SET (INPUT_DIRECTORIES)
- FOREACH (dir ${DOXYGEN_INPUT_DIRS})
- SET (INPUT_DIRECTORIES "${INPUT_DIRECTORIES}\\ \n \"${dir}\" ")
- ENDFOREACH ()
- SET (EXCLUDE_PATTERNS)
- FOREACH (pattern ${DOXYGEN_EXCLUDE_PATTERNS})
- SET (EXCLUDE_PATTERNS "${EXCLUDE_PATTERNS}\\ \n \"${pattern}\" ")
- ENDFOREACH ()
-
- SET (INDEX_LIST_MODULES "\n")
- FOREACH(module ${ENABLED_MODULE_LIST})
- SET (INDEX_LIST_MODULES "${INDEX_LIST_MODULES}- [${module}](@ref ${module})
\n")
- ENDFOREACH()
- SET (INDEX_LIST_MODULES "${INDEX_LIST_MODULES}
\n")
-
- # This is the doxyfile that will be used to generate the documentation
- # You can use programs like doxywizard to edit the settings
- SET (doxygenConfigFileIn "${CMAKE_SOURCE_DIR}/docs/Doxyfile.dox.in")
- SET (doxygenConfigFile "${CMAKE_BINARY_DIR}/Doxyfile.dox")
-
- SET (DOXYGEN_LANGUAGE "English" CACHE STRING "Documentation language")
- MARK_AS_ADVANCED (DOXYGEN_LANGUAGE)
-
- SET (doxygenIndexFileIn "${CMAKE_SOURCE_DIR}/docs/index.md.in")
- SET (doxygenIndexFile "${CMAKE_BINARY_DIR}/gendocs/index.md")
-
- # Using a .in file means we can use CMake to insert project settings
- # into the doxyfile. For example, CMake will replace @PROJECT_NAME@ in
- # a configured file with the CMake PROJECT_NAME variable's value.
-
-
- CONFIGURE_FILE (${doxygenConfigFileIn} ${doxygenConfigFile} @ONLY)
- CONFIGURE_FILE (${doxygenIndexFileIn} ${doxygenIndexFile} @ONLY)
-
- # Add the documentation target. This lets you run "make docs" from the
- # generated CMake makefiles
- ADD_CUSTOM_TARGET (docs
- ${DOXYGEN_EXECUTABLE} ${doxygenConfigFile}
- DEPENDS ${doxygenConfigFile}
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- VERBATIM)
-
- # You can add an "install" directive to install the resulting documentation
- # if desired.
- INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/documentation/html DESTINATION ${INSTALL_DOCUMENTATION_DIR} OPTIONAL COMPONENT binaries)
-
- # Add a custom command to archive the current HTML documentation generated
- # by doxygen
- set(ARCHIVED_HTML_OUTPUT_FILE_NAME "${PROJECT_NAME}-${SCIQLOP_VERSION}-documentation-html.tar.bz2")
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/documentation/${ARCHIVED_HTML_OUTPUT_FILE_NAME}
- COMMAND sh -c "tar --bzip2 -cf ${ARCHIVED_HTML_OUTPUT_FILE_NAME} html"
- DEPENDS docs
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/documentation)
- # Add a custom target to execute the above command
- add_custom_target(htmldocs DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/documentation/${ARCHIVED_HTML_OUTPUT_FILE_NAME})
-
- # Add a custom command to execute pdflatex on the latex documentation
- # generated by doxygen
- set(LATEX_OUTPUT_FILE_NAME "${PROJECT_NAME}-${SCIQLOP_VERSION}-documentation.pdf")
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/documentation/${LATEX_OUTPUT_FILE_NAME}
- COMMAND make
- COMMAND cp refman.pdf ../${LATEX_OUTPUT_FILE_NAME}
- DEPENDS docs
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/documentation/latex)
- # Add a custom target to execute the above command
- add_custom_target(latexdocs DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/documentation/${LATEX_OUTPUT_FILE_NAME})
-
- # Add a custom target to execute all the docs commands
- add_custom_target(alldocs DEPENDS htmldocs latexdocs)
-
- ELSE (DOXYGEN_FOUND)
- MESSAGE (STATUS "Documentation will not be built - Doxygen not found")
- ENDIF (DOXYGEN_FOUND)
-ENDIF (BUILD_DOCUMENTATION)
diff --git a/cmake/sciqlop_formatting.cmake b/cmake/sciqlop_formatting.cmake
deleted file mode 100644
index 98fa28e..0000000
--- a/cmake/sciqlop_formatting.cmake
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# sciqlop_formatting.cmake
-#
-# Launch code formatting tools. Can be activated with ENABLE_FORMATTING and
-# ENABLE_CHECKSTYLE options.
-#
-# The following variables are used (must be set by the cmake file calling this
-# one):
-# * FORMATTING_INPUT_FILES: list of files to format;
-# * CHECKSTYLE_INPUT_FILES: list of files to check for style;
-# * CHECKSTYLE_EXCLUSION_FILES: list of vera++ exclusion files.
-#
-
-OPTION (ENABLE_FORMATTING "Format the source code while compiling" ON)
-OPTION (ENABLE_CHECKSTYLE "Analyse the style of the code while compiling" ON)
-
-IF (ENABLE_FORMATTING)
- IF (CLANGFORMAT_FOUND)
- INCLUDE(${CLANGFORMAT_USE_FILE})
-
- ADD_CLANGFORMAT_TARGETS(${FORMATTING_INPUT_FILES}
- ADD_TO_ALL)
- ELSE()
- MESSAGE (STATUS "Source code will not be formatted - clang-format not found")
- ENDIF()
-ENDIF()
-
-IF (ENABLE_CHECKSTYLE)
- IF (VERA++_FOUND)
- INCLUDE(${VERA++_USE_FILE})
-
- SET(EXCLUSIONS)
- FOREACH (e ${CHECKSTYLE_EXCLUSION_FILES})
- LIST(APPEND EXCLUSIONS EXCLUSION ${e})
- ENDFOREACH()
-
- ADD_VERA_TARGETS(${CHECKSTYLE_INPUT_FILES}
- ADD_TO_ALL
- PROFILE "sciqlop"
- ROOT "${CMAKE_SOURCE_DIR}/formatting/vera-root"
- PARAMETER "project-name=${PROJECT_NAME}"
- ${EXCLUSIONS})
-
- ADD_VERA_CHECKSTYLE_TARGET(${CHECKSTYLE_INPUT_FILES}
- PROFILE "sciqlop"
- ROOT "${CMAKE_SOURCE_DIR}/formatting/vera-root"
- PARAMETER "project-name=${PROJECT_NAME}"
- ${EXCLUSIONS})
-
- ELSE()
- MESSAGE (STATUS "Source code will not be checkstyled - vera++ not found")
- ENDIF()
-ENDIF()
diff --git a/cmake/sciqlop_macros.cmake b/cmake/sciqlop_macros.cmake
deleted file mode 100644
index 2cf91d5..0000000
--- a/cmake/sciqlop_macros.cmake
+++ /dev/null
@@ -1,191 +0,0 @@
-#
-# sciqlop_macros.cmake
-#
-# The following functions or macros are defined in this document:
-# - SUBDIRLIST
-# - SCIQLOP_SET_TO_PARENT_SCOPE
-# - SCIQLOP_PROCESS_EXTERN_DEPENDENCIES
-# - SCIQLOP_COPY_TO_TARGET
-# - SCIQLOP_READ_FILE
-# - SCIQLOP_FIND_QT
-# - SCIQLOP_ADD_EXTERN_DEPENDENCY
-
-#
-# Define a macro to retrieve all subdirectory names of a specific directory
-#
-MACRO(SUBDIRLIST result curdir)
- FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
- SET(dirlist "")
- FOREACH(child ${children})
- IF(IS_DIRECTORY ${curdir}/${child})
- LIST(APPEND dirlist ${child})
- ENDIF()
- ENDFOREACH()
- SET(${result} ${dirlist})
-ENDMACRO()
-
-# SCIQLOP_SET_TO_PARENT_SCOPE(variable)
-#
-# Set the given variable to the parent scope.
-#
-MACRO (SCIQLOP_SET_TO_PARENT_SCOPE variable)
- SET(${variable} ${${variable}} PARENT_SCOPE)
-ENDMACRO (SCIQLOP_SET_TO_PARENT_SCOPE)
-
-MACRO(SCIQLOP_FIND_QT)
- # Find includes in corresponding build directories
- set(CMAKE_INCLUDE_CURRENT_DIR ON)
- # Instruct CMake to run moc automatically when needed.
- set(CMAKE_AUTOMOC ON)
-
- # Find Qt5 and the modules asked
- FOREACH(component ${ARGN})
- FIND_PACKAGE(Qt5${component} QUIET REQUIRED)
- INCLUDE_DIRECTORIES(${Qt5${component}_INCLUDE_DIRS})
- ENDFOREACH(component)
-ENDMACRO(SCIQLOP_FIND_QT)
-
-# SCIQLOP_PROCESS_EXTERN_DEPENDENCIES(externFile externLibraries externSharedLibraries)
-#
-# Process the dependencies file for the modules. Each line of this file must
-# contain the parameters to pass to the FIND_PACKAGE function. This function
-# will append the libraries of the extern dependency found to the variable
-# passed as a second parameter, and add the include directories of the extern
-# dependency to the global include directories. Moreover, the extern shared
-# libraries are stored in the variable passed as a third parameter. These shared
-# libraries can then be copied to a target output path by using the
-# SCIQLOP_COPY_TO_TARGET function.
-#
-# Examples:
-#
-# SCIQLOP_PROCESS_MODULE_DEPENDENCIES("path/to/extern.dependencies"
-# EXTERN_LIBRARIES
-# EXTERN_SHARED_LIBRARIES)
-#
-FUNCTION (SCIQLOP_PROCESS_EXTERN_DEPENDENCIES externFile librariesVar sharedLibrariesVar)
-
- SCIQLOP_READ_FILE(${externFile} externDependencies)
- SET (externLibraries)
- SET (externSharedLibraries)
- FOREACH (externDependency ${externDependencies})
- # Check if the line is a comment (begins with #)
- STRING(REGEX MATCH "^ *#.*$" matched "${externDependency}")
- IF (NOT matched)
- STRING(REGEX REPLACE " +" ";" externDependency "${externDependency}")
- SCIQLOP_ADD_EXTERN_DEPENDENCY(externLibraries externSharedLibraries ${externDependency})
- ENDIF()
- ENDFOREACH()
-
- LIST (APPEND ${librariesVar} ${externLibraries})
- SCIQLOP_SET_TO_PARENT_SCOPE(${librariesVar})
-
- LIST (APPEND ${sharedLibrariesVar} ${externSharedLibraries})
- SCIQLOP_SET_TO_PARENT_SCOPE(${sharedLibrariesVar})
-ENDFUNCTION (SCIQLOP_PROCESS_EXTERN_DEPENDENCIES)
-
-# SCIQLOP_COPY_TO_TARGET copy the given files to the given target output path.
-#
-# The first parameter must be RUNTIME or LIBRARY, and it indicates the type of
-# the target.
-#
-# The second parameter is the name of the target where the files must be copied.
-# The RUNTIME_OUTPUT_DIRECTORY or LIBRARY_OUTPUT_DIRECTORY target properties
-# will be used to find the output path of the copy. If these properties are
-# empty, then the EXECUTABLE_OUTPUT_PATH or LIBRARY_OUTPUT_PATH variables will
-# be used.
-#
-# The rest of the parameters are the files that must be copied.
-FUNCTION (SCIQLOP_COPY_TO_TARGET runtimeOrLibrary targetName)
- # Check RUNTIME or LIBRARY argument
- IF (${runtimeOrLibrary} STREQUAL "RUNTIME")
- SET (targetProperty "RUNTIME_OUTPUT_DIRECTORY")
- SET (pathProperty ${EXECUTABLE_OUTPUT_PATH})
- ELSEIF (${runtimeOrLibrary} STREQUAL "LIBRARY")
- SET (targetProperty "LIBRARY_OUTPUT_DIRECTORY")
- SET (pathProperty ${LIBRARY_OUTPUT_PATH})
- ELSE ()
- MESSAGE (FATAL "The first parameter of COPY_TO_TARGET must be either RUNTIME or LIBRARY, not \"${runtimeOrLibrary}\"")
- ENDIF ()
-
- # Select the output directory
- GET_TARGET_PROPERTY(OUTPUT_DIR ${targetName} ${targetProperty})
- IF (OUTPUT_DIR STREQUAL "OUTPUT_DIR-NOTFOUND")
- SET (OUTPUT_DIR ${pathProperty})
- ENDIF ()
-
- # Retrieve the list of files to copy by listing the rest of the macro
- # arguments
- FOREACH (arg ${ARGN})
- LIST(APPEND fileList ${arg})
- ENDFOREACH()
-
- # Only copy if the list isn't empty
- IF (fileList)
- FILE(COPY ${fileList} DESTINATION ${OUTPUT_DIR})
- ENDIF()
-ENDFUNCTION (SCIQLOP_COPY_TO_TARGET)
-
-# SCIQLOP_READ_FILE(file contents)
-#
-# Read the given file line by line and store the resulting list inside the
-# contents variable.
-#
-# /!\ If the file contains semicolons, the macro will escape them before
-# returning the list.
-#
-# From
-FUNCTION (SCIQLOP_READ_FILE file contentsVar)
- FILE (READ ${file} contents)
-
- # Convert file contents into a CMake list (where each element in the list
- # is one line of the file)
- #
- STRING(REGEX REPLACE ";" "\\\\;" contents "${contents}")
- STRING(REGEX REPLACE "\n" ";" contents "${contents}")
-
- # Return file contents as a list
- SET (${contentsVar} "${contents}" PARENT_SCOPE)
-ENDFUNCTION (SCIQLOP_READ_FILE)
-
-# SCIQLOP_ADD_EXTERN_DEPENDENCY(externLibrariesVar externSharedLibrariesVar dependencyName [EXTRA FIND_PACKAGE ARGS])
-#
-# SCIQLOP_ADD_EXTERN_DEPENDENCY can be used to add a dependency residing in the
-# extern subdirectory to a module.
-#
-# The first parameter is the name of the variable where the found libraries will
-# be added.
-#
-# The second parameter is the name of the variable where the found shared
-# libraries will be added.
-#
-# The third parameter is the name of the dependency, and the rest of the
-# arguments are the same than the FIND_PACKAGE command. In fact they are passed
-# as-is to the command.
-#
-# If the dependency is found, then INCLUDE_DIRECTORIES is called for the
-# dependency include directories, and the libraries are added to the
-# externLibrariesVar variable. Moreover, if the dependency is a shared library,
-# then the dynamic libraries are added to the externSharedLibrariesVar so that
-# they can be copied and installed alongside the module. The libraries in this
-# variable are ordered so that the real library is before the symlinks to the
-# library, so that the copy and install works as expected.
-FUNCTION (SCIQLOP_ADD_EXTERN_DEPENDENCY externLibrariesVar externSharedLibrariesVar dependencyName)
- STRING (TOUPPER ${dependencyName} upperDependencyName)
-
- FIND_PACKAGE(${dependencyName} ${ARGN})
- IF (${upperDependencyName}_FOUND)
- # Add the include directories of the dependency
- INCLUDE_DIRECTORIES(${${upperDependencyName}_INCLUDE_DIRS})
-
- # Add the libraries to the externLibrariesVar variable and export it to
- # the parent scope
- LIST(APPEND ${externLibrariesVar} ${${upperDependencyName}_LIBRARIES})
- SCIQLOP_SET_TO_PARENT_SCOPE(${externLibrariesVar})
-
- # Find the shared libraries
- LIST(APPEND ${externSharedLibrariesVar} ${${upperDependencyName}_SHARED_LIBRARIES})
-
- # Export the externSharedLibrariesVar variable to the parent scope
- SCIQLOP_SET_TO_PARENT_SCOPE(${externSharedLibrariesVar})
- ENDIF ()
-ENDFUNCTION (SCIQLOP_ADD_EXTERN_DEPENDENCY)
diff --git a/cmake/sciqlop_package.cmake b/cmake/sciqlop_package.cmake
deleted file mode 100644
index 3067f34..0000000
--- a/cmake/sciqlop_package.cmake
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Generate the source package of SciqLop.
-#
-
-install(DIRECTORY
- ${EXECUTABLE_OUTPUT_PATH}
- DESTINATION "."
- USE_SOURCE_PERMISSIONS
- COMPONENT CORE
- PATTERN "*.a" EXCLUDE
-)
-
-set(EXECUTABLEDOTEXTENSION)
-if(WIN32)
- set(EXECUTABLEDOTEXTENSION ".exe")
-endif(WIN32)
-set (SCIQLOP_EXE_LOCATION ${EXECUTABLE_OUTPUT_PATH}/${EXECUTABLE_NAME}${EXECUTABLEDOTEXTENSION})
-
-if(WIN32)
- include ("cmake/sciqlop_package_qt.cmake")
-endif(WIN32)
-
-
-SET (CPACK_PACKAGE_VENDOR "CNRS")
-SET (CPACK_PACKAGE_VERSION_MAJOR "${SCIQLOP_VERSION_MAJOR}")
-SET (CPACK_PACKAGE_VERSION_MINOR "${SCIQLOP_VERSION_MINOR}")
-SET (CPACK_PACKAGE_VERSION_PATCH "${SCIQLOP_VERSION_PATCH}${SCIQLOP_VERSION_SUFFIX}")
-SET (CPACK_PACKAGE_VERSION "${SCIQLOP_VERSION}")
-SET (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING)
-SET (CPACK_PACKAGE_CONTACT "nicolas.aunai@lpp.polytechnique.fr")
-SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
-# SET(CPACK_RESOURCE_FILE_WELCOME ${CMAKE_CURRENT_SOURCE_DIR}/WARN.txt)
-SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/COPYING)
-# SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_NAME}-${PROJECT_VERSION})
-SET(FULLBUILD ON)
-
-SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
-SET(CPACK_GENERATOR "NSIS")
-SET(CPACK_MONOLITHIC_INSTALL 1)
-#SET(CPACK_COMPONENTS_ALL sciqlop qt)
-SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Setup")
-SET(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_NAME})
-
-set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
-
-if (WIN32)
- SET(CPACK_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
- SET(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
- SET(CPACK_NSIS_COMPONENT_INSTALL ON)
- SET(CPACK_SYSTEM_NAME "MinGW32")
- SET(CPACK_PACKAGING_INSTALL_PREFIX "")
- #SET(CPACK_GENERATOR "NSIS")
- SET(CPACK_NSIS_DISPLAY_NAME ${PROJECT_NAME})
- SET(CPACK_NSIS_MUI_FINISHPAGE_RUN ${SCIQLOP_EXECUTABLE_NAME})
- SET(CPACK_NSIS_MUI_ICON ${SCIQLOP_EXECUTABLE_ICON_LOCATION})
- SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\${SCIQLOP_EXECUTABLE_NAME}.exe")
-endif (WIN32)
-
-INCLUDE(CPack)
diff --git a/cmake/sciqlop_package_qt.cmake b/cmake/sciqlop_package_qt.cmake
deleted file mode 100644
index 4f6139b..0000000
--- a/cmake/sciqlop_package_qt.cmake
+++ /dev/null
@@ -1,36 +0,0 @@
-STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TO_LOWER)
-SET(WINDEPLOYQT_ARGS --${CMAKE_BUILD_TYPE_TO_LOWER} --list mapping -network -sql --no-system-d3d-compiler --compiler-runtime --dry-run)
-
-#FOREACH(qtModule @_qt5_modules@)
-# STRING(TOLOWER ${qtModule} qtLowerModule)
-# SET(WINDEPLOYQT_ARGS ${WINDEPLOYQT_ARGS} -${qtLowerModule})
-#ENDFOREACH()
-
-EXECUTE_PROCESS(
-COMMAND windeployqt ${WINDEPLOYQT_ARGS} -printsupport ${SCIQLOP_EXE_LOCATION}
-OUTPUT_VARIABLE QT_FILES
-)
-
-IF( QT_FILES )
-
-STRING(REPLACE "\n" ";" QT_FILES ${QT_FILES})
-LIST(APPEND QT_FILES_LIST ${QT_FILES})
-FOREACH(QtFile ${QT_FILES_LIST})
- STRING(REPLACE "\"" "" QtFile ${QtFile})
- STRING(REPLACE "\\" "/" QtFile ${QtFile})
- STRING(REGEX MATCH "^(.*) " QtFileSource ${QtFile})
- STRING(REGEX MATCH " (.*)$" QtFileTarget ${QtFile})
-
- STRING(STRIP ${QtFileSource} QtFileSource)
- STRING(STRIP ${QtFileTarget} QtFileTarget)
- GET_FILENAME_COMPONENT(QtFileTargetDir ${QtFileTarget} DIRECTORY)
-
- IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_OUTPUT_PATH}/${QtFileTarget}")
- GET_FILENAME_COMPONENT(QtFileTargetDir ${QtFileTarget} DIRECTORY)
- FILE(INSTALL DESTINATION "${EXECUTABLE_OUTPUT_PATH}/${QtFileTargetDir}" FILES "${QtFileSource}")
- ENDIF()
-ENDFOREACH()
-
-ENDIF()
-
-MESSAGE( "Exec windeployqt done" )
diff --git a/cmake/sciqlop_params.cmake b/cmake/sciqlop_params.cmake
deleted file mode 100644
index 82ec488..0000000
--- a/cmake/sciqlop_params.cmake
+++ /dev/null
@@ -1,128 +0,0 @@
-#
-# sciqlop_params : Define compilation parameters
-#
-# Debug or release
-#
-# As the "NMake Makefiles" forces by default the CMAKE_BUILD_TYPE variable to Debug, SCIQLOP_BUILD_TYPE variable is used to be sure that the debug mode is a user choice
-#SET(SCIQLOP_BUILD_TYPE "Release" CACHE STRING "Choose to compile in Debug or Release mode")
-
-IF(CMAKE_BUILD_TYPE MATCHES "Debug")
- SET (DEBUG_SUFFIX "d")
-ELSE()
- MESSAGE (STATUS "Build in Release")
- SET (DEBUG_SUFFIX "")
-ENDIF()
-
-#
-# Need to compile tests?
-#
-OPTION (BUILD_TESTS "Build the tests" OFF)
-ENABLE_TESTING(${BUILD_TESTS})
-
-#
-# Path to the folder for sciqlop's extern libraries.
-#
-# When looking for an external library in sciqlop, we look to the following
-# folders:
-# - The specific folder for the library (generally of the form _ROOT_DIR
-# - The global Sciqlop extern folder
-# - The system folders.
-#
-# If a dependency is found in the global extern folder or a specific folder for
-# the library, then it is installed with the sciqlop libraries. If it is found
-# in the system folders, it is not. This behavior can be overriden with the
-# _COPY_SHARED_LIBRARIES flag.
-#
-set(SCIQLOP_EXTERN_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/extern"
- CACHE PATH "Path to the folder for sciqlop's extern libraries")
-option(SCIQLOP_FORCE_UPDATE_EXT_ROOT_DIR "Force the _ROOT_DIR to be updated to the global sciqlop extern folder"
- OFF)
-
-if (SCIQLOP_FORCE_UPDATE_EXT_ROOT_DIR)
- set(libRootDirForceValue FORCE)
-else()
- set(libRootDirForceValue)
-endif()
-
-#
-# Sciqlop_modules.cmake
-#
-# Set ouptut directories
-#
-IF (UNIX)
- # 32 or 64 bits compiler
- IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- SET(defaultLib "lib64/sciqlop")
- ELSE()
- SET(defaultLib "lib/sciqlop")
- ENDIF()
- SET (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
- SET (CONFIG_OUTPUT_PATH $ENV{HOME}/.config/QtProject)
- SET (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${defaultLib})
-ELSEIF(WIN32)
- SET (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist)
- SET (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist)
- SET (CONFIG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist/app/QtProject)
-ELSE()
- SET (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist)
- SET (CONFIG_OUTPUT_PATH $ENV{HOME}/.config/QtProject)
- SET (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/dist)
-ENDIF()
-
-
-#
-# Static or shared libraries
-#
-OPTION (BUILD_SHARED_LIBS "Build the shared libraries" ON)
-
-# Generate position independant code (-fPIC)
-SET(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
-
-
-
-# Configuration for make install
-
-set(PROJECT_PLUGIN_PREFIX "SciQlop")
-
-IF (UNIX)
- SET(CMAKE_INSTALL_PREFIX "/usr/local/${PROJECT_PLUGIN_PREFIX}")
- SET(defaultBin "bin")
- SET(defaultInc "include/sciqlop")
-
- # 32 or 64 bits compiler
- IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
- SET(defaultLib "lib64")
- SET(defaultPluginsLib "lib64/${PROJECT_PLUGIN_PREFIX}")
- ELSE()
- SET(defaultLib "lib/")
- SET(defaultPluginsLib "lib/${PROJECT_PLUGIN_PREFIX}")
- ENDIF()
-
- SET(defaultDoc "share/docs/${PROJECT_PLUGIN_PREFIX}")
-ELSE()
- SET(defaultBin "bin")
- SET(defaultInc "include/${PROJECT_PLUGIN_PREFIX}")
- SET(defaultLib "lib")
- SET(defaultPluginsLib "lib/${PROJECT_PLUGIN_PREFIX}")
- SET(defaultDoc "docs/${PROJECT_PLUGIN_PREFIX}")
-ENDIF()
-
-SET(INSTALL_BINARY_DIR "${defaultBin}" CACHE STRING
- "Installation directory for binaries")
-SET(INSTALL_LIBRARY_DIR "${defaultLib}" CACHE STRING
- "Installation directory for libraries")
-SET(INSTALL_PLUGINS_LIBRARY_DIR "${defaultPluginsLib}" CACHE STRING
- "Installation directory for libraries")
-SET(INSTALL_INCLUDE_DIR "${defaultInc}" CACHE STRING
- "Installation directory for headers")
-SET(INSTALL_DOCUMENTATION_DIR "${defaultDoc}" CACHE STRING
- "Installation directory for documentations")
-
-
-# Set the rpath when installing
-SET(CMAKE_SKIP_BUILD_RPATH FALSE)
-SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
-SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBRARY_DIR}")
-SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-
-message("Install RPATH: ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBRARY_DIR}")
diff --git a/cmake/sciqlop_tests.cmake b/cmake/sciqlop_tests.cmake
new file mode 100644
index 0000000..2b09088
--- /dev/null
+++ b/cmake/sciqlop_tests.cmake
@@ -0,0 +1,5 @@
+macro(declare_test testname testexe sources libraries)
+ add_executable(${testexe} ${sources})
+ target_link_libraries(${testexe} ${libraries})
+ add_test(NAME ${testname} COMMAND ${testexe})
+endmacro(declare_test)
diff --git a/cmake/sciqlop_version.cmake b/cmake/sciqlop_version.cmake
deleted file mode 100644
index 6899550..0000000
--- a/cmake/sciqlop_version.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# sciqlop_version.cmake
-#
-# Holds the version of sciqlop.
-#
-# These variables are used to generate the
-# "Version.h" and "Version.cpp" files so that the version number is available
-# inside of sciqlop source code.
-#
-# Moreover, they're used with CPack to display the version number in the setups.
-#
-
-# Version number parts. These variables must be updated when the version change.
-SET (SCIQLOP_VERSION_MAJOR 0)
-SET (SCIQLOP_VERSION_MINOR 1)
-SET (SCIQLOP_VERSION_PATCH 0)
-SET (SCIQLOP_VERSION_SUFFIX "")
-
-# Version number as a string. This variable is automatically generated from the
-# above variables to build a version number of the form: MAJOR.MINOR.PATCH. If
-# SCIQLOP_VERSION_SUFFIX isn't empty, it is appended to the version number.
-SET (SCIQLOP_VERSION "${SCIQLOP_VERSION_MAJOR}.${SCIQLOP_VERSION_MINOR}.${SCIQLOP_VERSION_PATCH}${SCIQLOP_VERSION_SUFFIX}")
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 809f326..a62cb24 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -1,173 +1,31 @@
-## core - CMakeLists.txt
-STRING(TOLOWER ${CMAKE_PROJECT_NAME} LIBRARY_PREFFIX)
-SET(SQPCORE_LIBRARY_NAME "${LIBRARY_PREFFIX}_core${DEBUG_SUFFIX}")
-SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/")
-SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/")
-SET(TESTS_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests-resources")
+FILE (GLOB_RECURSE core_SRCS
+ include/*.h
+ src/*.cpp
+ )
-# Include core directory
-include_directories("${INCLUDES_DIR}")
+add_definitions(-DCORE_STATIC)
-# Set a variable to display a warning in the version files.
-SET(SCIQLOP_CMAKE_GENERATION_WARNING "DON'T CHANGE THIS FILE. AUTOGENERATED BY CMAKE.")
-# Generate the version file from the cmake version variables. The version
-# variables are defined in the cmake/sciqlop_version.cmake file.
-CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources/Version.h.in"
- "${INCLUDES_DIR}/Version.h")
-CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources/Version.cpp.in"
- "${SOURCES_DIR}/Version.cpp")
+add_library(sciqlopcore ${core_SRCS})
+SET_TARGET_PROPERTIES(sciqlopcore PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
-# Find dependent modules
-find_package(sciqlop-plugin)
-INCLUDE_DIRECTORIES(${SCIQLOP-PLUGIN_INCLUDE_DIR})
-
-#
-# Find Qt modules
-#
-SCIQLOP_FIND_QT(Core Network)
-
-#
-# Compile the library library
-#
-
-ADD_DEFINITIONS(-DCORE_LIB)
-
-FILE (GLOB_RECURSE MODULE_SOURCES
- ${INCLUDES_DIR}/*.h
- ${SOURCES_DIR}/*.c
- ${SOURCES_DIR}/*.cpp
- ${SOURCES_DIR}/*.h)
-
-ADD_LIBRARY(${SQPCORE_LIBRARY_NAME} ${MODULE_SOURCES})
-set_property(TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY CXX_STANDARD 14)
-set_property(TARGET ${SQPCORE_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
-TARGET_LINK_LIBRARIES(${SQPCORE_LIBRARY_NAME})
-qt5_use_modules(${SQPCORE_LIBRARY_NAME} Core Network)
-
-# Find CATALOGUE_API
-include_directories("${CATALOGUEAPI_INCLUDE}")
-TARGET_LINK_LIBRARIES(${SQPCORE_LIBRARY_NAME} ${CATALOGUEAPI_LIBRARIES})
-INSTALL(TARGETS ${SQPCORE_LIBRARY_NAME}
- RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
- LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
- ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
+target_include_directories(sciqlopcore PUBLIC
+ $
+ $
)
-add_dependencies(${SQPCORE_LIBRARY_NAME} CatalogueAPI)
-
-# From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
-# Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order.
-# The DEFINE_SYMBOL target property is also added as a compile definition as a special convenience case for SHARED and MODULE library targets
-IF(BUILD_SHARED_LIBS)
- SET_TARGET_PROPERTIES(${SQPCORE_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS "SCIQLOP_EXPORT")
-ELSE()
- TARGET_COMPILE_DEFINITIONS(${SQPCORE_LIBRARY_NAME} PUBLIC "SCIQLOP_STATIC_LIBRARIES")
-ENDIF()
-
-# Set the variable to parent scope so that the other projects can copy the
-# dependent shared libraries
-SCIQLOP_SET_TO_PARENT_SCOPE(SQPCORE_LIBRARY_NAME)
-
-## Copy extern shared libraries to the lib folder
-LIST (APPEND ${EXTERN_SHARED_LIBRARIES} ${CATALOGUEAPI_LIBRARIES})
-
-
-SET (COPY_LIBS_DESTINATION LIBRARY)
-if(APPLE)
- SET (COPY_LIBS_DESTINATION RUNTIME)
-endif()
-
-add_custom_command(TARGET ${SQPCORE_LIBRARY_NAME} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CATALOGUEAPI_LIBRARIES} ${EXECUTABLE_OUTPUT_PATH}
+target_link_libraries(sciqlopcore PUBLIC
+ Qt5::Core
+ Qt5::Network
+ CatalogueAPI
)
-# Add the files to the list of files to be analyzed
-LIST(APPEND CHECKSTYLE_INPUT_FILES ${MODULE_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
-# Vera++ exclusion files
-LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/vera-exclusions/exclusions.txt)
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
-
-#
-# Compile the tests
-#
-IF(BUILD_TESTS)
- INCLUDE_DIRECTORIES(${SOURCES_DIR})
- FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
- FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
- SET( TEST_LIBRARIES ${SQPCORE_LIBRARY_NAME})
- list(APPEND TEST_LIBRARIES ${CATALOGUEAPI_LIBRARIES})
-
- SET(TARGETS_COV)
- FOREACH( testFile ${TESTS_SOURCES} )
- GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
- GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
-
- # Add to the list of sources files all the sources in the same
- # directory that aren't another test
- FILE (GLOB currentTestSources
- ${testDirectory}/*.c
- ${testDirectory}/*.cpp
- ${testDirectory}/*.h)
- LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
- # LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
-
- ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
- set_property(TARGET ${testName} PROPERTY CXX_STANDARD 14)
- set_property(TARGET ${testName} PROPERTY CXX_STANDARD_REQUIRED ON)
- TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES})
- qt5_use_modules(${testName} Test)
-
- ADD_TEST( NAME ${testName} COMMAND ${testName} )
-
- set(Coverage_NAME ${testName})
- if(UNIX)
- SETUP_TARGET_FOR_COVERAGE(TARGET ${testName}_coverage OUTPUT ${testFile}-path NAME ${testFile} EXECUTABLE ${testName})
- LIST( APPEND TARGETS_COV ${testName}_coverage)
- endif(UNIX)
-
- ENDFOREACH( testFile )
-
- add_custom_target(coverage)
-
- FOREACH( target_cov ${TARGETS_COV} )
- add_custom_command(TARGET coverage PRE_BUILD COMMAND make ${target_cov})
- ENDFOREACH( target_cov )
-
- LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
- LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
- LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
- SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
-
- ADD_DEFINITIONS(-DCORE_TESTS_RESOURCES_DIR="${TESTS_RESOURCES_DIR}")
-ENDIF(BUILD_TESTS)
-
-#
-# Set the files that must be formatted by clang-format.
-#
-LIST (APPEND FORMATTING_INPUT_FILES ${MODULE_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
+install(TARGETS sciqlopcore EXPORT SciQLOPCoreConfig
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-#
-# Set the directories that doxygen must browse to generate the
-# documentation.
-#
-# Source directories:
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
-# Source directories to exclude from the documentation generation
-#LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SciQLOP)
+install(EXPORT SciQLOPCoreConfig DESTINATION share/SciQLOPCore/cmake)
+export(TARGETS sciqlopcore FILE SciQLOPCoreConfig.cmake)
-#
-# Set the directories with the sources to analyze and propagate the
-# modification to the parent scope
-#
-# Source directories to analyze:
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
-# Source directories to exclude from the analysis
-#LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
+add_subdirectory(tests)
diff --git a/core/cmake/Findsciqlop-core.cmake b/core/cmake/Findsciqlop-core.cmake
deleted file mode 100755
index d266456..0000000
--- a/core/cmake/Findsciqlop-core.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-# - Try to find sciqlop-core
-# Once done this will define
-# SCIQLOP-CORE_FOUND - System has sciqlop-core
-# SCIQLOP-CORE_INCLUDE_DIR - The sciqlop-core include directories
-# SCIQLOP-CORE_LIBRARIES - The libraries needed to use sciqlop-core
-
-if(SCIQLOP-CORE_FOUND)
- return()
-endif(SCIQLOP-CORE_FOUND)
-
-set(SCIQLOP-CORE_INCLUDE_DIR ${sciqlop-core_DIR}/../include)
-
-set (OS_LIB_EXTENSION "so")
-
-if(WIN32)
- set (OS_LIB_EXTENSION "dll")
-endif(WIN32)
-
-if (APPLE)
- set (OS_LIB_EXTENSION "dylib")
-endif(APPLE)
-
-set(SCIQLOP-CORE_LIBRARIES ${LIBRARY_OUTPUT_PATH}/libsciqlop_core${DEBUG_SUFFIX}.${OS_LIB_EXTENSION})
-
-set(SCIQLOP-CORE_FOUND TRUE)
diff --git a/plugin/include/Plugin/IPlugin.h b/core/include/Plugin/IPlugin.h
similarity index 100%
rename from plugin/include/Plugin/IPlugin.h
rename to core/include/Plugin/IPlugin.h
diff --git a/core/include/Plugin/PluginManager.h b/core/include/PluginManager/PluginManager.h
similarity index 96%
rename from core/include/Plugin/PluginManager.h
rename to core/include/PluginManager/PluginManager.h
index 025e42b..3f834f6 100644
--- a/core/include/Plugin/PluginManager.h
+++ b/core/include/PluginManager/PluginManager.h
@@ -14,7 +14,7 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_PluginManager)
/**
* @brief The PluginManager class aims to handle the plugins loaded dynamically into SciQLop.
*/
-class SCIQLOP_CORE_EXPORT PluginManager {
+class PluginManager {
public:
explicit PluginManager();
diff --git a/core/src/Plugin/PluginManager.cpp b/core/src/PluginManager/PluginManager.cpp
similarity index 99%
rename from core/src/Plugin/PluginManager.cpp
rename to core/src/PluginManager/PluginManager.cpp
index 6579f63..1a116f5 100644
--- a/core/src/Plugin/PluginManager.cpp
+++ b/core/src/PluginManager/PluginManager.cpp
@@ -1,4 +1,4 @@
-#include
+#include
#include
diff --git a/core/tests/CMakeLists.txt b/core/tests/CMakeLists.txt
new file mode 100644
index 0000000..377fcae
--- /dev/null
+++ b/core/tests/CMakeLists.txt
@@ -0,0 +1,33 @@
+include(sciqlop_tests)
+
+add_definitions(-DCORE_TESTS_RESOURCES_DIR="${CMAKE_CURRENT_LIST_DIR}/../tests-resources")
+
+
+declare_test(TestStringUtils TestStringUtils Common/TestStringUtils.cpp "sciqlopcore;Qt5::Test")
+
+declare_test(TestDataSeriesUtils TestDataSeriesUtils Data/TestDataSeriesUtils.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestOptionalAxis TestOptionalAxis Data/TestOptionalAxis.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestSpectrogramSeries TestSpectrogramSeries
+ "Data/TestSpectrogramSeries.cpp;Data/DataSeriesBuilders.h;Data/DataSeriesBuilders.cpp;Data/DataSeriesTestsUtils.h;Data/DataSeriesTestsUtils.cpp"
+ "sciqlopcore;Qt5::Test")
+declare_test(TestOneDimArrayData TestOneDimArrayData Data/TestOneDimArrayData.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestScalarSeries TestScalarSeries
+ "Data/TestScalarSeries.cpp;Data/DataSeriesBuilders.h;Data/DataSeriesBuilders.cpp;Data/DataSeriesTestsUtils.h;Data/DataSeriesTestsUtils.cpp"
+ "sciqlopcore;Qt5::Test")
+declare_test(TestTwoDimArrayData TestTwoDimArrayData Data/TestTwoDimArrayData.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestVectorSeries TestVectorSeries
+ "Data/TestVectorSeries.cpp;Data/DataSeriesBuilders.h;Data/DataSeriesBuilders.cpp;Data/DataSeriesTestsUtils.h;Data/DataSeriesTestsUtils.cpp"
+ "sciqlopcore;Qt5::Test")
+
+declare_test(TestDataSourceController TestDataSourceController
+ "DataSource/TestDataSourceController.cpp;DataSource/DataSourceItemBuilder.cpp"
+ "sciqlopcore;Qt5::Test")
+declare_test(TestDataSourceItem TestDataSourceItem
+ "DataSource/TestDataSourceItem.cpp;DataSource/DataSourceItemBuilder.cpp"
+ "sciqlopcore;Qt5::Test")
+
+declare_test(TestVariable TestVariable Variable/TestVariable.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestVariableCacheController TestVariableCacheController Variable/TestVariableCacheController.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestVariableController TestVariableController Variable/TestVariableController.cpp "sciqlopcore;Qt5::Test")
+declare_test(TestVariableSync TestVariableSync Variable/TestVariableSync.cpp "sciqlopcore;Qt5::Test")
+
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
new file mode 100644
index 0000000..a5bbc44
--- /dev/null
+++ b/docs/CMakeLists.txt
@@ -0,0 +1,13 @@
+find_package(Doxygen)
+if(DOXYGEN_FOUND)
+ set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.dox.in)
+ set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+ configure_file(${doxyfile_in} ${doxyfile} @ONLY)
+
+ add_custom_target(doc
+ COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMENT "Generating API documentation with Doxygen"
+ VERBATIM)
+
+endif()
diff --git a/extern/CatalogueAPI.cmake b/extern/CatalogueAPI.cmake
deleted file mode 100644
index c18078c..0000000
--- a/extern/CatalogueAPI.cmake
+++ /dev/null
@@ -1,73 +0,0 @@
-# - Clone and build CatalogueAPI Module
-include(ExternalProject)
-
-find_package(Git REQUIRED)
-
-if(WIN32)
- find_program(MesonExec meson PATHS C:/Appli/Meson)
- if(NOT MesonExec)
- Message("Error: Meson not found")
- else()
- message("Meson found: ${MesonExec}" )
- endif()
- find_program(NinjaExec ninja PATHS C:/Appli/Meson)
- if(NOT NinjaExec)
- Message("Error: Ninja not found")
- else()
- message("Ninja found: ${NinjaExec}" )
- endif()
-endif()
-if(NOT MesonExec)
- set (MesonExec meson)
-endif()
-if(NOT NinjaExec)
- set (NinjaExec ninja)
-endif()
-
-SET(CATALOGUEAPI_SOURCES_PATH ${CMAKE_SOURCE_DIR}/3rdparty/CatalogueAPI)
-SET(CATALOGUEAPI_BUILD_PATH ${CATALOGUEAPI_SOURCES_PATH}/build)
-SET(CATALOGUEAPI_QXORM_LIB_PATH ${CATALOGUEAPI_BUILD_PATH}/subprojects/QxOrm)
-SET(CatalogueAPI_build_type plain)
-
-if(CMAKE_BUILD_TYPE STREQUAL "")
- set(CMAKE_BUILD_TYPE Release)
-endif()
-string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER)
-
-ExternalProject_Add(
- CatalogueAPI
-
- GIT_REPOSITORY https://perrinel@hephaistos.lpp.polytechnique.fr/rhodecode/GIT_REPOSITORIES/LPP/Users/mperrinel/CatalogueAPI
- GIT_TAG develop
-
- UPDATE_COMMAND ${GIT_EXECUTABLE} pull origin develop
- PATCH_COMMAND ""
-
- SOURCE_DIR "${CATALOGUEAPI_SOURCES_PATH}"
- CONFIGURE_COMMAND ${MesonExec} --prefix=${CATALOGUEAPI_SOURCES_PATH} --buildtype=${CMAKE_BUILD_TYPE_TOLOWER} "${CATALOGUEAPI_SOURCES_PATH}" "${CATALOGUEAPI_BUILD_PATH}"
-
- BUILD_COMMAND ${NinjaExec} -C "${CATALOGUEAPI_BUILD_PATH}"
- INSTALL_COMMAND ${NinjaExec} -C "${CATALOGUEAPI_BUILD_PATH}" install
- LOG_DOWNLOAD 1
- LOG_UPDATE 1
-)
-
-set(CATALOG_LIB_PATH lib)
-if(WIN32)
- set(CATALOG_LIB_PATH bin)
-endif()
-
-ExternalProject_Add_Step(
- CatalogueAPI CopyToBin
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${CATALOGUEAPI_SOURCES_PATH}/lib64 ${CATALOGUEAPI_SOURCES_PATH}/${CATALOG_LIB_PATH}
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${CATALOGUEAPI_QXORM_LIB_PATH} ${CATALOGUEAPI_SOURCES_PATH}/${CATALOG_LIB_PATH}
- DEPENDEES install
-)
-
-
-set(CATALOGUEAPI_INCLUDE ${CATALOGUEAPI_SOURCES_PATH}/src)
-set(CATALOGUEAPI_LIBRARIES ${CATALOGUEAPI_SOURCES_PATH}/${CATALOG_LIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}CatalogueAPI${CMAKE_SHARED_LIBRARY_SUFFIX})
-list(APPEND CATALOGUEAPI_LIBRARIES ${CATALOGUEAPI_SOURCES_PATH}/${CATALOG_LIB_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}QxOrm${CMAKE_SHARED_LIBRARY_SUFFIX})
-
-mark_as_advanced(CATALOGUEAPI_INCLUDE)
-mark_as_advanced(CATALOGUEAPI_LIBRARIES)
diff --git a/external/CatalogueAPI b/external/CatalogueAPI
new file mode 160000
index 0000000..70f95c7
--- /dev/null
+++ b/external/CatalogueAPI
@@ -0,0 +1 @@
+Subproject commit 70f95c7d91c9a4e1ab52c427372757cc83a57de2
diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt
index 119546f..b0e1db1 100644
--- a/gui/CMakeLists.txt
+++ b/gui/CMakeLists.txt
@@ -1,179 +1,52 @@
-
-## gui - CMakeLists.txt
-STRING(TOLOWER ${CMAKE_PROJECT_NAME} LIBRARY_PREFFIX)
-SET(SQPGUI_LIBRARY_NAME "${LIBRARY_PREFFIX}_gui${DEBUG_SUFFIX}")
-SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
-SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
-SET(UI_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/ui")
-SET(RES_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/resources")
-
-# Include gui directory
-include_directories("${INCLUDES_DIR}")
-include_directories("${CMAKE_CURRENT_BINARY_DIR}")
-
-# Set a variable to display a warning in the version files.
-SET(SCIQLOP_CMAKE_GENERATION_WARNING "DON'T CHANGE THIS FILE. AUTOGENERATED BY CMAKE.")
-
-#
-# Find Qt modules
-#
-SCIQLOP_FIND_QT(Core Widgets PrintSupport)
-
-#
-# Find dependent libraries
-# ========================
-find_package(sciqlop-core)
-
-SET(LIBRARIES ${SCIQLOP-CORE_LIBRARIES})
-
-INCLUDE_DIRECTORIES(${SCIQLOP-CORE_INCLUDE_DIR})
-
-# Add sqpcore to the list of libraries to use
-list(APPEND LIBRARIES ${SQPCORE_LIBRARY_NAME})
-
-# Add dependent shared libraries
-list(APPEND SHARED_LIBRARIES ${SQPCORE_SHARED_LIBRARIES})
-
-
-# Ui files
-FILE (GLOB_RECURSE PROJECT_FORMS ${UI_FOLDER}/*.ui)
-
-# Resources files
-FILE (GLOB_RECURSE PROJECT_RESOURCES ${RES_FOLDER}/*.qrc)
-
-#
-# Compile the library library
-#
-FILE (GLOB_RECURSE MODULE_SOURCES
- ${INCLUDES_DIR}/*.h
- ${SOURCES_DIR}/*.c
- ${SOURCES_DIR}/*.cpp
- ${SOURCES_DIR}/*.h
- ${PROJECT_FORMS})
-
-QT5_ADD_RESOURCES(RCC_HDRS
- ${PROJECT_RESOURCES}
-)
-
-QT5_WRAP_UI(UIS_HDRS
- ${PROJECT_FORMS}
+FILE (GLOB_RECURSE gui_SRCS
+ include/*.h
+ src/*.cpp
+ resources/*.qrc
+ )
+
+QT5_WRAP_UI(
+ UiGenerated_SRCS
+ ui/DataSource/DataSourceWidget.ui
+ ui/Settings/SqpSettingsDialog.ui
+ ui/Settings/SqpSettingsGeneralWidget.ui
+ ui/SidePane/SqpSidePane.ui
+ ui/TimeWidget/TimeWidget.ui
+ ui/Variable/RenameVariableDialog.ui
+ ui/Variable/VariableInspectorWidget.ui
+ ui/Variable/VariableMenuHeaderWidget.ui
+ ui/Visualization/ColorScaleEditor.ui
+ ui/Visualization/VisualizationGraphWidget.ui
+ ui/Visualization/VisualizationTabWidget.ui
+ ui/Visualization/VisualizationWidget.ui
+ ui/Visualization/VisualizationZoneWidget.ui
+ ui/Visualization/VisualizationMultiZoneSelectionDialog.ui
+ ui/Catalogue/CatalogueEventsWidget.ui
+ ui/Catalogue/CatalogueExplorer.ui
+ ui/Catalogue/CatalogueInspectorWidget.ui
+ ui/Catalogue/CatalogueSideBarWidget.ui
+ ui/Catalogue/CreateEventDialog.ui
)
+add_library(sciqlopgui ${gui_SRCS} ${UiGenerated_SRCS})
+SET_TARGET_PROPERTIES(sciqlopgui PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
-ADD_LIBRARY(${SQPGUI_LIBRARY_NAME} ${MODULE_SOURCES} ${UIS_HDRS} ${RCC_HDRS})
-set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD 14)
-set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
-
-TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${LIBRARIES})
-qt5_use_modules(${SQPGUI_LIBRARY_NAME} Core Widgets PrintSupport)
+target_include_directories(sciqlopgui PUBLIC
+ $
+ $
+ )
-
-INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME}
- RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
- LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
- ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
-)
-add_dependencies(${SQPGUI_LIBRARY_NAME} ${SQPCORE_LIBRARY_NAME})
-
-# Find CATALOGUE_API
-include_directories("${CATALOGUEAPI_INCLUDE}")
-TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${CATALOGUEAPI_LIBRARIES})
-INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME}
- RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
- LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
- ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
+target_link_libraries(sciqlopgui PUBLIC
+ Qt5::Widgets
+ Qt5::PrintSupport
+ Qt5::Svg
+ sciqlopcore
)
-add_dependencies(${SQPGUI_LIBRARY_NAME} CatalogueAPI)
-
-# From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
-# Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order.
-# The DEFINE_SYMBOL target property is also added as a compile definition as a special convenience case for SHARED and MODULE library targets
-IF(BUILD_SHARED_LIBS)
- SET_TARGET_PROPERTIES(${SQPGUI_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS "SCIQLOP_EXPORT")
-ELSE()
- TARGET_COMPILE_DEFINITIONS(${SQPGUI_LIBRARY_NAME} PUBLIC "SCIQLOP_STATIC_LIBRARIES")
-ENDIF()
-
-# Set the variable to parent scope so that the other projects can copy the
-# dependent shared libraries
-SCIQLOP_SET_TO_PARENT_SCOPE(SQPGUI_LIBRARY_NAME)
-
-# Copy extern shared libraries to the lib folder
-SCIQLOP_COPY_TO_TARGET(LIBRARY ${SQPGUI_LIBRARY_NAME})
-
-# Add the files to the list of files to be analyzed
-LIST(APPEND CHECKSTYLE_INPUT_FILES ${MODULE_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
-# Vera++ exclusion files
-LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/vera-exclusions/exclusions.txt)
-SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
-
-#
-# Compile the tests
-#
-IF(BUILD_TESTS)
- INCLUDE_DIRECTORIES(${SOURCES_DIR})
- FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
- FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
- SET( TEST_LIBRARIES ${SQPGUI_LIBRARY_NAME})
-
- FOREACH( testFile ${TESTS_SOURCES} )
- GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
- GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
-
- # Add to the list of sources files all the sources in the same
- # directory that aren't another test
- FILE (GLOB currentTestSources
- ${testDirectory}/*.c
- ${testDirectory}/*.cpp
- ${testDirectory}/*.h)
- LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
- # LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
-
- ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
- set_property(TARGET ${testName} PROPERTY CXX_STANDARD 14)
- set_property(TARGET ${testName} PROPERTY CXX_STANDARD_REQUIRED ON)
- TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES} )
- qt5_use_modules(${testName} Test)
-
- ADD_TEST( NAME ${testName} COMMAND ${testName} )
-
- SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName} ${EXTERN_SHARED_LIBRARIES})
- ENDFOREACH( testFile )
-
- LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
- LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
- LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
- SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
-ENDIF(BUILD_TESTS)
-
-#
-# Set the files that must be formatted by clang-format.
-#
-LIST (APPEND FORMATTING_INPUT_FILES ${MODULE_SOURCES})
-SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
-
-#
-# Set the directories that doxygen must browse to generate the
-# documentation.
-#
-# Source directories:
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
-LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
-# Source directories to exclude from the documentation generation
-#LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
-SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
+install(TARGETS sciqlopgui EXPORT SciQLOPGuiConfig
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-#
-# Set the directories with the sources to analyze and propagate the
-# modification to the parent scope
-#
-# Source directories to analyze:
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
-LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
-# Source directories to exclude from the analysis
-#LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
-SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
+install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SciQLOP)
+install(EXPORT SciQLOPGuiConfig DESTINATION share/SciQLOPGui/cmake)
+export(TARGETS sciqlopgui FILE SciQLOPGuiConfig.cmake)
diff --git a/gui/cmake/Findsciqlop-gui.cmake b/gui/cmake/Findsciqlop-gui.cmake
deleted file mode 100755
index b0f47f7..0000000
--- a/gui/cmake/Findsciqlop-gui.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-# - Try to find sciqlop-gui
-# Once done this will define
-# SCIQLOP-GUI_FOUND - System has sciqlop-gui
-# SCIQLOP-GUI_INCLUDE_DIR - The sciqlop-gui include directories
-# SCIQLOP-GUI_LIBRARIES - The libraries needed to use sciqlop-gui
-
-if(SCIQLOP-GUI_FOUND)
- return()
-endif(SCIQLOP-GUI_FOUND)
-
-set(SCIQLOP-GUI_INCLUDE_DIR ${sciqlop-gui_DIR}/../include)
-
-set (OS_LIB_EXTENSION "so")
-
-if(WIN32)
- set (OS_LIB_EXTENSION "dll")
-endif(WIN32)
-
-if (APPLE)
- set (OS_LIB_EXTENSION "dylib")
-endif(APPLE)
-
-set(SCIQLOP-GUI_LIBRARIES ${LIBRARY_OUTPUT_PATH}/libsciqlop_gui${DEBUG_SUFFIX}.${OS_LIB_EXTENSION})
-
-set(SCIQLOP-GUI_FOUND TRUE)
diff --git a/pictures/sciqlop_screenshot.png b/pictures/sciqlop_screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..deee5dcc95a2c0cc0ff2154845d7ac7f0baa9ffb
GIT binary patch
literal 696774
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